Windows Phone 7 Несколько звуков Lag - PullRequest
1 голос
/ 23 февраля 2011

Я делаю драм-машину. Из того, что я прочитал, похоже, что класс XNA SoundEffect работает на основе таймера, который вызывает заметное отставание и останавливает сглаживание ритма.

Я пытался использовать MediaElement, пока не обнаружил, что вы не можете воспроизводить несколько звуков одновременно.

Есть ли обходные пути для этого? Звуки обрабатываются таймером и должны воспроизводиться мгновенно.

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Я немного использовал в игре класс XNA SoundEffect и не видел никаких задержек при реагировании на пользовательские события - например, нажатия кнопок - особенно когда звуковой эффект предварительно загружен из ресурсов.

Класс XNA предназначен для использования со звуковыми эффектами, поэтому он должен быть идеальным для удара одного драм-машины.

Если затем вы видите проблемы с синхронизацией в IsLooping, то, я думаю, вам придется реализовать собственный таймер для запуска новых экземпляров, но я бы посоветовал сначала попробовать его.

Надеюсь, что поможет

0 голосов
/ 24 февраля 2011

Я использовал звук в своем приложении и использовал код из примера, приведенного на веб-сайте примеров кода MSDN: http://msdn.microsoft.com/en-us/library/ff431744(v=vs.92).aspx

Похоже, они обновляют таймер каждые 50 мс. Также обратите внимание, что переменные SoundEffect (coyoteSound и birdSound) являются частными элементами данных, где они загружаются только один раз. Обработчик событий по нажатию кнопки просто вызывает SoundEffect.play().

public MainPage()
{
    InitializeComponent();

    LoadSound("Resources/NightAmbientCreatureOneShot_01.wav", out coyoteSound);
    LoadSound("Resources/AfternoonAmbientBirdOneShot_09.wav", out birdSound);
    LoadSoundInstance("Resources/NightAmbienceSimple_01.wav", out ambienceSound, out ambienceInstance);

    // Set the volume a little lower than full so it becomes the background.
    ambienceInstance.Volume = 0.8f;

    // Turn on looping so it runs continually in the background.
    ambienceInstance.IsLooped = true;

    // Timer to simulate the XNA game loop (SoundEffect classes are from the XNA Framework)
    DispatcherTimer XnaDispatchTimer = new DispatcherTimer();
    XnaDispatchTimer.Interval = TimeSpan.FromMilliseconds(50);

    // Call FrameworkDispatcher.Update to update the XNA Framework internals.
    XnaDispatchTimer.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };

    // Start the DispatchTimer running.
    XnaDispatchTimer.Start();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...