Всем привет.
Помогите разобраться, если знаете.
Использую SharpDX в своем приложении. Создаю множество экземпляров SecondarySoundBuffer, от чего со временем вылетает сообщение об ошибке в связи с окончанием памяти.
Решил использовать Dispose(), но как определить, что Play() отработал/проиграл?
bool SoundClass::StereoSoundPlaying(UINT Index ) { SoundStereo[Index]->GetStatus( BuffersStatus); if ( *BuffersStatus == DSBSTATUS_PLAYING ) return true; return false; }
как-то так
Спасибо. Я пишу на C#.
Попытался найти аналогичный метод получения
BuffersStatus
, но пока кроме
secondarySoundBuffer.Status
ничего не нашел.
В описании
secondarySoundBuffer.Status
написано The GetStatus method retrieves the status of the sound buffer. но где он - для меня загадка))
LPDWORD BuffersStatus; vector < IDirectSoundBuffer8* > SoundStereo;
Нет. Не получилось. Т.е. Получилось, но как-то странно. В режиме отладки жду пока звук отыграет.
Далее проверяю
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 может посоветуете что-то другое? или мой выбор в принципе не плохой?
Begginer,
Я пишу для PC на C++ не профессионально - увлечение.
Я не знаю что посоветовать. Я не знаю что вы хотите. нравится С# и SharpDX - дерзайте.
Главное - что вы в принципе увлечены - не бездельничаете у ТВ.
Почему C# и SharpDX ?
C# - язык, который я знаю.
SharpDX - как я понял, нормальный враппер.
Теперь, пытаюсь освоить Unity3D. Мне интересен именно звук.
Столкнулся с проблемой и в SharpDX и в Unity3D - какой-то звук возникает неприятный при воспроизведении одновременно нескольких звуков.
Begginer
Может создать 10 буферов и по кругу их использовать?
GLoom
Да, так и сделал. Только звук странный получается когда все 10 буферов играют.
Только тут уже вопрос что я больше не знаю, звук или особенности микширования. Скажу вам по секрету - и то, и то у меня барахлит. Но хочется как обычно, путем меньшего сопротивления реализовать мою задумку.
Begginer
А зачем вообще проверять, что буфер ещё играется? Можно просто выдать Stop(), а за ним Dispose().
Stop() не даст ошибки, даже есть буфер уже отыграл или вообще ни разу не запускался, по крайней мере так в нормальном (не Managed) DirectSound.
Begginer
> какой-то звук возникает неприятный при воспроизведении одновременно нескольких
> звуков.
Одинаковых звуков?
RadianTOR
Да, одинаковых.
Тема в архиве.