UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

297 lines (281 loc) 11.6 kB
// Class: openfl.media.Sound var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../hxClasses_stub").default; var $hxEnums = require("./../../hxEnums_stub").default; var $import = require("./../../import_stub").default; var $bind = require("./../../bind_stub").default; var $extend = require("./../../extend_stub").default; function openfl_events_EventDispatcher() {return require("./../../openfl/events/EventDispatcher");} function openfl_media_SoundMixer() {return require("./../../openfl/media/SoundMixer");} function openfl_events_Event() {return require("./../../openfl/events/Event");} function lime_utils_Assets() {return require("./../../lime/utils/Assets");} function lime_media_AudioBuffer() {return require("./../../lime/media/AudioBuffer");} function openfl_events_IOErrorEvent() {return require("./../../openfl/events/IOErrorEvent");} function _$UInt_UInt_$Impl_$() {return require("./../../_UInt/UInt_Impl_");} function openfl_utils__$ByteArray_ByteArray_$Impl_$() {return require("./../../openfl/utils/_ByteArray/ByteArray_Impl_");} function openfl_utils_ByteArrayData() {return require("./../../openfl/utils/ByteArrayData");} function openfl_events_ProgressEvent() {return require("./../../openfl/events/ProgressEvent");} function Std() {return require("./../../Std");} function openfl_media_SoundTransform() {return require("./../../openfl/media/SoundTransform");} function lime_media_AudioSource() {return require("./../../lime/media/AudioSource");} function openfl_media_SoundChannel() {return require("./../../openfl/media/SoundChannel");} function openfl_media_ID3Info() {return require("./../../openfl/media/ID3Info");} function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");} function openfl_errors_IOError() {return require("./../../openfl/errors/IOError");} function lime_app_Future() {return require("./../../lime/app/Future");} function lime_media_AudioManager() {return require("./../../lime/media/AudioManager");} // Constructor var Sound = function(stream,context) { this.__webAudioContext = null; this.__urlLoading = false; (openfl_events_EventDispatcher().default).call(this,this); this.bytesLoaded = 0; this.bytesTotal = 0; this.isBuffering = false; this.url = null; if(stream != null) { this.load(stream,context); } if(stream == null && (lime_media_AudioManager().default).context != null) { if((lime_media_AudioManager().default).context.type == "web") { this.__webAudioContext = (lime_media_AudioManager().default).context.web; } } } // Meta Sound.__name__ = "openfl.media.Sound"; Sound.__isInterface__ = false; Sound.__super__ = (openfl_events_EventDispatcher().default); Sound.prototype = $extend((openfl_events_EventDispatcher().default).prototype, { close: function() { if(this.__buffer != null) { (openfl_media_SoundMixer().default).__unregisterSoundChannelByBuffer(this.__buffer); this.__buffer.dispose(); this.__buffer = null; } }, load: function(stream,context) { var _gthis = this; this.url = stream.url; this.__urlLoading = true; this.dispatchEvent(new (openfl_events_Event().default)("open")); var defaultLibrary = (lime_utils_Assets().default).getLibrary("default"); if(defaultLibrary != null && defaultLibrary.cachedAudioBuffers.exists(this.url)) { var audioBuffer = defaultLibrary.cachedAudioBuffers.get(this.url); var byteLength = audioBuffer != null && audioBuffer.data != null ? audioBuffer.data.byteLength : 0; this.AudioBuffer_onURLProgress(byteLength,byteLength); this.AudioBuffer_onURLLoad(audioBuffer); } else { (lime_media_AudioBuffer().default).loadFromFile(this.url).onProgress($bind(this,this.AudioBuffer_onURLProgress)).onComplete($bind(this,this.AudioBuffer_onURLLoad)).onError(function(_) { _gthis.AudioBuffer_onURLLoad(null); }); } }, loadCompressedDataFromByteArray: function(bytes,bytesLength) { if(bytes == null || bytesLength <= 0) { this.dispatchEvent(new (openfl_events_IOErrorEvent().default)("ioError")); return; } if((_$UInt_UInt_$Impl_$().default).gt(bytes.position,0) || (_$UInt_UInt_$Impl_$().default).gt((openfl_utils__$ByteArray_ByteArray_$Impl_$().default).get_length(bytes),bytesLength)) { var length = bytesLength; if(length == null) { length = 0; } var this1 = new (openfl_utils_ByteArrayData().default)(length); var copy = this1; var offset = bytes.position; var length1 = bytesLength; if(length1 == null) { length1 = 0; } if(offset == null) { offset = 0; } copy.writeBytes(bytes,offset,length1); bytes = copy; } this.__buffer = (lime_media_AudioBuffer().default).fromBytes((openfl_utils__$ByteArray_ByteArray_$Impl_$().default).toBytes(bytes)); if(this.__buffer == null) { this.dispatchEvent(new (openfl_events_IOErrorEvent().default)("ioError")); } else { this.dispatchEvent(new (openfl_events_Event().default)("open")); this.dispatchEvent(new (openfl_events_ProgressEvent().default)("progress",false,false,(_$UInt_UInt_$Impl_$().default).toFloat((openfl_utils__$ByteArray_ByteArray_$Impl_$().default).get_length(bytes)),(_$UInt_UInt_$Impl_$().default).toFloat((openfl_utils__$ByteArray_ByteArray_$Impl_$().default).get_length(bytes)))); this.dispatchEvent(new (openfl_events_Event().default)("complete")); } }, loadPCMFromByteArray: function(bytes,samples,format,stereo,sampleRate) { if(sampleRate == null) { sampleRate = 44100; } if(stereo == null) { stereo = true; } if(format == null) { format = "float"; } if(bytes == null) { this.dispatchEvent(new (openfl_events_IOErrorEvent().default)("ioError")); return; } var bitsPerSample = format == "float" ? 32 : 16; var channels = stereo ? 2 : 1; var bytesLength = (Std().default).int(samples * channels * (bitsPerSample / 8)); if((_$UInt_UInt_$Impl_$().default).gt(bytes.position,0) || (_$UInt_UInt_$Impl_$().default).gt((openfl_utils__$ByteArray_ByteArray_$Impl_$().default).get_length(bytes),bytesLength)) { var length = bytesLength; if(length == null) { length = 0; } var this1 = new (openfl_utils_ByteArrayData().default)(length); var copy = this1; var offset = bytes.position; var length1 = bytesLength; if(length1 == null) { length1 = 0; } if(offset == null) { offset = 0; } copy.writeBytes(bytes,offset,length1); bytes = copy; } var audioBuffer = new (lime_media_AudioBuffer().default)(); audioBuffer.bitsPerSample = bitsPerSample; audioBuffer.channels = channels; var elements = null; var array = null; var view = null; var buffer = (openfl_utils__$ByteArray_ByteArray_$Impl_$().default).toArrayBuffer(bytes); var len = null; var this2; if(elements != null) { this2 = new Uint8Array(elements); } else if(array != null) { this2 = new Uint8Array(array); } else if(view != null) { this2 = new Uint8Array(view); } else if(buffer != null) { if(len == null) { this2 = new Uint8Array(buffer,0); } else { this2 = new Uint8Array(buffer,0,len); } } else { this2 = null; } audioBuffer.data = this2; audioBuffer.sampleRate = (Std().default).int(sampleRate); this.__buffer = audioBuffer; this.dispatchEvent(new (openfl_events_Event().default)("open")); this.dispatchEvent(new (openfl_events_ProgressEvent().default)("progress",false,false,(_$UInt_UInt_$Impl_$().default).toFloat((openfl_utils__$ByteArray_ByteArray_$Impl_$().default).get_length(bytes)),(_$UInt_UInt_$Impl_$().default).toFloat((openfl_utils__$ByteArray_ByteArray_$Impl_$().default).get_length(bytes)))); this.dispatchEvent(new (openfl_events_Event().default)("complete")); }, play: function(startTime,loops,sndTransform) { if(loops == null) { loops = 0; } if(startTime == null) { startTime = 0.0; } if((openfl_media_SoundMixer().default).__soundChannels.length >= 32) { return null; } if(sndTransform == null) { sndTransform = new (openfl_media_SoundTransform().default)(); } else { sndTransform = sndTransform.clone(); } var pan = (openfl_media_SoundMixer().default).__soundTransform.pan + sndTransform.pan; if(pan > 1) { pan = 1; } if(pan < -1) { pan = -1; } var volume = (openfl_media_SoundMixer().default).__soundTransform.volume * sndTransform.volume; var audioSource = new (lime_media_AudioSource().default)(this.__buffer); audioSource.offset = (Std().default).int(startTime); if(loops > 1) { audioSource.set_loops(loops - 1); } audioSource.set_gain(volume); var position = audioSource.get_position(); position.x = pan; position.z = -1 * Math.sqrt(1 - Math.pow(pan,2)); audioSource.set_position(position); var soundChannel = new (openfl_media_SoundChannel().default)(this,this.__urlLoading ? null : audioSource,sndTransform); if(this.__urlLoading) { this.__pendingAudioSource = audioSource; this.__pendingSoundChannel = soundChannel; } else if(this.__buffer == null) { if(this.__webAudioContext != null) { soundChannel.__startSampleData(); } } return soundChannel; }, get_sampleRate: function() { return (Std().default).int(this.__webAudioContext.sampleRate); }, get_id3: function() { return new (openfl_media_ID3Info().default)(); }, get_length: function() { if(this.__buffer != null) { return (Std().default).int(this.__buffer.get_src().duration() * 1000); } return 0; }, AudioBuffer_onURLLoad: function(buffer) { this.__urlLoading = false; if(buffer == null) { this.dispatchEvent(new (openfl_events_IOErrorEvent().default)("ioError")); } else { this.__buffer = buffer; this.dispatchEvent(new (openfl_events_Event().default)("complete")); if(this.__pendingSoundChannel != null) { this.__pendingAudioSource.buffer = this.__buffer; this.__pendingAudioSource.init(); this.__pendingSoundChannel.__initAudioSource(this.__pendingAudioSource); } } this.__pendingSoundChannel = null; this.__pendingAudioSource = null; }, AudioBuffer_onURLProgress: function(bytesLoaded,bytesTotal) { var progressEvent = new (openfl_events_ProgressEvent().default)("progress"); progressEvent.bytesLoaded = bytesLoaded; progressEvent.bytesTotal = bytesTotal; this.dispatchEvent(progressEvent); } }); Sound.prototype.__class__ = Sound.prototype.constructor = $hxClasses["openfl.media.Sound"] = Sound; // Init Object.defineProperties(Sound.prototype,{ id3 : { get : function () { return this.get_id3 (); }}, length : { get : function () { return this.get_length (); }}}); // Statics Sound.fromAudioBuffer = function(buffer) { var sound = new Sound(); sound.__buffer = buffer; return sound; } Sound.fromFile = function(path) { var buffer = (lime_media_AudioBuffer().default).fromFile(path); if(buffer == null) { throw new (js__$Boot_HaxeError().default)(new (openfl_errors_IOError().default)("Error loading sound from file: " + path)); } return Sound.fromAudioBuffer(buffer); } Sound.loadFromFile = function(path) { return (lime_media_AudioBuffer().default).loadFromFile(path).then(function(audioBuffer) { return (lime_app_Future().default).withValue(Sound.fromAudioBuffer(audioBuffer)); }); } Sound.loadFromFiles = function(paths) { return (lime_media_AudioBuffer().default).loadFromFiles(paths).then(function(audioBuffer) { return (lime_app_Future().default).withValue(Sound.fromAudioBuffer(audioBuffer)); }); } // Export exports.default = Sound;