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

#java #android #volume #audiotrack

#java #Android #громкость #аудиотрек

Вопрос:

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

 setStereoVolume()
  

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

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

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

Комментарии:

1. Вам нужно будет масштабировать формулу. В вашем случае вы говорите, что вам не нужно стандартное (правильное) соотношение дБ к амплитуде. Вы могли бы использовать, amp = 10^((dB-max_dB)/10) где max_dB — максимальный дБ, который вы хотите поддерживать.

2. я сделал это, но я не думаю, что это дает правильные значения ….. например: слышимость на разной частоте с дБ в диапазоне от 0 до 20, где 0 — мин, означает нормальный уровень слуха …. приведенная вами формула заставляет мою дБ работать на 0-49 дБ выше, чем значение усилителя больше 1, но все же у нас есть другой уровень, например, 20-40, что на один уровень ниже нормального уровня слуха