public override void Stop() { if (Running) { WinMMNatives.ResetPlaybackDevice(handle); Running = false; } }
public WavePlayer(DataSource dataSource) { this.dataSource = dataSource; var device = FindBestDevice(); uint samplesPerSec = (this is ModPlayer) ? 44100 : 8000u; // sfx uses 8kHz, mod uses 44.1kHz if (device == -1 || !WinMMNatives.OpenPlaybackDevice(out handle, (uint)device, samplesPerSec, 1)) { throw new ExceptionAudio("Unable to create wave output."); } Available = true; }
public MidiPlayer(DataSource dataSource) { this.dataSource = dataSource; var device = FindBestDevice(); if (device == -1 || !WinMMNatives.OpenPlaybackDevice(out handle, (uint)device)) { throw new ExceptionAudio("Unable to create midi output."); } Available = true; Init(); }
public void SetVolume(float volume) { if (volume < 0.0f) { volume = 0.0f; } if (volume > 1.0f) { volume = 1.0f; } uint value = (uint)Misc.Round(volume * 0xffff); value |= (value << 16); // copy left volume to right volume WinMMNatives.SetVolume(handle, value); }
protected virtual void Dispose(bool disposing) { if (!disposed) { if (handle != null && handle != IntPtr.Zero) { if (wave != null) { wave.Close(); wave = null; } WinMMNatives.ResetPlaybackDevice(handle); WinMMNatives.ClosePlaybackDevice(handle); handle = IntPtr.Zero; } disposed = true; } }
int FindBestDevice() { int count = WinMMNatives.GetPlaybackDeviceCount(); if (count == 0) { return(-1); } for (uint i = 0; i < count; ++i) { var caps = WinMMNatives.GetPlaybackDeviceCapabilities(i); if (caps == null) { continue; } const int WAVE_FORMAT_4M16 = 0x400; const int WAVECAPS_VOLUME = 0x4; // we need support for 44.1kHz 16 bit mono if ((caps.Value.Formats & WAVE_FORMAT_4M16) == 0) { continue; } // we need volume support if ((caps.Value.Support & WAVECAPS_VOLUME) != 0) { return((int)i); } } return(-1); }