Я ни хочу распространять любые исполняемые файлы с моим приложением, ни зависят от P/Invoke, как проект должен работать по крайней мере на Windows, и Linux , Я в порядке с набором .Net сборок, если они лицензионно совместимы с GPL.
К сожалению, его будет невозможно избежать распространения двоичных файлов или избежать P/Invoke. Библиотеки классов .net в любом случае используют P/Invoke, управляемый код должен в какой-то момент взаимодействовать с неуправляемым API операционной системы, чтобы что-то сделать.
Преобразование файла OGG в PCM должно быть возможным в управляемом коде, но из-за отсутствия встроенной поддержки аудио.сеть, вы на самом деле есть 3 варианта:
Вызов внешней программы для воспроизведения звука (как предлагалось ранее)
P/Invoke модуль C для воспроизведения звука
P/Вызовите OS API для воспроизведения звука.
(4.) Если вы используете только этот код в окнах, возможно, вы просто используете 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 с вашим приложением, чтобы оно работало при распространении, но это, как я уже объяснял ранее, неизбежно.
Я предполагаю, что это будет работать * только *, если у пользователя установлен MP3-плеер, правильно? – 2008-09-06 20:14:30
Это будет «работать», запустив приложение по умолчанию для расширения MP3, если оно определено на компьютере. Я не знаю ответа (или я бы ответил на него), но я постараюсь найти лучший способ, особенно * если интероперабельность - это ваша цель. – 2008-09-24 23:40:22
Вышеупомянутые комментарии больше не применяются к обновленному ответу. – skolima 2012-03-05 16:46:01