AVAudioEngine を使用して、マイクからのサウンドとサウンド ファイル (ユーザーがボタンをタップしたときに再生される) を録音しようとしています。mic inputNode を mainMixer に接続し、サウンド ファイルを再生するためのいくつかの AVAudioPlayerNodes も接続しました。サウンドをキャプチャしてファイルに書き込むために、mainMixer にタップをインストールしました。音声もスピーカーにルーティングされます。
これは私のオーディオ グラフの基本的なレイアウトです。
-------------
mic --> | |
| mainMixer | --> speaker
file --> | |
-------------
|
tap
(writes to file)
デフォルトでは、サウンドは iPhone の下部にあるスピーカーではなく、レシーバー/イヤー スピーカーから再生されます。
残念ながら、これはスピーカーから出力されるサウンドが小さすぎて聞き取りにくいことを意味します。ユーザーが再生および録音されたサウンド ファイルを聞くことができるようにしたいと考えています。なので効果音は一番下のスピーカーから流してほしいです。
下部スピーカーを再生に使用するようにオーディオ セッションを変更すると、フィードバック ループが発生します。これは、マイク入力と下部スピーカーで再生されたサウンドの両方が再びマイクによって拾われるためです。(不思議なことに、これはフィードバック ループが作成されない iPad でも機能します。もちろん、iPad にはイヤー スピーカーがないため、そのデバイスではサウンドは常にメイン スピーカーから聞こえます。)
2 つの質問があります。
サウンドファイルのみを下のスピーカーにルーティングすることはできますか? マイクの音をどのスピーカーからも出力したくありません。ただし、マイクからの音とサウンド ファイルの両方を録音する必要があります。
iPhone ではフィードバック ループが発生するのに、iPad では発生しないのはなぜですか? フィードバック ループを発生させずに、すべてのサウンドをボトム スピーカーから出力することはできますか?