Какие рамки для воспроизведения аудио в WPF? - PullRequest
5 голосов
/ 14 февраля 2011

Я знаю, что это может звучать как субъективный вопрос, но мне нужны некоторые обоснованные мнения по этой теме:

В графическом интерфейсе C # / WPF мне нужно воспроизводить короткие волны в ответ на взаимодействие с пользователем.
Спецификации следующие:

  • низкая задержка (немедленное начало воспроизведения)
  • код должен быть собственным C # (.Net 4.0)
  • должен ладить с WPF
  • несколько одновременных воспроизведений
  • нет ограничений на обработку звукового буфера
  • гарантированное будущее (я хочу использовать что-то, что будет иметь поддержку через несколько лет.)
  • модуль звукового плеера должен быть простым классом (= код C #), а не инкапсулированным dll

До сих пор я довольно хорошо ладил с DirectSound (используя Microsoft DirectX SDK), он соответствует всем требованиям, упомянутым выше. Начиная с Visual Studio 2010 (.Net 4.0), управляемый DirectX (MDX) больше не поддерживается и также исчез из последней версии DirectX SDK.

Какие у меня варианты сейчас?

  • XNA кажется мне излишним (слишком большим), поскольку я занимаюсь не разработкой игры, а приложением. См. этот вопрос для получения дополнительной информации.
    Предполагается, что это замена MDX, но я прочитал много страшных историй о его реализации. Или это все сказки?
  • SlimDX может быть вариантом, но это сторонний продукт и опять же довольно большой проект.
  • Есть несколько «небольших» решений, о которых я знаю, каждое из которых имеет свои недостатки:
    • MediaElement (только с WMP10 +)
    • P / Invoke with WinMM
    • PlaySound
    • SoundPlayer
    • MediaPlayer
  • В дикой природе существует множество пользовательских аудиобиблиотек, которые работают более или менее хорошо.
    (NAudio, BASS, waveOut ...)

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

Заранее спасибо!

1 Ответ

7 голосов
/ 14 февраля 2011

Звучит так, будто довольно много опций будут делать то, что вам нужно, но я отвечу на ваши требования для NAudio

с низкой задержкой (немедленное начало воспроизведения)

Аудиотека не запустится "немедленно".NAudio может легко работать с задержками около 50 мс с помощью API WaveOut.Возможно быстрее, если вы используете WASAPI

код должен быть собственным C # (.Net 4.0)

Код NAudio является собственным C # и содержит оболочки для API Windows

должен ладить с WPF

NAudio прекрасно работает с WPF

несколько одновременных воспроизведений

Поддерживается несколько воспроизведений.При желании вы можете создать микшер для одного воспроизведения и микширования различных входов и выходов.

нет ограничений на манипулирование звуковым буфером

Это большое преимущество NAudioнад некоторыми из других вариантов, которые вы упомянули.У вас есть полный доступ к образцу данных, и вы можете манипулировать любым удобным для вас способом.

гарантированное будущее (я хочу использовать что-то, что все еще будет иметь поддержку через несколько лет.)

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

модуль звукового плеера должен быть простым классом (= код C #), а не инкапсулированным dll

Ну, вы можете скопироватькод в свой собственный проект, но есть довольно много вспомогательных классов, так что вам может быть проще использовать DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...