Получение битрейта или битовой глубины аудиофайла wav

Я использую AudioTrack для воспроизведения аудиофайла .wav. Все в порядке, но на данный момент я жестко запрограммировал разрядность аудиофайла при инициализации объекта AudioTrack в STATIC_MODE.

mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate, mChannels,
            AudioFormat.ENCODING_PCM_16BIT, dataSize, AudioTrack.MODE_STATIC);

Я хочу программно получить битовую глубину/битрейт файла .wav, а затем установить кодировку в объекте AudioTrack. Я пытался использовать MediaExtractor и MediaFormat, но это дает мне только следующую информацию:

mediaFormat:{mime=audio/raw, durationUs=10080000, channel-count=1, channel-mask=0, sample-rate=16000}

В документации MediaFormat сказано, что KEY_BIT_RATE предназначен только для кодировщика. Означает ли это, что я могу использовать эту опцию только при кодировании необработанных битов PCM. Если да, то какой еще может быть способ программно прочитать битрейт/битность? Я уже пытался получить информацию для того же файла на терминале, используя двоичный файл mediainfo, и он дает мне правильную разрядность.


person Swapnil    schedule 17.12.2015    source источник
comment
Есть какое-нибудь решение? Можешь поделиться?   -  person kAmol    schedule 26.09.2016
comment
Пока нет... Я все еще предполагаю, что знаю разрядность аудиофайла.   -  person Swapnil    schedule 26.09.2016
comment
Итак, вы даете стандартное значение, такое как 8, 16 и т. Д.?   -  person kAmol    schedule 26.09.2016
comment
Да.. на данный момент я сделал это   -  person Swapnil    schedule 26.09.2016


Ответы (3)


Вы всегда можете посмотреть 34-й и 35-й байты заголовка wav-файла. см. этот ресурс.

person mikeLundquist    schedule 18.01.2019

        int currentapiVersion = android.os.Build.VERSION.SDK_INT;
        int bitDepth;
        if (currentapiVersion >= android.os.Build.VERSION_CODES.N){
            bitDepth = format.getInteger("pcm-encoding");
        } else{
            bitDepth = format.getInteger("bit-width");

а формат выше андроид 7.0 вроде

 mime: string(audio/raw), channel-count: int32(2), sample-rate: int32(48000), pcm-encoding: int32(2)}

ниже андроид 7.0 вроде

mime: string(audio/raw), channel-count: int32(2), sample-rate: int32(48000), bit-width: int32(16), what: int32(1869968451)}

https://developer.android.com/reference/android/media/MediaFormat.html#KEY_PCM_ENCODING

person Big Bear    schedule 13.04.2018
comment
пожалуйста, используйте галочки (``), чтобы окружить код. Лучше читать getInteger(), чем getInteger. - person Vikas Prasad; 13.04.2018

person    schedule
comment
Я думаю, что это должно быть бит на выборку. - person Hexise; 03.09.2018