0

我想做的是用钢琴拍手的单独声音文件制作一首钢琴歌曲。我在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);
}     

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

谢谢!

4

1 回答 1

0

对于剪辑,使用该方法stop()停止播放。随后的调用start()将从同一点恢复播放。setFramePosition()但是可以使用或setMicrosecondPosition()方法将播放点更改为新位置。

也可以使用SourceDataLinestart()方法stop()。但是更改到新的播放点是有限且更棘手的。只能向前移动,这是通过使用 的skip()方法来完成的,AudioInputStream该方法用于获取通过SourceDataLine.

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

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

于 2022-01-16T17:36:06.093 回答