76

Re: liquidsoap

я такой системой тоже пользуюсь ) только у меня постоянно берет треки из  request.dynamic а там скрипт уже работает с mysql и тд

77

Re: liquidsoap

tarasian666 пишет:

немного неправильно ))

функцию задекларировали но не использовали

действительно, только сейчас заметил (на радостях жизни, что всё запустилось забыл проверить) smile)), подскажите пожалуйста что именно нужно поправить, заранее спасибо smile

78

Re: liquidsoap

вот с оф сайта

# One for dynamic jingles, mixed on top of the stream with smooth starts/ends.
jingles_dyn = jingle_meta(playlist(reload=3600,root^"jingles.dynamic"))
jingles_dyn = fallback([request.queue(id="dynq"),jingles_dyn])
s = smooth_add(normal=s,special=switch([({ 0m0s or 30m0s }, jingles_dyn)]))

79

Re: liquidsoap

вот что выдаёт smile
Stopping channels: radio.pid OK
Starting channels: radio.liq At line 45, char 26: unbound symbol jingle_meta.
OK

80

Re: liquidsoap

ну я не весь код вставил, там еще просто изменение тегов во время проигрывания джинглов
отсюда вот код http://savonet.sourceforge.net/doc-svn/dolebrai.html

81

Re: liquidsoap

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

82

Re: liquidsoap

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

83

Re: liquidsoap

ставь из svn

84

Re: liquidsoap

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

85

Re: liquidsoap

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


# Входной поток,
url = "http://onlydc.ru:9000/test"
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 16:44:23)

86

Re: liquidsoap

вот зачем копипастить с их сайта? )))
хоть бы перевел коменты

87

Re: liquidsoap

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

#!/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 дальше не могу, помогите плз

88

Re: liquidsoap

так должно работать, сам не проверял
[spoiler]
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


myplaylist = smooth_add(normal=myplaylist,special=switch([({ 0m0s or 30m0s }, jingles)]))
[/spoiler]

89

Re: liquidsoap

спасибо, пробую

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

90

Re: liquidsoap

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

91

Re: liquidsoap

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

92

Re: liquidsoap

лови полностью рабочий огромное всем спасибо, это круто smile)


#!/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)

93

Re: liquidsoap

#!/usr/local/bin/liquidsoap
set("log.file.path","/tmp/test.log")

#set("init.daemon",true)
#set("init.daemon.pidfile",false)

# функция кроссфейда, здесь желательно ни чего не менять
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(duration=start_next,fader,s)
end

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

#дневной плейлист
day     = playlist(reload=600,"/var/www/metra52/data/www/onlydc.ru/music/day.txt")
#ночной
night   = playlist(reload=600,"/var/www/metra52/data/www/onlydc.ru/music/night.txt")
#Джинглы
jingles = playlist(reload=600,"/var/www/metra52/data/www/onlydc.ru/music/jingles.txt")

myplay = switch([({ 3h-23h }, day),  ({ 23h-3h }, night)])

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

#построение плейлиста с кроссфейдом
#fade_out - затухание предыдущей песни в сек
#fade_in - нарастание следующей песни в сек

radio = mksafe(crossfade(start_next=1.,fade_out=7.,fade_in=7.,myplay))
radio = smooth_add(normal=radio,special=switch([({ 20m0s or 50m0s }, jingles)]))

#radio = random(weights = [1, 4],[jingles, myplay])

#запускаем вещалку
output.icecast(%mp3(bitrate=128),
     host = "localhost", port = 9000,
     password = "****", mount = "test",name="OnLY DanCe Radio ~ RJ^NOED ~net", description="Club Music For LIVE", genre="Club House",url="http://onlydc.ru",radio)

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

94

Re: liquidsoap

логи такие

2011/03/15 19:14:45 >>> LOG START
2011/03/15 19:14:44 [protocols.external:3] Didn't find "ufetch".
2011/03/15 19:14:44 [protocols.external:3] Found "/usr/bin/wget".
2011/03/15 19:14:45 [main:3] Liquidsoap 1.0.0-beta+svn (trunk/liquidsoap@rev8237)
2011/03/15 19:14:45 [main:3] Using: pcre=5.13.0 dtools=0.2.2 duppy=0.4.0
0.4.0 duppy.syntax=0.4.0
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
2011/03/15 19:14:45 [main:2] 
2011/03/15 19:14:45 [main:2] DISCLAIMER: This version of Liquidsoap has been
2011/03/15 19:14:45 [main:2] compiled from a snapshot of the development code.
2011/03/15 19:14:45 [main:2] As such, it should not be used in production
2011/03/15 19:14:45 [main:2] unless you know what you are doing!
2011/03/15 19:14:45 [main:2] 
2011/03/15 19:14:45 [main:2] We are, however, very interested in any feedback
2011/03/15 19:14:45 [main:2] about our development code and committed to fix
2011/03/15 19:14:45 [main:2] issues as soon as possible.
2011/03/15 19:14:45 [main:2] 
2011/03/15 19:14:45 [main:2] If you are interested in collaborating to
2011/03/15 19:14:45 [main:2] the development of Liquidsoap, feel free to
2011/03/15 19:14:45 [main:2] drop us a mail at <savonet-devl@lists.sf.net>
2011/03/15 19:14:45 [main:2] or to join the #savonet IRC channel on Freenode.
2011/03/15 19:14:45 [main:2] 
2011/03/15 19:14:45 [main:2] Please send any bug report or feature request
2011/03/15 19:14:45 [main:2] using our trac <http://savonet.rastageeks.org>.
2011/03/15 19:14:45 [main:2] 
2011/03/15 19:14:45 [main:2] We hope you enjoy this snapshot build of Liquidsoap!
2011/03/15 19:14:45 [main:2] 
2011/03/15 19:14:45 [lang:3] Did not find flac binary: flac decoder disabled.
2011/03/15 19:14:45 [lang:3] Did not find metaflac binary: flac metadata resolver disabled.
2011/03/15 19:14:45 [lang:3] Did not find faad binary: faad decoder disabled.
2011/03/15 19:14:45 [lang:3] Lastfm/audioscrobbler support was not compiled.
2011/03/15 19:14:45 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz master.
2011/03/15 19:14:45 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
2011/03/15 19:14:45 [frame:3] Targetting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
2011/03/15 19:14:45 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2011/03/15 19:14:45 [threads:3] Created thread "generic queue #1".
2011/03/15 19:14:45 [threads:3] Created thread "non-blocking queue #1".
2011/03/15 19:14:45 [djingls:3] Loading playlist...
2011/03/15 19:14:45 [djingls:3] Playlist is a directory.
2011/03/15 19:14:45 [djingls:3] Successfully loaded a playlist of 6 tracks.
2011/03/15 19:14:45 [day(dot)txt:3] Loading playlist...
2011/03/15 19:14:45 [day(dot)txt:3] No mime type specified, trying autodetection.
2011/03/15 19:14:45 [day(dot)txt:3] Playlist treated as format audio/mpegurl
2011/03/15 19:14:45 [day(dot)txt:3] Successfully loaded a playlist of 833 tracks.
2011/03/15 19:14:45 [Hard\ House:3] Loading playlist...
2011/03/15 19:14:45 [request:3] Nonexistent file or ill-formed URI "/var/www/metra52/data/www/onlydc.ru/music/Hard\\ House"!
2011/03/15 19:14:45 [Hard\ House:2] Failed when resolving playlist URI "/var/www/metra52/data/www/onlydc.ru/music/Hard\\ House"!
2011/03/15 19:14:45 [Hard\ House:3] Got an empty list: keeping the old one.
2011/03/15 19:14:45 [non-stop:3] Connecting mount non-stop for source@localhost...
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".
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".
2011/03/15 19:14:45 [non-stop:3] Connection setup was successful.
2011/03/15 19:14:45 [threads:3] Created thread "wallclock_main" (1 total).
2011/03/15 19:14:45 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock.
2011/03/15 19:14:45 [fallback_4400:3] Switch to mksafe.
2011/03/15 19:14:45 [mksafe:3] Switch to safe_blank.

95

Re: liquidsoap

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


# 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 15:49:59)

96

Re: liquidsoap

для начала output.alsa а не input ! читайте примеры внимательней
output.alsa(input.alsa())
или
output.alsa(bufferize = false,
                        input.alsa(bufferize = false))

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

97

Re: liquidsoap

а с такой ошибкой кто сталкивался?

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

98

Re: liquidsoap

metra52 конфиг в студию

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

99

Re: liquidsoap

#!/usr/local/bin/liquidsoap
set("log.file.path","/tmp/nonstop.log")

set("init.daemon",true)
set("init.daemon.pidfile",false)

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

# функция кроссфейда, здесь желательно ни чего не менять
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(duration=start_next,fader,s)
end

#дневной плейлист
day = out(playlist("/var/www/metra52/data/www/onlydc.ru/music/day.txt"))
#ночной
night = out(playlist("/var/www/metra52/data/www/onlydc.ru/music/night.txt"))
#Джинглы
jingles = out(playlist("/var/www/metra52/data/www/onlydc.ru/music/jingls.txt"))

myplay = switch([({ 3h-23h }, day),({ 23h-3h }, night)])

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


#построение плейлиста с кроссфейдом
#fade_out - затухание предыдущей песни в сек
#fade_in - нарастание следующей песни в сек

radioq = mksafe(crossfade(start_next=1.,fade_out=7.,fade_in=7.,myplay))
radio = smooth_add(normal=radioq,special=switch([({ 20m0s or 50m0s }, jingles)]))

#radio = random(weights = [1, 4],[jingles, myplay])

#запускаем вещалку
#output.icecast(%mp3,
#     host = "localhost", port = 9000,
 #    password = "****", mount = "non-stop",name="OnLY DanCe Radio ~ RJ^NOED ~net", description="Club Music For LIVE", genre="Club House",url="http://onlydc.ru",radio)

output.icecast(%mp3,
     host = "localhost", port = 9000,
     password = "***", mount = "test",name="OnLY DanCe Radio ~ RJ^NOED ~net", description="Club Music For LIVE", genre="Club House",url="http://onlydc.ru",radio)

100

Re: liquidsoap

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