设置kExtAudioFileProperty_ClientDataFormat报错时的处理
项目使用到ExtAudioConverter这样一个第三方库去将录音的mp3文件转成wav来做语音识别,但是后来莫名其妙在设置kExtAudioFileProperty时报错,原先的写法是这样,有兴趣可以去找这个库去看看:
ExtAudioFileSetProperty(settings.outputFile,kExtAudioFileProperty_ClientDataFormat,sizeof(desc), &settings.inputPCMFormat);
CheckError(ExtAudioFileSetProperty(settings.inputFile,
kExtAudioFileProperty_ClientDataFormat,
sizeof(settings.inputPCMFormat),
&settings.inputPCMFormat),
"Setting client data format of input file failed");
//If the file has a client data format, then the audio data in ioData is translated from the client format to the file data format, via theExtAudioFile's internal AudioConverter.
if(settings.outputFormat.mFormatID!=kAudioFormatMPEGLayer3) {
CheckError(ExtAudioFileSetProperty(settings.outputFile,
kExtAudioFileProperty_ClientDataFormat,
sizeof(settings.inputPCMFormat),
&settings.inputPCMFormat),
"Setting client data format of output file failed");
}
下方解决方法是借鉴别人的,原地址是https://my.oschina.net/vimfung/blog/290662,至于为什么,我还得研究研究,哈哈。
指定ExtAudioFile的编码器为软件编码器即可。如:
// 先设置编码器UInt32codec = kAppleSoftwareAudioCodecManufacturer;ExtAudioFileSetProperty(fileRef, kExtAudioFileProperty_CodecManufacturer,sizeof(codec), &codec);
//再设置格式AudioStreamBasicDescription desc;
ExtAudioFileSetProperty(fileRef, kExtAudioFileProperty_ClientDataFormat,sizeof(desc), &desc);
网友评论