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

Windows Mobile | создано: 04.04.2011 | опубликовано: 04.04.2011 | обновлено: 13.01.2024 | просмотров: 5441 | всего комментариев: 1

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

Чтобы Ваше приложение 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();

Вот и всё.

Комментарии к статье (1)

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

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

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

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