2011-11-22 140 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; 

错误...