我有一个奇怪的问题。 该项目是声波识别,我有神经网络启动和运行,事实证明,我最少关注的事情是屁股上的痛苦。
这是一个需要通过计算机麦克风捕获声音的java应用程序,我遵循oracle文档进行声音捕获,现在我的代码非常简单,因为更复杂的一个似乎是一个半身像!
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位组合数据,那不是它,我也试过了。
所以问题是这段代码注册的原因是什么,因为它不合理,oracle文档明确说明这是获取麦克风句柄的方法。
显然这样做的正确方法是什么? 任何帮助将不胜感激。
P.S。我正忙着这个项目im c#developer,所以要温柔! :)
答案 0 :(得分:0)
您使用的是哪个版本的 jfreechart ?使用1.0.0我必须向createXYLineChart(...)
添加一些参数。
如果我运行你的代码,我可以看到你的Y轴刻度动态调整。如果没有连接麦克风,则从〜-8到~8(随机闪烁)。如果有一个(具有正弦曲线),从〜-125到~125。每条线路上都没有噪音吗?如果你将适当的固定比例应用到你的Y轴,它可能看起来不那么令人印象深刻。
让我想知道的是,如果我真的对着麦克风说话,图表就不会改变。