AY Sound FX Editor v0.4

Содержание

> Описание
> Интерфейс
> Горячие клавиши
> Импорт эффектов
> Форматы файлов
> Плеер для ZX Spectrum
> История версий
> Благодарности
> Контакты

^ Описание

AY Sound FX Editor представляет собой комплексное решение для создания звуковых эффектов для чипа AY-3-8910. Подобные эффекты могут использоваться в играх и других программах на ZX Spectrum. Возможно использование и на других микрокомпьютерах, использующих AY-3-8910. В состав пакета входят: собственно кросс-редактор звуковых эффектов (программа для PC под ОС Windows), пример простого плеера на ассемблере Z80 в исходниках, скомпилированный пример использования плеера и библиотека готовых звуковых эффектов.
Редактор позволяет создавать одноканальные эффекты, длиной до 4096 фреймов на эффект. Фрейм - это 1/50 секунды, соответственно, максимальная продолжительность звучания эффекта - около 80 секунд. Для каждого фрейма задаются значения регистров тона/шума/микшера. Огибающая не используется. Данные сохраняются в компактном формате, без повторения одинаковых значений. Эффекты собираются в банки, до 256 эффектов. Плеер эффектов работает с банком, нужный эффект вызывается по его номеру в банке.
Нужно отметить, что редактор не может содавать эффекты за Вас, он только упрощает редактирование данных для регистров AY. Способ создания эффектов в редакторе похож на создание сэмплов в музыкальных редакторах для AY. Поэтому для создания эффектов требуется понимание общих принципов работы AY, понимание способов получения требуемого результата. Однако, редактор имеет средства импорта из различных форматов, что может упростить создание эффектов.

^ Интерфейс

Интерфейс редактора англоязычный. В верхней части окна редактора находится главное меню. Назначение пунктов меню:

> File

> > New bank - Очистка банка эффектов, создаётся один пустой эффект (текущий);
> > Load bank - Загрузка банка эффектов из файла;
> > Save bank - Сохранение банка эффектов в файл;
> > Save bank w/o names - Сохранение банка эффектов в файл, без названий эффектов;
> > Clear current effect - Очистить текущий эффект;
> > Load current effect - Загрузить текущий эффект из файла одиночного эффекта;
> > Save current effect - Сохранить текущий эффект в файл;
> > Multi-load to bank - Загрузить несколько эффектов из файлов, в конец банка, начиная с последнего пустого эффекта;
> > Multi-save from bank - Сохранить все эффекты из банка в отдельные файлы, имена берутся из имён эффектов в банке (эффекты сохранятся в указанную для первого из них папку);
> > Exit - Выход из программы.

> Edit

> > Cut - Удалить из эффекта выделенные строки и поместить их в буфер обмена. Для этого и последующих действий в случае отсутствия выделения берётся текущая строка (с курсором);
> > Copy - Скопировать выделенные строки в буфер обмена (выделение снимается);
> > Paste - Вставить содержимое буфера обмена в позицию курсора, текущая и последующие строки будут сдвинуты вниз;
> > Delete - Удалить выделенные строки;
> > Select all - Выделить все активные строки эффекта;
> > Unselect all - Снять выделение со всех строк;
> > Inverse selection - Инвертировать выделение.

> View

> > Piano input - Показать/спрятать окно ввода музыкальных тонов (см. далее);
> > Linear period - Отображение значения тона в линейной шкале (неравномерное распределение частот);
> > Logarithmic period - Отображение значения тона в логарифмической шкале.

> Bank

> > Add new effect - Добавить новый эффект в конец банка. Новый эффект становится текущим;
> > Delete effect - Удалить текущий эффект из банка;
> > Insert new effect - Вставить новый эффект в банк вместо текущего; текущий и последующие сдвигаются.

> Import (см. раздел Импорт эффектов)

> > PSG for AY - Импорт из PSG-файла;
> > VTX file - Импорт из VTX-файла;
> > Wave file - Импорт из WAV-файла.

Под главным меню находится строка c несколькими элементами управления. При наведении на них стрелки мыши выводится подсказка об их назначении.
В левой части строки находится группа из трёх кнопок. Кнопки с символами Play и Stop выполняют соответствующие действия с текущим эффектом. Кнопка с клавишами пианино показывает/убирает с экрана окно ввода музыкальных тонов (см. далее).
В правой части строки находятся кнопки управления банком эффектов. Кнопка [Add] добавляет эффект в конец банка. Кнопка [Del] удаляет текущий эффект. Следующие четыре кнопки, между которыми находится индикатор номера текущего эффекта и их общего количества, переключают текущий эффект. Двойные стрелки - переход к первому и последнему эффекту в банке, одинарные - к предыдущему и следующему. Последним в строке располагается поле с именем текущего эффекта. Для ввода имени нужно кликнуть левой кнопкой мыши на поле с названием. Завершение ввода имени происходит по Enter. В процессе редактирования имени все нажатия кнопок направляются полю ввода, поэтому часть горячих клавиш в этот момент не действует.
Всю остальную часть окна занимает поле редактирования текущего эффекта. Редактирование значений может производиться как с помощью мыши, так и вводом значений с клавиатуры. Поле редактирования разделено на несколько колонок. Pos - номер строки. Строки можно выделять кликом левой клавишей мыши на номере; снимается выделение правой клавишей мыши. T, N - значение микшера. Изменяется аналогично выделению. Per - значение периода, то-есть высоты тона. Ns - значение частоты шума. V - значение громкости. При клике любой кнопкой мыши на значениях Per,Ns,V происходит переход курсора в эту позицию. Остальную часть поля редактирования занимает графическое отображение значений периода, частоты шума, и громкости. Кликом любой клавиши мыши можно изменять эти значения.
Окно редактора может изменять размер по вертикали (с дискретностью в строку), размер по горизонтали не меняется.
Для создания эффектов, использующих музыкальные тона в редакторе есть специальное окно. Оно вызывается нажатием клавиши с изображением клавиш пианино или через главное меню View->Piano Input. В левой части окна располагается подсказка, каким клавишам на клавиатуре соответствуют ноты октавы. В правой части - ряд контролов с настройками ввода. В поле Octave указывается текущая октава (1...8). Поле Step - шаг смещения курсора после ввода ноты, в фреймах. Поле Fill - шаг заполнения, т.е. сколько строк подряд будет заполнено одним нажатием. Кнопка Link связывает поля Step и Fill, делая шаг заполнения равным шагу перемещения курсора. Нажатая кнопка Set T устанавливает флаг тона во вводимых строках, отжатая - не меняет ранее установленный. Нажатая кнопка Set volume устанавливает для вводимых строк значение из поля громкости (справа от кнопки), отжатая - не изменяет ранее установленную.

^ Горячие клавиши

Главное окно

Cursor Up/Down | Переход к верхней/нижней строке.
Cursor Left/Right | Переход между колонками тон/шум/громкость.
0-9, A-F | Ввод значений тона/шума/громкости.
Page Up/Down | Переход на экран вверх/вниз.
Колесо мыши | Переход на пять строк вверх-вниз.
Home | Переход на начало эффекта (нулевая позиция).
End | Переход на конец эффекта (последнее ненулевое значение громкости).
Клик мыши | На линейках тона/шума/громкости - изменение их значений; на имени эффекта - переход в режим редактирования имени.
Левая кнопка мыши | На флагах T/N - установка флага; на номере строки - выделение строки.
Правая кнопка мыши | На флагах T/N - сброс флага; на номере строки - сброс выделения.
Enter | В режиме редактирования эффекта - проигрывание эффекта; в режиме ввода имени эффекта - переход в режим редактирования эффекта.
Ctrl+Enter | Проигрывание эффекта с текущей строки.
Пробел | Прекращение проигрывания эффекта.
Delete | Удаление выделенного блока (выделенные строки уберутся, остальные сдвинутся). если нет выделенных строк, удаляется текущая.
Insert | Вставка пустой строки (текущая и последующие строки сдвигаются вниз).
Shift+Insert | Дублирование текущей строки (последующие строки сдвигаются вниз).
T | Переключает флаг T на текущей строке.
N | Переключает флаг N на текущей строке.
Ctrl+A | Выделяет всю активную часть эффекта (до последней ненулевой громкости).
Ctrl+I | Инвертирует выделение активной части эффекта.
Ctrl+X | Перенести выделенные строки в буфер обмена, удалив их из эффекта.
Ctrl+C | Скопировать выделенные строки в буфер обмена (выделение снимается).
Ctrl+V | Вставить содержимое буфера обмена в позицию курсора, текущая и последующие строки будут сдвинуты вниз.
Numpad [+] | Переход к следующему эффекту в банке.
Numpad [-] | Переход к предыдущему эффекту в банке.

Окно ввода нот

Z,S,X,D,C,V,G,B,H,N,J,M | Ввод нот До..Си текущей октавы.
Shift+клавиша ноты | Ввод ноты с октавой на одну выше текущей.
Ctrl+клавиша ноты | Ввод ноты с октавой на одну ниже текущей.
Numpad 1...8 | Выбор текущей октавы.

^ Импорт эффектов

Поддерживаются следующие форматы.
WAV
Аудиофайлы. Поддерживаются любые стандартные PCM-файлы (любая разрядность, частота дискретизации, mono/stereo). На текущий момент импортируется только громкостная огибающая. Значения тона и шума устанавливаются в нули, флаги T/N установлены.
PSG
Дамп регистров AY. Поддерживаются файлы с полным заголовком (16 байт). Такие файлы создают AY-Emulator и Z80Stealth. Перед импортом появляется диалог выбора канала, с которого будут браться данные. Auto выбирает тот канал, на котором первым происходит изменение громкости. Импортируется тон, громкость, и установки микшера выбранного канала, а также значение регистра шума. Для облегчения импорта файл должен содержать одиночные одноканальные эффекты. При auto-выборе канала пауза в начале файла, до начала реальных выводов в порты, пропускается автоматически.
VTX
Дамп регистров AY. Такие файлы создают AY-Emulator и UnrealSpeccy. Импорт происходит аналогично PSG.

^ Форматы файлов

Порядок байт в двухбайтных числах - младший/старший.
Формат одиночного эффекта, расширение .afx
Каждое прерывание кодируется последовательностью байт, их количество может изменяться в зависимости от изменений значений тона/шума/громкости в текущем прерывании. Сначала идёт информационный байт:

     bit0..3  Громкость
     bit4     Запрещение T
     bit5     Изменение T
     bit6     Изменение N
     bit7     Запрещение N

Если установлен bit5, далее следуют два байта со значением тона; если установлен bit6 - байт со значением шума; если установлены оба этих бита - сначала идёт значение тона, потом шума; если не установлен ни один - сразу идёт следующий информационный байт.
Конец эффекта помечается последовательностью байт #D0,#20. Плеер должен определять её до вывода в регистры (сравнением значения шума на = #20). В редакторе за признак конца эффекта считается последнее ненулевое значение громкости, вне зависимости от остальных параметров.
Формат банка эффектов, расширение .afb
Заголовок:
+0 (1 байт) Количество эффектов в банке (максимум 256 эффектов, значение 0 = 256);
+1 (2 байта на эффект) Таблица смещений до начала каждого из эффектов. Смещение указывается относительно второго байта самого смещения. Такой формат смещения позволяет быстро вычислять адрес эффекта:

       hl=адрес в таблице смещений
       ld c,(hl)
       inc hl
       ld b,(hl)
       add hl,bc
       hl=адрес эффекта

Данные:
+n (m байт) Сами эффекты в формате одиночного эффекта. После каждого эффекта может идти строка с его названием, оканчивается нулевым байтом. Строка может отсутствовать (при сохранении через соответствующий пункт в меню File), в этом случае нулевой байт также отсутствует.

^ Плеер для ZX Spectrum

В состав пакета входит простейший плеер эффектов. Он находится в папке /z80player/, файл ayfxplay.a80, в виде исходника для кросс-ассемблера asm80. Файлы .a80 представляют собой текстовый файл, их можно просмотреть любым текстовым редактором. Исходник снабжён комментариями по использованию и работе плеера.
Плеер проигрывает эффекты на всех трёх каналах AY. При наличии свободного (незвучащего) канала выбирается этот канал, иначе - тот, который звучал дольше всего. Проигрывание музыки при работе плеера эффектов невозможно.
Помимо плеера прилагается исходник тестовой программы, и сама программа в собранном виде, в SCL-файле. Все клавиши вызывают различные эффекты, кроме клавиши пробела. Последняя включает/выключает музыку, проигрываемую на втором AY-чипе TurboSound'а по схеме NedoPC (если он есть). Если TS отсутствует, музыка будет проигрываться на том-же чипе, что и эффекты, это приведёт к различным звуковым артефактам.

^ История версий

v0.4 09.05.06
- Полностью убрана возможность выбора частоты прерываний
* Изменён формат эффектов и банков
* Ряд оптимизаций z80-плеера по размеру и скорости (в т.ч. по советам AlCo)
* Исправлены критические ошибки в импорте из VTX и PSG
+ Запрещение кнопок переключения эффектов, если переключение невозможно
+ Запрет на сохранение пустого эффекта
+ Сохранение всех эффектов из банка в отдельные файлы
+ Кнопки перехода на первый и последний эффекты в банке
+ Дублирование текущей строки по Shift+Insert
+ Окно ввода музыкальных тонов
- Вводить ноты мышью пока нельзя
+ Добавлено 14 эффектов в библиотеку
* Обновлена документация
v0.3 28.02.06
* Версия для пред-релизного тестирования, реализованы все основные возможности редактора
+ Операции копирования блоков через буфер обмена (cut, copy, paste)
* Исправлены ошибки в импорте из PSG
+ Добавлен импорт из VTX-файлов (thx to SMT)
* Убрана сильная нелинейность в начале логарифмической шкалы отображения тона (thx to AlCo)
+ Компенсация резких перемещений мыши, для избежания пропусков строк
+ Собирание эффектов в банки
+ Автозагрузка сразу нескольких эффектов с добавлением их в банк
+ Написан простейший плеер эффектов для Spectrum и пример его использования (исходники для asm80, с подробными комментариями)
+ Собрана библиотека из 205 эффектов, в основном взятых из различных игр и серии музыкальных демо 'MSX'
+ Подготовлена документация
* Прочие небольшие изменения
v0.2 12.02.06
* Исправлены проблемы с отображением в разных схемах оформления Windows (цвета, размеры, dpi)
* Флаги T/N теперь устанавливаются левой кнопкой мыши, сбрасываются правой (вместо toggle)
* Выделение строк теперь происходит при нажатии левой кнопки мыши (убирается правой) в столбце номера позиции
* Установка значений в линейках тона/шума/громкости теперь происходит любой кнопкой мыши
+ При выделении строк и редактировании линеек мышью происходит удержание её в пределах столбца (предотвращает выход курсора мыши за пределы редактируемого поля)
* Убрана перерисовка поля редактирования при удержании клавиши мыши на линейках тона/шума/громкости
+ Незвучащая часть эффекта (после последней ненулевой громкости) отрисовывается светло-серым цветом
+ Ввод значений тона/шума/громкости с клавиатуры (клавиши 0-9,A-F)
* Эффект теперь проигрывается по Enter (Space останавливает проигрывание)
+ Проигрывание эффекта с текущей строки по Ctrl+Enter
+ Добавлен импорт из PSG-файлов (дамп регистров AY, создаётся различными эмуляторами)
* Исправлено удаление строк
+ Добавлен режим логарифмического отображения/редактирования тона (с переключением на линейный)
* Изменён формат эффекта (код конечного маркера)
+ Вставка пустой строки в текущую позицию по Insert (со сдвигом текущей и последующих вниз)
+ Удаление текущей строки (если нет выделенных) по Delete (со сдвигом последующих вверх)
+ Несколько новых горячих клавиш
* Прочие мелкие исправления и дополнения
v0.1 02.02.06
+ Первая версия для закрытого тестирования, написана за 2 дня
+ Простейший рендер эффекта для прослушивания (без интерполяции и фильтров)
+ Минимальные возможности редактирования (только мышь)
+ Минимальные возможности импорта из WAV-файлов (только громкость)
- Множество планируемых возможностей

^ Благодарности

Автор выражает благодарность следующим людям:
Alone Coder, за соучастие в проекте;
Sergey Bulba, за AY-Emulator, Vortex Tracker, различную документацию на сайте;
SMT, за UnrealSpeccy и плеер VTX с открытыми исходниками;
Copper Feet, за кросс-ассемблер asm80;
А также авторам звуковых эффектов, вошедших в библиотеку.

^ Контакты

Сообщения об ошибках, предложения и пожелания для новых версий, звуковые эффекты для включения в библиотеку принимаются по адресу shiru@mail.ru