2012-10-17 54 views
0

我正在編寫一個iOS應用程序,需要確定從互聯網上下載的mp3文件中的沉默時段。如何掃描沉默的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); 
} 

但它與錯誤1718449215設置的屬性失敗,所以我假設它不會允許我從MP3轉換爲PCM。我希望能夠對文件進行預處理,以便在用戶播放之前知道靜音會發生在哪裏。

任何建議將不勝感激。

謝謝。

回答

0

您可以使用AVAssetReader和AVAssetWriter API將mp3文件轉換爲原始PCM(或.wav)數據。