Для начала надо точнее определиться с задачей и изучить, что такое wav-файлы, что такое цифровой звук и импульсно-кодовая модуляция (ИКМ). Без этого будет трудно даже понять предложенные здесь решения.
Навскидку, вот простая процедура воспроизведения куска цифровой записи звука на AY из памяти:
Код:
LD BC,#FFFD
LD A,7
OUT (C),A ;Выбрать регистр управления
LD A,#3F
LD B,#BF
OUT (C),A ;Отключить генерацию тона и шума на всех каналах
LD B,#FF
LD A,9
OUT (C),A ;Выбрать регистр громкости канала B
LD B,#BF
LD HL,sound_start
LD DE,sound_length
SOUNDLOOP:
LD A,(HL) ;7
OUT (C),A ;12
INC HL ;6
DEC DE ;6
LD A,D ;4
OR E ;4
JR NZ,SOUNDLOOP ;12/7
При этом каждый проход цикла выполняется за 51 такт, следовательно при тактовой частоте 3.5МГц за одну секунду цикл выполнится 68627 раз, то есть частота дискретизации будет равна 68627. Это слишком большая частота, которая ведет к нерациональному расходу памяти. Поэтому цикл надо замедлять, вставляя в него команды NOP, каждая из которых кушает 4 такта.
Я рекомендую использовать частоты дискретизации в районе 10кГц, что обеспечивает воспроизведение звуков с частотами до 5кГц при умеренном расходе памяти. Как только определится частота дискретизации, необходимо подготовить звуковой файл. Для этого:
1) загружаем его в любой звуковой редактор
2) передискретизируем его (Resample) на требуемую частоту дискретизации
3) выполняем другую обработку (фильтрацию, усиление). Нужно стремиться к возможно более полному использованию динамического диапазона, ведь у AY ЦАП имеет разрядность всего 4 бит. Есть смысл использовать компрессию динамического диапазона и усилить сигнал так, чтобы загнать его немного в насыщение (Clipping). Все равно шум квантования будет сильный, поэтому надо стремиться, чтобы сохранялся приемлемый баланс между шумом квантования и шумом от насыщения. Фильтрация звука необходима для того, чтобы убрать из него те частоты, которые не слышно или ими можно пожертвовать. Тем самым уменьшится энергия сигнала и его амплитуда, что позволит усилить его дополнительно без искажений от насыщения.
После обработки сохраняем файл в формат wav или raw (без заголовка) и без компрессии. Никаких MP3, никаких OGG, никаких ADPCM. Формат должен быть PCM, 8 или 16 бит.
Сохраненный файл необходимо обработать программой, которая удалит из него заголовок (если он есть) и сделает данные 4-битными. После этого его можно проигрывать программой, которую я привел выше.
Ну и настоятельно рекомендуется изучение основ цифровой обработки сигналов. Мою программу можно усовершенствовать, чтобы она более рационально использовала память. Ведь из каждых 8 бит памяти она использует только 4, таким образом можно будет повысить длительность проигрываемого файла в 2 раза! Но все равно будет мало. У Спектрума памяти слишком мало чтобы играть цифровой звук в записи сколько-нибудь долго. Несколько секунд - и все.