2016-02-16 19 views
0

У меня есть приложение для синтеза звука, которое использует буферизацию и значение для поиска, чтобы изменить темп. Чем меньше размер буфера, тем быстрее темп. Значение поисковой строки вычитается из размера буфера; чем дальше перемещается стрелка, тем быстрее темп.Android audiotrack getMinBufferSize() возвращает разные значения на разных устройствах

BufferSize вычисляется с использованием:

int buffersize = AudioTrack.getMinBufferSize(sr, AudioFormat.CHANNEL_OUT_MONO, 
        AudioFormat.ENCODING_PCM_16BIT); 

На телефоне Samsung Galaxy S6, возвращаемый BufferSize является 10584. В нижней и верхней части значений ползунка дают 60 ударов в минуту и ​​192 ударов в минуту соответственно.

Однако на 7" LG G Pad 7.0, возвращаемый BufferSize только 3528. В результате, начальный темп составляет около 180-200 ударов в минуту, а не требуемого 60 ударов в минуту.

Я подумал использование жесткого кодирования размера буфера в зависимости от размера экрана, но это просто лейкопластырь работы.

Почему же расчет возвращается два различных размером буфера через два устройства? Как размер буфера рассчитывается?

+0

http://stackoverflow.com/q/20511144/1168654 –

ответ

0

Размер буфера, как известно, отличается между устройствами. Он оптимизирован для базового оборудования, которое будет меняться. Вот почему есть способ вычислить это значение, а не какую-либо инструкцию о том, как его вычислить самостоятельно.

Размер буфера AudioTrack не имеет никакого отношения к темпу. Это просто минимальное количество байтов, которое AudioTrack должен выделить для эффективной работы. Байты, которые вы отправляете в AudioTrack, могут содержать все, что вы хотите воспроизвести, если оно соответствует спецификациям, которые вы использовали для создания AudioTrack.

Смежные вопросы