Позиционный звук AVFoundation не работает на устройстве iOS

Я пытаюсь воспроизвести позиционный звук в приложении Swift для iOS, используя AVAudioEngine и AVAudioEnvironmentNode. Я могу успешно воспроизводить звук и слышать его пространственно, переключаясь между обоими выходами в стерео, но только в симуляторе. Когда я запускаю то же приложение на iPhone, звук воспроизводится, но в обоих ушах, а не панорамируется при перемещении источника. Есть ли какая-то особая конфигурация, которую мне нужно сделать, например, вручную обрабатывать аудиовыход устройства?

Я инициализирую звуковой движок и плеер так:

let audioEngine = AVAudioEngine()
let audioEnv = AVAudioEnvironmentNode()

audioEngine.attach(audioEnv)
audioEngine.connect(
    audioEnv,
    to: audioEngine.mainMixerNode,
    format: audioEnv.outputFormat(forBus: 0)
)
try audioEngine.start()

let player = AVAudioPlayerNode()
audioEngine.attach(player)
audioEngine.connect(
    player,
    to: audioEnv,
    format: AVAudioFormat(standardFormatWithSampleRate: 44100, channels: 1)
)

player.scheduleFile(...)
player.play()

Мои исходные файлы - это моно канал .wav.

В какой-то момент в будущем я изменю положение игрока:

player.position = AVAudio3DPoint(x: 5, y: 0, z: 0)

Это должно воспроизводиться только (или в основном) в одном ухе. При запуске в симуляторе iOS он делает именно то, что я ожидаю. Однако на реальном устройстве он просто играет равномерно в обоих ушах независимо от того, что установлено на player.position. Я подозреваю, что это связано с настройкой audioEngine.

Мысли?


person babybluesedan    schedule 07.02.2019    source источник


Ответы (1)


Попробуйте установить:

audioEnv.renderingAlgorithm = .HRTFHQ // or .HRTF
person EPage_Ed    schedule 12.12.2019