AY музыка с цифровыми сэмплами by Alone Coder Играть цифровые сэмплы в свободное время процессора не представляет трудности. Идея комбинировать AY с General Sound тоже давно известна (хотя не припомню релизов). Но до сих пор почему-то не было ни одного редактора, который позволял писать такую музыку. Вдохновившись просьбами трудящихся, я решил реализовать такой вариант: добавил специальную команду (8snn) в Pro Tracker. В поле "s" содержится номер сэмпла, в "nn" - нота. (General Sound играет только 3 стандартных амижных октавы, ноты кодируются от #24 до#4A.) Если использовать эту команду в канале A, то сэмпл будет играть в GS'ном канале A. B - в B. C - в C. Так что в этом редакторе получается 9 каналов: 6 на AY (TurboSound) плюс 3 цифровых. Разумеется, если вы хотите использовать музыку в релизе, где только AY, вы можете ограничить выбор каналов. Рабочий процесс в этой экспериментальной версии Pro Tracker'а выглядит так: 1. Приготовьте MOD-файл со своими сэмплами (незацикленными). 2. Поместите его на TRD под именем "filename.i". 3. Запустите Pro Tracker. 4. Загрузите в него свой MOD-файл (ничего как будто не произойдёт, но при этом загрузятся сэмплы в General Sound). 5. Пишите музыку :) Обратите внимание, если не загрузить MOD-файл, то General Sound повиснет на команде 8snn. Это происходит потому, что GS'ная команда "Play FX" не работает, если в качестве параметра ей подставлен несуществующий сэмпл. Возможно, мне лучше очистить вссе сэмплы при старте редактора? Пишите свои идеи. * * * Если мы играем музыку одновременно на AY и GS, нам надо синхронизировать скорость проигрывания (частоту кадров на ZX) и частоты нот (определяются клоком AY). Первое не так важно, как второе, если мы каждую ноту вручную отправляем в GS, но всё равно может быть заметно, если два сэмпла надо играть подряд без разрыва. Таким образом, нам нужно стандартизировать эти значения. Если я правильно помню: 48K: 50 Hz, 1750000 (AY там как дополнительное устройство) 128K: 50 Hz, 1773400 Scorpion/KAY: 50 Hz, 1750000 ATM Turbo: 50 Hz, 1750000 ZX Evo default: 48.83 Hz, 1750000 ZX Evo 48K: 50 Hz, 1750000 ZX Evo 128K: 49.34 Hz, 1750000 Pentagon (f=14318000): 49.94 Hz, 1789750 (AY там как дополнительное устройство) Pentagon 2.6ббLE: 50 Hz, 1792000 Unreal Speccy default: 50 Hz, 1774400 Без сомнения, 50 Hz - самый популярный вариант частоты кадров. Многие программы измеряют по нему время. Главная проблема - с клоком AY. GS изначально разрабатывался для Scorpion и KAY, так что логично взять частоту оттуда - 1750000 Hz. Скорее всего, это и будет лучшим вариантом. ZX Evo может эмулировать 50 Hz + 1750000 в режиме развёртки "48K". Unreal Speccy может эмулировать что угодно, его частота AY по умолчанию всё равно ничему не соответствует, а частота 1750000 Hz всё-таки присутствует в списке. Насчёт фирменных 128K - не слышал, чтобы к ним подключали GS. Так что, похоже, единственная машина, где будут проблемы,- это Pentagon. Какие могут быть варианты для него? Можно пересчитывать частоты прямо при записывании их в регистры AY. Можно сменить таблицу частот, но тогда уедут глиссы. Можно подкрутить finetune в сэмплах на GS, но тогда соседние сэмплы будут склеиваться немного не так, как ожидалось. Если же мы играем цифровые сэмплы на том же самом AY, то нам достаточно учитывать число тактов в кадре - ведь AY обычно синхронен с Z80. Pentagon довольно далеко от идеальных 70000 тактов, 128K несколько ближе, но не совсем. К тому же, может быть включен турбо-режим... Так что наш плейер должен сам измерить число тактов в кадре и соответственно подстроить частотную таблицу для цифровых сэмплов