Войти
ПрограммированиеФорумЗвук

Быстрый звук в Delphi

#0
17:42, 9 дек. 2012

Доброго времени суток,

Я пишу на Delphi7 малобюджетную игру. Нужен быстрый звук, чтобы озвучить, например, треск пулемёта без ущерба для FPS. Я попробовал несколько вариантов:

mciSendString(): очень медленно, и я не знаю как запустить второй звук до того, как первый проиграет до конца (асинхронно);

PlaySound(): быстрее и асинхронно, но для моей игры явно медленно

MediaPlayer1.Play: очень медленно и не асинхронно

[SQUALL] SQUALL_Sample_Play(): вылетает Access violation, не разобрался как это исправить

[Delphix] dxwavelist1.items[0].play(): быстрее чем PlaySound, но я не уверен, что скорость будет достаточная для моей игры. Если звук запускается в каждом такте, FPS снижается с 50 до 25, и скорость игры становится менее равномерной (то быстрее, то медленнее). Правда, честно говоря, я пишу на древнем компьютере (1.6 ГГц 512 МБ), может быть всё дело в этом. На более новом компьютере задержек я пока не заметил, но всё равно побаиваюсь, т.к. моя игра будет онлайновая (player vs player), каждый такт должен быть синхронизирован на двух компьютерах. Т.е. у меня выбор – либо оставить всё как есть, либо искать замену DelphiX. Может быть, скорость станет намного выше, если напрямую работать с DirectSound?


#1
18:41, 9 дек. 2012

Записать треск пулемёта в течение например 1 секунды, плюс минус, чтоб в цикл нормально звук сложился.
Играть зацикленно любым удобным способом, останавливать звук когда игрок отпустил кнопку выстрела.

#2
19:33, 9 дек. 2012

Почему бы не заюзать OpenAL.

#3
20:05, 9 дек. 2012

каждый такт? пулемет стреляет 50 раз в секунду? или я не понял реализацию.
может дело в реализации, тоесть в твоем коде?

#4
21:23, 9 дек. 2012

поищи нормальные звуковые движки
бесплатные или условно платные

#5
21:39, 9 дек. 2012

radiantor
> каждый такт? пулемет стреляет 50 раз в секунду?
  Ну да, и если каждый последующий выстрел заглушает предыдущий, общий звук выходит нормальный.

#6
21:39, 9 дек. 2012

DevilDevil
> поищи нормальные звуковые движки
Подскажите как их гуглить.

#7
22:09, 9 дек. 2012

Alexander K
> Почему бы не заюзать OpenAL.

Но я думаю тебе это не поможет :D

#8
22:56, 9 дек. 2012

Don Gorason
> radiantor
> > каждый такт? пулемет стреляет 50 раз в секунду?
> Ну да, и если каждый последующий выстрел заглушает предыдущий, общий звук
> выходит нормальный.
Пробуй трескать реже, как kvakvs писал.
К примеру в CS, звук следующего выстрела (при стрельбе очередью) не перекрывает предидущий, а используется зацикленный семпл и соответсвующим образом проигрывается. Для одиночных выстрелов отдельный семпл с хвостом.

#9
23:08, 9 дек. 2012

Don Gorason
Я юзал DirectSound - где-то находил модули для DirectX, потом нагуглил код на С++, перевел его на Delphi и в итоге все заработало.
Модули DX можно взять здесь
Код свой не рискну выложить, потому что он очень G-Style

Кстати, я на Delphi сделал свой первый (и пока единственный) проект.  Для графики использовал OpenGL, для звука и управления DirectX.
#10
0:57, 10 дек. 2012

ну самые распространённый наверное это BASS
ищи BASS Delphi

ПрограммированиеФорумЗвук

Тема в архиве.