Javascript 加载多个音频文件以同时播放,即使internet连接不良
我已经开发了一个功能齐全的多声道音频播放器,如果我连接到wifi,该播放器将按预期工作。我需要这些文件同时播放。但是,如果我在手机上,它会播放第一个文件,然后是第二个,然后是第三个,依此类推。是否有一种方法可以先将所有选定的文件发送到服务器,然后再将其发送回用户一起收听?请帮忙。需要尽快启动此网站Javascript 加载多个音频文件以同时播放,即使internet连接不良,javascript,css,html,audio,Javascript,Css,Html,Audio,我已经开发了一个功能齐全的多声道音频播放器,如果我连接到wifi,该播放器将按预期工作。我需要这些文件同时播放。但是,如果我在手机上,它会播放第一个文件,然后是第二个,然后是第三个,依此类推。是否有一种方法可以先将所有选定的文件发送到服务器,然后再将其发送回用户一起收听?请帮忙。需要尽快启动此网站 makeSong = function(f) { var add, button, path, play; path = curpath.concat(["" + f + ".mp3"]).joi
makeSong = function(f) {
var add, button, path, play;
path = curpath.concat(["" + f + ".mp3"]).join('/');
button = function(cls, onclick) {
return $('<i/>').addClass(cls).addClass('link').addClass('fa').addClass("fa-" + cls).click(onclick);
};
play = button('play', function() {
play = $(this).hasClass('fa-play');
if (play) {
multiPlayer.stop();
singlePlayer.play1(path);
} else {
singlePlayer.stop();
}
$(this).toggleClass('fa-play', !play);
return $(this).toggleClass('fa-pause', play);
});
add = button('plus', function() {
return addItem(f, path);
});
return $('<div/>').addClass('sound cf').text(f).append($('<div/>').addClass('buttons left').append(play).append(add));
};
addSongs = function(fnames) {
var $songs, f, _i, _len, _results;
$songs = $('.sounds').empty();
_results = [];
for (_i = 0, _len = fnames.length; _i < _len; _i++) {
f = fnames[_i];
_results.push(makeSong(f).appendTo($songs));
}
return _results;
};
currentPath = [];
loadSongs = function(path) {
return $.getJSON('/api/dir', {
parts: JSON.stringify(path)
}, function(d) {
curpath = path;
return addSongs(d.fnames);
});
};
parentFolder = function(x) {
return x.parents('.folder').first();
};
getPath = function(elem) {
var parent;
parent = parentFolder(elem);
if (parent.length === 0) {
return [];
}
return getPath(parent).concat([parent.attr('data-folder')]);
};
$('.categories .folder span.link').click(function() {
loadSongs(getPath($(this)));
$('.categories .folder').removeClass('active');
return parentFolder($(this)).addClass('active');
});
$('.player .play').click(function() {
var $i, play;
$i = $(this).find('i');
play = $i.hasClass('fa-play');
if (play) {
multiPlayer.playAll();
} else {
multiPlayer.stop();
}
$i.toggleClass('fa-play', !play);
return $i.toggleClass('fa-pause', play);
});
$('.player .sound').click(function() {
var $i, mute;
$i = $(this).find('i');
mute = $i.hasClass('fa-volume-up');
if (mute) {
multiPlayer.mute();
} else {
multiPlayer.unmute();
}
$i.toggleClass('fa-volume-up', !mute);
return $i.toggleClass('fa-volume-off', mute);
});
$('.button.buy').click(function() {
var x;
x = [];
$('.things .thing').each(function() {
return x.push($(this).attr('data-path'));
});
if (x.length > 0) {
return window.location.href = "/buy?" + ($.param({
songs: JSON.stringify(x)
}));
} else {
return alert('Please add some songs below first.');
}
});
$('.folder .link').click(function() {
return $(this).closest('.folder').children('.subfolders').toggle();
});
}).call(this);
makeSong=函数(f){
变量添加、按钮、路径、播放;
path=curpath.concat([“”+f+“.mp3”])。join(“/”);
按钮=功能(cls,onclick){
返回$('').addClass(cls).addClass('link').addClass('fa').addClass('fa-“+cls.)。单击(onclick);
};
播放=按钮('播放',功能(){
play=$(this.hasClass('fa-play');
如果(玩){
多人游戏。停止();
单人游戏1(路径);
}否则{
singlePlayer.stop();
}
$(this.toggleClass('fa-play',!play);
返回$(this.toggleClass('fa-pause',play);
});
添加=按钮('plus',函数(){
返回附加项(f,路径);
});
返回$('').addClass('sound cf').text(f).append($('').addClass('buttons left').append(play).append(add));
};
addSongs=函数(fnames){
var$songs,f,_i,_len,_results;
$songs=$('.sounds').empty();
_结果=[];
对于(_i=0,_len=fnames.length;_i<_len;_i++){
f=fnames[_i];
_结果:push(makeSong(f)、appendTo($songs));
}
返回结果;
};
currentPath=[];
loadSongs=函数(路径){
返回$.getJSON('/api/dir'{
部分:JSON.stringify(路径)
},功能(d){
curpath=路径;
返回addSongs(d.fnames);
});
};
parentFolder=函数(x){
返回x.parents('.folder').first();
};
getPath=函数(元素){
var父代;
parent=parentFolder(elem);
if(parent.length==0){
返回[];
}
返回getPath(parent.concat([parent.attr('data-folder')]);
};
$('.categories.folder span.link')。单击(函数(){
loadSongs(getPath($(this));
$('.categories.folder').removeClass('active');
返回parentFolder($(this)).addClass('active');
});
$('.player.play')。单击(函数(){
var$i,play;
$i=$(this.find('i');
play=$i.hasClass('fa-play');
如果(玩){
多人游戏;
}否则{
多人游戏。停止();
}
$i.toggleClass('fa-play',!play);
返回$i.toggleClass('fa-pause',play);
});
$('.player.sound')。单击(函数(){
var$i,静音;
$i=$(this.find('i');
静音=$i.hasClass('fa-音量增大');
如果(静音){
multiPlayer.mute();
}否则{
多人游戏。取消静音();
}
$i.toggleClass('fa-音量增大',!静音);
返回$i.toggleClass('fa-volume-off',静音);
});
$('.button.buy')。单击(函数(){
var x;
x=[];
$('.things.things').each(函数(){
返回x.push($(this.attr('data-path'));
});
如果(x.length>0){
return window.location.href=“/buy?”+($.param({
歌曲:JSON.stringify(x)
}));
}否则{
返回警报('请先在下面添加一些歌曲');
}
});
$('.folder.link')。单击(函数(){
返回$(this).closest('.folder').children('.subfolders').toggle();
});
}).打电话(这个);
下面是一个收集和同步四首曲目的简单示例。对于一个完整的应用程序,您可能希望在allLoaded()中启用一个按钮或其他内容,而不是只在所有应用程序中播放()
var tracks=[ // array of urls of mp3s
"https://archive.org/download/tsp1997-01-24.AT.TC-D5M.flac16/tsp1997-01-24d1t05.mp3",
"https://archive.org/download/tsp1997-01-24.AT.TC-D5M.flac16/tsp1997-01-24d2t02.mp3",
"https://archive.org/download/tsp1997-01-24.AT.TC-D5M.flac16/tsp1997-01-24d2t03.mp3",
"https://archive.org/download/tsp1997-01-24.AT.TC-D5M.flac16/tsp1997-01-24d1t10.mp3"
],
loadedCount=0, //how many tags are ready to play through?
tags=[]; // collection of <audio> tags
function allLoaded(){ //all tags can play, do something about it:
tags.forEach(Function.call.bind(tags[0].play));
}
tracks.forEach(function(a){
var aud=new Audio();
tags.push(aud); // add this track to collection
aud.preload=true; // important
aud.controls=true; // only so we can see the player's time display to verify it works
aud.oncanplaythrough=function(e){
loadedCount++; //one more tags came in
if(loadedCount===tracks.length) allLoaded(); //done loading
};
document.body.appendChild(aud); // needed to see time
aud.src=a; // load the mp3 url
console.log("loading audio tag: ", aud);
});
var tracks=[//MP3的URL数组
"https://archive.org/download/tsp1997-01-24.AT.TC-D5M.flac16/tsp1997-01-24d1t05.mp3",
"https://archive.org/download/tsp1997-01-24.AT.TC-D5M.flac16/tsp1997-01-24d2t02.mp3",
"https://archive.org/download/tsp1997-01-24.AT.TC-D5M.flac16/tsp1997-01-24d2t03.mp3",
"https://archive.org/download/tsp1997-01-24.AT.TC-D5M.flac16/tsp1997-01-24d1t10.mp3"
],
loadedCount=0,//准备播放多少个标签?
标记=[];//收藏
在付款方面,我不在乎钱,所以请把你所有的额外钱捐给有价值的事业,或者至少给我一个随机的乞丐20美元。请发布相关代码。请在这里发布代码。我们不需要全部。我只是在寻找
标记或相关JavaScript。你可以播放()然后暂停()每个标记,然后一次播放()所有标记,一旦canplay触发了与标记计数相同的次数,我可以发布更多代码如果这不是正确的代码,我有所有文件@PHPglue@dandavis嘿,谢谢你!唯一的问题是,我不知道在代码中实现在哪里。。。需要什么才能让你帮我在我的网站上修复我的多功能播放器来执行此功能,但是像你建议的那样在allLoaded中有一个按钮。。。如果你访问protunesaudio.com,进入hiphop/drums文件夹,添加梦想鼓,然后添加hiphop/bass和hiphop?piano,并添加“梦想”曲目,它们都应该开始一起演奏,但它们不会,特别是当你的互联网连接不好时。。。如果你能帮我,我可以付钱。。我知道你不在乎钱,但我需要帮助。嘿,非常感谢。唯一的问题是我没有那么丰富的经验,不知道在哪里实现代码。我有我的网站的所有代码文件。如果你能帮我在我的网站ProTunesaudio.com上实现这一点,我将欠你的债。如果你能帮我,我有200英镑给你。我知道你说过你不在乎钱,但这是我必须提供的,这是我唯一能解决这个问题的机会。请让我知道。Jasonwday121@gmail.com