From fe83cf723c74cdd268ae669ebb8936e38b087a7d Mon Sep 17 00:00:00 2001 From: Bill Kendrick Date: Sun, 7 Jan 2024 13:30:04 -0800 Subject: [PATCH] Trochoids: Dragging sound effect Plus a bunch of refactoring & wrapping up of the sound routine. --- docs/CHANGES.txt | 10 +++-- magic/sounds/trochoids_drag.ogg | Bin 0 -> 10608 bytes magic/src/trochoids.c | 63 +++++++++++++++++++------------- 3 files changed, 44 insertions(+), 29 deletions(-) create mode 100644 magic/sounds/trochoids_drag.ogg diff --git a/docs/CHANGES.txt b/docs/CHANGES.txt index e1bf0c2ec..75ea0c47b 100644 --- a/docs/CHANGES.txt +++ b/docs/CHANGES.txt @@ -65,11 +65,13 @@ https://tuxpaint.org/ available, each with differing pen positions. + Code: Bill Kendrick + WIP - Needs icons - + WIP Sounds: - - Drag: TBD + + Sounds: + - Drag: "Running Gear", CC0 1.0 Universal + by Vurca (https://freesound.org/people/Vurca/) - Epitrochoid draw "celtic_harp_c3.wav" & - Hypotrochoid draw "celtic_harp_c2.wav" - both CC0 1.0 Universal + Hypotrochoid draw "celtic_harp_c2.wav", + both CC0 1.0 Universal from "Celtic Harp Samples" collection + (https://freesound.org/people/Daphne_in_Wonderland/packs/29328/) by Daphne Farazi (https://soundcloud.com/daphnefarazi) * Improvements to "Text" & "Label" tools: diff --git a/magic/sounds/trochoids_drag.ogg b/magic/sounds/trochoids_drag.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7a13bb191414dce83ef92472784731ee0413acfa GIT binary patch literal 10608 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 /* If they clicked & released with no drag, ignore the (x,y) we received; we want the @@ -437,41 +445,46 @@ void trochoids_release(magic_api * api, int which, y += (canvas->h / 20); } - /* Pick which sound to play */ + /* Pick which sound to play & play it */ tool = which_to_tool[which]; if (tool == TOOL_EPITROCHOID_SIZES || tool == TOOL_EPITROCHOID_NOSIZES_1 || tool == TOOL_EPITROCHOID_NOSIZES_2 || tool == TOOL_EPITROCHOID_NOSIZES_3) { - snd_idx = SND_DRAW_RELEASE_EPITROCHOID; + snd_idx = SND_RELEASE_EPITROCHOID; } else { - snd_idx = SND_DRAW_RELEASE_HYPOTROCHOID; + snd_idx = SND_RELEASE_HYPOTROCHOID; } + trochoids_sound(api, snd_idx, x, y); - /* Volume based on the radius of the stator (fixed circle); - larger = louder */ - R = abs(trochoids_x - x); + + /* Draw it (no guides, this time!) */ + trochoids_work(api, which, canvas, snapshot, x, y, update_rect, 0); +} + + +/* Play a sound; volume and panning will be based + on the size and position of the shape being generated + by the user's UI interaction */ +void trochoids_sound(magic_api * api, int snd_idx, int x, int y) { + int R, vol, pan; + + /* Volume based on the radii of the stator (fixed circle) + and the rotator (rolling circle), combined; larger = louder */ + R = abs(trochoids_x - x) + abs(trochoids_y - y); if (R < 20) { R = 20; - } else if (R > canvas->w) { - R = canvas->w; + } else if (R > api->canvas_w) { + R = api->canvas_w; } - vol = (255 * R * 2) / canvas->w; + vol = (255 * R * 2) / api->canvas_w; if (vol > 255) { vol = 255; } - /* (Stop previous sound if they made another shape quickly; - the sound effect lingers & we want to start playing again, - else it will seem like the sound only happens intermittently) */ - api->stopsound(); - - /* Panning based on the left/right position of the shape */ - pan = 128; /* FIXME */ + /* Panning based on the left/right position of the center of the shape */ + pan = (trochoids_x * 255) / api->canvas_w; api->playsound(sound_effects[snd_idx], pan, vol); - - /* Draw it (no guides, this time!) */ - trochoids_work(api, which, canvas, snapshot, x, y, update_rect, 0); }