Создание звуковой дорожки с заданным децибелом

Я использую звуковую дорожку для создания звукового сигнала с заданной частотой и децибелами дБ. В звуковой дорожке есть метод под названием

setStereoVolume()

что получает левую и правую громкость. Однако в этой библиотеке громкость устанавливается по амплитуде, которая находится в диапазоне от 0 до 1, где 0 - минимум, а 1 - максимум, но мои пользователи вместо этого дают дБ, поэтому мне нужно преобразовать дБ в амплитуду. После поиска я нашел формулу как amp = 10^(dB/20). Проблема в том, что для этой формулы работает только -ve дБ, для + ve дБ формула возвращает значение выше 1, что означает макс.

audioTrack.setStereoVolume((float) Math.pow(10,volumeL_val/20),(float) Math.pow(10,volumeR_val/20));

Как я могу преобразовать + ve дБ в амплитуду в диапазоне 0-1, приемлемом для Android.


person Rouzbeh Zarandi    schedule 02.03.2019    source источник
comment
Вам нужно будет масштабировать формулу. В вашем случае вы говорите, что не хотите стандартного (правильного) отношения дБ к амплитуде. Вы можете использовать amp = 10^((dB-max_dB)/10), где max_dB - максимальный дБ, который вы хотите поддерживать.   -  person lurker    schedule 02.03.2019
comment
Я сделал это, но я не думаю, что он дает правильные ... например: слышимость разной частоты с дБ от 0 до 20, где 0 мин, означает нормальный уровень слуха .... формула, которую вы дали, дает мне дБ работает в диапазоне от 0 до 49 дБ выше, чем значение усилителя больше 1, но все же у нас есть другой уровень, например: 20-40, что на один уровень ниже нормального слуха   -  person Rouzbeh Zarandi    schedule 04.03.2019


Ответы (1)


Мое предложение состоит в том, чтобы умножить одно постоянное значение на всю формулу, что приведет к выходу в пределах 0-1, то есть amp = 10 ^ (дБ / 20) * const, где const должно изменяться в соответствии с частотой

person Vasant Kathote    schedule 10.11.2019