€
$
₴
₽
EN
RU
Vmeste.EU
Лента
Каталог
Файлы
Форумы
Услуги
Основное
Radiotalk
Пользовательское
Технологии вещания, софт, скрипты
6 •
Посмотреть все темы
liquidsoap
1
...
6
7
8
...
66
223
Игорь
@devilben
21.03.2011
Остановился на этом:
[mono]
#!/usr/local/bin/liquidsoap
set("init.daemon",true)
set("init.daemon.pidfile",false)
set("log.file.path","/var/log/liquidsoap.log")
# определяем директорию с джинглами
jingles = playlist("/data/air/jingles")
# определяем директорию с треками
music = playlist(reload=600, "/data/air/tracks")
music = mksafe(music)
# использование кроссфейдера для перехода между треками
music = crossfade( fade_out = 12.0, fade_in = 12.0, start_next = 12.0, music )
# наложение джинглов на треки, каждые 15 мин.
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]
Так нет щелчков и некрасивых "врываний" следующего трека, но кроссфейд используется всегда.
Можно конечно crossfade заменить на smart_crosfade.
Отредактировано devilben -
21.03.2011
833
metra52
@metra52
21.03.2011
а мне нужно соеденить 2 плей листа по времени. помогите как сделать. а то матерится на меня ошибками
32
Danila
@Danila
22.03.2011
от щелчка избавился просто - джинглы были в фармате wav - отквертировал в ogg и всё ок
32
Danila
@Danila
23.03.2011
как на какой-то стадии обработки вырвать поток (музыка без джинглов) и отправить на icecast??
Добавлено спустя 8 минут 17 секунд:
поставил 1.0.0 но не запускается автоматом и не подхватывает все скрипты из папки, также отсутствует в init.d от root не стартует. Где косяки? В сборке?
Или не лилеять надежды и самому вбивать в init.d?
6245
Тарас
@tarasian666
23.03.2011
а куда он идет если не на icecast? вопрос вообще бредово звучит
в init.d пишет если установлено из репозиториев, в сырцах такого нет. Или пишите сами скрипт или проще забить команду в cron
32
Danila
@Danila
23.03.2011
показываю технически:
как сделать вот так:
music = smart_crossfade(normalize(playlist(reload=600, mode="normal", "/home/radio/radio/music")))
music = mksafe(music)
music=crossfade(start_next=1.,fade_out=7.,fade_in=5.,music)
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)#вот так я хочу сделать - музыка без джинглов! канал - для себя
jingles = playlist("/home/radio/radio/jingles")
radio = smooth_add(normal=music,special=switch([
({ 00m0s or 15m0s or 30m0s or 45m0s },
jingles)]))
radio = map_metadata(append_title, radio)
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)
теперь понял?
6245
Тарас
@tarasian666
23.03.2011
технически оно работать должно, только маунт другой задать
32
Danila
@Danila
23.03.2011
автозапуск liquidsoap 1.0.0 с автоподхватом *.liq из /etc/liquidsoap/
файл без расширения поместить в /etc/init.d/ и назвать liquidsoap
Показать текст
#!/bin/sh
### BEGIN INIT INFO
# Provides: liquidsoap
# Required-Start: $remote_fs $network $time
# Required-Stop: $remote_fs $network $time
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts the liquidsoap daemon
# Description:
### END INIT INFO
user=liquidsoap
group=liquidsoap
prefix=/usr/local
exec_prefix=${prefix}
confdir=/etc/liquidsoap
liquidsoap=${exec_prefix}/bin/liquidsoap
rundir=/var/run/liquidsoap
# Test if $rundir exists
if [ ! -d $rundir ]; then
mkdir -p $rundir;
chown $user:$group $rundir
fi
case "$1" in
stop)
echo -n "Stopping channels: "
cd $rundir
for liq in *.pid ; do
if test $liq != '*.pid' ; then
echo -n "$liq "
start-stop-daemon --stop --quiet --pidfile $liq --retry 4
fi
done
echo "OK"
;;
start)
echo -n "Starting channels: "
cd $confdir
for liq in *.liq ; do
if test $liq != '*.liq' ; then
echo -n "$liq "
start-stop-daemon --start --quiet --pidfile $rundir/${liq%.liq}.pid \
--chuid $user:$group --exec $liquidsoap -- -d $confdir/$liq
fi
done
echo "OK"
;;
restart|force-reload)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart|force-reload}"
exit 1
;;
esac
думаю многим поможет
6245
Тарас
@tarasian666
23.03.2011
или в крон добавить команду @reboot /путь_к_скрипту
но не в рутовский крон, если в рутовский то @reboot su -c "/путь_к_скрипту" имя_юзера
32
Danila
@Danila
23.03.2011
а как тоже самое только в 1.0.0?
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)
6245
Тарас
@tarasian666
23.03.2011
нет, та на подобие output.icecast(%vorbis
кто-то уже писал. Но с каждой версией прилагаеться мануал, не ленитесь и его почитать, они любят что-то поменять
32
Danila
@Danila
23.03.2011
да я то не ленюсь,читаю и делаю одновременно, и просто вот:
Показать текст
output.icecast(%vorbis, radio,mount="kube-archive.ogg",id="kubeOggLow",name="KUBE Radio Archive stream",quality=10.,public=false,
host="localhost",port=8000,password=xxx,genre="kubeGenre",url="kubeUrl",description="kubeDesc",
restart=true)
и вот что из этого выходит: has no argument labeled "quality"
а качество надо позарез
Отредактировано Danila -
23.03.2011
6245
Тарас
@tarasian666
23.03.2011
ну вот, плохо значит читали )
вот пример как у меня с мп3 output.icecast(%mp3(stereo=true, samplerate=44100, bitrate=256),
48
Amelion
@Amelion
24.03.2011
icecast2 хочу через RadioBoss прикрутить управление и че то не догоню получается, что liquidsoap и не нужен - его останавливать так чтоль?
6245
Тарас
@tarasian666
24.03.2011
что куда прикрутить, какое управление? И причем тут liquidsoap вообще?
833
metra52
@metra52
24.03.2011
помогли бы мне.... эх....
6245
Тарас
@tarasian666
24.03.2011
**********
обрати внимание на схему
48
Amelion
@Amelion
24.03.2011
tarasian666
пишет:
что куда прикрутить, какое управление? И причем тут liquidsoap вообще?
Я извиняюсь, с утра пока кофе не попил, сморозил))) вопрос закрыт.
32
Danila
@Danila
24.03.2011
где косяк?
Показать текст
#!/usr/bin/liquidsoap -d
# где будут логи
set("log.file.path","/tmp/test.log")
# telnet server для использования liGUIdsoap
set("server.telnet", true)
################################
# вход с другой тачки
set("harbor.bind_addr","x.x.x.x")
set("harbor.port",9000)
set("harbor.password","xxx")
# фильтр для микрофона и вход с точки монтирования
live = mic_filter(input.harbor("live.ogg"))
# смена мета-данных при эфире
live=rewrite_metadata([("artist","SV Radio"),
("title","LIVE Stream"),
("comment","http://xx.x")],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) =
# берём настоящее название
title = m["title"]
# вставляем новое значение
[("title","#{title} - (((=xx=)))")]
end
####################################
#PLAYLIST
####################################
# загружаем плейлист - папку с *.ogg, выравнивание громкости, обновление содержимого
music = smart_crossfade(normalize(playlist(reload=600, mode="normal", "/home/radio/radio/music")))
music = mksafe(music)
# построение плейлиста с кроссфейдом
#fade_out - затухание предыдущей песни в сек
#fade_in - нарастание следующей песни в сек
radio=crossfade(start_next=1.,fade_out=7.,fade_in=7.,music)
##################здесь не работает#############
output.icecast.vorbis(
mount="Music.ogg",quality=8.,
host="localhost",port=8000,password="xx",genre="xx",
name="xx-Radio", description="xx-Radio", url="http://xx.x",
restart=true,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 и основным плей-листом
live = mic_filter(input.harbor("live.ogg"))
radiolive = mic_filter(fallback(track_sensitive=false,[live,radio]))
#############################
#ВЫХОДЫ
#############################
output.icecast.vorbis(
mount="RadioHQ.ogg",quality=8.,
host="localhost",port=8000,password="xx",genre="xx",
name="xx-Radio", description="xx-Radio", url="http://xx.x",
restart=true,radiolive)
output.icecast.vorbis(
mount="RadioLQ.ogg",quality=2.,
host="localhost",port=8000,password="xx",genre="xx",
name="xx-Radio", description="xx-Radio", url="http://xx.x",
restart=true,radiolive)
нет маунта Music.ogg в icecaste
теоретически - правильно - практически не работает
ещё может кто подсажет несколько input.harbor как сделать?
Отредактировано Danila -
24.03.2011
6245
Тарас
@tarasian666
24.03.2011
где косяк раскажет лог