如何扫描mp3以保持沉默

时间:2012-10-17 12:35:06

标签: ios core-audio

我正在编写一个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。我希望能够预处理文件,以便在用户回放之前知道静音的位置。

任何建议都将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用AVAssetReader和AVAssetWriter API将mp3文件转换为原始PCM(或.wav)数据。