Важная информация

User Tag List

Страница 1 из 5 12345 ПоследняяПоследняя
Показано с 1 по 10 из 46

Тема: Быстрый проигрыватель AY-музыки (980-1300t)

  1. #1
    Master
    Регистрация
    16.09.2005
    Адрес
    Дзержинск (DustCity)
    Сообщений
    919
    Благодарностей: 507
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Быстрый проигрыватель AY-музыки (964-1251t)

    Как-то давно, еще делая демку на tum2009 я искали быстрый проигрыватель AY-музыки, но на все мои вопросы что хочу в районе 1500 тактов говорили что это нереально.

    Тогда помню мне пришлось ручками переводить музыку из PT3 в PSC, ибо плейер первого никак не влезал под некоторые эффекты...

    Теперь для меня это в прошлом!
    Представляю вам универсальный проигрыватель и компилятор, который не зависит от типа используемого трекера, а компилирует дамп AY регистров, при этом размер компилированного модуля примерно в полтора раза больши, а порой даже меньше чем оригинала
    кушает 964..1251t, в зависимости от музыки, при компиляции указывается точный диапазон тактов под конкретный музон (или фиксированное кол-во тактов)

    Метод сжатия основан на том, что в паттернах каналов бывают повторяющиеся фрагменты.
    Каналы паттерна рассматриваются отдельно друг от друга, также отдельно рассматриваются огибающая с формой, регистр управления и шума, в результате получаем список повторяющихся фрагментов для каждого канала и табличку (трек) для их проигрвания.
    Сами данные регистров ay группируются в группы (например reg0, reg1, reg8) и составляется табличка вариантов принимаемых значений, из которой по индексу вытаскиваем значения.
    Приведу тут наглядно примерный алгоритм (остальное - проигрыватель, компилер и пример в приложенном файле):

    Рассмотрим какие регистры AY присутствуют в дампе
    и какие биты в них задействованы:

    Код:
    ;-----------------------------------------------------------
    ; Регистр / Номер / Обознач./ диапазон / битовая раскладка
    ;-----------------------------------------------------------
    ; RegA_lo	0	L	0-255	LLLLLLLL
    ; RegA_hi	1	H	0-15	0000HHHH
    ; RegA_Vol	8	V	0-15	000EVVVV
    
    ; RegB_lo	2	L	0-255	LLLLLLLL
    ; RegB_hi	3	H	0-15	0000HHHH
    ; RegB_Vol	9	V	0-15	000EVVVV
    
    ; RegC_lo	4	L	0-255	LLLLLLLL
    ; RegC_hi	5	H	0-15	0000HHHH
    ; RegC_Vol	10	V	0-15	000EVVVV
    
    ; Noise		6	N	0-31	000NNNNN
    ; Control	7	C	0-63	00cccCCC
    ; Period_lo	11	p	0-255	pppppppp
    ; Period_hi	12	P	0-255	PPPPPPPP
    ; Form		13	F	0-15	0000FFFF
    Разделив на "каналы", данные можно представить следующим образом

    Код:
    ; Channel_A
    ;	LLLLLLLL 0000HHHH 000EVVVV	(3 байта, reg 0,1,8)
    ; Channel_B
    ; 	LLLLLLLL 0000HHHH 000EVVVV	(3 байта, reg 2,3,9)
    ; Channel_C
    ; 	LLLLLLLL 0000HHHH 000EVVVV	(3 байта, reg 4,5,10)
    ; Channel_Env
    ;	pppppppp PPPPPPPP 0000FFFF	(3 байта, reg 11,12,13)
    ; Channel_Reg
    ;	000NNNNN 00cccCCC 		(2 байта reg 6,7)
    Далее для каждого из "каналов" вычисляем кол-во принимаемых значений, и составляем таблицу возможных значений (256 знач макс)
    если значений больше 256, то разделяем на более мелкие каналы
    (например Channel_A оставляем только значения частоты, и например если кол-во вариантов Channel_Reg больше 256, то рассматриваем отдельно Channel_Noise, Channel_Control)

    Далее разделяем каналы на паттерны, вычисляем совпадающие паттерны, и составяем треклист содержащий адреса паттернов в памяти

    Если сразу не понятно - смотрим листинг кода проигрывателя.

    Есть ограничения:
    - длинна паттернов может быть хоть с постоянной, хоть с плавающей скоростью, но должно соблюдаться правило: длина паттерна в прерываниях должна быть одинаковой, либо половиной/четвертью и т.д.


    Версия 1.3
    Основное - добавил анализатор трека при загрузке (очистка неиспользуемых регистров, удаление громкости если установлена огибающая в регистрах громкости и т.п.) ну и по мелочи.
    Вложения Вложения
    Последний раз редактировалось TmK; 17.08.2016 в 23:52. Причина: Новая версия
    Pentagon1024sl2.2/TSFM/Z-Controller/GS128Kb/HDD/CDROM/Palcoder

  2. Эти 24 пользователя(ей) поблагодарили TmK за это полезное сообщение:
    AAA (15.11.2010), Activator (19.11.2010), alone (06.05.2011), Aprisobal (21.11.2010), BYTEMAN (20.11.2010), Enigmatic (24.01.2012), Evgeny Muchkin (16.11.2010), GM BIT (16.11.2010), GriV (20.11.2010), John North (14.06.2012), newart (15.11.2010), NovaStorm (14.06.2012), Oleg N. Cher (04.09.2016), perestoronin (03.10.2013), pulsar (19.11.2010), Robus (19.11.2010), ShaMAN0277 (17.12.2014), Sinus (15.11.2010), Titus (15.11.2010), TomCaT (21.02.2011), Urguk (24.10.2017), Vitamin (02.03.2014), ViThor (04.05.2012), VNN_KCS (15.11.2010)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Master
    Регистрация
    16.09.2005
    Адрес
    Дзержинск (DustCity)
    Сообщений
    919
    Благодарностей: 507
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ах да, зыбыл добавить... дамп музыки неполный, но почти полный...
    в компилированном виде музыка занимала 10262, у нас при размере паттерна 8 получается 9972, так что думаю право на жизнь плэйер имеет)
    Pentagon1024sl2.2/TSFM/Z-Controller/GS128Kb/HDD/CDROM/Palcoder

  5. #3
    Banned Аватар для unbeliever
    Регистрация
    17.01.2005
    Адрес
    Самара
    Сообщений
    973
    Благодарностей: 361
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Готовишься?

  6. #4
    Master
    Регистрация
    16.09.2005
    Адрес
    Дзержинск (DustCity)
    Сообщений
    919
    Благодарностей: 507
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Эмм... к чему? ))
    Это я для демки конечно делал) но вдруг кому еще пригодится)
    Пока это бета версия, как доработаю полностью с сорцами выложу.
    Pentagon1024sl2.2/TSFM/Z-Controller/GS128Kb/HDD/CDROM/Palcoder

  7. #5
    Activist
    Регистрация
    19.04.2005
    Адрес
    SPb
    Сообщений
    312
    Благодарностей: 51
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    в моей молодости был урезанный плеер под саунд трекер, 700-800- тактов. огибающая была выпиленная, но умелый писатель вполне обходился 8) Перекомпилировать ничего ненадо было.
    У кого увидели унесли и подправили, непомню, может у IMP, а может у MCHG

  8. #6
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,947
    Благодарностей: 1520
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от research Посмотреть сообщение
    в моей молодости был урезанный плеер под саунд трекер, 700-800- тактов. огибающая была
    Тогда и музыку писали на 5-8 скоростях, а треки занимали по 2 килобайта.

  9. #7
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,031
    Благодарностей: 1426
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А где бит включения огибающей для нканала?

  10. #8
    Master
    Регистрация
    16.09.2005
    Адрес
    Дзержинск (DustCity)
    Сообщений
    919
    Благодарностей: 507
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В регистре громкости для каждого канала.
    D3-D0 амплитуда
    D4 - 1-использование генератора
    пакета.
    D4 - 0-использование значения амплитуды
    забылся немного
    Pentagon1024sl2.2/TSFM/Z-Controller/GS128Kb/HDD/CDROM/Palcoder

  11. #9
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,031
    Благодарностей: 1426
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от TmK Посмотреть сообщение
    В регистре громкости для каждого канала.
    Если заюзать под это дело биты 4-6 регистра R13, а бит 7 этого регистра заюзать под флаг перезагрузки огибающей, то пакеты каналов можно сжать в 2 байта, вместо 3.

  12. #10
    Master
    Регистрация
    16.09.2005
    Адрес
    Дзержинск (DustCity)
    Сообщений
    919
    Благодарностей: 507
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Если заюзать под это дело биты 4-6 регистра R13, а бит 7 этого регистра заюзать под флаг перезагрузки огибающей, то пакеты каналов можно сжать в 2 байта, вместо 3.
    Что сэкономит 256 байт текущей таблицы и увеличит кол-во тактов требуемых проигрывателю)
    А тут цели ставились:
    1) максимальная скорость проигрывания
    2) приемлемый размер откомпилированного трека (в данном случае даже меньше оригинала)

    пакеты канала тут занимают 1 байт (индекс по которому вытаскиваем из таблички tone_low, tone_hi, volume)

    В данном случае (запускаем компилятор и смотрим варианты значений для каналов A,B,C) можно вместо отдельных таблиц для каждого канала объединить в одну таблицу - сэкономим 1280байт, но пока для меня это нетривиальная задача...
    Последний раз редактировалось TmK; 16.11.2010 в 12:40.
    Pentagon1024sl2.2/TSFM/Z-Controller/GS128Kb/HDD/CDROM/Palcoder

Страница 1 из 5 12345 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Проигрыватель WAV-музыки
    от p@lex в разделе Музыка
    Ответов: 22
    Последнее: 05.08.2014, 23:59
  2. Ответов: 296
    Последнее: 14.10.2012, 22:53
  3. Муз.Проигрыватель для Symbian 9.x
    от Darkman007 в разделе Музыка
    Ответов: 13
    Последнее: 19.09.2008, 19:10
  4. Куплю проц Z84C0006PEC или более быстрый.
    от Evgeny Muchkin в разделе Барахолка (архив)
    Ответов: 6
    Последнее: 19.09.2006, 09:24

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •