If your requirements are to play from a MemoryStream
explicitly, then you cant use MediaPlayer
as far as i know. If it suits you, you can use SoundPlayer
though
soundPlayer = new System.Media.SoundPlayer(memoryStream);
soundPlayer.Play();
Or
soundPlayer.Stream.Seek(0, SeekOrigin.Begin);
soundPlayer.Stream.Write(buffer, 0, buffer.Length);
soundPlayer.Play();
Update
MediaPlayer
has a delay, its not designed to play short sounds in that way.
This is totally untested, however, you could try SoundPlayer
in a Task.Run
threadpool or background thread. that way you get your buffering performance gain
byte[] buffer;
Task.Run(() =>
{
soundPlayer = new SoundPlayer()
soundPlayer.Stream.Seek(0, SeekOrigin.Begin);
soundPlayer.Stream.Write(buffer, 0, buffer.Length);
soundPlayer.Play();
// or
soundPlayer = new System.Media.SoundPlayer(memoryStream);
soundPlayer.Play();
});
Or another approach Play multiple sounds using SoundPlayer
// Sound api functions
[DllImport("winmm.dll")]
static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback)
...
private void PlayWorker()
{
StringBuilder sb = new StringBuilder();
mciSendString("open \"" + FileName + "\" alias " + this.TrackName, sb, 0, IntPtr.Zero);
mciSendString("play " + this.TrackName, sb, 0, IntPtr.Zero);
}
Lastly
If the above still aren't suitable, you might be better of at looking at DirectSound
or maybe even nAudio
, or something that has a bit more power in this respect