iOS - 如何将混合音频合成导出到文件大小最小的文件?

Posted

技术标签:

【中文标题】iOS - 如何将混合音频合成导出到文件大小最小的文件?【英文标题】:iOS - how can I export a mix audio composition to a file of smallest file size? 【发布时间】:2013-09-12 13:24:29 【问题描述】:

我用AVAudioRecorder录制声音,输出文件格式为.caf。然后我用AVMutableComposition 在我录制的音频上添加背景声音(也是.caf 格式)。当我尝试播放它时,它可以完美运行。

现在我想将其导出并使用以下代码保存。但是,导出文件的文件大小增加了很多。 (比如我录制的音频是16045byte,背景音是50400byte,导出的文件是246472byte,比两个文件的和大几倍。)

AVAssetExportSession *export = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetAppleM4A];
export.audioMix = audioMix;
export.outputFileType = AVFileTypeAppleM4A;
NSString *exportURL = [NSString stringWithFormat:@"%@/export.m4a", DOCUMENTS_FOLDER];
NSURL *outputURL = [NSURL fileURLWithPath:exportURL];
export.outputURL = outputURL;

[export exportAsynchronouslyWithCompletionHandler:^
    int exportStatus = export.status;

    switch (exportStatus) 
       // check the status and do the handling
    
];

那么,有人可以教我如何使输出的音频文件更小吗?谢谢。

【问题讨论】:

【参考方案1】:

在此处阅读有关文件类型的更多信息:

https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVFoundation_Constants/Reference/reference.html#//apple_ref/doc/uid/TP40009539:

NSString *const AVFileTypeAIFC;
NSString *const AVFileTypeAIFF;
NSString *const AVFileTypeAMR;
NSString *const AVFileTypeCoreAudioFormat;
NSString *const AVFileTypeAppleM4V;
NSString *const AVFileTypeMPEG4;
NSString *const AVFileTypeAppleM4A;
NSString *const AVFileTypeQuickTimeMovie;
NSString *const AVFileTypeWAVE

AIFC 可能对您来说很有趣,因为它是经过压缩的。

您还必须将 presetName:AVAssetExportPresetAppleM4A 更新为 presetName:AVAssetExportPresetPassthrough

【讨论】:

嗨@Grzegorz,感谢您的参考。我尝试将 export.outputFileType 更改为 AVFileTypeAIFC,并将导出文件 export.m4a 更改为 export.aifc。但是,它不起作用。这是错误消息:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无效的输出文件类型”。我错过了什么吗? 你能粘贴supportedFileTypes的输出吗? developer.apple.com/library/mac/documentation/AVFoundation/… 啊,当你初始化课程时,你也有 AVAssetExportPresetAppleM4A - 我更新了我的答案。 这里是supportedFileTypes的输出:2013-09-12 21:56:20.648 VoiceRecorder[4831:c07] Supported Output: ("com.apple.m4a-audio")...好像它只支持 AVFileTypeAppleM4V。 哦,那我应该使用什么预设名称?

以上是关于iOS - 如何将混合音频合成导出到文件大小最小的文件?的主要内容,如果未能解决你的问题,请参考以下文章

混合不同大小的声音文件

格式工厂 音频合成问题

嗨我需要建立一个网站来混合两个音频文件并只导出一个,我该怎么做?

iOS 将 2 个或多个音频文件合并(混合)为 wav 格式

iOS - 混合两个音频文件

在 IOS 上使用 AVComposition 混合两个音频文件