【发布时间】:2013-06-18 00:50:34
【问题描述】:
在java中你可以像这样创建一个SourceDataLine:
AudioFormat af = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100.0, 16, 1, 2, 44100.0, false);
SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
之后你可以打开然后写入数据:
byte[] data = new byte[1024];
fillwithsounds(data);
sdl.open()
sdl.start()
sdl.write(data, 0, 1024);
这一切都适用于单声道数据。
我想做的是能够编写立体数据,但我在网上找不到任何关于如何更改字节数组才能写入立体数据的文档。
似乎我需要在创建 AudioFormat 时增加通道数量 - 使其成为立体声 - 然后我需要将帧速率减半(否则 Java 会抛出 IllegalArgumentException)
我不明白为什么会这样,也不明白我提供给 DataSourceLine 的数据的新格式应该是什么。
也许有人在音频格式方面的经验比我多一点,无法解释这个问题。提前致谢!
【问题讨论】:
-
我的理论是,而不是由 Mono-Frame、Mono-Frame、Mono-Frame 组成的字节数组。字节数组现在应该由左帧、右帧、左帧、右帧、左帧、右帧组成。我试图实现这一点,但它没有给我任何明智的东西,而是给了我静态。
-
“之后您可以打开然后向其中写入数据:这一切都适用于单声道数据。” 好的,您就快到了。无论您以原始格式为每个 16 字节帧写什么,都写两次。这实际上是“通过两个扬声器单声道”,但如果你有不同的东西要写到另一个频道,那就写吧。
-
“我试图实现它,但是..” 为了尽快获得更好的帮助,请发布SSCCE。