Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Функция № 21: Установка режима обратной записи DMA

Листинг 9.5. Проигрывание VОС-файла из памяти. | Листинг 9.6. Полная программа воспроизведения звука. | Алгоритм 9.2. Псевдокод наложения звуков. | РАЗРАБОТКА МУЗЫКИ ДЛЯ КОМПЬЮТЕРНЫХ ИГР | При исполнении MIDI-музыки с помощью пакета программ MIDPAK мне кажется, что часть музыкальной композиции теряется | Могу ли я использовать один и тот же MIDI-файл для всех звуковых карт? | Функция № 1: DigPlay | Функция № 5: AudioCapabilities | Функция № 12: SetTimerDivisorRate | Функция № 14: PostAudioPending |


Читайте также:
  1. II. Характеристика помещений и учебного режима.
  2. IV. Охрана труда при производстве работ в действующих электроустановках
  3. IV. Перепишите и переведите предложения, обращая внимание на употребление герундия в разных функциях.
  4. IV. Перепишите и переведите предложения, обращая внимание на употребление герундия в разных функциях.
  5. Mod_rewrite и ISAPI_Rewrite для перезаписи и перенаправления URL
  6. ORDER BY позволяет упорядочивать выводимые записи в соответствии со значениями одного или нескольких выбранных столбцов.
  7. V. Организационные мероприятия по обеспечению безопасного проведения работ в электроустановках

Функция позволяет включить режим обратной записи DMA. В идеале было бы достаточно использовать функцию PostAudioPending. Однако большинство моделей звуковых карт не позволяют гладко проиграть две звуковые последовательности одну за другой. И хотя фирма Creative Labs уже продала свыше двух миллионов карт Sound Blaster без этого недостатка, другие звуковые платы по-прежнему не способны обеспечить ровную стыковку двух звуковых фрагментов. Единственный способ обойти данную проблему состоит в использовании метода обратной записи DMA. В идеале функция PostAudio Pending должна была бы автоматически использовать этот метод, но это заняло бы слишком много времени для изменения всех имеющихся драйверов. Метод, с помощью которогб DIGPAK поддерживает режим обратной записи, достаточно прямолинеен, но пока я придумываю что-нибудь получше, вы вполне можете им воспользоваться.

Посмотрев на демонстрационную программу PEND.C, вы увидите пример того, как вместо PostAudioPending используется метод обратной записи DMA в том случае, если это поддерживается звуковой картой. Вы можете свободно использовать этот подход к реализации двойной буферизации в своих программах.

Обычно во время воспроизведения музыкального фрагмента звуковая карта осуществляет прямой доступ в память, который прерывается программой по окончании воспроизведения звука. Такой метод используется для исполнения одного фрагмента за один раз и это является стандартным режимом для вызовов функций DIGPAK. При автоматической инициализации прямого доступа в память, по достижении конца звукового фрагмента контроллер прямого доступа в память немедленно возвращается в начало буфера; он никогда самостоятельно не заканчивает воспроизведение. Следовательно, если ваш фрагмент — это слово «Привет!» и вы инициировали прямой доступ в память, то будете слышать «Привет!» непрерывно до тех пор, пока не прервете воспроизведение.

Как же использовать подобное поведение контроллера прямого доступа в память для двойной буферизации? Вначале вы должны выбрать фиксированный размер буфера передачи, например, 2 килобайта. Затем, если ваш буфер размером 2К, вы должны зарезервировать двойной буфер, то есть 4К. Теперь, начав воспроизведение этого четырехкилобайтного буфера, вы должны следить за тем, какую половину буфера в данный момент проигрывает DIGPAK. Каждый раз, когда DMA пересекает границу 2К, вам следует записать следующие 2К позади текущей позиции воспроизведения! Вот почему этот метод получил название обратной записи. Фактически, вы записываете данные позади текущей передачи данных с использованием прямого доступа в память. Чтобы жизнь не показалась вам такой уж простой, помните, что вы не можете использовать любые 4К для подобного буфера. Он не может пересекать границ страницы. Границы страниц располагаются через каждые 64К в первом мегабайте адресного Пространства компьютера. Поэтому DIGPAK содержит функцию, которая позволяет выяснить, не пересекает ли выбранный вами буфер одну из таких границ. если да, то просто выберите следующие 4К для вашего буфера, они уже точно пересекут границу.

Все это звучит достаточно запутано... но так оно и есть. Именно поэтому я и предоставил в ваше распоряжение простую программу PEND.C. Вы можете использовать ее как прообраз для своих функций воспроизведения звука. Используя прямой доступ в память и двойную буферизацию, вы сможете подкачивать звуковые данные с диска, осуществлять программное микширование в реальном времени и создавать звуковое сопровождение для фильмов и FLIC-файлов.

ВХОД: АХ = 69СЬ

DX=0 Выключить режим обратной записи.

DX=1 Включить режим обратной записи.

ВЫХОД: АХ=0 Режим обратной записи не поддерживается драйвером.

АХ=1 Режим обратной записи установлен.


Дата добавления: 2015-07-12; просмотров: 187 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Функция № 18: Адрес флага ожидания и адрес «семафора» DIGPAK| Функция № 25: SetDPMIMode

mybiblioteka.su - 2015-2024 год. (0.006 сек.)