Как получить битрейт существующего 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;
}
Другие вопросы по тегам