From 86d6de77964c82c745f5dd8458a3f0178e315ce4 Mon Sep 17 00:00:00 2001 From: "hasinarak3@gmail.com" Date: Tue, 17 Feb 2026 16:23:53 +0300 Subject: [PATCH] Split voices by sliding volumes per voices SATB, mixer desktop --- .../kotlin/mg/dot/feufaro/midi/MidiPlayer.kt | 6 ++ .../src/androidMain/res/drawable/mixer_bg.png | Bin 0 -> 813606 bytes .../androidMain/res/drawable/mixer_fader.png | Bin 0 -> 11893 bytes .../composeResources/drawable/mixer_bg.png | Bin 0 -> 813606 bytes .../composeResources/drawable/mixer_fader.png | Bin 0 -> 11893 bytes .../kotlin/mg/dot/feufaro/midi/MidiPlayer.kt | 1 + .../kotlin/mg/dot/feufaro/ui/DrawerUI.kt | 23 ++--- .../mg/dot/feufaro/ui/MidiControlPanel.kt | 79 ++++++++++++++++-- .../kotlin/mg/dot/feufaro/midi/MidiPlayer.kt | 43 +++++----- 9 files changed, 106 insertions(+), 46 deletions(-) create mode 100644 composeApp/src/androidMain/res/drawable/mixer_bg.png create mode 100644 composeApp/src/androidMain/res/drawable/mixer_fader.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/mixer_bg.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/mixer_fader.png diff --git a/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt b/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt index 9bedd3f..c59453b 100644 --- a/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt +++ b/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt @@ -150,6 +150,12 @@ actual fun setVolume(level: Float) { return 120f } + actual fun updateVoiceVolume(voiceIndex: Int, newVolume: Float) { + if (voiceIndex in 0..3) { + //TODO: implements split voices & change volume per voices + } + } + fun release() { mediaPlayer?.release() mediaPlayer = null diff --git a/composeApp/src/androidMain/res/drawable/mixer_bg.png b/composeApp/src/androidMain/res/drawable/mixer_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..878acc53987c6742fbbd54c46ddcb8cf1c55e479 GIT binary patch literal 813606 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