我正在编写一个iOS应用,需要识别从互联网下载的mp3文件中的静音时段。
通过AVAudioPlayer下载和播放是没有问题的,但我无法弄清楚如何访问mp3中的实际音频帧数据,以便我可以检测声音级别以检测静音。我试过了: -
NSURL *fileUrl = [[NSURL alloc] initFileURLWithPath:[self filename]];
ExtAudioFileRef eaf;
OSStatus err = ExtAudioFileOpenURL((CFURLRef)CFBridgingRetain(fileUrl), &eaf);
if (noErr != err)
{
/* handle error */
exit(-1);
}
AudioStreamBasicDescription format;
format.mSampleRate = 44100;
format.mFormatID = kAudioFormatLinearPCM;
format.mFormatFlags = kAudioFormatFlagsNativeEndian;
format.mBitsPerChannel = 16;
format.mChannelsPerFrame = 2;
format.mBytesPerFrame = format.mChannelsPerFrame * 2;
format.mFramesPerPacket = 1;
format.mBytesPerPacket = format.mFramesPerPacket * format.mBytesPerFrame;
err = ExtAudioFileSetProperty(eaf, kExtAudioFileProperty_ClientDataFormat, sizeof(format), &format);
if (noErr != err)
{
/* handle error */
NSLog(@"Error: %d", err);
exit(-1);
}
但它在set属性上失败,错误1718449215,所以我假设它不允许我从MP3转换为PCM。我希望能够预处理文件,以便在用户回放之前知道静音的位置。
任何建议都将不胜感激。
感谢。
答案 0 :(得分:0)
您可以使用AVAssetReader和AVAssetWriter API将mp3文件转换为原始PCM(或.wav)数据。