Читайте также: |
|
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ОС-файла из памяти. |