Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java声音API-区分多个相等的USB声卡_Java_Api_Audio - Fatal编程技术网

Java声音API-区分多个相等的USB声卡

Java声音API-区分多个相等的USB声卡,java,api,audio,Java,Api,Audio,我使用4个USB声卡(华硕Xonar U1)。我想给他们每个人发送一个不同的声音(相同的文本用不同的语言叙述)。现在,我要做的是得到我感兴趣的混音器,是这样的: Info[] mixerInfo = AudioSystem.getMixerInfo(); int count = 0; for (Info i : mixerInfo) { System.out.println("["+(count++)+"]" + i.getName() + " - " + i.getDescriptio

我使用4个USB声卡(华硕Xonar U1)。我想给他们每个人发送一个不同的声音(相同的文本用不同的语言叙述)。现在,我要做的是得到我感兴趣的混音器,是这样的:

Info[] mixerInfo = AudioSystem.getMixerInfo();
int count = 0;
for (Info i : mixerInfo) {
    System.out.println("["+(count++)+"]" + i.getName() + " - " + i.getDescription()+" - "+i.getVendor());
}
这给了我类似以下的东西:

[5] Device [plughw:1,0] - Direct Audio Device: USB Advanced Audio Device, USB Audio, USB Audio - ALSA (http://www.alsa-project.org)
[6] Device_1 [plughw:2,0] - Direct Audio Device: USB Advanced Audio Device, USB Audio, USB Audio - ALSA (http://www.alsa-project.org)
[7] Device_2 [plughw:3,0] - Direct Audio Device: USB Advanced Audio Device, USB Audio, USB Audio - ALSA (http://www.alsa-project.org)
现在,在我的配置文件中,我将声卡与Info[]索引(“count”变量)相关联

问题是如果我更改了连接声卡的USB端口。然后Info[]数组有了一个全新的顺序,我不知道哪个声卡应该播放语言
en_-US
,比如哪个
pt_-pt

此外,“plughw:1,0”字符串的变化没有任何明显的模式。如果我只有一个声卡,它将始终是“plughw:1,0”,无论我连接到哪个端口

如果重新启动计算机,混合器信息[]有时也会重新排序

我还介绍了jUSB,但所有声卡的设备信息都完全相同,我不知道如何将它提供给我的USB信息映射到Java sound API mixer信息

那么,有人知道如何使用Java sound API唯一地识别相同的声卡吗


或者,是否有人对我可以使用哪种语言/库编写一个应用程序,将不同的音频文件输出到同一台机器中的4个不同USB声卡有其他建议?

请看一看BASS音频库,它是用C编写的。有一个JNI库,它是在Java中本机使用它的桥梁。你会失去一些跨平台的能力,但该库的性能明显更好,可以很好地处理多个输出,我相信每个音频设备都有更好的识别能力

(安装NativeBass时,您还需要下载BASS本身,并合并两个/lib目录,这还没有完整的文档记录。)


如果我坚持使用您使用的解决方案,我会得到一个便宜的USB集线器,将音频USB连接到集线器,然后将集线器连接到计算机。这将每次以相同的顺序初始化音频,至少为您提供了在JavaSound中使用的一致顺序。

由于我们需要在Linux中使用它,因此我们最终使用了以下解决方案:


每次插入音频设备时,它都会为它们分配相同的hwplug:x,y。更具体地说,它为每个USB端口分配一个固定的hwplug:x,y。因此,我们总是知道特定声音将发送到哪个USB端口。

我应该提到我们需要使用Linux。据我所见,NativeBass在Linux上不工作。无论如何,谢谢你的回答,它给了我们一些见解。我特别喜欢USB集线器,但我没有机会测试它。