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

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

 

53
wisher @wisher
Для тех кто использует какие либо действия с уменьшением или увеличением громкости в играющих Деках ...
Ниже, мы увидим - очень нужный и полезный PAL скрипт с автоматическим контролем уровня громкости.

Вот к примеру: При использовании различных эффектов или манипуляций с громкостью в Деках, у меня было такое, что при воспроизведении с одной Деки на другую громкость осталась на прежнем уровне и не вернулось в нормальное состояние, а то и вовсе осталась на нуле. Чтоб такой ситуации не происходило я предлагаю использовать скрипт выравнивания громкости. За основу я взял скрипт с офф.сайта после многих проверок он мне не дал нужного результата, после различных экспериментов немного изменив удалением последней строчки и добавил нужную мне дополнительную функцию и всё стало работать на 100%


var Done : Boolean = False;
var Song : TSongInfo;

While not Done do
begin
if QueuedPlayer <> nil then
begin
Done := True;
Song := QueuedPlayer.GetSongInfo;
if (Song<>nil) then
case song['songtype'] of
'S' : QueuedPlayer.Volume := 255; // уровень громкости обычных треков
'A','J','P' : QueuedPlayer.Volume := 320; // уровень громкости джинглов из категории A,J,P
'C' : QueuedPlayer.Volume := 128; // уровень громкости из категории разное (эту строчку можно удалить)
else QueuedPlayer.Volume := 255; // повторная проверка состояния громкости
end;
end;
end;

PAL.Loop := True; // повторный запуск выполнения скрипта


всё очень просто и надёжно!

Отредактировано wisher - 28.06.2023
6
Zidane_Tribal @Zidane_Tribal
Всем привет. Подскажите пожалуйста, никак не могу скрипт допилить.
Задумка такая: одна из дэк фейдится в паузу или стоп при наступлении 20:00 и в Aux1 играет заготовка. А когда трек в Aux1 кончается нужно чтоб в любой из дэк начала играть музыка из Queue.

var Song : TSongInfo;
var P : TPlayer;
P := Aux1;
PAL.WaitForTime('20:00:00');
ActivePlayer.FadeToPause;
if P <> nil then
begin
Song := CAT['20'].ChooseSong(1,NoRules);
P.QueueSong(Song);
P.Play;
end;

DeckA.Eject;
DeckB.Eject;

if Aux1.Status = 1 then
begin

Отредактировано Zidane_Tribal - 07.10.2014
243
Владислав @VladokZzz
Че-то отвечать в последнее время некому.... Одни вопросы на форуме )

53
wisher @wisher
[quote=Zidane Tribal]Всем привет. Подскажите пожалуйста, никак не могу скрипт допилить.
Задумка такая: одна из дэк фейдится в паузу или стоп при наступлении 20:00 и в Aux1 играет заготовка. А когда трек в Aux1 кончается нужно чтоб в любой из дэк начала играть музыка из Queue.

var Song : TSongInfo;
var P : TPlayer;
P := Aux1;
PAL.WaitForTime('20:00:00');
ActivePlayer.FadeToPause;
if P <> nil then
begin
Song := CAT['20'].ChooseSong(1,NoRules);
P.QueueSong(Song);
P.Play;
end;

DeckA.Eject;
DeckB.Eject;

if Aux1.Status = 1 then
begin
[/quote]

Zidane Tribal можешь описать более подробно, что точно необходимо выполнить...
стоп играющего трека или пауза или просто фейдинг
в этой теме есть много готовых скриптов и очень похожий на твой
и что ты хочешь фейдить, сколько времени в минутах или секундах будет идти трек через Aux1
опиши пожалуйста более подробно, я постараюсь помочь

6
Zidane_Tribal @Zidane_Tribal
Хорошо, постараюсь)
Скрипт будет ставиться в шедулер на немного более раннее время чем начало его выполнения.
Скрипт запускается по указанному времени (PAL.WaitForTime('20:00:00');) и играющий в одной из дэк, по списку в Queue, трек фейдится (как я понял в стоп или паузу разницы нет, ибо ползунок на деке остается на месте остановки, а мне нужно чтобы после трека в Aux1 в деках играл следующиий в Queue трек, поэтому я ввел команду Eject) и в Aux1 играет трек из указанной директории.
Все выше написанное уже реализовано.
Теперь осталось сделать, чтобы после окончания трека в Aux1 (а лучше за 2-5 секунд до окончания) запустилось воспроизведение треков из списка Queue в любой из дэк А или В (треки в списке Queue уже находятся, ибо добавляются скриптом).
Сколько трек в Aux1 будет играть не могу сказать, потому что каждый день будет другой.

Отредактировано Zidane_Tribal - 13.10.2014
53
wisher @wisher
Который выше скрипт с уменьшением громкости тебе не подходит?
Там можно уменьшить звук играющего трека до минимума, а в это время будет играть через Aux1 то что тебе необходимо
Затем выставить задержку времени на то которое тебе нужно и снова увеличить громкость
Или тебе нужно чтоб совершенно другой трек начал воспроизведение?

53
wisher @wisher
Zidane Tribal попробуй этот скрипт
Возможно это то что тебе необходимо

var Song : TSongInfo;
var P : TPlayer;

ActivePlayer.FadeToPause; // Перевод текущего трека в режим пауза

P := Aux1; // через что играть
if P <> nil then
begin
Song := Cat['20'].ChooseSong(1,NoRules);
begin
Aux1.QueueSong(Song);
Aux1.Play;
End;
End;

DeckA.Eject; // Очистка DeckA от текущего трека
DeckB.Eject; // Очистка DeckB от текущего трека

PAL.WaitForTime('+00:00:30'); // время ожидания 30 сек

IdlePlayer.Next; // Вставка очередного трека в ожидании в свободный плеер

DeckA.Play; // Начало воспроизведения через DeckA или
DeckB.Play; // Начало воспроизведения через DeckB


Время ожидания измени на желаемое
Да, Zidane Tribal не забудь скрипт запускать через планировщик
Удачи!!!

Отредактировано wisher - 15.10.2014
6
Zidane_Tribal @Zidane_Tribal
wisher пишет:

Zidane Tribal попробуй этот скрипт
Возможно это то что тебе необходимо

var Song : TSongInfo;
var P : TPlayer;
var i : integer;

ActivePlayer.FadeToPause; // Перевод текущего трека в режим пауза

P := Aux1; // через что играть
if P <> nil then
begin
Song := Cat['20'].ChooseSong(1,NoRules);
begin
Aux1.QueueSong(Song);
Aux1.Play;
End;
End;

DeckA.Eject; // Очистка DeckA от текущего трека
DeckB.Eject; // Очистка DeckB от текущего трека

PAL.WaitForTime('+00:00:30'); // время ожидания 30 сек

IdlePlayer.Next; // Вставка очередного трека в ожидании в свободный плеер

DeckA.Play; // Начало воспроизведения через DeckA или
DeckB.Play; // Начало воспроизведения через DeckB


Время ожидания измени на желаемое
Да, Zidane Tribal не забудь скрипт запускать через планировщик
Удачи!!!


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

53
wisher @wisher
Как я понял через Aux1 у тебя будет играть что то другое, теперь всё ясно, что время будет всегда разное и поэтому тебе этот скрипт не подходит. Тебе нужно всё наоборот делать чтоб песни играли как обычно через Деки, а вот фон через Aux1 иначе ничего нельзя будет реализовать. Тебе что то другое необходимо реализовать .... Даже и не знаю чем помочь, единственное - это просто экспериментировать и может что и получится. Желаю тебе удачки!

53
wisher @wisher
Немного подумав... после утренней чашечки кофе, у меня появилась идея как тебе помочь.
Тебе нужно создать два скрипта и поставить их на включение через планировщик в одно время.
Допустим первый: будет фейдить чтоб запустить точно по времени треки из какой то категории или плейлист,
а второй: будет играть через Aux1 какой то фон, джингл или ещё чего то...
Затем только нужно будет настроить второй, точно плюс или минус по времени чтоб правильно налаживался на играющий трек и всё!
Думаю эта идея реально будет работать!!!

6
Zidane_Tribal @Zidane_Tribal
Все, допилил))) Только пока скрипт срабатывает возникает пауза в несколько секунд, а это не хорошо, поэтому надо бы сделать чтоб определялось сколько осталось до конца трека в Aux1 и за 3-5 секунд до окончания уже срабатывал скрипт, а не ждал как сейчас когда трек закончится
var Song : TSongInfo;
var P : TPlayer;
PAL.WaitForTime('9:40:00');
ActivePlayer.FadeToPause;

P := Aux1;
if P <> nil then
begin
Song := Cat['20'].ChooseSong(1,NoRules);
begin
Aux1.QueueSong(Song);
Aux1.Play;
End;
End;

DeckA.Eject;
DeckB.Eject;

var Waiting : Boolean = True;
while Aux1.status = 0 do
begin
Waiting := False;
end;


IdlePlayer.Next;
DeckA.FadeToPlay;
DeckB.FadeToPlay;

Отредактировано Zidane_Tribal - 14.10.2014
6
Zidane_Tribal @Zidane_Tribal
Уррааа!! Допилил)) Теперь все как мне надо) Может кому пригодится)

//Скрипт для остановки воспроизведения в деках и запуска в Aux1, например, заранее записанной рубрики.
//Скрипт ставим в Scheduler на более раннее время чем указанное время срабатывания скрипта.
//by Zidane Tribal
//14.10.2014

var Song : TSongInfo;
var P : TPlayer;
PAL.WaitForTime('9:40:00'); //время в которое сработает скрипт
ActivePlayer.FadeToPause; //фейдим активную деку в паузу. Можно прописать FadeToStop.

P := Aux1; //через что будет играть трек
if P <> nil then
begin
Song := Cat['20'].ChooseSong(1,NoRules); //выбираем категорию где лежит наш трек
begin
Aux1.QueueSong(Song); //вставляем трек
Aux1.Play; //проигрываем
End;
End;

DeckA.Eject; //очищаем деки А
DeckB.Eject; //и В


var Waiting : Boolean = True;
while ((Aux1.Duration-Aux1.CurTime)>4500) do //выставляем через какое время до окончания трека скрипт продолжит работу
begin
Waiting := False;
end;


IdlePlayer.Next; //вставляем трек из Queue в одну из дек
DeckA.FadeToPlay; //запуск с фейдером
DeckB.FadeToPlay; //запуск с фейдером

53
wisher @wisher
Zidane Tribal
Очень рад, что у тебя получилось!

Я вот думаю что эту строчку можно просто удалить, она не столь важна
PAL.WaitForTime('9:40:00'); //время в которое сработает скрипт


В планировщике запуск скрипта можно отрегулировать с точностью до секунд
В любом случае Молодец! Может кому и пригодиться

6
Zidane_Tribal @Zidane_Tribal
wisher пишет:


Я вот думаю что эту строчку можно просто удалить, она не столь важна
PAL.WaitForTime('9:40:00'); //время в которое сработает скрипт


В планировщике запуск скрипта можно отрегулировать с точностью до секунд

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

Отредактировано Zidane_Tribal - 14.10.2014
53
wisher @wisher
Самое главное, что ты добился желаемого результата!
В помощь другим!

53
wisher @wisher
Универсальный автоматический скрипт-сценарий с голосом ведущего в начале передачи и перед завершением с накладкой на текущий трек, очисткой плейлистов до и после передачи, отключением скрипта после выполнения всей работы и всё это 4 в 1, время работы всего скрипта 1 час (что очень удобно для тех у кого слабенький компьютер, дабы не перегружать процессор ...) Можно использовать для программы "Час Зарубежной Музыки", "Альтернативного Рока", и так далее ... В планировщике можно установить запуск в любой день недели или к примеру дважды в субботу и воскресенье ...

Пример скрипта: Запуск в 10 часов утра

// Запуск этого сценария через планировщик (Event Scheduler) в 9:59:12

var P : TPlayer;
var Song : TSongInfo;

var OldTime : DateTime;
OldTime := Now;
PAL.Loop:=True; // Запуск выполнения работы скрипта

if (now >= T['09:59:16']) and (now <= T['09:59:30']) then // Время работы первого сценария 14 сек
begin
Queue.Clear; // Очистка плейлиста от треков
Cat['english'].QueueBottom(smMRPA, EnforceRules); // Ставим 3 трека в плейлист из текущей категории
Cat['english'].QueueBottom(smMRP, EnforceRules);
Cat['english'].QueueBottom(smLemmingLogic, EnforceRules);
Queue.AddFile('C:\voice-show\start-english.mp3',ipTop); // (Фоновый джингл) Голос ведущего о начале передачи (ТОП 20+, Алтернатива ...)

PAL.WaitForTime(T['+00:00:20']); // Задержка 20 сек. от повторного срабатывания
End;

if (now >= T['09:59:26']) and (now <= T['10:50:26']) then // Время работы второго сценария 51 мин
begin
Cat['english'].QueueBottom(smLemmingLogic, EnforceRules); // Добавление 1 трека из категории, можно изменить на (smMRPA, EnforceRules)

PAL.WaitForPlayCount(1); // Повторный запуск через 1 трек
End;

if (now >= T['10:58:16']) and (now <= T['10:58:30']) then // Время работы третьего сценария 14 сек
begin
P := Aux1; // через что играть (Эффект налаживания на играющий трек)
if P <> nil then
begin
Song := Cat['end-english'].ChooseSong(1,NoRules); // (Чистый джингл без фона) Голос ведущего о завершении текущей передачи
if Song <> nil then
begin
Aux1.QueueSong(Song);
Aux1.Play;
End;
End;

PAL.WaitForTime(T['+00:00:20']); // Задержка 20 сек. от повторного срабатывания
End;

if (now >= T['10:59:16']) and (now <= T['10:59:30']) then // Время работы поледнего сценария 14 сек
begin
Queue.Clear; // Очистка плейлиста от оставшихся треков
Cat['russian'].QueueBottom(smMRPA, EnforceRules); // Ставим 2 трека в плейлист из другой категории
Cat['russian'].QueueBottom(smMRP, EnforceRules);

PAL.Loop:=False; // Завершение работы всего скрипта в режим стоп
End;

// После выполнения всех пунктов сценария, скрипт завершает свою работу



Время запуска скрипта возможно придётся изменить на желаемое ...
В дополнение: (для тех кто использует скрипт часовой отбивки, очень важно, чтоб этот скрипт запускался на несколько секунд раньше иначе будут сбои. Придётся просто немного протестировать и всё будет ОК)

Может кому пригодиться! Удачи!

Отредактировано wisher - 02.11.2014
85
YNC @pluta
wisher Спасибо, щас попробую поставить, посмотрим что получится

445
Alex @VapSite
Радио 1068.wos.lv было создано мной в июле 2013 года при определенных обстоятельствах.
Каких?
Мне просто понравились записи с этой Станции.

:D :D :D :D :D :D улыбнуло откровение от чувака ...

Отредактировано VapSite - 31.10.2014
53
wisher @wisher
pluta пишет:

wisher Спасибо, щас попробую поставить, посмотрим что получится

да, не за что pluta, я ещё сам потихоньку учусь...
в любом случае пожалуйста!

53
wisher @wisher
saxell пишет:

Приветствую всех!

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


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

strPath := 'C:\Users\saxell\Desktop\Jingles\'; // Ïóòü ê ïàïêå, ãäå ëåæàò îòáèâêè ÷àñîâ
strJingle := 'C:\Users\saxell\Desktop\Jingles\EuropeRussia-reklama.mp3'; //Ïóòü è íàçâàíèå äæèíãëà ïîñëå îòáèâêè ÷àñîâ

PAL.Loop := True;

PAL.WaitForTime('XX:59:45'); //çàïóñêàåìñÿ â êîíöå êàæäîãî ÷àñà. 45 ñåê - âðåìÿ áóôåðåçàöèè, ïîäáèðàåì ïî ñâîì ïàðàìåòðàì, âêóñàì

strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3'; //îïðåäåëÿåì íàçâàíèå ôàéëà ñ íóæíûìè ÷àñèêàìè. Ôîðìàò èìåíè ôàéëà XX-XX.mp3

P := Aux1;
if P <> nil then
begin
Queue.AddURL('mms://live.rfn.ru/vesti_fm',ipTop);
PAL.WaitForTime(T['+00:00:15']); //Wait 15 secs
Queue.AddFile(strJingle, ipTop);
Queue.AddFile(strFile, ipTop);

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

end;


Здесь часовая отбивка, далее промо радио, далее новости с внешнего источника. Все работает прекрасно, но вот как сделать, чтобы этот внешний источник играл определенное время? Например 5 минут, а дальше штатный плейлист??

Прошу помощи!!

И вдогонку вопрос. Умеет ли SAM работать по DTMF или по какой-либо другой метке?


просматривал сообщения и вот наткнулся на выше описанное

смастерил такой скриптик может что и не правильно но всё вроде работает
пример ретрансляции выпуска новостей радиостанции Вести FM с увеличением громкости вещания
version.hour.jingle.improved.1.5

{Запуск скрипта через планировщик установить за 10 секунд до начала точного времени запуска}
var P : TPlayer;
var Song : TSongInfo;
var strFile, strPath, strJingle : String;

strPath := 'C:\CLOCK\'; // Путь к папке, где лежат отбивки часов
strJingle := 'C:\CLOCK\start_hour.mp3'; // Путь и название джингла после отбивки часов

PAL.Loop := False; // Одноразовый цикл работы скрипта

PAL.WaitForTime('XX:59:46'); // Точное время запуска (подгоняем секунды опытным путём)

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

P := Aux1;
if P <> nil then
begin
Queue.AddURL('http://icecast.vgtrk.cdnvideo.ru/vestifm_mp3_192kbps',ipTop); // Путь URL внешнего источника новостей
Queue.AddFile(strJingle, ipTop);
Queue.AddFile(strFile, ipTop);

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

{Здесь очень важно настроить секунды в зависимости от длины ваших файлов отбивки часов и джингла время ожидания PAL.WaitForTime('+00:00:24');
необходимо изменить и добиться срабатывания IdlePlayer.Volume := 633; на увеличение громкости иначе не будет срабатывания увеличения громкости}

PAL.WaitForTime('+00:00:24'); // 24 сек. ожидания к принудительному увеличению уровня громкости не активного плеера (подгоняем секунды опытным путём)

IdlePlayer.Volume := 731; // увеличение положения громкости не активного плеера выше стандартного

PAL.WaitForTime('+00:03:18'); // время ожидания до завершения вещания новостей

ActivePlayer.Volume := 537; // начало уменьшения горомкости новостей
ActivePlayer.Volume := 474;
ActivePlayer.Volume := 411;
ActivePlayer.Volume := 348;
ActivePlayer.Volume := 285;
ActivePlayer.Volume := 222;
ActivePlayer.Volume := 159;
ActivePlayer.Volume := 96;

ActivePlayer.FadeToNext; // плавный переход заврешения новостей и начало воспроизведения текущего трека в ожидании

PAL.WaitForTime('+00:00:04'); // 4 сек. ожидания (не изменять)

DeckA.Volume := 255; // возврат положения громкости DeckA в нормальное состояние
DeckB.Volume := 255; // возврат положения громкости DeckB в нормальное состояние
{После завершения сценария скрипт завершает свою работу}


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

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