From 534297bd97cb7951526d93a267a2e1b3f3866ad4 Mon Sep 17 00:00:00 2001 From: Moonbase59 Date: Tue, 11 Jun 2024 10:14:37 +0200 Subject: [PATCH] =?UTF-8?q?v2.2.1=20=E2=80=93=20Add=20use=5Fjson=5Fmetadat?= =?UTF-8?q?a=20switch=20(default:=20true)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 12 +++++++ autocue.cue_file.liq | 70 +++++++++++++++++++++++++-------------- cue_file | 3 +- test_autocue.cue_file.liq | 1 + 4 files changed, 60 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fa5c5a..af4c98c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # autocue changelog +### 2024-06-11 – v2.2.1 + +- Make JSON override switchable (`settings.autocue.cue_file.use_json_metadata`). + Defaults to `true`. +- Minor code cleanup (thanks @vitoyucepi). + +### 2024-06-11 – v2.2.0 (internal, unreleased) + +- JSON override tags for cue_file in temp file: + Allows passing annotate/database overrides to cue_file, + to reduce re-analysis runs even more. + ### 2024-06-09 – v2.1.0 - Prepare for third-party pre-processing software: diff --git a/autocue.cue_file.liq b/autocue.cue_file.liq index 07ab790..5d0da75 100644 --- a/autocue.cue_file.liq +++ b/autocue.cue_file.liq @@ -22,6 +22,7 @@ # 2024-06-11 - Moonbase59 - v2.2.0 JSON override tags for cue_file in temp file: # Allows passing annotate/database overrides to # cue_file, to reduce re-analysis runs even more. +# 2024-06-11 - Moonbase59 - v2.2.1 Make JSON override switchable # Lots of debugging output for AzuraCast in this, will be removed eventually. @@ -35,7 +36,7 @@ let settings.autocue.cue_file.version = settings.make( description= "Software version of autocue.cue_file. Should coincide with `cue_file`.", - "2.2.0" + "2.2.1" ) let settings.autocue.cue_file.path = @@ -158,6 +159,15 @@ let settings.autocue.cue_file.nice = false ) +let settings.autocue.cue_file.use_json_metadata = + settings.make( + description= + 'Send metadata to `cue_file` as JSON, allowing to override/add to \ + autocue-relevant metadata stored in file tags. This can help to avoid \ + unnecessary re-analysis runs.', + true + ) + stdlib_metadata = metadata # metadata.json.stringify only exports a limited set, use our own @@ -187,6 +197,7 @@ def cue_file(~request_metadata, ~file_metadata, filename) = force_analysis = settings.autocue.cue_file.force_analysis() nice = settings.autocue.cue_file.nice() noclip = settings.autocue.cue_file.noclip() + use_json_metadata = settings.autocue.cue_file.use_json_metadata() label = "autocue.cue_file" @@ -302,20 +313,23 @@ def cue_file(~request_metadata, ~file_metadata, filename) = if force_analysis then args := list.add('-f', args()) end if nice then args := list.add('-n', args()) end - # write metadata to temp file for cue_file to pick up - tempfile = file.temp("cue_file", ".json") - json_meta = meta_json_stringify(compact=true, meta) - log(level=4, label=label, "#{tempfile}: #{json_meta}") - file.write( - data=json_meta, - append=true, - tempfile - ) - args := ['-j', tempfile, ...args()] + tempfile = ref("") + if use_json_metadata then + # write metadata to temp file for cue_file to pick up + tempfile := file.temp("cue_file", ".json") + json_meta = meta_json_stringify(compact=true, meta) + log(level=4, label=label, "Writing metadata to #{tempfile()}: #{json_meta}") + log(level=3, label=label, "Writing metadata to #{tempfile()}") + file.write( + data=json_meta, + append=true, + tempfile() + ) + args := ['-j', tempfile(), ...args()] + end - res = ref("") - try - res := + res = + try list.hd( default="", process.read.lines( @@ -323,23 +337,28 @@ def cue_file(~request_metadata, ~file_metadata, filename) = process.quote.command(settings.autocue.cue_file.path(), args=args()) ) ) - catch err do - log( - level=2, - label=label, - 'cue_file error: #{err}' - ) - res := "" + catch err do + log( + level=2, + label=label, + 'cue_file error: #{err}' + ) + "" + end + + if use_json_metadata then + # remove tempfile again + log(level=4, label=label, "Removing #{tempfile()}") + file.remove(tempfile()) end - file.remove(tempfile) if - res() != "" + res != "" then log( level=3, label=label, - 'cue_file result for "#{filename}": #{res()}' + 'cue_file result for "#{filename}": #{res}' ) let json.parse ( @@ -380,7 +399,7 @@ def cue_file(~request_metadata, ~file_metadata, filename) = liq_true_peak: float, liq_true_peak_db: string } - ) = res() + ) = res # must stringify, because metadata & annotations are strings result = ref( @@ -742,6 +761,7 @@ log(level=2, label="autocue.cue_file", # settings.autocue.cue_file.write_replaygain := false # write ReplayGain tags back to file # settings.autocue.cue_file.force_analysis := false # force re-analysis even if tags found # settings.autocue.cue_file.nice := false # Linux/MacOS only: Use NI=18 for analysis +# settings.autocue.cue_file.use_json_metadata := true # pass metadata to `cue_file` as JSON # `enable_autocue_metadata()` will autocue ALL files Liquidsoap processes. # You can disable it for selected sources using 'annotate:liq_cue_file=false'. diff --git a/cue_file b/cue_file index 417b786..c042ce8 100755 --- a/cue_file +++ b/cue_file @@ -39,12 +39,13 @@ # - Add `liq_fade_in` & `liq_fade_out` tags for reading/writing, # in case a preprocessor needs to set fade durations. # 2024-06-11 Moonbase59 - v2.2.0 Sync version numver with autocue.cue_file +# 2024-06-11 Moonbase59 - v2.2.1 Sync version number with autocue.cue_file # # Originally based on an idea and some code by John Warburton (@Warblefly): # https://github.com/Warblefly/TrackBoundaries __author__ = 'Matthias C. Hormann' -__version__ = '2.2.0' +__version__ = '2.2.1' import os import tempfile diff --git a/test_autocue.cue_file.liq b/test_autocue.cue_file.liq index 6e7159e..1d4f881 100644 --- a/test_autocue.cue_file.liq +++ b/test_autocue.cue_file.liq @@ -46,6 +46,7 @@ settings.autocue.cue_file.blankskip := true # settings.autocue.cue_file.write_replaygain := true # testing # settings.autocue.cue_file.force_analysis := true # testing settings.autocue.cue_file.nice := true # Linux/MacOS only! +# settings.autocue.cue_file.use_json_metadata := true # pass metadata to `cue_file` as JSON # `enable_autocue_metadata()` will autocue ALL files Liquidsoap processes. # You can disable it for selected sources using 'annotate:liq_cue_file=false'.