LINUX.ORG.RU
 
Zhbert

[mono] Воспроизведение музыки


0

1

Под виндой начинал писать один проект на C#. Одной из основных его задач является, как ни странно это звучит, проигрывание файлов mp3. Поскольку я так и не нагуглил как проиграть музыку этим ихним .NET, был заюзан рецепт с использованием Windows Media Player'а, а точнее его библиотеки wmp.dll. Все это использование сводилось к тому, что в настройках проекта ставилась одна галочка "Юзать такую-то либу" и все, музыка проигрывалась одной простой строчкой кода.

В линуксе, понятное дело, либы этой нет. Сейчас решил дописать проект, и, что логично, выбрал под это дело mono. Открыл в MonoDevelop решение, попытался собрать - оно ругается на эту либу, что вполне логично.

Посему возник вопрос к спецам по mono - как кошерно проигрывать музыкальные файлы на mono? Возможно ли сделать так, чтоб этот мой код потом без особых плясок с бубном взлетел в винде и дотнете?


[#]  
iBliss

> Возможно ли сделать так, чтоб этот мой код потом без особых плясок с бубном взлетел в винде и дотнете?

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

В принципе gstreamer уже посоветовали, но имхо это мегаблотварьная затея. Лучше 2билд-конфигурации, а чтоб с линухом сильно не морочится - в кутях кажется есть и дотнетовские биндинги и абстракция для аудио.

* ()
[#]  

практика показала, что самый простой, удобный и надежный способ проиграть mp3-файл в linux -- аналог system("mpg123 file.mp3") в вашем любимом языке программирования.

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

под винду он, кажется, тоже есть.

ей-богу, если нужно именно проиграть mp3 (в т.ч. по http, в т.ч. shoutcast/icecast поток), дальше mpg123 ходить не надо.

anonymous ()
[#] Ответ на: комментарий от tensai_cirno 13.11.2011 18:06:21  

> P/Invoke запрещает религия

вы меня заинтриговали! продолжайте. напишите вызов p/invoke целиком, пожалуйста. или хотя бы назовите библиотеку и функцию в ней, которую вы предлагаете вызывать с помощью p/invoke.

> порция свежего карри в тарелке

не люблю острое.

anonymous ()
[#]  
note173

Можно написать отдельую маленькую нативную библиотеку, которая будет заранее собрана под все нужные платформы, а из моно определять текущую платформу, грузить нужную библиотеку и использовать.

*** ()
[#] Ответ на: комментарий от tensai_cirno 13.11.2011 18:57:47  

> Читайте

прочел. давно. вчера даже перечитал, прежде чем писать.

я повторю свою просьбу. приведите мне вызов p/invoke с фунциональностью, аналогичной предложенному мной способу воспроизведения.

а заодно потрудитесь объяснить, чем вам способ концептуально лучше, надежнее, гибче и правильнее.

(например, очень легко сделать путь к программе проигрывания опцией времени исполнения, а учитывая универсальность интерфейса -- "$progname $file" -- пользователь может использовать любой удобный ему способ воспроизведения -- в худшем случае написав однострочник на шелле, который наше приложение и будет запускать).

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

anonymous ()