BaseAudioChannel class abstract

BaseAudioChannel

An abstract base that encapsulates shared logic for all audio channels (e.g., BGM, SFX, Voice). Subclasses provide concrete configuration for playerMode and releaseMode.

Core Responsibilities:

  • Maintain a single AudioPlayer per channel
  • Control playback: play, playFromSource, pause, resume, stop
  • Manage volume & mute state with cached target restoration
  • Expose reactive isPlaying via onIsPlayingChanged
  • Provide tween-based volume fading with custom Curve
  • Wrap arbitrary actions in fade-out → action → fade-in via withFade

Configurable:

Usage Example:

class SfxChannel extends BaseAudioChannel {
  SfxChannel() : super('sfx_channel');

  @override PlayerMode get playerMode => PlayerMode.lowLatency;
  @override ReleaseMode get releaseMode => ReleaseMode.stop;
}

final sfx = SfxChannel();
await sfx.play('assets/sfx/click.mp3');        // assets by default

sfx.changeSource((p) => UrlSource(p));         // swap loader at runtime
await sfx.play('https://example.com/alert.mp3');

await sfx.withFade(() async {                  // wrap any action in fades
  await sfx.play('assets/sfx/alert.wav');
});
Implementers

Constructors

BaseAudioChannel(String playerId)

Properties

currentAudioContext → AudioContext?
Current audio context getter (nullable if never set).
no setter
hashCode → int
The hash code for this object.
no setterinherited
hasMultipleConcurrentPlayers → bool
Whether this channel may spawn multiple concurrent players. Mixins like SFX pooling should override this automatically.
no setter
isActive → bool
Active Flag
no setter
isMuted → bool
Muted Flag
no setter
isPlaying → bool
Current Status
no setter
onDurationChanged → Stream<Duration>
Duration Stream
no setter
onIsPlayingChanged → Stream<bool>
Reactive isPlaying Stream
no setter
onPlayerComplete → Stream<void>
Completion Event
no setter
onPositionChanged → Stream<Duration>
Position Stream
no setter
playerId → String
Stable Identifier
final
playerMode → PlayerMode
Player Mode
no setter
releaseMode → ReleaseMode
Release Mode
no setter
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
volume → double
Current Volume (0.0 → 1.0)
no setter

Methods

activate() → void
Activate
changeSource(AudioSourceBuilder builder) → void
Swap Loader
deactivate() → void
Deactivate
disableLifecycle() → void
Disable lifecycle handling for this channel.
dispose() → Future<void>
Dispose
enableLifecycle([ChannelLifecycleConfig? cfg]) → void
Enable per-channel lifecycle handling
ensureWaitSupported(String methodName) → void
Throws if waiting semantics are unsupported for this channel.
fadeIn({Duration duration = const Duration(seconds: 2), Curve curve = Curves.easeInOut}) → Future<void>
Fade In
fadeInVolume(FadePreset preset) → Future<void>
Helper: Fade In via FadePreset
fadeOut({Duration duration = const Duration(seconds: 2), Curve curve = Curves.easeOut}) → Future<void>
Fade Out
fadeOutVolume(FadePreset preset) → Future<void>
Helper: Fade Out via FadePreset
fadeTo(double targetVolume, {Duration duration = const Duration(seconds: 2), Curve curve = Curves.linear}) → Future<void>
Fade To Target Volume
getDuration() → Future<Duration?>
Current Media Duration
mute() → Future<void>
Mute (volume → 0.0)
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
onStateChanged(PlayerState state) → void
Subclass Hook: Player State Changed
pause() → Future<void>
Pause
play(String path) → Future<void>
Play by Path
playAndWait(String path, {Duration startTimeout = const Duration(seconds: 3), Duration timeout = const Duration(minutes: 2), bool forceStopOnTimeout = true}) → Future<bool>
Convenience: play a path and wait for completion/stop
playFromSource(Source source) → Future<void>
Play from Source
playFromSourceAndWait(Source source, {Duration startTimeout = const Duration(seconds: 3), Duration timeout = const Duration(minutes: 2), bool forceStopOnTimeout = true}) → Future<bool>
Convenience: play a Source and wait for completion/stop
resolveSource(String path) → Source
Resolve a path into a Source using the current builder (assets/files/urls). Override via changeSource to switch the strategy at runtime.
resume() → Future<void>
Resume
seek(Duration position) → Future<void>
Seek
setAudioContext(AudioContext audioContext) → Future<void>
Apply Platform Audio Context
setVolume(double volume) → Future<void>
Set Volume
stop() → Future<void>
Stop
toggleActive() → void
Toggle Active
toString() → String
A string representation of this object.
inherited
unmute() → Future<void>
Unmute (volume → 1.0)
waitUntilStarted({Duration timeout = const Duration(seconds: 3)}) → Future<bool>
Wait until playback starts (first true)
waitUntilStopped({Duration startTimeout = const Duration(seconds: 3), Duration timeout = const Duration(minutes: 2), bool forceStopOnTimeout = true}) → Future<bool>
Wait until playback stops/completes
withFade(Future<void> action(), {FadePreset? fadeOut, FadePreset? fadeIn}) → Future<void>
withFade

Operators

operator ==(Object other) → bool
The equality operator.
inherited