как получить децибел байтовых аудиоданных

#java

Вопрос:

я работал над программой java, которая захватывает аудиобайтовые данные микрофона, а затем отправляет их куда-то еще (часть моей программы), могу ли я в любом случае рассчитать значение децибел данных? я использую TargetDataLine, на каждой итерации я сохраняю данные в держателе TempData, который я беру и записываю в поток byteoutput, на каждой итерации я пытаюсь рассчитать децибел TempData.

имейте в виду, что я на самом деле не понимаю многих вещей, связанных со звуком в компьютерах и в java в целом, поэтому, пожалуйста, простите меня за недостаток знаний.

это класс 1 или «foo», он обрабатывает, когда остановить захват

 public class Foo {  public static void foo() {  AudioFormat format = new AudioFormat(8000.0f, 16, 1, true, true);    try (  var microphone = (TargetDataLine) AudioSystem.getLine(new DataLine.Info(TargetDataLine.class, format))  ) {  var micListener = new MicListener(microphone);    ByteArrayOutputStream allData = new ByteArrayOutputStream();  byte[] tempData;  final int chunkSize = 1024;    while (true) {  // in this case the loop goes forever, but in my program it stops when the user stops capturing audio.  tempData = micListener.startRecording(chunkSize);    //calculate the decibel value of tempData; Utils.calculateDecibel(tempData)  //if decibel is high then do stuff  if (decibel gt; 50)  allData.write(tempData , 0 , micListener.getNumOfBytesRead());    }  } catch (LineUnavailableException e) {  e.printStackTrace();  }  } }  

это класс 2 или «МикЛистенер», это ручной захват данных

 public class MicListener {  private final TargetDataLine target;  private byte[] audioData;  private int numOfBytesRead = 0;    public MicListener(TargetDataLine target){  this.target = target;  audioData = new byte[target.getBufferSize() / 5];  }    public byte[] startRecording(int chunkSize) throws LineUnavailableException {  numOfBytesRead = target.read(audioData , 0 , chunkSize);    return audioData;  }    public int getNumOfBytesRead() {  return numOfBytesRead;  } }  

спасибо за помощь! хорошего вам дня

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

1. Что означает » объем данных «? Высота звука? Децибел?

2. @AbhijitSarkar под громкостью я подразумевал децибел. я отредактирую пост, чтобы лучше обдумать это

3. Я сомневаюсь, что оцифрованный звук имеет понятие о децибелах. Если я воспроизведу звуковой файл на компьютере с громкостью 100%, а затем воспроизведу тот же звуковой файл с громкостью 50%, каково реальное значение децибел в конкретный момент в звуковых данных? Какое воспроизведение следует рассматривать как обеспечивающее достоверные уровни децибел?

4. Ваши данные имеют 16 — битный большой конечный код со знаком, поэтому, чтобы получить объем, вы можете преобразовать пары байтов в образцы и обработать их любым способом, который вы считаете подходящим для получения объема. Вы можете найти, например, пиковое абсолютное значение или среднее абсолютное значение. Для чего вы хотите использовать громкость?

5. @tgdavies можете ли вы объяснить, что вы подразумеваете под «преобразованием пар байтов в образцы» ? должен ли я получить пары байтов из массива, но что вы подразумеваете под «образцами»? кроме того, в вопросе указано использование объема, я думаю, я хочу получить среднее абсолютное значение