Geçerli ses çıkışını okumak hem kulaklık hem de dahili hoparlörler için "Dahili Çıkış" verir, ancak kulaklıklar ve hoparlörler arasında söyleyebilmemiz gerekir. Bunu yapmak için, kodu bu cevap Kulaklıkların takılı olup olmadığını veya başka bir ses çıkışının kullanımda olup olmadığını kontrol eden bir program oluşturmak için:
#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;
}
Her EQ betiği, iTunes'un EQ'sini güncelleyen basit bir AppleScript betiğidir, örneğin, hoparlör EQ betiği şöyledir:
tell application "iTunes"
set current EQ preset to (get first EQ preset whose name is "Speakers")
set EQ enabled to true
end tell