diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index e71a16d..1830e5c 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin"); + audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 6d02997..e9abb91 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,10 +3,10 @@ # list(APPEND FLUTTER_PLUGIN_LIST + audioplayers_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST - flutter_soloud ) set(PLUGIN_BUNDLED_LIBRARIES) diff --git a/packages/wolf_3d_synth/lib/src/wolf_3d_audio.dart b/packages/wolf_3d_synth/lib/src/wolf_3d_audio.dart index aab32ab..e27ee7e 100644 --- a/packages/wolf_3d_synth/lib/src/wolf_3d_audio.dart +++ b/packages/wolf_3d_synth/lib/src/wolf_3d_audio.dart @@ -1,37 +1,33 @@ -import 'package:flutter_soloud/flutter_soloud.dart'; +import 'package:audioplayers/audioplayers.dart'; import 'package:wolf_3d_data_types/wolf_3d_data_types.dart'; import 'package:wolf_3d_synth/src/imf_renderer.dart'; class WolfAudio { bool _isInitialized = false; - // --- Music State --- - AudioSource? _currentMusicSource; - SoundHandle? _currentMusicHandle; + final AudioPlayer _musicPlayer = AudioPlayer(); WolfensteinData? activeGame; - /// Initializes the SoLoud audio engine. + /// Initializes the audio engine. Future init() async { if (_isInitialized) return; try { - await SoLoud.instance.init( - sampleRate: 44100, - bufferSize: 2048, - channels: Channels.stereo, - ); + // audioplayers doesn't require complex global initialization like SoLoud, + // but setting the audio context can be useful for mobile platforms later. + await _musicPlayer.setPlayerMode(PlayerMode.mediaPlayer); _isInitialized = true; - print("WolfAudio: SoLoud initialized successfully."); + print("WolfAudio: AudioPlayers initialized successfully."); } catch (e) { - print("WolfAudio: Failed to initialize SoLoud - $e"); + print("WolfAudio: Failed to initialize AudioPlayers - $e"); } } /// Disposes of the audio engine and frees resources. void dispose() { stopMusic(); - SoLoud.instance.deinit(); + _musicPlayer.dispose(); _isInitialized = false; } @@ -44,51 +40,42 @@ class WolfAudio { if (!_isInitialized) return; // Stop currently playing music to prevent overlap - stopMusic(); + await stopMusic(); try { // Render hardware instructions into PCM and wrap in WAV final pcmSamples = ImfRenderer.render(track); final wavBytes = ImfRenderer.createWavFile(pcmSamples); - _currentMusicSource = await SoLoud.instance.loadMem( - 'track.wav', - wavBytes, - ); - _currentMusicHandle = await SoLoud.instance.play( - _currentMusicSource!, - looping: looping, + // Configure looping behavior + await _musicPlayer.setReleaseMode( + looping ? ReleaseMode.loop : ReleaseMode.stop, ); + + // Play the generated WAV file directly from memory + await _musicPlayer.play(BytesSource(wavBytes)); } catch (e) { print("WolfAudio: Error playing music track - $e"); } } - /// Halts playback and frees memory for the current track. - void stopMusic() { + /// Halts playback for the current track. + Future stopMusic() async { if (!_isInitialized) return; - - if (_currentMusicHandle != null) { - SoLoud.instance.stop(_currentMusicHandle!); - _currentMusicHandle = null; - } - if (_currentMusicSource != null) { - SoLoud.instance.disposeSource(_currentMusicSource!); - _currentMusicSource = null; - } + await _musicPlayer.stop(); } /// Pauses the current track. - void pauseMusic() { - if (_isInitialized && _currentMusicHandle != null) { - SoLoud.instance.setPause(_currentMusicHandle!, true); + Future pauseMusic() async { + if (_isInitialized) { + await _musicPlayer.pause(); } } /// Resumes a paused track. - void resumeMusic() { - if (_isInitialized && _currentMusicHandle != null) { - SoLoud.instance.setPause(_currentMusicHandle!, false); + Future resumeMusic() async { + if (_isInitialized) { + await _musicPlayer.resume(); } } @@ -109,7 +96,6 @@ class WolfAudio { final index = level.musicIndex; if (index < data.music.length) { - // 3. FIXED THIS: Call your playMusic method await playMusic(data.music[index]); } else { print( diff --git a/packages/wolf_3d_synth/pubspec.yaml b/packages/wolf_3d_synth/pubspec.yaml index e2e7a4d..80da1e3 100644 --- a/packages/wolf_3d_synth/pubspec.yaml +++ b/packages/wolf_3d_synth/pubspec.yaml @@ -9,7 +9,7 @@ environment: resolution: workspace dependencies: - flutter_soloud: ^3.5.1 + audioplayers: ^6.6.0 wolf_3d_data_types: dev_dependencies: