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

时间:2014-04-23 10:44:42

标签: ios mp3 aac bitrate extaudiofile

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

到目前为止,我已经尝试获取AudioConverterRef的{​​{1}}指针然后我想从转换器中获取比特率,但我的问题已经在第一步开始了。我获得了ExtAudioFileRef属性的NULL

kExtAudioFileProperty_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 阅读AudioStreamBasicDescription,因此fileRef没问题。

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

1 个答案:

答案 0 :(得分:1)

您可以通过AudioFileID:{/ p>的ExtAudioFileRef来完成此操作

- (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;
}