声音管理器2 - 停止声音时失真
SoundManager2 - Distortion When Stopping Sound
我正在尝试在SoundManager2中循环播放一堆声音文件,并在不同的时间点播放它们。下面的代码采用如下所示的 songArray,其中"音符"由声音文件和播放该声音文件的持续时间组成:
var songArray = [[null],[["clarinet_e4.mp3",1],["clarinet_a4.mp3",1]],[null],[null],[null],[null],[["clarinet_c4.mp3",1]],[["clarinet_c5.mp3",1]],[null],[["clarinet_ab4.mp3",1]],[["clarinet_f3.mp3",1]],[null],[["clarinet_g4.mp3",1]],[["clarinet_d5.mp3",1]],[null],[null]]
它遍历数组中的每个 X,并播放为给定 X 找到的声音。然后,它会在持续时间给定的时间后停止声音。代码运行完美,只是当声音停止时,它会在歌曲结束时发出爆裂声。
function playSong(X) {
playSongNotesAtXValue(X);
window.setTimeout(function() {
X++;
if (X >= theSong.songArray.length) {
X = 0;
}
playSong(X);
}, (30/theSong.tempo)*1000)
}
function playSongNotesAtXValue(X) {
var columnToPlay = theSong.songArray[X];
if (columnToPlay[0] != null) {
for (i = 0; i < columnToPlay.length; i++) {
var note = columnToPlay[i];
soundManager.play(note[0],{volume:30});
window.setTimeout(function() {
soundManager.stop(note[0]);
}, (note[1]*30/theSong.tempo)*1000);
}
}
}
有什么想法可能出错吗?
附言我们已经在最新版本的Safari,Chrome和Firefox上进行了尝试。
如果我
正确跟随您,您正在播放音频文件,然后在文件中间的任意点停止。这通常会导致输出不连续,从而导致爆裂或咔嗒声,因为信号在一个样本中从高电平跳到零。要消除这种情况,您必须平稳地将输入音量从初始音量减小到零,而不是突然将其从初始音量更改为零。
通常可以使用线性插值来完成此"平滑"任务:http://blog.bjornroche.com/2010/10/linear-interpolation-for-audio-in-c-c.html
抱歉,我对 SoundManager2 不够了解,无法理解您是否已经在这样做了。
相关文章:
- 有可能过滤来自嵌入式YouTube的声音吗
- 如何访问声音管理器2创建的声音对象
- 如何减少在移动网络应用程序上播放声音的延迟
- 使用JS和JQuery播放和停止声音
- p5.js声音库:如何添加/删除p5.第5页中的短语().零件()
- 创建一个倒计时计时器脚本,该脚本计算声音文件的持续时间,而不是特定的日期
- HTML5音频如何防止浏览器麦克风拾取所有声音
- 如何将声音添加到jjump代码中
- HTML/JS github页面项目没有't在使用firefox运行时加载图像或声音
- 如何使用Audio API对同一声音文件进行分层
- 游戏声音的无头jplayer
- 你能用sound.js在播放声音文件后5秒执行一个动作吗
- 无声声音数据uri
- 可以'无法播放声音
- 声音不会在一页上播放,但在另一页上会播放
- 如何在javascript中一个声音文件接一个声音地播放
- 在Wordpress网站的图像点击上播放随机声音
- 使用javascript播放声音
- 声音管理器2 - 停止声音时失真
- Play()在播放声音时引起失真/回声