loadDataUrl static method

Future<Sound> loadDataUrl(
  1. String dataUrl, [
  2. SoundLoadOptions? soundLoadOptions
])
override

Loads a sound from a data url.

Please be aware that browsers do support different kinds of audio types. You can get a list of supported types here: Sound.supportedTypes

var sound = await Sound.loadDataUrl("data:audio/mpeg;base64,<data>");
sound.play();

Implementation

static Future<Sound> loadDataUrl(String dataUrl,
    [SoundLoadOptions? soundLoadOptions]) async {
  final options = soundLoadOptions ?? Sound.defaultLoadOptions;
  final audioContext = WebAudioApiMixer.audioContext;
  final start = dataUrl.indexOf(',') + 1;
  final bytes = base64.decoder.convert(dataUrl, start);

  try {
    final audioData = bytes.buffer;
    final audioBuffer = await audioContext.decodeAudioData(audioData);
    return WebAudioApiSound._(audioBuffer);
  } catch (e) {
    if (options.ignoreErrors) {
      return MockSound.loadDataUrl(dataUrl, options);
    } else {
      throw LoadError('Failed to load sound.', e);
    }
  }
}