2017-03-12 7 views
1

iPhoneのマイクからのオーディオを連続的に録音して処理します。リアルタイムオーディオ処理Swift

現在私はAVAudioRecorderとAVFoundationを使用しており、オーディオインアウトを8秒の ".wav"ファイルに記録しています。

代わりに、オーディオ入力をバッファに連続的に記録し、8秒の長さのバッファのチャンクを処理したいと考えています。

オーディオ入力をバッファに記録するにはどうすればできますか?そこから8秒間のチャンクを読み込むにはどうすればよいですか?

ありがとうございます!

+2

あなたが探しているものがリングバッファかもしれません。 –

+0

答えをいただきありがとうございます。バッファーコードに挿入する例を教えてください。 –

+1

オーディオをリアルタイムで処理したい場合は、AVAudioRecorderよりも低いレベルのものを使用したいと思うかもしれません。 - > https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQRecord/RecordingAudio.html#//apple_ref/doc/uid/TP40005343-CH4-SW1 –

答えて

3

AVCaptureDeviceのAVCaptureAudioDataOutputまたは処理用のタップを挿入したAVAudioEngineをAudio Toolbox:Audio Queue ServicesのRemoteIOオーディオユニットに入れて、 Audio ToolboxのAudioFileまたはExtAudioFileを使用して、書き込んだフレームの数をカウントし、新しい8秒のファイルを開始するタイミングを決めることができます。

リズミックFistmanは、上記の指摘のように、より安全になりますがなかった場合

キャプチャコールバックのようなもの--pushes-へ - >リングバッファ< --pulls-フロム・ファイル書き込みコード

1つのファイルを閉じて別のファイルを開くときには、キャプチャコールバックが引き続き入力されるため、ファイルI/Oをブロックすると、フロアにデータをドロップする可能性が非常に高くなります。

コールバックからメモリ内の8秒間のバッファにデータを書き込む方法があると思います。満杯になったら、新しいバッファをmallocしてその中に記録を開始する間に、作者はそれが終わったら古いバッファを破棄します)。

編集:また、あなたの質問でSwiftについて何も見ませんでしたが、これはSwiftやC/Obj-Cからうまくいくはずです。

関連する問題