Форум переехал на новый адрес: http://qsp.su



АвторСообщение





ссылка на сообщение  Отправлено: 19.03.09 10:42. Заголовок: Гибкий плейлист


Когда я начал озвучивать Лабиринт страха, то ознакомился со всеми реализациями плейлистов, какие только нашел, но у всех был один и тот же недостаток - они были недостаточно гибкими - каждый раз нужно все переписывать под себя.
Немного поексперементировав я нашел решение, которое без изменений в логике можно будет использовать практически в любом проекте.
В скрипте используется понятие "музыкальной темы" - набора файлов, которые проигрываются один за одним. Причем подключение темы происходит переопределением всего одной переменной.
Создавать новую тему тоже очень просто - нужно создать массив с путями к нужным файлам используя очень простое правило именования - если тема будет называться intro, то массив должен называться $tracklist_intro. После этого отается только в нужном месте написать $music_theme = 'intro' и тема будет загружена.
Скрипт также поддерживает изменение громкости проигрывания.
Жду критики и предложений по улучшению. Потом я думаю можно будет сделать небольшую демку и залить на сайт.

Файл со скриптом


Спасибо: 0 
Профиль Цитата Ответить
Ответов - 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)

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 19.03.09 11:03. Заголовок: Да, ещё - оправдано ..


Да, ещё - оправдано ли разделение на tracklist_default и tracklist_<<остальное>> ?

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 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


Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 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 ---------------------------------


Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 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 будет выполняться только если пользователь поменял громкость

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 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 ---------------------------------


Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 19.03.09 11:30. Заголовок: werewolf пишет: У м..


werewolf пишет:

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


Можно ввести массив:
track[$music_theme] - будет хранить позицию для темы $music_theme.
Использование
play $cur_theme[track[$music_theme]],volume


Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 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 ---------------------------------


плюс здесь проигрывание в теме начинается именно с сохраненной позиции а не с следующей за сохраненной.

еще предложения по улучшению будут?

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 19.03.09 18:34. Заголовок: конечно. используй ..


конечно. используй [рre2][/рre2] и отступы для форматирования, а то мешанина получается

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 19.03.09 18:51. Заголовок: Nex спасибо, сам хо..


Nex
спасибо, сам хотел уточнить что нужно исползовать, чтобы отступы сохранялись

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 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.

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 21.03.09 02:07. Заголовок: Werewolf пишет: эту..


Werewolf пишет:

 цитата:

эту проверку я сделал что-бы не нагружать скрипт - строчка play $cur_theme[track],volume будет выполняться только если пользователь поменял громкость



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

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 23.03.09 10:31. Заголовок: rrock.ru Да, я позж..


rrock.ru
Да, я позже с этим сам разобрался.

Спасибо: 0 
Профиль Цитата Ответить



ссылка на сообщение  Отправлено: 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.



Страшно то как !!!!

Спасибо: 0 
Профиль Цитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация вкл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия