Есть ли способ автоматически настроить параметры эквалайзера при изменении аудиовыхода?

У меня есть определенные настройки эквалайзера, которые я предпочитаю использовать для своих динамиков дома, однако, когда я использую динамики ноутбука или Bluetooth-наушники, я предпочитаю иметь плоский эквалайзер. Есть ли способ указать разные настройки эквалайзера для каждого аудиовыхода и автоматически переключаться на правильную настройку при изменении аудиовыхода?

Вы хотите использовать Automator для скрипта мыши — выберите вывод — выберите приложение (предположительно iTunes), затем выберите эквалайзер? Все это должно быть выполнимо с помощью инструментов автоматизации Apple.
Спасибо, я понял, что настройки только эквалайзера iTunes, вероятно, будет достаточно для моих нужд, которые легко настроить с помощью AppleScript.
Отличный вопрос - и еще лучший ответ - +1 со всех сторон

Ответы (1)

Чтение текущего аудиовыхода дает «Встроенный выход» как для наушников, так и для внутренних динамиков, однако нам нужно иметь возможность различать наушники и динамики. Для этого вы можете использовать код из этого ответа для создания программы, которая проверяет, подключены ли наушники или используется другой аудиовыход:

#include <CoreAudio/CoreAudio.h>
#include <iostream>

void updateEQ() {
    AudioDeviceID defaultDevice = 0;
    UInt32 defaultSize = sizeof(AudioDeviceID);

    const AudioObjectPropertyAddress defaultAddr = {
        kAudioHardwarePropertyDefaultOutputDevice,
        kAudioObjectPropertyScopeGlobal,
        kAudioObjectPropertyElementMaster
    };

    AudioObjectGetPropertyData(kAudioObjectSystemObject, &defaultAddr, 0, NULL, &defaultSize, &defaultDevice);

    AudioObjectPropertyAddress property;
    property.mSelector = kAudioDevicePropertyDataSource;
    property.mScope = kAudioDevicePropertyScopeOutput;
    property.mElement = kAudioObjectPropertyElementMaster;

    UInt32 dataSourceId = 0;
    UInt32 dataSourceIdSize = sizeof(UInt32);

    AudioObjectGetPropertyData(defaultDevice, &property, 0, NULL, &dataSourceIdSize, &dataSourceId);

    if (dataSourceId == 'hdpn') {
        std::cout << "Changed to headphones" << std::endl;
        system("osascript <<path to speaker EQ script>>");
    } else {
        std::cout << "Changed to not headphones" << std::endl;
        system("osascript <<path to other EQ script>>");
    }
}


int main(int argc, const char * argv[])
{
    updateEQ();
    return 0;
}

Каждый сценарий эквалайзера представляет собой простой сценарий AppleScript, который обновляет эквалайзер iTunes, например, сценарий эквалайзера динамика выглядит следующим образом:

tell application "iTunes"
    set current EQ preset to (get first EQ preset whose name is "Speakers")
    set EQ enabled to true
end tell