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

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

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

Заголовочный файл SOUND.Н, содержащий прототипы используемых функций, приведен в листинге 8.1.
Листинг 8.1. Заголовочный файл SOUND.Н
//........................................................
// Файл: SOUND.Н
// Описание: Выполняет всю черновую работу с DirectSound
//.........................................................
//Создание звукового буфера...
BOOL CreateBuffersO;
//...и заполнение его данными BOOL PrepareBuffersO;
//Функция, создающая интерфейс для работы со "слушателем"
BOOL PrepareListenerO;
//Обработчик ошибок
void ErrorHandle(HWND, LPCTSTR);
Реализация работы с DirectSound представлена файлом SOUND.СРР и приведена в листинге 8.2.
Листинг 8.2. Реализация работы с трехмерным звуком в файле S0UND.CPP
//........................................................
// Файл: SOUND.СРР
// Описание: Выполняет всю черновую работу с DirectSound
//........................................................
#define DIRECTSOUND_VERSION 0x700 #define STRICT
#include <windows.h>
#include <dsound.h>
#include <stdio.h>
#include <math.h>
#include "main.h"
#include "sound.h"
#include "cwave.h"
static HWND hMainWnd;
LPDIRECTSOUND pDS - NULL;
//Первичный и вторичный звуковые буферы
продолжение #
250
Урок 8 • Программирование трехмерного звука
Листинг 8.2 (продолжение)
LPDIRECTSOUNDBUFFER pDSPrlmary - NULL;
LPDIRECTSOUNDBUFFER pOSBuffer - NULL;
//Интерфейсы для управления характеристиками //звукового буфера и "слушателя”
LPDIRECTS0UND3DBUFFER p0S30Buffer- NULL;
LPDIRECTS0UND3DLISTENER pOSL1stener- NULL;
CMappedWave* pWave-NULL; char szErrorMessage[255];
#define PI 3.14159f
#def1ne RADIUS 10.Of//Радиус вращения звука
//..................................................
//Функция, вызываемая в случае ошибки void ErrorHandle(HWND hwnd.LPCTSTR szError)
{
ShowW1ndow(hwnd.SW_HIDE);
MessageBox(NULL, szError, AppName. MB_0K|MB_IC0NST0P); DestroyWlndow(hwnd);
}
//........................................................
//Очищает все объекты, связанные с DirectSound void RemoveDirectSoundО {
1f (pWave)
{
delete pWave;
pWave-NULL;
}
1f (pDSL1stener)
{
pDSL1stener•>Release();
pDSL1stener-NULL;
}
1f (pDS3DBuffer)
{
pDS3DBuffer•>Release();
pDS3DBuffer-NULL;
}
if (pOSBuffer)
{
pOSBuffer->Release();
pDSBuffer-NULL;
}
1f (pDS)
{
pDS«>Release();
pDS-NULL;
}
}
//----
Пример программы
251
//Главная функция инициализации DirectSound BOOL InitDirectSound (HWND hwnd)
{
HRESULThRet;
hMalnWncHiwnd;
//Создаем объект DirectSound
hRet-OirectSoundCreate( NULL. &pDS. NULL );
if (hRet!-OS_OK)
{
wspr1ntf(szErrorMessage, "*s", "DirectSoundCreate error"); ErrorHandle(hMainWnd.szErrorMessage); return (FALSE);
}
//Устанавливаем режим совместного доступа hRet-pDS->SetCooperativeLevel (hwnd. DSSCLPRIORITY);
1f (hRet!-0S_0K)
{
wsprlntf(szErrorHessage,"*s"."SetCooperativeLevel error"); ErrorHandle(hMainWnd.szErrorMessage); return (FALSE);
}
//Создаем звуковой буфер 1f (ICreateBuffersO)
{
ErrorHand1e(hMa1nWnd.szErrorHessage); return (FALSE):
}
//Заполняем буфер информацией 1f (IPrepareBuffersO)
{
ErrorHandleChHainWnd,szErrorHessage); return (FALSE);
}
//Создаем интерфейс управления "слушателем” if (!PrepareL1stenerO)
{
ErrorHandle(hMainWnd,szErrorHessage); return (FALSE);
>
return (TRUE);
}
//......................................................
//Создаем звуковой буфер на основе файла WAV BOOL CreateBuffersO {
HRESULT hRet;
DSBUFFERDESC dsbd;
DS3DBUFFER ds3db;
D3DVECT0R d3dVector;
//Создаем объект для работы с файлом WAV pWave - new CMappedWaveO;
\ •
продолжение
252
Урок 8 • Программирование трехмерного звука
Листинг 8.2 (продолжение) if (!pWave)
{
wsprintf(szErrorMessage."*s","Create class error"): return (FALSE):
}
//Открываем файл с помощью объекта класса CMappedWave if (!pWave->Open("test.wav"))
{
wsprintf(szErrorMessage."*s"."Open file error"): return (FALSE):
>
//Заполняем структуру описания...
ZeroMemory( &dsbd. sizeof(DSBUFFERDESC) ): dsbd.dwSlze - sizeof(DSBUFFERDESC):
dsbd.dwFlags - DSBCAPSJTATIC | DSBCAPS_CTRL3D | DSBCAPS_GETCURRENTP0SITI0N2 | DSBCAPSGLOBALFOCUS;
dsbd.dwBufferBytes - pWave->GetWaveSize(); dsbd.IpwfxFormat - pWave->GetWaveHeader(): dsbd.gu1d3DAlgorlthm - DS3DAL6_N0_VIRTUALIZATI0N:
//...и с ее поиоцью создаем звуковой буфер! hRet»pDS->CreateSound8uffer( &dsbd, SpOSBuffer. NULL ): if (hRet!H)S_0K)
{
wsprintf(szErrorMessage,"*s"."Create buffer error"): return (FALSE):
}
//Получаем интерфейс для управления //трехмерными характеристиками буфера
hRet-pDSBuffer->QueryInterface(IID_IDirectSound3DBuffer. (V0ID**)&pDS3DBuffer); if (hRet!-0S_0K)
{
wsprintf(szErrorMessage."*s"."Create 3D buffer error"): return (FALSE);
}
//Устанавливаем некоторые трехмерные характеристики буфера ds3db.dwSi ze-si zeof(DS3DBUFFER); pDS3DBuffer->GetAl1 Parameters(&ds3db):
ds3db.f1Mi nDi stance-1.Of: ds3db.f1MaxDi stance-2.5f:
pDS3DBuffer•>SetAl1 Parameters(&ds3db.DS3D_IMMEDIATE):
//Определяем начальную позицию звукового буфера d3dVector.x-03DVALUE(RADIUS); d3dVector. y*K)3DVALUE (0.0 f): d3dVector.Z-D3DVALUE(0.Of):
Предыдущая << 1 .. 102 103 104 105 106 107 < 108 > 109 110 111 112 113 114 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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