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

SharpDX, SecondarySoundBuffer, Dispose

#0
12:14, 5 мая 2016

Всем привет.

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

#1
13:36, 5 мая 2016
 bool SoundClass::StereoSoundPlaying( UINT Index )
 {
  SoundStereo[Index]->GetStatus(BuffersStatus);

  if ( *BuffersStatus == DSBSTATUS_PLAYING )
    return true;

  return false;
 }

как-то так

#2
15:28, 5 мая 2016

Спасибо. Я пишу на C#.
Попытался найти аналогичный метод получения

BuffersStatus

, но пока кроме

secondarySoundBuffer.Status

ничего не нашел.
В описании

secondarySoundBuffer.Status

написано The GetStatus method retrieves the status of the sound buffer. но где он - для меня загадка))

#3
15:45, 5 мая 2016
  LPDWORD BuffersStatus;
  vector < IDirectSoundBuffer8* > SoundStereo;

Вот описание

#4
16:54, 5 мая 2016

Нет. Не получилось. Т.е. Получилось, но как-то странно. В режиме отладки жду пока звук отыграет.
Далее проверяю

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
17:40, 5 мая 2016

Begginer,

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

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

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

Почему C# и SharpDX ?

#6
16:16, 10 июня 2016

C# - язык, который я знаю.
SharpDX - как я понял, нормальный враппер.

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

#7
22:42, 10 июня 2016

Begginer
Может создать 10 буферов и по кругу их использовать?

#8
23:39, 11 июня 2016

GLoom
Да, так и сделал. Только звук странный получается когда все 10 буферов играют.
Только тут уже вопрос что я больше не знаю, звук или особенности микширования. Скажу вам по секрету - и то, и то у меня барахлит. Но хочется как обычно, путем меньшего сопротивления реализовать мою задумку.

#9
19:25, 15 июня 2016

Begginer
А зачем вообще проверять, что буфер ещё играется? Можно просто выдать Stop(), а за ним Dispose().
Stop() не даст ошибки, даже есть буфер уже отыграл или вообще ни разу не запускался, по крайней мере так в нормальном (не Managed) DirectSound.

#10
0:04, 16 июня 2016

Begginer
> какой-то звук возникает неприятный при воспроизведении одновременно нескольких
> звуков.
Одинаковых звуков?

#11
10:11, 16 июня 2016

RadianTOR
Да, одинаковых.

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

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