MonoでSystem.Media.SoundPlayerを使った音再生ができないらしい
「MonoでSystem.Media.SoundPlayerを使った音再生ができない」らしい。ある情報筋から。
という事で簡単なコードを書いてみませう。
コード1
using System; using System.Media; public class Program { public static void Main() { Console.WriteLine( "Play start" ); string path = @"016.wav"; SoundPlayer player = new SoundPlayer( path ); player.Play(); Console.WriteLine( "Play end" ); } }
コード2
using System; using System.Media; using System.IO; public class Program { public static void Main() { Console.WriteLine( "Play start" ); string path = @"/Users/inohiro/Projects/mono/TerminalApplications/sound_mono/016.wav"; SoundPlayer player = new SoundPlayer( new FileStream( path, FileMode.Open, FileAccess.Read, FileShare.Read ) ); player.Play(); Console.WriteLine( "Play end" ); } }
わかったこと
- 再生できなかった(特に例外などが発生するわけでもない)。
- Playメソッドを呼んだ後にコンソール/ターミナルに「Play end」の文字列を出力する様にしているが、音が鳴らない状態(Mac OS X)ではすぐに表示された
- 音が鳴らないのではなく、音が再生されようとしていないのでは(あれ、このPlayメソッドはメインスレッドをロックしちゃうよね)。
- SoundPlayerはPlayメソッドが呼ばれてから音ファイルの読み込みを開始する
- Monoのコードをちらっとみたが、「/mono-2.4/mcs/class/System/System.Media」に「Win32SoundPlayer.cs」なるものがあり、SoundPlayerクラスのLoadメソッドなどでWin32APIの「PlaySound関数」を使ってるとか使ってないとか(P/Invokeですね)のチェックなどをしているようだ
- じゃあ「Win32SoundPlayerクラス」を使えば音が鳴るんじゃない?
- まだやってない