Dart DocumentationstagexlSoundMixer

SoundMixer class

class SoundMixer {

 static String _engine;

 static WebAudioApiMixer _webAudioApiMixer;
 static AudioElementMixer _audioElementMixer;

 static SoundTransform _soundTransform = new SoundTransform();
 static List<String> _supportedTypes = _getSupportedTypes();

 //-------------------------------------------------------------------------------------------------

 static String get engine {
   if (_engine == null) _initEngine();
   return _engine;
 }

 static SoundTransform get soundTransform {
   return _soundTransform;
 }

 static set soundTransform(SoundTransform value) {

   var initEngine = SoundMixer.engine;
   var soundTransform = (value != null) ? value : new SoundTransform();

   _soundTransform = soundTransform;

   if (_webAudioApiMixer != null) {
     _webAudioApiMixer.applySoundTransform(soundTransform);
   }

   if (_audioElementMixer != null) {
     _audioElementMixer.applySoundTransform(soundTransform);
   }
 }

 //-------------------------------------------------------------------------------------------------
 //-------------------------------------------------------------------------------------------------

 static void _initEngine() {

   _engine = "AudioElement";
   _audioElementMixer = new AudioElementMixer();

   if (AudioContext.supported) {
     _engine = "WebAudioApi";
     _webAudioApiMixer = new WebAudioApiMixer();
   }

   var ua = html.window.navigator.userAgent;

   if (ua.contains("IEMobile")) {
     if (ua.contains("9.0") || ua.contains("10.0")) {
       _engine = "Mock";
     }
   }

   if (ua.contains("iPhone") || ua.contains("iPad") || ua.contains("iPod")) {
     if (ua.contains("OS 3") || ua.contains("OS 4") || ua.contains("OS 5")) {
       _engine = "Mock";
     }
   }

   if (_supportedTypes.length == 0) {
     _engine = "Mock";
   }

   print("StageXL audio engine  : $engine");
 }

 //-------------------------------------------------------------------------------------------------

 static List<String> _getSupportedTypes() {

   var supportedTypes = new List<String>();
   var audio = new AudioElement();
   var valid = ["maybe", "probably"];

   if (valid.indexOf(audio.canPlayType("audio/mpeg", "")) != -1) supportedTypes.add("mp3");
   if (valid.indexOf(audio.canPlayType("audio/mp4", "")) != -1) supportedTypes.add("mp4");
   if (valid.indexOf(audio.canPlayType("audio/ogg", "")) != -1) supportedTypes.add("ogg");
   if (valid.indexOf(audio.canPlayType("audio/wav", "")) != -1) supportedTypes.add("wav");

   print("StageXL audio types   : ${supportedTypes}");

   return supportedTypes;
 }

 //-------------------------------------------------------------------------------------------------

 static List<String> _getOptimalAudioUrls(String originalUrl, SoundLoadOptions soundLoadOptions) {

   var regex = new RegExp(r"(mp3|mp4|ogg|wav)$", multiLine:false, caseSensitive:true);
   var availableTypes = _supportedTypes.toList();
   var match = regex.firstMatch(originalUrl);
   var urls = new List<String>();

   if (match == null) {
     throw new ArgumentError("Unsupported file extension.");
   }

   if (availableTypes.length == 0) {
     throw new UnsupportedError("This browser supports no known audio codec.");
   }

   if (!soundLoadOptions.mp3) availableTypes.remove("mp3");
   if (!soundLoadOptions.mp4) availableTypes.remove("mp4");
   if (!soundLoadOptions.ogg) availableTypes.remove("ogg");
   if (!soundLoadOptions.wav) availableTypes.remove("wav");

   var fileType = match.group(1);

   if (availableTypes.contains(fileType)) {
     urls.add(originalUrl);
     availableTypes.remove(fileType);
   }

   for(var availableType in availableTypes) {
     urls.add(originalUrl.replaceAll(regex, availableType));
   }

   return urls;
 }

}

Static Properties

final String engine #

static String get engine {
 if (_engine == null) _initEngine();
 return _engine;
}

SoundTransform soundTransform #

static SoundTransform get soundTransform {
 return _soundTransform;
}
static set soundTransform(SoundTransform value) {

 var initEngine = SoundMixer.engine;
 var soundTransform = (value != null) ? value : new SoundTransform();

 _soundTransform = soundTransform;

 if (_webAudioApiMixer != null) {
   _webAudioApiMixer.applySoundTransform(soundTransform);
 }

 if (_audioElementMixer != null) {
   _audioElementMixer.applySoundTransform(soundTransform);
 }
}