Размер буфера AudioTrack для Android не имеет смысла - PullRequest
0 голосов
/ 08 июня 2018

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

Я следовал примеру здесь :

Я могу издавать звуковые сигналы и изменятьтон и длина.

AudioTrack.getMinBufferSize() предлагает минимальный размер буфера 1280.

Но используя это значение, я не получил весь звуковой сигнал (он был короче, чем должен был быть).Все эти цифры приведены для (запрошенного) 1-секундного звукового сигнала.

Я изменил размер буфера от 2 байт до 16000 байт.

Между 2 и 1280 байтами я получил достаточно разумно 940 миллисекунд.

С 1280 до 15998 байт звуковой сигнал стал короче.

На самом деле самый короткий был примерно 12000 250 миллисекунд.

Затем он снова увеличился до 337 миллисекунд при 15998В 16000 не было никаких звуковых сигналов.

Итак, я никогда не получал свои полные 1000 миллисекунд, самый длинный был около 950.

Самый короткий был около 250 миллисекунд.

Ничего другого не изменилось, только размер буфера.

Используя Sonic Visualiser, я могу записывать звуковые сигналы и видеть форму волны на моем ПК.Вот как я измерял продолжительность звукового сигнала.

Из-за увеличения и уменьшения амплитуды, которые я использовал, я ясно вижу, что звуковые сигналы начинаются правильно с увеличением до 0, иони усекаются в конце.Я теряю конец звуковых сигналов.

Может кто-нибудь объяснить это и сказать мне, как получить все мои 1-секундный звуковой сигнал, пожалуйста?

Дополнительная информация:

Такое же усечение происходит для звукового сигнала, отличного от 1 секунды.

Микрофон и ПК не откалиброваны, но результаты повторяются.

Основные биты кода выглядят следующим образом:

int minBufferSize = AudioTrack.getMinBufferSize(mSampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);

mAudioTrack = new AudioTrack(AudioManager.STREAM_ALARM,
                mSampleRate,
                AudioFormat.CHANNEL_OUT_MONO,
                AudioFormat.ENCODING_PCM_16BIT,
                mBufferSize,
                AudioTrack.MODE_STREAM);

Изображения из Sonic Analyzer.

Все эти тесты были выполнены на Galaxy S4, работающем 5.0.1

Как получить полный 1-секундный звуковой сигнал, пожалуйста?

Это единственное изображение может объяснить проблему лучше: показывает: ожидаемый профиль, профиль для буфера = 2, профиль для буфера = 12000

А вотграфик размера буфера в зависимости от длины сигнала.Всегда генерировались одни и те же звуковые данные, единственное, что изменилось, это размер буфера: изменение длины "звукового сигнала" в зависимости от размера буфера

...