рдСрдбрд┐рдпреЛ рддрддреНрд╡ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЖрд╡рд░рдг рд▓рд┐рдЦреЗрдВрдЧреЗ:
var LibCanvasAudio = function ( file ) {
this . audio = new Audio ;
this . audio . src = file ;
};
LibCanvasAudio . prototype = {};
.ogg рдмрдирд╛рдо .mp3
рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП - рд╕рдорд░реНрдерд┐рдд рдХреЛрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде dregsред рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдУрдЧ рд╡реЛрд░рдмрд┐рд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ ( рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдУрдкреЗрд░рд╛ рдХреЗ рд▓рд┐рдП, gstreamer рдЖрдзрд╛рд░ рдФрд░ рдЕрдЪреНрдЫреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛), рд▓реЗрдХрд┐рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Apple рдиреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЖрдЗрдП рд╣рдо рдЙрди рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП .ogg, рдЬреЛ рдЕрдиреНрдп .mp3 рдореЗрдВ рджреЗрдВрдЧреЗ, рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░реЗрдВред рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд╕рднреА рд╕рд┐рддрд╛рд░реЛрдВ рдХреЛ рдХреНрд░рдорд╢рдГ рдУрдЧ рдпрд╛ рдПрдордкреА 3 рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
var LibCanvasAudio = function ( file ) {
this . audio = new Audio ;
this . src ( file );
};
LibCanvasAudio . prototype = {
src : function ( file ) {
var codec = this . getSupport ();
if (! codec ) throw 'AudioNotSupported' ;
this . audio . src = file . replace (/\*/ g , this . getSupport ());
this . audio . load ();
return this ;
},
getSupport : function () {
return ! this . audio . canPlayType ? false :
this . audio . canPlayType ( 'audio/ogg;' ) ? 'ogg' :
this . audio . canPlayType ( 'audio/mpeg;' ) ? 'mp3' : false ;
}
}
рдЧреИрдЯрд▓рд┐рдВрдЧ рдпреЛрдЬрдирд╛
рд╕рдм рдареАрдХ рд╣реИред рд╣рдо рдореБрдЦреНрдп рд╡рд┐рд╖рдп рдкрд░ рдЖрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдПрдХ рдПрдХреНрд╢рди рдЧреЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рд╕реНрдлреЛрдЯ, рд╢реЙрдЯреНрд╕ рдЖрджрд┐ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд┐рд╕реНрдлреЛрдЯ 5 рд╕реЗрдХрдВрдб рддрдХ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╕реНрдлреЛрдЯреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░рд╛рд▓ 0.5 рд╕реЗрдХрдВрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рдлрд╝рд╛рдЗрд▓ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд┐рдЫрд▓реЗ рд╡рд┐рд╕реНрдлреЛрдЯ рдЕрдЪрд╛рдирдХ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд░ рдмрд╛рд░ рдСрдбрд┐рдпреЛ рддрддреНрд╡ рдХреЛ рдХреНрд▓реЛрди рдХрд░ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╣рдо DOM рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред 5 рдорд┐рдирдЯ рдХреЗ рдЦреЗрд▓ рдХреЗ рдмрд╛рдж, рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд╛рдЧрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЧреИрдЯрд▓рд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓реЗ рдореЗрдВ рдмреБрд▓рд╛рддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рддрддреНрд╡ рдЦреЗрд▓рддреЗ рд╕рдордп, рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рдкрд╛рд╕ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдзреНрд╡рдирд┐ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ "рдЪрдбреНрдбреА" рд╕реЗрдЯ рдХрд░реЗрдВред
LibCanvasAudio . prototype = {
// ...
cloneAudio : function () {
audioClone = this . audio . cloneNode ( true );
audioClone . load ();
return audioClone ;
},
gatling : function ( count ) {
this . barrels = [];
this . gatIndex = 0 ;
while ( count --) {
this . barrels . push ( this . cloneAudio ());
}
return this ;
},
getNext : function () {
var elem = this . barrels [ this . gatIndex ];
++ this . gatIndex >= this . barrels . length && ( this . gatIndex = 0 );
return elem ;
},
playNext : function () {
var elem = this . getNext ();
elem . pause ();
elem . currentTime = 0 ;
elem . play ();
return this ;
}
};
рд╣рдореЗрдВ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:
var shotSound = new LibCanvasAudio ( 'explosion.*' ). gatling ( 6 );
window . addEventListener ( 'keydown' , function ( e ) {
( e . keyCode == keys . SPACE ) && shotSound . playNext ();
}, false );
рдУрдкреЗрд░рд╛ рдореЗрдВ рдмреБрдореЗрд░
рдУрдкреЗрд░рд╛ рдореЗрдВ, рд╣рдо рдПрдХ рдмреБрдореЗрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдкрд░, рдореБрдЭреЗ рдПрдХ рдмрдЧ рдорд┐рд▓рд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ DSK-309302 рдХреЛрдб рдХреЗ рд╕рд╛рде рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдУрдкреЗрд░рд╛ рдореЗрдВ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдСрдбрд┐рдпреЛ рддрддреНрд╡ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
// var audioOrig = document.createElement('audio'); // :
var audioOrig = new Audio ();
audioOrig . src = 'shot.ogg' ;
audioOrig . controls = 'controls' ;
var audioClone = audioOrig . cloneNode ( true );
function appendToBody ( node ) {
document . getElementsByTagName ( 'body' )[ 0 ]. appendChild ( node );
}
audioOrig . play (); //
audioClone . play (); //
appendToBody ( audioOrig ); //
appendToBody ( audioClone ); //
рдЪрд▓реЛ рдУрдкреЗрд░рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реБрдзрд╛рд░ рд▓рд┐рдЦреЗрдВ:
LibCanvasAudio . prototype = {
// ..
cloneAudio : function () {
if ( window . opera ) { // Reported Opera bug DSK-309302
var audioClone = new Audio ;
audioClone . src = this . audio . src ;
} else {
audioClone = this . audio . cloneNode ( true );
}
audioClone . load ();
return audioClone ;
},
// ..
};
рдлреЙрдХреНрд╕ рдореЗрдВ рдмрдЧ
рд╣рдо рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 3.5 (3.6 рдФрд░ 4 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд▓реЗ рдЧрдП рд╣реИрдВ) рдореЗрдВ рдПрдХ рдФрд░ рдмрдЧ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЬрдм рдСрдбрд┐рдпреЛ рдЯреНрд░реИрдХ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рджреВрд╕рд░реЗ in рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рди рдХреЗрд╡рд▓ рдореЗрд░реЗ рд╕рд╛рде: " рджреВрд╕рд░реА рдмрд╛рд░ рдЬрдм рдЖрдк рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ" рдмреИрдбрдордо "рдХреЛ рджреЛ рдмрд╛рд░ рдмрдЬрд╛рддрд╛ рд╣реИ ред" ( рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдмрдЧ )ред рдПрдХ рдЫреЛрдЯрд╛ рдлрд┐рдХреНрд╕ рдЬреЛрдбрд╝реЗрдВ - рд╣рдо рдСрдбрд┐рдпреЛ рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ 25 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдкрд░ рд░рд┐рд╡рд╛рдЗрдВрдб рдХрд░реЗрдВрдЧреЗ (рдиреНрдпреВрдирддрдо рдорд╛рди рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд▓рдЧрднрдЧ 0.021-0.022 рд╕реЗрдХрдВрдб рд╣реИ)ред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдПрдХ рд╡рд░реНрдЬрди рдЪреЗрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдХреЛ рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдореЗрдВ 3.5 рд▓реЛрдордбрд╝рд┐рдпреЛрдВ (рд▓реЗрдХрд┐рди 25 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдФрд░ рд╢реВрдиреНрдп рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд░, рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╕рдВрдкрд╛рджрдХ 25 рдорд┐рд╕реЗ рдореЗрдВ рд╕рднреА рдСрдбрд┐рдпреЛ рдХреЛ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ):
LibCanvasAudio . prototype = {
// ..
playNext : function () {
var elem = this . getNext ();
elem . pause ();
elem . currentTime = 0.025 ;
elem . play ();
return this ;
}
};
рдмреЛрдирд╕
Ie9 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 4 рдореЗрдВ,
new Audio()
рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ
document.createElement('audio');
рд╕рд╛рде рдмрджрд▓рдХрд░ рд╣рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ
document.createElement('audio');
рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ (рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкреНрд░рд╣рд╛рд░)
рд╕реНрд░реЛрдд рдХреЛрдб рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк: pastebin.com/xG4mhX3w