Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Perl Скрипт |
Автор: Louie 28.2.2011, 16:52 | ||
Вем добрый день. Сразу приступлю к теме. Имеется скрипт проигрывания музыки. Он беред рандомную музыку из папки и через кажды 5 песенок вставляет другую песенку. Но суть в другом. Как я уже подметил , скрипт играет рандомно, но мне надо чтобы всё шло по порядку. вот код:
Можете помочь и поправить этот код? |
Автор: powerfox 28.2.2011, 17:15 | ||
Как-то так:
|
Автор: Louie 28.2.2011, 17:30 | ||||||
так. походу что-то не так. выложу полностью плагин
после замены он выглядит так:
и тогда Перл начинает ругаться:
|
Автор: powerfox 28.2.2011, 17:54 | ||
Стр. 22-24:
|
Автор: Louie 28.2.2011, 17:58 | ||
|
Автор: powerfox 28.2.2011, 20:02 | ||
Извиняюсь, ошибся ![]() Надо так (не забудьте скобки в начали в конце):
|
Автор: Louie 28.2.2011, 20:38 | ||||
Наверное уже достал Вас =( Общий код теперь выглядит так -
|
Автор: powerfox 1.3.2011, 00:41 | ||
Да это я косячу ![]()
|
Автор: Louie 1.3.2011, 04:06 | ||
так.. код работает. считывает все по порядку!! но теперь он ненаходит вставки . Тобишь через каждые 5 песен он играет "вставку". Но когда дело доходит до этого, то перл выдает вот это.
Хотя до этого находил так же рандомно из папки и никакой плейлист ему не нужен был.. Исправили одно, нарисовался другой косяк +( Эх... достал уже этот скрипт... _------------------------------------------- Хотя если поменять название папки - vstavki , на основную папку, то все продолжает играть дальше, по порядку. Т.е. Перл "потерял" папку. Права поставил 777 и на все песни в ней (ради проверки), всё равно не находит =( Он хочет играть только с одной папки =( |
Автор: powerfox 1.3.2011, 15:28 | ||||
Нужно так:
--->
|
Автор: arto 1.3.2011, 16:49 |
my @mp3; sub ices_init { my @j = </home/muzika/vstavki/*.mp3> my ( $i,$j ); @mp3 = map { if (++$i%5 == 0) { $j[++$j%$#j] } else { $_ } } </home/muzika/*.mp3>; } sub ices_get_next { return shift @mp3; } проверить крайние эффекты. |
Автор: Louie 2.3.2011, 01:06 | ||||
arto -
powerfox - Поменял код, выдаёт тоже-самое +( |
Автор: arto 2.3.2011, 08:34 |
а чыто там до 5'ой строчки? |
Автор: Louie 2.3.2011, 11:35 |
Это весь код, который я вставил. Тобишь всё что есть, написано выше |
Автор: arto 2.3.2011, 11:40 |
my @j = </home/muzika/vstavki/*.mp3>; |
Автор: Louie 2.3.2011, 12:23 | ||||
перл файл:
|
Автор: arto 2.3.2011, 14:47 |
1; в самый конец файла |
Автор: Louie 2.3.2011, 16:18 |
Спасибо ОГРОМНОЕ!!!!!! Я бы сказал СПАСИБИЩЕ! =)) Буду теперь думать как его заставить считывать новые песенки без перезапуска программы +) |
Автор: arto 2.3.2011, 17:35 |
stat на "." и сравнивать mtime. |
Автор: Louie 8.3.2011, 02:41 |
Товарищи! Извиняйте меня пожалуйсто. Но вопрос.. Всё работает супер. как часики, по после проигрывания всех треков, программа выходит. А можно ли сделать чтобы после того как в папке закончилась музыка, то начаналось проигрывание с первого трека. Спасибо заранее!!! |
Автор: arto 8.3.2011, 11:53 |
по исчерпанию @mp3 запускать ices_init. |
Автор: Louie 8.3.2011, 19:27 |
А поподробнее? Если Вас не затруднит... |
Автор: arto 8.3.2011, 20:20 |
ices_init () unless (@mp3); |
Автор: Louie 12.3.2011, 19:49 | ||
Playlist file name is empty, shutting down. Perl subsystem shutting down: Как понимаете, плэйлиста и нету =( Сделал, ради проверки. Указал файл, а ему всё равно +( может не туда строчку вставил?
|
Автор: arto 13.3.2011, 08:15 |
поместить в ices_get_next |
Автор: Louie 13.3.2011, 13:44 |
Спасибо огромное!!! Все заработало +) |
Автор: Badmne 4.4.2011, 18:27 | ||
Извините,что открываю тему заного. Но можно ли как-нибудь дополнить этот скриптик, тем чтобы он каждый час проигрывал файл. Тобишь допустим в каждую 59 минуту он проигрывает файл определенный. Есть скрипт для программы под Виндовс, а в перле несмыслю ничего. Вот код ( может поможет )
|
Автор: Pfailed 4.4.2011, 20:18 | ||||
Это не Perl, а нечто Pascal подобное. |
Автор: Badmne 4.4.2011, 20:19 |
Ну это код для программы под Виндовсом. это я просто в пример выложил, может его можно переделать как-то... |
Автор: arto 4.4.2011, 23:30 |
50€/hour. слишком много надо разбираться, как работает ваша система, как можно прервать трансляцию текущей музыки, как ее возобновить. |
Автор: Badmne 5.4.2011, 13:05 |
хорошо. А можно сделать, чтобы просто в определенное время играла музыка из другой папочки? Ведь с джинглами получилось, только там была зависимость от кол-ва песенок, а нельзя сделать зависимость от времени? |
Автор: arto 5.4.2011, 14:50 |
что делать, если в определенное время уже играет музыка? как ее прервать? как ее восстановить после проигрывания музыки из другой папки? или -- определяем перед каждым проигрыванием длину файла, и вычисляем, сколько он может играть. как запустить на проигрывание только части файла? |
Автор: Badmne 5.4.2011, 17:20 |
Ну скрипт который я предоставил, он сам обрывает песенку и включает другую из указанной папки. Следовательно в нём лежит информация, как останавливать музыку. |
Автор: arto 5.4.2011, 21:26 |
вы его подробно прокомментируйте, и я, если будет время, прочитаю |
Автор: gcc 5.4.2011, 22:10 |
Badmne, Вам сюда: http://forum.vingrad.ru/forum/Vingrad-help-center.html |
Автор: Badmne 6.4.2011, 12:22 |
arto, кого именно прокоментировать? Я в скриптах не очень. Код который я выложил добавляем в програмку которая работает под Виндовсом и там всё происходит само. Значит в тех строчках всё прописано. Вот я и думал, поскольку там другой язык, то возможно ли его перевести на пэрл язык? |
Автор: arto 6.4.2011, 12:45 |
для того, чтобы понять, что надо сделать, надо смотреть на вашу систему, а это займет время. |
Автор: Badmne 6.4.2011, 12:57 |
хм... и как Вам в этом помочь? что необходимо? |
Автор: arto 6.4.2011, 13:35 |
50€/hour вам ведь еще fade понадобится для прерванного фрагмента? |
Автор: Badmne 7.4.2011, 12:51 | ||
Так.. нашел в интернете, что можно использовать скрипт который вы уже написали, но дополнить его. суть такова:
Такое реально сделать? |
Автор: arto 7.4.2011, 13:25 |
как ловить сигнал? как я понимаю, у вас embedded perl. в предложенном решении нет понятия fade (приглушения), музыка будет рваться резко. так что все равно надо будет вашу систему изучать. |
Автор: Badmne 7.4.2011, 13:30 |
"оборваться" не даст сервер. Так скажем это транслятор, который выполняет скрипты. А сервер плавные переходы делает. Поэтому может сделать чтобы он обрывал их? |
Автор: arto 7.4.2011, 13:39 |
какие сигналы он ловит? как он прерывает музыку? после прерывания он вызывает ices_get_next? |
Автор: Badmne 7.4.2011, 13:42 |
всё что он ловит, было написано в скрипте указанном выше.. а подробнее я не скажу , т.к. не знаю эту программу так досканально. Ну скорей всего ices_get_next, в том то скрипте он этот сигнал цепляет? |
Автор: arto 7.4.2011, 15:12 |
все упирается в то, что в любом случае надо смотреть, как ваша система работает. Добавлено через 11 минут и 2 секунды sub ices_get_next { my ($h, $m, $s) = ( localtime )[2,1,0]; if ($h == 12 && $m == 55 && $s == 0) return ( </home/gguser/radio/other_muzika/*.mp3> )[0]; return shift @mp3; } |
Автор: Badmne 7.4.2011, 15:24 |
ну в смысле , как? =) что показать? |
Автор: arto 7.4.2011, 15:53 |
написал вам -- если время ровно 12:55:00, то вам проиграют музыку из другого каталога. |
Автор: Badmne 7.4.2011, 16:04 |
Извините, не понял последней фразы +( |
Автор: arto 7.4.2011, 21:41 |
http://forum.vingrad.ru/forum/topic-323670/kw-perl-%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0-%D1%80%D0%B0%D0%BD%D0%B4%D0%BE%D0%BC/45.html# |
Автор: Badmne 10.4.2011, 12:42 | ||||
Вставил код.
сам плагин выглядит так:
|
Автор: arto 11.4.2011, 08:59 |
if ($h == 12 && $m == 55 && $s == 0) { return (( </home/gguser/radio/other_muzika/*.mp3> )[0]); } |
Автор: Badmne 11.4.2011, 18:18 |
Скрипт прочёлся без проблем. Перл его скушал, только в заданное время - 0 реакции =( Проигрывает дальше музыку из первоначальной папки. |
Автор: arto 11.4.2011, 20:06 |
естественно. система должна прерваться. пошлите ей сигнал, например KILL |
Автор: Badmne 11.4.2011, 21:42 |
я полностью перезапустил всю систему... +( |
Автор: arto 11.4.2011, 23:23 |
ну. я не знаю, как работает ваша система. изучайте документацию. |
Автор: Badmne 12.4.2011, 18:41 |
Your script module has to define at least a function named ices_get_next, which should return a path to a file or FIFO containing MP3 data. In addition you may define the functions ices_init and ices_shutdown which will be called by ices once before asking for the first song and before shutting down, respectively. You may also define ices_get_lineno, which specifies the line number of the current track in the cue file. If you don't use the cue file it is safe to omit this function. Finally you can define ices_get_metadata to return a string you want to use for title streaming. Ices will call this function once per track after calling ices_get_next. If this function is not defined or returns null, ices will use whatever it can get out of the file itself, either tags or the file name. I suggest you take a look in the distributed module files and just expand on that. Нашел вот это... может не ту команду подаёт перл скрипт? |
Автор: arto 12.4.2011, 19:46 |
вы английский понимаете? нет там возможности прервать текущий трек. можете попробовать вот эти сигналы для передргивания трека: HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS, но я не уверен, что они помогут. максимум -- обрезать перед запуском трек, подстраиваясь под время. |
Автор: Badmne 12.4.2011, 20:16 |
ну допустим команда USR1 - включает сразу следующую песню. Значит делаем вывод, что перл не может оборвать песенку в опред. время и поставить другую из другой папки. А как-нибудь заставить через cron это сделать тоже нереально? |
Автор: arto 12.4.2011, 22:20 |
ну и проверяйте в ices_get_next время, и в нужное включайте нужный трек. в crontab пропишите посылку сигнала в нужное время. |
Автор: Louie 21.4.2011, 18:11 |
Товарищи.. вернусь к скрипту, который Вы написали. Спасибо Вам огромное, но у меня вопросик. Можно ли как-то подправить скрипт, чтобы после "вставки" он проигрывал следующий файл, а не через один. Получается что "вставка" сьедает композицию. Вот пример: У меня есть 20 файлов в основной папке. Вставки играют каждые 5 файлов. И получается что у меня сьедается файл под номером 6,11,16. Как то можно подредактировать ? |