Changement de lib audio, suppression de quiloader
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from PySide6.QtCore import QFile, QBuffer, QByteArray, QIODevice
|
||||
from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput
|
||||
from PySide6.QtCore import QFile
|
||||
|
||||
import cyminiaudio as cma
|
||||
import tempfile
|
||||
from config.config_manager import ConfigManager, VOLUME_KEY
|
||||
|
||||
from config.constants import Resources
|
||||
@@ -13,32 +14,32 @@ class AudioController:
|
||||
self._slider = slider
|
||||
self._mute_btn = mute_btn
|
||||
|
||||
# Lecteur
|
||||
self._player = QMediaPlayer()
|
||||
self._output = QAudioOutput()
|
||||
self._player.setAudioOutput(self._output)
|
||||
self._player.setLoops(-1)
|
||||
|
||||
# Chargement du MP3 depuis les ressources Qt
|
||||
mp3file = QFile(Resources.MP3.value)
|
||||
mp3file.open(QFile.ReadOnly)
|
||||
mp3data = mp3file.readAll()
|
||||
mp3data = mp3file.readAll().data()
|
||||
mp3file.close()
|
||||
|
||||
# Mise en buffer du MP3
|
||||
self._buffer = QBuffer()
|
||||
self._buffer.setData(QByteArray(mp3data))
|
||||
self._buffer.open(QIODevice.ReadOnly)
|
||||
self._player.setSourceDevice(self._buffer)
|
||||
# 2. Créer un fichier temporaire "invisible" pour l'utilisateur
|
||||
self.tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
|
||||
self.tmp.write(mp3data)
|
||||
self.tmp.close() # Libère le verrou pour le lecteur
|
||||
|
||||
# État initial du lecteur
|
||||
volume = config.get_volume()
|
||||
self._is_muted = volume == 0
|
||||
self._is_muted = (volume == 0)
|
||||
self._previous_volume = volume if volume != 0 else config.get_default(VOLUME_KEY)
|
||||
|
||||
self._apply_volume(volume, save=False)
|
||||
self._refresh_mute_btn()
|
||||
self._player.play()
|
||||
|
||||
# 3. Initialiser le moteur SANS le bloc 'with'
|
||||
# En les stockant dans self, ils restent vivants en mémoire
|
||||
self._audio_engine = cma.Engine()
|
||||
self._sound = self._audio_engine.play(self.tmp.name)
|
||||
self._sound.looping = True
|
||||
# On force le volume du son pour correspondre à la config
|
||||
self._sound.volume = volume / 100.0
|
||||
|
||||
# Connexions
|
||||
self._slider.valueChanged.connect(self._on_slider_changed)
|
||||
@@ -63,7 +64,9 @@ class AudioController:
|
||||
|
||||
def _on_slider_changed(self, value: int) -> None:
|
||||
self._is_muted = value == 0
|
||||
self._output.setVolume(value / 100.0)
|
||||
if hasattr(self, '_sound'):
|
||||
# cyminiaudio attend souvent un float entre 0.0 et 1.0
|
||||
self._sound.volume = value / 100.0
|
||||
self._config.set_volume(value)
|
||||
self._refresh_mute_btn()
|
||||
|
||||
@@ -72,7 +75,9 @@ class AudioController:
|
||||
self._slider.setValue(value)
|
||||
self._slider.blockSignals(False)
|
||||
|
||||
self._output.setVolume(value / 100.0)
|
||||
# Même correction ici
|
||||
if hasattr(self, '_sound'):
|
||||
self._sound.volume = value / 100.0
|
||||
|
||||
if save:
|
||||
self._config.set_volume(value)
|
||||
|
||||
Reference in New Issue
Block a user