Панорамирование звука между верхним и нижним динамиками на iPhone 7

Можно ли воспроизводить звук на верхнем или нижнем динамике на iPhone 7 и более поздних моделях? У меня нет одного из этих телефонов, но я понимаю, что iOS смешивает стереозвук и воспроизводит его с обоих громкоговорителей, когда телефон находится в портретном режиме. Я знаю, что он направляет левый и правый каналы в соответствующие колонки в ландшафте, но я не могу найти документацию о поведении в портретном режиме.

Можно ли ограничить воспроизведение только одним громкоговорителем или другим, или панорамировать между верхним и нижним? Моя библиотека не может работать с деструктивной интерференцией обоих динамиков, играющих одновременно.

Ответы

Ответ 1

Оказывается, мой вопрос был ошибочным. Трудно получить достоверную информацию, когда вы не можете самостоятельно тестировать устройство.

На iPhone 7 и новее стереоканалы фактически направляются к отдельным громкоговорителям, хотя стереофонического разделения нет. Левый канал направляется на нижний громкоговоритель, а правый канал направляется к верхнему/гарнитурному динамику. Использование атрибута pan также может выполнить одно и то же.

Наконец, есть еще один вариант с назначением каналов. Используя AVAudioSession.sharedInstance.currentRoute.outputs, два динамика в совокупности отображаются как один выход (outputs[0]). Внутри этого выхода находятся два канала, outputs[0].channels[0] и outputs[0].channels[1]. Сопоставление с любым из них с назначением каналов также работает, при этом первое отображение канала на нижний громкоговоритель, а второе - сверху.

Любой из этих методов отлично подходит для маршрутизации звука на новые стереодинамики, даже если телефон находится в портретной ориентации.

Для тех, кто хочет попробовать на своем собственном устройстве, я собрал тестовое приложение, которое проверяет различные подходы https://github.com/brian-armstrong/speaker-tester

Ответ 2

Я хочу добавить ответ Брайану Армстронгу. Каналы (выходы [0].channels [0] и выходы [0].channels [1]) различаются в зависимости от положения iPhone.