невозможно получить поток mp3 файла в приложении wp7 - PullRequest
2 голосов
/ 04 января 2012

Я создаю приложение wp7 для игры с использованием Silverlight и XNA. у меня есть mp3-файл с именем "Punch1.mp3" (Build action : resource ), хранящийся в папке с именем "SoundEffects" внутри папки проекта

и я хочу воспроизвести файл, используя этот код

         StreamResourceInfo info;

         Uri myuri = new Uri("/SoundEffects/Punch1.mp3", UriKind.Relative);
         info = App.GetResourceStream (myuri);
         punch1 = SoundEffect.FromStream(info.Stream ) ; 

удар определяется в коде здесь:

public static SoundEffect punch1;

проблема в том, что в третьей строке возникает исключение нулевой ссылки, утверждающее, что информация является нулевой и это правда в режиме отладки, я обнаружил, что информация о потоке ресурсов равна нулю
я думаю, что это потому, что он не может прочитать файл, хотя URI является правильным

enter image description here

Ответы [ 5 ]

2 голосов
/ 04 января 2012

Вы можете попробовать две вещи

- Clean and rebuild the project
- Try appending project name in URI "/PhoneApp1;component/SoundEffects/Punch.mp3"
1 голос
/ 05 января 2012

Поскольку вы все равно используете сборку XNA, вы можете вместо этого использовать TitleContainer.OpenStream (с относительным URI) и установить для сборки аудиофайла Content.

0 голосов
/ 17 января 2012

У меня возникла такая же проблема на моей машине, InvalidOperationException немного сбивает с толку. Все, что мне нужно было сделать, это перекодировать файл wav в соответствии со спецификациями , перечисленными в MSDN .

После того, как я это сделал, все заработало отлично.

0 голосов
/ 08 января 2012

в следующем коде:

     Uri myuri = new Uri("/SoundEffects/Punch1.mp3", UriKind.Relative);
     info = App.GetResourceStream (myuri);
     punch1 = SoundEffect.FromStream(info.Stream ) ; 

SoundEffect.FromStream() ожидает поток волнового файла, а не MP3, как показано здесь: http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.soundeffect.fromstream.aspx.поэтому решение найти mp3> wav конвертер или просто найти другой способ загрузить mp3 в WP7

, учитывая, что это нормальный URI, в обычных случаях не может оценить выражение isfile

0 голосов
/ 06 января 2012

Я согласен с Харисом Хаксаном, что ваша строка URI неверна.

Uri myuri = new Uri("/PhoneBoxing;component/SoundEffects/Punch1.mp3", UriKind.Relative);

Но вы также должны рассмотреть возможность использования файлов содержимого, а не встраивать их в ресурсы, поскольку это может помочь запускать ваше приложение. В зависимости от количества файлов, о которых мы говорим, это может иметь большое значение.

Установите действие сборки для содержимого, и ваш код должен выглядеть следующим образом:

FileStream stream = new FileStream("/SoundEffects/Punch1.mp3", FileMode.Open, FileAccess.Read);
...