在 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,在这种情况下必须处理以匹配音频格式。
我想做的是用单独的钢琴拍子声音文件制作一首钢琴曲。 我在 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,在这种情况下必须处理以匹配音频格式。