Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Графика -> Гончаров Д. -> "DirectX 7.0 Для программистов" -> 80

DirectX 7.0 Для программистов - Гончаров Д.

Гончаров Д., Салихо Т. DirectX 7.0 Для программистов — Спб.: Питер, 2001. — 528 c.
ISBN 5-318-00173-4
Скачать (прямая ссылка): dirext7dlyaprogrammistov2001.djvu
Предыдущая << 1 .. 74 75 76 77 78 79 < 80 > 81 82 83 84 85 86 .. 229 >> Следующая

Функция Reset устанавливает текущую позицию чтения на начало звуковых данных файла. Функция Read, получающая в качестве параметров адрес буфера в памяти и количество байт, которое необходимо считать из файла в буфер, производит чтение и возвращает количество реально прочитанных байтов. В случае если звуковых данных в файле недостаточно для заполнения всего буфера целиком, то оставшаяся часть буфера заполняется величиной, означающей молчание.
Две последних функции, GetWaveSize и GetWaveHeader, обеспечивают доступ программы к закрытым данным класса. Именно эти данные потребуются впоследствии для создания звуковых буферов DirectSound.
Странное название класса объясняется тем, что для его реализации будет использован механизм файлов, проецируемых в память.
Файлы, проецируемые в память
Здесь, видимо, стоит кратко остановиться на особенностях этого механизма. В процессе работы с DirectSound нам предстоит загружать звуковые файлы в оперативную память для того, чтобы впоследствии скопировать звуковые данные загружаемого файла во вторичный буфер. Возможно простое и очевидное на первый взгляд решение — выделить участок памяти необходимого размера и считать звуковые данные в этот участок.
Однако такое решение обладает рядом недостатков, а именно: звуковые файлы имеют достаточно большую длину (размер в 4-5 Мбайт не является чем-то особенным), следовательно, процесс считывания в память займет определенное (и немалое по меркам пользователя) время. Кроме того, при недостатке оперативной памяти, которой всегда не хватает, система лишь выделит в адресном пространстве процесса участок, достаточный для размещения данных, а затем будет производить считывание звуковых данных в страничный файл. И только при необходимости (возникающей при обращении программы по одному из зарезервированных адресов, содержащих звуковой файл) произойдет реальное выделение
Подготовительные материалы
187
участка оперативной памяти, в который и будет считана порция звуковых данных, располагающихся теперь в страничном файле. В результате мы получим абсолютно необоснованный расход дисковой памяти (две копии звукового файла — одна в страничном файле, а другая — непосредственно сам звуковой файл) при нулевом или даже отрицательном выигрыше в производительности.
В Win32 появился механизм, позволяющий работать с объемистыми файлами так, словно они уже загружены в оперативную память. При этом все действия по выделению участка адресного пространства, подкачке страниц и кэшированию операционная система берет на себя. При работе с такими файлами не происходит выделения физической памяти из страничного файла. Эта память берется из самого файла, расположенного на диске. Следовательно, не происходит бессмысленного копирования звуковых данных в страничный файл. Реализуется все это при помощи механизма, получившего название файлов, проецируемых в память (memory-mapped files).
Рассмотрим, из каких шагов состоит этот процесс.
1. Сначала необходимо открыть файл, который будет проецироваться в память. Сделать это можно при помощи функции CreateFile, которую мы рассматривали в уроке 1. Эта функция возвращает дескриптор открытого файла, который нам потребуется далее.
2. Затем необходимо вызвать функцию HANDLE CreateFileMapping(
HANDLE hFile, //Дескриптор файла
LPSECURITYATTRIBUTES 1 pFi 1 eMappi ngAttr i butes,
DWORD flProtect, //Атрибуты защиты
DWORD dwMaximumSizeHigh, //Размер проекции DWORD dwMaximumSizeLow. //Размер проекции LPCTSTR lpName //Имя создаваемого объекта
):
которая укажет системе размер создаваемой проекции и атрибуты защиты, возвратив дескриптор объекта «проекция файла». Несмотря на угрожающий вид и большое количество параметров, ничего сложного в ней нет. Первый параметр — дескриптор файла, открытого на первом шаге. В качестве второго параметра можно безбоязненно передавать NULL, так как Windows 95 не поддерживает атрибуты защиты. Третий параметр, fl Protect, должен принять значение PAGE READONLY, ведь мы не собираемся изменять содержимое звукового файла. Параметры dwMaximumSizeHigh и dwMaximumSizeLow задают соответственно старшие и младшие 32 бита значения размера проецируемых данных. И наконец, lpName содержит имя создаваемого объекта «проекция файла». Это имя может использоваться, например, для обмена информацией между процессами. Мы же будем передавать в качестве последнего параметра NULL. В случае неудачи функция CreateFil eMappi ng возвращает NULL.
3. И наконец, необходимо спроецировать файл на адресное пространство процесса. Это делается при помощи функции
LPVOID MapViewOfFile(
HANDLE hFi1eMappingObject, //Объект-проекция файла
DWORD dwDesiredAccess, //Тип доступа
DWORD dwFileOffsetHigh, //Смещение проекции
DWORD dwFileOffsetLow, //Смещение проекции
DWORD dwNumberOfBytesToMap //Количество проецируемых байтов
);
188
Урок 7 • Основы использования DirectSound
Первый параметр — дескриптор, полученный при вызове функции CreateFile Mapping. Параметр dwDesiredAccess указывает тип доступа. В нашем случае его значение должно быть FILE MAP READ, что обеспечивает доступ только для чтения. Следующие два параметра, dwFileOffsetHigh и dwFileOffsetLow, задают старшие и младшие 32 бита соответственно для смещения от начала файла, с которого нужно начинать проецирование. Последний параметр, dwNumberOfBytesToMap, позволяет задать количество байт для проецирования. Если этот параметр равен нулю, то происходит проецирование всего файла целиком. Эта функция возвращает указатель на адрес, начиная с которого произошло проецирование. В случае неудачи это будет NULL.
Предыдущая << 1 .. 74 75 76 77 78 79 < 80 > 81 82 83 84 85 86 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.