首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用javax.sound.sampled.*列出所有可用的(输入)端口?

如何使用javax.sound.sampled.*列出所有可用的(输入)端口?
EN

Stack Overflow用户
提问于 2011-06-22 02:06:27
回答 2查看 4K关注 0票数 1

根据我的研究,Java的sound不能很好地与OsX配合使用。它很难确定活动输入,因此它通常默认为第一个系统输入。

我的解决方案是迭代通过一组输入端口,录制几毫秒的音频并比较这些片段。无论哪一个具有最大的振幅,我都会使用它作为我的输入。

我的问题是,生成Java可用的所有输入端口数组的最佳方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2011-06-22 02:45:42

可以使用以下命令列出所有可用的混合器对象:

代码语言:javascript
复制
Mixer.Info[] mixers = AudioSystem.getMixerInfo();
for (Mixer.Info mixerInfo : mixers){
    System.out.println(mixerInfo);
}

在我的系统Mac上,结果是:

Java Sound Audio Engine 1.0版

内置输入,版本未知版本

内置麦克风,版本未知

编辑

以下是如何提取有效目标行的列表,您可以从中获取音频输入:

代码语言:javascript
复制
Mixer.Info[] mixers = AudioSystem.getMixerInfo();
List<Line.Info> availableLines = new ArrayList<Line.Info>();
for (Mixer.Info mixerInfo : mixers){
    System.out.println("Found Mixer: " + mixerInfo);

    Mixer m = AudioSystem.getMixer(mixerInfo);

    Line.Info[] lines = m.getTargetLineInfo();

    for (Line.Info li : lines){
        System.out.println("Found target line: " + li);
        try {
            m.open();
            availableLines.add(li);                  
        } catch (LineUnavailableException e){
            System.out.println("Line unavailable.");
        }
    }  
}

System.out.println("Available lines: " + availableLines);

一旦拥有了Line.Info对象,就可以通过调用AudioSystem.getLine()并使用该Line.Info作为参数来获取与Line.Info对象相关联的Line.Info。

票数 3
EN

Stack Overflow用户

发布于 2011-06-24 04:27:01

有关如何确定可用资源的基础知识可在此处找到:Accessing Audio System Resources

在Java Sound教程中,我发现这一节在示例代码方面最有帮助:http://download.oracle.com/javase/tutorial/sound/converters.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6429914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档