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

Листинг 9.2. Загрузка VОС-файла.

Листинг 8.1. Новая функция масштабирования спрайтов (без отсечения). | Листинг 8.2. Демонстрационная программа новой функции масштабирования (VYREN.C). | Алгоритм 8.1. Масштабирование спрайта. | Формула 8.3. Вычисление вектора скорости. | Формула 8.4. Вычисление угла между наблюдателем и объектом. | Листинг 8.3. Последний Шаттл (FINVYREN.C). | Создание студии | ЗВУКОВЫЕ ЭФФЕКТЫ И МУЗЫКА | Функция 0: Получить версию драйвера | Функция 12: Прервать цикл вывода звука |


Читайте также:
  1. Глава 5. Полная загрузка
  2. Загрузка и разгрузка парового стерилизатора.
  3. Загрузка...
  4. Листинг 11.2. Структура данных игрока.
  5. Листинг 11.3. Функции полета мухи.
  6. Листинг 11.4. Муравейник (ANTS.С).
  7. Листинг 11.5. Падение мяча (BALL.C).

char far *Voc_Load_Sound(char *filename,

unsigned char *header_length)

{ // загрузка звукового файла с диска в память

// и установка указателя на его начало

char far *temp_ptr;

char far *data_ptr;

unsigned int sum;

int sound_handle,t;

unsigned errno, segment, offset, num_para, bytes_read;

// открыть звуковой файл

_dos_open(filename, _O_RDONLY, &sound_handle);

// выделить память

num_para =1 + (filelength(sound_handle))/16;

_dos allocmem(num_para, &segment);

// установить указатель на выделенную память

_FP_SEG(data_ptr) = segment;

_FP_OFF(data_ptr) = 0;

// загрузить звуковые данные

temp_ptr = data_ptr;

do

{

dos_read(sound_handle,temp_ptr, 0х4000, &bytes__read);

temp_ptr += bytes_read;

sum+=bytes_read;

} while(bytes_read==0x4000);

// Проверить на всякий случай, звуковые ли это данные.

// Для этого проверяется присутствие слова "Creative".

if ((data_ptr[0]!= 'С') || (data_ptr[1]!= 'r'))

{

printf("\n%s is riot a voc file!",filename);

_dos_freemem(_FP_SEG(data_ptr));

return(0);

} // конец звукового файла

header_length = (unsigned char)data_ptr[20];

// закрыть файл

_dosclose(sound_handle);

return(data_ptr);

} // конец функции

Наиболее замечательное в этой функции то, что она возвращает адрес области памяти (точнее, указатель на него), куда был загружен VOC-файл. Мы используем этот указатель позже при проигрывании звука.

Все остальные функции, которые нам потребуются, тривиальны. Мы используем ассемблерные вставки для настройки регистров и команду процессора CALL для вызова драйвера с помощью указателя driver_ptr.

Рассмотрим несколько таких функций, чтобы понять особенности их написания. Драйвер должен быть инициализирован прежде, чем мы сможем его использовать. Это очевидное требование. Делать это мы должны с помощью функции 3, «Инициализировать драйвер». Листинг 9.3 содержит текст программы этой функции.


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


<== предыдущая страница | следующая страница ==>
Листинг 9.1. Выделение памяти для CT-VOICE.DRV.| Листинг 9.5. Проигрывание VОС-файла из памяти.

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