Windows-Phone-7: проверьте, воспроизводится ли экземпляр soundEffectInstance - PullRequest
2 голосов
/ 14 августа 2011

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

Я пробовал это, но я неправильно использую метод SoundState, так как он не работает:

public void playGenericSound(string fileName)
{
    if (playingSound.State != SoundState.Playing)
    {
        using (var stream = TitleContainer.OpenStream(fileName))
        {
            var effect = SoundEffect.FromStream(stream);
            playingSound = effect.CreateInstance();
            FrameworkDispatcher.Update();
            playingSound.Play();
        }
    }
    else
    {
        playingSound.Stop();
    }
}

Есть идеи? Спасибо заранее! Будет.

Ответы [ 2 ]

2 голосов
/ 14 августа 2011

Для приложения XNA:

В методе update () проверьте поле playingSound.State вашего звукового эффекта и, если воспроизведение остановилось, воспроизведите другое.

Для Silverlight:

Эта часть немного сложна, поскольку SoundEffectInstance был разработан как часть XNA. Например, вы можете создать свой собственный цикл с помощью таймера, а внутри обработчика событий добавить логику проверки состояния.

Вторая идея состоит в том, чтобы использовать таймер с интервалом, установленным на продолжительность воспроизводимого вами звука, и добавить флаг, подобный bool isPlaying . При первом воспроизведении установите флаг isPlaying на true и запустите таймер. В обработчике таймера установите флаг isPlaying на false . Каждый раз, когда вы нажимаете кнопку, установите флажок isPlaying . Другими словами, создайте свою собственную логику игрового состояния.

Вы можете комбинировать эти методы.

0 голосов
/ 23 февраля 2012

Я думал, что опубликую то, что я сделал, в программе, над которой я сейчас работаю, для кого-то.

// Play Audio File and allow stop
        if (new Rectangle(rV.X, rV.Y, rect.Width, rect.Height).Contains(mosX, mosY) && mouseClick)
        {
            if (driversmeeting.State != SoundState.Playing && !globalAudioPlaying)
            {
                globalAudioPlaying = true;
                driversmeeting.Play();
            }
            else if (driversmeeting.State == SoundState.Playing)
            {
                driversmeeting.Stop();
                globalAudioPlaying = false;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...