Расчет размера кадра AMR

У меня есть приведенный ниже фрагмент кода, который помещает файл .amr в массив байтов.

Я знаю, как получить битрейт из заголовка, как показано ниже. Итак, предположив, что битрейт равен 7,95, какую формулу использовать для расчета размера кадра? Спасибо.

public void getFrames() {
        File inputFile = new File(getmFileName());
        try {
            FileInputStream fis = new FileInputStream(inputFile);

            byte fileContent[]= new byte[(int) inputFile.length()];

            fis.read(fileContent); // Reads the file content as byte.
            fis.close();

            int count = 0;
            for (int i = 0; i < 8; i++) {

               Log.i(LOG_TAG, "byte"+ fileContent[i]);
               count++;
               Log.i(LOG_TAG, "7thbyte_of_1stHeader:" + ((fileContent[7]>>3)& 0x0F) );
            }} catch (Exception ex) {
            // TODO Auto-generated catch block
            ex.printStackTrace();

        }   }

person cube    schedule 27.03.2014    source источник


Ответы (1)


Nokia предлагает следующую таблицу взаимосвязи между режимом кодека (CMR), битрейтом и частотой кадров. размер:

CMR     MODE        FRAME SIZE( in bytes )
0      AMR 4.75        13
1      AMR 5.15        14 
2      AMR 5.9         16
3      AMR 6.7         18
4      AMR 7.4         20
5      AMR 7.95        21
6      AMR 10.2        27
7      AMR 12.2        32
person Michael    schedule 27.03.2014
comment
Спасибо, Майкл. Я немного запутался, в спецификации Nokia указано, что размер кадра в битах равен 159. Так что математика не сходится. 159/8 не равно 21. Что я упускаю? - person cube; 28.03.2014
comment
trunc((159+7)/8) + 1 = 21. Вы должны дополнить биты, чтобы заполнить байт, а затем добавить еще один байт для заголовка кадра. - person kbro; 19.08.2020