Java的API的声音 - 捕捉麦克风 [英] Java Sound API - capturing microphone

查看:2014
本文介绍了Java的API的声音 - 捕捉麦克风的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在阅读了关于声音API for Java的几天,我无法理解它。我体面的程序员,我只是有困难得到我的头周围的API。

我一直在试图从我的麦克风捕获音频和实时显示波图。

我无法捕获音频,他们在本教程中要做到这一点说,但我似乎无法得到它的工作。

任何建议和帮助将非常AP preciated,一个一行行的答案将是理想的。

请和谢谢。

 进口javax.sound.sampled.AudioFormat中;
进口javax.sound.sampled.AudioSystem;
进口javax.sound.sampled.DataLine中;
进口javax.sound.sampled.LineUnavailableException;
进口javax.sound.sampled.TargetDataLine;公共类FindLine { 公共静态无效的主要(字串[] args){  AudioFormat的格式=新AudioFormat的(22000,16,2,真实,真实);
  TargetDataLine的线;
  DataLine.Info信息=新DataLine.Info(TargetDataLine.class,
      格式); //格式的AudioFormat对象
  如果(!AudioSystem.isLineSupported(信息)){
      //处理错误...
  }
  //获取并开行。
  尝试{
      行=(TargetDataLine的)AudioSystem.getLine(信息);
      line.open(格式);
  }赶上(LineUnavailableException前){
      //处理错误...
  }
 }}


解决方案

这将由您的操作系统让你默认的一组。

  AudioFormat的格式=新AudioFormat的(8000.0f,16,1,真实,真实);
      TargetDataLine的麦克风= AudioSystem.getTargetDataLine(格式);

要选择一个特定的输入设备(TargetDataLine的)最好是枚举混频器和过滤你想要的混频器的名称。

  Mixer.Info [] = mixerInfos AudioSystem.getMixerInfo();
 对于(Mixer.Info信息:mixerInfos){
  搅拌机M = AudioSystem.getMixer(信息);
  Line.Info [] = lineInfos m.getSourceLineInfo();
  对于(Line.Info lineInfo:lineInfos){
   的System.out.println(info.getName()+ - + lineInfo);
   一行行= m.getLine(lineInfo);
   的System.out.println(\\ t -----+线);
  }
  lineInfos = m.getTargetLineInfo();
  对于(Line.Info lineInfo:lineInfos){
   的System.out.println(M +---+ lineInfo);
   一行行= m.getLine(lineInfo);
   的System.out.println(\\ t -----+线);  } }

I have been reading up on the Sound API for Java for a couple of days I am unable to make sense of it. I am decent programmer, I just having difficulty getting my head around the API.

I have been trying to capture audio from my microphone and display a wave graph in real time.

I am having trouble capturing audio, they say in the tutorial to do this, but I cant seem to get it to work.

Any suggestions and help would be much appreciated, a line by line answer would be ideal.

Please and thank you.

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;

public class FindLine {

 public static void main (String[] args){

  AudioFormat format = new AudioFormat(22000,16,2,true,true);
  TargetDataLine line;
  DataLine.Info info = new DataLine.Info(TargetDataLine.class, 
      format); // format is an AudioFormat object
  if (!AudioSystem.isLineSupported(info)) {
      // Handle the error ... 
  }
  // Obtain and open the line.
  try {
      line = (TargetDataLine) AudioSystem.getLine(info);
      line.open(format);
  } catch (LineUnavailableException ex) {
      // Handle the error ... 
  }
 }

}

解决方案

This will get you the default one set by your OS.

      AudioFormat format = new AudioFormat(8000.0f, 16, 1, true, true);
      TargetDataLine microphone = AudioSystem.getTargetDataLine(format);

To select a particular input device (TargetDataLine) it is better to enumerate the mixers and filter the name of the Mixer you want.

 Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();
 for (Mixer.Info info: mixerInfos){
  Mixer m = AudioSystem.getMixer(info);
  Line.Info[] lineInfos = m.getSourceLineInfo();
  for (Line.Info lineInfo:lineInfos){
   System.out.println (info.getName()+"---"+lineInfo);
   Line line = m.getLine(lineInfo);
   System.out.println("\t-----"+line);
  }
  lineInfos = m.getTargetLineInfo();
  for (Line.Info lineInfo:lineInfos){
   System.out.println (m+"---"+lineInfo);
   Line line = m.getLine(lineInfo);
   System.out.println("\t-----"+line);

  }

 }

这篇关于Java的API的声音 - 捕捉麦克风的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆