ОсновноеRadiotalkПользовательское
Технологии вещания, софт, скрипты
7   •   Посмотреть все темы

liquidsoap

 

32
Danila @Danila
честно говоря - не особо я вкуриваю что именно править, можеет всё-таки межете помочь в столь интересном деянии =)
всё что осталось заставить работать - что-бы джинглы играли прямо в песне с притушенным звуком (возможно ли задать определённый временный интервал джинглам?) музыки и crossfading
изменения тегов вообще функция в моём случае не нужная
чувствую за помощь прийдётся не одно бутылочку поставить =)

0
833
metra52 @metra52
прошу помочь с установкой этой херни) не смог поставить)

0
6245
Тарас @tarasian666
ставь из svn

0
833
metra52 @metra52
помоги с наложением джинглов) и как примерно должен выглядеть скрипт заказов если на php писать.

0
833
metra52 @metra52
Учим нашу фигнюшку перекодировать поток в разные битрейты


# Входной поток,
url = "**********"
input = mksafe(input.http(url))

# первый перекодировщик: MP3 64 kbps
output.icecast(%mp3(bitrate=64,samplerate = 22050),
mount="test-64", host="localhost", port=8000, password="***",
input)
# второй перекодировщик : MP3 192 kbps
output.icecast(%mp3(bitrate=192),
mount="test-192", host="localhost", port=8000, password="***",
input)

Отредактировано metra52 - 15.03.2011
0
6245
Тарас @tarasian666
вот зачем копипастить с их сайта? )))
хоть бы перевел коменты

0
32
Danila @Danila
вот чего добился, может кому надо

#!/usr/bin/liquidsoap -d

# функция наложения
def crossfade(~start_next,~fade_in,~fade_out,s)
s = fade.in(duration=fade_in,s)
s = fade.out(duration=fade_out,s)
fader = fun (a,b) -> add(normalize=false,[b,a])
cross(fader,s)
end

# где будут логи
set("log.file.path","/tmp/test.log")

# telnet server для использования liGUIdsoap
set("server.telnet", true)

# загружаем плейлист - папку с *.ogg, выравнивание громкости, обновление содержимого
music = smart_crossfade(normalize(playlist(reload=600, mode="normal", "/home/radio/radio/music")))
music = mksafe(music)

#построение плейлиста с кроссфейдом
#fade_out - затухание предыдущей песни в сек
#fade_in - нарастание следующей песни в сек
music=crossfade(start_next=1.,fade_out=5.,fade_in=5.,music)

#запускаем вещалку
output.icecast.vorbis(
host = "localhost", port = xxxx,
password = "xxx", mount = "radio.ogg", music)

помогите с наложением джинглов на музыку, dolibrai пытался подогнать а он вообще дохлый, выдаёт ошибку на ошибке остановился на strict=true дальше не могу, помогите плз

0
6245
Тарас @tarasian666
так должно работать, сам не проверял
Показать текст

0
32
Danila @Danila
спасибо, пробую

Добавлено спустя 8 минут 12 секунд:
а как отрегулировать времямежду джинглами?

0
6245
Тарас @tarasian666
0m0s or 30m0s означает каждых 30 минут, если точнее то в 00 минут и 30 минут каждого часа

0
833
metra52 @metra52
а как сделать что бы каждые 20минут крутило? да и я чото ваще не в понятках как все это к кросфейду прикрутить

0
32
Danila @Danila
лови полностью рабочий огромное всем спасибо, это круто =))


#!/usr/bin/liquidsoap -d

# функция crossfade между треками
def crossfade(~start_next,~fade_in,~fade_out,s)
s = fade.in(duration=fade_in,s)
s = fade.out(duration=fade_out,s)
fader = fun (a,b) -> add(normalize=false,[b,a])
cross(fader,s)
end

#функция для воспроизведения джинглов во время проигрывания музыки
def smooth_add(~delay=0.5,~p=0.2,~normal,~special)
d = delay
fade.final = fade.final(duration=d*2.)
fade.initial = fade.initial(duration=d*2.)
q = 1. - p
c = amplify
fallback(track_sensitive=false,
[special,normal],
transitions=[
fun(normal,special)->
add(normalize=false,
[c(p,normal),
c(q,fade.final(type="sin",normal)),
sequence([blank(duration=d),c(q,special)])]),
fun(special,normal)->
add(normalize=false,
[c(p,normal),
c(q,fade.initial(type="sin",normal))])
])
end

# где будут логи
set("log.file.path","/tmp/test.log")

# telnet server для использования liGUIdsoap
set("server.telnet", true)

# загружаем плейлист - папку с *.ogg, выравнивание громкости, обновление содержимого
music = smart_crossfade(normalize(playlist(reload=600, mode="normal", "/home/radio/radio/music")))
music = mksafe(music)

# построение плейлиста с кроссфейдом
#fade_out - затухание предыдущей песни в сек
#fade_in - нарастание следующей песни в сек
music=crossfade(start_next=1.,fade_out=5.,fade_in=5.,music)

# загружаем джинглы - папку с *.ogg
jingles = playlist("/home/radio/radio/jingles")

#построение листа с джинглами, 0m0s or 30m0s означает каждых 30 минут, если точнее то в 00 минут и #30 минут каждого часа
radio = smooth_add(normal=music,special=switch([({ 0m0s or 30m0s }, jingles)]))

# запускаем вещалку
output.icecast.vorbis(
host = "localhost", port = xxx,
password = "xxx", mount = "radio.ogg", radio)

0
833
metra52 @metra52
  1. #!/usr/local/bin/liquidsoap
  2. set("log.file.path","/tmp/test.log")
  3. #set("init.daemon",true)
  4. #set("init.daemon.pidfile",false)
  5. # функция кроссфейда, здесь желательно ни чего не менять
  6. def crossfade(~start_next,~fade_in,~fade_out,s)
  7. s = fade.in(duration=fade_in,s)
  8. s = fade.out(duration=fade_out,s)
  9. fader = fun (a,b) -> add(normalize=false,[b,a])
  10. cross(duration=start_next,fader,s)
  11. end
  12. # telnet server для использования liGUIdsoap
  13. set("server.telnet", true)
  14. #дневной плейлист
  15. day = playlist(reload=600,"/var/www/metra52/data/www/onlydc.ru/music/day.txt")
  16. #ночной
  17. night = playlist(reload=600,"/var/www/metra52/data/www/onlydc.ru/music/night.txt")
  18. #Джинглы
  19. jingles = playlist(reload=600,"/var/www/metra52/data/www/onlydc.ru/music/jingles.txt")
  20. myplay = switch([({ 3h-23h }, day), ({ 23h-3h }, night)])
  21. def smooth_add(~delay=0.5,~p=0.2,~normal,~special)
  22. d = delay
  23. fade.final = fade.final(duration=d*2.)
  24. fade.initial = fade.initial(duration=d*2.)
  25. q = 1. - p
  26. c = amplify
  27. fallback(track_sensitive=false,
  28. [special,normal],
  29. transitions=[
  30. fun(normal,special)->
  31. add(normalize=false,
  32. [c(p,normal),
  33. c(q,fade.final(type="sin",normal)),
  34. sequence([blank(duration=d),c(q,special)])]),
  35. fun(special,normal)->
  36. add(normalize=false,
  37. [c(p,normal),
  38. c(q,fade.initial(type="sin",normal))])
  39. ])
  40. end
  41. #построение плейлиста с кроссфейдом
  42. #fade_out - затухание предыдущей песни в сек
  43. #fade_in - нарастание следующей песни в сек
  44. radio = mksafe(crossfade(start_next=1.,fade_out=7.,fade_in=7.,myplay))
  45. radio = smooth_add(normal=radio,special=switch([({ 20m0s or 50m0s }, jingles)]))
  46. #radio = random(weights = [1, 4],[jingles, myplay])
  47. #запускаем вещалку
  48. output.icecast(%mp3(bitrate=128),
  49. host = "localhost", port = 9000,
  50. password = "****", mount = "test",name="OnLY DanCe Radio ~ RJ^NOED ~net", description="Club Music For LIVE", genre="Club House",url="http://onlydc.ru",radio)

Что неверно делаю у меня не включается музыка. тоесть поток появляется а музыка не играет

0
833
metra52 @metra52
логи такие
  1. 2011/03/15 19:14:45 >>> LOG START
  2. 2011/03/15 19:14:44 [protocols.external:3] Didn't find "ufetch".
  3. 2011/03/15 19:14:44 [protocols.external:3] Found "/usr/bin/wget".
  4. 2011/03/15 19:14:45 [main:3] Liquidsoap 1.0.0-beta+svn (trunk/liquidsoap@rev8237)
  5. 2011/03/15 19:14:45 [main:3] Using: pcre=5.13.0 dtools=0.2.2 duppy=0.4.0
  6. 0.4.0 duppy.syntax=0.4.0
  7. 0.4.0 cry=0.1.6 mm=0.1.0 mad=0.4.0 flac=0.1.0 lame=0.2.4 ao=0.2.0 samplerate=0.1.1 taglib=0.1.4 faad=0.2.0 soundtouch=0.1.6 pulseaudio=0.1.1 ladspa=0.1.2
  8. 2011/03/15 19:14:45 [main:2]
  9. 2011/03/15 19:14:45 [main:2] DISCLAIMER: This version of Liquidsoap has been
  10. 2011/03/15 19:14:45 [main:2] compiled from a snapshot of the development code.
  11. 2011/03/15 19:14:45 [main:2] As such, it should not be used in production
  12. 2011/03/15 19:14:45 [main:2] unless you know what you are doing!
  13. 2011/03/15 19:14:45 [main:2]
  14. 2011/03/15 19:14:45 [main:2] We are, however, very interested in any feedback
  15. 2011/03/15 19:14:45 [main:2] about our development code and committed to fix
  16. 2011/03/15 19:14:45 [main:2] issues as soon as possible.
  17. 2011/03/15 19:14:45 [main:2]
  18. 2011/03/15 19:14:45 [main:2] If you are interested in collaborating to
  19. 2011/03/15 19:14:45 [main:2] the development of Liquidsoap, feel free to
  20. 2011/03/15 19:14:45 [main:2] drop us a mail at <savonet-devl@lists.sf.net>
  21. 2011/03/15 19:14:45 [main:2] or to join the #savonet IRC channel on Freenode.
  22. 2011/03/15 19:14:45 [main:2]
  23. 2011/03/15 19:14:45 [main:2] Please send any bug report or feature request
  24. 2011/03/15 19:14:45 [main:2] using our trac <http://savonet.rastageeks.org>.
  25. 2011/03/15 19:14:45 [main:2]
  26. 2011/03/15 19:14:45 [main:2] We hope you enjoy this snapshot build of Liquidsoap!
  27. 2011/03/15 19:14:45 [main:2]
  28. 2011/03/15 19:14:45 [lang:3] Did not find flac binary: flac decoder disabled.
  29. 2011/03/15 19:14:45 [lang:3] Did not find metaflac binary: flac metadata resolver disabled.
  30. 2011/03/15 19:14:45 [lang:3] Did not find faad binary: faad decoder disabled.
  31. 2011/03/15 19:14:45 [lang:3] Lastfm/audioscrobbler support was not compiled.
  32. 2011/03/15 19:14:45 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz master.
  33. 2011/03/15 19:14:45 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
  34. 2011/03/15 19:14:45 [frame:3] Targetting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
  35. 2011/03/15 19:14:45 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
  36. 2011/03/15 19:14:45 [threads:3] Created thread "generic queue #1".
  37. 2011/03/15 19:14:45 [threads:3] Created thread "non-blocking queue #1".
  38. 2011/03/15 19:14:45 [djingls:3] Loading playlist...
  39. 2011/03/15 19:14:45 [djingls:3] Playlist is a directory.
  40. 2011/03/15 19:14:45 [djingls:3] Successfully loaded a playlist of 6 tracks.
  41. 2011/03/15 19:14:45 [day(dot)txt:3] Loading playlist...
  42. 2011/03/15 19:14:45 [day(dot)txt:3] No mime type specified, trying autodetection.
  43. 2011/03/15 19:14:45 [day(dot)txt:3] Playlist treated as format audio/mpegurl
  44. 2011/03/15 19:14:45 [day(dot)txt:3] Successfully loaded a playlist of 833 tracks.
  45. 2011/03/15 19:14:45 [Hard\ House:3] Loading playlist...
  46. 2011/03/15 19:14:45 [request:3] Nonexistent file or ill-formed URI "/var/www/metra52/data/www/onlydc.ru/music/Hard\\ House"!
  47. 2011/03/15 19:14:45 [Hard\ House:2] Failed when resolving playlist URI "/var/www/metra52/data/www/onlydc.ru/music/Hard\\ House"!
  48. 2011/03/15 19:14:45 [Hard\ House:3] Got an empty list: keeping the old one.
  49. 2011/03/15 19:14:45 [non-stop:3] Connecting mount non-stop for source@localhost...
  50. 2011/03/15 19:14:45 [decoder:3] Method "MP3/LIBMAD" accepted "/var/www/metra52/data/www/onlydc.ru/music/House/Incognet Tribute (Original Mix).mp3".
  51. 2011/03/15 19:14:45 [decoder:3] Method "MP3/LIBMAD" accepted "/var/www/metra52/data/www/onlydc.ru/music/djingls/AntonSound@ya.ru - Only Dance Radio 2.mp3".
  52. 2011/03/15 19:14:45 [non-stop:3] Connection setup was successful.
  53. 2011/03/15 19:14:45 [threads:3] Created thread "wallclock_main" (1 total).
  54. 2011/03/15 19:14:45 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock.
  55. 2011/03/15 19:14:45 [fallback_4400:3] Switch to mksafe.
  56. 2011/03/15 19:14:45 [mksafe:3] Switch to safe_blank.

0
32
Danila @Danila
разобрался с обновлением мета-данных и добавлением текста к мета-данным


# META-данные названия песен
# Rewrite metadata on the fly using a list of (target,rule).
# @category Source / Track Processing
# @param l List of (target,value) rewriting rules
# @param ~insert_missing \
# Treat track beginnings without metadata \
# as having empty ones.
def rewrite_metadata(l,~insert_missing=true,s)
def map(m)
def apply(x)
label = fst(x)
meta = snd(x)
if list.mem_assoc(label,l) then
pattern = l[label]
(label,pattern % m)
else
(label,meta)
end
end
m = list.map(apply,m)
def add(m,x)
label = fst(x)
pattern = snd(x)
# If m does not have (label,_), then it was
# not processed previously, we have to
# add it now..
if not list.mem_assoc(label,m) then
list.append(m,[(label,pattern % m)])
else
m
end
end
list.fold(add,m,l)
end
map_metadata(map,insert_missing=insert_missing,s)
end



# Функция применяется к каждому кусочку метаданных
# A function applied to each metadata chunk
def append_title(m) =
# берём настоящее название
# Grab the current title
title = m["title"]

# вставляем новое значение
# Return a new title metadata
[("title","#{title} - (((=RADIO=)))")]
end

# Применить новые данные к названию
#В Apply map_metadata to s using append_title
radio = map_metadata(append_title, radio)

помогите с микрофоном
studioInput = input.alsa(id="studioInput",bufferize=false) -не помогает

output.icecast.vorbis(
mount="live.ogg",host="127.0.0.1",password="xxx",input.alsa(что здесь писать?)) -тоже

help!!

Отредактировано Danila - 16.03.2011
0
6245
Тарас @tarasian666
для начала output.alsa а не input ! читайте примеры внимательней
output.alsa(input.alsa())
или
output.alsa(bufferize = false,
input.alsa(bufferize = false))

кстате там пишет что может сама alsa не "сотрудничать" я б лучше использовал jack или вообще настроить input harbor и подключаться например idjc

0
833
metra52 @metra52
а с такой ошибкой кто сталкивался?

Error when initializing source at line 15, char 8-36: a source cannot belong to two clocks (cross_4408[], wallclock_ao[]).

0
32
Danila @Danila
metra52 конфиг в студию

tarasian666 а можешь поподробнее описать вариант какой-нибудь с удалённым управлением микрофоном или что-то в этом духе?, input.alsa не заработала, как не крутил

0
833
metra52 @metra52
  1. #!/usr/local/bin/liquidsoap
  2. set("log.file.path","/tmp/nonstop.log")
  3. set("init.daemon",true)
  4. set("init.daemon.pidfile",false)
  5. # telnet server для использования liGUIdsoap
  6. set("server.telnet", true)
  7. # функция кроссфейда, здесь желательно ни чего не менять
  8. def crossfade(~start_next,~fade_in,~fade_out,s)
  9. s = fade.in(duration=fade_in,s)
  10. s = fade.out(duration=fade_out,s)
  11. fader = fun (a,b) -> add(normalize=false,[b,a])
  12. cross(duration=start_next,fader,s)
  13. end
  14. #дневной плейлист
  15. day = out(playlist("/var/www/metra52/data/www/onlydc.ru/music/day.txt"))
  16. #ночной
  17. night = out(playlist("/var/www/metra52/data/www/onlydc.ru/music/night.txt"))
  18. #Джинглы
  19. jingles = out(playlist("/var/www/metra52/data/www/onlydc.ru/music/jingls.txt"))
  20. myplay = switch([({ 3h-23h }, day),({ 23h-3h }, night)])
  21. def smooth_add(~delay=0.5,~p=0.2,~normal,~special)
  22. d = delay
  23. fade.final = fade.final(duration=d*2.)
  24. fade.initial = fade.initial(duration=d*2.)
  25. q = 1. - p
  26. c = amplify
  27. fallback(track_sensitive=false,
  28. [special,normal],
  29. transitions=[
  30. fun(normal,special)->
  31. add(normalize=false,
  32. [c(p,normal),
  33. c(q,fade.final(type="sin",normal)),
  34. sequence([blank(duration=d),c(q,special)])]),
  35. fun(special,normal)->
  36. add(normalize=false,
  37. [c(p,normal),
  38. c(q,fade.initial(type="sin",normal))])
  39. ])
  40. end
  41. #построение плейлиста с кроссфейдом
  42. #fade_out - затухание предыдущей песни в сек
  43. #fade_in - нарастание следующей песни в сек
  44. radioq = mksafe(crossfade(start_next=1.,fade_out=7.,fade_in=7.,myplay))
  45. radio = smooth_add(normal=radioq,special=switch([({ 20m0s or 50m0s }, jingles)]))
  46. #radio = random(weights = [1, 4],[jingles, myplay])
  47. #запускаем вещалку
  48. #output.icecast(%mp3,
  49. # host = "localhost", port = 9000,
  50. # password = "****", mount = "non-stop",name="OnLY DanCe Radio ~ RJ^NOED ~net", description="Club Music For LIVE", genre="Club House",url="http://onlydc.ru",radio)
  51. output.icecast(%mp3,
  52. host = "localhost", port = 9000,
  53. password = "***", mount = "test",name="OnLY DanCe Radio ~ RJ^NOED ~net", description="Club Music For LIVE", genre="Club House",url="http://onlydc.ru",radio)

0
32
Danila @Danila
возможно здесь ошибка
cross(duration=start_next,fader,s)
у меня так:
cross(fader,s)

0





Согласие на обработку данных на нашем сайте

Продолжая просматривать страницу, вы соглашаетесь с использованием файлов «Cookie» и с Политикой конфиденциальности «Privacy».
Наверху или внизу страницы вы можете изменить валюту и язык по умолчанию. Английская версия сайта ещё находится в доработке и доступна не полностью.