Play() 播放声音时导致 distortion/echo
Play() Causes distortion/echo when playing sound
我正在尝试 chrome 扩展。现在我有这些代码:
<button style="text-align:center; margin-bottom: 5px;" id="myboobutton">DogMeme.avi</button>
<script type="text/javascript" src="popup.js"></script>
将是播放声音的按钮html
我正在制作一个按钮并给它一个 id,这样它就可以调用一个 Javascript 文件来播放声音(我必须这样做,因为你不能 运行 JS HTML 的 chrome 分机。)
该按钮的 ID 为 'myboobutton'
function myboo() {
var heyboosong = new Audio();
heyboosong.src = "myboo.mp3";
heyboosong.volume=0.5
heyboosong.play();
}
document.getElementById('myboobutton').addEventListener('click', myboo);
按钮调用此 popup.js 以便它可以播放音频文件。
我有一个音板扩展,可以播放各种 mp3 歌曲。当他们在 chrome 扩展中播放时,他们听起来很回音。当单独的音频文件播放时,它们听起来不错。我怀疑它正在多次调用导致回显的函数。我想弄清楚如何解决它。 (感谢 Makyen 帮助澄清)我已经再次测试,它仍然成功。
似乎所有的 mp3 声音似乎都是这样做的。不确定它是否特定于 chrome 扩展。但它似乎并没有在更快的 PC 上发生那么多。我是编码新手,我在过去一周刚刚学到了所有这些。非常感谢!
这是解压后的扩展
https://drive.google.com/drive/folders/0B3AU3p8wyWK3YXo1YUlGWGg5RGs?usp=sharing
您需要应用debounce/throttle概念。它旨在在函数需要执行之间的延迟时使用(即 ajax 在 typeahead 插件中调用)。
您可以使用简单的 Throttle 实现:
var Throttle = function(fn, time) {
var flag = true, toId;
return function() {
if (flag) {
var args = arguments;
fn.apply(this, args);
flag = false;
clearTimeout(toId);
toId = setTimeout(function() {
flag = true;
}, time);
}
}
};
然后,在您的代码中:
document.getElementById('myboobutton').addEventListener('click', Throttle(myboo,1000)); //1000ms is 1second
好的,做一件事;(我正在展示使用 jQuery 的解决方案)
$("#myboobutton").click(function(){
$("#myboobutton").css("pointer-events","none"); //click 'll be disabled by this
//write code for playing sound;
setTimeout(function(){
$("#myboobutton").css("pointer-events",""); //button 'll be clickable again after 1 sec
},1000)
})
您可以在点击事件中禁用按钮,并创建一个setTimeout()函数在一定时间后再次启用按钮。
例如:
var mybooBtn = document.getElementById('myboobutton');
mybooBtn.addEventListener('click', function() {
mybooBtn.disabled = true;
setTimeout(function() {
mybooBtn.disabled = false;
}, 1000);
// code to play sound goes here
});
这里是 fiddle:https://jsfiddle.net/g9wx30qj/
我正在尝试 chrome 扩展。现在我有这些代码:
<button style="text-align:center; margin-bottom: 5px;" id="myboobutton">DogMeme.avi</button>
<script type="text/javascript" src="popup.js"></script>
将是播放声音的按钮html
我正在制作一个按钮并给它一个 id,这样它就可以调用一个 Javascript 文件来播放声音(我必须这样做,因为你不能 运行 JS HTML 的 chrome 分机。) 该按钮的 ID 为 'myboobutton'
function myboo() {
var heyboosong = new Audio();
heyboosong.src = "myboo.mp3";
heyboosong.volume=0.5
heyboosong.play();
}
document.getElementById('myboobutton').addEventListener('click', myboo);
按钮调用此 popup.js 以便它可以播放音频文件。
我有一个音板扩展,可以播放各种 mp3 歌曲。当他们在 chrome 扩展中播放时,他们听起来很回音。当单独的音频文件播放时,它们听起来不错。我怀疑它正在多次调用导致回显的函数。我想弄清楚如何解决它。 (感谢 Makyen 帮助澄清)我已经再次测试,它仍然成功。
似乎所有的 mp3 声音似乎都是这样做的。不确定它是否特定于 chrome 扩展。但它似乎并没有在更快的 PC 上发生那么多。我是编码新手,我在过去一周刚刚学到了所有这些。非常感谢!
这是解压后的扩展 https://drive.google.com/drive/folders/0B3AU3p8wyWK3YXo1YUlGWGg5RGs?usp=sharing
您需要应用debounce/throttle概念。它旨在在函数需要执行之间的延迟时使用(即 ajax 在 typeahead 插件中调用)。
您可以使用简单的 Throttle 实现:
var Throttle = function(fn, time) {
var flag = true, toId;
return function() {
if (flag) {
var args = arguments;
fn.apply(this, args);
flag = false;
clearTimeout(toId);
toId = setTimeout(function() {
flag = true;
}, time);
}
}
};
然后,在您的代码中:
document.getElementById('myboobutton').addEventListener('click', Throttle(myboo,1000)); //1000ms is 1second
好的,做一件事;(我正在展示使用 jQuery 的解决方案)
$("#myboobutton").click(function(){
$("#myboobutton").css("pointer-events","none"); //click 'll be disabled by this
//write code for playing sound;
setTimeout(function(){
$("#myboobutton").css("pointer-events",""); //button 'll be clickable again after 1 sec
},1000)
})
您可以在点击事件中禁用按钮,并创建一个setTimeout()函数在一定时间后再次启用按钮。
例如:
var mybooBtn = document.getElementById('myboobutton');
mybooBtn.addEventListener('click', function() {
mybooBtn.disabled = true;
setTimeout(function() {
mybooBtn.disabled = false;
}, 1000);
// code to play sound goes here
});
这里是 fiddle:https://jsfiddle.net/g9wx30qj/