From 929aea6a9135eb88be87f28b8bc7ad5480929062 Mon Sep 17 00:00:00 2001 From: RogueMaster Date: Mon, 19 Dec 2022 20:19:03 -0500 Subject: [PATCH] Fix some sound issues --- .../musictracker/tracker_engine/speaker_hal.c | 5 ++++- applications/plugins/ocarina/ocarina.c | 21 ++++++++++++++----- applications/plugins/tama_p1/hal.c | 15 ++++++++----- .../plugins/tuning_fork/tuning_fork.c | 5 ++++- applications/plugins/usb_midi/usb_midi.c | 7 +++++-- 5 files changed, 39 insertions(+), 14 deletions(-) diff --git a/applications/plugins/musictracker/tracker_engine/speaker_hal.c b/applications/plugins/musictracker/tracker_engine/speaker_hal.c index 208fee04c..9c831aaef 100644 --- a/applications/plugins/musictracker/tracker_engine/speaker_hal.c +++ b/applications/plugins/musictracker/tracker_engine/speaker_hal.c @@ -40,12 +40,15 @@ void tracker_speaker_stop() { } void tracker_speaker_init() { - furi_hal_speaker_start(200.0f, 0.01f); + if(furi_hal_speaker_acquire(30)) { + furi_hal_speaker_start(200.0f, 0.01f); + } tracker_speaker_stop(); } void tracker_speaker_deinit() { furi_hal_speaker_stop(); + furi_hal_speaker_release(); } static FuriHalInterruptISR tracker_isr; diff --git a/applications/plugins/ocarina/ocarina.c b/applications/plugins/ocarina/ocarina.c index 013f81ab8..3ee8f8afc 100644 --- a/applications/plugins/ocarina/ocarina.c +++ b/applications/plugins/ocarina/ocarina.c @@ -85,19 +85,29 @@ int32_t ocarina_app(void* p) { if(event.type == InputTypePress) { switch(event.key) { case InputKeyUp: - furi_hal_speaker_start(NOTE_UP, volume); + if(furi_hal_speaker_acquire(30)) { + furi_hal_speaker_start(NOTE_UP, volume); + } break; case InputKeyDown: - furi_hal_speaker_start(NOTE_DOWN, volume); + if(furi_hal_speaker_acquire(30)) { + furi_hal_speaker_start(NOTE_DOWN, volume); + } break; case InputKeyLeft: - furi_hal_speaker_start(NOTE_LEFT, volume); + if(furi_hal_speaker_acquire(30)) { + furi_hal_speaker_start(NOTE_LEFT, volume); + } break; case InputKeyRight: - furi_hal_speaker_start(NOTE_RIGHT, volume); + if(furi_hal_speaker_acquire(30)) { + furi_hal_speaker_start(NOTE_RIGHT, volume); + } break; case InputKeyOk: - furi_hal_speaker_start(NOTE_OK, volume); + if(furi_hal_speaker_acquire(30)) { + furi_hal_speaker_start(NOTE_OK, volume); + } break; case InputKeyBack: processing = false; @@ -107,6 +117,7 @@ int32_t ocarina_app(void* p) { } } else if(event.type == InputTypeRelease) { furi_hal_speaker_stop(); + furi_hal_speaker_release(); } } diff --git a/applications/plugins/tama_p1/hal.c b/applications/plugins/tama_p1/hal.c index c862e44b3..8e601f8b0 100644 --- a/applications/plugins/tama_p1/hal.c +++ b/applications/plugins/tama_p1/hal.c @@ -102,11 +102,16 @@ static void tama_p1_hal_set_lcd_icon(u8_t icon, bool_t val) { } static void tama_p1_hal_play_frequency(bool_t en) { - if(en) - furi_hal_speaker_start(g_ctx->frequency, 0.5f); - else - furi_hal_speaker_stop(); - + if(en) { + if(furi_hal_speaker_acquire(30)) { + furi_hal_speaker_start(g_ctx->frequency, 0.5f); + } + } else { + if(furi_hal_speaker_is_mine()) { + furi_hal_speaker_stop(); + furi_hal_speaker_release(); + } + } g_ctx->buzzer_on = en; } diff --git a/applications/plugins/tuning_fork/tuning_fork.c b/applications/plugins/tuning_fork/tuning_fork.c index ab39e1f14..faf734193 100644 --- a/applications/plugins/tuning_fork/tuning_fork.c +++ b/applications/plugins/tuning_fork/tuning_fork.c @@ -114,11 +114,14 @@ static void decrease_volume(TuningForkState* tuning_fork_state) { } static void play(TuningForkState* tuning_fork_state) { - furi_hal_speaker_start(current_tuning_note_freq(tuning_fork_state), tuning_fork_state->volume); + if(furi_hal_speaker_acquire(30)) { + furi_hal_speaker_start(current_tuning_note_freq(tuning_fork_state), tuning_fork_state->volume); + } } static void stop() { furi_hal_speaker_stop(); + furi_hal_speaker_release(); } static void replay(TuningForkState* tuning_fork_state) { diff --git a/applications/plugins/usb_midi/usb_midi.c b/applications/plugins/usb_midi/usb_midi.c index b1149a176..42927e961 100644 --- a/applications/plugins/usb_midi/usb_midi.c +++ b/applications/plugins/usb_midi/usb_midi.c @@ -57,12 +57,15 @@ int32_t usb_midi_app(void* p) { if(event->type == NoteOn) { NoteOnEvent note_on = AsNoteOn(event); current_note = note_on.note; - furi_hal_speaker_start( - note_to_frequency(note_on.note), note_on.velocity / 127.0f); + if(furi_hal_speaker_acquire(30)) { + furi_hal_speaker_start( + note_to_frequency(note_on.note), note_on.velocity / 127.0f); + } } else if(event->type == NoteOff) { NoteOffEvent note_off = AsNoteOff(event); if(note_off.note == current_note) { furi_hal_speaker_stop(); + furi_hal_speaker_release(); } } }