コード例 #1
0
        public static WaveOutCaps GetDevice(int device)
        {
            WaveOutCaps caps = new WaveOutCaps();

            MMInterops.waveOutGetDevCaps((uint)device, out caps, (uint)Marshal.SizeOf(caps));
            return(caps);
        }
コード例 #2
0
        protected virtual void OpenWaveDevice(int device)
        {
            _callback = new MMInterops.WaveCallback(Callback);
            var result = MMInterops.waveInOpen(out handle, (IntPtr)device, _waveFormat, _callback, IntPtr.Zero, MMInterops.WaveInOutOpenFlags.CALLBACK_FUNCTION);

            MmException.Try(result, "waveInOpen");
        }
コード例 #3
0
 public void Resume()
 {
     if (_playbackState == SoundOut.PlaybackState.Paused)
     {
         lock (_lockObj)
         {
             Debug.WriteLine(MMInterops.waveOutRestart(_hWaveOut),
                             "waveOutRestart");
         }
         _playbackState = SoundOut.PlaybackState.Playing;
     }
 }
コード例 #4
0
 public void Pause()
 {
     if (_playbackState == SoundOut.PlaybackState.Playing)
     {
         lock (_lockObj)
         {
             Debug.WriteLine(MMInterops.waveOutPause(_hWaveOut),
                             "waveOutPause");
         }
         _playbackState = SoundOut.PlaybackState.Paused;
     }
 }
コード例 #5
0
        protected override IntPtr CreateWaveOut()
        {
            IntPtr ptr;

            lock (_lockObj)
            {
                MmException.Try(MMInterops.waveOutOpenWithWindow(out ptr, (IntPtr)Device, WaveSource.WaveFormat, WindowHandle,
                                                                 IntPtr.Zero, MMInterops.WaveInOutOpenFlags.CALLBACK_WINDOW),
                                "waveOutOpenWithWindow <-- waveOutOpen");
            }
            return(ptr);
        }
コード例 #6
0
        protected virtual IntPtr CreateWaveOut()
        {
            IntPtr handle;

            MmException.Try(MMInterops.waveOutOpen(out handle,
                                                   (IntPtr)_device,
                                                   _source.WaveFormat,
                                                   callback,
                                                   IntPtr.Zero,
                                                   MMInterops.WaveInOutOpenFlags.CALLBACK_FUNCTION), "waveOutOpen");

            return(handle);
        }
コード例 #7
0
ファイル: WaveInCaps.cs プロジェクト: yazici/AudioLab
        public static           WaveInCaps[] GetCaps()
        {
            uint count = (uint)MMInterops.waveInGetNumDevs();

            WaveInCaps[] caps = new WaveInCaps[count];
            for (uint i = 0; i < count; i++)
            {
                WaveInCaps c;
                var        result = MMInterops.waveInGetDevCaps(i, out c, (uint)Marshal.SizeOf(typeof(WaveInCaps)));
                MmException.Try(result, "waveInGetDevCaps");
                caps[i] = c;
            }
            return(caps);
        }
コード例 #8
0
        public void Stop()
        {
            if (_playbackState != SoundOut.PlaybackState.Stopped)
            {
                _playbackState = SoundOut.PlaybackState.Stopped;
                lock (_lockObj)
                {
                    var result = MMInterops.waveOutReset(_hWaveOut);
                    Debug.WriteLine(
                        result,
                        "waveOutReset"
                        );
                    MmException.Try(result, "waveOutReset");
                }

                RaiseStopped();
            }
        }
コード例 #9
0
        public void Start()
        {
            if (!stopped)
            {
                throw new InvalidOperationException("Recording has to be stopped");
            }
            if (Handle == IntPtr.Zero)
            {
                throw new InvalidOperationException("Not initialized");
            }

            ResetBuffers();
            var result = MMInterops.waveInStart(Handle);

            MmException.Try(result, "waveInStart");
            stopped = false;

            OnStarted();
        }
コード例 #10
0
 public void Stop()
 {
     if (!stopped)
     {
         stopped = true;
         var result = MMInterops.waveInStop(Handle);
         MmException.Try(result, "waveInStop");
         OnStopping();
         foreach (var buffer in _buffers)
         {
             if (buffer.Done)
             {
                 RaiseDataAvailable(buffer);
             }
         }
         //RaiseStopped();
         OnStopped();
     }
 }
コード例 #11
0
        private void CloseWaveDevice()
        {
            if (Handle == IntPtr.Zero)
            {
                return;
            }
            var result = MMInterops.waveInReset(Handle);

            MmException.Try(result, "waveInReset");
            if (_buffers != null)
            {
                for (int i = 0; i < _buffers.Length; i++)
                {
                    _buffers[i].Dispose();
                }
            }
            result = MMInterops.waveInClose(Handle);
            MmException.Try(result, "waveInClose");
            handle = IntPtr.Zero;
        }
コード例 #12
0
        public virtual void Dispose(bool disposing)
        {
            if (_hWaveOut == IntPtr.Zero)
            {
                return;
            }

            Stop();
            lock (_lockObj)
            {
                if (_buffers != null)
                {
                    foreach (var buffer in _buffers)
                    {
                        buffer.Dispose();
                    }
                }
                MmException.Try(MMInterops.waveOutClose(_hWaveOut), "waveOutClose");
                _hWaveOut = IntPtr.Zero;
            }

            Debug.WriteLine("WaveOut disposed.");
        }
コード例 #13
0
ファイル: WaveInWindow.cs プロジェクト: yazici/AudioLab
        protected override void OpenWaveDevice(int device)
        {
            var result = MMInterops.waveInOpenWithWindow(out handle, (IntPtr)Device, WaveFormat, WindowHandle, IntPtr.Zero, MMInterops.WaveInOutOpenFlags.CALLBACK_WINDOW);

            MmException.Try(result, "waveInOpen");
        }
コード例 #14
0
        protected override void OpenWaveDevice(int device)
        {
            var result = MMInterops.waveInOpenWithWindow(out handle, (IntPtr)device, WaveFormat, _event.SafeWaitHandle.DangerousGetHandle(), IntPtr.Zero, MMInterops.WaveInOutOpenFlags.CALLBACK_EVENT);

            MmException.Try(result, "waveInOpen");
        }
コード例 #15
0
ファイル: WaveInBuffer.cs プロジェクト: yazici/AudioLab
        private void AddBuffer()
        {
            var result = MMInterops.waveInAddBuffer(_waveInHandle, _header, Marshal.SizeOf(_header));

            MmException.Try(result, "waveInAddBuffer");
        }
コード例 #16
0
ファイル: WaveInBuffer.cs プロジェクト: yazici/AudioLab
        private void Prepare()
        {
            var result = MMInterops.waveInPrepareHeader(_waveInHandle, _header, Marshal.SizeOf(_header));

            MmException.Try(result, "waveInPrepareHeader");
        }
コード例 #17
0
 public static int GetDeviceCount()
 {
     return(MMInterops.waveOutGetNumDevs());
 }