0

我编写了一个 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。我希望能够对文件进行预处理,以便在用户播放之前知道静音将在哪里发生。

任何建议将不胜感激。

谢谢。

4

1 回答 1

0

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

于 2012-10-17T15:00:14.790 回答