【发布时间】:2014-11-20 06:37:34
【问题描述】:
我正在尝试在我的虚拟音频电缆上播放 wav/mp3,我已经搜索了几个小时,但似乎找不到如何实现这一点。我已经能够以两种格式播放声音,但我无法将其输出到“Line-1”而不是“扬声器”
任何有用的链接或示例代码将不胜感激。
【问题讨论】:
我正在尝试在我的虚拟音频电缆上播放 wav/mp3,我已经搜索了几个小时,但似乎找不到如何实现这一点。我已经能够以两种格式播放声音,但我无法将其输出到“Line-1”而不是“扬声器”
任何有用的链接或示例代码将不胜感激。
【问题讨论】:
要获取当前平台上所有Mixers的数组,可以使用AudioSystem#getMixerInfo:
static void printAllMixerNames() {
for(Mixer.Info info : AudioSystem.getMixerInfo()) {
System.out.println(info.getName());
}
}
如果您的虚拟电缆可用,它将在阵列中。例如,在我的 Mac 上打印以下内容:
Java 声音音频引擎 内置输入 音花 (2ch) 音花 (64ch) Pro Tools 聚合 I/O(Soundflower 是一个虚拟设备。)
不幸的是,要获得一些特定的Mixer,您需要进行字符串评估。因此,您需要事先找到它的名称、供应商等,或者让用户可以从列表中选择一个。
static Mixer getMixerByName(String toFind) {
for(Mixer.Info info : AudioSystem.getMixerInfo()) {
if(toFind.equals(info.getName())) {
return AudioSystem.getMixer(info);
}
}
return null;
}
一旦你有一个特定的Mixer,你就可以从中获得一个Line 或AudioInputStream。您可以通过AudioSystem#getClip(Mixer.Info)从中获取Clip。
我正在尝试播放 wav/mp3...
javax.sound.sampled 不支持mp3。 Alternatives can be found here.
【讨论】: