При добавлении аудиофайлов в проект нам надо учитывать поддержку данного типа файлов на целевой платформе, особенно, если мы создаем кроссплатформенное приложение. Одни системы могут поддерживать один типы файлов, которые другие могут не поддерживать. И в этой связи проще использовать относительно универсальный формат - mp3.
Общий механизм добавления аудиофайлов в проект аналогичен добавлению файлов изображений. Перейдем в проекте папку Content и затем нажмем на Content.mgcb. Далее в открывшемся окне нажмем правой кнопкой мыши на Content и выберем в контекстном меню Add->Existing Item:
Выберем какой-либо файл mp3. И затем в проект будет добавлен аудиофайл:
Теперь вначале рассмотрим, как мы можем запустить проигрывание мелодии при запуске игры на примере простейшего кода:
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; namespace Game1 { public class Game1 : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Song song; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); // загружаем ранее добавленный ресурс audio1 song = Content.Load<Song>("audio1"); // начинаем проигрывание мелодии MediaPlayer.Play(song); // повторять после завершения MediaPlayer.IsRepeating = true; // прикрепляем обработчик изменения состояния проигрывания мелодии MediaPlayer.MediaStateChanged += MediaPlayer_MediaStateChanged; } void MediaPlayer_MediaStateChanged(object sender, System.EventArgs e) { MediaPlayer.Volume -= 0.1f; } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { KeyboardState keyboardState = Keyboard.GetState(); if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || keyboardState.IsKeyDown(Keys.Escape)) Exit(); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); } } }
Для проигрывания нам необходимо добавить пространство имен Microsoft.Xna.Framework.Media.
Сама мелодия будет представлять объект Song. Этот ресурс загружается в приложение аналогично графическим ресурсам:
song = Content.Load<Song>("audio1");
Также для проигрывания аудио необходим объект класса MediaPlayer. Он предоставляет ряд методов, позволяющих управлять воспроизведением:
Play()
: начать воспроизведение с начала
Pause()
: приостановить воспроизведение
Resume()
: возобновить воспроизведение
Stop()
: остановить воспроизведение
В дополнение к методам данный класс предоставляет также ряд свойств, которые также могут использоваться. В данном случае мы используем два свойства: IsRepeating указывает, надо ли повторять мелодию после ее окончания, и Volume хранит текущий уровень звука (от 0.0 до 1.0).
И также здесь мы можем обработать событие MediaStateChanged класса MediaPlayer, которое возникает при событиях объекта, например, когда заканчивается воспроизведение. В данном случае в обработчике просто уменьшается уровень громкости.