如何在 iOS 中获取现有 MP3 或 AAC 的比特率?

Posted

技术标签:

【中文标题】如何在 iOS 中获取现有 MP3 或 AAC 的比特率?【英文标题】:How to get the bit rate of existing MP3 or AAC in iOS? 【发布时间】:2014-04-23 10:44:42 【问题描述】:

我想向用户显示现有 MP3 文件和 AAC 文件的比特率,但我不知道如何正确提取这些文件的比特率。

到目前为止,我已经尝试获取ExtAudioFileRefAudioConverterRef 指针,然后我想从转换器中获取比特率,但我的问题已经从第一步开始了。我得到NULLkExtAudioFileProperty_AudioConverter 属性:

    OSStatus status;
    AudioConverterRef result = NULL;

    UInt32 size = sizeof(result);
    status = ExtAudioFileGetProperty(fileRef, kExtAudioFileProperty_AudioConverter, &size, &result);

    assert(status == noErr);

    assert(result != NULL); // here it fails

我可以成功地从同一个fileRef 读取AudiostreamBasicDescription,所以fileRef 没问题。

如何获取压缩音频文件的比特率?

【问题讨论】:

【参考方案1】:

您可以通过ExtAudioFileRefAudioFileID 来实现:

- (void) someMethod 
    ExtAudioFileRef extAudioFileRef = ...;  // init extAudioFileRef in some way

    AudioFileID audioFileId = [self getAudioFileID:extAudioFileRef];;
    UInt32 bitRate = [self getBitRate:audioFileId];


- (AudioFileID) getAudioFileID:(ExtAudioFileRef)fileRef 
    OSStatus status;
    AudioFileID result = NULL;

    UInt32 size = sizeof(result);
    status = ExtAudioFileGetProperty(fileRef, kExtAudioFileProperty_AudioFile, &size, &result);
    assert(status == noErr);

    return result;


- (UInt32) getBitRate:(AudioFileID)audioFileId 
    OSStatus status;
    UInt32 result = 0;

    UInt32 size = sizeof(result);
    status = AudioFileGetProperty(audioFileId, kAudioFilePropertyBitRate, &size, &result);
    assert(status == noErr);

    return result;

【讨论】:

以上是关于如何在 iOS 中获取现有 MP3 或 AAC 的比特率?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 将立体声 mp3 拆分为单声道 aac

如何以编程方式将 mp3 转换为 iTunes 可播放的 aac/m4a 文件?

有没有办法用 Quartz Composer 播放 MP3 或 aac .pls 文件?

怎么把mp3转成aac格式?

在 Java 中将 WMA 和 AAC 转换为 MP3

MP3转AAC音频格式怎么使用音频转换器转换?