Distinguish the current app from the earlier example
This records a November 4, 2026 review of audio_mixer_service.dart and sleep_timer_controller.dart in Daraly’s Flutter project. The earlier article’s two HTML audio channels with a three-second overlap did not describe this Flutter implementation and have been replaced.
The inspected service uses SoLoud for ordinary sounds and a separate just_audio player for local music. Source review alone does not identify the public app’s version or device behavior. This note explains the inspected implementation and conditions that can be compared directly.
A playback gap and a waveform discontinuity differ
Joining the end of a sound to its beginning can expose two problems: silence while the player prepares the next iteration, or a click from mismatched endpoints even when playback continues. Enabling a loop option does not establish that both are resolved.
The inspected code loads a source into memory and passes looping: shouldLoop at playback. Looping is selected per sound, so it would be misleading to say every sound repeats automatically with the same duration. Review the playback API and the actual source-file seam separately. See the flutter_soloud documentation for the plugin’s scope.
Starting sounds and changing mixer levels
A new sound starts at zero volume and fades to its target. There is also a path for updating a channel already playing. This softens a sudden volume transition at startup; it is different from overlapping two channels across a file boundary.
Test switching a single sound separately from mixing several sounds. A file can itself begin quietly, so an inaudible start is not proof of playback failure. Check app level, device media volume, and output route together, and listen for an old channel remaining after a sound change.
What happens when the timer expires?
The inspected timer controller records a target time and updates the remaining duration. At expiry it clears timer and playback state, then calls fadeOutAndStop(). The service fades active SoLoud handles and reduces the separate local-music player in steps before stopping.
The inspected method’s default fade duration is five seconds. That is a source default, not a guarantee about every deployed version. A cancellation path restores original levels, so changing or cancelling a timer near expiry needs separate testing.
Record the conditions while listening
- Repeat one source long enough to check whether a gap or click returns at the same point.
- Compare the same file alone and mixed with other sounds.
- At timer expiry, check that ordinary sounds and local music both fade.
- Test cancellation, resetting, and output-route changes separately, recording app version, device, and sound name.
This source review did not measure seams or timer accuracy on a device. Results that depend on the sound and device should not be presented as a guarantee of perfectly seamless playback. See the Daraly product guide for usage and support.