From addc534c3636354e5db573a0318b3290325a9197 Mon Sep 17 00:00:00 2001 From: Migatu Date: Wed, 24 Apr 2024 18:57:14 +0200 Subject: [PATCH 01/22] JINGLES! --- conjurer_musician/radio_conjurer.liq | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index 71bcced..2b7f9a3 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -41,18 +41,9 @@ let json.parse credentials = file.contents("/home/pi/Conjurer/icecast_credentia end # Randomly select a playlist with weights - s = random(id="randomizer", weights=[1, 3, 2], [s1, s2, s3]) - #s = delay(duration=5., s) - #radio = add([delay(1800., jingles), music]) - #radio = fallback([delay(1800., jingles), music]) - #p = predicate.signal() - #radio = switch([(p, jingles), ({true}, music)]) - #thread.run(every=1200., {p.signal()}) -# def cmd(_) -# p.signal() -# "Jingle inserted!" -# end -# server.register("insert_jingle", cmd) + s4 = random(id="randomizer", weights=[1, 3, 2], [s1, s2, s3]) + jingles = (playlist(reload_mode="watch", "/home/pi/Conjurer/jingles.playlist")) + s = rotate(id="randomizer", weights=[20, 1], [s4, jingles]) # Set up an interactive harbor for controlling the stream interactive.harbor(port = 9999) From 2c50318f1cd7d197ba7a92bc1a923da3ee513155 Mon Sep 17 00:00:00 2001 From: Migatu Date: Wed, 24 Apr 2024 19:58:23 +0200 Subject: [PATCH 02/22] Skipping tracks --- conjurer_musician/radio_conjurer.liq | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index 2b7f9a3..c11a9a0 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -83,6 +83,17 @@ let json.parse credentials = file.contents("/home/pi/Conjurer/icecast_credentia radio = fallback(id="switcher2", track_sensitive=false, [cross_s, emergency]) thread.run(every=60., queue_processing) + p = interactive.bool("r1", false) + + def check_skip() + if p.get() then + log.info("Skipping current track.") + radio.skip() + p.set(false) + end + end + thread.run(every=5., check_skip) + # Handle metadata events handle_metadata = fun (m) -> begin From a35d7da6e32399fa515255e1ef0e9579a5f34a45 Mon Sep 17 00:00:00 2001 From: Migatu Date: Wed, 24 Apr 2024 20:02:37 +0200 Subject: [PATCH 03/22] testing skip --- conjurer_musician/radio_conjurer.liq | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index c11a9a0..2e2d0be 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -86,7 +86,7 @@ let json.parse credentials = file.contents("/home/pi/Conjurer/icecast_credentia p = interactive.bool("r1", false) def check_skip() - if p.get() then + if p then log.info("Skipping current track.") radio.skip() p.set(false) From cc11d3f75e913935b9006f132471a13f882a3757 Mon Sep 17 00:00:00 2001 From: Migatu Date: Wed, 24 Apr 2024 20:06:29 +0200 Subject: [PATCH 04/22] This language is officially insane --- conjurer_musician/radio_conjurer.liq | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index 2e2d0be..66e00f5 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -86,7 +86,7 @@ let json.parse credentials = file.contents("/home/pi/Conjurer/icecast_credentia p = interactive.bool("r1", false) def check_skip() - if p then + if p() then log.info("Skipping current track.") radio.skip() p.set(false) From 439c5c753cc766002fe9b98c605979dde36f4278 Mon Sep 17 00:00:00 2001 From: Migatu Date: Wed, 24 Apr 2024 20:15:39 +0200 Subject: [PATCH 05/22] Comments in radio script --- conjurer_musician/radio_conjurer.liq | 248 ++++++++++++++------------- 1 file changed, 133 insertions(+), 115 deletions(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index 66e00f5..c4c3017 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -5,138 +5,156 @@ # Load icecast credentials from a JSON file let json.parse credentials = file.contents("/home/pi/Conjurer/icecast_credentials.json") - # Enable replaygain metadata processing - enable_replaygain_metadata() - l = playlog(duration = 14400.0, persistency="/home/pi/Conjurer/persistence.log") - def check(r) - m = request.metadata(r) - if l.last(m) < 3600. then - log.info("Rejecting #{m['filename']} (played #{l.last(m)}s ago).") - false - else - l.add(m) - true - end +# Enable replaygain metadata processing +enable_replaygain_metadata() + +# Set up a playlog for tracking played tracks +l = playlog(duration = 14400.0, persistency="/home/pi/Conjurer/persistence.log") + +# Function to check if a track can be played based on its metadata +def check(r) + m = request.metadata(r) + if l.last(m) < 3600. then + log.info("Rejecting #{m['filename']} (played #{l.last(m)}s ago).") + false + else + l.add(m) + true end +end +# Define playlists to be used in the stream +s1 = replaygain(playlist(reload_mode="watch", check_next=check, "/home/pi/Conjurer/all_playlist.playlist")) +s2 = replaygain(playlist(reload_mode="watch", check_next=check, "/home/pi/Conjurer/priority_queue.playlist")) +s3 = replaygain(playlist(reload_mode="watch", check_next=check, "/home/pi/Conjurer/hit.playlist")) +# Create a request queue for user-generated requests +requests_queue = request.queue() - # Define playlists to be used in the stream - s1 = replaygain(playlist(reload_mode="watch", check_next=check, "/home/pi/Conjurer/all_playlist.playlist")) - s2 = replaygain(playlist(reload_mode="watch", check_next=check, "/home/pi/Conjurer/priority_queue.playlist")) - s3 = replaygain(playlist(reload_mode="watch", check_next=check, "/home/pi/Conjurer/hit.playlist")) - requests_queue = request.queue() - def queue_processing() - f1=file.read("/home/pi/Conjurer/request.playlist") - text = f1() - if text != "" then - requests_queue.push.uri(text) - file.remove("/home/pi/Conjurer/request.playlist") - f = file.open("/home/pi/Conjurer/request.playlist", create=true) - f.close() - log.info("done") - else - log.info("no requests") - end +# Function to process the request queue and add new requests +def queue_processing() + f1=file.read("/home/pi/Conjurer/request.playlist") + text = f1() + if text != "" then + requests_queue.push.uri(text) + file.remove("/home/pi/Conjurer/request.playlist") + f = file.open("/home/pi/Conjurer/request.playlist", create=true) + f.close() + log.info("done") + else + log.info("no requests") end +end - # Randomly select a playlist with weights - s4 = random(id="randomizer", weights=[1, 3, 2], [s1, s2, s3]) - jingles = (playlist(reload_mode="watch", "/home/pi/Conjurer/jingles.playlist")) - s = rotate(id="randomizer", weights=[20, 1], [s4, jingles]) +# Randomly select a playlist with weights +s4 = random(id="randomizer", weights=[1, 3, 2], [s1, s2, s3]) - # Set up an interactive harbor for controlling the stream - interactive.harbor(port = 9999) - # Set up interactive controls for bass boost - f = interactive.float("f", description="Frequency", min=0., max=1000., unit="Hz", 200.) - g = interactive.float("g", description="Gain", min=0., max=20., unit="dB", 8.) - b = bass_boost(frequency=f, gain=g, s) - s = add([s, b]) - # Set up interactive control for main volume - a = interactive.float("main_volume", min=0., max=20., 1.) - s = compress.multiband.interactive(bands=3, s) +# Load jingles playlist +jingles = (playlist(reload_mode="watch", "/home/pi/Conjurer/jingles.playlist")) - # Apply audio processing effects - s = nrj(normalize(s)) - s = amplify(a, s) +# Create the main stream with random playlist and jingles +s = rotate(id="randomizer", weights=[20, 1], [s4, jingles]) - # Skip blank sections in the stream - s = blank.skip(max_blank=2., s) +# Set up an interactive harbor for controlling the stream +interactive.harbor(port = 9999) - # Configure logging settings - log_to_stdout = true - log_to_file = true - logpath = "/home/pi/Conjurer/radio_log.log" - loglevel = 4 - set("log.stdout", log_to_stdout) - set("log.level", loglevel) +# Set up interactive controls for bass boost +f = interactive.float("f", description="Frequency", min=0., max=1000., unit="Hz", 200.) +g = interactive.float("g", description="Gain", min=0., max=20., unit="dB", 8.) +b = bass_boost(frequency=f, gain=g, s) +s = add([s, b]) - # Enable logging to file - set("log.file", log_to_file) - set("log.file.path", logpath) +# Set up interactive control for main volume +a = interactive.float("main_volume", min=0., max=20., 1.) +s = compress.multiband.interactive(bands=3, s) - # Set up emergency fallback track - emergency = single("/home/pi/RetroPie/mp3/Youtube/Dr. Peacock - Trip to Ireland [GvrvQTUbUcA].mp3") +# Apply audio processing effects +s = nrj(normalize(s)) +s = amplify(a, s) - # Create a fallback stream with the main stream and emergency track - cross_s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) - radio = fallback(id="switcher2", track_sensitive=false, [cross_s, emergency]) +# Skip blank sections in the stream +s = blank.skip(max_blank=2., s) - thread.run(every=60., queue_processing) - p = interactive.bool("r1", false) +# Configure logging settings +log_to_stdout = true +log_to_file = true +logpath = "/home/pi/Conjurer/radio_log.log" +loglevel = 4 +set("log.stdout", log_to_stdout) +set("log.level", loglevel) - def check_skip() - if p() then - log.info("Skipping current track.") - radio.skip() - p.set(false) - end +# Enable logging to file +set("log.file", log_to_file) +set("log.file.path", logpath) + +# Set up emergency fallback track +emergency = single("/home/pi/RetroPie/mp3/Youtube/Dr. Peacock - Trip to Ireland [GvrvQTUbUcA].mp3") + +# Create a fallback stream with the main stream and emergency track +cross_s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) +radio = fallback(id="switcher2", track_sensitive=false, [cross_s, emergency]) + +# Function to process the request queue and skip the current track if requested +def check_skip() + if p() then + log.info("Skipping current track.") + radio.skip() + p.set(false) end - thread.run(every=5., check_skip) +end +# Run the queue processing function every 60 seconds +thread.run(every=60., queue_processing) - # Handle metadata events - handle_metadata = fun (m) -> begin - log.info(m["title"]) - log.info(m["artist"]) - log.info(m["filename"]) - end - radio.on_metadata(handle_metadata) +# Set up an interactive control for skipping tracks +p = interactive.bool("r1", false) - # Enable persistent script parameters - interactive.persistent("script.params") +# Run the check_skip function every 5 seconds +thread.run(every=5., check_skip) - # Configure output formats and destinations - output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))], radio) - output.icecast(%mp3, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream", radio) -# output.icecast(%opus, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="opus-stream", radio) -# output.icecast(%ogg, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="ogg-stream", radio) -# output.icecast(%aac, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="aac-stream", radio) -# output.icecast(%flac, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="flac-stream", radio) -# output.icecast(%vorbis, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="vorbis-stream", radio) -# output.icecast(%speex, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="speex-stream", radio) -# output.icecast(%wav, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="wav-stream", radio) -# output.icecast(%pcm, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="pcm-stream", radio) -# output.icecast(%raw, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="raw-stream", radio) -# output.icecast(%s16l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s16l-stream", radio) -# output.icecast(%s16b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s16b-stream", radio) -# output.icecast(%s24l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s24l-stream", radio) -# output.icecast(%s24b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s24b-stream", radio) -# output.icecast(%s32l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s32l-stream", radio) -# output.icecast(%s32b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s32b-stream", radio) -# output.icecast(%s64l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s64l-stream", radio) -# output.icecast(%s64b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s64b-stream", radio) -# output.icecast(%s128l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s128l-stream", radio) -# output.icecast(%s128b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s128b-stream", radio) -# output.icecast(%s256l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s256l-stream", radio) -# output.icecast(%s256b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s256b-stream", radio) -# output.icecast(%s512l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s512l-stream", radio) -# output.icecast(%s512b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s512b-stream", radio) -# output.icecast(%s1024l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s1024l-stream", radio) -# output.icecast(%s1024b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s1024b-stream", radio) -# output.icecast(%s2048l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s2048l-stream", radio) -# output.icecast(%s2048b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s2048b-stream", radio) -# output.icecast(%s4096l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s4096l-stream", radio) -# output.icecast(%s4096b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s4096b-stream", radio) -# output.icecast(%s8192l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s8192l-stream", radio) -# output.icecast(%s8192b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s8192b-stream", radio) +# Handle metadata events +handle_metadata = fun (m) -> begin + log.info(m["title"]) + log.info(m["artist"]) + log.info(m["filename"]) +end +radio.on_metadata(handle_metadata) + +# Enable persistent script parameters +interactive.persistent("script.params") + +# Configure output formats and destinations +output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))], radio) +output.icecast(%mp3, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream", radio) +# Uncomment the following lines to enable additional output formats +# output.icecast(%opus, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="opus-stream", radio) +# output.icecast(%ogg, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="ogg-stream", radio) +# output.icecast(%aac, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="aac-stream", radio) +# output.icecast(%flac, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="flac-stream", radio) +# output.icecast(%vorbis, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="vorbis-stream", radio) +# output.icecast(%speex, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="speex-stream", radio) +# output.icecast(%wav, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="wav-stream", radio) +# output.icecast(%pcm, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="pcm-stream", radio) +# output.icecast(%raw, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="raw-stream", radio) +# output.icecast(%s16l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s16l-stream", radio) +# output.icecast(%s16b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s16b-stream", radio) +# output.icecast(%s24l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s24l-stream", radio) +# output.icecast(%s24b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s24b-stream", radio) +# output.icecast(%s32l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s32l-stream", radio) +# output.icecast(%s32b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s32b-stream", radio) +# output.icecast(%s64l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s64l-stream", radio) +# output.icecast(%s64b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s64b-stream", radio) +# output.icecast(%s128l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s128l-stream", radio) +# output.icecast(%s128b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s128b-stream", radio) +# output.icecast(%s256l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s256l-stream", radio) +# output.icecast(%s256b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s256b-stream", radio) +# output.icecast(%s512l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s512l-stream", radio) +# output.icecast(%s512b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s512b-stream", radio) +# output.icecast(%s1024l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s1024l-stream", radio) +# output.icecast(%s1024b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s1024b-stream", radio) +# output.icecast(%s2048l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s2048l-stream", radio) +# output.icecast(%s2048b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s2048b-stream", radio) +# output.icecast(%s4096l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s4096l-stream", radio) +# output.icecast(%s4096b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s4096b-stream", radio) +# output.icecast(%s8192l, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s8192l-stream", radio) +# output.icecast(%s8192b, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="s8192b-stream", radio) From 5e810d23ab1ecf54296f11a81ced419855df7424 Mon Sep 17 00:00:00 2001 From: Migatu Date: Wed, 24 Apr 2024 20:31:35 +0200 Subject: [PATCH 06/22] Streaming hls --- conjurer_musician/conjurer_musician.py | 8 ++++---- conjurer_musician/stream.html | 9 +++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 conjurer_musician/stream.html diff --git a/conjurer_musician/conjurer_musician.py b/conjurer_musician/conjurer_musician.py index 5244f5e..8c49660 100644 --- a/conjurer_musician/conjurer_musician.py +++ b/conjurer_musician/conjurer_musician.py @@ -14,8 +14,7 @@ from logging import handlers from pathlib import Path from platform import uname from sys import platform - -from flask import Flask, jsonify, redirect, request, send_from_directory +from flask import Flask, jsonify, redirect, request, send_from_directory, render_template from waitress import serve HOST_ADDRESS = "192.168.1.15" @@ -246,8 +245,9 @@ def stream_music(): :return: A JSON response containing a key "music_file_list" with the value of the variable `music_file_list`. """ - return send_from_directory("/tmp/hls", "stream.m3u8") + #return send_from_directory("/tmp/hls", "stream.m3u8") + return render_template("stream.html") @app.route("/") def stream(file_name): @@ -260,10 +260,10 @@ def stream(file_name): Returns: Response: The response containing the streamed file. """ + # trunk-ignore(bandit/B108) video_dir = "/tmp/hls" return send_from_directory(video_dir, file_name) - @app.route("/stream_mp3", methods=["GET"]) def stream_music_mp3(): """ diff --git a/conjurer_musician/stream.html b/conjurer_musician/stream.html new file mode 100644 index 0000000..3a7811f --- /dev/null +++ b/conjurer_musician/stream.html @@ -0,0 +1,9 @@ + + + HTTP Live Streaming Example + + + + + From 1e00c1fe3355670fffbe22686e5bd1b568799a5b Mon Sep 17 00:00:00 2001 From: Migatu Date: Wed, 24 Apr 2024 20:39:31 +0200 Subject: [PATCH 07/22] Fx bug --- conjurer_musician/conjurer_musician.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conjurer_musician/conjurer_musician.py b/conjurer_musician/conjurer_musician.py index 8c49660..da99ddc 100644 --- a/conjurer_musician/conjurer_musician.py +++ b/conjurer_musician/conjurer_musician.py @@ -247,7 +247,7 @@ def stream_music(): """ #return send_from_directory("/tmp/hls", "stream.m3u8") - return render_template("stream.html") + return render_template("/home/pi/Conjurerstream.html") @app.route("/") def stream(file_name): From fcbda8121323cc6e4df49f32a5eadc875943ef0a Mon Sep 17 00:00:00 2001 From: Migatu Date: Wed, 24 Apr 2024 20:40:58 +0200 Subject: [PATCH 08/22] Fxs --- conjurer_musician/conjurer_musician.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conjurer_musician/conjurer_musician.py b/conjurer_musician/conjurer_musician.py index da99ddc..525f248 100644 --- a/conjurer_musician/conjurer_musician.py +++ b/conjurer_musician/conjurer_musician.py @@ -247,7 +247,7 @@ def stream_music(): """ #return send_from_directory("/tmp/hls", "stream.m3u8") - return render_template("/home/pi/Conjurerstream.html") + return render_template("/home/pi/Conjurer/stream.html") @app.route("/") def stream(file_name): From 7de1ad43fd1c83f8361a08ce0de1fb108a3d0734 Mon Sep 17 00:00:00 2001 From: Migatu Date: Thu, 25 Apr 2024 14:06:23 +0200 Subject: [PATCH 09/22] Small fixes --- conjurer_musician/radio_conjurer.liq | 15 +++++++++------ requirements_bot.txt | 3 ++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index c4c3017..a636554 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -58,6 +58,8 @@ s = rotate(id="randomizer", weights=[20, 1], [s4, jingles]) # Set up an interactive harbor for controlling the stream interactive.harbor(port = 9999) +s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) + # Set up interactive controls for bass boost f = interactive.float("f", description="Frequency", min=0., max=1000., unit="Hz", 200.) g = interactive.float("g", description="Gain", min=0., max=20., unit="dB", 8.) @@ -66,7 +68,7 @@ s = add([s, b]) # Set up interactive control for main volume a = interactive.float("main_volume", min=0., max=20., 1.) -s = compress.multiband.interactive(bands=3, s) +s = compress.multiband.interactive(bands=8, s) # Apply audio processing effects s = nrj(normalize(s)) @@ -75,6 +77,9 @@ s = amplify(a, s) # Skip blank sections in the stream s = blank.skip(max_blank=2., s) +#w = interactive.float("wetness", min=0., max=1., 1.) +#s = dry_wet(w, s, s2) + # Configure logging settings log_to_stdout = true log_to_file = true @@ -89,9 +94,7 @@ set("log.file.path", logpath) # Set up emergency fallback track emergency = single("/home/pi/RetroPie/mp3/Youtube/Dr. Peacock - Trip to Ireland [GvrvQTUbUcA].mp3") - # Create a fallback stream with the main stream and emergency track -cross_s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) radio = fallback(id="switcher2", track_sensitive=false, [cross_s, emergency]) # Function to process the request queue and skip the current track if requested @@ -107,7 +110,7 @@ end thread.run(every=60., queue_processing) # Set up an interactive control for skipping tracks -p = interactive.bool("r1", false) +p = interactive.bool("Skip track", false) # Run the check_skip function every 5 seconds thread.run(every=5., check_skip) @@ -124,8 +127,8 @@ radio.on_metadata(handle_metadata) interactive.persistent("script.params") # Configure output formats and destinations -output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))], radio) -output.icecast(%mp3, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream", radio) +output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=320))], radio) +output.icecast(%mp3.abr(internal_quality = 0, bitrate=320, min_bitrate=192), host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream", radio) # Uncomment the following lines to enable additional output formats # output.icecast(%opus, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="opus-stream", radio) # output.icecast(%ogg, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="ogg-stream", radio) diff --git a/requirements_bot.txt b/requirements_bot.txt index e4d9ba0..7c8fed6 100644 --- a/requirements_bot.txt +++ b/requirements_bot.txt @@ -12,4 +12,5 @@ spotipy tiktoken PyNaCl flask -waitress \ No newline at end of file +waitress +clickupython \ No newline at end of file From 7c0de660fd6516df2a88b014528e72b498a5d292 Mon Sep 17 00:00:00 2001 From: The Hammer Date: Thu, 25 Apr 2024 13:22:26 +0100 Subject: [PATCH 10/22] Revert fix --- conjurer_musician/radio_conjurer.liq | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index a636554..4e64865 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -58,8 +58,6 @@ s = rotate(id="randomizer", weights=[20, 1], [s4, jingles]) # Set up an interactive harbor for controlling the stream interactive.harbor(port = 9999) -s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) - # Set up interactive controls for bass boost f = interactive.float("f", description="Frequency", min=0., max=1000., unit="Hz", 200.) g = interactive.float("g", description="Gain", min=0., max=20., unit="dB", 8.) @@ -68,7 +66,7 @@ s = add([s, b]) # Set up interactive control for main volume a = interactive.float("main_volume", min=0., max=20., 1.) -s = compress.multiband.interactive(bands=8, s) +s = compress.multiband.interactive(bands=3, s) # Apply audio processing effects s = nrj(normalize(s)) @@ -77,9 +75,6 @@ s = amplify(a, s) # Skip blank sections in the stream s = blank.skip(max_blank=2., s) -#w = interactive.float("wetness", min=0., max=1., 1.) -#s = dry_wet(w, s, s2) - # Configure logging settings log_to_stdout = true log_to_file = true @@ -94,8 +89,12 @@ set("log.file.path", logpath) # Set up emergency fallback track emergency = single("/home/pi/RetroPie/mp3/Youtube/Dr. Peacock - Trip to Ireland [GvrvQTUbUcA].mp3") + # Create a fallback stream with the main stream and emergency track +cross_s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) radio = fallback(id="switcher2", track_sensitive=false, [cross_s, emergency]) +# Set up an interactive control for skipping tracks +p = interactive.bool("r1", false) # Function to process the request queue and skip the current track if requested def check_skip() @@ -109,8 +108,6 @@ end # Run the queue processing function every 60 seconds thread.run(every=60., queue_processing) -# Set up an interactive control for skipping tracks -p = interactive.bool("Skip track", false) # Run the check_skip function every 5 seconds thread.run(every=5., check_skip) @@ -127,8 +124,8 @@ radio.on_metadata(handle_metadata) interactive.persistent("script.params") # Configure output formats and destinations -output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=320))], radio) -output.icecast(%mp3.abr(internal_quality = 0, bitrate=320, min_bitrate=192), host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream", radio) +output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))], radio) +output.icecast(%mp3, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream", radio) # Uncomment the following lines to enable additional output formats # output.icecast(%opus, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="opus-stream", radio) # output.icecast(%ogg, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="ogg-stream", radio) From 3b232ac3d717c8bfb31e89be1b36d0e4fcae400f Mon Sep 17 00:00:00 2001 From: Migatu Date: Thu, 25 Apr 2024 14:29:30 +0200 Subject: [PATCH 11/22] Small improvements --- conjurer_musician/radio_conjurer.liq | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index 4e64865..078e249 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -40,9 +40,7 @@ def queue_processing() file.remove("/home/pi/Conjurer/request.playlist") f = file.open("/home/pi/Conjurer/request.playlist", create=true) f.close() - log.info("done") - else - log.info("no requests") + log.info("Request queued") end end @@ -55,6 +53,8 @@ jingles = (playlist(reload_mode="watch", "/home/pi/Conjurer/jingles.playlist")) # Create the main stream with random playlist and jingles s = rotate(id="randomizer", weights=[20, 1], [s4, jingles]) +s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) + # Set up an interactive harbor for controlling the stream interactive.harbor(port = 9999) @@ -66,7 +66,7 @@ s = add([s, b]) # Set up interactive control for main volume a = interactive.float("main_volume", min=0., max=20., 1.) -s = compress.multiband.interactive(bands=3, s) +s = compress.multiband.interactive(bands=7, s) # Apply audio processing effects s = nrj(normalize(s)) @@ -87,14 +87,15 @@ set("log.level", loglevel) set("log.file", log_to_file) set("log.file.path", logpath) + + + + # Set up emergency fallback track emergency = single("/home/pi/RetroPie/mp3/Youtube/Dr. Peacock - Trip to Ireland [GvrvQTUbUcA].mp3") - -# Create a fallback stream with the main stream and emergency track -cross_s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) -radio = fallback(id="switcher2", track_sensitive=false, [cross_s, emergency]) +radio = fallback(id="switcher2", track_sensitive=false, [s, emergency]) # Set up an interactive control for skipping tracks -p = interactive.bool("r1", false) +p = interactive.bool("Skip track", false) # Function to process the request queue and skip the current track if requested def check_skip() @@ -106,7 +107,7 @@ def check_skip() end # Run the queue processing function every 60 seconds -thread.run(every=60., queue_processing) +thread.run(every=5., queue_processing) # Run the check_skip function every 5 seconds From 5967aefda79076d3eae329c3de38118f98867a5a Mon Sep 17 00:00:00 2001 From: Migatu Date: Thu, 25 Apr 2024 15:00:51 +0200 Subject: [PATCH 12/22] Fine tuning --- conjurer_musician/radio_conjurer.liq | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index 078e249..e28e2ce 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -9,12 +9,12 @@ let json.parse credentials = file.contents("/home/pi/Conjurer/icecast_credentia enable_replaygain_metadata() # Set up a playlog for tracking played tracks -l = playlog(duration = 14400.0, persistency="/home/pi/Conjurer/persistence.log") +l = playlog(duration = 72000.0, persistency="/home/pi/Conjurer/persistence.log") # Function to check if a track can be played based on its metadata def check(r) m = request.metadata(r) - if l.last(m) < 3600. then + if l.last(m) < 36000. then log.info("Rejecting #{m['filename']} (played #{l.last(m)}s ago).") false else @@ -51,7 +51,7 @@ s4 = random(id="randomizer", weights=[1, 3, 2], [s1, s2, s3]) jingles = (playlist(reload_mode="watch", "/home/pi/Conjurer/jingles.playlist")) # Create the main stream with random playlist and jingles -s = rotate(id="randomizer", weights=[20, 1], [s4, jingles]) +s = rotate(id="randomizer", weights=[10, 1], [s4, jingles]) s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) @@ -72,6 +72,10 @@ s = compress.multiband.interactive(bands=7, s) s = nrj(normalize(s)) s = amplify(a, s) +#w = interactive.float("wetness", min=0., max=1., 1.) +#s = dry_wet(w,s,s2) + + # Skip blank sections in the stream s = blank.skip(max_blank=2., s) @@ -87,10 +91,6 @@ set("log.level", loglevel) set("log.file", log_to_file) set("log.file.path", logpath) - - - - # Set up emergency fallback track emergency = single("/home/pi/RetroPie/mp3/Youtube/Dr. Peacock - Trip to Ireland [GvrvQTUbUcA].mp3") radio = fallback(id="switcher2", track_sensitive=false, [s, emergency]) From 80f4254ebee8bd8c75362d40f3f1c5816042903a Mon Sep 17 00:00:00 2001 From: Migatu Date: Thu, 25 Apr 2024 21:54:04 +0200 Subject: [PATCH 13/22] Fine tune --- conjurer_musician/radio_conjurer.liq | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index e28e2ce..48de681 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -45,7 +45,7 @@ def queue_processing() end # Randomly select a playlist with weights -s4 = random(id="randomizer", weights=[1, 3, 2], [s1, s2, s3]) +s4 = random(id="randomizer", weights=[1, 3, 5], [s1, s2, s3]) # Load jingles playlist jingles = (playlist(reload_mode="watch", "/home/pi/Conjurer/jingles.playlist")) From 217533c91f23f7ac8c4af579e45b93ae12e69782 Mon Sep 17 00:00:00 2001 From: Migatu Date: Thu, 25 Apr 2024 22:42:52 +0200 Subject: [PATCH 14/22] Add microphone --- conjurer_musician/radio_conjurer.liq | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index 48de681..b9c8472 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -40,7 +40,6 @@ def queue_processing() file.remove("/home/pi/Conjurer/request.playlist") f = file.open("/home/pi/Conjurer/request.playlist", create=true) f.close() - log.info("Request queued") end end @@ -72,6 +71,11 @@ s = compress.multiband.interactive(bands=7, s) s = nrj(normalize(s)) s = amplify(a, s) +mic = buffer(input.alsa()) # Microphone +mic = gate(threshold=-30., range=-80., mic) +mic = blank.strip(max_blank=2., min_noise=.1, threshold=-20., mic) + +s = add([s, mic]) #w = interactive.float("wetness", min=0., max=1., 1.) #s = dry_wet(w,s,s2) From 032cc41c9b97edc61102ff847f2e550c0a7c1b5f Mon Sep 17 00:00:00 2001 From: Migatu Date: Sun, 28 Apr 2024 12:27:29 +0200 Subject: [PATCH 15/22] Fixing memory of Conjurer --- bot.py | 29 ++++++++++++++++++----------- utils/update_memory.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 utils/update_memory.py diff --git a/bot.py b/bot.py index 9dadfad..7186650 100644 --- a/bot.py +++ b/bot.py @@ -1021,26 +1021,33 @@ async def handle_response( logger.info(result) temp = {"role": "assistant", "content": result} history.append(temp) - if request_type: - with open(MEMORY_FIVE_MUZYKA, "r+", encoding=ENCODING) as file: + if request_type == "MUSIC": + with open(MEMORY_FIVE_MUZYKA, "r+", encoding=ENCODING) as file_music_memory: # First we load existing data into a dict. - file_data = json.load(file) + file_data = json.load(file_music_memory) # Join new_data with file_data inside emp_details file_data.append(temp) - # Sets file's current position at offset. - file.seek(0) + file_music_memory.seek(0) # convert back to json. - json.dump(file_data, file, indent=4) + json.dump(file_data, file_music_memory, indent=4) + elif request_type == "RANDOM": + with open(MEMORY_FIVE_SIARA, "r+", encoding=ENCODING) as file_memory: + # First we load existing data into a dict. + file_data = json.load(file_memory) + # Join new_data with file_data inside emp_details + file_data.append(temp) + file_memory.seek(0) + # convert back to json. + json.dump(file_data, file_memory, indent=4) else: - with open(MEMORY_FIVE_SIARA, "r+", encoding=ENCODING) as file: + with open(MEMORY_FIVE_SIARA, "r+", encoding=ENCODING) as file_memory: # First we load existing data into a dict. - file_data = json.load(file) + file_data = json.load(file_memory) # Join new_data with file_data inside emp_details file_data.append(temp) - # Sets file's current position at offset. - file.seek(0) + file_memory.seek(0) # convert back to json. - json.dump(file_data, file, indent=4) + json.dump(file_data, file_memory, indent=4) return result, MESSAGE_TABLE diff --git a/utils/update_memory.py b/utils/update_memory.py new file mode 100644 index 0000000..c310d41 --- /dev/null +++ b/utils/update_memory.py @@ -0,0 +1,33 @@ +import json +MEMORY_FIVE_SIARA = "/home/pi/Conjurer/pamiec.json" +ENCODING = "utf-8" + +messages = [ + {"role": "user", "content" : "Hammer: All systems operational"}, + {"role": "assistant", "content": "Aye, Szefie! Wszystkie systemy działają sprawnie. Gotów do dalszej służby! Co podać?"}, + {"role": "user", "content" : "Hammer: Podaj coś na orzeźwienie i przebudzenie. COś co rozgrzeje moje stare kości po ciężkiej pracy!"}, + {"role": "assistant", "content": "Z przyjemnością Szefie! Dla Ciebie przygotuję Midzynarodówkę Interstelarną Wolf's Dragoon - wysoce energetyczny koktajl rozgrzewający i pobudzający jednocześnie."+ + "Do przygotowania potrzebuję:"+ + "\n"+ + "60 ml mocnego rumu z Wolfa (lub innego, jeśli wolisz)"+ + "30 ml soku z cytryny"+ + "35 ml domowego syropu z mięty"+ + "15 ml świeżo zmielonej kawy"+ + "\n"+ + "Mieszam wszystko w shakerze z lodem, a potem przelewam przez sitko do kieliszka koktajlowego. W górę serwuję z bigoskiem z miętą i zestem z cytryny. Rozgrzewa, orzeźwia i daje kopa na resztę nocy."+ + "\n"+ + "Co powiesz Szefie, podać Ci taki?"}, + {"role": "user", "content" : "Hammer: Brzmi jak coś co zrobi robotę! Skal!"}, +] + + +for temp in messages: + + with open(MEMORY_FIVE_SIARA, "r+", encoding=ENCODING) as file_memory: + # First we load existing data into a dict. + file_data = json.load(file_memory) + # Join new_data with file_data inside emp_details + file_data.append(temp) + file_memory.seek(0) + # convert back to json. + json.dump(file_data, file_memory, indent=4) From 9ba3f1d3edc2903f5848b3b6a281c28bd0dba1d8 Mon Sep 17 00:00:00 2001 From: The Hammer Date: Mon, 29 Apr 2024 17:59:27 +0100 Subject: [PATCH 16/22] Local output --- conjurer_musician/radio_conjurer.liq | 1 + 1 file changed, 1 insertion(+) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index b9c8472..bd98ea0 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -131,6 +131,7 @@ interactive.persistent("script.params") # Configure output formats and destinations output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))], radio) output.icecast(%mp3, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream", radio) +output.pulseaudio(radio) # Uncomment the following lines to enable additional output formats # output.icecast(%opus, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="opus-stream", radio) # output.icecast(%ogg, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="ogg-stream", radio) From 1cbd44c3330d11a1e9489300766d9ef1d37e9cb7 Mon Sep 17 00:00:00 2001 From: Migatu Date: Mon, 29 Apr 2024 21:07:30 +0200 Subject: [PATCH 17/22] Fix --- conjurer_musician/radio_conjurer.liq | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index bd98ea0..bd36cc9 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -9,6 +9,7 @@ let json.parse credentials = file.contents("/home/pi/Conjurer/icecast_credentia enable_replaygain_metadata() # Set up a playlog for tracking played tracks + l = playlog(duration = 72000.0, persistency="/home/pi/Conjurer/persistence.log") # Function to check if a track can be played based on its metadata @@ -52,7 +53,7 @@ jingles = (playlist(reload_mode="watch", "/home/pi/Conjurer/jingles.playlist")) # Create the main stream with random playlist and jingles s = rotate(id="randomizer", weights=[10, 1], [s4, jingles]) -s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) +s = crossfade(fade_out=2., fade_in=2., duration=4., fallback(id="switcher", track_sensitive=false, [requests_queue, s])) # Set up an interactive harbor for controlling the stream interactive.harbor(port = 9999) @@ -71,7 +72,7 @@ s = compress.multiband.interactive(bands=7, s) s = nrj(normalize(s)) s = amplify(a, s) -mic = buffer(input.alsa()) # Microphone +mic = buffer(input.pulseaudio()) # Microphone mic = gate(threshold=-30., range=-80., mic) mic = blank.strip(max_blank=2., min_noise=.1, threshold=-20., mic) @@ -111,19 +112,12 @@ def check_skip() end # Run the queue processing function every 60 seconds -thread.run(every=5., queue_processing) +thread.run(every=60., queue_processing) # Run the check_skip function every 5 seconds -thread.run(every=5., check_skip) +thread.run(every=15., check_skip) -# Handle metadata events -handle_metadata = fun (m) -> begin - log.info(m["title"]) - log.info(m["artist"]) - log.info(m["filename"]) -end -radio.on_metadata(handle_metadata) # Enable persistent script parameters interactive.persistent("script.params") From f1cc24cc06996249b01fe9ce9723459b837f4f12 Mon Sep 17 00:00:00 2001 From: Migatu Date: Mon, 29 Apr 2024 21:12:41 +0200 Subject: [PATCH 18/22] Fx --- conjurer_musician/radio_conjurer.liq | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index bd36cc9..f53f66e 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -123,9 +123,10 @@ thread.run(every=15., check_skip) interactive.persistent("script.params") # Configure output formats and destinations -output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))], radio) + output.icecast(%mp3, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream", radio) output.pulseaudio(radio) +#output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))], radio) # Uncomment the following lines to enable additional output formats # output.icecast(%opus, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="opus-stream", radio) # output.icecast(%ogg, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="ogg-stream", radio) From 848668b8ed04ee54b1751c5dd369eba2f8e996a2 Mon Sep 17 00:00:00 2001 From: Migatu Date: Mon, 29 Apr 2024 21:15:15 +0200 Subject: [PATCH 19/22] Fine tuning --- conjurer_musician/radio_conjurer.liq | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index f53f66e..dbd8695 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -88,7 +88,7 @@ s = blank.skip(max_blank=2., s) log_to_stdout = true log_to_file = true logpath = "/home/pi/Conjurer/radio_log.log" -loglevel = 4 +loglevel = 3 set("log.stdout", log_to_stdout) set("log.level", loglevel) From f3b03827e2edd1f791402fd75de05fedcf70c8bb Mon Sep 17 00:00:00 2001 From: Migatu Date: Sat, 18 May 2024 12:45:18 +0200 Subject: [PATCH 20/22] Adding script logging current tracks in queue --- conjurer_musician/music_utils.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 conjurer_musician/music_utils.py diff --git a/conjurer_musician/music_utils.py b/conjurer_musician/music_utils.py new file mode 100644 index 0000000..7ea171e --- /dev/null +++ b/conjurer_musician/music_utils.py @@ -0,0 +1,26 @@ +# This Python file uses the following encoding: utf-8 +"""This module contains utility scripts used by musi radiostation Conjurer""" +import time +import re + +NAME = "/home/pi/Conjurer/persistence.log" + +def print_top(): + """ + Prints the top 65 lines from a file specified by the NAME variable. + """ + while True: + line = "" + buffer = "" + with open(NAME, "r", encoding="utf-8") as f: + for _ in range (65): + line = f.readline() + if re.match("", line): + buffer += line + print("=====================================") + print(buffer) + print("=====================================") + time.sleep(180) + +if __name__ == "__main__": + print_top() From 3684003150175fe01dd18ac8343c47f193ae0c5a Mon Sep 17 00:00:00 2001 From: Migatu Date: Sat, 18 May 2024 12:50:49 +0200 Subject: [PATCH 21/22] Fine tune --- conjurer_musician/music_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conjurer_musician/music_utils.py b/conjurer_musician/music_utils.py index 7ea171e..817b880 100644 --- a/conjurer_musician/music_utils.py +++ b/conjurer_musician/music_utils.py @@ -13,9 +13,9 @@ def print_top(): line = "" buffer = "" with open(NAME, "r", encoding="utf-8") as f: - for _ in range (65): + for _ in range (45): line = f.readline() - if re.match("", line): + if re.match(".*mp3", line): buffer += line print("=====================================") print(buffer) From 8a99ee7c99ddb86372a5332e4527e15c6c41c050 Mon Sep 17 00:00:00 2001 From: Migatu Date: Tue, 21 May 2024 16:18:05 +0200 Subject: [PATCH 22/22] Gpt4o --- bot.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bot.py b/bot.py index 7186650..1789781 100644 --- a/bot.py +++ b/bot.py @@ -929,17 +929,17 @@ async def handle_response( "Rozmiar zapytania przed dodaniem historii %s", chat_gpt_config_request_size ) if request_type == "MUSIC": - algorithm = "gpt-3.5-turbo-0125" + algorithm = "gpt-4o" table = message_table_muzyka token_amount = 10700 elif request_type == "RANDOM": - algorithm = "gpt-3.5-turbo-0125" + algorithm = "gpt-4o" table = MESSAGE_TABLE token_amount = 10700 else: table = MESSAGE_TABLE - algorithm = "gpt-4" - token_amount = 7000 + algorithm = "gpt-4o" + token_amount = 10700 prompt_gpt_request_size = num_tokens_from_string( {"role": "user", "content": final_prompt}, "gpt-4"