Как получить битрейт существующего MP3 или AAC в iOS?
Я хочу отобразить битрейт существующих файлов MP3 и файлов AAC пользователю, но я не знаю, как правильно извлечь битрейт этих файлов.
До сих пор я пытался получить AudioConverterRef
указатель 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
успешно, поэтому fileRef
Это хорошо.
Как получить битрейт сжатых аудио файлов?
1 ответ
Вы можете сделать это через AudioFileID
из 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;
}