init method

Future<void> init()

Preloads all audio assets. Does NOT play anything. Safe to call multiple times (idempotent).

Implementation

Future<void> init() async {
  if (_isInitialized) return;

  try {
    for (int i = 0; i < _poolSize; i++) {
      final player = AudioPlayer();
      await player.setAsset('packages/split_flap_display/assets/audio/flap_single.mp3', preload: true);
      _clickPool.add(player);
    }
    await _rainPlayer.setAsset('packages/split_flap_display/assets/audio/flap_rain_loop.mp3', preload: true);
    await _rainPlayer.setLoopMode(LoopMode.one);
    await _rainPlayer.setVolume(0);

    // Start the click accumulator pulse (20Hz loop for clicks)
    _clickPulseTimer = Timer.periodic(const Duration(milliseconds: 50), (_) {
      if (_clickRequested && _isInitialized) {
        _clickRequested = false;
        _dispatchRealClick();
      }
    });

    _isInitialized = true;
  } catch (_) {
    // Audio non-critical
  }
}