![](/img/trans.png)
[英]AudioBufferList to float ** conversion EZAudio EZMicrophone for Visual Plotting
[英]EZAudio : how to store an AudioBufferList struct to an NSMutableArray for later use?
我正在使用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結構封裝到一個不會在處理過程中丟失的對象中,就我的應用而言,我知道需要兩種不同的方法。
此外,當我調試應用程序時,可以在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;
非常感謝您的幫助,我當然可以提供更多詳細信息。
您應該將AudioBufferLists保存在ac數組中。 例如,您可以創建帶有AudioBufferLists數量和包含緩沖區列表的數組的結構。 如果知道要使用的最大緩沖區列表數,則可以定義具有該大小的數組,並將添加到數組中的實際數量存儲在number成員中。
struct MyBufferLists
{
UInt32 mNumberBufferLists;
AudioBufferList mBufferLists[9]; // enter your max number instead of 9
};
將此結構添加到需要它的類中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.