У меня есть немного странный вопрос. Проект является распознаванием звуковой волны, у меня есть нейронные сети вверх и вниз, и, как оказалось, вещь, которую я уделял наименьшему вниманию, оказалась болью в заднице.Запись микрофона Java
Это приложение для Java, которое теперь нужно захватить звук с помощью компьютерного микрофона, и я слежу за документацией о звукозаписывающих устройствах, и вот мой код очень прост, потому что более сложный оказался бюстом!
public class Main extends JFrame{
//audio prop.
private static int SampleRate=8000;
private static int BitsPerSample=16;
private static int Channel=1;
private static boolean signed=true;
private static boolean isBigEndian=true;
private static byte[] buffer;
static AudioFormat format;
static DataLine.Info info;
static TargetDataLine line;
private static XYSeries series;
private static XYSeriesCollection xyCollection;
private static JFreeChart chart;
public void call(ChartPanel panel){
add(panel,BorderLayout.CENTER);
}
public static void main(String[] args) throws LineUnavailableException {
ChartPanel chartPanel;
format= new AudioFormat(SampleRate, BitsPerSample,Channel , signed, isBigEndian);
info= new DataLine.Info(TargetDataLine.class, format);
if(!AudioSystem.isLineSupported(info))
{
System.out.print("Line not supported");
}
else
{
/*
* chart declarations
*/
series= new XYSeries("Audio");
xyCollection=new XYSeriesCollection();
xyCollection.addSeries(series);
chart= ChartFactory.createXYLineChart("Microphone Recording", "X","Y", xyCollection);
chartPanel=new ChartPanel(chart);
Main obj= new Main();
obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
obj.setSize(640,480);
obj.call(chartPanel);
obj.setVisible(true);
line= (TargetDataLine) AudioSystem.getLine(info);
line.open(format);
line.start();
buffer= new byte[line.getBufferSize()];
ByteBuffer bb= ByteBuffer.allocate(2);
bb.order(ByteOrder.BIG_ENDIAN);
while(line.read(buffer, 0, buffer.length)>0){
for(int i=0;i<buffer.length-1;i++){
series.add(i,buffer[i]);
}
}
}
}
Теперь вот что происходит, я получаю постоянный ввод случайного шума, даже если нет звука! Если вы пытаетесь сказать мне, что это связано с тем, что я не объединил данные в соответствии с 16-битными форматами, это не так, я тоже пробовал это.
Итак, вопрос в том, что этот код регистрируется, потому что это не звук, а документация оракула специально говорит, что это способ получить ручку микрофона.
И каков правильный способ сделать это, очевидно? Любая помощь будет оценена по достоинству.
P.S. Я нахожусь на лету над этим проектом im C# разработчиком, поэтому будьте нежны! :)
Я использую 1.0.23 jcommon и 1.0.19 jfreechart. Дело в том, что вы не получаете никаких изменений, даже если разговариваете с микрофоном, я попытаюсь применить масштабирование, но я не думаю, что это решение. – Vladimir
ОК, с 1.0.19 он компилируется как заданный. Теперь также меняется график, если я говорю в микрофон. Но это не превышает ~ -140 до ~ 140. Как бы я ни говорил. (Моя жена уже спрашивала, что я здесь делаю :-) Мм ... У меня нет дальнейших идей. –
Спасибо. За это усилие даже высокочастотные свистки, которые имеют высокую энергию по частоте спектра, похоже, не имеют никакого эффекта. – Vladimir