15

マルチトラックレコーダーの簡単な概念実証を設計しています。

明らかな出発点は、ファイルA.cafからヘッドフォンまで再生すると同時に、マイク入力をファイルB.cafに録音することです。

この質問(オーディオの録音と再生を同時に行う)は、私が作業できるレベルが3つあることを示しています。

  • AVFoundation API(AVAudioPlayer + AVAudioRecorder)
  • オーディオキューAPI
  • Audio Unit API(RemoteIO)

働くのに最適なレベルは何ですか?明らかに、一般的な答えは、仕事を成し遂げる最高レベルで作業することです。それはAVFoundationです。

しかし、私はレイテンシーの問題のために諦めた人からこの仕事を引き受けています(彼はファイル間に0.3秒の遅延がありました)ので、これらの問題を回避するためにもっと低いレベルで作業する必要があるかもしれませんか?

さらに、Springboardで利用できるソースコードは何ですか?私はSpeakHereサンプル(http://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html)を見てきました。もっと簡単なものが見つからない場合は、これを使用します。

しかし、誰かがもっと簡単な/他の何かを提案できますか?回避できるのであれば、C++コードを使用したくありません。

AVFoundationを使用してこれを行う公開コードを知っている人はいますか?

編集:AVFoundationの例はこちら:http ://www.iphoneam.com/blog/index.php?title = using-the-iphone-to-record-audio-a-guide&more = 1&c = 1&tb = 1&pb = 1

編集(2):ここではるかに見栄えの良いもの:http ://www.switchonthecode.com/tutorials/create-a-basic-iphone-audio-player-with-av-foundation-framework

EDIT(3):AVAudioRecorderを使用してiPhoneでオーディオを録音するにはどうすればよいですか?

4

3 に答える 3

6

レイテンシーの問題を回避するには、AVFoundationよりも低いレベルで作業する必要があります。Appleのこのサンプルコードをチェックしてください-Auriotouch。リモートI/Oを使用します。

于 2011-08-25T05:47:02.703 に答える
5

Virajによって提案されたように、ここに答えがあります。

はい、AVFoundationを使用して非常に良い結果を得ることができます。まず、プレーヤーとレコーダーの両方にとって、それらをアクティブ化することは2つのステップのプロセスであるという事実に注意を払う必要があります。

まず、プライミングします。

次に、それを再生します。

だから、すべてを準備します。次に、すべてを再生します。

これにより、レイテンシが約70ミリ秒に短縮されます。メトロノームティックを録音し、iPhoneをスピーカーにかざして同時に録音しながら、スピーカーから再生してテストしました。

2番目の録音には明確なエコーがありました。これは約70msであることがわかりました。正確なオフセットを取得するために、Audacityで信号を分析することもできました。

したがって、すべてを並べるために、Selector:x withObject:y afterDelay:70.0/1000.0を実行します。

隠れた障害がある可能性があります。たとえば、遅延はデバイスごとに異なる場合があります。デバイスのアクティビティによっても異なる場合があります。プレーヤーの起動とレコーダーの起動の間にスレッドが中断/再スケジュールされる可能性もあります。

しかし、それは機能し、オーディオキュー/ユニットをいじるよりもずっときれいです。

于 2011-08-28T07:00:22.007 に答える
1

この問題が発生し、プロジェクトでのPreferredHardwareIOBufferDurationパラメータを変更するだけで解決しましたAudioSession。現在、レイテンシはわずか6ミリ秒だと思います。これは、私のアプリには十分です。

良い説明があるこの答えをチェックしてください。

于 2015-04-07T15:04:10.717 に答える