我用ExtAudioFileCreateWithURL和ExtAudioFileWrite從AudioToolBox框架,以我的樣品保存到一個文件。但現在我需要把它保存到NSFileWrapper因爲我現在用NSDocument:使用AudioToolBox到波形文件保存到NSFileWrapper
- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError
有沒有辦法使用ExtAudioFileXXX功能與NSMutableData對象,以便我可以使用NSFileWrapper initRegularFileWithContents:(NSData*)contents
方法?
剝離下來的代碼保存到文件(工作):
AudioStreamBasicDescription file_desc;
FillOutASBDForLPCM(file_desc, _sample_rate, _channel_count, 32, 32, true, false);
OSStatus rv = ExtAudioFileCreateWithURL(url, kAudioFileWAVEType, &file_desc, NULL, kAudioFileFlags_EraseFile, &fout);
if (rv == noErr){
int buff_size = sizeof(AudioBufferList) + sizeof(AudioBuffer);
AudioBufferList* bufferList = (AudioBufferList*)malloc(buff_size);
bufferList->mNumberBuffers = 1;
bufferList->mBuffers[0].mData = _samples;
bufferList->mBuffers[0].mNumberChannels = _channel_count;
bufferList->mBuffers[0].mDataByteSize = _channel_count * _frame_count * sizeof(float);
ExtAudioFileWrite(fout, _frame_count, bufferList);
free(bufferList);
ExtAudioFileDispose(fout);
}
感謝賈斯汀。由於音頻文件很少發生變化,我已經使用子NSFileWrappers來最小化寫入。如果fileWrapperOfType已經找到一個有效的NSFileWrapper,它會跳過它。我最終的解決辦法是使用ExtAudioFileCreateWithURL保存到用戶與之交互的外部文件,但推出自己的saveWAVFileToMemory程序存儲在我的NSFileWrapper音頻時使用。這爲用戶在導出期間提供了更多的文件格式選擇,但允許我使用NSFileWrappers進行內部保存。 –
@DaveStephenson實際執行解釋讚賞 - 歡呼聲。別客氣。 – justin