2011-04-25 10 views
4

У меня есть необходимость воспроизводить несколько звуковых эффектов сразу в моем приложении WP7. В настоящее время я работаю с файлами wav, которые занимают около 5 мегабайт, а не 500 кб при кодировании в wma/mp3.Как играть сразу несколько файлов mp3/wma?

Текущая часть кода:

Stream stream = TitleContainer.OpenStream(String.Format("/location/{0}.wav", value) 
SoundEffect effect = SoundEffect.FromStream(stream); 
effect.Play(); 

Это прекрасно работает в цикле, готовя все эффекты, а затем играть в них.

Однако, я бы очень хотел использовать mp3/wma/whatever-codec для уменьшения размера моего xap-файла.

Я попытался использовать MediaElement, но, похоже, вы также не можете использовать его для воспроизведения нескольких файлов. Кроме того, XNA MediaPlayer не может быть создан, и, насколько мне известно, невозможно воспроизвести несколько файлов одновременно.

Единственное решение, которое я вижу слева, что я каким-то образом декодировать mp3 к wav и кормить, что Stream к SoundEffect.

Любые идеи о том, как выполнить множественное воспроизведение? Или предложения о том, как декодировать mp3 до wav?

+0

Я не разработчик мобильных устройств, но могу предположить, что WAV может быть лучшим способом. Декодирование MP3-дисков требует некоторой мощности процессора. Я не знаю, насколько пренебрежимо мало на новых устройствах, но у вас могут быть проблемы при одновременном выполнении многих действий. Вы можете рассмотреть более легкий кодек или декодировать свои MP3-файлы для необработанного несжатого звука в ОЗУ при запуске вашего приложения. – Brad

ответ

3

Об конверсии ... извините - но я не думаю, что в настоящее время есть доступная для декодирования WMA или MP3.

Кроме того, я не думаю, что есть какие-либо реализации MP3, WMA или Ogg-декодеров, которые доступны в чистом коде C# - все они я видел, используя DirectShow или PInvoke - например. см. C# Audio Library.

Я лично ожидаю, что сжатие/декомпрессия аудио/видео будет доступна в какой-то момент в ближайшем будущем в WP7 API, но я не могу догадаться, когда!

Для простого сжатия вы можете попробовать такие вещи, как перенос моно вместо стереофайлов, или доставку 8 бит, а не 16-битных аудиофайлов - их легко конвертировать обратно в 16 бит (с очевидной потерей разрешения) на телефоне ,

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