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

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

 

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

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

  1.  
  2. var Done : Boolean = False;
  3. var Song : TSongInfo;
  4. While not Done do
  5. begin
  6. if QueuedPlayer <> nil then
  7. begin
  8. Done := True;
  9. Song := QueuedPlayer.GetSongInfo;
  10. if (Song<>nil) then
  11. case song['songtype'] of
  12. 'S' : QueuedPlayer.Volume := 255; // уровень громкости обычных треков
  13. 'A','J','P' : QueuedPlayer.Volume := 320; // уровень громкости джинглов из категории A,J,P
  14. 'C' : QueuedPlayer.Volume := 128; // уровень громкости из категории разное (эту строчку можно удалить)
  15. else QueuedPlayer.Volume := 255; // повторная проверка состояния громкости
  16. end;
  17. end;
  18. end;
  19. PAL.Loop := True; // повторный запуск выполнения скрипта


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

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

  1. var Song : TSongInfo;
  2. var P : TPlayer;
  3. P := Aux1;
  4. PAL.WaitForTime('20:00:00');
  5. ActivePlayer.FadeToPause;
  6. if P <> nil then
  7. begin
  8. Song := CAT['20'].ChooseSong(1,NoRules);
  9. P.QueueSong(Song);
  10. P.Play;
  11. end;
  12. DeckA.Eject;
  13. DeckB.Eject;
  14. if Aux1.Status = 1 then
  15. begin

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

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

  1. var Song : TSongInfo;
  2. var P : TPlayer;
  3. P := Aux1;
  4. PAL.WaitForTime('20:00:00');
  5. ActivePlayer.FadeToPause;
  6. if P <> nil then
  7. begin
  8. Song := CAT['20'].ChooseSong(1,NoRules);
  9. P.QueueSong(Song);
  10. P.Play;
  11. end;
  12. DeckA.Eject;
  13. DeckB.Eject;
  14. if Aux1.Status = 1 then
  15. begin
[/quote]

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

0
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
0
53
wisher @wisher
Который выше скрипт с уменьшением громкости тебе не подходит?
Там можно уменьшить звук играющего трека до минимума, а в это время будет играть через Aux1 то что тебе необходимо
Затем выставить задержку времени на то которое тебе нужно и снова увеличить громкость
Или тебе нужно чтоб совершенно другой трек начал воспроизведение?

0
53
wisher @wisher
Zidane Tribal попробуй этот скрипт
Возможно это то что тебе необходимо
  1.  
  2. var Song : TSongInfo;
  3. var P : TPlayer;
  4. ActivePlayer.FadeToPause; // Перевод текущего трека в режим пауза
  5. P := Aux1; // через что играть
  6. if P <> nil then
  7. begin
  8. Song := Cat['20'].ChooseSong(1,NoRules);
  9. begin
  10. Aux1.QueueSong(Song);
  11. Aux1.Play;
  12. End;
  13. End;
  14. DeckA.Eject; // Очистка DeckA от текущего трека
  15. DeckB.Eject; // Очистка DeckB от текущего трека
  16. PAL.WaitForTime('+00:00:30'); // время ожидания 30 сек
  17. IdlePlayer.Next; // Вставка очередного трека в ожидании в свободный плеер
  18. DeckA.Play; // Начало воспроизведения через DeckA или
  19. DeckB.Play; // Начало воспроизведения через DeckB


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

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

Zidane Tribal попробуй этот скрипт
Возможно это то что тебе необходимо
  1.  
  2. var Song : TSongInfo;
  3. var P : TPlayer;
  4. var i : integer;
  5. ActivePlayer.FadeToPause; // Перевод текущего трека в режим пауза
  6. P := Aux1; // через что играть
  7. if P <> nil then
  8. begin
  9. Song := Cat['20'].ChooseSong(1,NoRules);
  10. begin
  11. Aux1.QueueSong(Song);
  12. Aux1.Play;
  13. End;
  14. End;
  15. DeckA.Eject; // Очистка DeckA от текущего трека
  16. DeckB.Eject; // Очистка DeckB от текущего трека
  17. PAL.WaitForTime('+00:00:30'); // время ожидания 30 сек
  18. IdlePlayer.Next; // Вставка очередного трека в ожидании в свободный плеер
  19. DeckA.Play; // Начало воспроизведения через DeckA или
  20. DeckB.Play; // Начало воспроизведения через DeckB


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


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

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

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

0
6
Zidane_Tribal @Zidane_Tribal
Все, допилил))) Только пока скрипт срабатывает возникает пауза в несколько секунд, а это не хорошо, поэтому надо бы сделать чтоб определялось сколько осталось до конца трека в Aux1 и за 3-5 секунд до окончания уже срабатывал скрипт, а не ждал как сейчас когда трек закончится
  1. var Song : TSongInfo;
  2. var P : TPlayer;
  3. PAL.WaitForTime('9:40:00');
  4. ActivePlayer.FadeToPause;
  5. P := Aux1;
  6. if P <> nil then
  7. begin
  8. Song := Cat['20'].ChooseSong(1,NoRules);
  9. begin
  10. Aux1.QueueSong(Song);
  11. Aux1.Play;
  12. End;
  13. End;
  14. DeckA.Eject;
  15. DeckB.Eject;
  16. var Waiting : Boolean = True;
  17. while Aux1.status = 0 do
  18. begin
  19. Waiting := False;
  20. end;
  21. IdlePlayer.Next;
  22. DeckA.FadeToPlay;
  23. DeckB.FadeToPlay;

Отредактировано Zidane_Tribal - 14.10.2014
0
6
Zidane_Tribal @Zidane_Tribal
Уррааа!! Допилил)) Теперь все как мне надо) Может кому пригодится)
  1.  
  2. //Скрипт для остановки воспроизведения в деках и запуска в Aux1, например, заранее записанной рубрики.
  3. //Скрипт ставим в Scheduler на более раннее время чем указанное время срабатывания скрипта.
  4. //by Zidane Tribal
  5. //14.10.2014
  6. var Song : TSongInfo;
  7. var P : TPlayer;
  8. PAL.WaitForTime('9:40:00'); //время в которое сработает скрипт
  9. ActivePlayer.FadeToPause; //фейдим активную деку в паузу. Можно прописать FadeToStop.
  10. P := Aux1; //через что будет играть трек
  11. if P <> nil then
  12. begin
  13. Song := Cat['20'].ChooseSong(1,NoRules); //выбираем категорию где лежит наш трек
  14. begin
  15. Aux1.QueueSong(Song); //вставляем трек
  16. Aux1.Play; //проигрываем
  17. End;
  18. End;
  19. DeckA.Eject; //очищаем деки А
  20. DeckB.Eject; //и В
  21. var Waiting : Boolean = True;
  22. while ((Aux1.Duration-Aux1.CurTime)>4500) do //выставляем через какое время до окончания трека скрипт продолжит работу
  23. begin
  24. Waiting := False;
  25. end;
  26. IdlePlayer.Next; //вставляем трек из Queue в одну из дек
  27. DeckA.FadeToPlay; //запуск с фейдером
  28. DeckB.FadeToPlay; //запуск с фейдером

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

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


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

0
6
Zidane_Tribal @Zidane_Tribal
wisher пишет:


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


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

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

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

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

Пример скрипта: Запуск в 10 часов утра
  1.  
  2. // Запуск этого сценария через планировщик (Event Scheduler) в 9:59:12
  3. var P : TPlayer;
  4. var Song : TSongInfo;
  5. var OldTime : DateTime;
  6. OldTime := Now;
  7. PAL.Loop:=True; // Запуск выполнения работы скрипта
  8. if (now >= T['09:59:16']) and (now <= T['09:59:30']) then // Время работы первого сценария 14 сек
  9. begin
  10. Queue.Clear; // Очистка плейлиста от треков
  11. Cat['english'].QueueBottom(smMRPA, EnforceRules); // Ставим 3 трека в плейлист из текущей категории
  12. Cat['english'].QueueBottom(smMRP, EnforceRules);
  13. Cat['english'].QueueBottom(smLemmingLogic, EnforceRules);
  14. Queue.AddFile('C:\voice-show\start-english.mp3',ipTop); // (Фоновый джингл) Голос ведущего о начале передачи (ТОП 20+, Алтернатива ...)
  15. PAL.WaitForTime(T['+00:00:20']); // Задержка 20 сек. от повторного срабатывания
  16. End;
  17. if (now >= T['09:59:26']) and (now <= T['10:50:26']) then // Время работы второго сценария 51 мин
  18. begin
  19. Cat['english'].QueueBottom(smLemmingLogic, EnforceRules); // Добавление 1 трека из категории, можно изменить на (smMRPA, EnforceRules)
  20. PAL.WaitForPlayCount(1); // Повторный запуск через 1 трек
  21. End;
  22. if (now >= T['10:58:16']) and (now <= T['10:58:30']) then // Время работы третьего сценария 14 сек
  23. begin
  24. P := Aux1; // через что играть (Эффект налаживания на играющий трек)
  25. if P <> nil then
  26. begin
  27. Song := Cat['end-english'].ChooseSong(1,NoRules); // (Чистый джингл без фона) Голос ведущего о завершении текущей передачи
  28. if Song <> nil then
  29. begin
  30. Aux1.QueueSong(Song);
  31. Aux1.Play;
  32. End;
  33. End;
  34. PAL.WaitForTime(T['+00:00:20']); // Задержка 20 сек. от повторного срабатывания
  35. End;
  36. if (now >= T['10:59:16']) and (now <= T['10:59:30']) then // Время работы поледнего сценария 14 сек
  37. begin
  38. Queue.Clear; // Очистка плейлиста от оставшихся треков
  39. Cat['russian'].QueueBottom(smMRPA, EnforceRules); // Ставим 2 трека в плейлист из другой категории
  40. Cat['russian'].QueueBottom(smMRP, EnforceRules);
  41. PAL.Loop:=False; // Завершение работы всего скрипта в режим стоп
  42. End;
  43. // После выполнения всех пунктов сценария, скрипт завершает свою работу


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

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

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

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

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

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

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

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

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

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

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

  1.  
  2. var P : TPlayer;
  3. var Song : TSongInfo;
  4. var strFile, strPath, strJingle : String;
  5. strPath := 'C:\Users\saxell\Desktop\Jingles\'; // Ïóòü ê ïàïêå, ãäå ëåæàò îòáèâêè ÷àñîâ
  6. strJingle := 'C:\Users\saxell\Desktop\Jingles\EuropeRussia-reklama.mp3'; //Ïóòü è íàçâàíèå äæèíãëà ïîñëå îòáèâêè ÷àñîâ
  7. PAL.Loop := True;
  8. PAL.WaitForTime('XX:59:45'); //çàïóñêàåìñÿ â êîíöå êàæäîãî ÷àñà. 45 ñåê - âðåìÿ áóôåðåçàöèè, ïîäáèðàåì ïî ñâîì ïàðàìåòðàì, âêóñàì
  9. strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3'; //îïðåäåëÿåì íàçâàíèå ôàéëà ñ íóæíûìè ÷àñèêàìè. Ôîðìàò èìåíè ôàéëà XX-XX.mp3
  10. P := Aux1;
  11. if P <> nil then
  12. begin
  13. Queue.AddURL('mms://live.rfn.ru/vesti_fm',ipTop);
  14. PAL.WaitForTime(T['+00:00:15']); //Wait 15 secs
  15. Queue.AddFile(strJingle, ipTop);
  16. Queue.AddFile(strFile, ipTop);
  17. P := ActivePlayer;
  18. if P <> nil then P.FadeToNext;
  19. end;


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

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

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


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

смастерил такой скриптик может что и не правильно но всё вроде работает
пример ретрансляции выпуска новостей радиостанции Вести FM с увеличением громкости вещания
version.hour.jingle.improved.1.5
  1.  
  2. {Запуск скрипта через планировщик установить за 10 секунд до начала точного времени запуска}
  3. var P : TPlayer;
  4. var Song : TSongInfo;
  5. var strFile, strPath, strJingle : String;
  6. strPath := 'C:\CLOCK\'; // Путь к папке, где лежат отбивки часов
  7. strJingle := 'C:\CLOCK\start_hour.mp3'; // Путь и название джингла после отбивки часов
  8. PAL.Loop := False; // Одноразовый цикл работы скрипта
  9. PAL.WaitForTime('XX:59:46'); // Точное время запуска (подгоняем секунды опытным путём)
  10. strFile := strPath + FormatDateTime('hh', now+1/24) + '-00.mp3'; // Определяем название файла с нужными часиками. Формат имени файла XX-XX.mp3
  11. P := Aux1;
  12. if P <> nil then
  13. begin
  14. Queue.AddURL('http://icecast.vgtrk.cdnvideo.ru/vestifm_mp3_192kbps',ipTop); // Путь URL внешнего источника новостей
  15. Queue.AddFile(strJingle, ipTop);
  16. Queue.AddFile(strFile, ipTop);
  17. P := ActivePlayer;
  18. if P <> nil then P.FadeToNext;
  19. end;
  20. {Здесь очень важно настроить секунды в зависимости от длины ваших файлов отбивки часов и джингла время ожидания PAL.WaitForTime('+00:00:24');
  21. необходимо изменить и добиться срабатывания IdlePlayer.Volume := 633; на увеличение громкости иначе не будет срабатывания увеличения громкости}
  22. PAL.WaitForTime('+00:00:24'); // 24 сек. ожидания к принудительному увеличению уровня громкости не активного плеера (подгоняем секунды опытным путём)
  23. IdlePlayer.Volume := 731; // увеличение положения громкости не активного плеера выше стандартного
  24. PAL.WaitForTime('+00:03:18'); // время ожидания до завершения вещания новостей
  25. ActivePlayer.Volume := 537; // начало уменьшения горомкости новостей
  26. ActivePlayer.Volume := 474;
  27. ActivePlayer.Volume := 411;
  28. ActivePlayer.Volume := 348;
  29. ActivePlayer.Volume := 285;
  30. ActivePlayer.Volume := 222;
  31. ActivePlayer.Volume := 159;
  32. ActivePlayer.Volume := 96;
  33. ActivePlayer.FadeToNext; // плавный переход заврешения новостей и начало воспроизведения текущего трека в ожидании
  34. PAL.WaitForTime('+00:00:04'); // 4 сек. ожидания (не изменять)
  35. DeckA.Volume := 255; // возврат положения громкости DeckA в нормальное состояние
  36. DeckB.Volume := 255; // возврат положения громкости DeckB в нормальное состояние
  37. {После завершения сценария скрипт завершает свою работу}


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

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





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

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