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

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

 

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

это уже 2-й скрипт с изменениями

{Важно! Настроить запуск скрипта в Планировщике на 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:15'); // Запускаемся в конце каждого часа.
{------------------------------------------------------------------------------}
{--}ActivePlayer.FadeToPause; // Ставим активный плеер на паузу
{------------------------------------------------------------------------------}
{--Определяем название файла с нужными часиками. Формат имени файла XX-XX.mp3--}
strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3';
{------------------------------------------------------------------------------}
P := Aux1; // через что играть
if P <> nil then
begin
{--}Queue.AddFile(strJingle, ipTop);
{--}Queue.AddFile(strFile, ipTop);
{--}Aux1.QueueSong(Queue.NextInQueue);
{--}Aux1.Play;
end;
{------------------------------------------------------------------------------}
{--}PAL.WaitForTime('+00:00:22'); // 10-22 сек. настроить задержку под длину джингла
{------------------------------------------------------------------------------}
{--Включение трека в ожидании, через DeckA или DeckB--}
{--}DeckA.FadeToPlay; // плавное воспроизведение DeckA
{--}DeckB.FadeToPlay; // плавное воспроизведение DeckB
{------------------------------------------------------------------------------}
{После выполнения, скрипт останавливается до последующего запуска через Планировщик}

вся настройка происходит в Планировщике
**********
Желаю удачи!!!

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

Спасибо большое, Вы очень грамотно умеете навести на мысль.

Попробовал некоторые наработки, обкатаю, отпишусь.

54
wwc @wwc
Попробовал...

В этот промежуток:
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


после PAL.Loop := True; достаточно вставить условие:


if (now >= T['19:59:00']) and // запуск в 20:00 вечера
((DayOfWeek(Now) = Friday)) then PAL.WaitForTime(T['+02:00:00']); // задержка 2 часа от повторного запуска



А сам файл записи концерта просто прописывать в евенте.


К вопросу доработки ТОП 10.

Я бы в этом фрагменте:

// ----------------------------------------------------------------- (7-8 сек. фоновый джингл - Желательно из ударных инструментов)
Queue.AddFile('C:\hiparad\silent-jingl.mp3',ipTop); // джингл - для красивого эффекта перехода от трека к треку
end;


тоже бы цикл подстановки XX_10 ... ХХ_01.mp3 файлов сделал соответственно расположению треков в позиции ТОПа.

Спасибо.

Отредактировано wwc - 22.11.2017
53
wisher @wisher
Большое пожалуйста!
чем смог тем помог, большего конечно не знаю, сам ещё учусь...
Удачи тебе!

54
wwc @wwc
wisher пишет:



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


Мне интересно.

Вопроса 2.

Первый. Русский текст так и не выводится.

Второй. Как вернуть информацию о песне в первоначальное состояние, до того, как отрабатывается баннер у меня выводит "автор - композиция".

Да. И можно ли впихнуть как-то картинку альбома методом запроса URL картинки из плей-листа базы ?

Спасибо.

53
wisher @wisher
привет wwc!
всё будет чётко работать!
для полной работы нужно подключить всё PAL и PHP скрипты, на предыдущей странице я описал только часть из этого...
и главное условие, версия samPHPweb 4.3.6 и локальный WEB сервер - если всё это есть то всё будет работать!
в начале нужно добиться вывода русского текста из баннера, потом подключить php скрипт и он будет сам записывать и перезаписывать текстовый файл. так вот как добиться вывода русского текста? есть ещё одно, настройка Icecast2 если там отображаются иероглифы
типа этого строчку значит вывода не будет...
решение eсть: нужно добавить важную строчку <charset>UTF-8</charset>

<mount>
<mount-name>/ваш_моунт.mp3</mount-name>
<password>xxxxxxxx</password>
<charset>UTF-8</charset>
<fallback-mount>/ваш_моунт.mp3</fallback-mount>
<fallback-override>1</fallback-override>
</mount>

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

по поводу картинок с помощью URL запросов я не знаю, я просто вывожу стандартными стредствами PHP
вот пример моего кода укороченного

<?php
require("config.php"); // настройка конфигурации
$db->open("SELECT songlist.*, historylist.listeners as listeners, historylist.requestID as requestID, historylist.date_played as starttime FROM historylist,songlist WHERE (historylist.songID = songlist.ID) AND (songlist.songtype='S') ORDER BY historylist.date_played DESC",1);
$history = $db->rows();
reset($history);
list($key, $song) = each($history);
PrepareSong($song);
//--------------------------------------------------------------------------------------------------
// комбинированные данные: смена переменных на более короткие
$artist_title = $song["combine"]; // сейчас играет артист - композиция
$picture = $song["picture"]; // данные картинка (Альбом)
//--------------------------------------------------------------------------------------------------
echo '<img src="'.$picture.'" alt="'.$artist_title.'" width="160" height="160" />'; // вывод картинки
echo "<br>".$artist_title; // сейчас играет: артист - композиция вывод результата на страницу
?>

Отредактировано wisher - 27.11.2017
53
wisher @wisher
Держи wwc обновлённую версию! version.2 скрипт вывода кириллицы через Icecast2
Предыдущий скрипт работал у меня через обычные деки А,В. чем создавал лишний текст в истории плейлистов
с такой строкой как эта: ..//192.168.0.02/samPHPweb/recordsms.php тем самым создавая ненужный мусор
в этой версии я изменил работу через дополнительные деки и избавился от ненужного мусора в истории плейлистов.

Внимание! это мои настройки PAL скрипта, возможно нужно будет изменить путь к файлам, вашего Веб сервера.

var Song : TSongInfo; // для функции выключателя по типу S
const Filesongtitle = 'C:\www\htdocs\samPHPweb\recordsms.txt'; // Путь к текстовому файлу
var UpdSong : TSongInfo;
var Banners : TStringList;
var LinePos : Integer;
{------------------------------------------------------------------------------}
var P : TPlayer;
var URL : String;
// эту строчку пока отключаем
//URL := 'http://192.168.0.02/samPHPweb/recordsms.php'; // Путь к файлу PHP
{------------------------------------------------------------------------------}
PAL.Loop := True;
PAL.WaitForPlayCount(1); // запуск скрипта после завершения очередного трека
PAL.WaitForTime(T['+00:00:01']); // 1-3 сек. задержка выполнения
{------------------------------------------------------------------------------}
{функция выключателя сценария по типу S}
if ActivePlayer <> nil then
begin
Song := ActivePlayer.GetSongInfo();
if Song['songtype'] = 'S' then
begin // начало выполнения сценария
{------------------------------------------------------------------------------}
{-- загрузка URL страницы (PHP скрипта) для записи в текстовый файл --}
P := SoundFX; // через что играть
if P <> nil then
begin
{--}Queue.AddFile(URL, ipTop);
{--}SoundFX.QueueSong(Queue.NextInQueue);
{--}SoundFX.Play; // Воспроизведение через Aux1 или SoundFX
end;
{------------------------------------------------------------------------------}
end;
end; // конец выполнения сценария
{------------------------------------------------------------------------------}
// второй сценарий
PAL.WaitForTime(T['+00:00:06']); // 6-7 сек. задержка выполнения
{функция выключателя сценария по типу S}
if ActivePlayer <> nil then
begin
Song := ActivePlayer.GetSongInfo();
if Song['songtype'] = 'S' then
begin // начало выполнения сценария
{------------------------------------------------------------------------------}
// создаём вывод баннера в эфир
{--}UpdSong := TSongInfo.Create;
{--}Banners := TStringList.Create;
{------------------------------------------------------------------------------}
{-- загрузка текстового файла --}
{--}if FileExists(Filesongtitle) then // чтение
{--}Banners.LoadFromFile(Filesongtitle); // загрузка
{--}UpdSong['title'] := Banners[LinePos]; // текст из файла
{--}Encoders.SongChange(UpdSong); // вывод через радио-поток
{------------------------------------------------------------------------------}
end;
end; // конец выполнения сценария
{------------------------------------------------------------------------------}
Banners.Free; // Очистить информацию после кодирования
UpdSong.Free; // Очистить информацию после кодирования
{------------------------------------------------------------------------------}

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


итак wwc, если русский текст из файла recordsms.txt который ты создал, проходит через Icecast2 сервер и у тебя всё получилось!
тогда позже, выложу PHP скрипт для автоматической записи текстового файла.

важно! (не забыть проверить что текстовый файл создан в кодировке UTF-8 иначе ничего не получиться).

ещё кое-что, возможно возникнет вопрос почему я использую старую версию samPHPweb 4.3.6, сразу отвечаю с новой у меня
не получилось! так как не силён в PHP также как и PAL, а методом тыка ... всё получилось и работает на 100%
жду откликов! Удачи wwc!

Отредактировано wisher - 27.11.2017
54
wwc @wwc
wisher

Спасибо большое. Появится немного времени, обязательно изучу.

Я пользуюсь SAM Broadcaster PRO 2016.10. В нем все функции вывода контента через WEB реализовал -> **********

Мне Ваша тема интересна с точки зрения подпихивания контента в смартфон или в плееры.

Изначально в плеере отображается и артист, и композиция, и радиостанция. В некоторых плеерах да даже рандомная картинка вытягивается некой сетевой библиотеки. А в процессе запуска баннера остается лишь радиостанция (это при подменяемости баннера через определённый интервал (что и есть интересное решение). Сначала артист - композиция - альбом + картинка, потом баннер. И так по кругу.

Освобожусь обязательно изучу.

Спасибо.

54
wwc @wwc
Уважаемые участники форума !

Нашёл данный скрипт:

var Song : TSongInfo;
PAL.Loop := True;
Queue.AddFile('C:\jingl.mp3',ipTop); // путь до джингла
Song := CAT['CAT (New)'].ChooseSong(smRandom,NoRules);
Queue.Add(song,ipTop);
PAL.WaitForTime('+00:20:00'); //ожидаем до повтора


Как бы сделать так, чтоб он выбирал не по категории, а по последним загрузкам... С категориями немножко непонятно, ведь новый файл может быть где угодно. Хоть Music All, хоть в Power Hit.

Спасибо.

53
wisher @wisher
wwc пишет:

wisher

Спасибо большое. Появится немного времени, обязательно изучу.

Я пользуюсь SAM Broadcaster PRO 2016.10. В нем все функции вывода контента через WEB реализовал ->


Пожалуйста wwc! самое главное когда всё проверишь, отпишись есть ли вывод кириллицы через Icecast2
если есть, то это уже здорово!
постараемся добиться нужного результата ...

53
wisher @wisher
wwc пишет:



Как бы сделать так, чтоб он выбирал не по категории, а по последним загрузкам...

wwc, я когда-то тоже пытался похожее замутить с загрузкой новых песен, но к сожалению ничего не вышло.
единственное, что и сейчас использую это отдельная категория для новинок помимо основных.
когда загружаю что-то новое ставлю в основные по жанру или по алфавиту
и так-же в категорию новинок. затем через неделю или две просто удаляю их из новинок и всё
а для очистки категории от старого списка треков, использую PAL скрипт очистки, сканирования и заполнения если есть что то новое ...
если такой скриптик нужен могу выложить ...

Отредактировано wisher - 27.11.2017
53
wisher @wisher
решил не дожидаясь, выложить.

// PAL скрипт ничего не выводит, он нужен для очистки, сканирования и заполнения
// Настройка: имя категории, путь к папке, время и дату запуска изменить на свои.
var P : TPlayer;
var OldTime : DateTime;
OldTime := Now;
PAL.Loop := True;
{------------------------------------------------------------------------------}
// 1 сценарий время запуска на 1 минуту раньше чем второй
if (now >= T['11:43:00']) and (now <= T['11:43:30']) and
((DayOfWeek(Now) = Monday)) then // запускается только в понедельник днём
begin
{--}Cat['new-music'].Clear; // очистка категории от треков
{--}SubDir['C:\new-track'].Rescan; // сканирование папки на наличие треков
{------------------------------------------------------------------------------}
{--}PAL.WaitForTime(T['+00:01:00']); // 1 мин. ожидания от повторного запуска
{--}End;
{------------------------------------------------------------------------------}
// 2 сценарий время запуска на 1 минуту позже чем первый
if (now >= T['11:44:00']) and (now <= T['11:44:30']) and
((DayOfWeek(Now) = Monday)) then // запускается только в понедельник днём
begin
{--}Cat['new-music'].AddDir('C:\new-track\',False,ipTop); // если найдены треки, заполнить ими категорию
//{--}Cat['new-music'].Shuffle; // перемешать треки если нужно
{------------------------------------------------------------------------------}
{--}PAL.WaitForTime(T['+00:01:00']); // 1 мин. ожидания от повторного запуска
{--}End;

если есть фантазия, возможно пригодиться.
может чё добавить, удалить, изменить много вариантов есть.

Отредактировано wisher - 27.11.2017
15
SenorRobinson @SenorRobinson
ДОБРЫЕ ЛЮДИ ПОЧЕМУ НЕТ БОЛЬШЕ СООБЩЕНИЙ ПИШИТЕ У МЕНЯ ВОПРОС КАК СДЕЛАТЬ СКРИПТ
ПЛАВНОГО ПРЕХОДА ТРЕКОВ В СЕМЕ???

313
Krueger @Krueger
SenorRobinson пишет:

ДОБРЫЕ ЛЮДИ ПОЧЕМУ НЕТ БОЛЬШЕ СООБЩЕНИЙ ПИШИТЕ У МЕНЯ ВОПРОС КАК СДЕЛАТЬ СКРИПТ
ПЛАВНОГО ПРЕХОДА ТРЕКОВ В СЕМЕ???

Зачем скрипт, если в настройках программы имеется "свой" фэйдер

15
SenorRobinson @SenorRobinson
спасибо, а Gap Killer оставить по умолчанию ((и вообще сколько я сотрел форумов ваш самый лучший ...
и еще вопрос на 10виндовс немогу найти СЭМА с ключом ни торента ничего неужели только платно?

313
Krueger @Krueger
SenorRobinson пишет:

спасибо, а Gap Killer оставить по умолчанию ((и вообще сколько я сотрел форумов ваш самый лучший ...
и еще вопрос на 10виндовс немогу найти СЭМА с ключом ни торента ничего неужели только платно?

Насколько помню Gap Killer обнаруживает тишину в начале и конце трека и вырезает её, а также если тишина на протяжение долгого времени в треке, то переключает на следующий. Тут уже от вашей аудиотеки зависит. Старые версии на "десятке" работают. 4.3.6/4.9.0/4.9.2. Возможно и другие, не пробовал. Возможно вам и ненужен тот функционал, что есть в Sam Broadcaster. Посмотрите также Freeware и Open Source решения для вещания. К примеру **********. Минус Mixxx в сравнении с сембродкастер, это отсутствие планировщика, скриптов, и продвинутой системы ротации. В целом для вещания и прямого эфира вполне норм имхо.

Отредактировано Krueger - 18.09.2018
27
mihtel @mihtel
Krueger пишет:

SenorRobinson пишет:

спасибо, а Gap Killer оставить по умолчанию ((и вообще сколько я сотрел форумов ваш самый лучший ...
и еще вопрос на 10виндовс немогу найти СЭМА с ключом ни торента ничего неужели только платно?

Насколько помню Gap Killer обнаруживает тишину в начале и конце трека и вырезает её, а также если тишина на протяжение долгого времени в треке, то переключает на следующий. Тут уже от вашей аудиотеки зависит. Старые версии на "десятке" работают. 4.3.6/4.9.0/4.9.2. Возможно и другие, не пробовал. Возможно вам и ненужен тот функционал, что есть в Sam Broadcaster. Посмотрите также Freeware и Open Source решения для вещания. К примеру **********. Минус Mixxx в сравнении с сембродкастер, это отсутствие планировщика, скриптов, и продвинутой системы ротации. В целом для вещания и прямого эфира вполне норм имхо.


Привет всем!
радио бос тоже нормально идёт на десятке,
а в плане кастера- 4.7.4 идёт ещё неплохо.

15
SenorRobinson @SenorRobinson
Спасибо, как решить проблему когда выходят новости то звук слышен на половину тише чем треки играют а ползунов deck a и deck b на томже уровне как обычно когда играет трек. на семерке виндовс такого нет и версии сэм 4,9,0((( может с помощью скрипта на виндовс 10 сэм версии 4,2,2
var P : TPlayer;
var Song : TSongInfo;
var strFile, strPath, strOther : String;
PAL.Loop := True;
PAL.WaitForTime('XX:00:00');

strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3';
P := Aux1;
if P <> nil then
begin
Queue.AddURL('http://icecast.vgtrk.cdnvideo.ru/vestifm_mp3_192kbps',ipTop); // ???? URL ???????? ????????? ????????
Queue.AddFile(strOther, ipTop);
Queue.AddFile(strFile, ipTop);
DeckA.Volume := 400;
DeckB.Volume := 400;

P := ActivePlayer;
if P <> nil then P.FadeToNext;
end;
PAL.WaitForTime('+00:06:00');
DeckA.Volume := 255;
DeckB.Volume := 255;
ActivePlayer.FadeToNext;

313
Krueger @Krueger
SenorRobinson, проблема в том что сам поток с которого вы запускаете новости, имеет низкую громкость, проверил локально, скриптом тут ничего не сделаешь. Но у каждой деки можно включить автоматическое усиление громкости, есть настройки, и AGC, тыкаем на кнопку EQ. Там у каждой деки включаем AGC. скрин для наглядности:


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

15
SenorRobinson @SenorRobinson
Может кто подскажет Pal скрипт для отбивки часов далее новости - вести фм и фоновым джинглом в конце типа того что у меня есть только часы не срабатывают почемуто незнаю что нетак

var P : TPlayer;
var Song : TSongInfo;
var strFile, strPath, strOther : String;
PAL.Loop := True;
PAL.WaitForTime('XX:00:00');

strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3';
P := Aux1;
if P <> nil then
begin
Queue.AddURL('http://icecast.vgtrk.cdnvideo.ru/vestifm_mp3_192kbps',ipTop); // ???? URL ???????? ????????? ????????
Queue.AddFile(strOther, ipTop);
Queue.AddFile(strFile, ipTop);
DeckA.Volume := 300;
DeckB.Volume := 300;

P := ActivePlayer;
if P <> nil then P.FadeToNext;
end;
PAL.WaitForTime('+00:06:00');
DeckA.Volume := 255;
DeckB.Volume := 255;
ActivePlayer.FadeToNext;