UNPKG

@awayjs/core

Version:
88 lines (87 loc) 4.13 kB
import { StreamingAudioChannel } from './StreamingAudioChannel'; import { WebAudioChannel } from './WebAudioChannel'; import { EventAudioChannel } from './EventAudioChannel'; var AudioManager = /** @class */ (function () { function AudioManager() { } AudioManager.setVolume = function (value, channelGroup) { if (channelGroup === void 0) { channelGroup = -1; } if (channelGroup < 0) { var len = AudioManager._channelGroupVolumes.length; for (var j = 0; j < len; j++) { AudioManager._channelGroupVolumes[j] = value; } } else { AudioManager._channelGroupVolumes[channelGroup] = value; } WebAudioChannel.setChannelGroupVolume(value, channelGroup); StreamingAudioChannel.setChannelGroupVolume(value, channelGroup); EventAudioChannel.setChannelGroupVolume(value, channelGroup); }; AudioManager.getVolume = function (channelGroup) { if (channelGroup === void 0) { channelGroup = 0; } return AudioManager._channelGroupVolumes[channelGroup]; }; AudioManager.setExternalSoundInterface = function (new_obj) { if (new_obj.startSound == null) { console.log('Could not set the externalSoundInterface, ' + 'because it does not provide a \'startSound\' function'); return; } if (new_obj.stopSound == null) { console.log('Could not set the externalSoundInterface, ' + 'because it does not provide a \'stopSound\' function'); return; } AudioManager._externalSoundInterface = new_obj; }; AudioManager.getExternalSoundInterface = function () { return AudioManager._externalSoundInterface; }; AudioManager.stopAllSounds = function () { WebAudioChannel.stopAllSounds(); StreamingAudioChannel.stopAllSounds(); EventAudioChannel.stopAllSounds(); //AudioChannel.stopAllSounds(); }; AudioManager.getChannel = function (byteLength, channelGroup) { if (channelGroup === void 0) { channelGroup = 0; } //choose best audio channel by bytelength //todo: StreamingAudioChannel doesnt seem to be working. no error, but also no sound is playing var channelClass = (byteLength > 50000000) ? StreamingAudioChannel : WebAudioChannel; if (AudioManager.isIE) { channelClass = EventAudioChannel; } //var channelClass:IAudioChannelClass = WebAudioChannel; var i = 0; while (channelClass._channels[i] && channelClass._channels[i].isPlaying()) i++; if (i == channelClass.maxChannels) { //pick the oldest channel to reuse, ignoring looping channels var channel = void 0; var len = channelClass._channels.length; for (var j = 0; j < len; j++) { channel = channelClass._channels[j]; if (!channel.isLooping() && !channel.isDecoding()) { channel.groupID = channelGroup; channel.groupVolume = AudioManager._channelGroupVolumes[channelGroup]; channel.groupPan = AudioManager._channelGroupPanning[channelGroup]; channelClass._channels.push(channelClass._channels.splice(j, 1)[0]); channel.stop(); return channel; } } //do not return channel until one is freed up return null; } return (channelClass._channels[i] = new channelClass(channelGroup, AudioManager._channelGroupVolumes[channelGroup], AudioManager._channelGroupPanning[channelGroup])); }; AudioManager.isIE = !!navigator.userAgent.match(/Trident/g) || !!navigator.userAgent.match(/MSIE/g); //todo: make AudioPlaybackManager keep track of active sounds + implement global playback control AudioManager._externalSoundInterface = null; AudioManager._channelGroupVolumes = [1]; AudioManager._channelGroupPanning = [0.5]; return AudioManager; }()); export { AudioManager };