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

3

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

    
pregunta shearnonsense 25.03.2018 - 17:04

1 respuesta

1

La lectura de la salida de audio actual proporciona una "Salida incorporada" para los auriculares y los altavoces internos, sin embargo, debemos poder distinguir entre los auriculares y los altavoces. Para hacer esto, puede usar el código de esta respuesta para crear un programa que verifique si los auriculares están enchufados u otros La salida de audio está 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 de EQ es entonces una secuencia de comandos simple de AppleScript que actualiza la ecualización de iTunes, por ejemplo, la secuencia de comandos de 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
    
respondido por el shearnonsense 26.03.2018 - 00:42

Lea otras preguntas en las etiquetas