WP7 проигрывает много сжатых (mp3, wma и т. Д.) Аудио файлов одновременно / динамически - PullRequest
4 голосов
/ 11 августа 2011

По размерам мне нужно связать приложение WP7 со сжатым аудио (mp3, wma и т. Д.).Как я могу воспроизводить их свободно / одновременно?

Платформа XNA поддерживает только файлы WAV, поэтому, если где-нибудь не будет чистой библиотеки управляемого кода C #, где можно распаковать mp3 / wma / ogg (?) На лету, следующаявариант будет ...

MediaElement.Но я не получаю хороших результатов с MediaElement.Кажется, вам нужно добавить MediaElement специально как тег в xaml, и вы не можете использовать несколько экземпляров (несколько тегов).Как только я играю на одном MediaElement, я не могу воспроизвести другой MediaElement на той же странице.Я не нахожу ничего об ограничении в ссылке (ссылка очень пуста).Я также пытался динамически создавать объекты MediaElement, но это вообще не похоже на действительность, или я просто не могу заставить его воспроизводить файлы вообще.

Ответы [ 4 ]

3 голосов
/ 11 августа 2011

Используйте встроенное сжатие звукового эффекта конвейера содержимого XNA!

Значением по умолчанию для типа содержимого SoundEffect является «Наилучшее» качество сжатия (которое на самом деле кажется, не будь сжатия вообще).Установите качество сжатия на «Низкое», и вы получите намного меньший файл.Или «Средний» для хорошего баланса между размером и качеством.

Чтобы изменить этот параметр, выберите файл .wav в обозревателе решений, нажмите F4, чтобы открыть окно свойств, разверните «Обработчик контента»узел и измените отображаемую настройку качества сжатия.


Вот инструкции со снимками экрана:

Создание нового игрового проекта WPNA XNA (или иным образом получение проекта содержимого XNA)

Create Project

Добавление файла wav в проект контента:

Add sound effect

Wav File Added

Нажмите F4с файлом wav, выбранным в обозревателе решений для вызова окна свойств.

Content Properties

Разверните узел «Обработчик содержимого» и измените качество сжатия до требуемого значения.

Set Compression

Настройка «Наилучший» не дает сжатия (необработанный сигнал), настройки «Средний» и «Низкий» дают файл намного меньшего размера.

2 голосов
/ 16 сентября 2011
using Microsoft.Xna.Framework.Media;

void PlaySound(string pathToMp3) {
   Song song = Song.FromUri("name", new Uri(pathToMp3, UriKind.Relative));
   Microsoft.Xna.Framework.FrameworkDispatcher.Update();
   MediaPlayer.Play(song);
}
2 голосов
/ 11 августа 2011

По моему опыту, в настоящее время нет хорошего решения для этого на WP7. Либо вы используете wavs с XNA и увеличиваете размер xap, либо используете mp3 с очень ограниченным функционалом MediaElement, компрометируя то, что вы можете реализовать с ним.

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

В одном из моих приложений я, наконец, решил использовать комбинацию wav + XNA, поиграв с разными вариантами.

1 голос
/ 11 августа 2011

Вы можете использовать MediaElement и установить источник в mp3, но это нельзя изменить из кода, как в.

MediaElement me = sender as MediaElement;
me.Source = new Uri(

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

Вы также можете объединить эти файлы в один и воспроизвести их в определенном месте, например так.

me.Position = new TimeSpan(0, 0, 0, 0, 1);
me.Play();
...