Java Sound API - захват микрофона - PullRequest
       0

Java Sound API - захват микрофона

26 голосов
/ 14 сентября 2010

Я уже пару дней перечитываю Sound API для Java, но не могу разобраться в этом. Я неплохой программист, мне просто трудно разобраться с API.

Я пытался захватывать звук с микрофона и отображать график в реальном времени.

У меня проблемы с захватом звука, говорят в учебнике, чтобы сделать это, но я не могу заставить его работать.

Буду очень признателен за любые предложения и помощь, идеально подходит построчный ответ.

Пожалуйста и спасибо.

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 ... 
  }
 }

}

1 Ответ

36 голосов
/ 21 сентября 2010

Это даст вам значение по умолчанию, установленное вашей ОС.

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

Чтобы выбрать конкретное устройство ввода (TargetDataLine), лучше перечислить микшеры и отфильтровать название нужного микшера.

 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);

  }

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...