Javascript HTML5网络音频-降低音频播放速度,提前停止播放
我正在开发一个基于web的音乐序列器/跟踪器,我注意到在我的示例播放例程中,音频上下文似乎只在示例的持续时间内存在,而且web音频API在我切换示例时似乎不会调整播放持续时间。例如,如果我把一个音符调低一个八度,那么程序只播放声音的前半部分,然后停止播放。更强烈的音调降档会导致播放的声音更少,虽然我不确定能否证实这一点,但我怀疑加快音频速度会导致在声音离开缓冲区之前出现较长时间的静音 这是我目前的音频播放程序。到目前为止,在确保其他函数向该例程发送正确数据方面,比扩展该例程的功能方面做了更多的工作Javascript HTML5网络音频-降低音频播放速度,提前停止播放,javascript,html,audio,web-audio-api,Javascript,Html,Audio,Web Audio Api,我正在开发一个基于web的音乐序列器/跟踪器,我注意到在我的示例播放例程中,音频上下文似乎只在示例的持续时间内存在,而且web音频API在我切换示例时似乎不会调整播放持续时间。例如,如果我把一个音符调低一个八度,那么程序只播放声音的前半部分,然后停止播放。更强烈的音调降档会导致播放的声音更少,虽然我不确定能否证实这一点,但我怀疑加快音频速度会导致在声音离开缓冲区之前出现较长时间的静音 这是我目前的音频播放程序。到目前为止,在确保其他函数向该例程发送正确数据方面,比扩展该例程的功能方面做了更多的工
function playSound(buffer, pitch, dspEffect, dspValue, volume) {
var source = audioEngine.createBufferSource();
source.buffer = buffer;
source.playbackRate.value = pitch;
// Volume adjustment is handled before other DSP effects are added.
var volumeAdjustment = audioEngine.createGain();
source.connect(volumeAdjustment);
// Very basic error trapping in case of bad volume input.
if(volume >= 0 && volume <= 1) {
volumeAdjustment.gain.value = volume;
} else {
volumeAdjustment.gain.value = 0.6;
}
switch(dspEffect){
case 'lowpass':
var createLowPass = audioEngine.createBiquadFilter();
volumeAdjustment.connect(createLowPass);
createLowPass.connect(audioEngine.destination);
createLowPass.type = 'lowpass';
createLowPass.frequency.value = dspValue;
break;
// There are a couple of other optional DSP effects,
// but so far they all operate in about the same fashion.
}
source.start();
}
功能播放声音(缓冲区、音高、DSP效果、DSP值、音量){
var source=audioEngine.createBufferSource();
source.buffer=缓冲区;
source.playbackRate.value=音高;
//音量调整是在添加其他DSP效果之前进行的。
var volumeAddjustment=audioEngine.createGain();
source.connect(音量调节);
//在音量输入错误的情况下捕获非常基本的错误。
如果(卷>=0和卷(&V)
我发现在声音中附加几秒钟的静音可以解决这个问题,但由于我需要处理大量的声音,这很麻烦,我更喜欢基于代码的解决方案
你可以上传一个只需几秒钟静音的声音文件,并将其附加到实际的音频文件中。这是一个说明如何做到这一点的答案…你有一个这样的例子吗?当然,改变播放速率不应该改变声音播放到完成,但如果没有看到它的运行,我就不能调试。此例程是名为Tracker2D的程序的一部分,该程序可在上获得。我最近发现该漏洞似乎没有发生在Firefox中。我显然错过了它,因为我主要是在Chrome中开发的,我将编辑原始问题以说明这一点。我建议您仔细检查这是否出现在最新的Chrome nigh中然后在Chromium issue tracker中提交一个bug Chrome中出现了一些问题,源节点的播放速率小于1。我认为这在M44中得到了及时修复,但我不确定。