リソースに 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 に変換し、interop .NET コンポーネントとして使用できる waveOut クラスに出力します。一時ファイルを作成する必要はありません。
sourceforge でも利用可能な waveOut クラス:
またはTyr this;
var file = $"{Path.GetTempPath()}temp.mp3";
if (!File.Exists(file))
{
using (Stream output = new FileStream(file, FileMode.Create))
{
output.Write(Properties.Resources.Kalimba, 0, Properties.Resources.Kalimba.Length);
}
}
var wmp = new WindowsMediaPlayer { URL = file };
wmp.controls.play();