首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用AudioToolBox将Wave文件保存到NSFileWrapper

用AudioToolBox将Wave文件保存到NSFileWrapper
EN

Stack Overflow用户
提问于 2012-11-01 00:23:22
回答 1查看 447关注 0票数 3

我使用了AudioToolBox框架中的ExtAudioFileCreateWithURL和ExtAudioFileWrite将样例保存到一个文件中。但现在我需要将其保存到NSFileWrapper,因为我现在使用的是NSDocument:

代码语言:javascript
复制
- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError 

有没有办法在NSMutableData对象中使用ExtAudioFileXXX函数,这样我就可以使用NSFileWrapper initRegularFileWithContents:(NSData*)contents方法?

用于保存到文件的精简代码(可以正常工作):

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-01 01:15:44

在大多数情况下,使用外部文件是最佳解决方案。请注意,NSData具有用于未缓存和映射文件的初始化器。显然,在大多数情况下,您会希望最小化I/O,同时不消耗大量内存(并且您必须密切关注缓存内存的增长)。更进一步,考虑如何以另一种方式表示这些重要资产(子NSFileWrappers,链接)的文件包装器对象,因为文档的文件可能不是很小的文件(例如,单个周期)。

如果内存不是问题(例如,你只能处理小样本和有限的文件和文档),那么你可以使用AudioFileInitializeWithCallbacks,它适用于Wave (但不是所有格式)。这允许您在内存中处理自己的缓冲区,以便在内存中表示整个文件的连续分配。然后,创建NSData表示就很容易了--只需监视内存使用情况并确保独占读/写访问即可。请注意,NSData不需要创建深层副本--并将其纳入您的设计中。显然,在OS X上使用此选项会有更大的灵活性。在这种情况下,请确保您知道自己实际编写了多少代码。很有可能,一个好的基于磁盘的解决方案(如上所述)可以为您节省大量的磁盘写操作。

无论如何,这将比大多数基于NSFileWrapper的实现需要更多的考虑,因为您可能很快就会在每个文档中超过100MB的音频文件资产。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13162451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档