【问题标题】:AVFoundation positional audio not working on iOS deviceAVFoundation 位置音频在 iOS 设备上不起作用
【发布时间】:2025-11-20 19:25:07
【问题描述】:

我正在尝试使用 AVAudioEngineAVAudioEnvironmentNode 在 Swift iOS 应用程序中播放位置音频。我可以成功地很好地播放音频并听到空间化的声音,在立体声输出之间切换,但只能在模拟器中。当我在 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的配置有关。

想法?

【问题讨论】:

    标签: ios swift avfoundation ios-simulator avaudioplayernode


    【解决方案1】:

    尝试设置:

    audioEnv.renderingAlgorithm = .HRTFHQ // or .HRTF
    

    【讨论】:

      最近更新 更多