Quantcast
Channel: NAudio
Viewing all articles
Browse latest Browse all 5831

New Post: Changing from WaveIn to WasapiCapture

$
0
0
Ok and on my previous note, if someone need output driven using WaveFormatConversion this should also work
    public class ConverterProviderToWaveStream : WaveStream
    {
        public IWaveProvider source;
        //public BufferedWaveProvider source;   //alternative
        public bool reached_end = false;
        private object sourceLock = new object();

        public WaveFormat WaveFormat
        {
            get;// { return this.WaveFormat; }
            set;// { this.WaveFormat = var; }
        }
        //public WaveFormat WaveFormat { get { return this.WaveFormat; } }

        public ConverterProviderToWaveStream(IWaveProvider sourceStream)
        //public ConverterProviderToWaveStream(BufferedWaveProvider sourceStream)   //alternative
        {
            this.source = sourceStream;
            WaveFormat = source.WaveFormat;
        }

        //public override long Length
        //{
            //get { return source.Length; }
        //}
        //public override long Position
        //{
        //get { return source.Position; }
        //set { lock (sourceLock) { source.Position = value; } }
        //}

        public int Read(byte[] buffer, int offset, int count)
        {
            int read;
            //int available_bytes = source.BufferedBytes;   //alternative
            lock (sourceLock)
            {
                try
                {
                    read = source.Read(buffer, offset, count);
                    //read = source.Read(buffer, offset, available_bytes);  //alternative if source is BufferedWaveProvider and you dont want silence inserted
                }
                catch
                {
                    read = 0;
                }
            }
            if (read <= 0) reached_end = true; else reached_end = false;//alternative
            return read;
        }
    }


            WaveFormatConversionStream converter = new WaveFormatConversionStream(new WaveFormat(8000, 1), new ConverterProviderToWaveStream(MicBufferedWaveProvider));
            int read = converter.Read(my_8000_16_mono_buf, 0, count_that_you_need_to_calculate_first);//you might need to be carefull when calculating count based on MicBufferedWaveProvider.BufferedBytes and reduce it by few samples due to different block align
            //then num read form my_8000_16_mono_buf send to where you want

Viewing all articles
Browse latest Browse all 5831

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>