我正在尝试使用AVAudioEngine来录制麦克风和声音文件(当用户点击按钮时播放的声音) . 我已将mic inputNode连接到mainMixer,以及一些用于播放声音文件的AVAudioPlayerNodes . 我在mainMixer上安装了一个水龙头来捕获声音并将其写入文件 . 声音也会传送到扬声器 .

这是我的音频图的基本布局:

-------------
mic  --> |           |
         | mainMixer | --> speaker
file --> |           |
         -------------
               |
              tap
        (writes to file)

默认情况下,声音通过接收器/耳机扬声器而不是iPhone底部的扬声器播放 .

不幸的是,这意味着通过扬声器输出的声音太低而且难以听到 - 我希望用户能够在播放和录制时听到声音文件 . 所以我希望通过底部扬声器播放声音效果 .

如果我改变音频会话以使用底部扬声器进行播放,我会得到一个反馈循环,因为麦克风输入和底部扬声器播放的声音再次由麦克风拾取 . (奇怪的是,这适用于iPad,没有创建反馈循环 . 当然,iPad没有耳机,因此在该设备上,声音总是通过主扬声器听到 . )

我有两个问题:

  • 是否可以仅将声音文件路由到底部扬声器?我不想通过任何扬声器输出麦克风的声音 . 但是,应记录麦克风和声音文件的声音 .

  • 为什么我在iPhone上获得反馈循环但不在iPad上?是否可以通过底部扬声器输出所有声音而无需获得反馈回路?