Настройка вывода /ввода звука

#objective-c #cocoa #macos #audio

#objective-c #cocoa #macos #Аудио

Вопрос:

Я искал по всему Интернету, но я не знаю, возможно ли это: может ли приложение Cocoa для Mac OS X изменить устройство ввода / вывода звука? Если да, то почему?

Ответ №1:

может ли приложение Cocoa для Mac OS X изменить устройство ввода / вывода звука?

Да, с помощью настройка the соответствующее свойство объекта аудиосистемы.

Если да, то почему?

Возможно, потому, что пользователь может захотеть изменить устройство ввода или вывода по умолчанию из приложения, вместо того, чтобы переходить к предварительной панели звука до и после или дополнительно использовать звуковое меню.

Комментарии:

1. Я не знал, что дополнительное звуковое меню может изменять устройства ввода / вывода. Как я могу это включить?

2. Джейлборк: удерживайте нажатой клавишу Option, когда вы нажимаете на нее.

3. Черт. Это потрясающе знать. Вообще не очень обнаруживаемый. Вероятно, должно быть там все время…

4. К сожалению, ссылки не работают. 🙁

5. @uchuugaka: Пожалуйста, отправьте радар.

Ответ №2:

Я знаю, что это старый пост, но в эти дни я изо всех сил пытался найти способ изменить устройство ввода / вывода звука с помощью кода, и я, наконец, нашел, как это сделать. На случай, если кто-то еще столкнется с такой же проблемой, вот ответ!

Существует утилита командной строки под названием SwitchAudio-OSX (https://code.google.com/p/switchaudio-osx /), которая позволяет переключать источник звука с терминала. Это открытый исходный код, и вы можете найти последнюю версию здесь:https://github.com/deweller/switchaudio-osx .

В любом случае, вы можете использовать эти строки для изменения устройства ввода / вывода звука:

 UInt32 propertySize = sizeof(UInt32);
AudioHardwareSetProperty(kAudioHardwarePropertyDefaultInputDevice, propertySize, amp;newDeviceID); // To change the input device
AudioHardwareSetProperty(kAudioHardwarePropertyDefaultOutputDevice, propertySize, amp;newDeviceID); // To change the output device
AudioHardwareSetProperty(kAudioHardwarePropertyDefaultSystemOutputDevice, propertySize, amp;newDeviceID); // To change the system output device
  

Где newDeviceID является экземпляром AudioDeviceID и представляет идентификатор устройства, которое вы хотите выбрать. Кроме того, с помощью этого кода можно получить список всех доступных устройств:

 AudioDeviceID dev_array[64];
AudioHardwareGetProperty(kAudioHardwarePropertyDevices, amp;propertySize, dev_array);
int numberOfDevices = (propertySize / sizeof(AudioDeviceID));