#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 можете ли вы объяснить, что вы подразумеваете под «преобразованием пар байтов в образцы» ? должен ли я получить пары байтов из массива, но что вы подразумеваете под «образцами»? кроме того, в вопросе указано использование объема, я думаю, я хочу получить среднее абсолютное значение