Сб 26-10-2002 21:00:21
Вот решил писать дневник моей деятельности в этом проекте. Как показывает
опыт, то довольно интересно потом читать эти строки, когда проект уже готов,
а особенно, когда прошло некоторое время по окончании проекта.

Короче, на данный момент в модплеере реализован алгоритм работы самого
плеера. Уже сделал обработку некоторых эфектов. Вот их список:

+ SetBPM            // Установка BPM
+ SetSpeed          // Установка скорости
+ PositionJump      // Переход по списку паттернов
+ SetVolume         // Установка громкости на канале
+ PatternBreak      // Прервать паттерн
+ VolumeSlide       // Скольжение громкости

Вот методы управления модплеером:

+ NextLine          // Переход на следующую строку в паттерне
+ PreviousLine      // Переход на предыдущую строку в паттерне
+ NextPattern       // Переход на следующий паттерн в списке
+ PreviousPattern   // Переход на предыдущий паттерн в списке

Теперь надо переходить на микширование семплов. Пойду делать....



Сб 26-10-2002 22:10:03
Уже что-то брынькает, но это еще далеко не то. %) Пойду передохну немного...




Вс 27-10-2002 14:17:45
Вот. Наконец-то сегодня сел за комп и решился продолжить делать модплеер.
До этого меня немного оторвали от дела. Сосед просил кое-что помочь сделать
(прога для отгадывания сканвордов, ну несложная БД). Короче вот, что я за
сегодня сделал. Раньше модплеер работал так:
- из обработчика IRQ звуковухи вызывалась процедура ModPlayer, в которой
  и происходило все деяния с модами, ну т.е. эта процедура продолжала
  микширование каналов композиции, точнее текущейго фрейма, а если
  отмикшированный фрейм не заполнял полностью рабочий буфер канала, который
  равен по размеру половине рабочего буфера соунд системы, то следовал
  очередной вызов процедуры ModPlayer (рекурсия). Тогда приходилось дописывать
  в обработчик IRQ еще кучу чего, а дабы это дело избежать, ИМХО достаточно
  только вызывать одну процедуру для проигрывания модов из обработчика IRQ
  (а она уж пускай делает все, что ей в голову всбредет), пришлось сделать
  еще одну процедуру ContinueModMix, которая и делает все вышеперечисленное,
  а процедура ModPlayer теперь делает то, что раньше делалось в обработчике
  IRQ.

Теперь уже слышны не свисты скрипы из динамиков, а нормальный музон, только
вот, когда семпл доигрывается, то проигрывается еще лишняя часть рабочего
буфера канала. Надо будет сейчас изменить код процедуры проигрывания рабочего
буфера канала. Сейчас проигрывается рабочий буфер полностью, а надо, чтобы
проигрывалась только отмикшированная часть.

Ладно, пойду дальше ковыряться...




Вт 29-10-2002 22:14:59
Блин, загребает что-то не пойму. Может разбирусь сегодня. А то вчера не
получилось - думал, что с ума сойду.



Вт 29-10-2002 23:59:10
Только что нашел баг и пофиксил его. Теперь все отлично работает. Можно
теперь переходить к деланию эффектов, влияющих на воспроизведение семплов.
Таких как:

- Arpeggio
- Portamento up.
- Portamento down.
- Tone portamento.
- Vibrato.
- Tone portamento + volume slide.
- Vibrato + volume slide.
- Tremolo.
- Pan.
- Sample offset.

И расширенных эффектов (группа e):
- Fine portamento up
- Fine portamento down.
- Glissando control.
- Vibrato waveform.
- Set finetune.
- Pattern loop.
- Tremolo waveform.
- 16 position pan.
- Retrig note.
- Fine volume slide up.
- Fine volume slide down.
- Cut note.
- Note delay.
- Pattern delay.
- Invert loop.

Не знаю правда когда до этого дела руки долезут, может и сегодня чего-нибудь
сделаю, а ща покай пойду чаек попью....



Ср 30-10-2002 12:20:27
Да, за вчерашний денек много чего сделал. Почти до пяти часов утра сидел
писал модплеер. Но зато с неплохими результатами. Пофиксил несколько багов,
один из которых - не передавался параметр эффекта Pattern Break, из-за чего
плеер прыгал не на ту строку, которая нужна. Еще что-то там делал, уже
не помню (старость не радость %).
Вот какие эффекты еще прикрутил:
+ Portamento up.
+ Portamento down.
+ Tone portamento.                 // Че-то глюкавит немного
+ Vibrato.                         // Надо будет сейчас разобраться
+ Tone portamento + volume slide.
+ Vibrato + volume slide.

А сегодня пофиксил баг потрескивания. Иногда появлялись потрескивания, это
было из-за того, что включение канала может происходить когда положение
в рабочем буфере не нулевое. А рабочий буфер у меня не очищается постоянно.
Поэтому в этом случае при проигрывании рабочего буфера происходили
пощелкивания, и еще они же возникали, когда семпл доигрывался до конца,
т.е. это присуще было незацикленным семплам (по той же самой причине, только
теперь рабочий буфер не дозаполнялся).

Ладно, полезу дальше ковыряться...



Ср 30-10-2002 13:03:30
Подправил эффект Vibrato. Теперь вроде работает как надо.



Чт 31-10-2002 13:04:15
Нашел глюк в эффекте установки громкости. Раньше делалось обрезание
громкости, только по правой границе (40h). Теперь клипирование идет по
границам [0,40h].
Эффект вибрато всеравно как-то не так работает, надо ковыряться....
Блин, глючит эффект NotePortamento (портаменто к ноте).........



Чт 31-10-2002 13:40:30
Во, подзалатал эффект NotePortamento, теперь пашет отлично. Надо теперь еще
разобраться с Vibrato...



Пт 01-11-2002 15:10:04
Пофиксил один баг. Не подгружались файлы с 32 каналами имеющие сигнатуру
"xxCH". В подгрузчике поддерживалась только вот такая "CHxx". Хотя не
я теперь у меня под сомнением существование бывшей сигнатуры. Может это и
я сбаговал. Одно дело было подгрузить такой мод, другое дело было его
проиграть. Он не проигрывался нормально, точнее он нормально игрался,
но работали только 23 канала. Причина оказалась в соунд системе. Там есть
константа, которая показывает сколько максимально возможно каналов, а есть
еще переменная, которая показывает сколько на данный момент обрабатывается
каналов. По умолчанию переменная была равна 23. Отсюда и глюк. Короче
подправил я это дело и теперь переменная равна (по умолчанию) максимальному
количеству каналов. Если кому надо, то пущай вручную меняет, либо программно.
Короче полез я сделаю резерв, покушаю и дальше продолжу....



Пт 01-11-2002 17:08:32
Еще один баг пофиксил, который возникал из-за эффекта Portamento к ноте.
До этого, не обрабатывался семпл, если он был. Т.е. не устанавливалась
громкость... Из-за этого неправильно приогрывалась одна композиция
(actimpul.mod). ИМХО это одна из самых сложных композиций, которые у меня
есть на данный момент. Точнее она сложная со стороны плеера. По правильности
воспроизведения этой композиции можно судить о самом плеере.



Пт 01-11-2002 19:35:39
Много чего уже сделал. Добавил поддержку некоторых расширенных эффектов:
+ VibratoWaveForm(AL);        // Установка формы волны для эффекта Vibrato
+ FineVolumeSlideUp(AL);      // Плавное повышение громкости
+ FineVolumeSlideDown(AL);    // Плавное понижение громкости
+ RetrigNote(AL);             // Сброс ноты

Подправил эффект Vibrato. Оказывается он раньше не работал. :)))
Ладно, пойду сделаю резервную копию (мало ли что бывает).



Пт 01-11-2002 20:18:30
Добавил еще пару расширенных эффектов:
+ CutNote(AL);     // Обрезать ноту
+ NoteDelay(AL);   // Задержать ноту

И подправил эффект RetrigNote.



Пт 01-11-2002 20:41:54
Добавил еще два расширенных эффекта:
+ FinePortamentoUp(AL);       // Повысить высоту ноты на Y периодов
+ FinePortamentoDown(AL);     // Понизить высоту ноты на Y периодов



Вс 03-11-2002 17:45:47
Наконец-то добрался до этого проекта. В последнее время ничего не делал -
игрался. %) А еще вчера решил прикрутить этот модплеер к моему 3D движку.
Правда пришлось немного помучиться, зато эффект меня порадовал. :)
Пофиксил только что глюк в плеере - хрипение при использовании карт отличных
от SBPro. Сам толком не пойму почему в при использовании режима SBPro
хрипов не было. А глюк был весьма очевиден. При расчете количества выборок
для микширования (оставшихся) фрейма отнималась единица. :)

Ладно, пойду еще поковыряюсь, может еще чего путного сделаю...



Вс 03-11-2002 21:53:33
Исправли несколько глюков.
Добавил еще один эффект:
+ Arpeggio(AL);   // Эффект Arpeggio



Вс 03-11-2002 23:17:41
Добавил следующие эффекты:
+ Tremolo(AL);           // Вибрация громкости
+ TremoloWaveForm(AL);   // Установка формы волны для эффекта Tremolo



Пн 04-11-2002  01:56:40
Добавил еще два эффекта:
+ Pan(AL);              // Установка баланса вывода звука (0..0FFh)
+ _16PositionPan(AL);   // Установка баланса вывода звука (0..0Fh)

Теперь громкость на канале задается по прежнему в диапазоне [0..64], но при
масштабировании семпла в рабочий буфер громкость растягивается на диапазон
[0..256], т.е. просто умножается на 4. Так куда лучше, а то надоело уже
прислушиваться. :)

Ладно, хватит для меня на сегодня, а то завтрав в универ идти. Давно там уже
не был, даже по группе соскучился. А еще и к врачу надо завтра тащиться, но
ничего, врач может и до вечера подождать. Упс, уже не завтра получается, а
сегодня, да еще 2 часа как. Так что пошел я зубы чистить и заваливаться -
завтра в 7 часов (сегодня%) подъем и делать семестровку по "Теоретической
Механике" (Д11, кажись).



Пн 04-11-2002 16:25:35
Не пошел сегодня в Универ. Зато сделал семестровку, она и правда Д11 была.
Блин замучился ее писать. Она вроде и не сложная, зато писанины......
Ладно..... Я немного структурировал модплеер. Теперь все куда лучше выглядит.
Так даже приятней. %) Ввел еще такое понятие как общая громкость:
ModModule.MasterVolume;  // По дефолту - максимум (0FFh)
Еще что-то там наковырял, не помню уже.... А... Теперь можно подгружать
и выгружать модули без всякой сложности (раньше бы комп просто повис или
экстендер вылелет:).
Вот как это делается:
ModModule.Init();           // Инитимся
ModModule.LoadModule(EDX);  // Подгружаем мод-файл
ModModule.DeInit();         // Деинициализируемся
...
ModModule.LoadModule(EDX);
...



Пн 04-11-2002 22:22:22
С помощью Георгия Ломсадзе пофиксили глюк в соунд системе в процедуре
WriteDsp().........



Вт 05-11-2002 10:57:15
Вот решил составить список реализованных и нереализованных эффектов:
+ Arpeggio
+ Portamento up
+ Portamento down
+ Tone portamento
+ Vibrato
+ Tone portamento + volume slide
+ Vibrato + volume slide
+ Tremolo
+ Pan
+ Sample offset
+ Volume slide
+ Position jump
+ Set volume
+ Pattern break

- Set filter
  фильтр верхних частот - практически нигде не реализован

+ Fine portamento up
+ Fine portamento down

- Glissando control
  Включает или выключает портаменто по полутонам. Во многих трекерах этот
  эффект не реализован, его нет в Scream Tracker 3, Fast Tracker ][ и
  Impulse Tracker
  Реализовать впринципе реально, но вломы, хотя может и доберусь до него.

+ Vibrato waveform

- Set finetune
  Планирую реализовать в ближайшее время

- Pattern loop
  Может сейчас прикручу

+ Tremolo waveform
+ 16 position pan
+ Retrig note
+ Fine volume slide up
+ Fine volume slide down
+ Cut note
+ Note delay

- Pattern delay
  Тоже реально реализовать

- Invert loop
  Сэмпл проигрывается назад со скоростью Y. Насколько небольшой должна быть
  длина цикла, а также в чем измеряется скорость Y знают только создатели
  Noisetracker'а, Soundtracker'а и Protracker'а (а может и они не знают, по
  крайней мере, он реализован не во всех версиях Protracker'а). Но они
  этого никому не расскажут, поэтому этот эффект нигде больше не был
  реализован.



Вт 05-11-2002 19:47:21
Реализовал еще один эффект эффект:
+ PatternLoop(AL);  // Зацикливание
Пойду еще поковыряюсь, может еще что-нибудь еще прикручу........



Вт 05-11-2002 20:25:17
Приктурил еще один эффект:
+ PatternDelay(AL);  // Увеличить количество фреймов в строке в Y раз

Пожалуй подвиду итог, т.к. работа над этим проектом уже подходит к
завершению.

Нереализованные эффекты:
- Set filter
- Glissando control
- Set finetune
- Invert loop

Впринципе эффект установки плавной подстройки реализовать можно, но мне
уже влом это делать.

Т.е. не реализовано только 4 эффекта:

SetFilter        - вообще практически ни в одном трекере не реализован.
GlissandoControl - не реализован во многих трекерах, не говоря уже о плеерах
                   (Scream Tracker 3, Fast Tracker ][ и Impulse Tracker).
SetFinetune      - редкостный эффект, но реализован почти всеми трекерами,
                   не реализован только в Impulse Tracker-е.
InvertLoop       - Реализован только в Noisetracker'е, Soundtracker'е и
                   Protracker'е (не во всех версиях). В других трекерах он
                   не реализован.

Короче работу над плеером я прекращаю, теперь пожалуй приведу его в
нормальный вид, а то сейчас в нем немного сыростью пахнет - куча дебаговской
инфы на экран вывожу, да и вообще...... %-)



Ср 06-11-2002 00:27:57
Хоть работа над проектом постепенно прекращается, но багфикс будет.
Вот только что пофиксил один баг. При использовании эффекта TonePortamento
происходила инициализация семпла, а нужно инициализировать только громкость.



Чт 07-11-2002 21:53:38
Пофиксил баг в эффекте Arpeggio.



Чт 14-11-2002 00:02:03
Сегодня, точнее уже вчера, подправил немного плеер. Изменил разбор различных
комбинаций ноты и номера семпла. Исправил эффект NoteDelay. Потестил плеер...
Короче надо его на сайт выкладывать. Полезу оформлять.....