2010-07-06 52 views
3

我想使用QuickTime-API提取quicktime電影中的每個音頻通道。這意味着如果文件有5.1環繞聲,我最終需要6個音頻文件。 但目前我不知道如何管理。到現在爲止,我有:提取QuickTime文件中的每個音頻通道

OSStatus err = noErr; 
MovieAudioExtractionRef extractionSessionRef = nil; 
Boolean allChannelsDiscrete = true; 
int flags; 
int numFrames; 
AudioBufferList *mBufferList; 
err = MovieAudioExtractionBegin(movie, 0, &extractionSessionRef); 


// disable mixing of audio channels 
err = MovieAudioExtractionSetProperty(extractionSessionRef, 
    kQTPropertyClass_MovieAudioExtraction_Movie, 
    kQTMovieAudioExtractionMoviePropertyID_AllChannelsDiscrete, 
    sizeof (Boolean), &allChannelsDiscrete); 

err = MovieAudioExtractionFillBuffer(extractionSessionRef, &numFrames, 
    mBufferList, &flags); 
if (flags & kQTMovieAudioExtractionComplete) 
{ 
    // extraction complete! 
} 
err = MovieAudioExtractionEnd(extractionSessionRef); 

的問題是,我不知道怎麼去mBufferList以及如何每通道爲WAV 48kHz的出口。你可以幫我嗎?該示例來自this page

+0

如果你解釋你正在使用的庫,你可能會得到更多的答案。 – 2010-07-06 09:32:57

+0

好吧,只是補充說我使用Quicktime-API/QuickTime-SDK – Berschi 2010-07-06 09:47:39

回答

0

不知道這是否有助於 - 有這樣做不使用QuickTime的SDK的方法:

您需要解析QuickTime的「MOOV樂」原子得到音軌類型/ bps的/採樣率/端等。 ,然後找到「stsc」和「stco」原子到samples_per_chunk和每個塊偏移量。然後,您只需使用這些偏移量讀取「mdat」atom原始數據並將樣本寫入目標文件。

這不是一個簡單的方法 - 但它適用於我。

相關問題