Advertisement
Guest User

SHIZAFM

a guest
Dec 6th, 2016
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 4.06 KB | None | 0 0
  1. #Русские тэги будут русскими
  2. set("tag.encodings",["UTF-8"])
  3. #Даем подрубиться через Telnet для стола заказов
  4. set("server.telnet",true)
  5. #Задаем точку подключения для ведущих
  6. set("harbor.bind_addr","0.0.0.0")
  7. #ЛОГИ!
  8. set("log.level", 3)
  9.  
  10. def update_title_live(m) =
  11.         if m["title"] == "" or m["title"] == "Unknown" then
  12.                 [("title", "SHIZAFM"),
  13.                  ("artist", "LIVE!!!")]
  14.         else
  15.                 if m["artist"] == "" or m["artist"] == "?" then
  16.                         meta = string.extract(pattern='(.+)\s+-\s+(.+)', m["title"])
  17.                         sArtist = meta["1"]
  18.                         sTitle  = meta["2"]
  19.  
  20.                         [("title", sTitle),
  21.                          ("artist", "[SHIZAFM Live] #{sArtist}")]
  22.                 else
  23.                         sArtist = string.recode(out_enc="UTF-8", m["artist"])
  24.                         sTitle = string.recode(out_enc="UTF-8", m["title"])
  25.                         [("title", sTitle),
  26.                          ("artist", "[SHIZAFM Live] #{sArtist}")]
  27.                 end
  28.         end
  29. end
  30.  
  31. def shell_escape (s) =
  32.         s = string.escape(s)
  33.         s = string.replace(pattern='\?', fun(_)->"_", s)
  34.         s
  35. end
  36.  
  37. def current_user = ref "" end
  38. def authorize (user,password) =
  39.   ret = get_process_lines("/usr/bin/python /etc/liquidsoap/auth/auth.py #{shell_escape(password)}")
  40.   ret = list.hd(ret)
  41.   log ("Подключение: PASSWORD=#{password}; RESULT=#{ret};", level=3)
  42.   if ret == "true" then
  43.         cu = get_process_output("/usr/bin/python /etc/liquidsoap/auth/userbase.py #{shell_escape(password)}")
  44.         current_user :=  cu
  45.         log ("Подключен как #{cu}", level=3)
  46.     true
  47.   else
  48.         log ("Подключение разорвано!", level=3)
  49.     false
  50.   end
  51. end
  52.  
  53. def file_closed (str) =
  54. newn = string.replace(pattern='~uname~', fun(_)->!current_user, str)
  55. system ("mv #{str} #{newn}")
  56. end
  57.  
  58. def src_Xfade(a,b)
  59.   add(normalize=false,
  60.       [ sequence([ blank(duration=2.),
  61.                    fade.initial(duration=2.,b) ]),
  62.         fade.final(duration=2.,a) ])
  63. end
  64.  
  65. live = input.harbor("live",port=8001,auth=authorize)
  66. live = map_metadata(update_title_live, live)
  67.  
  68. # Задаем плейлисты
  69. rotation = audio_to_stereo(playlist("/var/www/music/rotation"))     #Основная ротация
  70. partners = audio_to_stereo(playlist("/var/www/music/partners"))     #Партнерка
  71. jingles = audio_to_stereo(playlist("/var/www/music/djingls"))       #Джинглы
  72. fail = audio_to_stereo(single("/var/www/music/fail.mp3"))           #Ошибка
  73.  
  74. # Берем ротацию, партнерку и смешиваем в пропорции 20/1
  75. myplaylist = random(weights = [1, 20],[partners, rotation])
  76.  
  77. # Добавляем в эту смесь джинглы в пропорции 5\1 (тоесть примерно каждые 15 минут будет 1 джингл)
  78. mix = random(weights = [1, 5],[jingles, myplaylist])
  79. mix = crossfade(start_next=2.,fade_out=3.,fade_in=1.,mix) #О да! Кроссфейд!
  80. mix = mksafe(mix)
  81.  
  82. # Если плейлисты не могут играть - врубаем БнП!
  83. radio = fallback(track_sensitive=false, transitions = [src_Xfade, src_Xfade], [strip_blank(max_blank=30., live), mix])
  84. radio = fallback(track_sensitive = false, [radio, fail])
  85. #radio = fallback(track_sensitive = false, [mix, fail]) #Если мы вдруг перестанем пускать федущих в эфиры - раскомментировать!
  86.  
  87. #Врубаем радио!
  88. output.icecast(%mp3,
  89.   host = "127.0.0.1",
  90.   port = 8000,
  91.   password = "ВСТАВЬТЕ ПАРОЛЬ СЮДЫ",
  92.   mount = "/live",
  93.   name="SHIZA-FM",
  94.   description="SHIZAнутое радио",
  95.   genre="anime-music",
  96.   url="http://shizafm.com",
  97. radio)
  98.  
  99. #Пишем эфиры
  100. output.file(%mp3(bitrate=128),
  101.  "/var/www/music/archive/~uname~/%d.%m.%Y-%H:%M.mp3",
  102.  reopen_on_metadata=false,
  103.  fallible=true,
  104.  on_close=file_closed,
  105. live)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement