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

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

 

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

это уже 2-й скрипт с изменениями
  1.  
  2. {Важно! Настроить запуск скрипта в Планировщике на 10 сек. раньше чем указано здесь!}
  3. var P : TPlayer;
  4. var Song : TSongInfo;
  5. var strFile, strPath, strJingle : String;
  6. {------------------------------------------------------------------------------}
  7. strPath := 'C:\CLOCK\'; // Путь к папке, где лежат отбивки часов
  8. strJingle := 'C:\CLOCK\start_hour.mp3'; // Путь и название джингла после отбивки часов
  9. {------------------------------------------------------------------------------}
  10. PAL.Loop := False; // Одноразовый цикл работы (потому, что используем Планировщик)
  11. {------------------------------------------------------------------------------}
  12. PAL.WaitForTime('XX:59:15'); // Запускаемся в конце каждого часа.
  13. {------------------------------------------------------------------------------}
  14. {--}ActivePlayer.FadeToPause; // Ставим активный плеер на паузу
  15. {------------------------------------------------------------------------------}
  16. {--Определяем название файла с нужными часиками. Формат имени файла XX-XX.mp3--}
  17. strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3';
  18. {------------------------------------------------------------------------------}
  19. P := Aux1; // через что играть
  20. if P <> nil then
  21. begin
  22. {--}Queue.AddFile(strJingle, ipTop);
  23. {--}Queue.AddFile(strFile, ipTop);
  24. {--}Aux1.QueueSong(Queue.NextInQueue);
  25. {--}Aux1.Play;
  26. end;
  27. {------------------------------------------------------------------------------}
  28. {--}PAL.WaitForTime('+00:00:22'); // 10-22 сек. настроить задержку под длину джингла
  29. {------------------------------------------------------------------------------}
  30. {--Включение трека в ожидании, через DeckA или DeckB--}
  31. {--}DeckA.FadeToPlay; // плавное воспроизведение DeckA
  32. {--}DeckB.FadeToPlay; // плавное воспроизведение DeckB
  33. {------------------------------------------------------------------------------}
  34. {После выполнения, скрипт останавливается до последующего запуска через Планировщик}

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

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

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

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

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

В этот промежуток:
  1. strPath := 'd:\Music MP3\iradio\Zastavki\'; // Путь к папке, где лежат отбивки часов
  2. strJingle := 'd:\Music MP3\iradio\Zastavki\tchas_otbivka.mp3'; //Путь и название джингла после отбивки часов
  3. PAL.Loop := True;
  4. P := SoundFX; // Проигрывание файлов **-00.mp3 через SoundFX, а не через деки.
  5. PAL.WaitForTime('XX:59:15'); //запускаемся в конце каждого часа. 45 сек - время буферезации, подбираем по свом параметрам, вкусам
  6. //strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3'; //определяем название файла с нужными часиками. Формат имени файла XX-XX.mp3
  7. P := Aux1;
  8. if P <> nil then
  9. begin


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

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


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


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

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

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


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

Спасибо.

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

0
54
wwc @wwc
wisher пишет:



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


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

Вопроса 2.

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

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

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

Спасибо.

0
53
wisher @wisher
привет wwc!
всё будет чётко работать!
для полной работы нужно подключить всё PAL и PHP скрипты, на предыдущей странице я описал только часть из этого...
и главное условие, версия samPHPweb 4.3.6 и локальный WEB сервер - если всё это есть то всё будет работать!
в начале нужно добиться вывода русского текста из баннера, потом подключить php скрипт и он будет сам записывать и перезаписывать текстовый файл. так вот как добиться вывода русского текста? есть ещё одно, настройка Icecast2 если там отображаются иероглифы
типа этого строчку значит вывода не будет...
решение eсть: нужно добавить важную строчку <charset>UTF-8</charset>
  1.  
  2. <mount>
  3. <mount-name>/ваш_моунт.mp3</mount-name>
  4. <password>xxxxxxxx</password>
  5. <charset>UTF-8</charset>
  6. <fallback-mount>/ваш_моунт.mp3</fallback-mount>
  7. <fallback-override>1</fallback-override>
  8. </mount>

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

по поводу картинок с помощью URL запросов я не знаю, я просто вывожу стандартными стредствами PHP
вот пример моего кода укороченного
  1.  
  2. <?php
  3. require("config.php"); // настройка конфигурации
  4. $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);
  5. $history = $db->rows();
  6. reset($history);
  7. list($key, $song) = each($history);
  8. PrepareSong($song);
  9. //--------------------------------------------------------------------------------------------------
  10. // комбинированные данные: смена переменных на более короткие
  11. $artist_title = $song["combine"]; // сейчас играет артист - композиция
  12. $picture = $song["picture"]; // данные картинка (Альбом)
  13. //--------------------------------------------------------------------------------------------------
  14. echo '<img src="'.$picture.'" alt="'.$artist_title.'" width="160" height="160" />'; // вывод картинки
  15. echo "<br>".$artist_title; // сейчас играет: артист - композиция вывод результата на страницу
  16. ?>

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

Внимание! это мои настройки PAL скрипта, возможно нужно будет изменить путь к файлам, вашего Веб сервера.
  1.  
  2. var Song : TSongInfo; // для функции выключателя по типу S
  3. const Filesongtitle = 'C:\www\htdocs\samPHPweb\recordsms.txt'; // Путь к текстовому файлу
  4. var UpdSong : TSongInfo;
  5. var Banners : TStringList;
  6. var LinePos : Integer;
  7. {------------------------------------------------------------------------------}
  8. var P : TPlayer;
  9. var URL : String;
  10. // эту строчку пока отключаем
  11. //URL := 'http://192.168.0.02/samPHPweb/recordsms.php'; // Путь к файлу PHP
  12. {------------------------------------------------------------------------------}
  13. PAL.Loop := True;
  14. PAL.WaitForPlayCount(1); // запуск скрипта после завершения очередного трека
  15. PAL.WaitForTime(T['+00:00:01']); // 1-3 сек. задержка выполнения
  16. {------------------------------------------------------------------------------}
  17. {функция выключателя сценария по типу S}
  18. if ActivePlayer <> nil then
  19. begin
  20. Song := ActivePlayer.GetSongInfo();
  21. if Song['songtype'] = 'S' then
  22. begin // начало выполнения сценария
  23. {------------------------------------------------------------------------------}
  24. {-- загрузка URL страницы (PHP скрипта) для записи в текстовый файл --}
  25. P := SoundFX; // через что играть
  26. if P <> nil then
  27. begin
  28. {--}Queue.AddFile(URL, ipTop);
  29. {--}SoundFX.QueueSong(Queue.NextInQueue);
  30. {--}SoundFX.Play; // Воспроизведение через Aux1 или SoundFX
  31. end;
  32. {------------------------------------------------------------------------------}
  33. end;
  34. end; // конец выполнения сценария
  35. {------------------------------------------------------------------------------}
  36. // второй сценарий
  37. PAL.WaitForTime(T['+00:00:06']); // 6-7 сек. задержка выполнения
  38. {функция выключателя сценария по типу S}
  39. if ActivePlayer <> nil then
  40. begin
  41. Song := ActivePlayer.GetSongInfo();
  42. if Song['songtype'] = 'S' then
  43. begin // начало выполнения сценария
  44. {------------------------------------------------------------------------------}
  45. // создаём вывод баннера в эфир
  46. {--}UpdSong := TSongInfo.Create;
  47. {--}Banners := TStringList.Create;
  48. {------------------------------------------------------------------------------}
  49. {-- загрузка текстового файла --}
  50. {--}if FileExists(Filesongtitle) then // чтение
  51. {--}Banners.LoadFromFile(Filesongtitle); // загрузка
  52. {--}UpdSong['title'] := Banners[LinePos]; // текст из файла
  53. {--}Encoders.SongChange(UpdSong); // вывод через радио-поток
  54. {------------------------------------------------------------------------------}
  55. end;
  56. end; // конец выполнения сценария
  57. {------------------------------------------------------------------------------}
  58. Banners.Free; // Очистить информацию после кодирования
  59. UpdSong.Free; // Очистить информацию после кодирования
  60. {------------------------------------------------------------------------------}

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


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

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

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

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

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

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

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

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

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

Спасибо.

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

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

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


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

Спасибо.

0
53
wisher @wisher
wwc пишет:

wisher

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

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


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

0
53
wisher @wisher
wwc пишет:



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

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

Отредактировано wisher - 27.11.2017
0
53
wisher @wisher
решил не дожидаясь, выложить.
  1.  
  2. // PAL скрипт ничего не выводит, он нужен для очистки, сканирования и заполнения
  3. // Настройка: имя категории, путь к папке, время и дату запуска изменить на свои.
  4. var P : TPlayer;
  5. var OldTime : DateTime;
  6. OldTime := Now;
  7. PAL.Loop := True;
  8. {------------------------------------------------------------------------------}
  9. // 1 сценарий время запуска на 1 минуту раньше чем второй
  10. if (now >= T['11:43:00']) and (now <= T['11:43:30']) and
  11. ((DayOfWeek(Now) = Monday)) then // запускается только в понедельник днём
  12. begin
  13. {--}Cat['new-music'].Clear; // очистка категории от треков
  14. {--}SubDir['C:\new-track'].Rescan; // сканирование папки на наличие треков
  15. {------------------------------------------------------------------------------}
  16. {--}PAL.WaitForTime(T['+00:01:00']); // 1 мин. ожидания от повторного запуска
  17. {--}End;
  18. {------------------------------------------------------------------------------}
  19. // 2 сценарий время запуска на 1 минуту позже чем первый
  20. if (now >= T['11:44:00']) and (now <= T['11:44:30']) and
  21. ((DayOfWeek(Now) = Monday)) then // запускается только в понедельник днём
  22. begin
  23. {--}Cat['new-music'].AddDir('C:\new-track\',False,ipTop); // если найдены треки, заполнить ими категорию
  24. //{--}Cat['new-music'].Shuffle; // перемешать треки если нужно
  25. {------------------------------------------------------------------------------}
  26. {--}PAL.WaitForTime(T['+00:01:00']); // 1 мин. ожидания от повторного запуска
  27. {--}End;

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

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

0
313
Krueger @Krueger
SenorRobinson пишет:

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

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

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

0
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
0
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 идёт ещё неплохо.

0
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;

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


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

0
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;

0





Согласие на обработку данных на нашем сайте

Продолжая просматривать страницу, вы соглашаетесь с использованием файлов «Cookie» и с Политикой конфиденциальности «Privacy».
Наверху или внизу страницы вы можете изменить валюту и язык по умолчанию. Английская версия сайта ещё находится в доработке и доступна не полностью.