2016-02-16 1 views
1

В моей игре, я использую советы и код из this article on fire-and-forget sound with NAudio, используя предоставленные AudioPlaybackEngine, CachedSound и CachedSoundSampleProvider классов, которые принимают звуковой файл с диска и загрузить его образцы в a float[] в памяти, играя его, смешивая его с постоянно играющим MixingSampleProvider.аудио файл, загруженная в память имеет 500мс задержки перед игрой

Сейчас этот код используется для воспроизведения звука прыжка, когда мой тест игрока спрайт прыгает в воздухе:

private CachedSound jumpSound; 
... 
jumpSound = new CachedSound(ContentPackageManager.GetAbsoluteFilePath("nsmbwiiJump")); 
... 
AudioPlaybackEngine.Instance.PlaySound(jumpSound); 

Однако звук воспроизводится после 500ms или так задержек, независимо от того, Я играю его с диска или из памяти - и задержка такая же. Что здесь происходит?

+1

Вы проверили содержимое файла, чтобы убедиться, что в начале нет пустых образцов 500 мс? –

+0

В начале звука было 200 мс тишины - удаление его помогло, но между вызовом «PlaySound» и прослушиванием звука все еще есть задержка. –

ответ

3

Существует некоторая латентность из-за продолжительности буфера, используемого WaveOut под капотом. В основном вы играете в один буфер, заполняя другой. Таким образом, вы находитесь за длительностью хотя бы одного буфера. NAudio позволяет настраивать длительность и количество буферов до инициализации устройства WaveOut. Тем не менее, чем ниже вы идете, тем больше вероятность отсева, который будет звучать как глюки в аудио.

+0

Спасибо за ваш ответ! Я проведу несколько разных длительностей/счетчиков буферов, чтобы увидеть сладкое пятно для коротких звуковых эффектов. –

+0

Настройка задержки на 150 мс работала довольно хорошо - почти незаметная задержка и плавный звук. Благодаря! –