50 lines
1.0 KiB
JavaScript
50 lines
1.0 KiB
JavaScript
import { AudioContext } from '../audio/AudioContext.js';
|
|
import { FileLoader } from './FileLoader.js';
|
|
import { DefaultLoadingManager } from './LoadingManager.js';
|
|
|
|
/**
|
|
* @author Reece Aaron Lecrivain / http://reecenotes.com/
|
|
*/
|
|
|
|
function AudioLoader( manager ) {
|
|
|
|
this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;
|
|
|
|
}
|
|
|
|
Object.assign( AudioLoader.prototype, {
|
|
|
|
load: function ( url, onLoad, onProgress, onError ) {
|
|
|
|
var loader = new FileLoader( this.manager );
|
|
loader.setResponseType( 'arraybuffer' );
|
|
loader.setPath( this.path );
|
|
loader.load( url, function ( buffer ) {
|
|
|
|
// Create a copy of the buffer. The `decodeAudioData` method
|
|
// detaches the buffer when complete, preventing reuse.
|
|
var bufferCopy = buffer.slice( 0 );
|
|
|
|
var context = AudioContext.getContext();
|
|
context.decodeAudioData( bufferCopy, function ( audioBuffer ) {
|
|
|
|
onLoad( audioBuffer );
|
|
|
|
} );
|
|
|
|
}, onProgress, onError );
|
|
|
|
},
|
|
|
|
setPath: function ( value ) {
|
|
|
|
this.path = value;
|
|
return this;
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
|
|
export { AudioLoader };
|