Я использую звуковую дорожку для создания звукового сигнала с заданной частотой и децибелами дБ. В звуковой дорожке есть метод под названием
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.
amp = 10^((dB-max_dB)/10)
, гдеmax_dB
- максимальный дБ, который вы хотите поддерживать. - person lurker   schedule 02.03.2019