AVAssetReader 采样率

Posted

技术标签:

【中文标题】AVAssetReader 采样率【英文标题】:AVAssetReader samplerate 【发布时间】:2011-11-22 21:46:43 【问题描述】:

如何使用 AVAssetReader 计算从 iPod 库中获取的歌曲的采样率。我想我可以很容易地获得样本的数量,(无论如何我已经成功地阅读了样本..),但我不知道在哪里可以获得歌曲的长度(以秒为单位)。

注意MPMediaItem没有Media Item的长度属性,或许有其他方法可以通过这个API获取item的长度?

【问题讨论】:

【参考方案1】:

您可以使用MPMediaItem 来获取长度。查看MPMediaItemPropertyPlaybackDuration 属性键。文档状态:

媒体项目的播放时长。 Value 是一个 NSNumber 对象,以 NSTimeInterval 表示持续时间(以秒为单位)。

【讨论】:

不知道我怎么会错过那个,检查了文档。不管怎么说,还是要谢谢你。然而,事实证明我不能以这种方式使用 AVAssetReader 来达到我的目的,我只知道之后的样本量,这为时已晚。不幸的是,将 iPod 文件导出到我的文档文件夹时,ExtAudioFile 在尝试读取声音文件的属性时返回错误。 查看音频文件服务 API。我认为您可以将AudioFileGetProperty() 函数与kAudioFilePropertyBitRate 键一起使用。 见:***.com/questions/8235572/… -- 我不知道它为什么会失败【参考方案2】:

如果您仍然对采样率感到疑惑,可以这样做: 获得您感兴趣的 AVAssetTrack 后,您可以获取 AudiostreamBasicDescription 并检查它以找到原始采样率。

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

double sampleRate = trackAsbd->mSampleRate;

省略错误检查...

【讨论】:

以上是关于AVAssetReader 采样率的主要内容,如果未能解决你的问题,请参考以下文章

libfdk_aac音频采样率和编码字节数注意

如何获得本机(硬件支持)音频采样率以避免内部采样率转换?

tc397can的采样率怎么设置

ADC采样率,符号率

[随笔] 音频, 采样, 采样率, 样本大小, 样本编码

AudioTrack 采样率不一致