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

Weird switch #46

Closed toots closed 11 years ago

toots commented 11 years ago

Reported by Kevin McQuiggin on the ML:

BACKGROUND:

I want to use a switch() construct to play an -entire- playlist in normal (i.e. top to bottom) order at a specified time. I am using merge_tracks() to join the target playlist into a single track.

PLATFORM:

Liquidsoap 1.1.0 running on an Intel machine; Ubuntu 12.10 with all updates applied.

PLAYLIST:

I have the following playlist, named "test.pls", which consists of 4 short .ogg files. Each .ogg file is a 2-second long item that just contains the spoken audio "Item A", "Item B", "Item C", and "Item D". The merged audio file will be only about 8 seconds in length. Here is the playlist file:

$ cat ../playlists/test.pls
/home/kevin/radio/content/test/a.ogg
/home/kevin/radio/content/test/b.ogg
/home/kevin/radio/content/test/c.ogg
/home/kevin/radio/content/test/d.ogg

PROGRAM CODE:

I have written a short test program to play the merged "test.pls" source twice per minute. Here is my short test program:

$ cat demo.liq
#!/usr/local/bin/liquidsoap

# Logging information:
set("log.file.path","/home/kevin/radio/log/test.log")

# Test: merge tracks of test.pls:
zzz = merge_tracks(playlist.safe(reload_mode="watch", mode="normal", "~/radio/playlists/test.pls"))

radio = mksafe(fallback(track_sensitive=false, [
                        switch([
                                ({0s}, zzz),
                                ({30s}, zzz)
                                ])
                        ]
                ))

# Streaming:
output.icecast(%vorbis,
  host = "localhost", port = 8000,
  password = "donthackme", mount = "vorbis-dev",
  radio)

output.icecast(
  %mp3(bitrate=128),
  host = "localhost", port = 8000,
  password = "donthackme", mount = "mp3-dev",
  radio)

EXPECTED BEHAVIOUR:

I expected that the program would play the entire "test.pls" (items a, b, c, and d.ogg) twice every minute, at 0 seconds and 30 seconds of every minute. I should hear "Item A, Item B, Item C, Item D" for about 8 seconds, starting at 0 seconds; and then again at 30 seconds past each minute.

OBSERVED BEHAVIOUR:

The program plays only 2 items, "a.ogg" and "b.ogg" at 0 seconds of the minute; then it plays the other two items, "c.ogg" and "d.ogg" at 30 seconds past the minute. This behaviour continues each minute.

toots commented 11 years ago

Logs:

2013/03/23 14:38:14 >>> LOG START
2013/03/23 14:38:14 [protocols.external:3] Found "/usr/bin/wget".
2013/03/23 14:38:14 [main:3] Liquidsoap 1.1.0+scm (git://github.com/savonet/liquidsoap.git@0836328521658f193caeddbbabad4495a3acd701:20130317:173625)
2013/03/23 14:38:14 [main:3] Using: graphics=[distributed with Ocaml] pcre=6.2.5 dtools=0.3.0 duppy=0.4.2 duppy.syntax=0.4.2 cry=0.2.2 mm=0.2.1 xmlplaylist=0.1.3 ogg=0.4.4 vorbis=0.6.1 mad=0.4.4 flac=0.1.1 flac.ogg=0.1.1 dynlink=[distributed with Ocaml] lame=0.3.1 alsa=0.2.1 ao=0.2.0 taglib=0.3.0 camomile=0.8.4 faad=0.3.2 portaudio=0.2.0 pulseaudio=0.1.2 ladspa=0.1.4 camlimages=4.0.0
2013/03/23 14:38:14 [main:2]
2013/03/23 14:38:14 [main:2] DISCLAIMER: This version of Liquidsoap has been
2013/03/23 14:38:14 [main:2] compiled from a snapshot of the development code.
2013/03/23 14:38:14 [main:2] As such, it should not be used in production
2013/03/23 14:38:14 [main:2] unless you know what you are doing!
2013/03/23 14:38:14 [main:2]
2013/03/23 14:38:14 [main:2] We are, however, very interested in any feedback
2013/03/23 14:38:14 [main:2] about our development code and committed to fix
2013/03/23 14:38:14 [main:2] issues as soon as possible.
2013/03/23 14:38:14 [main:2]
2013/03/23 14:38:14 [main:2] If you are interested in collaborating to
2013/03/23 14:38:14 [main:2] the development of Liquidsoap, feel free to
2013/03/23 14:38:14 [main:2] drop us a mail at <savonet-devl@lists.sf.net>
2013/03/23 14:38:14 [main:2] or to join the #savonet IRC channel on Freenode.
2013/03/23 14:38:14 [main:2]
2013/03/23 14:38:14 [main:2] Please send any bug report or feature request
2013/03/23 14:38:14 [main:2] at <https://github.com/savonet/liquidsoap/issues>.
2013/03/23 14:38:14 [main:2]
2013/03/23 14:38:14 [main:2] We hope you enjoy this snapshot build of Liquidsoap!
2013/03/23 14:38:14 [main:2]
2013/03/23 14:38:14 [dynamic.loader:3] Could not find dynamic module for aacplus encoder.
2013/03/23 14:38:14 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz master.
2013/03/23 14:38:14 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
2013/03/23 14:38:14 [frame:3] Targetting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
2013/03/23 14:38:14 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2013/03/23 14:38:14 [threads:3] Created thread "generic queue #1".
2013/03/23 14:38:14 [threads:3] Created thread "generic queue #2".
2013/03/23 14:38:14 [test(dot)pls:3] Loading playlist...
2013/03/23 14:38:14 [test(dot)pls:3] No mime type specified, trying autodetection.
2013/03/23 14:38:14 [test(dot)pls:3] Playlist treated as format audio/mpegurl
2013/03/23 14:38:14 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/a.ogg".
2013/03/23 14:38:14 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/b.ogg".
2013/03/23 14:38:14 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/c.ogg".
2013/03/23 14:38:14 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/d.ogg".
2013/03/23 14:38:15 [test(dot)pls:3] Successfully loaded a playlist of 4 tracks.
2013/03/23 14:38:15 [vorbis-dev:3] Connecting mount vorbis-dev for source@localhost...
2013/03/23 14:38:15 [vorbis-dev:3] Connection setup was successful.
2013/03/23 14:38:15 [mp3-dev:3] Connecting mount mp3-dev for source@localhost...
2013/03/23 14:38:15 [mp3-dev:3] Connection setup was successful.
2013/03/23 14:38:15 [threads:3] Created thread "wallclock_main" (1 total).
2013/03/23 14:38:15 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock.
2013/03/23 14:38:15 [mksafe:3] Switch to safe_blank.
2013/03/23 14:38:30 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/a.ogg".
2013/03/23 14:38:30 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/a.ogg" (RID 5).
2013/03/23 14:38:30 [mksafe:3] Switch to switch_5237 with transition.
2013/03/23 14:38:30 [switch_5237:3] Switch to sequence_5235.
2013/03/23 14:38:30 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/a.ogg".
2013/03/23 14:38:31 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/b.ogg".
2013/03/23 14:38:31 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/b.ogg" (RID 6).
2013/03/23 14:38:31 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/b.ogg".
2013/03/23 14:38:31 [mksafe:3] Switch to safe_blank with forgetful transition.
2013/03/23 14:39:00 [mksafe:3] Switch to switch_5237 with transition.
2013/03/23 14:39:00 [switch_5237:3] Switch to sequence_5235.
2013/03/23 14:39:00 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/c.ogg".
2013/03/23 14:39:00 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/c.ogg" (RID 7).
2013/03/23 14:39:01 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/c.ogg".
2013/03/23 14:39:01 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/d.ogg".
2013/03/23 14:39:01 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/d.ogg" (RID 8).
2013/03/23 14:39:01 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/d.ogg".
2013/03/23 14:39:01 [mksafe:3] Switch to safe_blank with forgetful transition.
2013/03/23 14:39:12 [main:3] Shutdown started!
2013/03/23 14:39:12 [main:3] Waiting for threads to terminate...
2013/03/23 14:39:12 [vorbis-dev:3] Closing connection...
2013/03/23 14:39:12 [mp3-dev:3] Closing connection...
2013/03/23 14:39:12 [clock.wallclock_main:3] Streaming loop stopped.
2013/03/23 14:39:12 [threads:3] Thread "wallclock_main" terminated (0 remaining).
2013/03/23 14:39:12 [main:3] Cleaning downloaded files...
2013/03/23 14:39:12 [main:3] Freeing memory...
2013/03/23 14:39:12 >>> LOG END
mcquiggi commented 11 years ago

Hi Romain, I emailed a level 4 log file. I will figure out how to attach it here.

mcquiggi commented 11 years ago

HERE IS THE LEVEL 4 LOG FILE OUTPUT:

2013/03/24 13:35:04 >>> LOG START
2013/03/24 13:35:04 [protocols.external:3] Found "/usr/bin/wget".
2013/03/24 13:35:04 [main:3] Liquidsoap 1.1.0+scm (git://github.com/savonet/liquidsoap.git@0836328521658f193caeddbbabad4495a3acd701:20130317:173625)
2013/03/24 13:35:04 [main:3] Using: graphics=[distributed with Ocaml] pcre=6.2.5 dtools=0.3.0 duppy=0.4.2 duppy.syntax=0.4.2 cry=0.2.2 mm=0.2.1 xmlplaylist=0.1.3 ogg=0.4.4 vorbis=0.6.1 mad=0.4.4 flac=0.1.1 flac.ogg=0.1.1 dynlink=[distributed with Ocaml] lame=0.3.1 alsa=0.2.1 ao=0.2.0 taglib=0.3.0 camomile=0.8.4 faad=0.3.2 portaudio=0.2.0 pulseaudio=0.1.2 ladspa=0.1.4 camlimages=4.0.0
2013/03/24 13:35:04 [main:2] 
2013/03/24 13:35:04 [main:2] DISCLAIMER: This version of Liquidsoap has been
2013/03/24 13:35:04 [main:2] compiled from a snapshot of the development code.
2013/03/24 13:35:04 [main:2] As such, it should not be used in production
2013/03/24 13:35:04 [main:2] unless you know what you are doing!
2013/03/24 13:35:04 [main:2] 
2013/03/24 13:35:04 [main:2] We are, however, very interested in any feedback
2013/03/24 13:35:04 [main:2] about our development code and committed to fix
2013/03/24 13:35:04 [main:2] issues as soon as possible.
2013/03/24 13:35:04 [main:2] 
2013/03/24 13:35:04 [main:2] If you are interested in collaborating to
2013/03/24 13:35:04 [main:2] the development of Liquidsoap, feel free to
2013/03/24 13:35:04 [main:2] drop us a mail at <savonet-devl@lists.sf.net>
2013/03/24 13:35:04 [main:2] or to join the #savonet IRC channel on Freenode.
2013/03/24 13:35:04 [main:2] 
2013/03/24 13:35:04 [main:2] Please send any bug report or feature request
2013/03/24 13:35:04 [main:2] at <https://github.com/savonet/liquidsoap/issues>.
2013/03/24 13:35:04 [main:2] 
2013/03/24 13:35:04 [main:2] We hope you enjoy this snapshot build of Liquidsoap!
2013/03/24 13:35:04 [main:2] 
2013/03/24 13:35:04 [dynamic.loader:3] Could not find dynamic module for aacplus encoder.
2013/03/24 13:35:04 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz master.
2013/03/24 13:35:04 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
2013/03/24 13:35:04 [frame:3] Targetting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
2013/03/24 13:35:04 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2013/03/24 13:35:04 [video.converter:4] Couldn't find preferred video converter: gavl.
2013/03/24 13:35:04 [audio.converter:4] Couldn't find preferred samplerate converter: libsamplerate.
2013/03/24 13:35:04 [audio.converter:4] Using native samplerate converter
2013/03/24 13:35:04 [threads:3] Created thread "generic queue #1".
2013/03/24 13:35:04 [threads:3] Created thread "generic queue #2".
2013/03/24 13:35:04 [clock:4] Currently 1 clocks allocated.
2013/03/24 13:35:04 [clock.wallclock_main:4] Starting 2 sources...
2013/03/24 13:35:04 [source:4] Source output.icecast_5242 gets up.
2013/03/24 13:35:04 [source:4] Source mksafe gets up.
2013/03/24 13:35:04 [source:4] Source fallback_5238 gets up.
2013/03/24 13:35:04 [source:4] Source switch_5237 gets up.
2013/03/24 13:35:04 [source:4] Source sequence_5235 gets up.
2013/03/24 13:35:04 [source:4] Source playlist.safe_5234 gets up.
2013/03/24 13:35:04 [test(dot)pls:3] Loading playlist...
2013/03/24 13:35:04 [test(dot)pls:3] No mime type specified, trying autodetection.
2013/03/24 13:35:04 [playlist parser:4] Trying application/rss+xml parser
2013/03/24 13:35:04 [playlist parser:4] Trying application/xspf+xml parser
2013/03/24 13:35:04 [playlist parser:4] Trying application/smil+xml parser
2013/03/24 13:35:04 [playlist parser:4] Trying application/smil parser
2013/03/24 13:35:04 [playlist parser:4] Trying application/xml parser
2013/03/24 13:35:04 [playlist parser:4] Trying text/xml parser
2013/03/24 13:35:04 [playlist parser:4] Trying audio/x-ms-asx parser
2013/03/24 13:35:04 [playlist parser:4] Trying video/x-ms-asf parser
2013/03/24 13:35:04 [playlist parser:4] Trying application/x-cue parser
2013/03/24 13:35:04 [playlist parser:4] Trying audio/x-scpls parser
2013/03/24 13:35:04 [playlist parser:4] Trying audio/mpegurl parser
2013/03/24 13:35:04 [test(dot)pls:3] Playlist treated as format audio/mpegurl
2013/03/24 13:35:04 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:04 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:04 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:04 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:04 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:04 [decoder.ogg:4] File "/home/kevin/radio/content/test/a.ogg" recognized as audio=2 video=0.
2013/03/24 13:35:04 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/a.ogg".
2013/03/24 13:35:04 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:04 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:04 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:04 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:04 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:04 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:04 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:04 [decoder.ogg:4] File "/home/kevin/radio/content/test/b.ogg" recognized as audio=2 video=0.
2013/03/24 13:35:04 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/b.ogg".
2013/03/24 13:35:04 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:04 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:04 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:35:04 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:35:04 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:35:04 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:35:04 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:35:04 [decoder.ogg:4] File "/home/kevin/radio/content/test/c.ogg" recognized as audio=2 video=0.
2013/03/24 13:35:04 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/c.ogg".
2013/03/24 13:35:04 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:35:04 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:35:04 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:35:04 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:35:04 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:35:04 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:35:04 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:35:04 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:35:04 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:35:04 [decoder.ogg:4] File "/home/kevin/radio/content/test/d.ogg" recognized as audio=2 video=0.
2013/03/24 13:35:04 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/d.ogg".
2013/03/24 13:35:04 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:35:04 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:35:04 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:35:04 [test(dot)pls:3] Successfully loaded a playlist of 4 tracks.
2013/03/24 13:35:04 [test(dot)pls:4] Content kind is {audio=2;video=0;midi=0}.
2013/03/24 13:35:04 [test(dot)pls:4] Activations changed: static=[sequence_5235:switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev], dynamic=[].
2013/03/24 13:35:04 [sequence_5235:4] Activations changed: static=[], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:04 [sequence_5235:4] Activations changed: static=[], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev, switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:04 [switch_5237:4] Activations changed: static=[], dynamic=[fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:04 [fallback_5238:4] Activations changed: static=[], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:04 [source:4] Source safe_blank gets up.
2013/03/24 13:35:04 [safe_blank:4] Content kind is {audio=2;video=0;midi=0}.
2013/03/24 13:35:04 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:04 [mksafe:4] Activations changed: static=[vorbis-dev:vorbis-dev], dynamic=[].
2013/03/24 13:35:04 [vorbis-dev:4] Activations changed: static=[vorbis-dev], dynamic=[].
2013/03/24 13:35:04 [vorbis-dev:4] Enabling caching mode: active source.
2013/03/24 13:35:04 [source:4] Source output.icecast_5243 gets up.
2013/03/24 13:35:04 [mksafe:4] Activations changed: static=[mp3-dev:mp3-dev, vorbis-dev:vorbis-dev], dynamic=[].
2013/03/24 13:35:04 [mksafe:4] Enabling caching mode: two static activations.
2013/03/24 13:35:04 [mp3-dev:4] Activations changed: static=[mp3-dev], dynamic=[].
2013/03/24 13:35:04 [mp3-dev:4] Enabling caching mode: active source.
2013/03/24 13:35:04 [vorbis-dev:3] Connecting mount vorbis-dev for source@localhost...
2013/03/24 13:35:05 [vorbis-dev:3] Connection setup was successful.
2013/03/24 13:35:05 [mp3-dev:3] Connecting mount mp3-dev for source@localhost...
2013/03/24 13:35:05 [mp3-dev:3] Connection setup was successful.
2013/03/24 13:35:05 [threads:3] Created thread "wallclock_main" (1 total).
2013/03/24 13:35:05 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock.
2013/03/24 13:35:05 [clock:4] Main phase starts.
2013/03/24 13:35:05 [mksafe:3] Switch to safe_blank.
2013/03/24 13:35:05 [safe_blank:4] Activations changed: static=[mksafe:vorbis-dev:vorbis-dev], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:05 [ogg.muxer:4] vorbis-dev: Starting all streams
2013/03/24 13:35:30 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:30 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:30 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:30 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:30 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:30 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:30 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:30 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:30 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:30 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:30 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:30 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:35:30 [decoder.ogg:4] File "/home/kevin/radio/content/test/a.ogg" recognized as audio=2 video=0.
2013/03/24 13:35:30 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/a.ogg".
2013/03/24 13:35:30 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:30 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:30 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:35:30 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/a.ogg" (RID 5).
2013/03/24 13:35:30 [mksafe:3] Switch to fallback_5238 with transition.
2013/03/24 13:35:30 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:30 [fallback_5238:4] Activations changed: static=[mksafe:vorbis-dev:vorbis-dev], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:30 [fallback_5238:3] Switch to switch_5237.
2013/03/24 13:35:30 [switch_5237:4] Activations changed: static=[fallback_5238:mksafe:vorbis-dev:vorbis-dev], dynamic=[fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:30 [switch_5237:3] Switch to sequence_5235.
2013/03/24 13:35:30 [sequence_5235:4] Activations changed: static=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev, switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:30 [ogg.muxer:4] vorbis-dev: Setting end of track 192ff98.
2013/03/24 13:35:30 [ogg.muxer:4] vorbis-dev: Every ogg logical tracks have ended: setting end of stream.
2013/03/24 13:35:30 [ogg.muxer:4] vorbis-dev: Starting new sequentialized ogg stream.
2013/03/24 13:35:30 [ogg.muxer:4] vorbis-dev: Starting all streams
2013/03/24 13:35:30 [decoder:4] Decoding "/home/kevin/radio/content/test/a.ogg" ended: Ogg.End_of_stream.
2013/03/24 13:35:30 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/a.ogg".
2013/03/24 13:35:30 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:30 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:30 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:30 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:30 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:30 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:30 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:30 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:30 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:30 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:30 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:30 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:35:30 [decoder.ogg:4] File "/home/kevin/radio/content/test/b.ogg" recognized as audio=2 video=0.
2013/03/24 13:35:30 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/b.ogg".
2013/03/24 13:35:30 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:30 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:31 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:35:31 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/b.ogg" (RID 6).
2013/03/24 13:35:31 [ogg.muxer:4] vorbis-dev: Setting end of track 26c330b7.
2013/03/24 13:35:31 [ogg.muxer:4] vorbis-dev: Every ogg logical tracks have ended: setting end of stream.
2013/03/24 13:35:31 [ogg.muxer:4] vorbis-dev: Starting new sequentialized ogg stream.
2013/03/24 13:35:31 [ogg.muxer:4] vorbis-dev: Starting all streams
2013/03/24 13:35:31 [decoder:4] Decoding "/home/kevin/radio/content/test/b.ogg" ended: Ogg.End_of_stream.
2013/03/24 13:35:31 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/b.ogg".
2013/03/24 13:35:31 [sequence_5235:4] Activations changed: static=[], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev, switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:31 [switch_5237:4] Activations changed: static=[], dynamic=[fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:31 [mksafe:3] Switch to safe_blank with forgetful transition.
2013/03/24 13:35:31 [fallback_5238:4] Activations changed: static=[], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:35:31 [safe_blank:4] Activations changed: static=[mksafe:vorbis-dev:vorbis-dev], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:00 [mksafe:3] Switch to fallback_5238 with transition.
2013/03/24 13:36:00 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:00 [fallback_5238:4] Activations changed: static=[mksafe:vorbis-dev:vorbis-dev], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:00 [fallback_5238:3] Switch to switch_5237.
2013/03/24 13:36:00 [switch_5237:4] Activations changed: static=[fallback_5238:mksafe:vorbis-dev:vorbis-dev], dynamic=[fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:00 [switch_5237:3] Switch to sequence_5235.
2013/03/24 13:36:00 [sequence_5235:4] Activations changed: static=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev, switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:00 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:36:00 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:36:00 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:36:00 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:36:00 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:36:00 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:36:00 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:36:00 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:36:00 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:36:00 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:36:00 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:36:00 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:36:00 [decoder.ogg:4] File "/home/kevin/radio/content/test/c.ogg" recognized as audio=2 video=0.
2013/03/24 13:36:00 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/c.ogg".
2013/03/24 13:36:00 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:36:00 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:36:00 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:36:00 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/c.ogg" (RID 7).
2013/03/24 13:36:00 [ogg.muxer:4] vorbis-dev: Setting end of track 24b3e71b.
2013/03/24 13:36:00 [ogg.muxer:4] vorbis-dev: Every ogg logical tracks have ended: setting end of stream.
2013/03/24 13:36:00 [ogg.muxer:4] vorbis-dev: Starting new sequentialized ogg stream.
2013/03/24 13:36:00 [ogg.muxer:4] vorbis-dev: Starting all streams
2013/03/24 13:36:00 [decoder:4] Decoding "/home/kevin/radio/content/test/c.ogg" ended: Ogg.End_of_stream.
2013/03/24 13:36:01 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/c.ogg".
2013/03/24 13:36:01 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:36:01 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:36:01 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:36:01 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:36:01 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:36:01 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:36:01 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:36:01 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:36:01 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:36:01 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:36:01 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:36:01 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:36:01 [decoder.ogg:4] File "/home/kevin/radio/content/test/d.ogg" recognized as audio=2 video=0.
2013/03/24 13:36:01 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/d.ogg".
2013/03/24 13:36:01 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:36:01 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:36:01 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:36:01 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/d.ogg" (RID 8).
2013/03/24 13:36:01 [ogg.muxer:4] vorbis-dev: Setting end of track 1cb36fba.
2013/03/24 13:36:01 [ogg.muxer:4] vorbis-dev: Every ogg logical tracks have ended: setting end of stream.
2013/03/24 13:36:01 [ogg.muxer:4] vorbis-dev: Starting new sequentialized ogg stream.
2013/03/24 13:36:01 [ogg.muxer:4] vorbis-dev: Starting all streams
2013/03/24 13:36:01 [decoder:4] Decoding "/home/kevin/radio/content/test/d.ogg" ended: Ogg.End_of_stream.
2013/03/24 13:36:01 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/d.ogg".
2013/03/24 13:36:01 [sequence_5235:4] Activations changed: static=[], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev, switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:01 [switch_5237:4] Activations changed: static=[], dynamic=[fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:01 [mksafe:3] Switch to safe_blank with forgetful transition.
2013/03/24 13:36:01 [fallback_5238:4] Activations changed: static=[], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:01 [safe_blank:4] Activations changed: static=[mksafe:vorbis-dev:vorbis-dev], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:30 [mksafe:3] Switch to fallback_5238 with transition.
2013/03/24 13:36:30 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:30 [fallback_5238:4] Activations changed: static=[mksafe:vorbis-dev:vorbis-dev], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:30 [fallback_5238:3] Switch to switch_5237.
2013/03/24 13:36:30 [switch_5237:4] Activations changed: static=[fallback_5238:mksafe:vorbis-dev:vorbis-dev], dynamic=[fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:30 [switch_5237:3] Switch to sequence_5235.
2013/03/24 13:36:30 [sequence_5235:4] Activations changed: static=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev, switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:30 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:36:30 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:36:30 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:36:30 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:36:30 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:36:30 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:36:30 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:36:30 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:36:30 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:36:30 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:36:30 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:36:30 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/a.ogg"...
2013/03/24 13:36:30 [decoder.ogg:4] File "/home/kevin/radio/content/test/a.ogg" recognized as audio=2 video=0.
2013/03/24 13:36:30 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/a.ogg".
2013/03/24 13:36:30 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:36:30 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:36:30 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/a.ogg"!
2013/03/24 13:36:30 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/a.ogg" (RID 9).
2013/03/24 13:36:30 [ogg.muxer:4] vorbis-dev: Setting end of track 3052ca9d.
2013/03/24 13:36:30 [ogg.muxer:4] vorbis-dev: Every ogg logical tracks have ended: setting end of stream.
2013/03/24 13:36:30 [ogg.muxer:4] vorbis-dev: Starting new sequentialized ogg stream.
2013/03/24 13:36:30 [ogg.muxer:4] vorbis-dev: Starting all streams
2013/03/24 13:36:30 [decoder:4] Decoding "/home/kevin/radio/content/test/a.ogg" ended: Ogg.End_of_stream.
2013/03/24 13:36:30 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/a.ogg".
2013/03/24 13:36:30 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:36:30 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:36:30 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:36:30 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:36:30 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:36:30 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:36:30 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:36:30 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:36:30 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:36:30 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:36:30 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:36:30 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/b.ogg"...
2013/03/24 13:36:31 [decoder.ogg:4] File "/home/kevin/radio/content/test/b.ogg" recognized as audio=2 video=0.
2013/03/24 13:36:31 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/b.ogg".
2013/03/24 13:36:31 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:36:31 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:36:31 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/b.ogg"!
2013/03/24 13:36:31 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/b.ogg" (RID 10).
2013/03/24 13:36:31 [ogg.muxer:4] vorbis-dev: Setting end of track 1e520558.
2013/03/24 13:36:31 [ogg.muxer:4] vorbis-dev: Every ogg logical tracks have ended: setting end of stream.
2013/03/24 13:36:31 [ogg.muxer:4] vorbis-dev: Starting new sequentialized ogg stream.
2013/03/24 13:36:31 [ogg.muxer:4] vorbis-dev: Starting all streams
2013/03/24 13:36:31 [decoder:4] Decoding "/home/kevin/radio/content/test/b.ogg" ended: Ogg.End_of_stream.
2013/03/24 13:36:31 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/b.ogg".
2013/03/24 13:36:31 [sequence_5235:4] Activations changed: static=[], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev, switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:31 [switch_5237:4] Activations changed: static=[], dynamic=[fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:31 [mksafe:3] Switch to safe_blank with forgetful transition.
2013/03/24 13:36:31 [fallback_5238:4] Activations changed: static=[], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:36:31 [safe_blank:4] Activations changed: static=[mksafe:vorbis-dev:vorbis-dev], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:37:00 [mksafe:3] Switch to fallback_5238 with transition.
2013/03/24 13:37:00 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:37:00 [fallback_5238:4] Activations changed: static=[mksafe:vorbis-dev:vorbis-dev], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:37:00 [fallback_5238:3] Switch to switch_5237.
2013/03/24 13:37:00 [switch_5237:4] Activations changed: static=[fallback_5238:mksafe:vorbis-dev:vorbis-dev], dynamic=[fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:37:00 [switch_5237:3] Switch to sequence_5235.
2013/03/24 13:37:00 [sequence_5235:4] Activations changed: static=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev, switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:37:00 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:37:00 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:37:00 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:37:00 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:37:00 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:37:00 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:37:00 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:37:00 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:37:00 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:37:00 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:37:00 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:37:00 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/c.ogg"...
2013/03/24 13:37:00 [decoder.ogg:4] File "/home/kevin/radio/content/test/c.ogg" recognized as audio=2 video=0.
2013/03/24 13:37:00 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/c.ogg".
2013/03/24 13:37:00 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:37:00 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:37:00 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/c.ogg"!
2013/03/24 13:37:00 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/c.ogg" (RID 11).
2013/03/24 13:37:00 [ogg.muxer:4] vorbis-dev: Setting end of track 38ec3b3.
2013/03/24 13:37:00 [ogg.muxer:4] vorbis-dev: Every ogg logical tracks have ended: setting end of stream.
2013/03/24 13:37:00 [ogg.muxer:4] vorbis-dev: Starting new sequentialized ogg stream.
2013/03/24 13:37:00 [ogg.muxer:4] vorbis-dev: Starting all streams
2013/03/24 13:37:00 [decoder:4] Decoding "/home/kevin/radio/content/test/c.ogg" ended: Ogg.End_of_stream.
2013/03/24 13:37:01 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/c.ogg".
2013/03/24 13:37:01 [decoder:4] Trying method "META" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:37:01 [decoder:4] Trying method "WAV" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:37:01 [decoder.wav:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:37:01 [decoder:4] Trying method "MIDI" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:37:01 [decoder:4] Trying method "IMAGE" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:37:01 [decoder:4] Trying method "FLAC" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:37:01 [decoder.flac:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:37:01 [decoder:4] Trying method "AAC" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:37:01 [decoder.aac:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:37:01 [decoder:4] Trying method "MP4" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:37:01 [decoder.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:37:01 [decoder:4] Trying method "OGG" for "/home/kevin/radio/content/test/d.ogg"...
2013/03/24 13:37:01 [decoder.ogg:4] File "/home/kevin/radio/content/test/d.ogg" recognized as audio=2 video=0.
2013/03/24 13:37:01 [decoder:3] Method "OGG" accepted "/home/kevin/radio/content/test/d.ogg".
2013/03/24 13:37:01 [metadata.flac:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:37:01 [metadata.mp4:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:37:01 [decoder.taglib:4] Invalid file extension for "/home/kevin/radio/content/test/d.ogg"!
2013/03/24 13:37:01 [test(dot)pls:3] Prepared "/home/kevin/radio/content/test/d.ogg" (RID 12).
2013/03/24 13:37:01 [ogg.muxer:4] vorbis-dev: Setting end of track 356c410b.
2013/03/24 13:37:01 [ogg.muxer:4] vorbis-dev: Every ogg logical tracks have ended: setting end of stream.
2013/03/24 13:37:01 [ogg.muxer:4] vorbis-dev: Starting new sequentialized ogg stream.
2013/03/24 13:37:01 [ogg.muxer:4] vorbis-dev: Starting all streams
2013/03/24 13:37:01 [decoder:4] Decoding "/home/kevin/radio/content/test/d.ogg" ended: Ogg.End_of_stream.
2013/03/24 13:37:01 [test(dot)pls:3] Finished with "/home/kevin/radio/content/test/d.ogg".
2013/03/24 13:37:01 [sequence_5235:4] Activations changed: static=[], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev, switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:37:01 [switch_5237:4] Activations changed: static=[], dynamic=[fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:37:01 [mksafe:3] Switch to safe_blank with forgetful transition.
2013/03/24 13:37:01 [fallback_5238:4] Activations changed: static=[], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:37:01 [safe_blank:4] Activations changed: static=[mksafe:vorbis-dev:vorbis-dev], dynamic=[mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:37:13 [main:3] Shutdown started!
2013/03/24 13:37:13 [main:3] Waiting for threads to terminate...
2013/03/24 13:37:13 [mp3-dev:4] Activations changed: static=[], dynamic=[].
2013/03/24 13:37:13 [source:4] Source mp3-dev gets down.
2013/03/24 13:37:13 [mp3-dev:3] Closing connection...
2013/03/24 13:37:13 [mksafe:4] Activations changed: static=[vorbis-dev:vorbis-dev], dynamic=[].
2013/03/24 13:37:13 [mksafe:4] Disabling caching mode.
2013/03/24 13:37:13 [vorbis-dev:4] Activations changed: static=[], dynamic=[].
2013/03/24 13:37:13 [source:4] Source vorbis-dev gets down.
2013/03/24 13:37:13 [ogg.muxer:4] vorbis-dev: Setting end of track 2197dba3.
2013/03/24 13:37:13 [ogg.muxer:4] vorbis-dev: Every ogg logical tracks have ended: setting end of stream.
2013/03/24 13:37:13 [vorbis-dev:3] Closing connection...
2013/03/24 13:37:13 [mksafe:4] Activations changed: static=[], dynamic=[].
2013/03/24 13:37:13 [source:4] Source mksafe gets down.
2013/03/24 13:37:13 [fallback_5238:4] Activations changed: static=[], dynamic=[].
2013/03/24 13:37:13 [source:4] Source fallback_5238 gets down.
2013/03/24 13:37:13 [switch_5237:4] Activations changed: static=[], dynamic=[].
2013/03/24 13:37:13 [source:4] Source switch_5237 gets down.
2013/03/24 13:37:13 [sequence_5235:4] Activations changed: static=[], dynamic=[switch_5237:fallback_5238:mksafe:vorbis-dev:vorbis-dev].
2013/03/24 13:37:13 [sequence_5235:4] Activations changed: static=[], dynamic=[].
2013/03/24 13:37:13 [source:4] Source sequence_5235 gets down.
2013/03/24 13:37:13 [test(dot)pls:4] Activations changed: static=[], dynamic=[].
2013/03/24 13:37:13 [source:4] Source test(dot)pls gets down.
2013/03/24 13:37:13 [safe_blank:4] Activations changed: static=[mksafe:vorbis-dev:vorbis-dev], dynamic=[].
2013/03/24 13:37:13 [safe_blank:4] Activations changed: static=[], dynamic=[].
2013/03/24 13:37:13 [source:4] Source safe_blank gets down.
2013/03/24 13:37:13 [clock.wallclock_main:3] Streaming loop stopped.
2013/03/24 13:37:13 [threads:3] Thread "wallclock_main" terminated (0 remaining).
2013/03/24 13:37:13 [main:3] Cleaning downloaded files...
2013/03/24 13:37:13 [main:3] Freeing memory...
2013/03/24 13:37:13 >>> LOG END
dbaelde commented 11 years ago

[Re-posting from the ML]

What could be happening here is that the third file is not resolved fast enough, so there is a tiny gap before it, and merge_track() won't do anything about it.

The sequence() operator that is behind merge_tracks is not logging much, so it won't help in confirming the diagnostic. But in any, you need to do something to avoid the risk of a gap, given that your files are so short.

One solution is to use playlist.safe() because it resolves requests in advance (iirc) and see if it helps. Another solution could be to use a queue in which you manually put your files -- this way, you don't even have to merge tracks.

mcquiggi commented 11 years ago

Thanks. I have tried both playlist.safe and using longer files, so that is not a solution.

I pared this down to a simple example just to demonstrate the problem.

I'd rather stick with my current approach as 1) the methodology works for me; and 2) it will resolve a likely bug rather than just sidestep the problem,

Kevin

Sent from my iPhone

On 2013-03-24, at 14:31, David Baelde notifications@github.com wrote:

[Re-posting from the ML]

What could be happening here is that the third file is not resolved fast enough, so there is a tiny gap before it, and merge_track() won't do anything about it.

The sequence() operator that is behind merge_tracks is not logging much, so it won't help in confirming the diagnostic. But in any, you need to do something to avoid the risk of a gap, given that your files are so short.

One solution is to use playlist.safe() because it resolves requests in advance (iirc) and see if it helps. Another solution could be to use a queue in which you manually put your files -- this way, you don't even have to merge tracks.

— Reply to this email directly or view it on GitHub.

padanius commented 11 years ago

Looks like this bug involves sequence since it looks like that merge is defined using sequence:

# Merge all tracks from a source.
# @category Source / Track Processing
def merge_tracks(s)
  sequence(merge=true,[s])
end

The following is a test script meant to use sequence to announce every 15 seconds a count down (3,2,1) and the number of seconds past the minute.

After the first run (i.e .the first minute) in which it runs as expected, only the last file in the sequence (i.e. the number of seconds past the minute) is played.

I would expect that sequence always plays what is in the sequence.

The script is being run under Ubuntu precise, liquidsoap-full 1.1.1 compiled from cvs

#!/usr/local/bin/liquidsoap
#
set("log.syslog",false)
set("log.file.path","/tmp/countdown-radio.log")
set("log.level",5)
set("log.stdout",true)
set("server.socket",false)
set("server.telnet",false)
set("init.daemon",false)
set("scheduler.log",true)
set("scheduler.event_queues",5)
set("scheduler.generic_queues",5)
set("scheduler.fast_queues",5)
set("scheduler.generic_queues",5)
set("scheduler.non_blocking_queues",5)

MYSTATION="Countdown test"
print(MYSTATION)

_0sec  = single("say:0 seconds!")
_15sec = single("say:15 seconds!")
_30sec = single("say:30 seconds!")
_45sec = single("say:45 seconds!")

_1 = single("say:1!")
_2 = single("say:2!")
_3 = single("say:3!")

ac = audio_to_stereo(mksafe(playlist(id="ac",mode="random", reload=7200, "/MUSIC/AC")))

# def countdown()
#       sequence(merge=true,[
#                            _3,
#                            _2,
#                            _1
#                      ])
# end

def _0secs_countdown()
        sequence(merge=true,[
                             _3,
                             _2,
                             _1,
                             _0sec
                            ])
end
def _15secs_countdown()
        sequence(merge=true,[
                             _3,
                             _2,
                             _1,
                             _15sec
                            ])
end
def _30secs_countdown()
        sequence(merge=true,[
                             _3,
                             _2,
                             _1,
                             _30sec
                            ])
end
def _45secs_countdown()
        sequence(merge=true,[
                             _3,
                             _2,
                             _1,
                             _45sec
                            ])
end

timed_promotions = 
switch([
   ({ 0s}                                  , _0secs_countdown()  ),
   ({ 15s}                                 , _15secs_countdown() ),
   ({ 30s}                                 , _30secs_countdown() ),
   ({ 45s}                                 , _45secs_countdown() )
])

radio = ac
radio = add([radio,timed_promotions])

output.icecast( %aacplus(channels=2,bitrate=48), host = "127.0.0.1", port = 8000, password = "XXXXX", mount = "countdown.aac", name="#{quote(MYSTATION)}",
 genre="Various", url="http://10.1.1.101", description="Countdown Testing Radio", radio)
smimram commented 11 years ago

Ok, so I have been able to reproduce with this simple test script (inspired from the bug report):

count = playlist("count.pls")
m = playlist("~/Music")

s = switch(track_sensitive=false,
  [
  ({0s},count),
  ({10s},count),
  ({20s},count),
  ({30s},count),
  ({40s},count),
  ({50s},count),
  ({true},m)
  ])
s = mksafe(s)

output.pulseaudio(s)

where playlist count.pls contains

say:0
say:1
say:2

The count source should be thought as jingle, and we want to play the whole playlist once every 10sec.

There are two problems here.

If we use track_sensitive=true, we don't hear the playlist every 10 sec but only at end of tracks (if they end on the right second) and with track_sensitive=false the source count is only played for one sec. So, we want to hear count when the associated predicate becomes true, but we want to go back to m when there is a track boundary. How can we achieve this? One way could be to generate a track boundary for m when the predicate becomes true using a new operator and use track_sensitive=true... What do you think of this?

The source count still advances when it is not played, so the first time we hear "zero" but at next occurences we hear something different. Is there a way to freeze a source when it is not played?

smimram commented 11 years ago

Ok, the above example is not exactly what the BR meant. It's more like

count = playlist("count.pls")
count = merge_tracks(count)
m = playlist("~/Music")

jingle = switch([({0s},count),({10s},count),({20s},count),({30s},count),({40s},count),({50s},count)])
s = add([m,jingle])
s = mksafe(s)

output.pulseaudio(s)

I have an idea about how to solve this. I'll keep you posted.

smimram commented 11 years ago

Here is my proposed (non-working) solution:

def playlist.merge(uri) =
  pl = playlist.reloadable(uri)
  reload = fst(pl)
  s = snd(pl)
  s = merge_tracks(s)
  on_track(fun(m)->reload(),s)
end

count = playlist.merge("count.pls")
count = on_track(fun (_)->log("**** NEW TRACK"), count)
m = playlist("~/Music")

jingle = switch([({0s},count),({10s},count),({20s},count),({30s},count),({40s},count),({50s},count)])
s = add([m,jingle])
s = mksafe(s)

output.pulseaudio(s)

Unfortunately, merge_tracks does not do its job: the on_track is triggered for each item of the playlist (and moreover only two are played). I'll leave it to @dbaelde from now on I guess...

smimram commented 11 years ago

Last comment, in sequence, it seems that the merge parameter is used in get_frame only if List.length sources > 1. So I really don't see how merge_tracks is supposed to be working!.... My guess is that sequence only merges between souces.....

smimram commented 11 years ago

Finally, I got a solution:

def playlist.merge(uri) =
  pl = playlist.reloadable(uri)
  reload = fst(pl)
  s = snd(pl)
  s = merge_tracks(s)
  on_end(delay=0.,fun(_,_)->reload(),s)
end

count = playlist.merge("count.pls")
m = playlist("~/Music")

jingle = switch([({0s},count),({10s},count),({20s},count),({30s},count),({40s},count),({50s},count)])
s = add([m,jingle])
s = mksafe(s)

output.pulseaudio(s)

Oh yeah.

I'll add playlist.merge to the standard library.

smimram commented 11 years ago

Ah I forgot to mention that you need this patch : https://github.com/savonet/liquidsoap/pull/51

mcquiggi commented 11 years ago

Hi Samuel:

Fantastic! I will try to figure out how to incorporate the patch, as I am a newbie to Github.

Would it be simpler for me just to delete my current liquidsoap-full directory and re-fork the package from scratch? Then do a build and reinstall?

Sorry for the newbie questions, I have 40+ years computing experience but have not used git etc before.

Kevin

On 2013-03-29, at 12:32 PM, Samuel Mimram notifications@github.com wrote:

Ah I forgot to mention that you need this patch : #51

— Reply to this email directly or view it on GitHub.

smimram commented 11 years ago

Hi,

Good to know that there are old-timers around here :)

Don't delete lqiuidsoap-full! You can simply go into its liquidsoap subdir and type git checkout sequence (and if you want to go back to trunk git checkout master).

++

Sam.

mcquiggi commented 11 years ago

Hmmm:

kevin@citadel:~/liquidsoap-full/liquidsoap$ ls aclocal.m4 config.log doc Makefile scripts autom4te.cache config.status examples Makefile.defs src bootstrap configure gui Makefile.defs.in CHANGES configure.ac INSTALL Makefile.rules config.h configure-with-options install-sh README config.h.in COPYING m4 RELEASING kevin@citadel:~/liquidsoap-full/liquidsoap$ git checkout sequence error: pathspec 'sequence' did not match any file(s) known to git. kevin@citadel:~/liquidsoap-full/liquidsoap$

On 2013-03-29, at 1:07 PM, Samuel Mimram notifications@github.com wrote:

git checkout sequence

smimram commented 11 years ago

Did you do a git pull before to fetch the changes?

mcquiggi commented 11 years ago

Nope! Like I said, total newbie!

It seems to have fetched a number of updates:


kevin@citadel:~/liquidsoap-full/liquidsoap$ git pull remote: Counting objects: 313, done. remote: Compressing objects: 100% (126/126), done. remote: Total 204 (delta 168), reused 111 (delta 78) Receiving objects: 100% (204/204), 26.62 KiB, done. Resolving deltas: 100% (168/168), completed with 59 local objects. From git://github.com/savonet/liquidsoap 0836328..763ebbb master -> origin/master


Now can I just "make" and "make install" or do I have to bootstrap and configure again?

Sorry for the dumb questions!

On 2013-03-29, at 1:18 PM, Samuel Mimram notifications@github.com wrote:

Did you do a git pull before to fetch the changes?

— Reply to this email directly or view it on GitHub.

smimram commented 11 years ago

make and make install should be enough here since I did not change anything related to configure or Makefiles! (although it won't harm)

mcquiggi commented 11 years ago

Hi Samuel:

Okay, and I am looking at the github docs to reduce future questions!

Thanks very much!

Kevin

On 2013-03-29, at 1:25 PM, Samuel Mimram notifications@github.com wrote:

make and make install should be enough here since I did not change anything related to configure or Makefiles! (although it won't harm)

— Reply to this email directly or view it on GitHub.

mcquiggi commented 11 years ago

New version installed, let's see what happens!

I'll let you know.

On 2013-03-29, at 1:25 PM, Samuel Mimram notifications@github.com wrote:

make and make install should be enough here since I did not change anything related to configure or Makefiles! (although it won't harm)

— Reply to this email directly or view it on GitHub.

smimram commented 11 years ago

Great! :)

On Fri, Mar 29, 2013 at 9:36 PM, mcquiggi notifications@github.com wrote:

New version installed, let's see what happens!

I'll let you know.

On 2013-03-29, at 1:25 PM, Samuel Mimram notifications@github.com wrote:

make and make install should be enough here since I did not change anything related to configure or Makefiles! (although it won't harm)

— Reply to this email directly or view it on GitHub.

— Reply to this email directly or view it on GitHubhttps://github.com/savonet/liquidsoap/issues/46#issuecomment-15659427 .

mcquiggi commented 11 years ago

It works! My playlists now play properly through merge_tracks() and switch().

Thanks to everyone for the assistance!!

Kevin

Sent from my iPhone

On 2013-03-29, at 13:36, Samuel Mimram notifications@github.com wrote:

Great! :)

On Fri, Mar 29, 2013 at 9:36 PM, mcquiggi notifications@github.com wrote:

New version installed, let's see what happens!

I'll let you know.

On 2013-03-29, at 1:25 PM, Samuel Mimram notifications@github.com wrote:

make and make install should be enough here since I did not change anything related to configure or Makefiles! (although it won't harm)

— Reply to this email directly or view it on GitHub.

— Reply to this email directly or view it on GitHubhttps://github.com/savonet/liquidsoap/issues/46#issuecomment-15659427 .

— Reply to this email directly or view it on GitHub.

mcquiggi commented 11 years ago

Hi Samuel and All:

Thanks for working on issue #46.

Unfortunately there is still a problem!

The merge_tracks() now works fine, and the switch() construct can be used to activate a merged playlist at a specified time.

However, the source based on the merged_tracks() playlist now plays -forever-, not just once. The first activation causes the playlist to loop forever. The proper functionality, I believe, is for the merged playlist to be played ONCE, and then have the output revert to the other sources in the model as appropriate.

Here's my sample code:

zzz = merge_tracks(playlist.safe(reload_mode="watch", mode="normal", "~/radio/playlists/test.pls")) s=switch([ ({0s}, zzz), ({30s}, zzz) ])

Simple scheduling:

radio = fallback(track_sensitive=false, [ s, security ] )

Once the "zzz" source is activated at 0 seconds, the "zzz" source plays forever. What should happen is that the merged tracks of "zzz" play once, then there is fallback to "security" until 30 seconds, then the "zzz" source is played once, then back to "security" until 0 seconds, et cetera.

Sorry that I jumped the gun in stating that the issue was resolved. Anything I can do to assist let me know. I wish I knew ocaml and the other base languages of LS!

Kevin

On 2013-03-29, at 3:19 PM, Kevin McQuiggin mcquiggi@me.com wrote:

It works! My playlists now play properly through merge_tracks() and switch().

Thanks to everyone for the assistance!!

Kevin

Sent from my iPhone

On 2013-03-29, at 13:36, Samuel Mimram notifications@github.com wrote:

Great! :)

On Fri, Mar 29, 2013 at 9:36 PM, mcquiggi notifications@github.com wrote:

New version installed, let's see what happens!

I'll let you know.

On 2013-03-29, at 1:25 PM, Samuel Mimram notifications@github.com wrote:

make and make install should be enough here since I did not change anything related to configure or Makefiles! (although it won't harm)

— Reply to this email directly or view it on GitHub.

— Reply to this email directly or view it on GitHubhttps://github.com/savonet/liquidsoap/issues/46#issuecomment-15659427 .

— Reply to this email directly or view it on GitHub.

smimram commented 11 years ago

Yes this is expected: merge_tracks merges the tracks as long as there are some. In order to play the whole playlist once as one track you should use the playlist.merge function that I gave earlier. Does the following work for you?

def playlist.merge(uri) =
  pl = playlist.reloadable(uri)
  reload = fst(pl)
  s = snd(pl)
  s = merge_tracks(s)
  on_end(delay=0.,fun(_,_)->reload(),s)
end

zzz = playlist.merge("~/radio/playlists/test.pls")
s=switch([        ({0s}, zzz),
                   ({30s}, zzz)
          ])

# Simple scheduling:
radio = fallback(track_sensitive=false, [
            s,
            security
            ]
        )
mcquiggi commented 11 years ago

See my answer on https://github.com/savonet/liquidsoap/issues/46

++

On Sat, Mar 30, 2013 at 5:31 PM, Kevin McQuiggin mcquiggi@sfu.ca wrote:

Hi Samuel and All:

Thanks for working on issue #46.

Unfortunately there is still a problem!

The merge_tracks() now works fine, and the switch() construct can be used to activate a merged playlist at a specified time.

However, the source based on the merged_tracks() playlist now plays -forever-, not just once. The first activation causes the playlist to loop forever. The proper functionality, I believe, is for the merged playlist to be played ONCE, and then have the output revert to the other sources in the model as appropriate.

Here's my sample code:

zzz = merge_tracks(playlist.safe(reload_mode="watch", mode="normal", "~/radio/playlists/test.pls")) s=switch([ ({0s}, zzz), ({30s}, zzz) ])

Simple scheduling:

radio = fallback(track_sensitive=false, [ s, security ] )

Once the "zzz" source is activated at 0 seconds, the "zzz" source plays forever. What should happen is that the merged tracks of "zzz" play once, then there is fallback to "security" until 30 seconds, then the "zzz" source is played once, then back to "security" until 0 seconds, et cetera.

Sorry that I jumped the gun in stating that the issue was resolved. Anything I can do to assist let me know. I wish I knew ocaml and the other base languages of LS!

Kevin

On 2013-03-29, at 3:19 PM, Kevin McQuiggin mcquiggi@me.com wrote:

It works! My playlists now play properly through merge_tracks() and switch().

Thanks to everyone for the assistance!!

Kevin

Sent from my iPhone

On 2013-03-29, at 13:36, Samuel Mimram notifications@github.com wrote:

Great! :)

On Fri, Mar 29, 2013 at 9:36 PM, mcquiggi notifications@github.com wrote:

New version installed, let's see what happens!

I'll let you know.

On 2013-03-29, at 1:25 PM, Samuel Mimram notifications@github.com wrote:

make and make install should be enough here since I did not change anything related to configure or Makefiles! (although it won't harm)

— Reply to this email directly or view it on GitHub.

— Reply to this email directly or view it on GitHub< https://github.com/savonet/liquidsoap/issues/46#issuecomment-15659427> .

— Reply to this email directly or view it on GitHubhttps://github.com/savonet/liquidsoap/issues/46#issuecomment-15659470 .


Own the Future-Intel(R) Level Up Game Demo Contest 2013 Rise to greatness in Intel's independent game demo contest. Compete for recognition, cash, and the chance to get your game on Steam. $5K grand prize plus 10 genre and skill prizes. Submit your demo by 6/6/13. http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2


Savonet-users mailing list Savonet-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/savonet-users

dbaelde commented 11 years ago

Sam, you seem to imply that there is a difference between merge_tracks and playlist.merge wrt. merging tracks, but I don't understand your point. " merge_tracks merges the tracks as long as there are some" but isn't it the same with playlist.merge?

On Sun, Mar 31, 2013 at 12:00 PM, mcquiggi notifications@github.com wrote:

See my answer on https://github.com/savonet/liquidsoap/issues/46

++

On Sat, Mar 30, 2013 at 5:31 PM, Kevin McQuiggin mcquiggi@sfu.ca wrote:

Hi Samuel and All:

Thanks for working on issue #46.

Unfortunately there is still a problem!

The merge_tracks() now works fine, and the switch() construct can be used to activate a merged playlist at a specified time.

However, the source based on the merged_tracks() playlist now plays -forever-, not just once. The first activation causes the playlist to loop forever. The proper functionality, I believe, is for the merged playlist to be played ONCE, and then have the output revert to the other sources in the model as appropriate.

Here's my sample code:

zzz = merge_tracks(playlist.safe(reload_mode="watch", mode="normal", "~/radio/playlists/test.pls")) s=switch([ ({0s}, zzz), ({30s}, zzz) ])

Simple scheduling:

radio = fallback(track_sensitive=false, [ s, security ] )

Once the "zzz" source is activated at 0 seconds, the "zzz" source plays forever. What should happen is that the merged tracks of "zzz" play once, then there is fallback to "security" until 30 seconds, then the "zzz" source is played once, then back to "security" until 0 seconds, et cetera.

Sorry that I jumped the gun in stating that the issue was resolved. Anything I can do to assist let me know. I wish I knew ocaml and the other base languages of LS!

Kevin

On 2013-03-29, at 3:19 PM, Kevin McQuiggin mcquiggi@me.com wrote:

It works! My playlists now play properly through merge_tracks() and switch().

Thanks to everyone for the assistance!!

Kevin

Sent from my iPhone

On 2013-03-29, at 13:36, Samuel Mimram notifications@github.com wrote:

Great! :)

On Fri, Mar 29, 2013 at 9:36 PM, mcquiggi notifications@github.com wrote:

New version installed, let's see what happens!

I'll let you know.

On 2013-03-29, at 1:25 PM, Samuel Mimram notifications@github.com wrote:

make and make install should be enough here since I did not change anything related to configure or Makefiles! (although it won't harm)

— Reply to this email directly or view it on GitHub.

— Reply to this email directly or view it on GitHub< https://github.com/savonet/liquidsoap/issues/46#issuecomment-15659427> .

— Reply to this email directly or view it on GitHub< https://github.com/savonet/liquidsoap/issues/46#issuecomment-15659470> .


Own the Future-Intel(R) Level Up Game Demo Contest 2013 Rise to greatness in Intel's independent game demo contest. Compete for recognition, cash, and the chance to get your game on Steam. $5K grand prize plus 10 genre and skill prizes. Submit your demo by 6/6/13. http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2


Savonet-users mailing list Savonet-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/savonet-users

— Reply to this email directly or view it on GitHubhttps://github.com/savonet/liquidsoap/issues/46#issuecomment-15689338 .

David

mcquiggi commented 11 years ago

Hi Samuel:

Thanks for the clarification, it works well!

Have a nice weekend,

Kevin

On 2013-03-31, at 2:57 AM, Samuel Mimram notifications@github.com wrote:

Yes this is expected: merge_tracks merges the tracks as long as there are some. In order to play the whole playlist once as one track you should use the playlist.merge function that I gave earlier. Does the following work for you?

def playlist.merge(uri) = pl = playlist.reloadable(uri) reload = fst(pl) s = snd(pl) s = merge_tracks(s) onend(delay=0.,fun(,_)->reload(),s) end

zzz = playlist.merge("~/radio/playlists/test.pls") s=switch([ ({0s}, zzz), ({30s}, zzz) ])

Simple scheduling:

radio = fallback(track_sensitive=false, [ s, security ] ) — Reply to this email directly or view it on GitHub.

smimram commented 11 years ago

@dbaelde The difference is that merge_tracks will loop over the whole playlist forever as one big track, whereas playlist.merge will play the whole playlist as one track and play it again as one other track, etc.