¿Hay alguna forma de ajustar automáticamente la configuración del ecualizador cuando cambia la salida de audio?

Tengo una configuración de ecualización particular que me gusta usar para mis parlantes en casa, sin embargo, cuando uso los parlantes de mi computadora portátil o los auriculares Bluetooth, prefiero tener un ecualizador plano. ¿Hay alguna manera de especificar diferentes configuraciones de ecualización para cada salida de audio y cambiar automáticamente a la configuración correcta cuando se cambia la salida de audio?

¿Está buscando usar Automator para escribir su mouse, seleccione la salida, seleccione la aplicación (presumiblemente iTunes) y luego seleccione el EQ? Todo eso debería ser factible con las herramientas de automatización de Apple.
Gracias, me di cuenta de que ajustar solo iTunes EQ probablemente sería suficiente para mis necesidades, que es fácil de ajustar desde AppleScript.
Gran pregunta, e incluso mejor respuesta, +1 en todos lados

Respuestas (1)

La lectura de la salida de audio actual da "Salida incorporada" tanto para los auriculares como para los altavoces internos; sin embargo, necesitamos poder diferenciar entre auriculares y altavoces. Para hacer esto, puede usar el código de esta respuesta para crear un programa que verifique si los auriculares están conectados o si hay otra salida de audio en uso:

#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;
}

Cada secuencia de comandos EQ es entonces una secuencia de comandos AppleScript simple que actualiza la ecualización de iTunes, por ejemplo, la secuencia de comandos EQ del altavoz es:

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