如何在java中获得混音器通道布局
我原以为我可以在这个伟大的网站上找到任何东西,但现在我似乎面临着这个问题,没有答案:)请帮助 问题是,我需要播放多达6个不同的wav文件,每个文件有1个通道,进入系统混音器支持的6个通道(左、右、左环绕等) 使用6条不同的SourceDataLine看起来很合乎逻辑,但从我看到的情况来看,Mixer无法对它们进行每个示例的同步,所以我提出了在单独的线程中交错它们,并且只使用一条SourceDataLine来播放它。它适用于两个频道,左侧和右侧,但对于更多频道,我需要知道精确的频道布局(在diff.system和声卡上可能不同)。我认为其中一个系统混合器(我有两个:“线性输入”和“java声音系统混合器”)可能有这个元数据,但我找不到它 有人知道如何获得这些信息吗如何在java中获得混音器通道布局,java,audio,javasound,mixer,channels,Java,Audio,Javasound,Mixer,Channels,我原以为我可以在这个伟大的网站上找到任何东西,但现在我似乎面临着这个问题,没有答案:)请帮助 问题是,我需要播放多达6个不同的wav文件,每个文件有1个通道,进入系统混音器支持的6个通道(左、右、左环绕等) 使用6条不同的SourceDataLine看起来很合乎逻辑,但从我看到的情况来看,Mixer无法对它们进行每个示例的同步,所以我提出了在单独的线程中交错它们,并且只使用一条SourceDataLine来播放它。它适用于两个频道,左侧和右侧,但对于更多频道,我需要知道精确的频道布局(在diff
谢谢。我和我的朋友刚刚发现,java7音响系统支持6个频道,以及所有使用不同比特的变体,等等 下面是列出java可以做什么的代码:
Mixer.Info[] mi = AudioSystem.getMixerInfo();
for (Mixer.Info info : mi) {
System.out.println("info: " + info);
Mixer m = AudioSystem.getMixer(info);
System.out.println("mixer " + m);
Line.Info[] sl = m.getSourceLineInfo();
for (Line.Info info2 : sl) {
System.out.println(" info: " + info2);
Line line = AudioSystem.getLine(info2);
if (line instanceof SourceDataLine) {
SourceDataLine source = (SourceDataLine) line;
DataLine.Info i = (DataLine.Info) source.getLineInfo();
for (AudioFormat format : i.getFormats()) {
System.out.println(" format: " + format);
}
}
}
}
这是我的macbook pro与usb连接的外部声卡的输出:
info: Default Audio Device, version Unknown Version
mixer com.sun.media.sound.DirectAudioDevice@67310bf
info: interface SourceDataLine supporting 14 audio formats, and buffers of at least 32 bytes
format: PCM_UNSIGNED unknown sample rate, 8 bit, mono, 1 bytes/frame,
format: PCM_SIGNED unknown sample rate, 8 bit, mono, 1 bytes/frame,
format: PCM_SIGNED unknown sample rate, 16 bit, mono, 2 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 16 bit, mono, 2 bytes/frame, big-endian
format: PCM_SIGNED unknown sample rate, 24 bit, mono, 3 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 24 bit, mono, 3 bytes/frame, big-endian
format: PCM_UNSIGNED unknown sample rate, 8 bit, stereo, 2 bytes/frame,
format: PCM_SIGNED unknown sample rate, 8 bit, stereo, 2 bytes/frame,
format: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian
format: PCM_SIGNED unknown sample rate, 24 bit, stereo, 6 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 24 bit, stereo, 6 bytes/frame, big-endian
format: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
format: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian
info: interface Clip supporting 14 audio formats, and buffers of at least 32 bytes
info: Built-in Input, version Unknown Version
mixer com.sun.media.sound.DirectAudioDevice@2edf98c4
info: Built-in Output, version Unknown Version
mixer com.sun.media.sound.DirectAudioDevice@59a683e6
info: interface SourceDataLine supporting 14 audio formats, and buffers of at least 32 bytes
format: PCM_UNSIGNED unknown sample rate, 8 bit, mono, 1 bytes/frame,
format: PCM_SIGNED unknown sample rate, 8 bit, mono, 1 bytes/frame,
format: PCM_SIGNED unknown sample rate, 16 bit, mono, 2 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 16 bit, mono, 2 bytes/frame, big-endian
format: PCM_SIGNED unknown sample rate, 24 bit, mono, 3 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 24 bit, mono, 3 bytes/frame, big-endian
format: PCM_UNSIGNED unknown sample rate, 8 bit, stereo, 2 bytes/frame,
format: PCM_SIGNED unknown sample rate, 8 bit, stereo, 2 bytes/frame,
format: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian
format: PCM_SIGNED unknown sample rate, 24 bit, stereo, 6 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 24 bit, stereo, 6 bytes/frame, big-endian
format: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
format: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian
info: interface Clip supporting 14 audio formats, and buffers of at least 32 bytes
info: SB X-Fi Surround 5.1 Pro, version Unknown Version
mixer com.sun.media.sound.DirectAudioDevice@431d9f05
info: interface SourceDataLine supporting 20 audio formats, and buffers of at least 32 bytes
format: PCM_UNSIGNED unknown sample rate, 8 bit, mono, 1 bytes/frame,
format: PCM_SIGNED unknown sample rate, 8 bit, mono, 1 bytes/frame,
format: PCM_SIGNED unknown sample rate, 16 bit, mono, 2 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 16 bit, mono, 2 bytes/frame, big-endian
format: PCM_SIGNED unknown sample rate, 24 bit, mono, 3 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 24 bit, mono, 3 bytes/frame, big-endian
format: PCM_UNSIGNED unknown sample rate, 8 bit, stereo, 2 bytes/frame,
format: PCM_SIGNED unknown sample rate, 8 bit, stereo, 2 bytes/frame,
format: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian
format: PCM_SIGNED unknown sample rate, 24 bit, stereo, 6 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 24 bit, stereo, 6 bytes/frame, big-endian
format: PCM_UNSIGNED unknown sample rate, 8 bit, 6 channels, 6 bytes/frame,
format: PCM_SIGNED unknown sample rate, 8 bit, 6 channels, 6 bytes/frame,
format: PCM_SIGNED unknown sample rate, 16 bit, 6 channels, 12 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 16 bit, 6 channels, 12 bytes/frame, big-endian
format: PCM_SIGNED unknown sample rate, 24 bit, 6 channels, 18 bytes/frame, little-endian
format: PCM_SIGNED unknown sample rate, 24 bit, 6 channels, 18 bytes/frame, big-endian
format: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
format: PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian
info: interface Clip supporting 20 audio formats, and buffers of at least 32 bytes
info: SB X-Fi Surround 5.1 Pro, version Unknown Version
mixer com.sun.media.sound.DirectAudioDevice@4db323af
info: Port Built-in Input, version Unknown Version
mixer com.sun.media.sound.PortMixer@4b743fba
info: Built-in Input source port
info: Port Built-in Output, version Unknown Version
mixer com.sun.media.sound.PortMixer@45d1edcc
info: Port SB X-Fi Surround 5.1 Pro, version Unknown Version
mixer com.sun.media.sound.PortMixer@59530fe3
info: Port SB X-Fi Surround 5.1 Pro, version Unknown Version
mixer com.sun.media.sound.PortMixer@5c382de5
info: SB X-Fi Surround 5.1 Pro source port
是的,这是一个老问题,但因为我正在搜索所有通道、深度等,所以我决定编写一个小的调试方法,如果您想查看更多详细信息并想使用Java8流,它将非常有用:-) 享受:
//filter may be all if you want to include microphone
public void getDeviceInfos(String filter) {
Stream
.of(AudioSystem.getMixerInfo())
.forEach(info -> {
System.out.println("Mixer Name: " + info.getName());
System.out.println("Mixer Description: " + info.getDescription());
System.out.println("Mixer Vendor: " + info.getVendor());
Mixer m = AudioSystem.getMixer(info);
Stream
.of(Arrays.asList(m.getSourceLineInfo()), filter.equals("record") ? Arrays.asList(m.getTargetLineInfo()) : null)
.flatMap(List::stream)
.collect(Collectors.toList())
.forEach(lineInfo -> {
System.out.println(" info: " + lineInfo);
try {
Line line = AudioSystem.getLine(lineInfo);
if (line instanceof SourceDataLine || line instanceof TargetDataLine) {
Arrays.asList(((DataLine.Info) line.getLineInfo()).getFormats()).forEach(format -> {
System.out.println("Channels: " + format.getChannels());
System.out.println("Size in Bits: " + format.getSampleSizeInBits());
System.out.println("Frame Rate: " + format.getFrameRate());
System.out.println("Frame Size: " + format.getFrameSize());
System.out.println("Encoding: " + format.getEncoding());
System.out.println("Sample Rate: " + format.getSampleRate());
});
}
} catch (Exception ex) {
ex.printStackTrace();
}
});
});
}
Java sound仅支持立体声,其他一切都由本机声音软件和硬件生成。另请参阅“Java中有用的环境设置列表”中的
MediaTypes
source。