playSoundOnTargetChannels method

int playSoundOnTargetChannels(
  1. Sound sound, {
  2. List<int>? targetChannels,
  3. bool loop = false,
  4. double? loopStart,
  5. double? loopEnd,
})

Plays the given Sound on one of the specified target channels.

Implementation

int playSoundOnTargetChannels(Sound sound, {List<int>? targetChannels, bool loop = false, double? loopStart, double? loopEnd}) {
  if (sound.state != LoadingState.ready || sound.bufferHandle == null) return -1;

  if (sound.lastTimePlayed != null) {
    final timeSinceLastPlayed = DateTime.now().difference(sound.lastTimePlayed!);
    if (timeSinceLastPlayed < sound.retriggerDelay) return -1;
  }

  var channelId = _backend.obtainFreeChannel(targetChannels);
  if (channelId == -1) {
    warn("All audio channels are in use. Consider to increase channel count.");
    return -1;
  }

  _backend.playSound(
    sound.bufferHandle!,
    channel: channelId,
    loop: loop,
    loopStart: loopStart ?? -1,
    loopEnd: loopEnd ?? -1,
  );

  _channelSounds[channelId] = sound;
  sound.lastTimePlayed = DateTime.now();
  return channelId;
}