default = fallback( [switch ([ ({12h00-12h01 or 13h00-13h01 or 14h00-14h01 or 15h00-15h01 or 16h00-16h01 or 17h00-17h01 or 18h00-18h01}, mus_pr), ({6h-22h}, mus_da), ({22h-6h}, mus_ni) ]), mus_sc ])
output.alsa(bufferize=true,mksafe(buffer(default)))
<?php error_reporting(0); $mus_ni = "/srv/music/playlist/night"; $mus_da = "/srv/music/playlist/day"; $mus_pr = "/srv/music/playlist/promo"; $promo_state_file = "/srv/music/playlist/promo/promo_state.txt"; // По этому файлу будем проверять играло уже промо в этом часе или нет function scanDirectory($rootDir, $allData = array()) { $FilesExt = array( "ogg", "mp3", "wav" ); $invisibleFileNames = array( ".", "..", "promo_state.txt" ); $dirContent = scandir($rootDir); foreach ($dirContent as $key => $content) { $path = $rootDir . '/' . $content; $ext_arr = explode(".", $content); $ext = strtolower(array_pop($ext_arr)); if (!in_array($content, $invisibleFileNames)) { if (is_file($path) && is_readable($path)) { if (in_array($ext, $FilesExt)) { $allData[] = $path; } } elseif (is_dir($path) && is_readable($path)) { $allData = scanDirectory($path, $allData); } } } return $allData; } $file_promo_state = fopen($promo_state_file, "a+") or die("File promo_state does not exist!"); $promo_state = fread($file_promo_state, filesize($promo_state_file)); fclose($file_promo_state); if ((date('G') >= 6) and (date('G') <= 22)) { $directory = $mus_da; } else { $directory = $mus_ni; } if ((date('i') >= 0) and (date('i') <= 10) and ($promo_state !== date('G'))) { $directory = $mus_pr; $file_promo_state = fopen($promo_state_file, "w+"); fwrite($file_promo_state, date('G')); fclose($file_promo_state); } $mp3_files = scanDirectory($directory); $rand = mt_rand(0, count($mp3_files) - 1); $next_track = $mp3_files[$rand]; if (file_exists($next_track)) { echo $next_track; } ?>
promo_15 = once(single(some_file.mp3))
#!/usr/bin/liquidsoap -d set("init.daemon",true) set("init.daemon.pidfile",false) set("log.file.path","/var/log/liquidsoap/basic.log") set("log.stdout",true) set("log.level",3) set("server.telnet.bind_addr","127.0.0.1") set("server.telnet",true) myplaylist = mksafe(playlist(mode='normal', '/home/users/kaster1980/autodj/playlist.txt', reload=360 )) radio = myplaylist radio = mksafe(radio) radio = crossfade(start_next=6.0, fade_out=3.0, fade_in=3.0, radio) output.icecast(%mp3(bitrate=192), mount = "/live.mp3", radio, host = "localhost", port = 8000, password = "", genre="", name="", url="", description="") output.icecast(%mp3(bitrate=96), mount = "/live2.mp3", radio, host = "localhost", port = 8000, password = "", genre="", name="", url="", description=""]
#!/usr/bin/liquidsoap set("init.daemon.pidfile",true) #set("init.daemon.pidfile.path","/var/run/liquidsoap.pid") set("server.telnet",true) set("server.timeout",-10.) set("encoder.encoder.export",["artist","title"]) set("init.daemon",true) set("log.file.path","/radio/logs/liquidsoap.log") set("harbor.bind_addr","0.0.0.0") def startcast(pls) output.icecast(%mp3(samplerate = 44100, bitrate = 192), fallible = true, host = "localhost", port = 8180, url = "http://radio.ru", password = "coolpass", mount = "/autoplay", pls) end #Функция для подпихивания liquidsoap треков def my_request_function() = #Пишем информацию в лог с тэгом "rotator" log = log(label="rotator") log("Getting song") result = list.hd( get_process_lines("php /radio/scripts/rotation.php")) log("Got answer: #{result}") #Возвращаем запрос на трек в liquidsoap request.create(result) end def change_metadata_to_scr(m) = title = m["title"] artist = m["artist"] [("song","#{artist} - #{title}")] end #Функция для загрузки информации на lastfm.ru def lastfm(m) = #Пишем информацию в лог с тэгом "LastFM" log = log(label="LastFM") log("#{m['song']}") #Запускаем python-скрипт для скробблинга system("/radio/scripts/scrobbler.py #{quote(m['song'])} 300 & >/dev/null") end #Функция для загрузки информации о проигранном треке в базу данных def info2db(m)= #Запускаем python-скрипт для апдейта информации в базе данных system("/radio/scripts/db_played.py #{quote(m['song'])} #{quote(m['type'])}") end #Организуем harbor live = input.harbor(id="live", "play", port=9000, password="aga") #Меняем метаданные для живого вещания (type -> live) live = rewrite_metadata([("type","live")], live) #Плейлист у нас динамический - подсовываем треки, возвращаемые скриптом playlist = request.dynamic(id="playlist", my_request_function) #Меняем метаданные для обычных треков (type -> music) playlist = map_metadata(change_metadata_to_scr, playlist) playlist = rewrite_metadata([("type","music")], playlist) #Организуем заказы queue = request.queue(id="queue") #Меняем метаданные для заказов (type -> queue) queue = map_metadata(change_metadata_to_scr, queue) queue = rewrite_metadata([("type","request")], queue) #Настраиваем фоллбеки (обособленно, т.к. нас необходима опция track_sensitive для пары queue <-> playlist, а вот live у нас должен включаться сразу) playlist = fallback(replay_metadata=false,track_sensitive=true,[queue,playlist]) playlist = fallback(replay_metadata=false,track_sensitive=false,([fallback.skip(input=live,playlist)])) #При изменении метаданных запускаем работу двух скриптов: обновления базы проигранных ранее треков и скробблинга playlist = on_metadata(info2db, playlist) playlist = on_metadata(lastfm, playlist) startcast(playlist)