savonet / liquidsoap

Liquidsoap is a statically typed scripting general-purpose language with dedicated operators and backend for all thing media, streaming, file generation, automation, HTTP backend and more.
http://liquidsoap.info
GNU General Public License v2.0
1.4k stars 130 forks source link

Not work rotate in version 2.0.3 #2300

Closed spy-reality closed 2 years ago

spy-reality commented 2 years ago

Describe the bug

03:27:52 >>> LOG START
03:27:50 [main:3] Liquidsoap 2.0.3
03:27:50 [main:3] Using: bytes=[distributed with OCaml 4.02 or above] pcre=7.5.0 sedlex=2.5 menhirLib=20211128 curl=0.9.2 dtools=0.4.4 duppy=0.9.2 cry=0.6.7 mm=0.7.4 ogg=0.7.1 ogg.decoder=0.7.1 vorbis=0.8.0 vorbis.decoder=0.8.0 mad=0.5.2 dynlink=[distributed with Ocaml] lame=0.3.5 fdkaac=0.3.2 ffmpeg=1.1.2 samplerate=0.1.6 taglib=0.3.9 camomile=1.0.2
03:27:50 [clock:3] Using builtin (low-precision) implementation for latency control
03:27:52 [data:4] Reloading playlist.
03:27:52 [data:4] Playlist is a directory.
03:27:52 [data:4] Reloading playlist.
03:27:52 [data:4] Playlist is a directory.
03:27:52 [server:2] Server command data.skip already registered! Previous definition replaced.
03:27:52 [server:2] Server command data.next already registered! Previous definition replaced.
03:27:52 [server:2] Server command data.reload already registered! Previous definition replaced.
03:27:52 [server:2] Server command data.uri already registered! Previous definition replaced.
03:27:52 [data:4] Reloading playlist.
03:27:52 [data:4] Playlist is a directory.
03:27:52 [server:2] Server command data.skip already registered! Previous definition replaced.
03:27:52 [server:2] Server command data.next already registered! Previous definition replaced.
03:27:52 [server:2] Server command data.reload already registered! Previous definition replaced.
03:27:52 [server:2] Server command data.uri already registered! Previous definition replaced.
03:27:52 [data:4] Reloading playlist.
03:27:52 [data:4] Playlist is a directory.
03:27:52 [server:2] Server command data.skip already registered! Previous definition replaced.
03:27:52 [server:2] Server command data.next already registered! Previous definition replaced.
03:27:52 [server:2] Server command data.reload already registered! Previous definition replaced.
03:27:52 [server:2] Server command data.uri already registered! Previous definition replaced.
03:27:52 [music:4] Reloading playlist.
03:27:52 [music:4] Playlist is a directory.
03:27:52 [jingles:4] Reloading playlist.
03:27:52 [jingles:4] Playlist is a directory.
03:27:52 [jingles:4] Reloading playlist.
03:27:52 [jingles:4] Playlist is a directory.
03:27:52 [server:2] Server command jingles.skip already registered! Previous definition replaced.
03:27:52 [server:2] Server command jingles.next already registered! Previous definition replaced.
03:27:52 [server:2] Server command jingles.reload already registered! Previous definition replaced.
03:27:52 [server:2] Server command jingles.uri already registered! Previous definition replaced.
03:27:52 [jingles:4] Reloading playlist.
03:27:52 [jingles:4] Playlist is a directory.
03:27:52 [server:2] Server command jingles.skip already registered! Previous definition replaced.
03:27:52 [server:2] Server command jingles.next already registered! Previous definition replaced.
03:27:52 [server:2] Server command jingles.reload already registered! Previous definition replaced.
03:27:52 [server:2] Server command jingles.uri already registered! Previous definition replaced.
03:27:52 [jingles:4] Reloading playlist.
03:27:52 [jingles:4] Playlist is a directory.
03:27:52 [server:2] Server command jingles.skip already registered! Previous definition replaced.
03:27:52 [server:2] Server command jingles.next already registered! Previous definition replaced.
03:27:52 [server:2] Server command jingles.reload already registered! Previous definition replaced.
03:27:52 [server:2] Server command jingles.uri already registered! Previous definition replaced.
03:27:52 [1_prog:4] Reloading playlist.
03:27:52 [1_prog:4] Playlist is a directory.
03:27:52 [message:4] Reloading playlist.
03:27:52 [message:4] Playlist is a directory.
03:27:52 [frame:4] frame.audio.samplerate set to: 44100
03:27:52 [frame:4] frame.video.framerate set to: 25
03:27:52 [frame:4] frame.audio.channels set to: 2
03:27:52 [frame:4] frame.video.default set to: false
03:27:52 [frame:4] frame.midi.channels set to: 0
03:27:52 [frame:4] frame.video.width set to: 1280
03:27:52 [frame:4] frame.video.height set to: 720
03:27:52 [frame:4] frame.audio.samplerate set to: 44100
03:27:52 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz main.
03:27:52 [frame:3] Video frame size set to: 1280x720
03:27:52 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
03:27:52 [frame:3] Targeting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
03:27:52 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
03:27:52 [sandbox:3] Sandboxing disabled
03:27:52 [video.converter:3] Using preferred video converter: ffmpeg.
03:27:52 [audio.converter:3] Using samplerate converter: ffmpeg.
03:27:52 [lifecycle:5] At stage: "Liquidsoap application start"
03:27:52 [clock:4] Currently 1 clocks allocated.
03:27:52 [clock.main:4] Starting 2 sources...
03:27:52 [source:4] Source input.harbor_0 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [input.harbor_0:5] Clock is main[].
03:27:52 [input.harbor_0:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [input.harbor_0:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [harbor:4] Opening port 9999 with icy = false
03:27:52 [harbor:3] Adding mountpoint '/live192' on port 9999
03:27:52 [input.harbor_0:5] Activations changed: static=[input.harbor_0], dynamic=[].
03:27:52 [input.harbor_0:5] Enabling caching mode: active source.
03:27:52 [source:4] Source output.icecast_0 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [RADIO:5] Clock is main[].
03:27:52 [RADIO:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [RADIO:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source mksafe gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source mksafe gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_15 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source map_metadata_6 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [map_metadata_6:5] Clock is main[].
03:27:52 [map_metadata_6:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [map_metadata_6:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [input.harbor_0:5] Activations changed: static=[map_metadata_6:switch_15:mksafe:mksafe:RADIO:RADIO, input.harbor_0], dynamic=[].
03:27:52 [map_metadata_6:5] Activations changed: static=[], dynamic=[switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source map_metadata_5 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [map_metadata_5:5] Clock is main[].
03:27:52 [map_metadata_5:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [map_metadata_5:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_14 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source sequence_0 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source prog1 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [prog1:5] Clock is main[].
03:27:52 [prog1:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [prog1:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source 1_prog gets up with content kind: {audio=pcm,video=none,midi=none}.
03:27:52 [1_prog:5] Clock is main[].
03:27:52 [1_prog:5] Content kind: {audio=pcm,video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [1_prog:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [1_prog:5] Activations changed: static=[prog1:sequence_0:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [prog1:5] Activations changed: static=[sequence_0:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [source:4] Source source.fail_7 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source.fail_7:5] Clock is main[].
03:27:52 [source.fail_7:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [source.fail_7:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source.fail_7:5] Activations changed: static=[sequence_0:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [sequence_0:5] Activations changed: static=[], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source switch_11 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_10 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_7 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_6 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source data gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [data:5] Clock is main[].
03:27:52 [data:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [data:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [data:5] Activations changed: static=[], dynamic=[switch_6:switch_7:switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source map_metadata_4 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [map_metadata_4:5] Clock is main[].
03:27:52 [map_metadata_4:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [map_metadata_4:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source jingles gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [jingles:5] Clock is main[].
03:27:52 [jingles:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [jingles:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [jingles:5] Activations changed: static=[map_metadata_4:switch_6:switch_7:switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [map_metadata_4:5] Activations changed: static=[], dynamic=[switch_6:switch_7:switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_6:5] Activations changed: static=[], dynamic=[switch_7:switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [data:5] Activations changed: static=[], dynamic=[switch_7:switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_6:switch_7:switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [map_metadata_4:5] Activations changed: static=[], dynamic=[switch_7:switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_6:switch_7:switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_7:5] Activations changed: static=[], dynamic=[switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source map_metadata_0 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [map_metadata_0:5] Clock is main[].
03:27:52 [map_metadata_0:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [map_metadata_0:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source music gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [music:5] Clock is main[].
03:27:52 [music:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [music:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [music:5] Activations changed: static=[map_metadata_0:switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [map_metadata_0:5] Activations changed: static=[], dynamic=[switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_10:5] Activations changed: static=[], dynamic=[switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_7:5] Activations changed: static=[], dynamic=[switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [map_metadata_0:5] Activations changed: static=[], dynamic=[switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_11:5] Activations changed: static=[], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source sequence_1 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source message gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [message:5] Clock is main[].
03:27:52 [message:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [message:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [message:5] Activations changed: static=[sequence_1:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [source:4] Source source.fail_8 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source.fail_8:5] Clock is main[].
03:27:52 [source.fail_8:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [source.fail_8:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source.fail_8:5] Activations changed: static=[sequence_1:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [sequence_1:5] Activations changed: static=[], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source sequence_2 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [message:5] Activations changed: static=[sequence_2:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, sequence_1:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [message:5] Enabling caching mode: two static activations.
03:27:52 [source:4] Source source.fail_9 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source.fail_9:5] Clock is main[].
03:27:52 [source.fail_9:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [source.fail_9:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source.fail_9:5] Activations changed: static=[sequence_2:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [sequence_2:5] Activations changed: static=[], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source sequence_3 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [message:5] Activations changed: static=[sequence_3:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, sequence_2:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, sequence_1:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [source:4] Source source.fail_10 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source.fail_10:5] Clock is main[].
03:27:52 [source.fail_10:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [source.fail_10:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source.fail_10:5] Activations changed: static=[sequence_3:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [sequence_3:5] Activations changed: static=[], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source switch_13 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_12 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_1 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_0 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source data gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [data:5] Clock is main[].
03:27:52 [data:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [data:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [data:5] Activations changed: static=[], dynamic=[switch_0:switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source map_metadata_1 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [map_metadata_1:5] Clock is main[].
03:27:52 [map_metadata_1:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [map_metadata_1:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source jingles gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [jingles:5] Clock is main[].
03:27:52 [jingles:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [jingles:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [jingles:5] Activations changed: static=[map_metadata_1:switch_0:switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [map_metadata_1:5] Activations changed: static=[], dynamic=[switch_0:switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_0:5] Activations changed: static=[], dynamic=[switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [data:5] Activations changed: static=[], dynamic=[switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_0:switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [map_metadata_1:5] Activations changed: static=[], dynamic=[switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_0:switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_1:5] Activations changed: static=[], dynamic=[switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [map_metadata_0:5] Activations changed: static=[], dynamic=[switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_12:5] Activations changed: static=[], dynamic=[switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_1:5] Activations changed: static=[], dynamic=[switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [map_metadata_0:5] Activations changed: static=[], dynamic=[switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_13:5] Activations changed: static=[], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_11:5] Activations changed: static=[], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source switch_3 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_2 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source data gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [data:5] Clock is main[].
03:27:52 [data:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [data:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [data:5] Activations changed: static=[], dynamic=[switch_2:switch_3:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source map_metadata_2 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [map_metadata_2:5] Clock is main[].
03:27:52 [map_metadata_2:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [map_metadata_2:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source jingles gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [jingles:5] Clock is main[].
03:27:52 [jingles:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [jingles:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [jingles:5] Activations changed: static=[map_metadata_2:switch_2:switch_3:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [map_metadata_2:5] Activations changed: static=[], dynamic=[switch_2:switch_3:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_2:5] Activations changed: static=[], dynamic=[switch_3:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [data:5] Activations changed: static=[], dynamic=[switch_3:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_2:switch_3:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [map_metadata_2:5] Activations changed: static=[], dynamic=[switch_3:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_2:switch_3:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_3:5] Activations changed: static=[], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source switch_9 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_8 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_5 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source switch_4 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source data gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [data:5] Clock is main[].
03:27:52 [data:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [data:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [data:5] Activations changed: static=[], dynamic=[switch_4:switch_5:switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source map_metadata_3 gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [map_metadata_3:5] Clock is main[].
03:27:52 [map_metadata_3:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [map_metadata_3:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [source:4] Source jingles gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [jingles:5] Clock is main[].
03:27:52 [jingles:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [jingles:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [jingles:5] Activations changed: static=[map_metadata_3:switch_4:switch_5:switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [map_metadata_3:5] Activations changed: static=[], dynamic=[switch_4:switch_5:switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_4:5] Activations changed: static=[], dynamic=[switch_5:switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [data:5] Activations changed: static=[], dynamic=[switch_5:switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_4:switch_5:switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [map_metadata_3:5] Activations changed: static=[], dynamic=[switch_5:switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_4:switch_5:switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_5:5] Activations changed: static=[], dynamic=[switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [map_metadata_0:5] Activations changed: static=[], dynamic=[switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_8:5] Activations changed: static=[], dynamic=[switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_5:5] Activations changed: static=[], dynamic=[switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [map_metadata_0:5] Activations changed: static=[], dynamic=[switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_8:switch_9:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_10:switch_11:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_9:5] Activations changed: static=[], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_11:5] Activations changed: static=[], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_14:5] Activations changed: static=[map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[].
03:27:52 [map_metadata_5:5] Activations changed: static=[], dynamic=[switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_15:5] Activations changed: static=[], dynamic=[mksafe:mksafe:RADIO:RADIO].
03:27:52 [source:4] Source safe_blank gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [safe_blank:5] Clock is main[].
03:27:52 [safe_blank:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [safe_blank:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [safe_blank:5] Activations changed: static=[], dynamic=[mksafe:mksafe:RADIO:RADIO].
03:27:52 [mksafe:5] Activations changed: static=[], dynamic=[mksafe:RADIO:RADIO].
03:27:52 [source:4] Source safe_blank gets up with content kind: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [safe_blank:5] Clock is main[].
03:27:52 [safe_blank:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [safe_blank:4] Content type is {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [safe_blank:5] Activations changed: static=[], dynamic=[mksafe:RADIO:RADIO].
03:27:52 [mksafe:5] Activations changed: static=[RADIO:RADIO], dynamic=[].
03:27:52 [input.harbor_0:5] Not ready: need more buffering (0/88200).
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [music:5] Queue is empty!
03:27:52 [music:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [music:5] Queue is empty!
03:27:52 [music:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [music:5] Queue is empty!
03:27:52 [music:5] Failed to prepare track: no file.
03:27:52 [RADIO:3] Connecting mount test for source@127.0.0.1...
03:27:52 [RADIO:3] Connection setup was successful.
03:27:52 [RADIO:5] Activations changed: static=[RADIO], dynamic=[].
03:27:52 [RADIO:5] Enabling caching mode: active source.
03:27:52 [threads:4] Created thread "clock_main" (1 total).
03:27:52 [clock:4] Main phase starts.
03:27:52 [threads:4] Created thread "generic queue #1" (1 total).
03:27:52 [threads:4] Created thread "generic queue #2" (2 total).
03:27:52 [threads:4] Created thread "non-blocking queue #1" (3 total).
03:27:52 [threads:4] Created thread "non-blocking queue #2" (4 total).
03:27:52 [clock.main:3] Streaming loop starts in auto-sync mode
03:27:52 [clock.main:3] Delegating synchronisation to CPU clock
03:27:52 [1_prog:5] Next song will be "/programs/1_prog/Program.mp3".
03:27:52 [request:5] Resolving request [[/programs/1_prog/Program.mp3]].
03:27:52 [data:5] Next song will be "/evening/data/Music1.mp3".
03:27:52 [request:5] Resolving request [[/evening/data/Music1.mp3]].
03:27:52 [decoder.ogg:4] Unsupported file extension for "/evening/data/Music1.mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/evening/data/Music1.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/evening/data/Music1.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [decoder.ogg:4] Unsupported file extension for "/programs/1_prog/Program.mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/programs/1_prog/Program.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/programs/1_prog/Program.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /programs/1_prog/Program.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/programs/1_prog/Program.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [decoder.ogg:4] Unsupported file extension for "/programs/1_prog/Program.mp3"!
03:27:52 [request:5] Resolved to [[/programs/1_prog/Program.mp3]].
03:27:52 [request:5] Resolving request [[/programs/1_prog/Program.mp3]].
03:27:52 [request:5] Resolved to [[/programs/1_prog/Program.mp3]].
03:27:52 [1_prog:4] Queued 1 requests
03:27:52 [jingles:5] Next song will be "/evening/jingles/Jingle 9 2022.mp3".
03:27:52 [request:5] Resolving request [[/evening/jingles/Jingle 9 2022.mp3]].
03:27:52 [decoder.ogg:4] Unsupported file extension for "/evening/jingles/Jingle 9 2022.mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/evening/jingles/Jingle 9 2022.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/evening/jingles/Jingle 9 2022.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /evening/data/Music1.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)}, video: {codec: png, 150x150, rgba} and content-type: {audio=pcm(stereo),video=yuva420p,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/evening/data/Music1.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=yuva420p,midi=none}
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /evening/jingles/Jingle 9 2022.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/evening/jingles/Jingle 9 2022.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [decoder.ogg:4] Unsupported file extension for "/evening/jingles/Jingle 9 2022.mp3"!
03:27:52 [request:5] Resolved to [[/evening/jingles/Jingle 9 2022.mp3]].
03:27:52 [request:5] Resolving request [[/evening/jingles/Jingle 9 2022.mp3]].
03:27:52 [request:5] Resolved to [[/evening/jingles/Jingle 9 2022.mp3]].
03:27:52 [jingles:4] Queued 1 requests
03:27:52 [music:5] Next song will be "/new/music/Music2.mp3".
03:27:52 [request:5] Resolving request [[/new/music/Music2.mp3]].
03:27:52 [decoder.ogg:4] Unsupported file extension for "/new/music/Music2.mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/new/music/Music2.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/new/music/Music2.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [decoder.ogg:4] Unsupported file extension for "/evening/data/Music1.mp3"!
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /new/music/Music2.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/new/music/Music2.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [decoder.ogg:4] Unsupported file extension for "/new/music/Music2.mp3"!
03:27:52 [mksafe:3] Switch to mksafe.
03:27:52 [mksafe:5] Activations changed: static=[mksafe:RADIO:RADIO], dynamic=[mksafe:RADIO:RADIO].
03:27:52 [mksafe:3] Switch to safe_blank.
03:27:52 [safe_blank:5] Activations changed: static=[mksafe:mksafe:RADIO:RADIO], dynamic=[mksafe:mksafe:RADIO:RADIO].
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [music:5] Queue is empty!
03:27:52 [music:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [music:5] Queue is empty!
03:27:52 [music:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [music:5] Queue is empty!
03:27:52 [music:5] Failed to prepare track: no file.
03:27:52 [request:5] Resolved to [[/evening/data/Music1.mp3]].
03:27:52 [request:5] Resolving request [[/evening/data/Music1.mp3]].
03:27:52 [request:5] Resolved to [[/evening/data/Music1.mp3]].
03:27:52 [data:4] Queued 1 requests
03:27:52 [mksafe:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [mksafe:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_15:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_14:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [sequence_0:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_11:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_10:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_7:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_6:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [sequence_1:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [sequence_2:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [sequence_3:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_13:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_12:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_1:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_0:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_3:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_2:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [message:5] Next song will be "/programs/message/Spontaneous Instrumental Worship - Jireh.mp3".
03:27:52 [request:5] Resolving request [[/programs/message/Spontaneous Instrumental Worship - Jireh.mp3]].
03:27:52 [decoder.ogg:4] Unsupported file extension for "/programs/message/Spontaneous Instrumental Worship - Jireh.mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/programs/message/Spontaneous Instrumental Worship - Jireh.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/programs/message/Spontaneous Instrumental Worship - Jireh.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [switch_9:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_8:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_5:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_4:5] Content kind: {audio=pcm(stereo),video=none,midi=none}, content type: {audio=pcm(stereo),video=none,midi=none}
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [music:5] Queue is empty!
03:27:52 [request:5] Resolved to [[/new/music/Music2.mp3]].
03:27:52 [music:5] Failed to prepare track: no file.
03:27:52 [request:5] Resolving request [[/new/music/Music2.mp3]].
03:27:52 [request:5] Resolved to [[/new/music/Music2.mp3]].
03:27:52 [music:4] Queued 1 requests
03:27:52 [data:5] Next song will be "/evening/data/Music3.mp3".
03:27:52 [request:5] Resolving request [[/evening/data/Music3.mp3]].
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /programs/message/Spontaneous Instrumental Worship - Jireh.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/programs/message/Spontaneous Instrumental Worship - Jireh.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [data:5] Queue is empty!
03:27:52 [decoder.ogg:4] Unsupported file extension for "/evening/data/Music3.mp3"!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [decoder.aiff:4] Unsupported file extension for "/evening/data/Music3.mp3"!
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [decoder.wav:4] Unsupported file extension for "/evening/data/Music3.mp3"!
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [music:4] Remaining 0 requests
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /evening/data/Music3.mp3 as: audio: {codec: mp3, 48000Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/evening/data/Music3.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [decoder.ogg:4] Unsupported file extension for "/evening/data/Music3.mp3"!
03:27:52 [music:3] Prepared "/new/music/Music2.mp3" (RID 3).
03:27:52 [decoder.ogg:4] Unsupported file extension for "/programs/message/Spontaneous Instrumental Worship - Jireh.mp3"!
03:27:52 [data:5] Queue is empty!
03:27:52 [data:5] Failed to prepare track: no file.
03:27:52 [request:5] Resolved to [[/evening/data/Music3.mp3]].
03:27:52 [request:5] Resolving request [[/evening/data/Music3.mp3]].
03:27:52 [request:5] Resolved to [[/evening/data/Music3.mp3]].
03:27:52 [data:4] Queued 1 requests
03:27:52 [jingles:5] Queue is empty!
03:27:52 [jingles:5] Failed to prepare track: no file.
03:27:52 [jingles:5] Next song will be "/night/jingles/3. Jingle  (engl).mp3".
03:27:52 [data:4] Remaining 0 requests
03:27:52 [request:5] Resolved to [[/programs/message/Spontaneous Instrumental Worship - Jireh.mp3]].
03:27:52 [request:5] Resolving request [[/programs/message/Spontaneous Instrumental Worship - Jireh.mp3]].
03:27:52 [request:5] Resolved to [[/programs/message/Spontaneous Instrumental Worship - Jireh.mp3]].
03:27:52 [message:4] Queued 1 requests
03:27:52 [request:5] Resolving request [[/night/jingles/3. Jingle  (engl).mp3]].
03:27:52 [data:5] Next song will be "/morning/data/Music6.mp3".
03:27:52 [request:5] Resolving request [[/morning/data/Music6.mp3]].
03:27:52 [decoder.ogg:4] Unsupported file extension for "/night/jingles/3. Jingle  (engl).mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/night/jingles/3. Jingle  (engl).mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/night/jingles/3. Jingle  (engl).mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [decoder.ogg:4] Unsupported file extension for "/morning/data/Music6.mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/morning/data/Music6.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/morning/data/Music6.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /night/jingles/3. Jingle  (engl).mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/night/jingles/3. Jingle  (engl).mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [decoder.ogg:4] Unsupported file extension for "/night/jingles/3. Jingle  (engl).mp3"!
03:27:52 [request:5] Resolved to [[/night/jingles/3. Jingle  (engl).mp3]].
03:27:52 [request:5] Resolving request [[/night/jingles/3. Jingle  (engl).mp3]].
03:27:52 [request:5] Resolved to [[/night/jingles/3. Jingle  (engl).mp3]].
03:27:52 [jingles:4] Queued 1 requests
03:27:52 [jingles:5] Next song will be "/morning/jingles/Jingle 9 2022.mp3".
03:27:52 [request:5] Resolving request [[/morning/jingles/Jingle 9 2022.mp3]].
03:27:52 [decoder.ogg:4] Unsupported file extension for "/morning/jingles/Jingle 9 2022.mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/morning/jingles/Jingle 9 2022.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/morning/jingles/Jingle 9 2022.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /morning/data/Music6.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)}, video: {codec: png, 150x150, rgba} and content-type: {audio=pcm(stereo),video=yuva420p,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/morning/data/Music6.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=yuva420p,midi=none}
03:27:52 [data:3] Prepared "/evening/data/Music3.mp3" (RID 5).
03:27:52 [mksafe:3] Switch to switch_15 with transition.
03:27:52 [safe_blank:5] Activations changed: static=[], dynamic=[mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_15:5] Activations changed: static=[mksafe:mksafe:RADIO:RADIO], dynamic=[mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_15:3] Switch to map_metadata_5.
03:27:52 [map_metadata_5:5] Activations changed: static=[switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [decoder.ogg:4] Unsupported file extension for "/morning/data/Music6.mp3"!
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /morning/jingles/Jingle 9 2022.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/morning/jingles/Jingle 9 2022.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [switch_14:3] Switch to switch_13.
03:27:52 [switch_13:5] Activations changed: static=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_13:3] Switch to switch_12.
03:27:52 [switch_12:5] Activations changed: static=[switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_12:3] Switch to switch_1.
03:27:52 [switch_1:5] Activations changed: static=[switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_1:3] Switch to switch_0.
03:27:52 [switch_0:5] Activations changed: static=[switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [switch_0:3] Switch to data.
03:27:52 [data:5] Activations changed: static=[switch_0:switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO], dynamic=[switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO, switch_0:switch_1:switch_12:switch_13:switch_14:map_metadata_5:switch_15:mksafe:mksafe:RADIO:RADIO].
03:27:52 [decoder.ogg:4] Unsupported file extension for "/morning/jingles/Jingle 9 2022.mp3"!
03:27:52 [request:5] Resolved to [[/morning/data/Music6.mp3]].
03:27:52 [data:5] Got metadata at position 0: calling handlers...
03:27:52 [request:5] Resolved to [[/morning/jingles/Jingle 9 2022.mp3]].
03:27:52 [request:5] Resolving request [[/morning/data/Music6.mp3]].
03:27:52 [request:5] Resolved to [[/morning/data/Music6.mp3]].
03:27:52 [data:4] Queued 1 requests
03:27:52 [data:5] Next song will be "/daytime/data/Music7.mp3".
03:27:52 [request:5] Resolving request [[/daytime/data/Music7.mp3]].
03:27:52 [switch_0:5] Got metadata at position 0: calling handlers...
03:27:52 [request:5] Resolving request [[/morning/jingles/Jingle 9 2022.mp3]].
03:27:52 [request:5] Resolved to [[/morning/jingles/Jingle 9 2022.mp3]].
03:27:52 [jingles:4] Queued 1 requests
03:27:52 [switch_1:5] Got metadata at position 0: calling handlers...
03:27:52 [jingles:5] Next song will be "/daytime/jingles/Jingle 7 2022.mp3".
03:27:52 [decoder.ogg:4] Unsupported file extension for "/daytime/data/Music7.mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/daytime/data/Music7.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/daytime/data/Music7.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [switch_12:5] Got metadata at position 0: calling handlers...
03:27:52 [request:5] Resolving request [[/daytime/jingles/Jingle 7 2022.mp3]].
03:27:52 [switch_13:5] Got metadata at position 0: calling handlers...
03:27:52 [decoder.ogg:4] Unsupported file extension for "/daytime/jingles/Jingle 7 2022.mp3"!
03:27:52 [switch_14:5] Got metadata at position 0: calling handlers...
03:27:52 [decoder.aiff:4] Unsupported file extension for "/daytime/jingles/Jingle 7 2022.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/daytime/jingles/Jingle 7 2022.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [map_metadata_5:5] Got metadata at position 0: calling handlers...
03:27:52 [switch_15:5] Got metadata at position 0: calling handlers...
03:27:52 [mksafe:5] Got metadata at position 0: calling handlers...
03:27:52 [mksafe:5] Got metadata at position 0: calling handlers...
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /daytime/jingles/Jingle 7 2022.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/daytime/jingles/Jingle 7 2022.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /daytime/data/Music7.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/daytime/data/Music7.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [decoder.ogg:4] Unsupported file extension for "/daytime/jingles/Jingle 7 2022.mp3"!
03:27:52 [request:5] Resolved to [[/daytime/jingles/Jingle 7 2022.mp3]].
03:27:52 [request:5] Resolving request [[/daytime/jingles/Jingle 7 2022.mp3]].
03:27:52 [request:5] Resolved to [[/daytime/jingles/Jingle 7 2022.mp3]].
03:27:52 [jingles:4] Queued 1 requests
03:27:52 [music:5] Next song will be "/new/music/Music8.mp3".
03:27:52 [request:5] Resolving request [[/new/music/Music8.mp3]].
03:27:52 [decoder.ogg:4] Unsupported file extension for "/new/music/Music8.mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/new/music/Music8.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/new/music/Music8.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [decoder.ogg:4] Unsupported file extension for "/daytime/data/Music7.mp3"!
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /new/music/Music8.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/new/music/Music8.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [request:5] Resolved to [[/daytime/data/Music7.mp3]].
03:27:52 [request:5] Resolving request [[/daytime/data/Music7.mp3]].
03:27:52 [request:5] Resolved to [[/daytime/data/Music7.mp3]].
03:27:52 [data:4] Queued 1 requests
03:27:52 [data:5] Next song will be "/evening/data/Music4.mp3".
03:27:52 [request:5] Resolving request [[/evening/data/Music4.mp3]].
03:27:52 [decoder.ogg:4] Unsupported file extension for "/evening/data/Music4.mp3"!
03:27:52 [decoder.aiff:4] Unsupported file extension for "/evening/data/Music4.mp3"!
03:27:52 [decoder.wav:4] Unsupported file extension for "/evening/data/Music4.mp3"!
03:27:52 [decoder:4] Available decoders: FFMPEG (priority: 10), MAD (priority: 1)
03:27:52 [decoder.ffmpeg:4] ffmpeg recognizes /evening/data/Music4.mp3 as: audio: {codec: mp3, 44100Hz, 2 channel(s)} and content-type: {audio=pcm(stereo),video=none,midi=none}.
03:27:52 [decoder:4] Selected decoder FFMPEG for file "/evening/data/Music4.mp3" with expected kind {audio=pcm(stereo),video=none,midi=none} and detected content {audio=pcm(stereo),video=none,midi=none}
03:27:52 [decoder.ogg:4] Unsupported file extension for "/new/music/Music8.mp3"!
03:27:52 [decoder.ogg:4] Unsupported file extension for "/evening/data/Music4.mp3"!
03:27:52 [request:5] Resolved to [[/new/music/Music8.mp3]].
03:27:52 [request:5] Resolving request [[/new/music/Music8.mp3]].
03:27:52 [request:5] Resolved to [[/new/music/Music8.mp3]].
03:27:52 [music:4] Queued 1 requests
03:27:52 [request:5] Resolved to [[/evening/data/Music4.mp3]].
03:27:52 [request:5] Resolving request [[/evening/data/Music4.mp3]].
03:27:52 [request:5] Resolved to [[/evening/data/Music4.mp3]].
03:27:52 [data:4] Queued 1 requests

To Reproduce

mus_ev   = playlist (mode = "randomize", reload = 1, reload_mode = "rounds", "#{mus_ev_dir}")
mus_new  = new_meta( playlist (mode = "randomize", reload_mode = "watch", "#{mus_new_dir}") )

jin_ev   = jingle_meta( playlist (mode = "randomize", reload_mode = "watch", "#{jin_ev_dir}") )

ev = rotate (weights = [3, 1], [mus_ev, jin_ev])
ev = rotate (weights = [1, 1], [ev, mus_new])

radio = switch(track_sensitive = true,
[
  ({6h - 8h}, ev),
])

Expected behavior Not work rotate in version 2.0.3 in version 2.0.2 all ok

Version details

Install method Opam

Common issues out(%ffmpeg(format="mp3",%audio(codec="libshine", samplerate=44100, b = "192k")), mount = "test", s)

Kerosel commented 2 years ago

So I confess I didn't pick through the logs to find the exact problem stated, but when I was using 2.0.3 to test, I found that rotate didn't work correctly: it would go through the list of sources and then stay on the final source (I think that's like "sequence"?)

I went back to 2.0.2 for daily play and rotate behaves as it should in 2.0.2.

codeofdusk commented 2 years ago

I'm also seeing this behaviour.

codeofdusk commented 2 years ago

CC @toots.

toots commented 2 years ago

Thanks for this report y'all. Looking at it right now.

toots commented 2 years ago

Hi again!

I'm not sure exactly what to look at here. We have a test for rotate that seems to work:

jingles = mksafe(playlist(mode="normal", "jingles"))
music   = mksafe(playlist(mode="normal", "playlist"))

rounds = 3
played = ref([])
nmusic = ref(0)
njingles = ref(0)
nmusic = ref(0)

def ot(music, m)
  fname = m["filename"]
  played := [fname, ...!played]
  if music then ref.incr(nmusic) else ref.incr(njingles) end
  print("\n**** track: #{fname}\n")
  if list.length(!played) >= 3 * rounds then
    print("PLAYED: #{list.rev(!played)}\n")
    if !njingles == rounds and !nmusic == 2 * rounds then
      test.pass()
    else
      print("jingles: #{!njingles} / music : #{!nmusic}")
      test.fail()
    end
    shutdown()
  end
end

jingles.on_track(ot(false))
music.on_track(ot(true))

radio = rotate(weights=[2,1], [music,jingles])
output.dummy(fallible=true, radio)

@spy-reality could you share more of your script? What is the definition of the new_meta and jingle_meta operator? What are you observing? I can't understand what's going wrong with just the logs.

@Kerosel & @codeofdusk do you have a minimal script I could use to reproduce y'all issue?

spy-reality commented 2 years ago

@spy-reality could you share more of your script? What is the definition of the new_meta and jingle_meta operator? What are you observing? I can't understand what's going wrong with just the logs.

def new_meta(j)
  rewrite_metadata([
    ("title", 'Новая песня $(if $(artist), " > $(artist) - ", "") $(if $(title), "$(title)", "")'),
    ("artist", "RADIO"),
    ("comment", "http://xyz.pro")
  ], j)
end

def jingle_meta(j)
  rewrite_metadata([
                    ("artist", "RADIO"),
                    ("title",  "Джингл (xyz.pro)"),
#                  ("comment","http://xyz.pro")
], j)
end
toots commented 2 years ago

Thanks for y'all patience and example. I was able to identify an issue when reselecting the next source when the last played source was not the first one in the list. This should be fixed in v2.0.4-preview and main. The test was updated to reflect's @spy-reality example:

jingles = mksafe(playlist(id="jingles", mode="normal", "jingles"))
music   = mksafe(playlist(id="music", mode="normal", "playlist"))
music2  = mksafe(playlist(id="music2", mode="normal", "playlist"))

rounds = 10
round_len = 8
played = ref([])
njingles = ref(0)
nmusic = ref(0)
nmusic2 = ref(0)

def ot(label, _)
  played := [label, ...!played]

  if label == "music" then ref.incr(nmusic) end
  if label == "music2" then ref.incr(nmusic2) end
  if label == "jingles" then ref.incr(njingles) end

  print("\n**** track: #{label}\n")

  if list.length(!played) == round_len * rounds then
    print("PLAYED: #{list.rev(!played)}\n")
    if !njingles == rounds and !nmusic == 3 * rounds and !nmusic2 == 4 * rounds then
      test.pass()
    else
      print("jingles: #{!njingles} / music : #{!nmusic} / music2: #{!nmusic2}")
      test.fail()
    end
    shutdown()
  end
end

jingles.on_track(ot("jingles"))
music.on_track(ot("music"))
music2.on_track(ot("music2"))

radio = rotate(id="rotate", weights=[3,1], [music,jingles])
radio = rotate(id="rotate2", weights=[1,1], [radio, music2])
clock.assign_new(sync="none",[radio])
output.dummy(fallible=true, radio)
codeofdusk commented 2 years ago

When will 2.0.4-preview hit Opam? I don't see any PRs against the opam package repository...

toots commented 2 years ago

I plan on releasing it very soon. Meanwhile, you can pin it locally:

git clone https://github.com/savonet/liquidsoap.git
cd liquidsoap && git checkout v2.0.4-preview
opam install -y .
codeofdusk commented 2 years ago

I also receive the "no solution found" error when attempting to pin and install that branch, even with mad and mm pinned to master. See https://github.com/savonet/liquidsoap/issues/2167#issuecomment-1091021387

toots commented 2 years ago

Hmm that's odd. Do you have anything left pinned? At this point all the deps are in the opam repo so you should not need to have any pinned dependency.

codeofdusk commented 2 years ago
$ opam list --pinned                                                                                                                      
# Packages matching: pinned                                                                                                                                                 
# No matches found                                                                                                                                                          
$ opam pin liquidsoap .                                                                                                                   
[liquidsoap.2.0.3-1] synchronised from git+file:///home/codeofdusk/liquidsoap#v2.0.4-preview                                                                                
liquidsoap is now pinned to git+file:///home/codeofdusk/liquidsoap#v2.0.4-preview (version 2.0.4)                                                                           

Sorry, no solution found: there seems to be a problem with your request.                                                                                                    

[NOTE] Pinning command successful, but your installed packages may be out of sync.                                                                                          
toots commented 2 years ago

What's the OCaml version on this switch? Min version was bumped to 4.12 recently.

codeofdusk commented 2 years ago

That was it – upgrading from 4.11.0 to 4.14.0 fixed it. Thanks!

toots commented 2 years ago

Glad to hear! Let us know if you're able to confirm the fix!

codeofdusk commented 2 years ago

I can confirm that rotate works as expected in commit 17c585c56b30c2070eef4409680b5b9f093f2b72!

toots commented 2 years ago

Dope thanks!