2016-05-31 2 views
1

Я создаю приложение для Android, которое должно начать запись звука, когда записанный звук превышает определенный порог.Как анализировать значение, возвращаемое mediaRecorder.getMaxAmplitude() в Android

Я исследовал и выяснил, что метод getMaxAmplitude() класса MediaRecorder дает оценку громкости шума как меры звукового давления. Он возвращает значение от 0 до +32767.

Вот код, который я написал.

MediaRecorder mediaRecorder = new MediaRecorder(); 
while(True){ 
    if (mediaRecorder.getMaxAmplitude() > THRESHOLD) 
     System.out.println("Recording sound"); 
    else 
     System.out.println("Sound recording not above the threshold level); 
} 

у меня есть проблема, выясняя значение ПОРОГ, так как нет никакого стандартного блока для значения, возвращаемого функцией getMaxAmplitude(). Было бы предпочтительно, чтобы кто-то мог предложить преобразование из значения, возвращаемого функцией getMaxAmplitude(), в децибел (дБ) или любой другой полезный блок.

+0

Даже я пытаюсь найти ответ на этот вопрос. Если я придумаю один, я отправлю его в качестве ответа. – aditya

ответ

2

Нет простого способа, с помощью которого вы могли бы интерпретировать вывод getMaxAmplitude(), поскольку он просто даст вам максимальное значение, которое получает конкретное оборудование вашего телефона. К сожалению, тот факт, что производитель соответствует требованиям ОС Android, не гарантирует, что вы получите тот же ответ от каждого микрофона. На самом деле даже у всех устройств одного и того же производителя нет такого же микрофона, и вы не получите такой же частотной характеристики или чувствительности. Если вы хотите конвертировать в дБ из этого adimentional (но аппаратно зависимой пропорциональности звука), то возвращается getMaxAmplitude(), просто используйте dB = 20log10(getMaxAmplitude()). Теперь, если вы хотите, чтобы это работало на широком спектре устройств, я бы посоветовал вам включить в ваше приложение этап калибровки, чтобы вы могли установить динамический зависимый от устройства порог вместо абсолютного значения. Возможно, вы можете установить свой порог как соотношение между интенсивностью, которую вы получаете, когда вы откалибруете, и интенсивностью, которую вы получаете в тот момент, когда вы пытаетесь захватить. Я не знаю специфики вашего приложения, но если бы я был вами, я бы по крайней мере с одной из этих двух вещей имел в виду сравнить. Момент, когда микрофонный вход наиболее подходит и когда он наиболее насыщен (возможно, вы можете создать свой собственный громкий звук из динамика и записать его)

+0

Да, это имеет большой смысл. Я подумываю сделать калибровку таким образом, используя микрофон телефона, чтобы записать звук в довольно удобной обстановке, а затем использовать телефон для записи звука, производимого из динамика телефона. Интересно, как создается приложение, например Sound Meter, или если есть API, который Sound Meter обеспечивает использование рассчитанных значений децибел. – aditya

+0

Если это ответ хорошо для вас, отметьте его как принятый, чтобы все знали, что это способ решить проблему. Я не знаю, как создаются приложения Sound Meter или если они предоставляют API для других пользователей. Пожалуйста, сделайте поиск по этому вопросу, и если вы не нашли ответ, отправьте еще один вопрос, чтобы мы могли узнать – VMMF

+0

. Я хотел бы отметить этот ответ как правильный, но я не смог полностью решить проблему, используя эту , Я сделал некоторый анализ, и формула, указанная в вопросе, вычисляет значение децибела как 60 по сравнению с где-то около 45, вычисленным приложением, например Sound Meter. Я все равно хотел бы, чтобы другие отвечали и проводили мои собственные исследования, прежде чем отметить это как правильный ответ. – aditya

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

  • Нет связанных вопросов^_^