Windows Phone 7: Как проиграть звук (SoundEffect)

ru-RU | created at: 4/4/2011 | published: 4/4/2011 | updated at: 12/26/2017 | number of views: 4689

Решил добавить в игру "Вопросы и Ответы" звуковое сообщение о правильности выбранного варианта. Вроде бы всё на первый взгляд, но есть некоторые нюансы.

Чтобы Ваше приложение Silverlight на Windows Phone 7 смогло проиграть звук надо проделать следующее:

1. Добавить в проект сборку Microsoft.Xna.Framework.dll

2. Включить использование сборки:

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;

3. Добавить в проект звуковые файлы, например в папку Sounds. Прошу учесть и заменить, что для проигрывания не все форматы файлов подходят. У меня получилось проиграть только wav. А вот файлы формата mp3 и wma проиграть не удалось. Да формат wav поддерживается не полной мере, а только PCM mono или stereo, иначе при попытке использовать звук вы получите то, что и я:

Ensure that the specified stream contains valid PCM mono or stereo wave data.

4. Создаем переменные для хранения звуковых эффектов:

private SoundEffect soundRight;
private SoundEffect soundWrong;

5. Инициализируем в событии Loaded:

Stream r = TitleContainer.OpenStream("Sounds/right.wav");
this.soundRight = SoundEffect.FromStream(r);
FrameworkDispatcher.Update();

Stream s = TitleContainer.OpenStream("Sounds/wrong.wav");
this.soundWrong = SoundEffect.FromStream(s);
FrameworkDispatcher.Update();

6. Ну, а теперь далее по ходу приложения, можно использовать звуки, вызвав соответствующий метод:

 this.soundRight.Play();

или

 this.soundWrong.Play();

Вот и всё.

Comments (1)

2/23/2014 5:16:09 PM Денис

Прошу прощения
А как сделать, чтобы проигрывались несколько звуков по порядку...
То есть классический пример, идет звук "Сейчас" потом звук "одиннадцать" и "часов", само собой все записывается и проигрывается отдельно...

Сейчас сделано так:

Stream stream = TitleContainer.OpenStream("sound/13.wav");
SoundEffect effect = SoundEffect.FromStream(stream);
FrameworkDispatcher.Update(); effect.Play();

Если сделать например еще один эффект, то есть так - effect.Play();effect1.Play(); то звуки накладываются друг на друга...