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

Скрипты PAL для Sam Broadcaster

 

10
Тарасов @Тарасов_Александр
Falcon пишет:

[quote=Тарасов Александр]Ребята, подскажите, каким скриптом проверять Queue на наличие треков?

Сценарий такой:

Скрипт зацикливается и проверяет есть ли очередь в Queue, если треков 0 или 1 то добавляет рендомом трек из категории в очередь. Все! Получается в Queue всегда будет очередь из 2-х треков и деки не будут молчать. Заранее спасибо!


А зачем писать для этого пал скрипт? Чем обычный ротатор не устраивает? Он отлично с этим справится[/quote]

Имеешь в виду AutoDJ? Он не подойдет, т.к. играет из всех категорий в плейлисте, а не конкретно из заданного, да и ко всему по времени планировщик добавляет треки в очередь Queue. В общем подробно это выглядит так:

Играет очередь Queue заданная DJ-ем, все окей. Скрипт проверяет, если ли треки в Queue, гуру Leff27 подсказал, спасибо ему за это:

PAL.Loop := True;
if (Queue.Count < 2) then
begin
...
end;
PAL.WaitForPlayCount(2);


если треков меньше 2 то добавляем из категории любой трек в очередь и пока DJ не вернется, в очереди всегда будет минимум 2 трека, в общем шарманка не заглохнет. Скрипт для этого нужен еще потому, что в определенное время срабатывает планировщик и докидывает в очередь еще плейлист в Top Queue

По планировщику понятно, просто в заданное время он кидает плейлист в ТОР очереди, а знает ли кто, что дописать, чтобы перед плейлистом добавился джингл, причем без наезда трека на трек.

Получается, скрипт добавил джинг, он отыграл и тут же пошли треки по добавленному плейлисту. Подскажите, кто силен в этих вопросах. Спасибо

Отредактировано Тарасов_Александр - 22.09.2012
727
Leff27 @Leff27
[quote=Тарасов Александр]
Falcon пишет:

[quote=Тарасов Александр]Ребята, подскажите, каким скриптом проверять Queue на наличие треков?

Сценарий такой:

Скрипт зацикливается и проверяет есть ли очередь в Queue, если треков 0 или 1 то добавляет рендомом трек из категории в очередь. Все! Получается в Queue всегда будет очередь из 2-х треков и деки не будут молчать. Заранее спасибо!

.....
Получается, скрипт добавил джинг, он отыграл и тут же пошли треки по добавленному плейлисту. Подскажите, кто силен в этих вопросах. Спасибо[/quote][/quote]

Лучше добавлять не из категорий, а из папок, т.к. если в категориях сэма много треков, личный опыт(перепробовал около 5 версий сэма), то появляются затыки и лаги...
Я делал так, с (smLemmingLogic, EnforceRules) можешь поэкспериментировать, другие варианты найдешь в Шудлере(правила ротации/добавления)

PAL.Loop := True;
if (Queue.Count < 3) then
begin
SubDir['C:\Put\Na\Latinice\Jingles'].QueueTop(smLemmingLogic, EnforceRules);
SubDir['C:\Put\Na\Latinice\Songs'].QueueBottom(smLemmingLogic, EnforceRules);
SubDir['C:\Put\Na\Latinice\Songs'].QueueBottom(smLemmingLogic, EnforceRules);
end;
PAL.WaitForPlayCount(3);

Отредактировано Leff27 - 22.09.2012
10
Тарасов @Тарасов_Александр
Узнал, спасибо, что в Playlist Rotation Rules можно настроить правила ротации, хм, ну это конечно большое преимущество перед скриптом, главное, конечно, что возможность повтора трека сокращается правилом и можно указать и категорию и как советует из опыта Leff27 папку. Интересно, а когда запущен AutoDJ можно ли в Queue добавлять в Тор треки из папки в заданное время по средствам планировщика?

И еще вопрос почему AutoDJ жалуется? Треков в листе достаточно, хм, в чем дело?

SAM was unable to queue a song after 20 tries. This can be caused by incorrect playlist rotation rules or having too few files in your media library. Virtual DJ mode has been set to "Queue mode" so you can fix this problem. (Remember to set the Virtual DJ back to "Auto DJ" mode after you have fixed the problem.)

727
Leff27 @Leff27
В queue нет треков, а все треки из категорий он уже проиграл и они не подходят под правила ротации(нужно больше треков)

Можно добавлять, этим же скриптом, только в качестве задержки ставим "дожидаться часа", например:

PAL.Loop := True;
PAL.WaitForTime('00:30:00'); // Ждем 00:30:00 и запускаем или например так PAL.WaitForTime('+00:30:00'); // Каждые 30 минут
SubDir['C:\Put\Na\Latinice\Jingles'].QueueTop(smLemmingLogic, EnforceRules);

10
Тарасов @Тарасов_Александр
Leff27 пишет:

В queue нет треков, а все треки из категорий он уже проиграл и они не подходят под правила ротации(нужно больше треков)

Можно добавлять, этим же скриптом, только в качестве задержки ставим "дожидаться часа", например:

PAL.Loop := True;
PAL.WaitForTime('00:30:00'); // Ждем 00:30:00 и запускаем или например так PAL.WaitForTime('+00:30:00'); // Каждые 30 минут
SubDir['C:\Put\Na\Latinice\Jingles'].QueueTop(smLemmingLogic, EnforceRules);


Отлично, попробую. Большущие спасибо светлой голове Leff27 очень помог. Вот думаю еще в самих правилах поковыряться, сокращу время повтора, посмотрю как он отреагирует. Кстати в конфиге такой код, все понимают что он говорит?

Cat['All music'].QueueBottom(smLemmingLogic, EnforceRules);
Cat['Music (All)'].QueueBottom(smLRPA, EnforceRules);
Cat['Music (All)'].QueueBottom(smWeighted, EnforceRules);


Вызывает вопрос это:

smLemmingLogic
smLRPA
smWeighted


и что значит Cat['Music (All)']... ? Вся музыка, какая? Что это за категория? Можно ли снести все это к чертям и оставить только Cat['All music'].QueueBottom(smLemmingLogic, EnforceRules); ?

BARKLAY(WOLF) писал так:

Cat['Tracks'].QueueBottom(smRandom, EnforceRules); вместо Cat['All music'].QueueBottom(smLemmingLogic, EnforceRules);

727
Leff27 @Leff27
[quote=Тарасов Александр]
Leff27 пишет:

В queue нет треков, а все треки из категорий он уже проиграл и они не подходят под правила ротации(нужно больше треков)

Можно добавлять, этим же скриптом, только в качестве задержки ставим "дожидаться часа", например:

PAL.Loop := True;
PAL.WaitForTime('00:30:00'); // Ждем 00:30:00 и запускаем или например так PAL.WaitForTime('+00:30:00'); // Каждые 30 минут
SubDir['C:\Put\Na\Latinice\Jingles'].QueueTop(smLemmingLogic, EnforceRules);


Отлично, попробую. Большущие спасибо светлой голове Leff27 очень помог. Вот думаю еще в самих правилах поковыряться, сокращу время повтора, посмотрю как он отреагирует. Кстати в конфиге такой код, все понимают что он говорит?

Cat['All music'].QueueBottom(smLemmingLogic, EnforceRules);
Cat['Music (All)'].QueueBottom(smLRPA, EnforceRules);
Cat['Music (All)'].QueueBottom(smWeighted, EnforceRules);


Вызывает вопрос это:

smLemmingLogic
smLRPA
smWeighted


и что значит Cat['Music (All)']... ? Вся музыка, какая? Что это за категория? Можно ли снести все это к чертям и оставить только Cat['All music'].QueueBottom(smLemmingLogic, EnforceRules); ?

BARKLAY(WOLF) писал так:

Cat['Tracks'].QueueBottom(smRandom, EnforceRules); вместо Cat['All music'].QueueBottom(smLemmingLogic, EnforceRules);[/quote]

Это
smLemmingLogic
smLRPA
smWeighted

правила ротации, т.е. как выбирать, по какому признакому, о каждом есть в шудлере при выборе или в документации по SAMу

В Cat['Music (All)'] я точно не помнЮ, но вродебы можно взять все, что есть в любой категории, Cat['All music'] взять из папки(категории) All music, Cat['Tracks'] - взять из категории Tracks

^ точно не уверен

10
Тарасов @Тарасов_Александр
В общем снес к чертям
Cat['All music'].QueueBottom(smLemmingLogic, EnforceRules);
Cat['Music (All)'].QueueBottom(smLRPA, EnforceRules);
Cat['Music (All)'].QueueBottom(smWeighted, EnforceRules);

оставил только
Cat['All music'].QueueBottom(smRandom, EnforceRules);
Все работает вроде, треки подкидывает из категории рендомом используя правила, причем роли классная вещь, есть какая-то гарантия того, что не будет совпадений по исполнителю или треку. Планировщик тоже работает, только заметил особенность, он не добавляет треки из папки, если они ранее не были в базе, думаю наверное создать отдельную категорию для шеулдера (планировщик событий) и уже от туда планировщик будет дергать. В общем, тестирую, проверяю пока, идеально настроенная автоматика заменить временное отсутствие DJ-я.

Осталось теперь разобраться еще в пару вопросах:

1. Планировщик должен добавлять в заданное время категорию с треками в Тор, но перед этими треками должен отыграть конкретный джингл (это обсуждалось кажется тут, попробую найти) но вот еще задача, треки в SAM наезжают друг на друга в момент перехода, а надо чтобы на Джингл не наезжал предыдущий трек и после тоже не было перехда, в общем Джинг отыгрывает чисто без стандартного перехода, а потом все как обычно.

2. Каждые 3 часа играет Джингл по верх музыки (видел как кто-то решал задачу AUX-ом), можно сделать немного умнее, чтобы отыграл в начале след-го трека, т.е. ждет 3 часа и начала трека, как-то так.

3. Кто как решает вопрос резервирования вещания, на случай если например ночью вырубили свет в студии, UPS сел, а генератор не завелся, SAM потух и эфире озарилась тишина. Есть какие-нибудь решения? Поделитесь плз. опытом.

4. Да и есть у кого-нибудь опыт в подключению к потоку другого SAM-a. Например есть два DJ-я, играет сперва один у себя в студии через SAM потом подключается другой к потоку из своей студии и играет из своего SAM-a. В Airtime хорошо реализовано, как я понял из описания, но это ПО серверное, да и не дотянет до SAM-a.

5. Думаем вещать в AAC+, но столкнулись с тем что не все плееры читают этот формат, и вывести плеер на сайте по средствам HTML5 тоже не просто. Кто что скажет в защиту этого формата? Или, кто что посоветует?

Всем спасибо, в частности еще раз Leff27.

727
Leff27 @Leff27
На все вопросы ответить не могу, нет времени.

1. Отключи в настройках нужного трека(song info или как-то так) функцию crossfade

3. IceCast2 ставится на линукс, туда же ставится ices, аля резервный поток, поверх подключается сэм-нонстоп с винды, поверх может подключиться DJ, т.е. получается что, ices будет нонстопом сэма, а сэм нонстопом лайв-эфира....

5. Вещать в ААС+ прекрасная идея, которой пользуется уже не одна радиостанция. HTML5 AAC/MP3 поддерживает не каждый браузер, посему нужно писать обработчик(как на radiopassazh.ru), который меняет флеш-плеер на HTML5, если зашли с айпада и делает редирект на моб. версию сайта, если зашли с моб. устройства.

10
Тарасов @Тарасов_Александр
Leff27 пишет:

На все вопросы ответить не могу, нет времени.

1. Отключи в настройках нужного трека(song info или как-то так) функцию crossfade

3. IceCast2 ставится на линукс, туда же ставится ices, аля резервный поток, поверх подключается сэм-нонстоп с винды, поверх может подключиться DJ, т.е. получается что, ices будет нонстопом сэма, а сэм нонстопом лайв-эфира....

5. Вещать в ААС+ прекрасная идея, которой пользуется уже не одна радиостанция. HTML5 AAC/MP3 поддерживает не каждый браузер, посему нужно писать обработчик(как на radiopassazh.ru), который меняет флеш-плеер на HTML5, если зашли с айпада и делает редирект на моб. версию сайта, если зашли с моб. устройства.


Leff27, мысль поймал, но не совсем, первый раз слышу, про ices :(
Как будет время, можно подробнее описать процесс реализации резерва и "горячего" подключения DJ ? Или хотя бы источники где копать. Спасибо

20
ra1nbowman @ra1nbowman
Всем привет :) Есть скрипт, который я запускаю через шледулер в определенное время. Скрипт очищает старую очередь, затем берет определенный плейлист, добавляет его в новую очередь, перемешивает треки и ставит в деку трек из нового плейлиста. Есть один нюанс: если в деке уже играет трек, то скрипт ставит в другую деку трек, и делает кроссфейд. То есть старый трек до конца не доигрывает. Вот в этом и проблема. Как бы скрипт переделать так, чтобы последний трек, из старой очереди, из старого плейлиста доиграл до конца, и только затем начал играть следующий, из нового плейлиста ?


{==================================================}
IF ActivePlayer <> NIL THEN
BEGIN
PAL.WaitForTime('+00:00:01');
ActivePlayer.FadeToPause;
PAL.WaitForTime('+00:00:02');
END;

DeckA.Eject;
DeckB.Eject;

Queue.Clear;
Queue.AddList('D:\playlist.m3u',ipTop);
Queue.Shuffle;

var Song : TSongInfo;
var A,P : TPlayer;

A := ActivePlayer;
P := IdlePlayer;

Song := Queue.NextInQueue;
if Song = nil then
WriteLn('Queue is empty')
else
begin
if P <> nil then P.QueueSong(Song);
if P <> nil then P.Play;
if A <> nil then A.FadeToNext;
end;


Скрипт запускаю через

1572
KyPIIaToB @KyPIIaToB
ra1nbowman пишет:

Всем привет :) Есть скрипт, который я запускаю через шледулер в определенное время. Скрипт очищает старую очередь, затем берет определенный плейлист, добавляет его в новую очередь, перемешивает треки и ставит в деку трек из нового плейлиста. Есть один нюанс: если в деке уже играет трек, то скрипт ставит в другую деку трек, и делает кроссфейд. То есть старый трек до конца не доигрывает. Вот в этом и проблема. Как бы скрипт переделать так, чтобы последний трек, из старой очереди, из старого плейлиста доиграл до конца, и только затем начал играть следующий, из нового плейлиста ?


{==================================================}
IF ActivePlayer <> NIL THEN
BEGIN
PAL.WaitForTime('+00:00:01');
ActivePlayer.FadeToPause;
PAL.WaitForTime('+00:00:02');
END;

DeckA.Eject;
DeckB.Eject;

Queue.Clear;
Queue.AddList('D:\playlist.m3u',ipTop);
Queue.Shuffle;

var Song : TSongInfo;
var A,P : TPlayer;

A := ActivePlayer;
P := IdlePlayer;

Song := Queue.NextInQueue;
if Song = nil then
WriteLn('Queue is empty')
else
begin
if P <> nil then P.QueueSong(Song);
if P <> nil then P.Play;
if A <> nil then A.FadeToNext;
end;


Скрипт запускаю через

if A <> nil then A.FadeToNext;

33
Lif @Lif
Народ, помогите вычислить время до окончания трека!

Duration считает общее время звучание трека, мне же нужно, чтобы когда до конца трека остается менее 5 секунд, скрипт выполнялся (независимо от общей длительности трека)

33
Lif @Lif
PAL.Loop := True; // Цикилим скрипт
Var Done : Boolean = False;
var P : TPlayer;
var Song : TSongInfo;
var mytime : DateTime = now; // Переменной mytime присваеваем значение "Время сейчас"
var I : Integer;
var start_time, end_time, end_time2 : DateTime; //переменные
start_time := T['10:00:00']; //время начало выполнения
end_time :=T['11:00:00']; //время остановки выполнения
while not done do
begin
if((ActivePlayer.Duration-ActivePlayer.CurTime)<4000) and ( mytime >= start_time) // и теперешнее время больше или равно времени начала выполнения
and (mytime <= end_time) // и теперешнее время меньше или равно времени окончания
Then
begin

P := Aux1;
if P <> nil then
begin
Song := CAT['Хип-Хоп'].ChooseSong(1,NoRules);
if Song <> nil then
begin
P.QueueSong(Song);
P.Play;
Done := True;
end;
end;
end;
end;


Как сделать включение этого скрипта в другое время?
В 19:00 до 20:00 и в 02:30 до 03:30?

33
Lif @Lif
т.е. я хочу сделать следующее:
1. С 06:00 - 10:00 играет по правилам ротации (Папка 1 Нон-стоп)
2. При этом Джинглы и Заставки так-же идут вместе с (Папка 1Нон-Стоп)
3.С 10:00 -11:00 - Играет по правилам ротации (Папка 2 Хип-Хоп)
4. При этом джинглы и Заставки не вставляются.
5. Но после каждого трека вставляется "Сухарь" в течении этого времени.
с 19:00 все повторяется с пункта 3, только меняется время на 19:00 - 20:00

Возможно поможет шекулдер, но в нем невозможно установить время окончания.
Мне же нужно, просто отключать в определенное время Папку 1 с джинглами из другой папки, и начинать хип-хоп, по окончанию которого, возвращаться к Нон-стопу и включать джинглы.

5
evgenyi-lev96 @evgenyi-lev96
Всем привет)
Можете мне помочь, я никак не могу сделать рабочим скрипт: скрипт заключается в том что бы воспроизводить по верх муз трека, джингл...можете мне скинуть рабочий скрипт, пожалуйста! буду очень благодарен!

5
evgenyi-lev96 @evgenyi-lev96
evgenyi-lev96 пишет:

Всем привет)
Можете мне помочь, я никак не могу сделать рабочим скрипт: скрипт заключается в том что бы воспроизводить по верх муз трека, джингл...можете мне скинуть рабочий скрипт, пожалуйста! буду очень благодарен!


Скрипт в целом работает, он дабовляет джингл в Uqeue но не воспроизводит в Aux...как я понял он должен воспроизводится именно там...но в принципе он вообще не воспроизводится...
var Song : TSongInfo;
var P : TPlayer;
PAL.Loop := True; // скрипт будет выполнятся постоянно
PAL.WaitForTime('+00:10:00'); // задержка в 10 секунд
P := SoundFX; // через что играть
if P <> nil then
begin
Song := CAT['Каталог'].ChooseSong(1,NoRules);
if Song <> nil then
begin
P.QueueSong(Song); //
P.Play;
end;
end;

строка Song := CAT['Каталог'].ChooseSong(1,NoRules); хотелось бы ещё узнать вот что, можно ли в строке каталог прописывать просто путь к джинглу ? к примеру >Song := CAT['D:\Program Files\SpacialAudio\SAMBC\Sound\Jingels\001.mp3'].ChooseSong(1,NoRules);< ????

765
radiopassazh @radiopassazh
Джингл поверх муз трека - это лайнер. Запомните

5
evgenyi-lev96 @evgenyi-lev96
radiopassazh пишет:

Джингл поверх муз трека - это лайнер. Запомните


Не знал, извините) Так вы мне поможете со скриптом?

398
ubuntu-studio @ubuntu-studio
radiopassazh пишет:

Джингл поверх муз трека - это лайнер. Запомните


В некоторых программах автоматизации (в часности в Jazler) почему-то называется "свипер" "sweeper"

398
ubuntu-studio @ubuntu-studio
evgenyi-lev96 пишет:

radiopassazh пишет:

Джингл поверх муз трека - это лайнер. Запомните


Не знал, извините) Так вы мне поможете со скриптом?


Учитесь пользоваться поиском. в гугле набираем "sam broadcaster liner"

Первая же ссылка ведет на официальный форум с таким же вопросом как у вас.

**********

Удачи