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

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

 

53
wisher @wisher
приветик wwc!
этот вопрос не по теме, тут только PAL скрипты обсуждают. к сожалению в этих делах я не силён по этому помочь ничем не могу.
то что знаю, так это есть стандартная опция вывода картинок и названия треков в Sam Broadcaster средствами PHP вот и всё, чтоб всё в WInAmp это прикрутить думаю будет сложновато... В любом случае удачных тебе поисков!

54
wwc @wwc
wisher

Спасибо...

2
Jecka2003 @Jecka2003
Доброго времени
есть скрипт - краткое описание в 20 минут каждого часа включает отбивка радио релакс и само радио следом на 10 минут,

PAL.Loop := True;

PAL.WaitForTime('XX:19:58'); //запускаемся в 20 каждого часа

If ActivePlayer.Status = psPlaying then // проверяем играет ли плеер
If ActivePlayer.Duration - ActivePlayer.CurTime < 600000 then // проверяем сколько осталось до конца трека.... если меньше 10 минут то срабатывает, если нет, то пропускаем релакс в этом часе
begin
Queue.AddURL('http://ic7.101.ru:8000/v13_1?setst=',ipTop); //RelaxFM
Queue.AddFile('D:\Music\!-Ìåðîïðèÿòèÿ\! îôîðìëåíèå\Radio_Relaks_FM.mp3', ipTop);
PAL.WaitForTime('+00:29:58');
ActivePlayer.FadeToNext;
end;

проблема в том что когда оператор ожидание PAL.WaitForTime('+00:29:58') ставлю в begin ... end, он перепрыгивает через него и сразу переходит на ActivePlayer.FadeToNext.

Подскажите как надо использовать эти операторные скобки begin ... end или оператор WaitForХХХ

Отредактировано Jecka2003 - 17.05.2017
2
Jecka2003 @Jecka2003
Нашёл ответ на свой вопрос

Now, a few important concepts about waiting:
You can not wait inside
a) IF..THEN statements
b) CASE..OF statements
c) Custom functions & procedures
PAL will simply skip over the wait command. This is an unfortunate result of the implementation of the core language PAL was based on. This language was never meant to be execute line-by-line, but rather as a complete program. Thus we had to significantly modify this language to meet our needs. Unfortunately we were not able to work around this problem for the above mentioned statement blocks.

The good news is that there is ways to avoid this problem.
1. Do not wait inside functions & procedures. Rather repeat the source lines where needed.
2. In the case of IF..THEN and CASE..OF statements, use a WHILE..DO loop instead.

53
wisher @wisher
Всем привет! version.1 скрипт вывода кириллицы через Icecast2
Возможно у меня получилось, и я нашёл то, что многие искали годами по инету но так ничего не нашли ...
Так вот - постоянно стоял вопрос, как передать через Icecast2 информацию в потоке об играющем треке с русскими буквами
для поддержи отображения например: в плеере VLC media, WInAmp или какие другие плееры в которых есть
опция вывода титров, даже с выводом через приложение tunein radio.
Фантастика и только! Всё работает!
----------------------------------------------------------------------------------------
Сразу хочу отметить PAL скрипт который у меня получился
требует связку с PHP скриптом точнее работающим samPHPweb (4.3.6 - старой версии)
только те, у кого есть (локальный WEB сервер и кто пользуется скриптами samPHPweb) возможно это реализовать
----------------------------------------------------------------------------------------
1. Проверка работоспособности PAL скрипта на вывод русских титров в радио-потоке
создайте папку на Web-сервере например: recordsms затем текстовый файл к примеру: text.txt
откройте его через Блокнот, в верхнем меню окна кликаем на ->файл ->сохраните как
выберите при сохранении внизу окна, ->кодировка UTF-8, затем клик на кнопку ->сохранить
после чего вновь откройте файл, в верхней строке пишем на русском: ( имя артиста - название песни )
закрываем окно текстового файла и соглашаемся, сохранить!
всё готово! запускаем PAL скрипт в SAM и ждём вывода русского текста к примеру через плеер VLC media

var Song : TSongInfo;
const Filesongtitle = 'C:\www\htdocs\recordsms\text.txt'; // ваш путь на диске к текстовому файлу
var UpdSong : TSongInfo;
var Banners : TStringList;
var LinePos : Integer;

PAL.Loop := True; // цикл работы скрипта (постоянно)
PAL.WaitForPlayCount(1); // ожидание, запуск скрипта после завершения текущего трека

PAL.WaitForTime(T['+00:00:09']); // задержка, для точного вывода текста через енкодер настройка 6-12 сек.

if ActivePlayer <> nil then
begin
Song := ActivePlayer.GetSongInfo();
if Song['songtype'] = 'S' then // функция работы по типу 'S', значит тип 'J', 'X' и другое... скрипт будет в ожидании
begin
// здесь будет путь к PHP файлу (Пока эту строчку пропускаем)

UpdSong := TSongInfo.Create;
Banners := TStringList.Create;

if FileExists(Filesongtitle) then
Banners.LoadFromFile(Filesongtitle);

UpdSong['title'] := Banners[LinePos];
Encoders.SongChange(UpdSong); // вывод текста через енкодер

Banners.Free; // Очистка енкодера от полученной информации
UpdSong.Free; // Очистка енкодера от полученной информации
end;
end;

хочу обратить внимание,
этот код, только для проверки работоспособности вывода русского текста он не будет выполнять полную функцию без связки с PHP

2. продолжение дальнейшей настройки следует ... исходя из того, кому будет итересно?
3. полноценное использование PAL И PHP
----------------------------------------------------------------------------------------

Обсуждение зависит от вас! Ждём вместе ... ваших откликов!

Отредактировано wisher - 27.11.2017
53
wisher @wisher
И где-же отклики?
Видимо никто уже не интересуется PAL скриптами для SAM Broadcaster.
Если будут желающие, пишите ...

419
gyurgin_ @gyurgin_
Я бы чисто из спортивного интереса посмотрел, а так - этот софт никогда не принимал за проф.

53
wisher @wisher
согласен gyurgin, у каждого есть право на выбор пользованием любого софта ...
мне вот, нравится SAM Broadcaster я уже более 12 лет им пользуюсь. пока без проблем!

245
radio_good @radio_good
gyurgin вообще не признает никакой софт работающий на Windows!
gyurgin линуксойд ...
Единственный софт это OOО "Тракт-Софт", ну здесь, извиняйте, не поспоришь с лидером рынка ... )

Отредактировано radio_good - 09.07.2017
53
wisher @wisher
привет radio_good!
всякие там линуксы - это, для меня сложновато будет ...
для интернет радио-вещания мне не нужно проф. оборудование, я не силён с работай в линукс системах, я обычный самоучка
и поэтому пользуюсь только Windows программами. у меня только сервер Icecast2 на линуксе стоит и то знающие люди настроили
а, так всё методом тыка ... учусь потихонечку

245
radio_good @radio_good
учись. учись ... главное чтоб толк был, а не просто трата времени .. как в моем случае. Линукс хорошо тренирует память, внимательнсоть. усидчивость. Но самое главное он отнимает у человека драгоценное жизненное время!

Отредактировано radio_good - 09.07.2017
53
wisher @wisher
я уже привык к PAL скриптам, обожаю их (как гречку)!
сейчас потихоньку учу SAM Broadcaster автоматизации с объединением PAL и PHP скриптам
недавно получилось отправка формы данных с сайта на удалённый комп где стоит SAM Broadcaster
вернее - текстовое сообщение которое отображается вместе с ради-потоком
можно посылать короткие сообщения - к примеру: пожелания, поздравления с праздником и так дал...
пока ещё сыровато... получилось а, мне нужно сделать так чтоб сообщение стиралось до нового и так далее
вообщем как получится тогда выложу ...

Отредактировано wisher - 28.06.2023
245
radio_good @radio_good
не знаю ... меня особо никогда не интересовала тема технической работы отсылки титров, сбора статистики, скриптов, плееров и т.п.
У меня всегда был на первом месте вопрос по выдаваемому звуку слушаетлям. Обработка треков до ПО процессора с высоким/низким RMS, сама работа процессора в целом (limiter/gain/comressor/speed), каков должен быть RMS на входе и выходе, так-же динамика и частотная харакетритика звучания.
Моё мнение - удачный и сбалансировнный звук, который хочется слушать и слушать, с хорошей динамикой в звучании и это успех на 50% работы радио .. и в этом вопросе куда больше сложной и рутинной работы чем, например над скриптом вывода титров или ковров на сайт)
Например, хороша динамика на радио Максимум в фм-диапозоне, где чувствуется мощь и loud, не возможно оторваться от приемника... так-же Русское радио - яркое, громкое звучание задающее хорошее настроение, но чуть устаешь .. нужна привычка.

Вопросы автоматизации р/вещания решает софт - там всё есть. Остается лишь настроить "под себя" и в путь! Ротация - это индивидуальный вопрос, который решает для себя каждый сам. . инструменты для этого есть.

Отредактировано radio_good - 11.07.2017
53
wisher @wisher
я думаю, что всё это не важно, каким образом осуществлять задуманное ...
главное - чтоб это нравилось людям и приносило удовольствие!

Отредактировано wisher - 10.07.2017
53
wisher @wisher
Обновлённая версия Хит-Парад Топ-10 с быстрой загрузкой треков в очередь!
1.Плюс выбор дня недели для воспроизведения, вечер, день или утро ...
2. Дополнение для автоматизации - аудио-треки с голосом ведущего!

var P : TPlayer;
var OldTime : DateTime;
OldTime := Now;
PAL.Loop:= True; // Скрипт будет выполнятся постоянно
// ------------- насторить секунды для точного запуска (интервал не более 30 сек.)
if (now >= T['19:59:16']) and (now <= T['19:59:46']) and // запуск в 20:00 вечера
((DayOfWeek(Now) = Sunday)) then // запускается только в воскресенье
begin
// -----------------------------------------------------------------------------
Queue.AddFile('C:\hiparad\end-voice.mp3',ipTop); // голос ведущего о завершении Хит-парада
// -----------------------------------------------------------------------------
var D : TDataSet;
var C : Integer;
D := Query('SELECT songlist.*, count(*) as cnt '+
'FROM songlist,requestlist '+
'WHERE songlist.ID = requestlist.songID '+
' AND requestlist.code < 700 '+
'GROUP BY songlist.ID '+
'ORDER BY cnt DESC LIMIT 10',[],True); // лимит 10 треков
// ставим в очередь на воспроизведение с 10 трека по 1
C := 0;
D.First;
while not D.EOF do
begin
C := C + 1;
WriteLn('#'+IntToStr(C)+'. '+D['artist']+' - '+D['title']);
Queue.AddFile(D['filename'],ipTop);
D.Next;
// ----------------------------------------------------------------- (7-8 сек. фоновый джингл - Желательно из ударных инструментов)
Queue.AddFile('C:\hiparad\silent-jingl.mp3',ipTop); // джингл - для красивого эффекта перехода от трека к треку
end;
Queue.AddFile('C:\hiparad\start-voice.mp3',ipTop); // голос ведущего о начале Хит-парада
// -----------------------------------------------------------------------------
PAL.WaitForTime(T['+00:01:00']); // задержка 1 мин. от повторного запуска
end;

Отредактировано wisher - 10.07.2017
419
gyurgin_ @gyurgin_
radio_good пишет:

gyurgin вообще не признает никакой софт работающий на Windows!
gyurgin линуксойд ...
Единственный софт это OOО "Тракт-Софт", ну здесь, извиняйте, не поспоришь с лидером рынка ... )

Ну я не такой прожженый линксоид на самом деле, просто у самвеб такой плюшевый что интерфейс что звук, потому и воспринимаю как игрушку. да там я так понимаю можно алгоритмов наваять тонну, что как по мне то очень годно, потому и интересно.
Если надо что по php (это к топикстартеру) - не стесьняйтесь - подскажу.

54
wwc @wwc
Большая просьба о помощи!

Нужен скрипт выполняющий следующие требования:

У меня работает часовая отбивка, которая завершает трансляцию вставленной в евент лист программы идущей больше часа. Т.е. двухчасовой концерт обрезается часовой отбивкой, а дальше вместо продолжения концерта включается стандартный плей-лист.

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

Есть ли у кого такой скриптик.

Буду очень благодарен.

Спасибо.

419
gyurgin_ @gyurgin_
Вот и сразу вопрос - Вы гденить такое видели?
Я вобще нифига не понимаю как это можно это сделать, люди есть просят влепить что то по параметрам каким то от звука...
Вы тоже самое просите, я стесьняюсь спросить где мне брать триггер?
Как мне понять что вот тут надо влепить кроссфейд или что там надо?
Я не говорю блин что это невозможно, отнюдь, но Вы хоть понимаете или как насколько это сложно и ресурсоемко?
Проще надо быть, имеем что играет, имеем длительность, ну и тогда уже плевое дело...

54
wwc @wwc
gyurgin_

Я не специалист по скриптописанию, но мне кажется так можно порешать....

Есть скрипт делающий отбивку часа:


var P : TPlayer;
var Song : TSongInfo;
var strFile, strPath, strJingle : String;

strPath := 'd:\Music MP3\iradio\Zastavki\'; // Путь к папке, где лежат отбивки часов
strJingle := 'd:\Music MP3\iradio\Zastavki\tchas_otbivka.mp3'; //Путь и название джингла после отбивки часов

PAL.Loop := True;

P := SoundFX; // Проигрывание файлов **-00.mp3 через SoundFX, а не через деки.

PAL.WaitForTime('XX:59:15'); //запускаемся в конце каждого часа. 45 сек - время буферезации, подбираем по свом параметрам, вкусам

//strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3'; //определяем название файла с нужными часиками. Формат имени файла XX-XX.mp3

P := Aux1;
if P <> nil then
begin

Queue.AddFile(strJingle, ipTop);
// Queue.AddFile(strFile, ipTop);




P := ActivePlayer;
if P <> nil then P.FadeToNext;



end;



Он крутится в разделе PAL скрит в закладке B.

Можно, к примеру, в строчке кода в эвенте при начале исполнения задания календаря остановить отбивку часа, а по исполнению события эвента, запустить.

53
wisher @wisher
хочу присоединиться к обсуждению. привет ребята!
моё мнение, думаю всё можно реализовать главное обдумать действия и правила вещания, что очень важно!
при таком раскладе, что было написано выше, можно использовать сценарии, я уже как-то писал на предыдущих страницах этой темы.
или уж по простому, использовать встроенный планировщик, создать два PAL скрипта отбивки часов, к примеру 1-й будет работать в обычном режиме во все дни недели с указанием времени, но ограничить включение скрипта в нужное день и время.
2-й скрипт настроить на тот день и время когда нужно делать паузу или в приглушённом виде транслировать через дополнительные деки.
в подробности не буду вдаваться, хорошо подумать как и что и методом тыка и всё получиться
останется только поработать над удалением не нужных функций во втором PAL скрипте, возможно придётся что-то добавить...
да и ещё в обоих файлах заменить строчку PAL.Loop := True; на одноразовое включение PAL.Loop := False;
я не профессионал сам ещё учусь, готового решения у меня нет, помню что-то подобное делал...
в любом случае желаю удачи, чтоб всё получилось!!!

Отредактировано wisher - 23.11.2017