首页 > 解决方案 > SoundJS 不会从无扩展的 MP3 播放声音

问题描述

我正准备把这个该死的图书馆扔进垃圾箱。执行此操作时,我对“HowlerJS”没有任何问题,而且似乎 SoundJS 只是拒绝加载我的 mp3 文件,除非它们具有扩展名。

我的代码非常简单,将一个包含文件 ID 的数组传递给 register sound 函数。

   createjs.Sound.on("fileload", Audiocover._, this);
        createjs.Sound.alternateExtensions = ["mp3"];

        for(let i = 0; i < MusicPixels.length; i++)
        {

            debugLog("registered sound: " + "sound-" + i + " (" + resources.sounds[i]  + ")" );

            var sound = {
                path: "/",
                manifest:[
                    {id: "sound-" + i, src: {mp3: "file?id=" + resources.sounds[i]}}
                ]
            }

            createjs.Sound.registerSounds( sound );
        }

而已。如果我包含扩展名 .mp3,则会播放声音。使用当前代码,它不会显示任何错误。它完全拒绝在 Chrome 上播放声音。无论如何围绕这个?还是我必须从字面上使用原始位置。

标签: javascriptcreatejssoundjs

解决方案


我通过更改我的逻辑的工作方式并在加载时使用元数据 + 原始文件位置抓取一个对象来修复它。

我找不到任何地方至少使用 .mp3 的这个库支持扩展少加载。所以我的逻辑有点像这样。充满所述声音 ID 的查询 API 服务器和 API 服务器的数据对象返回一个带有轨道元数据(如 soundcloud)+ 直接声音 URL 的对象。

 //returns with an object with the latest .mp3 locations of each of the file ids
 function getResourceLocations(resources, callback)
    {

        $.post( getApiLink("resources"), {
            apikey: Options.apikey,
            resources
        }, function (data) {

            if(data.errors.length!==0)
                throw data.errors[0];

            callback(data);
        });
    }

然后我只需通过该方法加载它,我仍然可以获得所需的逻辑,而无需 .mp3 扩展名。


推荐阅读