aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2026-06-10 00:14:34 +0530
committerAkshay Nair <phenax5@gmail.com>2026-06-10 00:35:33 +0530
commita3a312700c00b85c4f5cfbac7d24dac9a7319bdd (patch)
tree9c93bf1f3c90a4b84bb99aaa8bc614fab84334a2
parent133dacf4770c4a77c68caa7a994c76bc2f09c08b (diff)
downloadsqlite-creative-coding-a3a312700c00b85c4f5cfbac7d24dac9a7319bdd.tar.gz
sqlite-creative-coding-a3a312700c00b85c4f5cfbac7d24dac9a7319bdd.zip
Add save to mp3 + update supermariobros theme
-rwxr-xr-xaudio.sh22
-rw-r--r--media/supermariobros.mp3bin0 -> 47565 bytes
-rw-r--r--media/supermariobros.mp4bin0 -> 26624 bytes
-rw-r--r--src/supermariobros.audio.sql76
4 files changed, 69 insertions, 29 deletions
diff --git a/audio.sh b/audio.sh
index c5d3c06..8001fb1 100755
--- a/audio.sh
+++ b/audio.sh
@@ -23,6 +23,20 @@ play() {
ffplay -f "$format" -ar "$sample_rate" -b:a 128K -ch_layout mono -autoexit -
}
+to_mp3() {
+ id="$1"
+ format="$2"
+ sample_rate="$3"
+ ffmpeg -y -f "$format" -ar "$sample_rate" -ch_layout mono -i - -b:a 192k "media/$id.mp3"
+}
+
+to_mp4() {
+ id="$1"
+ format="$2"
+ sample_rate="$3"
+ ffmpeg -y -f "$format" -ar "$sample_rate" -ch_layout mono -i - -b:a 192k -c:v copy -c:a aac "media/$id.mp4"
+}
+
track_info() {
local audio_id="$1"
db "SELECT format, sample_rate FROM audio_tracks WHERE id='$audio_id'"
@@ -37,4 +51,10 @@ sample_rate="$(echo "$data" | cut -f2)"
echo "-----------$data--------"
-samples "$AUDIO_TRACK_ID" | to_pcm | play "$format" "$sample_rate"
+samples "$AUDIO_TRACK_ID" | to_pcm | \
+ tee >(to_mp3 "$AUDIO_TRACK_ID" "$format" "$sample_rate") | \
+ tee >(to_mp4 "$AUDIO_TRACK_ID" "$format" "$sample_rate") | \
+ play "$format" "$sample_rate"
+
+echo ""
+echo "Done"
diff --git a/media/supermariobros.mp3 b/media/supermariobros.mp3
new file mode 100644
index 0000000..2b656f3
--- /dev/null
+++ b/media/supermariobros.mp3
Binary files differ
diff --git a/media/supermariobros.mp4 b/media/supermariobros.mp4
new file mode 100644
index 0000000..78f741b
--- /dev/null
+++ b/media/supermariobros.mp4
Binary files differ
diff --git a/src/supermariobros.audio.sql b/src/supermariobros.audio.sql
index b6ce0a7..8f592c1 100644
--- a/src/supermariobros.audio.sql
+++ b/src/supermariobros.audio.sql
@@ -1,33 +1,53 @@
INSERT OR REPLACE INTO audio_tracks (id, sample_rate, format) VALUES ('supermariobros', 8000, 'u8') RETURNING id;
WITH RECURSIVE
- audio AS (SELECT *, 250 AS n, 100 AS total_tones, 160 AS gain FROM audio_tracks WHERE id = 'supermariobros'),
- notes AS (SELECT 659.225 AS E5, 523.2511 AS C5, 783.9909 AS G5, 391.9954 AS G4),
- tone(position) AS (SELECT 0 UNION ALL SELECT position + 1 FROM tone, audio WHERE position < total_tones * n),
- _samples(value, position) AS (
- SELECT
- (CASE
- WHEN position < 5*n THEN position * E5
- WHEN position < 6*n THEN 0
- WHEN position < 11*n THEN position * E5
- WHEN position < 17*n THEN 0
- WHEN position < 22*n THEN position * E5
- WHEN position < 28*n THEN 0
- WHEN position < (28+5)*n THEN position * C5
- WHEN position < (28+6)*n THEN 0
- WHEN position < (28+11)*n THEN position * E5
- WHEN position < (28+17)*n THEN 0
- WHEN position < (28+22)*n THEN position * G5
- WHEN position < (28+39)*n THEN 0
- WHEN position < (28+39+5)*n THEN position * G4
- ELSE 0
- END) AS value,
+ audio AS
+ (SELECT *, 250 AS n, 160 AS gain FROM audio_tracks WHERE id = 'supermariobros'),
+ notes AS (SELECT
+ 440.0000 AS A4,
+ 493.8833 AS B4,
+ 466.1638 AS Bflat4,
+ 391.9954 AS G4,
+ 261.6256 AS C4,
+ 329.6276 AS E4,
+ 523.2511 AS C5,
+ 783.9909 AS G5,
+ 659.2250 AS E5),
+ melody(m_id, mduration, mnote) AS
+ (SELECT ROW_NUMBER() OVER () as m_id, * FROM (VALUES
+ (5, (SELECT E5 FROM notes)) , (1, 0),
+ (5, (SELECT E5 FROM notes)) , (6, 0),
+ (5, (SELECT E5 FROM notes)) , (6, 0),
+ (5, (SELECT C5 FROM notes)) , (1, 0),
+ (5, (SELECT E5 FROM notes)) , (6, 0),
+ (5, (SELECT G5 FROM notes)) , (17, 0),
+ (5, (SELECT G4 FROM notes)) , (17, 0),
+ (5, (SELECT C5 FROM notes)) , (12, 0),
+ (5, (SELECT G4 FROM notes)) , (10, 0),
+ (5, (SELECT E4 FROM notes)) , (8, 0),
+ (5, (SELECT A4 FROM notes)) , (6, 0),
+ (5, (SELECT B4 FROM notes)) , (5, 0),
+ (5, (SELECT Bflat4 FROM notes)), (1, 0),
+ (5, (SELECT A4 FROM notes)) , (12, 0),
+ -- (5, (SELECT G4 FROM notes)) , (1, 0),
+ (1, 0))),
+ melody_with_offsets(mstart, mend, mnote) AS
+ (SELECT
+ SUM(mduration) OVER (ORDER BY m_id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS mstart,
+ SUM(mduration) OVER (ORDER BY m_id) AS mend,
+ mnote
+ FROM melody),
+ tone(position) AS (SELECT 0 UNION ALL SELECT position + 1 FROM tone, audio WHERE position < (SELECT SUM(mduration) FROM melody) * n),
+ _samples(value, position) AS
+ (SELECT
+ IFNULL(
+ (SELECT mnote * position FROM melody_with_offsets
+ WHERE position BETWEEN IFNULL(mstart, 0) * n AND mend * n
+ LIMIT 1),
+ 0) AS value,
position
- FROM tone, notes, audio
- ),
- samples(value, position) AS (
- SELECT MOD(FLOOR(value * 2.0 / sample_rate), 2) * gain, position
- FROM _samples, audio
- )
--- SELECT value FROM samples ORDER BY position;
+ FROM tone, notes, audio),
+ samples(value, position) AS
+ (SELECT MOD(FLOOR(value * 2.0 / sample_rate), 2) * gain, position
+ FROM _samples, audio)
INSERT INTO audio_track_samples (audio_track_id, value, position) SELECT 'supermariobros', value, position FROM samples ORDER BY position;