2011-11-22 220 views
0

如何計算使用AVAssetReader從iPod庫中獲取的歌曲的採樣率。我認爲我可以很容易地獲得樣本數量(我已經成功地讀取了樣本..),但我不知道我可以在哪裏獲得歌曲的長度(以秒爲單位)。AVAssetReader採樣率

請注意,MPMediaItem沒有屬性的媒體項目的長度,也許有另一種方式來通過此API來獲取該項目的長度?

回答

1

您可以使用MPMediaItem來獲得長度。看看MPMediaItemPropertyPlaybackDuration屬性鍵。文檔狀態:

媒體項目的播放持續時間。 Value是一個NSNumber對象,表示以NSTimeInterval爲單位的持續時間(以秒爲單位)。

+0

不知道我怎麼會錯過了一個,查了資料。不管怎麼說,還是要謝謝你。但事實證明,我不能使用AVAssetReader來達到我的目的,我只知道樣本數量,這已經太晚了。不幸的是,當將iPod文件導出到我的文檔文件夾時,ExtAudioFile在嘗試讀取聲音文件的屬性時返回錯誤。 –

+0

查看音頻文件服務API。我認爲你可以使用'AudioFileGetProperty()'函數和'kAudioFilePropertyBitRate'鍵。 –

+0

請參閱:http://stackoverflow.com/questions/8235572/extaudiofilegetproperty-failing - 我不完全知道爲什麼它的失敗 –

0

如果你實際上仍不清楚這個採樣率,它是像這樣做: 一旦你有你AVAssetTrack你有興趣,你可以得到AudioStreamBasicDescription和檢查,要找到原來的採樣率。檢查省略

AVAssetTrack * track = ...; 
CMAudioFormatDescriptionRef trackDescription = static_cast<CMAudioFormatDescriptionRef>([track.formatDescriptions firstObject]); 
const AudioStreamBasicDescription * trackAsbd = CMAudioFormatDescriptionGetStreamBasicDescription(trackDescription); 

double sampleRate = trackAsbd->mSampleRate; 

錯誤...