# Edit this file by (un)commenting the libraries that you (don't) want to # build in order to get the corresponding features in liquidsoap. # The default file has every dependency enabled. # It is certain that you don't need everything. # If you don't know why you should have something, uncomment it, # especially if it does not build for some reason. # It is useless to add savonet packages that are not listed below, # like ocaml-fetch, ocaml-smbclient, etc. These are not dependencies of # liquidsoap. # ============================================================================ # Input/output # ============================================================================ # Cry is the lib for streaming to icecast and compatible servers. ocaml-cry # AO is portable and stable, but it does only output. #ocaml-ao # Portaudio is a portable audio library with both input and output. #ocaml-portaudio # ALSA is only for LINUX, and is sometimes not working. #ocaml-alsa # PulseAudio is a cross-plateform audio sound server. It is intended to # be a single replacement for sound support under linux, windows or OSX. #ocaml-pulseaudio # JACK is an audio connection kit, designed for low latency # and easy communication between audio applications. ocaml-bjack # Gstreamer is a library for constructing graphs of media-handling components. # It is currently used to provide V4l inputs for liquidsoap #ocaml-gstreamer # ============================================================================ # Codecs # ============================================================================ # MAD is for MP3 decoding. ocaml-mad # TAGLIB is for MP3 ID3 tag reading ocaml-taglib # LAME is for MP3 encoding. ocaml-lame # AACPLUS is for AAC+ encoding. ocaml-aacplus # OGG is for ogg/vorbis and ogg/theora encoding and decoding ocaml-ogg # VORBIS is for ogg/vorbis encoding and decoding. # you need ocaml-ogg to enable ocaml-vorbis. ocaml-vorbis # SPEEX is for ogg/speex encoding and decoding # you need ocaml-ogg to enable ocaml-speex #ocaml-speex # THEORA is for ogg/theora encoding and decoding # you need ocaml-ogg to enable ocaml-theora #ocaml-theora # SCHROEDINGER is for ogg/dirac encoding and decoding # you need ocaml-ogg to enable ocaml-schroedinger #ocaml-schroedinger # VOAACENC is for AAC encoding. #ocaml-voaacenc # FAAD for AAC decoding. ocaml-faad # FLAC is for flac, native and/or ogg (if using ocaml-ogg) # format decoding and encoding. ocaml-flac # ============================================================================ # Sound processing # ============================================================================ # LADSPA are audio plugins providing sound effects #ocaml-ladspa # SoundTouch is for changing pitch and tempo of sound #ocaml-soundtouch # Samplerate is for having better quality resampling ocaml-samplerate # ============================================================================ # Video processing # ============================================================================ # GAVL converts from and to many formats, # is very efficient and has a quality setting for # tweaking load vs. quality of the conversion. # It is the recommended module to use with video #ocaml-gavl # ============================================================================ # Sound synthesis # ============================================================================ # DSSI is a standard for synthesizer plugins #ocaml-dssi # ============================================================================ # Various modules # ============================================================================ # Xmlplaylist allow support for various xml format, such as rss, podcast, etc.. ocaml-xmlplaylist # Lastfm allow support for lastfm radios and the audioscrobbler protocol # It should be listed *after* ocaml-xmlplaylist in this file ocaml-lastfm # A library supporting the OSC protocol to have external controls # such as faders #ocaml-lo # ============================================================================ # Finally, the mandatory lib dtools, duppy and liquidsoap... # ============================================================================ ocaml-dtools ocaml-duppy ocaml-mm liquidsoap
set("harbor.bind_addr","0.0.0.0") # Some code... # This defines a source waiting on mount point # /test-harbor live = input.harbor("test-harbor",port=8080,password="xxx") # This is the final stream. # Uses the live source as soon as available, # and don't wait for an end of track, since # we don't want to cut the beginning of the live # stream. # # You may insert a jingle transition here... radio = fallback(track_sensitive=false, [live,files])
radio = switch(track_sensitive = true, [ ({0h0m0s-0h0m5s}, clock_0), ({0h0m5s-1h0m0s}, ev), ({1h0m0s-1h0m5s}, clock_1), ({1h0m5s-2h0m0s}, ev), ({2h0m0s-2h0m5s}, clock_2), ({2h0m5s-3h0m0s}, ni), ({3h0m0s-3h0m5s}, clock_3), ({3h0m5s-4h0m0s}, ni), ({4h0m0s-4h0m5s}, clock_4), ({4h0m5s-5h0m0s}, ni), ({5h0m0s-5h0m5s}, clock_5), ({5h0m5s-6h0m0s}, ni), ({6h0m0s-6h0m5s}, clock_6), ({6h0m5s-7h0m0s}, mo), ({7h0m0s-7h0m5s}, clock_7), ({7h0m5s-8h0m0s}, mo), ({8h0m0s-8h0m5s}, clock_8), ({8h0m5s-9h0m0s}, mo), ({9h0m0s-9h0m5s}, clock_9), ({9h0m5s-10h0m0s}, da), ({10h0m0s-10h0m5s}, clock_10), ({10h0m5s-11h0m0s}, da), ({11h0m0s-11h0m5s}, clock_11), ({11h0m5s-12h0m0s}, da), ({12h0m0s-12h0m5s}, clock_12), ({12h0m5s-13h0m0s}, da), ({13h0m0s-13h0m5s}, clock_13), ({13h0m5s-14h0m0s}, da), ({14h0m0s-14h0m5s}, clock_14), ({14h0m5s-15h0m0s}, da), ({15h0m0s-15h0m5s}, clock_15), ({15h0m5s-16h0m0s}, da), ({16h0m0s-16h0m5s}, clock_16), ({16h0m5s-17h0m0s}, da), ({17h0m0s-17h0m5s}, clock_17), ({17h0m5s-18h0m0s}, da), ({18h0m0s-18h0m5s}, clock_18), ({18h0m5s-19h0m0s}, da), ({19h0m0s-19h0m5s}, clock_19), ({19h0m5s-20h0m0s}, ev), ({20h0m0s-20h0m5s}, clock_20), ({20h0m5s-21h0m0s}, ev), ({21h0m0s-21h0m5s}, clock_21), ({21h0m5s-22h0m0s}, ev), ({22h0m0s-22h0m5s}, clock_22), ({22h0m5s-23h0m0s}, ev), ({23h0m0s-23h0m5s}, clock_23), ({23h0m5s-0h0m0s}, ev)
$ ./start_radio TagLib: ID3v2.4 no longer supports the frame type TDAT. It will be discarded from the tag. TagLib: MPEG::Header::parse() -- Invalid sample rate.
2012/04/30 00:03:37 [metadata.ogg:4] Invalid file extension for "/home/nivs/radio/collection/efir/daytime/jingles/Jingle_2.mp3"! 2012/04/30 00:03:37 [jingles(dot)3:4] Remaining: 0.0s, queued: 0.0s, adding: 30.0s (RID 43) 2012/04/30 00:03:37 [Radio_320:3] Connection setup was successful. 2012/04/30 00:03:37 [Radio_256:3] Connecting mount Radio_256 for source@radio.spbstu.ru... 2012/04/30 00:03:37 [Radio_256:3] Connection setup was successful. 2012/04/30 00:03:37 [Radio_192:3] Connecting mount Radio_192 for source@radio.spbstu.ru... 2012/04/30 00:03:37 [Radio_192:3] Connection setup was successful. 2012/04/30 00:03:37 [Radio_128:3] Connecting mount Radio_128 for source@radio.spbstu.ru... 2012/04/30 00:03:37 [Radio_128:3] Connection setup was successful. 2012/04/30 00:03:37 [Radio_64:3] Connecting mount Radio_64 for source@radio.spbstu.ru... 2012/04/30 00:03:37 [Radio_64:3] Connection setup was successful. 2012/04/30 00:03:37 [threads:3] Created thread "wallclock_main" (1 total). 2012/04/30 00:03:37 [clock:4] Main phase starts. 2012/04/30 00:03:37 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock. 2012/04/30 00:03:37 [mksafe:3] Switch to safe_blank. 2012/04/30 00:03:37 [safe_blank:4] Activations changed: static=[mksafe:Radio_320:Radio_320], dynamic=[mksafe:Radio_320:Radio_320]. 2012/04/30 00:03:37 [mksafe:3] Switch to safe_blank. 2012/04/30 00:03:37 [safe_blank:4] Activations changed: static=[mksafe:Radio_256:Radio_256], dynamic=[mksafe:Radio_256:Radio_256]. 2012/04/30 00:03:37 [mksafe:3] Switch to safe_blank. 2012/04/30 00:03:37 [safe_blank:4] Activations changed: static=[mksafe:Radio_192:Radio_192], dynamic=[mksafe:Radio_192:Radio_192]. 2012/04/30 00:03:37 [mksafe:3] Switch to safe_blank. 2012/04/30 00:03:37 [safe_blank:4] Activations changed: static=[mksafe:Radio_128:Radio_128], dynamic=[mksafe:Radio_128:Radio_128]. 2012/04/30 00:03:37 [mksafe:3] Switch to safe_blank. 2012/04/30 00:03:37 [safe_blank:4] Activations changed: static=[mksafe:Radio_64:Radio_64], dynamic=[mksafe:Radio_64:Radio_64].
TagLib: MPEG::Header::parse() -- Invalid sample rate.
#!/usr/local/bin/liquidsoap set("log.file.path","/home/nivs/projects/radio/technical/liquidsoap.log") set("log.level", 8) clock = single("/home/nivs/projects/radio/collection/clock/jingleT_17.mp3") mus_da = playlist("/home/nivs/projects/radio/collection/efir/test") radio = switch(track_sensitive = false, [ ({13h0m0s - 19h57m8s}, mus_da), ({19h57m0s - 19h57m8s}, clock), ({19h57m8s - 13h0m0s}, mus_da)]) radio = crossfade(start_next = 3., fade_out = 2., fade_in = 1., radio) output.icecast( %mp3(bitrate = 192), mount = "Radio_192", user = "source", password = "hackme", mksafe(radio) )
2012/05/08 20:01:24 [Radio_192:4] Enabling caching mode: active source. 2012/05/08 20:01:24 [Radio_192:3] Connecting mount Radio_192 for source@localhost... 2012/05/08 20:01:24 [decoder.mp3:4] Libmad recognizes "/home/nivs/projects/radio/collection/efir/test/Finger Eleven - Paralyzer.mp3" as MP3 (layer III, 224kbps, 44100Hz, 2 channels). 2012/05/08 20:01:24 [decoder:3] Method "MP3" accepted "/home/nivs/projects/radio/collection/efir/test/Finger Eleven - Paralyzer.mp3". 2012/05/08 20:01:24 [metadata.flac:4] Invalid file extension for "/home/nivs/projects/radio/collection/efir/test/Finger Eleven - Paralyzer.mp3"! 2012/05/08 20:01:24 [metadata.ogg:4] Invalid file extension for "/home/nivs/projects/radio/collection/efir/test/Finger Eleven - Paralyzer.mp3"! 2012/05/08 20:01:24 [test:4] Remaining: 0.0s, queued: 0.0s, adding: 30.0s (RID 2) 2012/05/08 20:01:25 [Radio_192:3] Connection setup was successful. 2012/05/08 20:01:25 [threads:3] Created thread "wallclock_main" (1 total). 2012/05/08 20:01:25 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock. 2012/05/08 20:01:25 [clock:4] Main phase starts. 2012/05/08 20:01:25 [mksafe:3] Switch to safe_blank. 2012/05/08 20:01:25 [safe_blank:4] Activations changed: static=[mksafe:Radio_192:Radio_192], dynamic=[mksafe:Radio_192:Radio_192]. 2012/05/08 20:01:25 [test:4] Remaining: 0.0s, queued: 30.0s, taking: 30.0s 2012/05/08 20:01:25 [test:3] Prepared "/home/nivs/projects/radio/collection/efir/test/Finger Eleven - Paralyzer.mp3" (RID 2). 2012/05/08 20:01:25 [mksafe:3] Switch to switch_4604 with transition. 2012/05/08 20:01:25 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:Radio_192:Radio_192]. 2012/05/08 20:01:25 [switch_4604:4] Activations changed: static=[mksafe:Radio_192:Radio_192], dynamic=[mksafe:Radio_192:Radio_192]. 2012/05/08 20:01:25 [switch_4604:3] Switch to test. 2012/05/08 20:01:25 [test:4] Activations changed: static=[switch_4604:mksafe:Radio_192:Radio_192], dynamic=[switch_4604:mksafe:Radio_192:Radio_192, switch_4604:mksafe:Radio_192:Radio_192].
2012/05/08 20:01:53 [decoder:4] Trying method "MP3" for "/home/nivs/projects/radio/collection/efir/test/Keane - Somewhere Only We Know.mp3"... 2012/05/08 20:01:53 [safe_blank:4] Content kind is {audio=2;video=0;midi=0}. 2012/05/08 20:01:53 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:Radio_192:Radio_192]. 2012/05/08 20:01:53 [mksafe:4] Activations changed: static=[Radio_192:Radio_192], dynamic=[]. 2012/05/08 20:01:53 [test:5] Queue is empty! 2012/05/08 20:01:53 [test:5] Failed to prepare track: no file. 2012/05/08 20:01:53 [Radio_192:4] Activations changed: static=[Radio_192], dynamic=[]. 2012/05/08 20:01:53 [decoder.mp3:4] Libmad recognizes "/home/nivs/projects/radio/collection/efir/test/Keane - Somewhere Only We Know.mp3" as MP3 (layer III, 192kbps, 44100Hz, 2 channels). 2012/05/08 20:01:53 [Radio_192:4] Enabling caching mode: active source. 2012/05/08 20:01:53 [decoder:3] Method "MP3" accepted "/home/nivs/projects/radio/collection/efir/test/Keane - Somewhere Only We Know.mp3". 2012/05/08 20:01:53 [metadata.flac:4] Invalid file extension for "/home/nivs/projects/radio/collection/efir/test/Keane - Somewhere Only We Know.mp3"! 2012/05/08 20:01:53 [metadata.ogg:4] Invalid file extension for "/home/nivs/projects/radio/collection/efir/test/Keane - Somewhere Only We Know.mp3"! 2012/05/08 20:01:53 [Radio_192:3] Connecting mount Radio_192 for source@localhost... 2012/05/08 20:01:53 [test:4] Remaining: 0.0s, queued: 0.0s, adding: 30.0s (RID 2) 2012/05/08 20:01:53 [Radio_192:3] Connection setup was successful. 2012/05/08 20:01:53 [threads:3] Created thread "wallclock_main" (1 total). 2012/05/08 20:01:53 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock. 2012/05/08 20:01:53 [clock:4] Main phase starts. 2012/05/08 20:01:53 [mksafe:3] Switch to safe_blank. 2012/05/08 20:01:53 [safe_blank:4] Activations changed: static=[mksafe:Radio_192:Radio_192], dynamic=[mksafe:Radio_192:Radio_192].