System.InvalidOperationException, используя xnaFramework для воспроизведения звукового эффекта в приложении Windows Phone 7? - PullRequest
0 голосов
/ 04 февраля 2012

Это немного странно, в коде у меня есть один звуковой эффект (всего у меня 24 звуковых эффекта), если я закомментирую (23 эффекта), кроме loadound ("resources / drink.wav", out drink) и закомментирую соответствующий "если" в "private void button_Click" метод, он работает нормально ?? раскомментируйте все звуковые эффекты и затем System.InvalidOperationException? У меня 24 звуковых эффекта, каждый не более 6 секунд. Любые идеи кто-нибудь ... Есть ли ограничение на количество звуковых файлов, которые могут быть использованы, или, возможно, мне нужно очистить поток или что-то?

using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Resources;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Media;

namespace Craggy_Island
{
    public partial class MainPage : PhoneApplicationPage
    {
        // The Resources to play
        private SoundEffect drink;//(plus 23 more effects)//there are 23 more here

        // Flag that indicates if we need to resume Zune playback upon exiting.
        bool resumeMediaPlayerAfterDone = false;

        // Constructor
        public MainPage()
        {
            InitializeComponent();

            // Timer to simulate the XNA game loop (SoundEffect class is from the XNA Framework)
            GameTimer gameTimer = new GameTimer();
            gameTimer.UpdateInterval = TimeSpan.FromMilliseconds(33);

            // Call FrameworkDispatcher.Update to update the XNA Framework internals.
            gameTimer.Update += delegate { try { FrameworkDispatcher.Update(); } catch { } };

            // Start the GameTimer running.
            gameTimer.Start();

            // Prime the pump or we'll get an exception.
            FrameworkDispatcher.Update();

            // Create and load SoundEffect objects.
            LoadSound("Resources/drink.wav", out drink);//there are 23 more here

        }

        private void LoadSound(String SoundFilePath, out SoundEffect Sound)
        {
            // For error checking, assume we'll fail to load the file.
            Sound = null;

            try
            {
                // Holds informations about a file stream.
                StreamResourceInfo SoundFileInfo = App.GetResourceStream(new Uri(SoundFilePath, UriKind.Relative));

                // Create the SoundEffect from the Stream
                Sound = SoundEffect.FromStream(SoundFileInfo.Stream);
            }
            catch (NullReferenceException)
            {
                // Display an error message
                MessageBox.Show("Couldn't load sound " + SoundFilePath);
            }
        }



        private void button_Click(object sender, RoutedEventArgs e)
        {
            Button Current = sender as Button;

            try
            {
                if (Current.Equals(button1))
                    drink.Play();//(other buttons here for other sound effects)



            }
            catch (NullReferenceException)
            {
                MessageBox.Show("Can't play, sound file problem.");
            }

        }
        #region Zune Pause/Resume

        private void ZunePause()
        {
            // Please see the MainPage() constructor above where the GameTimer object is created.
            // This enables the use of the XNA framework MediaPlayer class by pumping the XNA FrameworkDispatcher.

            // Pause the Zune player if it is already playing music.
            if (!MediaPlayer.GameHasControl)
            {
                MediaPlayer.Pause();
                resumeMediaPlayerAfterDone = true;
            }
        }

        private void ZuneResume()
        {
            // If Zune was playing music, resume playback
            if (resumeMediaPlayerAfterDone)
            {
                MediaPlayer.Resume();
            }
        }

        #endregion Zune Pause/Resume

    }
}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2013

Попробуйте изменить свойство «Качество сжатия» в свойстве «Обработчик содержимого» в «Свойствах файла» звукового файла.В моем случае проблема «лучшего» сжатия была проблемой.

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

Если вы создаете приложение XNA WP7, вы должны загружать свои звуки из ContentManager:

  1. Убедитесь, что файлы звуковых эффектов установлены на
    • Сборка: Компиляция
    • Импортер содержимого: аудиофайл WAV - XNA Framework
    • Звуковой эффект контент-процессора - XNA Framework
  2. Загрузка звука из ContentManager

Код:

drink = ContentManager.Load<SoundEffect>("Resources/drink.wav");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...