Помогите с DirectSound3DBuffer8 в общем с 3D звуком.

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Помогите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение longwair » 09.03.2021 (Вт) 18:19

Доброго времени суток. Решил разобраться с 3D звуком. Сел погуглил, понял что нифига не понял из мануалов. Стал ковырять на наличие исходников. Нашёл несколько штук, но код настолько дремучь и раскидан по разным формам, модулям, что собрать всё во едино что бы понять не получилось. Создал проект, повычленял строки кода как мне кажется нужные для того что бы 3D звук всё же заиграл. Звук играет, но обычный. Да и я не уверен что всё там нужное, и ещё уверен что чего то там не хватает. Помогите разобраться пожалуйста :cry:
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось longwair 15.08.2021 (Вс) 20:31, всего редактировалось 1 раз.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение The trick » 09.03.2021 (Вт) 19:34

UA6527P

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение Mikle » 09.03.2021 (Вт) 19:55

Помню, начал изучать тот 3D Sound, что в SDK, но чем-то он мне не понравился, и я написал свой класс. Могу скинуть, если хочешь.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение longwair » 10.03.2021 (Ср) 12:04

Mikle
Скинь конечно. Сам уже думал провернуть что то такое.

The trick
Спасибо, на первый взгляд понятно. Буду разбирать как время найду.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение Mikle » 10.03.2021 (Ср) 15:07

Вот класс. У тебя dx8vb, немного другой синтаксис, поменяй IDirectSoundBuffer8 на DirectSoundBuffer8.
Объект типа DirectSound3DBuffer создаётся на основе DirectSoundBuffer8, который ты сам создаёшь средствами DirectSound.
Пусть у тебя есть буфер DSBGrate, и ты загрузил туда звук опускания железной решётки.
Создаёшь переменную под 3D буфер:
Код: Выделить всё
Dim DS3DGrate As DirectSound3DBuffer

Инициализируешь её:
Код: Выделить всё
  Set DS3DGrate = New DirectSound3DBuffer
  DS3DGrate.Init DSBGrate, 35
  DS3DGrate.SetVol 1

Я задал радиус = 35, это расстояние, на котором громкость падает вдвое.
При необходимости воспроизвести звук выполняешь:
Код: Выделить всё
  DS3DGrate.Play

Пока звук воспроизводится, в цикле постоянно вызываешь Update:
Код: Выделить всё
  DS3DGrate.Update GratePos, PlPos, PlDir, PlUp

PlPos, PlDir, PlUp - это позиция и направления вперёд и вверх камеры.
При необходимости останавливаешь воспроизведение:
Код: Выделить всё
  DS3DGrate.StopPlaying

При завершении программы не забываешь уничтожить объект:
Код: Выделить всё
  Set DS3DGrate = Nothing

Как это работает, можешь послушать в моей последней демке конкурсной игры, код взят оттуда.
У вас нет доступа для просмотра вложений в этом сообщении.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение Mikle » 10.03.2021 (Ср) 19:27

Возможно, я не совсем понятно написал вот это:
Mikle писал(а):Пока звук воспроизводится, в цикле постоянно вызываешь Update

Имеется ввиду не это:
Код: Выделить всё
Do While
  Update....
Loop

А встраивание Update в игровой цикл, например, его можно поставить рядом с заданием видовой камеры.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение longwair » 12.03.2021 (Пт) 2:03

Mikle,
Mikle писал(а):Возможно, я не совсем понятно написал вот это:

Да нет, сразу понял))).
Времени нет, работы навалилось. Посмотрел конечно же класс, вроде как всё понятно. Но ещё не проверял в действии. Может на выходных удастся.

The trick,
Опираясь на твой пример удалось установить звук в выбранной позиции, и перемещения позиции слушателя.
Для примера в Timer запихнул строку:
Код: Выделить всё
dl.SetPosition camPos.X, 10, 10, DS3D_IMMEDIATE
camPos.X = camPos.X + Sin(Timer)

Позиция слушателя, и это работает. Ну думаю изменить позицию проигрываемого звука будет не сложно. Добавляю в тот же Timer строку
Код: Выделить всё
db(0).SetPosition Rnd * 200 - 100, Rnd * 50, Rnd * 200 - 100, DS3D_DEFERRED

И программа выдаёт ошибку. Как заставить двигаться позицию звука?
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение The trick » 12.03.2021 (Пт) 10:24

longwair, что за ошибка? Давай свой проект. У меня все работает.
UA6527P

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение longwair » 12.03.2021 (Пт) 14:35

The trick,
Вот проект.
Перемещение слушателя вычисляется в Timer. Там же и эта строка :
Код: Выделить всё
db(0).SetPosition Rnd * 200 - 100, Rnd * 50, Rnd * 200 - 100, DS3D_DEFERRED

Разблокируй её. Мне нужно перемещать и слушателя и сам звук. И по моему звук тиховат, такое ощущение что громче должен проигрываться.
Так же если можно человеческими словами про это:
Код: Выделить всё
DS3D_DEFERRED
DS3D_IMMEDIATE
dl.CommitDeferredSettings

Для чего они?
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение The trick » 12.03.2021 (Пт) 21:16

У меня ЖД накрылся, так что не могу посмотреть пока. По поводу громкости - там расстояния проверь между источниками звука.
Флаги необходимы чтобы сказать DS когда просчитывать данные. Используй DS3D_DEFERRED когда тебе нужно поменять несколько параметров, после того как все поменяешь вызывай CommitDeferredSettings. Если будешь использовать DS3D_IMMEDIATE то DS будет просчитывать каждый раз когда ты указываешь этот флаг - неэффективно, хотя в твоем случае, его нужно указывать т,к. кроме позиции ты ничего не меняешь.
UA6527P

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение longwair » 14.03.2021 (Вс) 10:54

Mikle,
Запихнул твой класс в свой проект. Сделал всё как ты написал, за исключением DirectSoundBuffer8, он просто DirectSound8.
Попытался запустить а оно сразу же матюкается в Private Sub Class_Terminate(), а именно тут DSB.Stop.
Посмотри проект, где что сделал не правильно. Updateвызываю в SetCam. Инициализирую всё в Mod3DSound, воспроизвожу звук в Form_Load.
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Погите с DirectSound3DBuffer8 в общем с 3D звуком.

Сообщение Mikle » 14.03.2021 (Вс) 13:39

Мне проще с нуля пример сделать.
Вот я прикрутил класс 3D звука к dx8.
Звук исходит от сферы, включается-выключается по Enter.
Можешь взять мой модуль modSound.bas, для каждого звука добавляй туда строки, аналогичные тем, что я сделал для звука Police.
У вас нет доступа для просмотра вложений в этом сообщении.


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList