У меня есть определенные настройки эквалайзера, которые я предпочитаю использовать для своих динамиков дома, однако, когда я использую динамики ноутбука или Bluetooth-наушники, я предпочитаю иметь плоский эквалайзер. Есть ли способ указать разные настройки эквалайзера для каждого аудиовыхода и автоматически переключаться на правильную настройку при изменении аудиовыхода?
Чтение текущего аудиовыхода дает «Встроенный выход» как для наушников, так и для внутренних динамиков, однако нам нужно иметь возможность различать наушники и динамики. Для этого вы можете использовать код из этого ответа для создания программы, которая проверяет, подключены ли наушники или используется другой аудиовыход:
#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
bmike
брехня
bmike