Есть мелодия написанная в Sound Tracker (классическом)
как её заставить проиграться один раз и заткнуть навсегда?
средствами самого тракера это реально сделать?
Вид для печати
Есть мелодия написанная в Sound Tracker (классическом)
как её заставить проиграться один раз и заткнуть навсегда?
средствами самого тракера это реально сделать?
Навсегда- только доработкой плеера.
Надолго- поставить длину в 255 позиций и забить неиспользуемые пустым паттерном.
jerri, "посчитать" количество вызовов плейера, после инициализации мелодии, и прекратить его вызов по достижении "конца" мелодии. Добавить в конец мелодии "паузу", или "заткнуть" AY\YM - "вручную".
---------- Post added at 22:07 ---------- Previous post was at 21:47 ----------
Как вариант: попробовать "перекомпилировать" мелодию в Sound Tracker Pro. Там есть точка остановки мелодии adr+9.
Можно, только надо полностью послушать мелодию в STPro, вполне возможно, что играть она будет по другому. Например, в обычном ST какой-нибудь звук можно отредактировать так, что он сам затухнет и потом будет тишина до следующей ноты, то STPro после затухания сам её проиграет ещё раз, там где в обычном уже тишина. Т.е. надо ставить R--, чтобы не было повторения.
Vitamin, чего-то, малость "туплю". Запутала постановка вопроса ТС. ;)
Значит: только "считать" количество вызовов плейера и по достижении нужного значения вызвать процедуру "остановки" и "отключить" вызов плейера.
Vitamin, а есть более простой способ - поделитесь? :)
В случае ОДНОЙ мелодии, изыскиваем в памяти несколько ячеек для организайии "счетчика" (ибо, использовать для хранения регистры - это не по-джедайски). При инициализации мелодии, заносим в них вычисленное значение (каким образом это будет сделано - второй вопрос). На каждом цикле до перехода на плейер, проверяем это значение и уменьшаем его до тех пор, пока оно не будет равно 0 (иначе, переходим на процедуру "выключения" мелодии, а в ячейки заносим еденицу). Это, по вашему - очень сложная конструкция?
Предложил уже.
При средней длине мелодии в 10 позиций и скорости 5, имеем свободными 245 позиций по 64 строки по 5 фреймов что даст 26 минут тишины. Для некоторых ситуаций вполне себе подойдет.
Если надо именно навсегда- модифицировать плеер чтобы он отключал точку входа +6 по достижению конца.
да захачить плеер + закат вручную! универсально.
Много - это сколько?
Никакого огорода - если все мелодии "находятся" в памяти, при их переключении добавляем в текст оператор, для занесения значения в "счетчик". В конечном счете - выбор за вами.
---------- 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 музык. но будут еще
половину надо проигрывать один раз - остальные пускать по кругу.
самый простой и наименее трудоемкий способ предложен Витамином
им и воспользуюсь.
Кстати, я могу ошибаться, но кажется у Codebusters был правленый проигрыватель, там вместо ld a,0 ставится ld a,<номер патерна>, но я не нашел в исходнике и не помню, в какой деме такое было.
---------- Post added at 19:49 ---------- Previous post was at 19:49 ----------
вот оно, похоже.
Загрузить трек в 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
// тут переходим в стандартную процедуру инициализации
ps. при желании можно даже нагуглить формат stc файлов и понять как для них вычислить продолжительность музыки кодом.. но там кода будет явно побольше чем 20 байт "табличек"Код: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
Ты издеваешься чтоли? Проблема же не в том чтобы научить плеер затыкать музон, а в том что
Значит либо плееру надо передать информации о том зациклен ли музон и научить его глушить треки по завершению, либо научить плеер зацикливать музон на определённой позиции и передавать ему информацию о том на какую позицию его зацикливать (и добавить ещё пустой паттерн в конце трека - явно твой метод). То есть как минимум 1 байт данных все равно будет (в том что я описал 2 байта на трек, в том что предложил ты более 200 байт пустоты на трек).Цитата:
половину надо проигрывать один раз - остальные пускать по кругу.
Да и сама модификация плеера не будет намного короче (и быстрее) 22 байт надстройки над плеером из предыдущего поста (мне просто лень лезть в плеер, сорцов которого у меня нет, и смотреть что там и где).
Да мне просто доставляет, как програмер доказывает музакеру, что добавить 200+ байт пустоты в одном из самых интерфейсноубогих трекеров на спектруме удобнее, чем прописать один defw в текстовом редакторе.
key-jee, не забывай что ТС тоже программер и ему проще добавить 26 минут тишины в плеер чем шерстить еще один плеер.
jerri, юзай ST Flash Player (формат fls) - он значительно шустрее.
Во вложении recompiler, и исходник player'а (by Alex Raider) :)
drbars, спасибо конечно, но как то не срослось.
вот бы перекодировщик под Вин
jerri, ты все же хочешь трек проиграть или есть другая цель?
denpopov, у меня есть несколько мелодий которые мне нужно играть сейчас.
если я сделаю продуманный плеер, то мне будет проще использовать его в будущих проектах.
jerri, такое подойдет?
denpopov, такой у меня есть, я его уже допилил.
всем спасибо. проблему решил костылями.