使用Javascript加载音频对象

使用Javascript加载音频对象,javascript,audio,Javascript,Audio,我正在尝试制作一个需要从dropbox下载音频文件的游戏,我想制作一个加载屏幕,在加载所有音频之前停止游戏?但这不起作用,我正在加载音乐,而回调从未被调用 简而言之,加载音频对象时,侦听器触发什么事件?准备好比赛了吗?如果没有,我怎么检查 Index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.

我正在尝试制作一个需要从dropbox下载音频文件的游戏,我想制作一个加载屏幕,在加载所有音频之前停止游戏?但这不起作用,我正在加载音乐,而回调从未被调用

简而言之,加载音频对象时,侦听器触发什么事件?准备好比赛了吗?如果没有,我怎么检查

Index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Game</title>
<link rel="stylesheet" href="main.css"/>
<script type="text/javascript" src="Javascript/Canvas.js"></script>
<script type="text/javascript" src="Javascript/Menu.js"></script>
<script type="text/javascript" src="Javascript/Menus.js"></script>
<script type="text/javascript" src="Javascript/Music.js"></script>
<script type="text/javascript" src="Javascript/SFX.js"></script>
<script type="text/javascript" src="Javascript/Loading.js"></script>
<script type="text/javascript" src="Javascript/Wait.js"></script>
<script>
window.addEventListener('load',onLoad,false);
function onLoad(){

    //GAME_MENU.hide();
    SFX.CLICK.addEventListener('canplaythrough',function test(){
Music.js

var path = 'Resources/Audio/Music/';
MUSIC_PLAYER = new Object();
MUSIC_PLAYER.volume = 0.5;
MUSIC_PLAYER.currentTrack = null;
MUSIC_PLAYER.playTrack =
function playTrack(track){
    if(typeof track === 'number' && track%1 == 0)
        track = this.list[track];
    if(this.currentTrack==track)
        return;
    this.stop();
    this.currentTrack = track;
    this.currentTrack.loop = true;
    this.restart();
    this.start();
    return true;
};
MUSIC_PLAYER.start =
    function startMusic(){
        if(this.currentTrack==null)
            return false;
        if(this.currentTrack.ended||this.currentTrack.paused){
            this.currentTrack.play();
            this.currentTrack.volume = this.volume;
            return true;
        }
    };
MUSIC_PLAYER.stop =
    function stopMusic(){
        if(this.currentTrack == null)
            return false;
        if(!(this.currentTrack.ended||this.currentTrack.paused))
            this.currentTrack.pause();
        return true;
    };
MUSIC_PLAYER.setVolume =
    function setVolume(vol){
        this.volume = vol/10;
        if(this.currentTrack==null)
            return false;
        this.currentTrack.volume = this.volume;
    };
MUSIC_PLAYER.restart =
    function restartMusic(){
        this.currentTrack.currentTime = 0;
    };
TRACKS = new Object();
TRACKS.list = [];
TRACKS.MAIN_MENU = TRACKS.list[0] = new Audio('https://dl.dropboxusercontent.com/s/klauhgst6ucwrdh/Title.mp3?dl=1&token_hash=AAHb6Cc9de8-PUKOATpgciLJmoQIM1-o6thalq3GMSdf-w');
TRACKS.CREDITS_MENU = TRACKS.list[1] = new Audio('https://dl.dropboxusercontent.com/s/6juu8a0797gamlg/Credits.mp3?dl=1&token_hash=AAH666_2nLK-WYNbh4z7Gj4HrjqfIIZoZwNodW6nTZyVfA');
SFX.js

var path = 'Resources/Audio/SFX/';
SFX = new Object();
SFX.volume = 0.5;
SFX.list = [];
SFX.CLICK = SFX.list[0] = new Audio('https://dl.dropboxusercontent.com/s/mb4uzm20car4ynx/Click.mp3?dl=1&token_hash=AAGIkSpcaG-WR2nz9uBi94TzmuWzOIhLsDipLtjFY9PzSA');
function playSound(sound){
    if(typeof sound === 'number' && sound%1 == 0)
        sound = SFX.list[sound];
    try{
        sound.volume = SFX.volume/10;
        sound.play();
        return true;
    }catch(e){}
    return false;
}

这取决于您对加载的定义。在这种情况下,canplaythrough可能会有所帮助,但它不能保证浏览器下载了全部内容,我想。我尝试过使用“canplaythrough”,但没有成功:/loaded的定义是什么?是的,我刚刚意识到我将loaded++分别更改为loadedMusic和loadedSFX,并在其中添加了loaded++loaded is the top设置为0否,我的意思是,加载音频对象意味着什么?是否要知道整个文件何时加载?您想知道什么时候加载了足够的文件,并且浏览器可以开始播放它吗?正如我所写的,我认为浏览器不会加载整个文件,即使preload=true也不会。我认为您必须XMLHttpRequest音频文件,一旦加载了onload或onreadystatechange,readyState==4,就将其转换为音频对象。
Sleeps = new Object();
Sleeps.sleepChecks = [];
Sleeps.addSleepCheck =
    function(id,callback){
        this.sleepChecks[id] = callback;
    };
function sleep(millis, callback) {
    setTimeout(function()
            { callback(); }
    , millis);
}
function sleepCheck(id,callback){
    if(Sleeps.sleepChecks[id]!=null){
        Sleeps.sleepChecks[id];
    }else{
        Sleeps.addSleepCheck(id,callback);
    }
}
var path = 'Resources/Audio/Music/';
MUSIC_PLAYER = new Object();
MUSIC_PLAYER.volume = 0.5;
MUSIC_PLAYER.currentTrack = null;
MUSIC_PLAYER.playTrack =
function playTrack(track){
    if(typeof track === 'number' && track%1 == 0)
        track = this.list[track];
    if(this.currentTrack==track)
        return;
    this.stop();
    this.currentTrack = track;
    this.currentTrack.loop = true;
    this.restart();
    this.start();
    return true;
};
MUSIC_PLAYER.start =
    function startMusic(){
        if(this.currentTrack==null)
            return false;
        if(this.currentTrack.ended||this.currentTrack.paused){
            this.currentTrack.play();
            this.currentTrack.volume = this.volume;
            return true;
        }
    };
MUSIC_PLAYER.stop =
    function stopMusic(){
        if(this.currentTrack == null)
            return false;
        if(!(this.currentTrack.ended||this.currentTrack.paused))
            this.currentTrack.pause();
        return true;
    };
MUSIC_PLAYER.setVolume =
    function setVolume(vol){
        this.volume = vol/10;
        if(this.currentTrack==null)
            return false;
        this.currentTrack.volume = this.volume;
    };
MUSIC_PLAYER.restart =
    function restartMusic(){
        this.currentTrack.currentTime = 0;
    };
TRACKS = new Object();
TRACKS.list = [];
TRACKS.MAIN_MENU = TRACKS.list[0] = new Audio('https://dl.dropboxusercontent.com/s/klauhgst6ucwrdh/Title.mp3?dl=1&token_hash=AAHb6Cc9de8-PUKOATpgciLJmoQIM1-o6thalq3GMSdf-w');
TRACKS.CREDITS_MENU = TRACKS.list[1] = new Audio('https://dl.dropboxusercontent.com/s/6juu8a0797gamlg/Credits.mp3?dl=1&token_hash=AAH666_2nLK-WYNbh4z7Gj4HrjqfIIZoZwNodW6nTZyVfA');
var path = 'Resources/Audio/SFX/';
SFX = new Object();
SFX.volume = 0.5;
SFX.list = [];
SFX.CLICK = SFX.list[0] = new Audio('https://dl.dropboxusercontent.com/s/mb4uzm20car4ynx/Click.mp3?dl=1&token_hash=AAGIkSpcaG-WR2nz9uBi94TzmuWzOIhLsDipLtjFY9PzSA');
function playSound(sound){
    if(typeof sound === 'number' && sound%1 == 0)
        sound = SFX.list[sound];
    try{
        sound.volume = SFX.volume/10;
        sound.play();
        return true;
    }catch(e){}
    return false;
}