Javascript 如何使用SoundJS切换播放/暂停?
我正在使用SoundJS构建一个psuedo MPC。我已经按我想要的方式编程了音响套件按钮,但我无法按我想要的方式让环路工作Javascript 如何使用SoundJS切换播放/暂停?,javascript,soundjs,Javascript,Soundjs,我正在使用SoundJS构建一个psuedo MPC。我已经按我想要的方式编程了音响套件按钮,但我无法按我想要的方式让环路工作 我想让用户点击“loop1”并播放 如果用户再次单击“loop1”,则应停止并重置 如果用户在“loop1”播放时单击“loop2”,则在“loop2”开始播放时,“loop1”停止并重置 我怎样才能掌握这个问题。警告,我本质上是一个UI/UX设计师,还在学习Javascript,所以如果你能在解释时给我更多的细节,那就太好了。谢谢 下面是我的一些代码,但要查看它的
- 我想让用户点击“loop1”并播放李>
- 如果用户再次单击“loop1”,则应停止并重置
- 如果用户在“loop1”播放时单击“loop2”,则在“loop2”开始播放时,“loop1”停止并重置
- 循环1
- 循环2
V1
-
var预载;
函数init(){
如果(!createjs.Sound.initializeDefaultPlugins()){
document.getElementById(“错误”).style.display=“块”;
document.getElementById(“内容”).style.display=“无”;
返回;
}
var assetsPath=“资产/”;
变量声音=[
{id:“loop1”,src:“loop1.mp3”},
{id:“loop2”,src:“loop2.mp3”},
{id:“a1”,src:“snare.wav”},
{id:“a2”,src:“kick1.wav”},
{id:“a3”,src:“clap1.wav”},
{id:“a4”,src:“closedhat.wav”},
{id:“a5”,src:“cymbal.wav”},
{id:“a6”,src:“kick2.wav”},
{id:“a7”,src:“clap2.wav”},
{id:“a8”,src:“openhat.wav”},
{id:“a9”,src:“voice1.wav”},
{id:“a10”,src:“voice2.wav”},
];
$('.player controls button').attr(“disabled”,true);
createjs.Sound.alternateExtensions=[“mp3”];
createjs.Sound.addEventListener(“文件加载”,createjs.proxy(handleLoadComplete,this));
createjs.Sound.registerSounds(声音、资产路径);
}
功能播放声音(目标){
var instance=createjs.Sound.play(target.id,createjs.Sound.INTERRUPT\u NONE);
$(“.player控制按钮”)。单击(函数(事件){
if(instance.playState==createjs.Sound.PLAY_成功){
instance.stop();
}
否则{
play(target.id,createjs.Sound.INTERRUPT\u NONE);
}
});
log(instance.playState);
}
开始播放声音后,可以通过将声音分配给变量来修改声音。在本例中,我创建了变量loop1
和loop2
// Creating variables outside playSound() so they exist in the global scope.
var loop1 = null;
var loop2 = null;
function playSound(target) {
if(loop1){ // If loop1 exists, stop it.
loop1.stop();
}
if(loop2){ // If loop2 exists, stop it.
loop2.stop();
}
if(target.id == "loop1"){
// Assign value to var loop1
loop1 = createjs.Sound.play(target.id, createjs.Sound.INTERRUPT_NONE);
}
else if(target.id == "loop2"){
// Assign value to var loop2
loop2 = createjs.Sound.play(target.id, createjs.Sound.INTERRUPT_NONE);
}
else{
// Otherwise, create generic sound
var instance = createjs.Sound.play(target.id, createjs.Sound.INTERRUPT_NONE);
}
$(".player-controls-button").click(function(event) {
if (instance.playState == createjs.Sound.PLAY_SUCCEEDED) {
instance.stop();
}else {
instance.play(target.id, createjs.Sound.INTERRUPT_NONE);
}
});
console.log(instance.playState);
}
我建议您将声音效果的playSound(target)
功能分开,并为音乐循环创建一个名为playLoop(target)
的新功能,以便于阅读。但这取决于你
第2版
var loop1 = null;
var loop2 = null;
function playLoop(target){
// If loop1 exists, stop it and delete it
if(loop1){
loop1.stop();
loop1 = null;
}else if(target.id == "loop1"){
loop1 = createjs.Sound.play(target.id, createjs.Sound.INTERRUPT_NONE);
}
// If loop2 exists, stop it and delete it
if(loop2){
loop2.stop();
loop2 = null;
}else if(target.id == "loop2"){
loop2 = createjs.Sound.play(target.id, createjs.Sound.INTERRUPT_NONE);
}
}
将createjs.Sound.play()指定给变量时,该变量将成为
AbstractSoundInstance
对象。如果您想了解这些变量还能做些什么,您可以用许多很酷的方法对其进行修改。因此,我做了一些更改,并分离了函数。循环可以相互停止,但循环本身无法停止。如果你玩一个循环,并试图阻止它,它只是再次播放。我尝试了很多不同的修复方法,但都没有成功。你认为是什么?我已经上传了所有内容:所有代码都在源代码的一页上。谢谢你说循环不能自行停止是什么意思?我想,当你点击loop1
时,你希望它重新设置并从头开始播放。您希望它在第一次单击时播放,然后在第二次单击时停止,然后在第三次单击时从0重新开始吗?我很抱歉。让我试着简化一下:用户点击loop1。循环1播放。在loop1播放时,如果用户单击loop1,loop1将停止。在loop1播放时,如果用户单击loop2,则loop1停止播放,loop2开始播放。两个循环不应同时播放。我不想要单独的开/关按钮,因为当用户单击“loop1”时,“loop1”按钮将闪烁,就像钢琴键盘或MPC一样。好的,我编辑了我的响应,将版本2包含在我的原始代码下面。此playLoop()
函数将在循环不存在时启动循环,或在循环已在播放时停止循环。如果单击loop2
,它也将停止loop1
,反之亦然。
var loop1 = null;
var loop2 = null;
function playLoop(target){
// If loop1 exists, stop it and delete it
if(loop1){
loop1.stop();
loop1 = null;
}else if(target.id == "loop1"){
loop1 = createjs.Sound.play(target.id, createjs.Sound.INTERRUPT_NONE);
}
// If loop2 exists, stop it and delete it
if(loop2){
loop2.stop();
loop2 = null;
}else if(target.id == "loop2"){
loop2 = createjs.Sound.play(target.id, createjs.Sound.INTERRUPT_NONE);
}
}