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

liquidsoap

 

833
metra52 @metra52
Пробовал. не помогло. версия liquidsoap 1.0-beta(svn)

6245
Тарас @tarasian666
Danila пишет:

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

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

тогда ищем input harbor на оф сайте

32
Danila @Danila
может кто знает как настроить LiGUIdsoap mixer, на оф сайте ничего не нашёл, в самой проге есть следующее: A mixer is a mixing table. It has some input sources, and allows you
to select which one you want to play, tune the volume, etc

Отредактировано Danila - 18.03.2011
6245
Тарас @tarasian666
поставь дефолтную кодировку 1251 в браузере

833
metra52 @metra52
metra52 пишет:

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


Вот конфиг. орет вот такое Error when initializing source at line 15, char 8-36: a source cannot belong to two clocks (cross_4408[], wallclock_ao[]).

32
Danila @Danila
кое-что нашёл, помогите воплотить в жизнь микрофон
mix

(?id:string, [source])->source
Mixing table controllable via the telnet interface.

id (string – defaults to ""): Force the value of the source ID.
(unlabeled) ([source])

а всё вот так: radiomix = mix([radio,request.equeue(id="mic")])
mic - название "кнопочки" в liGUIdsoap
нужна помощь в подключении микрофона - какой-нить кнопочки в liGUIdsoap
описанное выше позволяет микшировать, но микрофон не выводит, а очень хочеться =(

Отредактировано Danila - 18.03.2011
32
Danila @Danila
а sam broadcaster можно прикрутить к liquidsoap не как input.http а с управлением, переключением его потока и потока с liquidsoap, громкость регулировать??

6245
Тарас @tarasian666
только через input harbor

32
Danila @Danila
а по-подробнее про input.harbor можешь рассказать? чем на него надо сигнал слать? что на другом компе ставить? где регулировать громкости? как переключать каналы?
при попытке настроить у меня слетают маунты все на icecast'е

Отредактировано Danila - 18.03.2011
6245
Тарас @tarasian666
он работает по принципу sc_trans2 подключаетесь к liquidsoap как к серверу, а он переключает (если настроить) с плейлиста на то что подключено к harbor
к нему можно подключатся любым источником, sam-ом или винампом и тд

32
Danila @Danila
по поводу input.harbor:
set("server.telnet", true)
#localhost - цифрами - например 192.168.0.1
set("harbor.bind_addr","localhost")
set("harbor.port",9000)
set("harbor.password","pass")
live = input.harbor("live.ogg")
radiolive = fallback(track_sensitive=false,[live,radio])
в sam broadcaster - адрес сервака моунт - /live.ogg
порт - 9000
но приходиться делать рестарт энкодера ( выпадает с ошибкой при остановке воспроизведения) в сэме для перехвата потока на себя

Отредактировано Danila - 20.03.2011
32
Danila @Danila
конфиг 0.9.2
вот что получилось =)
классная вещь
подведём итоги:

#!/usr/bin/liquidsoap -d

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

# telnet server для использования liGUIdsoap
set("server.telnet", true)
set("harbor.bind_addr","192.168.100.61")
set("harbor.port",9000)
set("harbor.password","1475963")

################################
# вход с другой тачки
live = input.harbor("live.ogg")
live=rewrite_metadata([("artist","XX-Radio"),
("title","LIVE Stream"),
("comment","http://xx.com")],live)
################################

####################
#ПОСТОЯННЫЕ ФУНКЦИИ
####################
# функция наложения
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

####################
#META
####################
# META-данные название песен
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

# к каждому кусочку метаданных прибаляем слово
def append_title(m) =
# берём настоящее название
# Grab the current title
title = m["title"]
# вставляем новое значение
[("title","#{title} - (((=Radio=)))")]
end

####################################
#PLAYLIST
####################################
# загружаем плейлист - папку с *.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=7.,fade_in=5.,music)

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

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

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

# добавляем переключение между harbor live и основным плей-листом
radiolive = fallback(track_sensitive=false,[live,radio])

#############################
#ВЫХОДЫ
#############################
output.icecast.vorbis(
mount="High-quality.ogg",quality=8.,
host="localhost",port=8000,password="pass",genre="xx",
name="xx", description="xx", url="http://xx.com",
restart=true,radiolive)

output.icecast.vorbis(
mount="Low-quality.ogg",quality=2.,
host="localhost",port=8000,password="pass",genre="xx",
name="xx", description="xx", url="http://xx.com",
restart=true,radiolive)

теперь буду добивать 1.0.0 версию

32
Danila @Danila
а можно ли как-то так сделать?:
output.icecast.vorbis(
mount="High-quality.ogg",quality=8.,
host="localhost",port=8000,password="pass",genre="xx",
name="xx", description="xx", url="http://xx.com",
restart=true,music)
именно так НЕ работает
интересует именно вот что:как на какой-то стадии обработки вырвать поток и отправить на icecast?

как сделать crossfading при смене источника между harbor.input и radio?
и ещё:как собрать 2 потока в 1 (одновременное воспроизведение)?
и как регулировать громкость этих потоков в liGUIdsoap?
возможна ли полная фильтрация голоса (отсеивание) с потока?
проблема: есть щелчёк при проигрывании джинглов в конце при поднятии громкости музыки, может кто знает как убрать?(джинглы записывались в студии звукозаписи, в них самих всё ок =) )
=) так много вопросов, сам не ожидал, но всё таки liquidsoap - классный зверь=)
только не надо меня отправлять на оф сайт - там я этого не нашёл =)

Отредактировано Danila - 20.03.2011
48
Amelion @Amelion
Народ, плиз кто нибудь пробовал выводить на сайт - трек, что играет и последние 10, как это осуществить то?

Отредактировано Amelion - 21.03.2011
6245
Тарас @tarasian666
вам в раздел "скрипты для..."

48
Amelion @Amelion
tarasian666 пишет:

вам в раздел "скрипты для..."

что для?

6245
Тарас @tarasian666
icecast или shoutcast в зависимости что у вас установлено

48
Amelion @Amelion
стоит Icecast2

6245
Тарас @tarasian666
Danila пишет:

как сделать crossfading при смене источника между harbor.input и radio?

так же как и между песен, правда у меня пока удалось сделать кроссфейд только "в одну сторону" при подключении или отключении
Danila пишет:

и ещё:как собрать 2 потока в 1 (одновременное воспроизведение)?

smooth_add например
Danila пишет:

и как регулировать громкость этих потоков в liGUIdsoap?

mix.py но gui у меня кажеться не работает
Danila пишет:

возможна ли полная фильтрация голоса (отсеивание) с потока?

если найдете подходящий плагин ladspa и прикрутите его туда
Danila пишет:

проблема: есть щелчёк при проигрывании джинглов в конце при поднятии громкости музыки, может кто знает как убрать?

а каким методом джинглы добавляються?

223
Игорь @devilben
Danila пишет:

проблема: есть щелчёк при проигрывании джинглов в конце при поднятии громкости музыки

У меня тоже самое было, только не с джинглами а с переходом между треками. Если я правильно понял, то функции описывать в скрипте не нужно, вот мой конфиг:

[mono]
#!/usr/local/bin/liquidsoap
#*Liquidsoap 1.0.0-beta+svn (trunk/liquidsoap@rev8237)*#

set("init.daemon",true)
set("init.daemon.pidfile",false)
set("log.file.path","/var/log/liquidsoap.log")

jingles = playlist("/data/air/jingles")

music = smart_crossfade(normalize(playlist(reload=600, "/data/air/tracks")))
music = mksafe(music)

radio = smooth_add(normal=music,special=switch([({ 00m0s or 15m0s or 30m0s or 45m0s }, jingles)]))

#######################OUTPUT#######################
# выход на Icecast2
##
output.icecast(
%mp3,
mount="/myradio",
host="127.0.0.1", port=8000,
password="mypasswd",
genre="various",
url="http://www.site.com",
description="My Best Radio",
name="My Best Radio",
radio
)
[/mono]

Джинглы в треках "всплывают", crossfading есть, но он как то сам решает когда нужно быть а когда нет, что и видно из логов:

[mono]
[tracks:3] Prepared "/data/air/tracks/Oomph!-Ready Or Not (I'm Coming).mp3" (RID 2).
[src_4222:3] Analysis: -nandB / -43.148390dB (5.00s / 2.00s)
[smart_crossfade:3] Old <= medium, new <= medium and |old-new| <= margin.
[smart_crossfade:3] Old and new source are not too loud and close.
[smart_crossfade:3] Transition: crossed, fade-in, fade-out.

[tracks:3] Prepared "/data/air/tracks/In Flames-Alias.mp3" (RID 5).
[src_4222:3] Analysis: -nandB / -18.525919dB (5.01s / 1.99s)
[smart_crossfade:3] new >= old + margin, old <= medium and new <= high.
[smart_crossfade:3] Do not fade if it's already very low.
[smart_crossfade:3] Transition: crossed, no fade.
[/mono]

Добавляю:
[mono]music=crossfade(start_next=1.,fade_out=7.,fade_in=5.,music) [/mono]
и появляются эти мерзкие щелчки.
Видимо нужно юзать что то одно, либо crossfade либо smart_crossfade