Я тоже не хочу распространять
двоичные файлы с моим приложением ни
зависит от P / Invoke, так как проект
должен работать как минимум на Windows и
Linux. Я в порядке с комплектацией .Net
сборки, пока они
совместим с лицензией GPL.
К сожалению, невозможно избежать распространения двоичных файлов или избежать P / Invoke. В любом случае библиотеки классов .net используют P / Invoke, управляемый код должен в какой-то момент связываться с API-интерфейсом неуправляемой операционной системы, чтобы что-либо делать.
Преобразование файла OGG в PCM должно быть возможным в управляемом коде, но, поскольку в .net отсутствует встроенная поддержка звука, у вас действительно есть 3 варианта:
Вызовите внешнюю программу для воспроизведения звука (как предлагалось ранее)
P / Вызов модуля C для воспроизведения звука
P / Вызывать API-интерфейсы ОС для воспроизведения звука.
(4.) Если вы запускаете этот код только в Windows, вы, вероятно, можете просто использовать DirectShow.
P / Invoke может использоваться кросс-платформенным способом
http://www.mono -project.com / Interop_with_Native_Libraries # Library_Names
Когда у вас есть данные PCM (с использованием OGG C Lib или управляемого кода, что-то вроде этого http://www.robburke.net/mle/mp3sharp/, конечно, есть проблемы с лицензированием MP3), вам понадобится способ их воспроизведения, к сожалению .net не предоставляет прямой оценки вашей звуковой карты или методов воспроизведения потокового аудио. Вы можете преобразовать файлы ogg в PCM при запуске, а затем использовать System.Media.SoundPlayer для воспроизведения сгенерированных файлов wav. Текущий метод, который предлагает Microsoft, использует P / Invoke для доступа к API воспроизведения звука в ОС http://msdn.microsoft.com/en-us/library/ms229685.aspx
Кроссплатформенный API для воспроизведения звука PCM - это OpenAL, и вы должны иметь возможность воспроизводить звук (PCM), используя привязки c # для OpenAL на www.taoframework.com, к сожалению, вам нужно будет скопировать несколько DLL и .so файлы с вашим приложением, чтобы оно работало при распространении, но это, как я объяснил ранее, неизбежно.