问题描述
我正准备把这个该死的图书馆扔进垃圾箱。这样做时,我对“ HowlerJS”没有任何问题,似乎SoundJS只是拒绝加载我的mp3文件,除非它们具有扩展名。
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上播放声音。反正这吗?还是我必须从字面上使用原始位置。
解决方法
我通过更改逻辑的工作方式来解决它,并使用加载的元数据和原始文件位置来获取对象。
至少在.mp3的支持下,我找不到任何支持此扩展的库。所以我的逻辑有点像这样。充满了上述Sound 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扩展名,我仍然可以获得所需的逻辑。