使用Java,我正在尝试从默认麦克风录制声音并显示当前音量和静音状态(在OS级别设置,如果可能,不检查字节的兴趣).到目前为止,我可以使用以下代码获取TargetDataLine并记录到它:
TargetDataLine line = (TargetDataLine) AudioSystem.getLine(new DataLine.Info(TargetDataLine.class, formato));
这在Windows上运行良好,line是使用OS选择的默认麦克风.
现在,要获得音量/静音控件,我有以下代码:
Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();
for (Mixer.Info mixerInfo : mixerInfos) {
Mixer mixer = AudioSystem.getMixer(mixerInfo);
if (mixer.getMaxLines(Port.Info.MICROPHONE) > 0) {
System.out.println("-------------");
System.out.println(mixerInfo);
Port line = (Port) mixer.getLine(Port.Info.MICROPHONE);
line.open();
Line.Info[] targets = mixer.getTargetLineInfo();
Control[] controls = line.getControls();
for (Control control : controls) {
if (control instanceof CompoundControl) {
Control[] subControls = ((CompoundControl) control).getMemberControls();
for (Control subControl : subControls) {
System.out.println(subControl);
}
} else {
System.out.println(control);
}
}
System.out.println("-----------");
}
}
Run Code Online (Sandbox Code Playgroud)
我的设置中有2个麦克风,我还没有找到一种方法可以知道哪个是默认麦克风(现在它是阵列中的第二个).
尝试Line port = AudioSystem.getLine(Port.Info.MICROPHONE);并返回第一个可用(并且它不是此实例中的默认值).
那么,有什么方法可以获得与TargetDataLine相关的默认麦克风端口?
谢谢!
要获取系统中安装的所有麦克风,您可以按如下方式列出它们:
package testing;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Mixer;
import javax.sound.sampled.TargetDataLine;
public class Main {
public static void main(String[] args) {
//Enumerates all available microphones
Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();
for (Mixer.Info info: mixerInfos){
Mixer m = AudioSystem.getMixer(info);
Line.Info[] lineInfos = m.getTargetLineInfo();
if(lineInfos.length>=1 && lineInfos[0].getLineClass().equals(TargetDataLine.class)){//Only prints out info is it is a Microphone
System.out.println("Line Name: " + info.getName());//The name of the AudioDevice
System.out.println("Line Description: " + info.getDescription());//The type of audio device
for (Line.Info lineInfo:lineInfos){
System.out.println ("\t"+"---"+lineInfo);
Line line;
try {
line = m.getLine(lineInfo);
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
System.out.println("\t-----"+line);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
从这里开始,您可以识别默认的麦克风...例如,在我的 MacBook 中,默认的麦克风名称为“内置麦克风”
| 归档时间: |
|
| 查看次数: |
977 次 |
| 最近记录: |