在 java 中处理连续的声音文件

Manipulate consecutive sound files in java

我想做的是用单独的钢琴拍子声音文件制作一首钢琴曲。 我在 javascript 中用 WebAudioAPI 做了一个版本,使用振荡器而不是音频文件。这是断章取意的部分代码:

var ctx = new AudioContext();
var time = ctx.currentTime;
for(...){
  osc = ctx.createOscillator();
  osc.start(time);
  time = time + 3;
  osc.stop(time);
  osc.disconnect(time);
}     

我不知道如何像使用振荡器那样停止音频文件。 (P.S.)我只保留了与我的问题相关的部分代码,所以请忽略它的功能。

谢谢!

使用 Clip 方法 stop() 停止播放。随后调用的 start() 将从同一点恢复播放。但是可以使用 setFramePosition()setMicrosecondPosition() 方法将播放点更改到新位置。

AudioInputStream的一个SourceDataLine one can also use start() and stop() methods. But changing to a new playback point is limited and trickier. One can only move forward, and this is done by using the skip()方法,用于获取通过SourceDataLine输出的数据。

如果您正在播放的声音只打算播放一次,我倾向于使用 SourceDataLine。如果您要反复播放声音,并且将数据保存在内存中不是负担,那么 Clip 可能是更好的选择。

有了 SourceDataLine,您不仅限于使用 AudioInputStream 作为源信号。您还可以使用定制的振荡器或合成器。转换振荡器的输出,如果是 PCM,在这种情况下必须处理以匹配音频格式。