objective-c - 如何在 cocoa 中获取音频文件的比特率

标签 objective-c cocoa core-audio bitrate m4a

我需要从音频文件中获取比特率信息,出于某种原因,带有 kAudioFilePropertyBitRate 常量的 AudioFileGetProperty 函数总是为我返回 0。与 kAudioFilePropertyInfoDictionary 相同,生成的字典不包含比特率信息。如果是 mp3,我会尝试从原始数据中手动获取它,但我需要支持不同的文件格式,例如 m4a 和其他格式。还有其他方法吗?

最佳答案

如果您正在处理一个文件,您总是可以尝试使用 Spotlight 元数据 API。例如,假设您将音频文件的路径作为 NSString 或 CFStringRef 称为“路径”:

MDItemRef item = MDItemCreate( kCFAllocatorDefault, path );
CFNumberRef audioBitrate = MDItemCopyAttribute( item, kMDItemAudioBitrate );
CFNumberRef totalBitrate = MDItemCopyAttribute( item, kMDItemTotalBitrate );
CFRelease( item );

这并不理想,但至少可以为您提供一些更多的背景信息来说明为什么其他 API 无法正常工作。

我唯一能想到的另一件事:kAudioFilePropertyBitRate 仅在 OS X 10.5 中定义。如果您在 10.4 或更早版本上运行,您的代码仍会运行,但 AudioFile 框架根本不知道比特率属性,因此可能会返回零。

关于objective-c - 如何在 cocoa 中获取音频文件的比特率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/860388/

相关文章:

iOS - 生成并播放不确定的简单音频(正弦波)

ios - iOS 中音频文件耗时的毫秒(及更高)精度

ios - 如何以编程方式从iOS设备上删除应用程序?

iphone - 如何使用Xcode打开解密的IPA内容

cocoa - 拖放粘贴板数据

cocoa - 将 CDATA block 写入 NSXMLDocument 文件

iphone - 当文本太大时,文本不会显示在 UILabel 上。

ios - 当 segmentedControl 改变时在单元格之间切换

正则表达式太贪婪;几乎吃掉了我所有的行

iphone - 检测音频文件是否正在播放-iPhone