From 4d8218003df9fc85f7bcebe50b9fe4b2ecbe1c3d Mon Sep 17 00:00:00 2001 From: Migatu Date: Mon, 22 Apr 2024 12:56:15 +0200 Subject: [PATCH] Testing of new functions in conjurer_musician.py and radio_conjurer.liq --- conjurer_musician/conjurer_musician.py | 44 +++++-- conjurer_musician/radio_conjurer.liq | 158 +++++++++++++++++-------- 2 files changed, 137 insertions(+), 65 deletions(-) diff --git a/conjurer_musician/conjurer_musician.py b/conjurer_musician/conjurer_musician.py index fc0742e..408d684 100644 --- a/conjurer_musician/conjurer_musician.py +++ b/conjurer_musician/conjurer_musician.py @@ -238,13 +238,6 @@ def wyszukaj(word_list, how_many, _logger=None, return_to_bot=True): fun_logger.info("Wiele plików do zagrania") search_weight.sort(key=lambda x: x[0], reverse=True) return_list.extend(search_weight[: int(how_many)]) - if not return_to_bot: - - with open( - "/home/pi/Conjurer/priority_queue.playlist", "a", encoding="utf-8" - ) as s_file: - for item in return_list: - s_file.write(item[1] + "\n") return return_list @@ -386,16 +379,37 @@ def look_for_playlist(): return return_data +@app.route("/request_radio_file", methods=["POST"]) +def add_request(): + record = json.loads(request.data) + app.logger.info(record) + app.logger.info(record["lista_slow"]) + app.logger.info(record["UUID"]) + app.logger.info(record["dlugosc_plejlisty"]) + return_data = wyszukaj( + record["lista_slow"], 0, app.logger, False + ) + + #push to queue item[1] + return_data = ( + jsonify(isError=False, message="Success", statusCode=200, data={"status": "OK"}), + 200, + ) + return return_data + + @app.route("/add_to_priority", methods=["POST"]) def add_to_priority(): """ The function `add_to_priority` receives a POST request with a JSON payload, logs the received item, adds it to a music file list, and returns a success message along with the updated record. - :return: A tuple containing a JSON response and a status code. The JSON response includes keys `isError`, - `message`, `statusCode`, and `data`, with values indicating the success of the operation and the - data that was received and added to the `music_file_list`. The status code returned is 200, - indicating a successful response. + :return: A tuple containing a JSON response and a status code. + The JSON response includes keys `isError`, + `message`, `statusCode`, and `data`, with values + indicating the success of the operation and the + data that was received and added to the `music_file_list`. + The status code returned is 200,indicating a successful response. """ record = json.loads(request.data) app.logger.info(record) @@ -405,9 +419,13 @@ def add_to_priority(): return_data = wyszukaj( record["lista_slow"], record["dlugosc_plejlisty"], app.logger, False ) - + with open( + "/home/pi/Conjurer/priority_queue.playlist", "a", encoding="utf-8" + ) as s_file: + for item in return_data: + s_file.write(item[1] + "\n") return_data = ( - jsonify(isError=False, message="Success", statusCode=200, data=return_data), + jsonify(isError=False, message="Success", statusCode=200, data={"status": "OK"}), 200, ) return return_data diff --git a/conjurer_musician/radio_conjurer.liq b/conjurer_musician/radio_conjurer.liq index 4d0d000..72bd251 100644 --- a/conjurer_musician/radio_conjurer.liq +++ b/conjurer_musician/radio_conjurer.liq @@ -5,69 +5,123 @@ # 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() + # Enable replaygain metadata processing + enable_replaygain_metadata() -# Define playlists to be used in the stream -s1 = replaygain(playlist(reload_mode="watch", "/home/pi/Conjurer/all_playlist.playlist")) -s2 = replaygain(playlist(reload_mode="watch", "/home/pi/Conjurer/priority_queue.playlist")) -s3 = replaygain(playlist(reload_mode="watch", "/home/pi/Conjurer/hit.playlist")) + # Define playlists to be used in the stream + s1 = replaygain(playlist(reload_mode="watch", "/home/pi/Conjurer/all_playlist.playlist")) + s2 = replaygain(playlist(reload_mode="watch", "/home/pi/Conjurer/priority_queue.playlist")) + s3 = replaygain(playlist(reload_mode="watch", "/home/pi/Conjurer/hit.playlist")) + requests_queue = request.queue() -requests_queue = request.queue() + # 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) -# Randomly select a playlist with weights -s = 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) -# Set up an interactive harbor for controlling the stream -interactive.harbor(port = 9999) + # Apply audio processing effects + s = nrj(normalize(s)) + s = crossfade(fade_out=3., fade_in=3., duration=5., s) + s = amplify(a, 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.) -b = bass_boost(frequency=f, gain=g, s) -s = add([s, b]) + # Skip blank sections in the stream + s = blank.skip(max_blank=2., s) -# Set up interactive control for main volume -a = interactive.float("main_volume", min=0., max=20., 1.) -s = compress.multiband.interactive(bands=3, s) + l = playlog() + l.duration = 14400 + l.persistency = "/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 + end -# Apply audio processing effects -s = nrj(normalize(s)) -s = crossfade(fade_out=3., fade_in=3., duration=5., s) -s = amplify(a, s) -# Skip blank sections in the stream -s = blank.skip(max_blank=2., s) + # 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) -# 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) + # Enable logging to file + set("log.file", log_to_file) + set("log.file.path", logpath) -# 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") -# 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 + radio = fallback(id="switcher", check_next=check, track_sensitive=true, [requests_queue, s, emergency]) -# Create a fallback stream with the main stream and emergency track -radio = fallback(id="switcher", track_sensitive=false, [requests_queue, s, emergency]) + # 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) -# 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") -# 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) + # 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)