451

Re: liquidsoap

по логике он будет воспроизводить 10 песен из musicold, 2 песни из musicnew и одну песню из musicny

PS
нет необходимости накладывать на каждый плейлист  smart_crossfade(normalize
можно только на music1

452

Re: liquidsoap

пишет devilben:

Подскажите как побороть такую багу, если кто знает:
При добавлении чего либо через smooth_add ломаются теги. То есть, в момент "микширования" вставляется какой то левый тег, а хотелось бы чтоб выводился по прежнему тег из основного источника.
Вот пример конфига:

#!/usr/local/bin/liquidsoap
set("init.daemon",true)
set("log.file.path","/var/log/liquidsoap/liquidsoap.log")
set("init.daemon.pidfile.path","/var/run/liquidsoap/liq.pid")

jingles = playlist(reload=9000,"/data/air/jingles") #джинглы которые всплывают по времени
promo = playlist(reload=9000,"/data/air/promo") #джинглы которые просто вставляет в ротацию
music = playlist(reload=9000,"/data/air/music") #основная муз. библиотека
music = mksafe(music)

music = rotate(weights = [1, 11],[promo, music]) #добавление джинглов в ротацию
music = crossfade( fade_out = 4.0, fade_in = 3.0, start_next = 3.0, music ) #кроссфейд треков

radio = smooth_add(normal=music,special=switch([({ 00m0s or 30m0s }, jingles)])) #добавление джинглов по времени

#выход на icecast2#

    output.icecast(
       %mp3, 
        mount="/listen", 
        host="127.0.0.1", port=8000,
        password="*****",
        genre="Other",
        url="http://domain.com",
        description="Cool Internet Radio",
        name="Mega Radio",
        radio
     )

Нашел похожую проблему в рассылке Liquidsoap, там говорится что нужно использовать  map_metadata, но как - не догоняю пока.

у меня всё, что связано с мета сделано так:

#постоянная функция, мета-данные
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 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
    
# добавляем " - (((=SV=)))"
def append_title(m) =
    title = m["title"]
    [("title","#{title} - (((=SV=)))")]
end

#и вот map_metadata
music5 = map_metadata(append_title, music4)

и кстати тут тоже проблемка - вместо того, чтобы писать "title","#{title} - (((=SV=))), пишет "title","#{title} - (((=SV=)))  - (((=SV=)))  - (((=SV=)))  - (((=SV=))) до бесконечности smile), подскажите, как решить

Отредактировано Danila (25-12-2011 19:42:02)

453

Re: liquidsoap

Показать / Cкрыть текст

спасибо, помогло, теперь у меня так

Показать / Cкрыть текст

454

Re: liquidsoap

пишет Danila:

у меня всё, что связано с мета сделано так:
Код:

#постоянная функция, мета-данные
def rewrite_metadata(l,~insert_missing=true,s).....
и кстати тут тоже проблемка - вместо того, чтобы писать "title","#{title} - (((=SV=))), пишет "title","#{title} - (((=SV=)))  - (((=SV=)))  - (((=SV=)))  - (((=SV=))) до бесконечности

Это ваш конфиг мыла? Зачем в него пишете паттерны? Эти "постоянные функции" уже там есть, они переопределяются в конфиге, со своими значениями, двумя строчками.
С рерайтом метаданных на кастомные по любому источнику у меня проблем нет, в этом просто нет необходимости. У меня проблема в сохранении метаданных текущего трека в момент добавления джингла методом smooth_add.

455

Re: liquidsoap

так как правильно теги побороть, сейчас опять вещание тормознулось в логах вот что последнее

2011/12/26 15:23:13 [src_4887:3] Switch to ngring with forgetful transition.

Удалили все теги переименовал се файлы в цифры

в итоге вот это в конце лога

2012/01/01 05:21:30 [decoder:3] Decoder MP3 chosen for "/home/ftp/D3/Radio/ng/382.mp3".
2012/01/01 05:21:40 [ng:3] Finished with "/home/ftp/D3/Radio/ng/599.mp3".
2012/01/01 05:21:40 [ng:3] Prepared "/home/ftp/D3/Radio/ng/382.mp3" (RID 48).

и все опять соап стоит, хелп ми плиз???

Отредактировано Amelion (01-01-2012 14:47:26)

456

Re: liquidsoap

почему liquidsoap может ругаться так на вполне обычную и даже необходимую скобку?

radioone# sh /usr/radio2.sh
/usr/radio2.sh: 2: Syntax error: "(" unexpected

первые три строчки скрипта:

#!/usr/local/bin/liquidsoap/
music = normalize(playlist(mode="randomize", "/data/air/radio1"))
radio = crossfade(fade_out = 3.0, fade_in = 2.0, start_next = 1.0, music)

457

Re: liquidsoap

потому что не надо запускать через шелл тем более уже в файле есть #!/usr/local/bin/liquidsoap/ (и то не правильно, в конце должно быть без слэша)
возможно поэтому считает скрипт шелловским, а не "мыльным". А синтаксис разный вот и ругаеться

458

Re: liquidsoap

Добрый день!

У меня вопрос: как сделать, чтобы в определенное время добавлялся в очередь следующей песней определенный файл? Допустим, наступает 59m15s и надо, чтобы после текущей играющей песни сыграла, допустим, отбивка?

Заранее благодарю за помощь!

459

Re: liquidsoap

чтоб сработало такое на 100% я б рекомендовал внешними средставми в определенное время пускать в queue через telnet нужную, допустим, отбивку
может и возможно сделать это только средствами liquidsoap но это будет сложнее или не будет работать на 100%

460

Re: liquidsoap

Благодарю! Кстати, никак не могу найти в документации про управление через telnet...

461

Re: liquidsoap

там все просто и интуитивно, подключаемся клиентом telnet пишем help и выводит список доступных команд, кол-во которых также зависит от того что в скрипте liquidsoap задействовано

когда знаем нужные команды делаем скрипт, например на php вообще просто - подключиться через fsockopen, дальше шлем команды fwrite и тд

462

Re: liquidsoap

Благодарю за помощь!

UPD. А порт где то указывается или он всегда 1234?

UPD. Ой, все, нашел в настройках:)

Отредактировано Azat (05-01-2012 01:24:46)

463

Re: liquidsoap

Блин, что то не хочет у меня работать telnet... Точнее он работает через встроенную утилиту, а через php - нет! Вот код:

<?php

$telnet = fsockopen("127.0.0.1", "1234");

if($telnet === false) {
    die("Плохо");
}

while(!feof($telnet)) {
    $out .= fgets($telnet, 1024);
}

echo $out;

fwrite($telnet, "request.push /home/music/otbivky/02.mp3");

fclose($telnet);

?>

Пишет следующее: Connection timed out.. Bye!

Заранее благодарю за помощь!

PS. Файл php запускаю через Apache2, на том же сервере, что и liquidsoap

Отредактировано Azat (05-01-2012 04:05:21)

464

Re: liquidsoap

пробуй ставить таймаут в fsockopen
$fp = fsockopen("127.0.0.1", 1234, $errno, $errstr, 30);

я использовал не fgets а fread и не  использоваk while
echo fread($fp, 10);

465

Re: liquidsoap

Блин, не хотелось бы конечно таких задержек... Через консоль то моментально конектит. Ну что делать, сейчас попробую, спасибо!

466

Re: liquidsoap

Неа, не хочет. Даже при таймауте 180 не хочет. Мне кажется, тут дело в telnet, а не в php. Ведь если бы был действительно таймаут, то php выдал бы варнинг, или функция вернула бы false, но ни того, ни этого нет, ведь этот текст, "Connection timed out.. Bye!" приходит из сокета, если закомментировать чтение, то ничего нет. Вот текущий код:

<?php

$telnet = fsockopen("127.0.0.1", "1234", $errno, $errstr, 180);

if($telnet === false) {
    die("Плохо");
}

/*while(!feof($telnet)) {
    $out .= fgets($telnet, 1024);
}*/

echo fread($telnet, 40);

fwrite($telnet, "request.push /home/music/otbivky/02.mp3");

fclose($telnet);

?>

PS. Пробовал с таймаутом 30 и 180. Результат один и тот же: пишет, что таймаут гораздо раньше, секунд через 10, значит, это не таймаут.

Заранее благодарю!

UPD. Ой, я кажется понял. Он не выводит приглашение, он выводит "Connection timed out.. Bye!" и то же самое он выводит, если в консоли не делать что то 10 секунд, и после этого отключается. Странно, почему он не выводит "Escape character is '^]'." и тд. Сейчас буду разбираться.

Отредактировано Azat (05-01-2012 15:16:28)

467

Re: liquidsoap

вот код который работает у меня

<?php

$fp = fsockopen("127.0.0.1", 1234, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    #$out = "queue.push /tmp/plupload/09 - Never Shall Be Again.mp3\r\n";
    $out = "queue.push ";
    $out .= "/var/www/music/Nargaroth/Nargaroth - Spectral Visions Of Mental Warfare  2011/Nargaroth - Spectral Visions Of Mental Warfare  2011/01 - Odin's Weeping for Jordh.mp3";
    $out .= "\r\n";
    usleep(500);
    fwrite($fp, $out);
    echo fread($fp, 10);
    usleep(500);
    $out = "quit\r\n";
    fwrite($fp, $out);
    echo "<br>".fread($fp, 10);
    fclose($fp);
}



?>

468

Re: liquidsoap

Да, сам только что пришел к выводу, что надо поставить небольшую задержку и "нажать" enter с помощью "\r", большое спасибо за помощь!

469

Re: liquidsoap

У меня и без задержки работает)
P.S Вывел список следующих треков на главную. штук 6, мне хватает))) Осталось просшедшие сделать) и еще бы неплохо что бы скинули скриптик для стола заказов для Liquidsoap

Отредактировано metra52 (07-01-2012 01:38:00)

470

Re: liquidsoap

пишет metra52:

и еще бы неплохо что бы скинули скриптик для стола заказов для Liquidsoap

сканируешь нужную папку, выводишь все на сайт, при клике на определенный трек делаешь через телнет queue.push
делов то на пару минут

471

Re: liquidsoap

пишет tarasian666:

пишет metra52:

и еще бы неплохо что бы скинули скриптик для стола заказов для Liquidsoap

сканируешь нужную папку, выводишь все на сайт, при клике на определенный трек делаешь через телнет queue.push
делов то на пару минут

Ты как вседа все мериишь по своим возможностям=)
у меня на платформе где стоит liquidsoap и папка с музыкой нет веб сервера) и достучаться туда можно только по FTP или же через Radmin

Отредактировано metra52 (07-01-2012 13:40:51)

472

Re: liquidsoap

Не, это не задержки были, это была тупость моя big_smile А так задержки перед каждой командой полсекунды, не заметно. Сделал пока управление нон-стопом для своих, работает:) Но не представляю, как сделать вывод следующих треков... Я, конечно, могу получить список из плейлиста music, но тогда будет без учета queue.push. Подскажите, как можно это реализовать:) Вот скрипт:

#!/usr/local/bin/liquidsoap -d
set("tag.encodings", ["UTF-8", "CP1251"])
set("server.telnet", true)
set("server.telnet.port", 1234)

music = mksafe(playlist(reload = 600, "/home/music/music"))
jingles = mksafe(playlist(reload = 600, "/home/music/jingles"))
jingles = rewrite_metadata([("title","бешеные улитки отдыхают вместе с нами!"),
                                         ("artist", "Crazy Radio")],jingles)
short = mksafe(playlist(reload = 600, "/home/music/short"))
short = rewrite_metadata([("title","бешеные улитки отдыхают вместе с нами!"),
                                         ("artist", "Crazy Radio")],short)
jinglesnewyear = mksafe(playlist(reload = 600, "/home/music/jinglesnewyear"))
jinglesnewyear = rewrite_metadata([("title","бешеные улитки отдыхают вместе с нами!"),
                                         ("artist", "Crazy Radio")],jinglesnewyear)
chart = mksafe(playlist(reload = 600, "/home/music/chart"))

radio = rotate(weights = [3, 1, 2, 1, 2, 1], [music, jingles, music, jinglesnewyear, chart, short])

radio = fallback([request.queue(id = "otbivka"), request.queue(id = "request"), radio])

radio = smart_crossfade(radio)

live = input.harbor("onair", port = 8095, password = "***", metadata_charset = "CP1251")
#live = input.http("http://82.146.58.205:8000/onair")

def append_title(m) =
    title = m["title"]
    [("title","#{title} - Crazy Radio")]
end

radio = map_metadata(append_title, radio)

#radio = smooth_add(delay = 2.0, p = 0.0, normal = radio, special = live)
radio = fallback(track_sensitive = false, [live, radio])

output.icecast(%mp3(bitrate=128), host = "localhost", icy_metadata = "true", port = 8000, mount = "crazy", description = "The Craziest Radio On The World!", name = "Crazy Radio", url = "http://www.crazyradio.net", genre = "Varios", password = "***", mksafe(normalize(radio)))
output.icecast(%mp3(bitrate=96), host = "localhost", icy_metadata = "true", port = 8000, mount = "crazy96", description = "The Craziest Radio On The World!", name = "Crazy Radio", url = "http://www.crazyradio.net", genre = "Varios", password = "***", mksafe(normalize(radio)))
output.icecast(%mp3(bitrate=24), host = "localhost", icy_metadata = "true", port = 8000, mount = "crazy24", description = "The Craziest Radio On The World!", name = "Crazy Radio", url = "http://www.crazyradio.net", genre = "Varios", password = "***", mksafe(normalize(radio)))

music.next не предлагать, он без учета заказов работает:) Спасибо заранее!

Отредактировано Azat (07-01-2012 14:54:49)

473

Re: liquidsoap

пишет metra52:

Ты как вседа все мериишь по своим возможностям=)
у меня на платформе где стоит liquidsoap и папка с музыкой нет веб сервера) и достучаться туда можно только по FTP или же через Radmin

ну так как ты вообще собираешься делать стол заказов? Каждый раз дергать через телнет весь плейлист?

Ни кто не мешает достучатся на стороне вебсервера через фтп чтоб получить список треков

474

Re: liquidsoap

но ни то ни другое не выход если это будет стол заказов не для одного человека

475

Re: liquidsoap

пишет tarasian666:

но ни то ни другое не выход если это будет стол заказов не для одного человека

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