5.КЛАССИФИКАЦИЯ СПОСОБОВ ВОСПРОИЗВЕДЕНИЯ
Проигрыватель MOD-фалов можно представить как два параллельно работающих процесса: собственно проигрыватель и микшер (см. параграф 2. Принцип воспроизведения MOD-файлов). Прежде всего, способы воспроизведения можно классифицировать по типу проигрывателя:
- проигрыватель работает в реальном времени;
- проигрыватель не работает в реальном времени.
Аналогично способы воспроизведения классифицируются по типу микшера:
- микшер работает в реальном времени;
- микшер не работает в реальном времени.
Обязательным условием является синхронная работа и проигрывателя, и микшера, поэтому, в общем, способы воспроизведения можно разделить на два типа:
- синхронные, т.е. работающие в реальном времени;
- асинхронные, т.е. не работающие в реальном времени.
Специфика воспроизведения музыки состоит в том, что в оконечное устройство она должна поступать с постоянной скоростью, т.е. в реальном времени. Для способов воспроизведения типа 1 здесь никаких проблем не возникает - сигнал с выхода микшера идет с постоянной скоростью и напрямую подается в оконечное устройство.
Для способа воспроизведения типа 2 сигнал с выхода микшера идет с непостоянной скоростью, поэтому необходимо некоторое преобразование сигнала во времени, которое бы выравнивало скорость.
Одним из способов преобразования является использование буфера между микшером и оконечным устройством.Сигнал из микшера поступает в буфер с произвольной скоростью, а считывается из буфера со строго постоянной скоростью. Скорость заполнения буфера должна быть не меньше скорости его опустошения.
Чтобы воспроизводить MOD-файлы способом типа 1, необходима операционная система, работающая в реальном времени. Win32 не является такой операционной системой. Она предоставляет микшер, работающий в реальном времени, - это DirectSound, но реализация проигрывателя такого же типа с помощью стандартных средств Win32 невозможна.
6.АСИНХРОННОЕ ВОСПРОИЗВЕДЕНИЕ
Способ воспроизведения типа 2 использует буфер. В этот буфер микшер записывает волновую форму сигнала, которая затем считывается из него звуковой картой и передается в оконечное устройтво.
Волновая форма - последовательность выборок. Выборка - это относительное значение амплитуды сигнала. Считывание выборок из буфера звуковой картой производится с некоторой постоянной скоростью, которую можно устанавливать. Скорость считывания измеряется в количестве выборок в секунду или, что то же самое, в Герцах; будем ее обозначать буквой F.
Главное, принципиальное для проигрывателя, деление MOD-файла - это деление на кадры. Зная длину T кадра в секундах, можно вычислить его длину L в выборках: L=T*F. Эта длина может меняться на протяжении проигрывания модуля.
Алгоритм воспроизведения выглядит так:
while(буфер_еще_не_заполнен) {
обработать_начало_кадра( i ); // i - номер текущего кадра
заполнить_буфер_выборками(L); // L - длина кадра в выборках
i++;
}
Функция заполнить_буфер_выборками(L) - это микшер. В общем случае длина буфера может быть неделящейся нацело на L, и алгоритм получится немного другим, но это не меняет существа дела.
Как правило, длина воспроизводимого сигнала значительно превышает обьем бу фера. Поэтому этот буфер надо постоянно пополнять, при этом скорость заполнения может колебаться, - главное, чтобы она была не меньше скорости считывания из буфера.
7.ВОСПРОИЗВЕДЕНИЕ MOD-ФАЙЛОВ В Win32
Имеется программа, реализованная по приведенному выше алгоритму. Ее необходимо вызывать через некоторые промежутки времени, чтобы постоянно поддерживать буфер заполненным. Для этого используется любая функция, устанавливающая таймер, например, SetTimer.
Кроме этого надо организовать вывод данных из буфера в оконечное устройство. Для этого используется имеющийся в Win32 интерфейс драйверов устройств, работающих с волновыми формами. Названия функций этого интерфейса имеют префикс wave. Основной принцип работы по этому интерфейсу - заполнить буфер волновой формой и передать его звуковой карте.
8.ЛИТЕРАТУРА
- ftp://ftp.cdrom.com
- http://www.citenet.net
- http://huizen.dds.nl
- ftp://sdc.wtm.tudelft.nl
- ftp://crystal.clare.cam.ac.uk
- http://wuarchive.wustl.edu
- ftp://ftp.cwi.nl
- http://snake.mcs.kent.edu
- http://ftp.cica.indiana.edu
Предыдущая | Оглавление
|