如何在java中获得混音器通道布局

我以为我可以在这个伟大的网站上找到任何东西,但现在我似乎面临着没有答案的问题:)请帮忙!

事实上,我需要播放6个不同的wav文件,每个文件有1个通道,由系统调音台支持的6个通道(左,右,左环绕等)。

使用6个不同的SourceDataLines看起来是合乎逻辑的但是从我看到的情况来看,Mixer不能为它们进行每个样本的同步,所以我想出了在单独的线程中交错它们并且只使用一个SourceDataLine来播放它。 它适用于左右两个通道,但对于更多通道,我需要知道精确的通道布局(差异系统和声卡可能不同)。 我认为系统调音台之一(我有两个:“线性输入”和“java音响系统混音器”)可能有这个元数据,但我找不到它。

有谁知道如何获得这些信息?

谢谢。

我的朋友和我刚刚发现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 

是的,这是一个古老的问题但是因为我正在寻找所有的渠道,深度等等我决定编写一个小的调试方法,如果你想看到更多的细节并想使用java 8流,这是有用的:-)

请享用:

 //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(); } }); }); }