load static method

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

Loads a sound from a file url.

The file extension in the url will be replaced according to the browser's capability to playback certain kinds of audio types. For example if the url ends with the 'mp3' extension and the browser does not support mp3 playback, the file extension will be replaced with 'ogg' or 'ac3'. You can customize this behavior by changing the soundLoadOptions.

var sound = await Sound.load("assets/audio/hello.mp3");
sound.play();

Implementation

static Future<Sound> load(String url,
    [SoundLoadOptions? soundLoadOptions]) async {
  final options = soundLoadOptions ?? Sound.defaultLoadOptions;
  final audioUrls = options.getOptimalAudioUrls(url);
  final audioContext = WebAudioApiMixer.audioContext;
  final aggregateError = AggregateError('Error loading sound.');

  for (var audioUrl in audioUrls) {
    try {
      final httpRequest =
          await HttpRequest.request(audioUrl, responseType: 'arraybuffer');
      final audioData = httpRequest.response as ByteBuffer;
      final audioBuffer = await audioContext.decodeAudioData(audioData);
      return WebAudioApiSound._(audioBuffer);
    } catch (e) {
      final loadError = LoadError('Failed to load $audioUrl', e);
      aggregateError.errors.add(loadError);
    }
  }

  if (options.ignoreErrors) {
    return MockSound.load(url, options);
  } else {
    throw aggregateError;
  }
}