using System;
using NAudio.Wave;
using System.Collections.Generic;

namespace InputDevices
{
    public class AudioDevice : WaveIn//, IDisposable
    {

     //   WaveIn waveIn;
        //Класс для записи в файл
        //Имя файла для записи
        public AudioDevice(int deviceNumber, WaveFormat f , EventHandler<WaveInEventArgs> DataAvailable, EventHandler<StoppedEventArgs> RecordingStopped = null): base()
        {
            //  try {//
          //  waveIn = new WaveIn();
            //Дефолтное устройство для записи (если оно имеется)
           // waveIn.
                DeviceNumber = deviceNumber;
            //Прикрепляем к событию DataAvailable обработчик, возникающий при наличии записываемых данных
           // waveIn.
                this.DataAvailable += DataAvailable;
            //Прикрепляем обработчик завершения записи
            //waveIn.
                this.RecordingStopped += RecordingStopped;
            //Формат wav-файла - принимает параметры - частоту дискретизации и количество каналов(здесь mono)
           // waveIn.
                WaveFormat = new WaveFormat(22050, 16, 1);
            //Инициализируем объект WaveFileWriter
            //Начало записи
            //waveIn.
                StartRecording();
            //  }  catch (Exception ex) { 
            //      MessageBox.Show(ex.Message);
            //    }
        }

        //~AudioDevice()
        //{
        //    Dispose(false);
        //}
        //public void Dispose()
        //{
        //    Dispose(true);
        //    GC.SuppressFinalize(this);
        //}


    

        //protected virtual void Dispose(bool disposing)
        //{

        //    waveIn.Dispose();
        // //   waveIn = null;
        //}

        public static IEnumerable<WaveInCapabilities> GetAudioDevice()
        {

            IList<WaveInCapabilities> result = new List<WaveInCapabilities>();
            for (int waveInDevice = 0; waveInDevice < WaveIn.DeviceCount; waveInDevice++)
            {
                result.Add(WaveIn.GetCapabilities(waveInDevice));
            }
            return result;
        }
    }



}

