【问题标题】:Looping audio in midijs?在 midijs 中循环播放音频?
【发布时间】:2021-07-12 13:14:58
【问题描述】:

我正在尝试使用MIDIjs 播放音频(特别是因为我正在使用WAD.js,它使用它)。不幸的是,我不知道如何循环播放音频,文档的缺乏令人沮丧,而且我在源代码中也找不到任何东西。至少我想知道文件何时自然结束并使用MIDIjs.play() 重新启动,但我什至没有看到任何相关信息。

如果有人指出我的解决方案,我将不胜感激,谢谢。

【问题讨论】:

    标签: javascript midi


    【解决方案1】:

    正确,没有循环功能(在任何地方都有记录 here)。

    但是,我们至少可以用MIDIjs.player_callback 模拟它,它每100 毫秒调用一次,对象看起来像{ time : number }。这是经过的时间(以秒为单位)。我们可以将它与get_duration 结合起来检测播放结束。

    function playAutoReset(url)
    {
        // get_duration requires a callback as it returns nothing.
        MIDIjs.get_duration(url, function (duration)
        { 
            console.info(`Duration: ${duration}`);
            // Start the initial play
            MIDIjs.play(url);
            
            // This lets us keep track of current play time in seconds
            MIDIjs.player_callback = function (mes)
            {
                if (mes.time / duration >= 1)
                {
                    console.info('End reached');
                    // This plays the audio again
                    MIDIjs.play(url);
                }
            };
        });
    }
    

    注意:

    这确实每次都调用play,因此它可能会重新下载源(文档似乎暗示总是如此)。如果您想要更高效的网络,您可能需要查看 XHR/AJAX 并创建一个 object URL,因为文档确实指定 play 需要一个 URL。但是,我认为这将是最简单的解决方案,并且它确实显示了在结束时再次播放 MIDI 音轨所必须执行的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多