С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Когда-то давно (как посчитал - уже лет 20 назадя делал на ZX-Profi под себя плеер mod-ов, под стерео-ковокс.
На то время никакой толковой информации не нашёл, сделал по-простому (счётчик на каждый канал, одна таблица - приращение счётчика для каждой ноты), минимум команд, что-то играет - и ладно, в Turbo-режиме естественно качество получше.
Чуть позже встречал какой-то другой плеер, который по-умному и по-правильному всё обсчитывал и на один канал ковокса выдавал нормальный звук и на стандартной частоте процессора. Но без документации в его коде и куче таблиц не разобрался.
До сих пор меня гложет желание понять принцип работы этого "правильного" алгоритма, который (видимо этот же) ещё на PC-Speaker играл STM на ЕС-1841 ...
Есть ли какая-нибудь нормальная дока, где всё это понятно описано?
Я такой не нашел, все по крупицам собирал из описания форматов s3m и IT, там же были формулы расчета частоты и периода ноты, сложения каналов и умножения на громкость. Более понятно было в доке по s3m - которая шла в комплекте с самим Scream Tracker 3. Ну а остальное самому додумывать приходилось. Формулы оптимизировать и переводить в таблицы для быстрого умножения и деления. - её в основном и использовал ка талмут. - Во вложении:
Основная формула
note: C C# D D# E F F# G G# A A# B
period: 1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,0960,0907
middle octave is 4.
8363 * 16 * ( period(NOTE) >> octave(NOTE) )
note_st3period = --------------------------------------------
middle_c_finetunevalue(INSTRUMENT)
note_amigaperiod = note_st3period / 4
note_herz=14317056 / note_st3period
1) volumetable is created in the following way:
> volumetable[volume][sampledata]=volume*(sampledata-128)/64;
NOTE: sampledata in memory is unsigned in ST3, so the -128 in the
formula converts it so that the volumetable output is signed.
2) postprocessing table is created with this pseudocode:
> z=mastervol&127;
> if(z<0x10) z=0x10;
> c=2048*16/z;
> a=(2048-c)/2;
> b=a+c;
> { 0 , if x < a
> posttable[x+1024] = { (x-a)*256/(b-a) , if a <= x < b
> { 255 , if x > b
3) mixing the samples
output=1024
for i=0 to number of channels
output+=volumetable[volume*globalvolume/64][sampledata];
next
realoutput=posttable[output]
[свернуть]
Последний раз редактировалось Hacker Grey; 03.12.2018 в 12:28.
Hacker Grey, Плеер проработал двое суток - забыл вчера выключить и - не завис.
А сегодня зачем-то попробовал загрузить плеер из под конфигугании TS-EVO.
Модули с примонтированных дисков грузятся и играют беспроблемно.
ПРи попытке загрузить с SD карты или HDD - ошибка DOS error/Ошибка ДОС на красном фоне.
Плеер после этого не виснет и можно загрузить с примонтированных дисков...
И еще - один и тот же модуль в память можно несколько раз загрузить?
Да, конечно можно.
В TS-Conf что бы работали SD-карты нужно запустить из tr-dos файл "setup" и выбрать драйвер памяти Pentagon 1024 v2. По идее так задумывалось, но что то в последней версии fat32 драйвера все равно SD не работают - буду разбираться - раньше работало на каком то этапе отладки
Нет, вспомнил на чем я там остановился - нужна рам в окне 0000 - по стандарту Pentagon - bit 3 #EFF7 (или ATM или KAI ) - а оно в TS не реализовано (ну или у меня не заработало) - можно под него сделать свой драйвер памяти с его адресацией но руки не дошли.
Последний раз редактировалось Hacker Grey; 05.12.2018 в 01:11.
Обновление 10.12.18
+ добавлен редактор паттернов.
Описание управления
Управление
Курсорные клавиши, Back/Delete, Tab ( CS + 5,6,7,8,0, Space) и Enter.
В редакторе паттернов:
Enter - играть с текущей строки в паттерне.
CS+Enter - остановить вопроизведение.
CS + "+" / CS + "-" - выборк октавы.
CS + "<" / CS + ">" - выбор позиции в Orders.
Space - стереть значение.
Del/Graph (CS + 9) - удалить строку.
Ins (SS + W) - вставить строку.
CS + A - выдлеить весь паттерн.
CS + L - выделить один канал.
CS + B - выделить начало блока.
CS + E - выделить конец блока.
CS + X - стереть выделененый блок.
CS + V - скопировать и вставить выделенный блок.
Буфера обмена нет, так как под целый паттрен он может быть до 16кб,
и на ZX-128к останется всего 32ки по редактор патттренов.
Поэтому скопирутеся то, что в данный момент выделено.
Move Cursor keys, Back / Delete, Tab ( CS + 5,6,7,8,0, Space) and Enter.
In the pattern editor:
Enter -play from the current line in the pattern.
CS + Enter-stop playback.
CS + " + "/ CS + " - " - octave samples.
CS + " < "/ CS + " > " - select a position in Orders.
Space-erase value.
Del / Graph (CS + 9) - delete the line.
Ins (SS + W) - insert a string.
CS + A-select the whole pattern.
CS + L-select one channel.
CS + B-select the beginning of the block.
CS + E-select the end of the block.
CS + X-erase the selected block.
CS + V-copy and paste the selected block.
There is no clipboard, as it can be up to 16 KB under the whole cartridge,
and on ZX-128K there will be only 32K and pattern editor software.
Therefore, what is currently selected is copied.
[свернуть]
Просьба к тем, кто представляет себе, что такое Tracker и имеет навыки работы в них. - по тестируйте.
Сохранения ещё нет, но в памяти после сброса ZX (без сброса GS) отредактированный модуль остается, и можно продолжать редкатирование
Последний раз редактировалось Hacker Grey; 10.12.2018 в 21:21.
Обновление 19.12.2018
+ из класса проигрыватель, переведен а класс редакторов. Для редактора самое главное - уметь сохранять результат работы. Пока нет функции создания нового модуля, загрузки сэмплов, добавления паттернов. Но можно загрузить чужой модуль с понравившимися инструментами, очистить паттерны, и написать свою композицию, и сохранить её под новым именем. Постепенно всё будет реализовано.
+ драйвер памяти, загружаемый по умолчанию, поддерживает 3 стандарта. PentEvo, TS-Conf, Pentagon1024V2. Остальным так же, как и ранее, выбирать нужный драйвер через RUN "setup" в Tr-DOS
Hacker Grey, Отличная работа !
Увы общий формат форума вышел из рамок моего любимого места , более тут не бываю.
обновление 25.12.18
+ радостная новогодняя цветовая схема (меняется на вкладке Setup). (у каждого конечно свое представление о цвете радости или детской неожиданности)
+ сохранение настроек Setup - последним активным дисководом должен быть дисковод с NeoTracker. Куда не надо, не сохранит.
+ в управление добавлены кнопки PgUp PgDn, и в меню и в паттерне.
+ создание пустого модуля (но пока нет загрузки инструментов - и поэтому из пустого модуля свой трек создать не получится - но можно же взять чужой с инструментами и очистить паттерны).
+ добавление нового паттерна (на будущее реализованы паттерны от 2 до 256 строк для XM и IT, но в s3m стандарте только 64 строки).
+ быстрое перемещение в списке очередности паттернов во вкладке Patterns - просто на крайних кнопках < и > если держать вправо или влево - список бежит вправо или влево. Что бы выбрать паттерн - нажать в списке на номер мышкой или ентером.
+ при повторном запуске (без сброса NGS) убрана печать приветственного текста т.к. он не загружается повторно, и что бы пользователей не пугал мусор вместо текста.
Добавление паттернов/сэмплов/инструментов будет возможно только в последнем созданном или загрженном модуле в списке в памяти NGS. Иначе в памяти начнутся пересечения и при удалении следующего модуля из памяти может пострадать редактируемый модуль. Предыдущие модули в памяти не мешают.
Последний раз редактировалось Hacker Grey; 25.12.2018 в 22:20.
Обновление 12.01.2019
+ Реализована возможность полноценного редактирования и создания модуля с нуля.
Создание нового пустого модуля, добавление паттернов, загрузка инструментов, удаление инструментов, замена инсутрмента.
Для удобства перебора инструментов, быстрой загрузке при выборе в меня Samples заведена горячая клавиша L.
Добавление , удалении патеррнов и инструментов возможно только в последнем модуле из плэй листа ( в памяти NGS )
+ В Samples добавлены возможности менять частоту сэмпла и громкость.
+ В архиве под SD добавлена полная библиотека WaveTable от General MIDI - 128 инструментов и много эффектов.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)