Дата публикации статьи: 10.07.2003 00:00
Ну зачем тебе сдался этот DirectSound? У тебя же есть Windows API-функции и MCI32.OCX.
Ааа! 3D-сурроунда захотелось или несколько звуков одновременно воспроизводить?
Ну тогда ладно - слушай дальше. Для начала нам нужны библиотеки DirectX версии
7(не SDK) или выше. Взять можно с {сайта Microsoft}. Ну что? Достал DirectX? Настроение
хорошее? Ну тогда вперед, как говорится: "За работу, начальник!".
Создадим новый проект (Standard EXE). Подключим DirectX к проекту: "Project
- References - DirectX 7 for Visual Basic Type library". Полный путь на всякий
случай: "C:\WINDOWS\SYSTEM\dx7vb.dll".
Вот мы и сделали первый шаг. Теперь объявим в General Declarations формы:
Dim dx as New DirectX7 'объявляем об использовании DirectX7
Dim ds As DirectSound 'объект DirectSound
Теперь мы создадим несколько звуковых буферов: для того чтобы воспроизвести
одновременно три звука нам надо создать три буфера и т.д. Мы объявим два:
Dim dsbuffer1 As DirectSoundBuffer
Dim dsbuffer2 As DirectSoundBuffer
Будем инициализировать? Я не слышу! Громче! Совсем другое дело :) Для инициализации
создадим небольшой Sub InitSound:
Sub InitSound()
On Local Error Resume Next 'чтобы не вылетал
Set ds = dx.DirectSoundCreate("") 'включаем DirectSound
If Err.Number <> 0 Then
'Здеся ставим код, который должен выполняться, если у человека DirectX-а нету
или он старый.
End If
ds.SetCooperativeLevel Form1.hWnd, DSSCL_NORMAL 'устанавливаем режим работы,
проигрываем на Form1 и с NORMAL priority.
!! В большинстве случаев можно обойтись DSSCL_NORMAL. Другие понадобятся только
для супер сложных задач. В частности, DSSCL_WRITEPRIMARY будет не лишним при
одновременной записи и воспроизведении. А то будет заикаться!!
Dim bufferDesc As DSBUFFERDESC 'необходимые переменные для
Dim waveFormat As WAVEFORMATEX 'организации простого wave-буфера
bufferDesc.lFlags = DSBCAPS_CTRLPAN 'ставим флажок буферу, что будем баловаться
с PAN-звуком, т.е. с плавным звуком.
Стоит замолвить словечко и о других членах DSBCAPS. Попробуйте поставить вместо
CTRLPAN CTRL3D. Однако такие навороты будут излишними, т.к. обычно у пользователей
две колонки. А иногда одна... наушники... вообще звука нет. Так что, как говорил
Козьма Прутков: "Нельзя объять необъятное.", да я и не буду рассказывать
про все и посоветую вам самим сходить в "Object Browser" и поискать
в DxVBLib "DSBCAPS". Тут дело опыта.
Загрузим-ка в буферы данные:
Set dsbuffer1 = ds.CreateSoundBufferFromFile("Shoot.wav", bufferDesc,
waveFormat)
If Err.Number <> 0 Then
'Что делать, если файл не существует или повреждён.
End If
Set dsbuffer2 = ds.CreateSoundBufferFromFile("Hit.wav", bufferDesc,
waveFormat)
If Err.Number <> 0 Then
'Аналогичный код обработчика ошибок.
End If
End Sub
Ну вот - мы готовы к пробному воспроизведению звука через DirectSound. Вы не
устали? Сходите на кухню - покушайте супчик... Приятного аппетита! Ну а с другой
частью аудитории мы пойдём дальше. А дальше мы создадим небольшой Sub:
Sub PlayPanned(Buffer As DirectSoundBuffer, Position As Integer) 'Buffer -
заданные выше файлы для воспроизведения, Position - позиция в колонках. Благодаря
смене этого параметра можно сделать эффект звука из одной колонки в другую.
Buffer.SetPan Position
!! Position может быть и с "-" и с "+", зависит это от
позиции в колонках. Т.е. идеальным балансом будет 0 !!
Buffer.Play 0 'Воспроизводим звук. Параметр 0 говорит о том, что звук будет
воспроизводиться один раз. Если поставить параметр 1, то звук будет постоянно
повторяться.
End Sub
Ну вот вроде бы и всё. Ааа! Использование? Очень просто: PlayPanned dsbuffer1,
0 . Надеюсь, что не утомил вас и научил чему-то полезному.
|