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

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

Гончаров Д., Салихо Т. DirectX 7.0 Для программистов — Спб.: Питер, 2001. — 528 c.
ISBN 5-318-00173-4
Скачать (прямая ссылка): dirext7dlyaprogrammistov2001.djvu
Предыдущая << 1 .. 103 104 105 106 107 108 < 109 > 110 111 112 113 114 115 .. 229 >> Следующая

pDS3DBuffer->SetPosition(d3dVector.x, d3dVector.y, d3dVector.z, DS3DIMMEDIATE): return (TRUE);
Пример программы
253
//Заполняет звуковой буфер данными BOOL PrepareBuffersO {
HRESULT hRet;
VOID* pPtrl - NULL;
VOID* pPtr2 - NULL;
DWORD dwSizel;
DWORD dwSize2;
//Запоминаем размер звуковых данных DWORD dwWaveSi ze-pWave->GetWaveSi ze();
pWave->Reset();
//Пытаемся заблокировать звуковой буфер
hRet - pDSBuffer->Lock(0, dwWaveSize, &pPtrl. &dwSizel, &pPtr2, &dwSize2, OL); if (hRet!-DS_0K)
{
wsprintf(szErrorMessage,"*s","Lock buffer error"); return (FALSE);
}
//Если получилось, считываем в буфер звуковые данные pWave•>Read((PBYTE)pPtг1,dwWaveSi ze);
//He забываем разблокировать буфер pDSBuffer->Unlock( pPtrl, dwWaveSize, NULL, 0 );
return (TRUE);
//Создаем интерфейс для управления "слушателем"
BOOL PrepareListenerO {
HRESULT hRet;
DSBUFFERDESC dsbd;
DS3DLISTENER ds3dl;
//Заполняем структуру описания...
ZeroMemory(&dsbd, sizeof(DSBUFFERDESC));
dsbd.dwSize - sizeof(DSBUFFERDESC);
dsbd.dwFlags - DSBCAPS PRIMARYBUFFER|DSBCAPS CTRL3D;
//...и с ее помощью получаем интерфейс первичного буфера! hRet«pDS->CreateSoundBuffer(&dsbd, &pDSPrimary, NULL); if (hRet!-0S_0K)
{
wsprintf(szErrorMessage,"*s","Create primary buffer error"); return (FALSE);
}
//Устанавливаем формат первичного буфера WAVEFORMATEX wfx;
ZeroMemory( &wfx, sizeof(WAVEFORMATEX) ); wfx.wFormatTag - WAVE FORMAT PCM; wfx.nChannels * 2; wfx.nSamplesPerSec * 44100; wfx.wBitsPerSample - 16;
wfx.nBlockAlign - wfx.wBitsPerSample / 8 * wfx.nChannels;
продолжение J
254
Урок 8 • Программирование трехмерного звука
Листинг 8.2 (продолжение)
wfx.nAvgBytesPerSec - wfx.nSamplesPerSec * wfx.nBlockAlign;
pDSPrimary->SetFormat(&wfx);
//Получаем интерфейс для работы со "слушателей"
hRet - pDSPrimary->QueryInterface(IID_IDirectSound3DListener. (VOID**)&pDSListener); if (hRet!«0S_0K)
{
wsprintf(szErrorMessage."*s"."Create Listener error"); pDSPrimary->Release(); return (FALSE);
}
//Освобождаем интерфейс первичного буфера pDSPrinary->Release();
//Изменяем скорость "слушателя"
//(эту строку мояно попытаться модифицировать!!!) pDSLi stener->SetVeloci ty(0.Of,0.Of.О.Of,DS3DIMMEDIATE);
//Устанавливаем некоторые трехмерные характеристики среды ds3dl.dwSi ze-si zeof(DS3DLISTENER); pDSListener->GetAllParaiiieters(Ms3dl);
ds3dl. Л DopplerFactorH)S3D_MAXD0PPLERFACT0R; ds3dl.f1Rol1offFactor-1.5f;
pDSListener->SetAl1Parameters(&ds3dl.DS3DIMMEDIATE); return (TRUE);
}
//...........................................
//Проигрываем звуковой буфер void PlaySoundBuffer()
{
HRESULT hRet;
//Перемещаем в начало текущую позицию проигрывания pDSBuffer->SetCurrentPosi ti on(0);
//Устанавливаем максимальную громкость pDSBuffer->SetVol ume(DSBVOLUMEHAX);
//Начинаем воспроизводить звук
hRet-pDSBuffer->P1ay(0. 0. DSBPLAY LOOPING );
}
//...............................................
//Вызывается при срабатывании таймера //для изменения положения звукового буфера void NextTickO {
HDC hdc;
RECT rect; char str[256]:
static byte i-0: //Текущий участок поворота
float fAngle-0.Of; /Яекущий угол поворота
UINT uX-150.uY-80; //Координаты центра круга
Подводя итоги
255
UINT uScaleX-5.uScaleY-5; //Масштабируощие иномители
D3DVECT0R d3dVector;
//Вычисляем угол поворота fAngle-i*5*P1/180:
//Определяем координаты буфера d3dVector.x-03DVAL(RADIUS*cos(fAngle)); d3dVector.y»D3DVAL(RADIUS*si n(fAngle)); d3dVector.z-03DVAL(0.Of):
//Переходим к следующему участку i++;
if (i—72) i-0:
//Изменяем позицию буфера
pDS3DBuffer->SetPosition(d3dVector.x, d3dVector.y. d3dVector.z. DS3D IMHEDIATE):
//Отобрамаем новые координаты буфера //в виде чисел и радиуса окружности hdc-GetDC(hMainWnd): к
GetClientRect(hMainWnd.&rect);
PatBlt(hdc. rect.left. rect.top, rect.right, recfc,bottom. PATCOPY):
sprintf(str."X- X.2f".d3dVector.x);
TextOut(hdc.10.10.str.strlen(str)):
spri ntf(str.-Y- X.2f".d3dVector.y):
TextOut(hdc.10.30.str.strlen(str));
sprintf(str."Z- *. 2f".d3dVector.z):
TextOut(hdc.10.50.str.strlen(str));
Ell ipse(hdc, int(uX-RADIUS*uScaleX). int(uX«RADIUS*uScaleY). int(uX+RADIUS*uScaleX). int(uY+RADIUS*uScaleY));
HoveToEx(hdc.uX.uY.NULL):
Li neTo(hdc. i nt(uX+(d3dVector.x)*uScaleX). i nt(uY-(d3dVector.у)*uScaleY)):
ReleaseOC(hMai nWnd.hdc);
Подводя итоги
В этом уроке мы научились:
т Использовать интерфейсы IDirectSound3DBuffer и IDirectSound3DLi stener для изменения трехмерных характеристик звуковых буферов и «слушателя».
0 Использовать отложенные и немедленные установки этих параметров.
0 Изменять показатель расстояния среды.
^ Основы
ДУРОК использования
DirectMusic
В этом уроке мы рассмотрим некоторые возможности другого звукового компонента, принадлежащего DirectX, а именно DirectMusic. Два примера данного урока будут посвящены проигрыванию файлов формата MIDI и взаимодействию DirectMusic и DirectSound.
Что такое DirectMusic
Прежде чем приступить к рассмотрению возможностей компонента DirectMusic, стоит задать себе вопрос — зачем понадобился еще один звуковой компонент в библиотеке DirectX? Ведь более ранние версии имели в наличии лишь один такой компонент, а именно DirectSound. И только начиная с версии 6.1 (то есть достаточно поздно) в состав DirectX стал входить DirectMusic на правах полноценного компонента. Ответом на поставленный вопрос может послужить другой вопрос (хотя вопросом на вопрос отвечать и не принято) — а удовлетворяет ли Direct-Sound всем потребностям в поддержке воспроизведения звука на компьютере? Оказывается, «нет». До появления DirectMusic программисту, использующему библиотеку DirectX, не оказывалось никакой поддержки при воспроизведении звука, отличного от оцифрованных сэмплов. Самый яркий пример — невозможность воспроизвести звуковые файлы формата MIDI. Очень часто такое положение дел ставилось в вину Microsoft и, что самое забавное, считалось недостатком компонента DirectSound. На наш взгляд, DirectSound выполняет только то, для чего он предназначался изначально (воспроизведение и запись оцифрованных сэмплов), и это правильное положение вещей. Компонент DirectMusic с лихвой восполняет описанный пробел в звуковой составляющей DirectX, обеспечивая возможности, многие из которых ранее считались невыполнимыми.
Предыдущая << 1 .. 103 104 105 106 107 108 < 109 > 110 111 112 113 114 115 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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