Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Функция № 25: SetDPMIMode





Функция информирует драйвер DIGPAK о 32-разрядной адресации. Поскольку оригинальные драйверы DIGPAK предполагалось использовать только в реальном режиме, я не задумывался о возможности другой адресации. (Первые драйверы DIGPAK разрабатывались в 1987 году, поэтому в этом нет ничего удивительного.) Из-за того, что многие функции DIGPAK используют комбинацию регистров сегмента и смещения для формирования адреса, это порождает определенные проблемы в защищенном режиме. В защищенном режиме сегментные регистры являются селекторами и сформировать из них адрес реального режима трудно. После вызова этой функции, DIGPAK будет знать, что он активизирован прикладной программой для защищенного режима и будет реагировать на полный 32-разрядный адрес в ESI, а не на комбинацию DS:SI. Процесс трансляции адреса автоматически обеспечивается интерфейсом нижнего Уровня DIGPLAY.ASM, находящимся в подкаталоге программ для защищенного режима.

ВХОД: АХ=6А0h

DX= Режим включен/выключен (1/0). ВЫХОД: Ничего

 

#*****************************************************************

#***** DigPlay, компонуемый интерфейс Digitized Sound Package ****

#*****************************************************************

DIGPLAY.H Компонуемый интерфейс реального режима. Все процедуры имеют прототипы и используют имена сегментов, пригодные для любой модели памяти.

 

#ifndef LOADABLE_DRIVERS

ftdefine LOADABLE_DRIVERS 1// условная компиляция

#endif

/* битовые флаги возможностей драйвера */

/* возвращаются функцией AudioCapabilities */

#define PLAYBACK 1 // бит 0, возможно воспроизведение звука

// в фоновом режиме

#define MASSAGE 2

// бит 1, данные преобразованы

//в аппартно-эависимый формат

#define FIXEDFREQ 4 // бит 2, драйвер воспроизводит звук

// только с фиксированной частотой

#define USESTIMER 8 // бит 3, драйвер использует таймер

#define SHARESTIMER 16 // бит 4, таймер может быть использован

// совместно (бета-версия!!!)

#define LOOPEND 32 // бит 5, поддерживается цикличность и

// очередь ожидания (бета-версия!!!)

#define STEREOPAN 64 // бит 6, поддерживаются стереопереходы

#define STEREOPLAY 128 // бит 7, поддерживается 8-разрядный

// РСМ-звук

#define AUDIORECORD 256 // бит 8, поддерживается запись звука

#define DMABACKFILL 512 // бит 9, поддерживается режим обратной // записи DMA

#define PCM16 1024 // бит 10, поддерживается 16-разрядный

// звук

#define PCM16STEREO 2048 // бит 11, поддерживается 16-разрядный

// стереозвук

typedef struct

{ char far *sound; // адрес звуковых данных

unsigned short sndlen; // длина звуковых данных

short far *IsPlaying; // адрес флага состояния

short frequency; // частота воспроизведения }SNDSTRUC;

extern short far cdecl DigPlay (SNDSTRUC far *sndplay);

// 688h -> воспроизведение 8-разрядного оцифрованного звука

extern short far cdecl SoundStatus (void);

// 689h -> сообщает состояние звукового драйвера

extern void far cdecl MassageAudio (SNDSTRUC far *sndplay);

// 68Ah -> преобразует цифровой звук в аппаратнозависимый формат

extern void far cdecl DigPlay2 (SNDSTRUC far *sndplay);

// 6SBh -> воспроизведение звука в аппаратноэависимом формате

extern short far cdecl AudioCapabilities (void);

// 68Ch -> сообщает информацию о возможностях драйвера

extern short far cdecl DigPakIdentityString (char far *str);

// 68Ch -> копирует в заданный буфер идентификатор драйвера

// звука и возвращает длину скопированной строки

extern void far cdecl StopSound (void);

// 68Fh -> останавливает воспроизведение звука

extern short far cdecl PostAudioPending (SNDSTRUC far *sndplay);

#define NOTPLAYING О // звук не воспроизводится

#define PLAYINGNOTPENDING 1 // звук воспроизводится, очередь пуста

#define PENDINGSOUND 2 // звук воспроизводится, следующий

// фрагмент ожидает своей очереди

extern short far cdecl AudioPendingStatus (void);

#define FULLRIGHT 0

#define FULLLEFT 127

#define FRONTANDCENTER 64

extern short far cdecl SetStereoPan(short panvalue);

// 0 - 127, 0 - 100% правый канал

#define PCM_8_MONO О

#define PCM_8_STEREO 1

#define PCM_16_MONO 2 #define PCM_16__STEREO 3

extern short far cdecl SetPlayMode (short playmode);

// 0 - режим не поддерживается

// 1— режим поддерживается

extern short far cdecl SetRecordMode(short mode);

// устанавливает режим записи звука

extern short far * far cdecl PendingAddress (void);

// сообщает дальний адрес флага ожидания. Если ячейка памяти по

// этому адресу содержит значение 1, это означает, что следующий

// фрагмент все еще ожидает своей очереди. Когда значение ячейки

// становится равным 0, ваша программа может начать загрузку

// следующего фрагмента в двойной буфер. Использование "семафора"

// для определения момента для загрузки следующего фрагмента

// предпочтительнее, чем вызов функции AudioPendingStatus.

extern short far * cdecl ReportSemaphoreAddress(void);

// сообщает адрес семафора DIGPAK. Возвращаемый указатель является

// дальним указателем на ячейку памяти внутри драйвера DIGPAK. Если

// значение не нулевое, то DIGPAK находится в активном состоянии и

// вы не должны в это время вызывать какие бы то ни было функции

// DIGPAK по аппаратному прерыванию, так как это, возможно, прервет

// исполнение кода самого драйвера.

extern void far cdecl SetTimerDivisorRate (short rate);

// устанавливает делитель частоты для таймера

// Если ваша программа перепрограммировала таймер 8253 на новую

// частоту, вы должны сообщить об этом драйверу DIGPAK.

// Не забудьте восстановить стандартную частоту после завершения

// работы программы.

extern short far cdecl ReportVersionNumber (void);

// сообщает версию драйвера DIGPAK

// Номер версии возвращается умноженным на сто, то есть значение

// 310 соответствует версии 3.1. Драйверы версий младше 3.1 не

// поддерживают данную функцию, поэтому нулевое значение означает,

// что версия загруженного драйвера DIGPAK меньше, чем 3.1.

extern short far cdecl SetBackFillMode (short mode);

// Устанавливает режим обратной записи DMA. Возвращает 1, если

// режим.установлен, и 0, если драйвер не поддерживает этот режим.

extern unsigned short far cdecl ReportDMAC (void);

// сообщает текущее значение счётчика DMA

extern short far cdecl VerifyDMA (chac far *data, short length);

// Проверяет, не пересекает ли буфер границ страницы. Возвращает 1,

// если граница не пересекается, и 0, если буфер пересек границу.

extern void far cdecl NullSound (char far *sound, short sndlen, short null);

/* Дополнительные функции */

extern void far cdecl WaitSound (void);

// ожидание окончания воспроизведения звука

extern short far cdecl Checkin (void);

// Загружён ли драйвер. 1 - да; О - нет.

/**** Внимание!!! Если вы используете LOADABLE_DRIVERS, то должны

обеспечить доступ к функциям распределения памяти и к DOSCALLS.OBJ.

extern short far cdecl InitDP (short segment);

// инициализировать драйвер DIGPAK

extern void far cdecl DeInitDP (short segment);

// выгрузить драйвер DIGPAK

API пакета программ MIDPAK

Драйвер MIDI, MIDPAK использует вектор прерывания 66h, что обеспечивает прозрачный программный интерфейс. Ниже.описываются два способа воспроизведения MIDI-музыки. Первый способ основан на прерываниях. Второй — на использовании библиотеки функций на Си или ассемблере, которые позволяют не только осуществлять доступ к драйверам звука, но и предоставляют другие полезные функции. Эти функции находятся в исходном файле MIDPACK.ASM.

MIDPAK использует тот же вектор прерывания, что и DIGPAK. Пакет DIGPAK описывает полный набор драйверов оцифрованного звука, поставляемый фирмой Audio Solution. MIDPAK полностью совместим с DIGPAK. Если ваша программа должна воспроизводить как MIDI-музыку, так и оцифрованный звук, надо вначале загрузить требуемый драйвер оцифрованного звука, и затем поверх него загрузить MIDI-драйвер MIDPAK. Драйвер MIDPAK обнаруживает присутствие драйвера DIGPAK и перенаправляет через него все вызовы. Если аппаратное обеспечение не в состоянии независимо воспроизводить оцифрованный звук (поддержка прямого доступа в память: Sound Blaster и ProAudio Spectrum), тогда во время воспроизведения оцифрованного звука исполнение MIDI-музыки будет выключено. Воспроизведение MIDI-музыки возобновится сразу же после окончания проигрывания оцифрованного звукового фрагмента. Для прикладной программы этот процесс полностью прозрачен.

Пакет программ MIDPAK использует набор звуковых драйверов MIDI, разработанных Miles Design Inc. Эти драйверы различаются по своему размеру и имеют расширение.ADV. При старте MIDPAK всегда загружает драйвер MUSIC.ADV. Поэтому прикладная программа перед загрузкой MIDPAK должна переименовать необходимый драйвер в MUSIC.ADV.

MIDPAK не исполняет непосредственно файлы MIDI. Вы должны конвертировать файлы MIDI (с расширением.MID) в файлы обобщенного MIDI (-XMI), используя программу MIDIFORM или утилиту MENU. Драйверы Расширенного MIDI фирмы Miles Design Incorporated поддерживают каналы 2-9 для мелодических инструментов и канал 10 для ударных.

Замечание

Любой не указанный номер функции является устаревшим или не используется.

 

Date: 2015-09-18; view: 393; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию