首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与SoundJS切换、播放/暂停?

如何与SoundJS切换、播放/暂停?
EN

Stack Overflow用户
提问于 2015-01-14 02:19:23
回答 1查看 4.4K关注 0票数 0

我使用SoundJS来构建一个psuedo。我有按我想要的方式编程的音箱按钮,但我不能让循环按照我想要的方式工作。

  • 我希望用户点击"loop1“并播放。
  • 如果用户再次单击"loop1“,则应该停止并重置。
  • 如果用户在播放"loop2“时单击"loop1”,则"loop1“停止并重置,而"loop2”则开始播放。

我怎么能解决这个问题。警告,我本质上是一个UI/UX设计人员,并且仍然在学习Javascript,所以如果您能在解释时给我一些更多的细节,那就太好了。谢谢!

下面是我的一些代码,但是要查看它的实际工作,请在这里查看:http://nowthatsgenius.com/clients/beatbox/

代码语言:javascript
复制
<body onload="init();">
    <section class="player-container">
        <article class="player-controls">
            <ul class="player-controls">
                <li class="player-controls-button" id="loop1" onclick="playSound(this)">Loop 1</li>
                <li class="player-controls-button" id="loop2" onclick="playSound(this)">Loop 2</li>
            </ul>
        </article>
    </section>
    <section class="mpc-container">
        <article class="mpc-title mpc-col">
            <span class="text">V1</span>
        </article>
        <article class="mpc-controls mpc-col">
            <ul class="mpc-controls-wrap">
                <li class="mpc-controls-row">
                    <ul>
                        <li class="mpc-controls-button" id="a1" onclick="playSound(this)"></li>
                        <li class="mpc-controls-button" id="a2" onclick="playSound(this)"></li>
                        <li class="mpc-controls-button" id="a3" onclick="playSound(this)"></li>
                        <li class="mpc-controls-button" id="a4" onclick="playSound(this)"></li>
                        <li class="mpc-controls-button" id="a5" onclick="playSound(this)"></li>
                    </ul>
                    <ul>
                        <li class="mpc-controls-button" id="a6" onclick="playSound(this)"></li>
                        <li class="mpc-controls-button" id="a7" onclick="playSound(this)"></li>
                        <li class="mpc-controls-button" id="a8" onclick="playSound(this)"></li>
                        <li class="mpc-controls-button" id="a9" onclick="playSound(this)"></li>
                        <li class="mpc-controls-button" id="a10" onclick="playSound(this)"></li>
                    </ul>
                </li>
            </ul>
        </article>
    </section>

    <script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
    <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
    <script src="http://code.createjs.com/soundjs-0.6.0.min.js"></script>
    <script>
        var preload;

        function init() {
            if (!createjs.Sound.initializeDefaultPlugins()) {
                document.getElementById("error").style.display = "block";
                document.getElementById("content").style.display = "none";
                return;
            }

            var assetsPath = "assets/";
        var sounds = [
                {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("fileload", createjs.proxy(handleLoadComplete, this));
        createjs.Sound.registerSounds(sounds, assetsPath);
      }


        function playSound(target) {

            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);
        }


    </script>

</body>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-14 02:47:49

在开始播放声音之后,可以通过将声音赋值给一个变量来修改它们。在本例中,我创建了变量loop1loop2

代码语言:javascript
复制
// 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版

代码语言:javascript
复制
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对象。你可以用很多很酷的方式来修改它,如果你想知道你还能用这些变量做些什么的话,你可以用这是文件

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27934839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档