Я поместил music.mp3 в ресурсы, и затем я добавил Windows Media Player к ссылкам. Я написал этот код:
WindowsMediaPlayer wmp = new WindowsMediaPlayer();
wmp.URL = "music.mp3";
wmp.controls.play();
Это не работает. Как я могу играть .mp3 файл от ресурсов?
Я сделал это:
WindowsMediaPlayer wmp = new WindowsMediaPlayer();
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("PostGen.Resources.Kalimba.mp3");
using (Stream output = new FileStream ("C:\\temp.mp3", FileMode.Create))
{
byte[] buffer = new byte[32*1024];
int read;
while ( (read= stream.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
}
wmp.URL = "C:\\temp.mp3";
wmp.controls.play();
Мы должны удалить этот временный файл:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
File.Delete("C:\\temp.mp3");
}
Я обернул библиотеку mp3-декодера и сделал ее доступной для разработчиков .net. Вы можете найти его здесь:
http://sourceforge.net/projects/mpg123net/
Включены образцы для преобразования файлов mp3 в PCM и чтения тегов ID3.
Прочтите свой ресурс, преобразуйте его в PCM и выведите в класс waveOut, который доступен как компонент взаимодействия .NET. Нет необходимости создавать временные файлы.
классы waveOut доступны также на sourceforge: