Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / SharpDX, SecondarySoundBuffer, Dispose

SharpDX, SecondarySoundBuffer, Dispose

Поделиться
BegginerПользовательwww5 мая 201612:14#0
Всем привет.

Помогите разобраться, если знаете.
Использую SharpDX в своем приложении. Создаю множество экземпляров SecondarySoundBuffer, от чего со временем вылетает сообщение об ошибке в связи с окончанием памяти.
Решил использовать Dispose(), но как определить, что Play() отработал/проиграл?

bykabakПостоялецwww5 мая 201613:36#1
 bool SoundClass::StereoSoundPlaying( UINT Index )
 {
  SoundStereo[Index]->GetStatus(BuffersStatus);

  if ( *BuffersStatus == DSBSTATUS_PLAYING )
    return true;

  return false;
 }

как-то так

BegginerПользовательwww5 мая 201615:28#2
Спасибо. Я пишу на C#.
Попытался найти аналогичный метод получения
BuffersStatus
, но пока кроме
secondarySoundBuffer.Status
ничего не нашел.
В описании
secondarySoundBuffer.Status
написано The GetStatus method retrieves the status of the sound buffer. но где он - для меня загадка))
bykabakПостоялецwww5 мая 201615:45#3
  LPDWORD BuffersStatus;
  vector < IDirectSoundBuffer8* > SoundStereo;

Вот описание

BegginerПользовательwww5 мая 201616:54#4
Нет. Не получилось. Т.е. Получилось, но как-то странно. В режиме отладки жду пока звук отыграет.
Далее проверяю
if (item.Status == (int)SharpDX.DirectSound.BufferStatus.None)
{
   item.Dispose();
}
и статус не меняется сразу. Пока он успевает сменить статус, у меня память забивается.
Хотя чему я удивляюсь, в описании и так это написано
SharpDX.DirectSound.BufferStatus.Playing is set if the buffer is being heard.
Because of latency, a call to Play or Stop might not immediately change the status.

Спасибо bykabak.
Кстати, я только начал осваивать DirectSound/SharpDX может посоветуете что-то другое? или мой выбор в принципе не плохой?

Правка: 5 мая 2016 17:47

bykabakПостоялецwww5 мая 201617:40#5
Begginer,

Я пишу для PC на C++  не профессионально - увлечение.

Я не знаю что посоветовать. Я не знаю что вы хотите. нравится С# и SharpDX - дерзайте.

Главное - что вы в принципе увлечены - не бездельничаете у ТВ.

Почему C# и SharpDX ?

Правка: 5 мая 2016 18:46

BegginerПользовательwww10 июня 201616:16#6
C# - язык, который я знаю.
SharpDX - как я понял, нормальный враппер.

Теперь, пытаюсь освоить Unity3D. Мне интересен именно звук.
Столкнулся с проблемой и в SharpDX и в Unity3D - какой-то звук возникает неприятный при воспроизведении одновременно нескольких звуков.

GLoomПостоялецwww10 июня 201622:42#7
Begginer
Может создать 10 буферов и по кругу их использовать?
BegginerПользовательwww11 июня 201623:39#8
GLoom
Да, так и сделал. Только звук странный получается когда все 10 буферов играют.
Только тут уже вопрос что я больше не знаю, звук или особенности микширования. Скажу вам по секрету - и то, и то у меня барахлит. Но хочется как обычно, путем меньшего сопротивления реализовать мою задумку.
MikleМодераторwww15 июня 201619:25#9
Begginer
А зачем вообще проверять, что буфер ещё играется? Можно просто выдать Stop(), а за ним Dispose().
Stop() не даст ошибки, даже есть буфер уже отыграл или вообще ни разу не запускался, по крайней мере так в нормальном (не Managed) DirectSound.
RadianTORПостоялецwww16 июня 20160:04#10
Begginer
> какой-то звук возникает неприятный при воспроизведении одновременно нескольких
> звуков.
Одинаковых звуков?
BegginerПользовательwww16 июня 201610:11#11
RadianTOR
Да, одинаковых.

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

2001—2017 © GameDev.ru — Разработка игр