Как воспроизвести файл wave с помощью Windows Multimedia API (winmm.dll ) в WPF?

#c# #wpf #audio #playback #winmm

#c# #wpf #Аудио #воспроизведение #winmm

Вопрос:

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

Проблемы, с которыми я сталкиваюсь, заключаются в следующем:

  1. Воспроизведение резко останавливается.
  2. Воспроизведение ускоряется или прерывается, или и то, и другое.
  3. Воспроизведение вообще отсутствует.
  4. Метод ‘Stop’ приводит к зависанию системы при Thread.Join вызове.

Я понимаю, что существуют альтернативы воспроизведению звуковых файлов в C #, WPF, но я пытаюсь достичь этого с помощью winmm.dll файлов .wav , потому что это позволит мне * (я надеюсь) создавать специфические функции, такие как: визуализация файлов Wave и фильтры звуковых эффектов.

Я просмотрел ссылку на этот проект кода:

Программирование звуковых эффектов на C#

Это очень проницательно, но я не могу достичь аналогичных результатов в WPF. Я не уверен, связаны ли проблемы со сборкой мусора, которая работает по-разному от Windows Forms до WPF.

Вот мой проект на GitHub:

Wave Player — Base — WPF и Windows Forms

Решение имеет 2 проекта: один — Windows Forms, а другой — WPF. Проект Windows Forms работает нормально, WPF — нет. Однако оба проекта используют одну и ту же winmm.dll логику кода.

Я также нашел эту ссылку Microsoft на ‘Waveform Audio’ :

Microsoft — О форме сигнала аудио

Любая помощь или совет будут оценены.

Комментарии:

1. Я не думаю, что GC отличается, когда выполняется код Winforms или WPF. GC — это просто часть .NET. Однако может быть что-то еще, что имеет некоторый эффект.

2. Я думаю, вам следует создать как можно меньше примеров того, что происходит в WinForms amp; WPF, и опубликовать этот код непосредственно в вашем вопросе. В любом случае, это хорошее упражнение, чтобы попытаться сузить проблему.

3. @UuDdLrLrSs Я сократил его до минимума, насколько мог, но код по-прежнему составляет около 600 строк кода на проект. Итак, Windows Forms — это ~ 600 строк кода, а WPF — это очень похожие ~ 600 строк кода. Можно ли размещать столько кода в самом вопросе?

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