Windows Phone 7: Как проиграть звук (SoundEffect)
Windows Mobile | создано: 04.04.2011 | опубликовано: 04.04.2011 | обновлено: 13.01.2024 | просмотров: 5461 | всего комментариев: 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(); то звуки накладываются друг на друга...