Автор | Сообщение |
|
Отправлено: 19.03.09 10:42. Заголовок: Гибкий плейлист
Когда я начал озвучивать Лабиринт страха, то ознакомился со всеми реализациями плейлистов, какие только нашел, но у всех был один и тот же недостаток - они были недостаточно гибкими - каждый раз нужно все переписывать под себя. Немного поексперементировав я нашел решение, которое без изменений в логике можно будет использовать практически в любом проекте. В скрипте используется понятие "музыкальной темы" - набора файлов, которые проигрываются один за одним. Причем подключение темы происходит переопределением всего одной переменной. Создавать новую тему тоже очень просто - нужно создать массив с путями к нужным файлам используя очень простое правило именования - если тема будет называться intro, то массив должен называться $tracklist_intro. После этого отается только в нужном месте написать $music_theme = 'intro' и тема будет загружена. Скрипт также поддерживает изменение громкости проигрывания. Жду критики и предложений по улучшению. Потом я думаю можно будет сделать небольшую демку и залить на сайт. Файл со скриптом
|
|
Профиль
Цитата
Ответить
|
Ответов - 14
[только новые]
|
|
|
Отправлено: 19.03.09 10:55. Заголовок: Сразу заметил if ARR..
Сразу заметил if ARRSIZE('cur_theme')<track:track=0 и if ARRSIZE('tracklist_default')<track_def:track_def=0 здесь <=track, т.к. элементы массива будут с индексами (0)...(ARRSIZE('массив')-1)
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 19.03.09 11:03. Заголовок: Да, ещё - оправдано ..
Да, ещё - оправдано ли разделение на tracklist_default и tracklist_<<остальное>> ?
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 19.03.09 11:06. Заголовок: Проверки if volume ..
Проверки if volume <> volume_prev: volume_prev = volume play $cur_theme[track],volume end не нужны в принципе - такую проверку делает сам плеер.. то есть можно смело удалить "volume_prev" и писать всегда play $cur_theme[track],volume
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 19.03.09 11:16. Заголовок: Получим # counter i..
Получим # counter if music_on: if $music_theme <> $music_theme_prev: CLOSE $cur_theme[track] $music_theme_prev = $music_theme if $music_theme <> '': copyarr 'cur_theme', 'tracklist_<<$music_theme>>' track=0 end end if $music_theme <> '': if no isplay ($cur_theme[track]): track = track+1 if track >= ARRSIZE('cur_theme'):track = 0 end play $cur_theme[track],volume end else: CLOSE $cur_theme[track] end --- counter ---------------------------------
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 19.03.09 11:26. Заголовок: Byte пишет: Сразу з..
Byte пишет: цитата: | Сразу заметил if ARRSIZE('cur_theme')<track:track=0 и if ARRSIZE('tracklist_default')<track_def:track_def=0 здесь <=track, т.к. элементы массива будут с индексами (0)...(ARRSIZE('массив')-1) |
| Да с этим я немного просчитался Byte пишет: цитата: | Да, ещё - оправдано ли разделение на tracklist_default и tracklist_<<остальное>> ? |
| Я считаю что да, чаще всего есть одна большая тема и несколько маленьких, и за счте этого в большой теме (которую мы сделали по умолчанию) запоминается текущее положение в списке и тема не начинается с самого начала. У меня была идея запоминать положения в списке в любой теме, но придумать как это реализовать не получилось. Byte пишет: цитата: | Проверки if volume <> volume_prev: volume_prev = volume play $cur_theme[track],volume end не нужны в принципе - такую проверку делает сам плеер.. то есть можно смело удалить "volume_prev" и писать всегда play $cur_theme[track],volume |
| эту проверку я сделал что-бы не нагружать скрипт - строчка play $cur_theme[track],volume будет выполняться только если пользователь поменял громкость
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 19.03.09 11:28. Заголовок: Кстати, там нужно пр..
Кстати, там нужно присваивать track=ARRSIZE('cur_theme'), чтобы плейлист при смене проигрывался с начала: # counter if music_on: if $music_theme <> $music_theme_prev: CLOSE $cur_theme[track] $music_theme_prev = $music_theme if $music_theme <> '': copyarr 'cur_theme', 'tracklist_<<$music_theme>>' track=ARRSIZE('cur_theme') end end if $music_theme <> '': if no isplay ($cur_theme[track]): track = track+1 if track >= ARRSIZE('cur_theme'):track = 0 end play $cur_theme[track],volume end else: CLOSE $cur_theme[track] end --- counter ---------------------------------
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 19.03.09 11:30. Заголовок: werewolf пишет: У м..
werewolf пишет: цитата: | У меня была идея запоминать положения в списке в любой теме, но придумать как это реализовать не получилось. |
| Можно ввести массив: track[$music_theme] - будет хранить позицию для темы $music_theme. Использование play $cur_theme[track[$music_theme]],volume
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 19.03.09 17:15. Заголовок: Тогда версия с сохра..
Тогда версия с сохранением текущей позиции будет такой: # counter if music_on=1: if $music_theme <> $music_theme_prev: CLOSE $cur_theme[track[$music_theme_prev]] $music_theme_prev = $music_theme if $music_theme <> '': copyarr 'cur_theme', 'tracklist_<<$music_theme>>' track[$music_theme] = track[$music_theme]-1 if track[$music_theme] < 0: track[$music_theme]=ARRSIZE('cur_theme') end end end if $music_theme <> '': if no isplay ($cur_theme[track[$music_theme]]): track[$music_theme] = track[$music_theme]+1 if ARRSIZE('cur_theme')<=track[$music_theme]:track[$music_theme]=0 end play $cur_theme[track[$music_theme]],volume end else: CLOSE $cur_theme[track[$music_theme]] end --- counter --------------------------------- плюс здесь проигрывание в теме начинается именно с сохраненной позиции а не с следующей за сохраненной. еще предложения по улучшению будут?
|
|
Профиль
Цитата
Ответить
|
|
| moderator
|
|
|
Отправлено: 19.03.09 18:34. Заголовок: конечно. используй ..
конечно. используй [рre2][/рre2] и отступы для форматирования, а то мешанина получается
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 19.03.09 18:51. Заголовок: Nex спасибо, сам хо..
Nex спасибо, сам хотел уточнить что нужно исползовать, чтобы отступы сохранялись
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 19.03.09 19:31. Заголовок: Вот так для полного ..
Вот так для полного счастья: if music_on <> music_on_prev or $music_theme <> $music_theme_prev: CLOSE $cur_theme[track[$music_theme_prev]] music_on_prev = music_on $music_theme_prev = $music_theme if $music_theme <> '': copyarr 'cur_theme', 'tracklist_<<$music_theme>>' track[$music_theme] = track[$music_theme]-1 if track[$music_theme] < 0: track[$music_theme]=ARRSIZE('cur_theme') end end end if music_on=1 and $music_theme <> '': if no isplay ($cur_theme[track[$music_theme]]): track[$music_theme] = track[$music_theme]+1 if ARRSIZE('cur_theme')<=track[$music_theme]:track[$music_theme]=0 end play $cur_theme[track[$music_theme]],volume end Запоминает позицию и при смене music_on.
|
|
Профиль
Цитата
Ответить
|
|
|
Отправлено: 21.03.09 02:07. Заголовок: Werewolf пишет: эту..
Werewolf пишет: цитата: | эту проверку я сделал что-бы не нагружать скрипт - строчка play $cur_theme[track],volume будет выполняться только если пользователь поменял громкость |
| Ты не понял.. этими строками ты наоборот добавляешь лишние действия, так как плеер при тех же самых зачениях трека и вольюма никаких действий производить не будет..
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 23.03.09 10:31. Заголовок: rrock.ru Да, я позж..
rrock.ru Да, я позже с этим сам разобрался.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 25.03.09 08:34. Заголовок: Byte пишет: Вот так..
Byte пишет: цитата: | Вот так для полного счастья: if music_on <> music_on_prev or $music_theme <> $music_theme_prev: CLOSE $cur_theme[track[$music_theme_prev]] music_on_prev = music_on $music_theme_prev = $music_theme if $music_theme <> '': copyarr 'cur_theme', 'tracklist_<<$music_theme>>' track[$music_theme] = track[$music_theme]-1 if track[$music_theme] < 0: track[$music_theme]=ARRSIZE('cur_theme') end end end if music_on=1 and $music_theme <> '': if no isplay ($cur_theme[track[$music_theme]]): track[$music_theme] = track[$music_theme]+1 if ARRSIZE('cur_theme')<=track[$music_theme]:track[$music_theme]=0 end play $cur_theme[track[$music_theme]],volume end Запоминает позицию и при смене music_on. |
| Страшно то как !!!!
|
|
Профиль
Цитата
Ответить
|
|