EZAudio ライブラリを使用して Objective-C で iPhone アプリを作成しています。
EZMicrophone クラスと EZRecorder クラスを使用して、オーディオをディスクに保存します。それでも、録音と保存を遅らせたいので、EZMicrophone が使用するデリゲート メソッドで受け取った AudioBufferList 構造体を NSMutableArray に渡す必要があります。
デリゲート メソッドで受け取った AudioBufferList 構造体を後で使用するために NSMutableArray に渡すのに問題があります。
AudioBufferList 構造体を NSValue にカプセル化しました。
起源
デリゲート メソッドは次のとおりです。
- (void)microphone:(EZMicrophone *)microphone
hasBufferList:(AudioBufferList *)bufferList
withBufferSize:(UInt32)bufferSize
withNumberOfChannels:(UInt32)numberOfChannels {
NSValue *audioData = [NSValue valueWithBytes:bufferList objCType:@encode(AudioBufferList)];
[self.listOfBufferList addObject:audioData];
}
そして、AudioBufferList の NSMutableArray を受け取るメソッドは次のとおりです。
- (void)createAudioFile {
for(int i = 0;i<self.listOfBufferList.count;i++) {
AudioBufferList bufferList;
[self.listOfBufferList[i] getBytes:&bufferList length:BufferSize];
[self.recorder appendDataFromBufferList:&bufferList
withBufferSize:BufferSize];
}
[self.recorder closeAudioFile];
}
エラーが発生します:
エラー: アプリでファイルを再生すると、オーディオ ファイルからオーディオ データを読み取れませんでした (-66567)
でもいつ :
[self.recorder appendDataFromBufferList:&bufferList
withBufferSize:BufferSize];
はデリゲート メソッドにあり、オーディオ ファイルは問題なく読み取られるので、私の質問は、その AudioBufferList 構造体をプロセスで失われないオブジェクトにカプセル化するにはどうすればよいかということです。私のアプリのために、それらが必要であることを知っています2 つの別々の方法。
また、アプリをデバッグすると、createAudioFile メソッドで、構造変数が適切にコピーされていることがわかりますが、(void*) であるバッファーはデリゲート メソッドで見つかったものとは異なります。(内容とアドレスが異なります)
メソッドを通過させようとしているコア オーディオ タイプの AudioBufferList と AudioBuffer を次に示します。
struct AudioBufferList
{
UInt32 mNumberBuffers;
AudioBuffer mBuffers[1]; // this is a variable length array of mNumberBuffers elements
};
typedef struct AudioBufferList AudioBufferList;
struct AudioBuffer
{
UInt32 mNumberChannels;
UInt32 mDataByteSize;
void* mData;
};
typedef struct AudioBuffer AudioBuffer;
ご協力いただきありがとうございます。もちろん、詳細についてはご相談に応じます。