Просмотр полной версии : Вопрос по Sound Tracker
Есть мелодия написанная в Sound Tracker (классическом)
как её заставить проиграться один раз и заткнуть навсегда?
средствами самого тракера это реально сделать?
Навсегда- только доработкой плеера.
Надолго- поставить длину в 255 позиций и забить неиспользуемые пустым паттерном.
denpopov
20.02.2014, 17:21
как её заставить проиграться один раз и заткнуть навсегда?
Gasman публиковал исходники демы Ninja Milkman Conspiracy, там есть дизассемблированный проигрыватель Sound Tracker с комментариями. может, поможет?
null_device
20.02.2014, 18:07
jerri, "посчитать" количество вызовов плейера, после инициализации мелодии, и прекратить его вызов по достижении "конца" мелодии. Добавить в конец мелодии "паузу", или "заткнуть" AY\YM - "вручную".
---------- Post added at 22:07 ---------- Previous post was at 21:47 ----------
Как вариант: попробовать "перекомпилировать" мелодию в Sound Tracker Pro. Там есть точка остановки мелодии adr+9.
Как вариант: попробовать "перекомпилировать" мелодию в Sound Tracker Pro. Там есть точка остановки мелодии adr+9.
Можно, только надо полностью послушать мелодию в STPro, вполне возможно, что играть она будет по другому. Например, в обычном ST какой-нибудь звук можно отредактировать так, что он сам затухнет и потом будет тишина до следующей ноты, то STPro после затухания сам её проиграет ещё раз, там где в обычном уже тишина. Т.е. надо ставить R--, чтобы не было повторения.
Как вариант: попробовать "перекомпилировать" мелодию в Sound Tracker Pro. Там есть точка остановки мелодии adr+9.
И эта точка сама вызывается по достижению конца мелодии?
null_device
20.02.2014, 18:25
Vitamin, чего-то, малость "туплю". Запутала постановка вопроса ТС. ;)
Значит: только "считать" количество вызовов плейера и по достижении нужного значения вызвать процедуру "остановки" и "отключить" вызов плейера.
Значит: только "считать" количество вызовов плейера и по достижении нужного значения вызвать процедуру "остановки" и "отключить" вызов плейера.
Т.е. сначала узнать длительность мелодии (а если их несколько, то еще и табличку сделать), а потом еще сбоку состряпать "закат солнца вручную" со счетчиками и вызовами?;)
null_device
20.02.2014, 18:47
Vitamin, а есть более простой способ - поделитесь? :)
сначала узнать длительность мелодии (а если их несколько, то еще и табличку сделать), а потом еще сбоку состряпать "закат солнца вручную" со счетчиками и вызовами?
Есть мелодия написанная в Sound Tracker (классическом)
В случае ОДНОЙ мелодии, изыскиваем в памяти несколько ячеек для организайии "счетчика" (ибо, использовать для хранения регистры - это не по-джедайски). При инициализации мелодии, заносим в них вычисленное значение (каким образом это будет сделано - второй вопрос). На каждом цикле до перехода на плейер, проверяем это значение и уменьшаем его до тех пор, пока оно не будет равно 0 (иначе, переходим на процедуру "выключения" мелодии, а в ячейки заносим еденицу). Это, по вашему - очень сложная конструкция?
Vitamin, а есть более простой способ - поделитесь?
Предложил уже.
При средней длине мелодии в 10 позиций и скорости 5, имеем свободными 245 позиций по 64 строки по 5 фреймов что даст 26 минут тишины. Для некоторых ситуаций вполне себе подойдет.
Если надо именно навсегда- модифицировать плеер чтобы он отключал точку входа +6 по достижению конца.
null_device
20.02.2014, 19:03
как её заставить проиграться один раз и заткнуть навсегда?
Vitamin, т.е. по-вашему, предложенный мною способ - это "ламерство" и "индусский код", а предложенный вами способ "допиливания" мелодии или плеера - не "секс в гамаке и стоя"? :)
Gasman публиковал исходники демы Ninja Milkman Conspiracy, там есть дизассемблированный проигрыватель Sound Tracker с комментариями. может, поможет?
где?
да захачить плеер + закат вручную! универсально.
V
В случае ОДНОЙ мелодии, изыскиваем в памяти несколько ячеек для организайии "счетчика" (ибо, использовать для хранения регистры - это не по-джедайски). При инициализации мелодии, заносим в них вычисленное значение (каким образом это будет сделано - второй вопрос). На каждом цикле до перехода на плейер, проверяем это значение и уменьшаем его до тех пор, пока оно не будет равно 0 (иначе, переходим на процедуру "выключения" мелодии, а в ячейки заносим еденицу). Это, по вашему - очень сложная конструкция?
Да нет, мелодий много и огород с табличками городить не хочется.
есть исходники плеера STPro?
где?
комментов там минимум
Vitamin, т.е. по-вашему, предложенный мною способ - это "ламерство" и "индусский код", а предложенный вами способ "допиливания" мелодии или плеера - не "секс в гамаке и стоя"?
Неужели я давал оценки ненаписанному коду типа "ламерство" или "индусский код"? Не припомню...
А вот оценку трудоемкости всех вариантов предлагаю выполнить самостоятельно.
null_device
20.02.2014, 19:28
мелодий много и огород с табличками городить не хочется.
Много - это сколько?
Никакого огорода - если все мелодии "находятся" в памяти, при их переключении добавляем в текст оператор, для занесения значения в "счетчик". В конечном счете - выбор за вами.
---------- Post added at 23:28 ---------- Previous post was at 23:25 ----------
Неужели я давал оценки ненаписанному коду типа "ламерство" или "индусский код"? Не припомню...
А вот оценку трудоемкости всех вариантов предлагаю выполнить самостоятельно.
Значит, просто показалось...
Трудоемкость, зависит от задачи, поставленной ТС - а она, до конца не ясна.
да дайте бинарь музона с плеером, там один джамп поди поправить. +закат солнца (который можно заменить на вызов init)...
комментов там минимум
этот у меня есть
есть
l7cbc: ld a,(l7c64) ;вот это текущая позиция.
ld c,a
ld hl,song_length ;вот тут проверяем длину музла
cp (hl)
jp c,l7cc9
xor a ;а здесь зануляем нафиг
; вся муза тупо зациклена на начало.
ld c,a
l7cc9: inc a
ld (l7c64),a
ld l,c
ld h,00h
add hl,hl
ld de,(position_map)
add hl,de
ld c,(hl)
inc hl
ld a,(hl)
ld (l7f08),a
---------- Post added at 19:46 ---------- Previous post was at 19:44 ----------
Много - это сколько?
Никакого огорода - если все мелодии "находятся" в памяти, при их переключении добавляем в текст оператор, для занесения значения в "счетчик". В конечном счете - выбор за вами.
на данный момент 6 музык. но будут еще
половину надо проигрывать один раз - остальные пускать по кругу.
самый простой и наименее трудоемкий способ предложен Витамином
им и воспользуюсь.
denpopov
20.02.2014, 19:49
Кстати, я могу ошибаться, но кажется у Codebusters был правленый проигрыватель, там вместо ld a,0 ставится ld a,<номер патерна>, но я не нашел в исходнике и не помню, в какой деме такое было.
---------- Post added at 19:49 ---------- Previous post was at 19:49 ----------
xor a ;а здесь зануляем нафиг
; вся муза тупо зациклена на начало.
ld c,a
вот оно, похоже.
Неужели я давал оценки ненаписанному коду типа "ламерство" или "индусский код"? Не припомню...
А вот оценку трудоемкости всех вариантов предлагаю выполнить самостоятельно.
Загрузить трек в Vortex Tracker и записать продолжительноть музона в фреймах из окошка прям над окном редактирования, конечно наиболее трудоемко, чем вставить более 200 пустых паттернов в конце трека в Sound Tracker..
Проблема с хранением этих данных в табличках тоже надуманна: никто не мешает добавить эти данные прям перед данными трека и брать их по offset-2 при/перед инициализацией плеера. В добавок прям в эти данные можно и заглушку на бесконечные музоны вставить (0 - трек зациклен, иначе - длина трека во фреймах)
Загружаем модули:
stc1 defw stc1_len: incbin "1.stc"
stc2 defw stc2_len: incbin "2.stc"
// повторять пока не закончатся треки (или память)
инициализируем:
ld hl,stc1
ld e,[hl]: inc hl: ld d,[hl]: inc hl
ex de,hl: ld [count+1],hl: ex de,hl
// тут переходим в стандартную процедуру инициализации
Плеер типа:
count
ld hl,0
ld a,h: or l: jr z,playnote // ловушка для зацикленных треков
dec hl
ld a,h: or l: jr z,exit // не вызывать проигрыватель если трек отыграл
ld [count+1],hl
playnote
call player.play
exit
ps. при желании можно даже нагуглить формат stc файлов и понять как для них вычислить продолжительность музыки кодом.. но там кода будет явно побольше чем 20 байт "табличек"
Загрузить трек в Vortex Tracker и записать продолжительноть музона в фреймах из окошка прям над окном редактирования, конечно наиболее трудоемко, чем вставить более 200 пустых паттернов в конце трека в Sound Tracker..
"Вставка 200 пустых паттернов"- это, скорее всего, лишь выставление длины мелодии в 255 позиций.
ps. при желании можно даже нагуглить формат stc файлов и понять как для них вычислить продолжительность музыки кодом.. но там кода будет явно побольше чем 20 байт "табличек"
Погугли. Формат сравнительно простой. А 20 байт "табличек" будут побольше переделки в плеере.
Топикстартер уже определился есличто:)
А 20 байт "табличек" будут побольше переделки в плеере.
Ты издеваешься чтоли? Проблема же не в том чтобы научить плеер затыкать музон, а в том что
половину надо проигрывать один раз - остальные пускать по кругу.
Значит либо плееру надо передать информации о том зациклен ли музон и научить его глушить треки по завершению, либо научить плеер зацикливать музон на определённой позиции и передавать ему информацию о том на какую позицию его зацикливать (и добавить ещё пустой паттерн в конце трека - явно твой метод). То есть как минимум 1 байт данных все равно будет (в том что я описал 2 байта на трек, в том что предложил ты более 200 байт пустоты на трек).
Да и сама модификация плеера не будет намного короче (и быстрее) 22 байт надстройки над плеером из предыдущего поста (мне просто лень лезть в плеер, сорцов которого у меня нет, и смотреть что там и где).
Топикстартер уже определился есличто
Да мне просто доставляет, как програмер доказывает музакеру, что добавить 200+ байт пустоты в одном из самых интерфейсноубогих трекеров на спектруме удобнее, чем прописать один defw в текстовом редакторе.
key-jee, не забывай что ТС тоже программер и ему проще добавить 26 минут тишины в плеер чем шерстить еще один плеер.
jerri, юзай ST Flash Player (формат fls) - он значительно шустрее.
Во вложении recompiler, и исходник player'а (by Alex Raider) :)
drbars, спасибо конечно, но как то не срослось.
вот бы перекодировщик под Вин
drbars, спасибо конечно, но как то не срослось.
вот бы перекодировщик под Вин
Всё зависит от исходных требований.
denpopov
21.02.2014, 15:58
jerri, ты все же хочешь трек проиграть или есть другая цель?
denpopov, у меня есть несколько мелодий которые мне нужно играть сейчас.
если я сделаю продуманный плеер, то мне будет проще использовать его в будущих проектах.
denpopov
22.02.2014, 12:48
jerri, такое подойдет?
denpopov, такой у меня есть, я его уже допилил.
всем спасибо. проблему решил костылями.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot