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