2011-09-10 6 views
6

私はかなり長い間これを苦労してきましたが、ネット上でコードの例はありません。誰でも助けてくれますか?Objective-c/IOS:オーディオファイルを後ろ向きに再生する最も簡単な方法は

私のアプリはAVFoundationを使ってオーディオを録音します。 @ 16ビット深度、2チャンネル、WAV

私はオーディオのバイトにアクセスできますが、私はそれをどのように逆転させるのか分かりません。

答えて

7

ウェーブデータサンプルはインターリーブされます。これは、データがこのように編成されていることを意味します。

Sample 1 Left | Sample 1 Right | Sample 2 Left | Sample 2 right ... Sample n Left | Sample n right 

各サンプルが16ビット(2バイト)であるため、最初の2チャネルのサンプル(つまり、左右の両方)は4バイトのサイズです。

あなたは次のように波形データのブロック内の最後のサンプルがあることを知っているこの方法:

wavDataSize - 4 

あなたはその後、最後に起動することによって、別のバッファにコピーすることにより、一度にそれぞれのサンプルをロードすることができます後方への記録と読書のウェーブデータの先頭に移動すると、ウェーブデータが反転して再生が逆になります。

編集:iOSでwaveファイルを読みやすい方法をご希望の場合は、Audio File Services Referenceをご覧ください。

編集2:

readPoint = waveDataSize; 
writePoint = 0; 
while(readPoint > 0) 
{ 
    readPoint -= 4; 
    Uint32 bytesToRead = 4; 
    Uint32 sample; 
    AudioFileReadBytes(inFile, false, maxData, &bytesToRead &sample); 
    AudioFileWriteBytes(outFile, false, writePoint, &bytesToRead, &sample); 

    writePoint += 4; 
} 
+0

使用しない理由は、オーディオを逆にします難しいのは、ヘッダーとチャンクを持つwavファイル形式の場合です。 – zaph

+0

@CocoaFu:そうではありません。 Appleは、waveファイルを処理する関数をたくさん提供しています。このフォーマットは、あなた自身で行うことが困難なものではありません。 – Goz

+0

@Gozありがとう、あまりにも手間がかからない場合は、私の理解を助けるためのコードサンプルを提供できますか?これはどのようにコードワイズに達成されますか? – DaveSmith122

0

シングルチャンクWAVファイルを想定するとは、オーディオ・キューまたはRemoteIOバッファに、ファイルをmemmapping、と逆の順序で実行サンプルをコピーし、ファイルの終わりから始めてみてくださいコールバック中にこれらのAPIの1つを使用してオーディオを再生します。 WAV/RIFFヘッダー(通常は最初の44バイト)に到達する前にコピーを停止します。

0

MPMediaPlaybackでcurrentPlaybackRate(https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPMediaPlayback_protocol/Reference/Reference.html)