首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在howler.js上链接声音

如何在howler.js上链接声音
EN

Stack Overflow用户
提问于 2014-09-29 17:25:54
回答 3查看 9.6K关注 0票数 3

我需要在howler.js中播放一些声音,问题是我不知道如何链接它。

例如,在string BCG

需要玩b.ogg,然后是c.ogg,最后是g.ogg

如果我只是使用(加载后):

代码语言:javascript
复制
sound.play('b');
sound.play('c');
sound.play('g');

它们都开始和重叠,这不是我所需要的。

我看到这里有一个onend属性,但是我想不出如何正确使用它。

致以问候。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-29 18:10:28

您可以创建一个函数playString(yourString),它将读取每个字符并动态设置声音的onend属性。下面的例子应该是B,C,G,A,C

代码语言:javascript
复制
var sound = new Howl({
    urls: ['http://shrt.tf/abcdefg.mp3'],
    volume: 1,
    sprite: {
        a: [0, 600],
        b: [700, 500],
        c: [1200, 600],
        d: [1900, 500],
        e: [2400, 500],
        f: [2900, 500],
        g: [3400, 500],
    }
});

Howl.prototype.playString = function(str){
    if(str.length>1){
        this._onend[0] = function(){this.playString(str.substring(1,str.length));};
    } else {
        this._onend[0] = function(){};
    }
    if(str.length>0){
        this.play(str.substring(0,1));
    }
};

sound.playString('bcgac');
代码语言:javascript
复制
<script src="http://shrt.tf/howler.js"></script>

请注意,您还可以调整此函数,以便在某个字符不在sprite时工作,或者使用名称数组而不是字符串。

票数 4
EN

Stack Overflow用户

发布于 2017-08-02 13:54:52

这里是我的简单解决方案,我使用的是小文件,所以下载延迟不是一个问题。在这种情况下,声音是全局的。

代码语言:javascript
复制
function play_audio(file_names) {
    sound = new Howl({
        src: [audio_url+file_names[0]],
        volume: 0.5,
        onend: function() {
            file_names.shift();
            if (file_names.length > 0) {
                play_audio(file_names);
            }
        }
    });      
    sound.play();
}
票数 7
EN

Stack Overflow用户

发布于 2014-10-04 15:09:44

您可以使用不需要精灵的代码(小提琴Github问题):

代码语言:javascript
复制
var playlist = function(e) {
    // initialisation:
      pCount = 0;
      playlistUrls = [
        "https://upload.wikimedia.org/wikipedia/commons/8/8a/Zh-Beijing.ogg",
        "https://upload.wikimedia.org/wikipedia/commons/8/8a/Zh-Beijing.ogg",
        "./audio/a.mp3",
        "./audio/b.mp3",
        "./audio/c.mp3",
        "./audio/d.mp3"
        ], // audio list
      howlerBank = [],
      loop = true;

    // playing i+1 audio (= chaining audio files)
    var onEnd = function(e) {
      if (loop === true ) { pCount = (pCount + 1 !== howlerBank.length)? pCount + 1 : 0; }
      else { pCount = pCount + 1; }
      howlerBank[pCount].play();
    };

    // build up howlerBank:     
    playlistUrls.forEach(function(current, i) {   
      howlerBank.push(new Howl({ urls: [playlistUrls[i]], onend: onEnd, buffer: true }))
    });

    // initiate the whole :
        howlerBank[0].play();
}

请分享你的变化,如果你做一个。

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

https://stackoverflow.com/questions/26105483

复制
相关文章

相似问题

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