如何在 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 文件的比特率,但我不知道如何正确提取这些文件的比特率。
到目前为止,我已经尝试获取ExtAudioFileRef
的AudioConverterRef
指针,然后我想从转换器中获取比特率,但我的问题已经从第一步开始了。我得到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
我可以成功地从同一个fileRef
读取AudiostreamBasicDescription
,所以fileRef
没问题。
如何获取压缩音频文件的比特率?
【问题讨论】:
【参考方案1】:您可以通过ExtAudioFileRef
的AudioFileID
来实现:
- (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 的比特率?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将 mp3 转换为 iTunes 可播放的 aac/m4a 文件?