Ejemplo n.º 1
0
 public override void Stop()
 {
     if (Running)
     {
         WinMMNatives.ResetPlaybackDevice(handle);
         Running = false;
     }
 }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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);
        }