diff --git a/.gitignore b/.gitignore index e9927143..f5e46736 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,6 @@ __pycache__/ # these get created: c_mpos/c_mpos + +# build files +*.bin diff --git a/internal_filesystem/apps/com.micropythonos.musicplayer/assets/music_player.py b/internal_filesystem/apps/com.micropythonos.musicplayer/assets/music_player.py index 402b3b2b..689d72d4 100644 --- a/internal_filesystem/apps/com.micropythonos.musicplayer/assets/music_player.py +++ b/internal_filesystem/apps/com.micropythonos.musicplayer/assets/music_player.py @@ -62,19 +62,21 @@ class FullscreenPlayer(Activity): def onCreate(self): self._filename = self.getIntent().extras.get("filename") qr_screen = lv.obj() - self._slider_label=lv.label(qr_screen) + self._slider_label = lv.label(qr_screen) self._slider_label.set_text(f"Volume: {AudioManager.get_volume()}%") - self._slider_label.align(lv.ALIGN.TOP_MID,0,lv.pct(4)) - self._slider=lv.slider(qr_screen) - self._slider.set_range(0,16) - self._slider.set_value(int(AudioManager.get_volume()/6.25), False) + self._slider_label.align(lv.ALIGN.TOP_MID, 0, lv.pct(4)) + self._slider = lv.slider(qr_screen) + self._slider.set_range(0, 100) + self._slider.set_value(int(AudioManager.get_volume()), False) self._slider.set_width(lv.pct(90)) - self._slider.align_to(self._slider_label,lv.ALIGN.OUT_BOTTOM_MID,0,10) + self._slider.align_to(self._slider_label, lv.ALIGN.OUT_BOTTOM_MID, 0, 10) + def volume_slider_changed(e): - volume_int = self._slider.get_value()*6.25 + volume_int = int(self._slider.get_value()) self._slider_label.set_text(f"Volume: {volume_int}%") AudioManager.set_volume(volume_int) - self._slider.add_event_cb(volume_slider_changed,lv.EVENT.VALUE_CHANGED,None) + + self._slider.add_event_cb(volume_slider_changed, lv.EVENT.VALUE_CHANGED, None) self._filename_label = lv.label(qr_screen) self._filename_label.align(lv.ALIGN.CENTER,0,0) self._filename_label.set_text(self._filename) diff --git a/internal_filesystem/lib/mpos/audio/audiomanager.py b/internal_filesystem/lib/mpos/audio/audiomanager.py index 7a8f631b..fac23dd6 100644 --- a/internal_filesystem/lib/mpos/audio/audiomanager.py +++ b/internal_filesystem/lib/mpos/audio/audiomanager.py @@ -187,7 +187,23 @@ class AudioManager: @classmethod def set_volume(cls, volume): - cls.get()._volume = max(0, min(100, volume)) + manager = cls.get() + try: + volume_int = int(round(volume)) + except (TypeError, ValueError): + return manager._volume + volume_int = max(0, min(100, volume_int)) + manager._volume = volume_int + + for session in list(manager._active_sessions): + stream = getattr(session, "_stream", None) + if stream and hasattr(stream, "set_volume"): + try: + stream.set_volume(volume_int) + except Exception: + pass + + return volume_int @classmethod def get_volume(cls): diff --git a/internal_filesystem/lib/mpos/board/linux.py b/internal_filesystem/lib/mpos/board/linux.py index 43aab645..1ef9556f 100644 --- a/internal_filesystem/lib/mpos/board/linux.py +++ b/internal_filesystem/lib/mpos/board/linux.py @@ -108,7 +108,6 @@ from mpos import AudioManager # Desktop builds have no real audio hardware, but we simulate microphone # recording with a 440Hz sine wave for testing WAV file generation # The i2s_pins dict with 'sd_in' enables microphone simulation -AudioManager() output_i2s_pins = { 'sck': 0, # Simulated - not used on desktop diff --git a/internal_filesystem/lib/mpos/board/m5stack_fire.py b/internal_filesystem/lib/mpos/board/m5stack_fire.py index 1292b6e3..6c95bf09 100644 --- a/internal_filesystem/lib/mpos/board/m5stack_fire.py +++ b/internal_filesystem/lib/mpos/board/m5stack_fire.py @@ -48,7 +48,6 @@ MPU6886_I2C_FREQ = const(400000) print("m5stack_fire.py init buzzer") buzzer = PWM(Pin(BUZZER_PIN, Pin.OUT, value=1), duty=5) -AudioManager() AudioManager.add(AudioManager.Output("buzzer", "buzzer", buzzer_pin=BUZZER_PIN)) AudioManager.set_volume(40)