예제 #1
0
 //after use the empty construct function, set the important vars
 public void SetPcmPlayer(int sampleRate, int bitsPerSample, int channels)
 {
     WaveFormat           = new WaveFormat(sampleRate, bitsPerSample, channels);
     bufferedWaveProvider = new BufferedWaveProvider(WaveFormat);
     waveOut = new WaveOut();
     if (channels == 1)
     {
         monoToStereoProvider16 = new MonoToStereoProvider16(bufferedWaveProvider);
         waveOut.Init(monoToStereoProvider16);
     }
     else if (channels == 2)
     {
         waveOut.Init(bufferedWaveProvider);
     }
     waveOut.Play();
     isRunning = true;
 }
 /// <summary>
 /// Converts the given input wavestream into mono or stereo for 16 bit samples
 /// </summary>
 /// <param name="input">The input WaveProvider to convert</param>
 /// <param name="toMono">True for mono output, or false for stereo output</param>
 /// <returns>A converted IWaveProvider of the original input in either mono or stereo</returns>
 public IWaveProvider MonoStereoConvert16(IWaveProvider input, bool toMono)
 {
     if (toMono && input.WaveFormat.Channels != 1)
     {
         var stmp = new StereoToMonoProvider16(input);
         return(stmp);
     }
     else if (!toMono && input.WaveFormat.Channels != 2)
     {
         var mtsp = new MonoToStereoProvider16(input);
         mtsp.LeftVolume  = 0.7f;
         mtsp.RightVolume = 0.7f; //0.7 on each to avoid double loud
         return(mtsp);
     }
     else
     {
         return(input);
     }
 }
 public void LeftChannelOnly()
 {
     IWaveProvider monoStream = new TestMonoProvider();
     MonoToStereoProvider16 stereo = new MonoToStereoProvider16(monoStream);
     stereo.LeftVolume = 1.0f;
     stereo.RightVolume = 0.0f;
     int samples = 1000;
     byte[] buffer = new byte[samples * 2];
     int read = stereo.Read(buffer, 0, buffer.Length);
     Assert.AreEqual(buffer.Length, read, "bytes read");
     WaveBuffer waveBuffer = new WaveBuffer(buffer);
     short expected = 0;
     for (int sample = 0; sample < samples; sample+=2)
     {
         short sampleLeft = waveBuffer.ShortBuffer[sample];
         short sampleRight = waveBuffer.ShortBuffer[sample+1];
         Assert.AreEqual(expected++, sampleLeft, "sample left");
         Assert.AreEqual(0, sampleRight, "sample right");
     }
 }
 public MonoStereoSwapProvider(ISampleProvider sampleProvider)
 {
     BackingSampleProvider = sampleProvider;
     MonoProvider          = new MonoToStereoProvider16(sampleProvider.ToWaveProvider16()).ToSampleProvider();
     StereoProvider        = new StereoToMonoProvider16(sampleProvider.ToWaveProvider16()).ToSampleProvider();
 }
예제 #5
0
        public AudioPassthrough(HotkeyAudioDevice input, HotkeyAudioDevice output, AutoTuneSettings autoTuneSettings)
        {
            LastPauseOrStart  = new DateTime(2000, 1, 1);
            _autoTuneSettings = autoTuneSettings;

            _waveSource             = new WaveIn();
            WaveSource.DeviceNumber = input.AudioDeviceId;
            //WaveSource.WaveFormat = new WaveFormat();
            WaveSource.WaveFormat        = WaveFormat.CreateIeeeFloatWaveFormat(44100, 1);
            WaveSource.RecordingStopped += WaveSource_RecordingStopped;
            WaveSource.DataAvailable    += WaveSource_DataAvailable;
            //WaveSource.BufferMilliseconds = 300;
            //_waveInProvider = new JoeWaveInProvider(WaveSource);


            //StereoToMonoProvider16 stereoToMonoprovider = new StereoToMonoProvider16(_waveInProvider);

            //_wave16ToFloatProvider = new Wave16ToFloatProvider(stereoToMonoprovider);
            //var test3 = ;
            MemoryStream = new MemoryStream(new byte[8192]);

            var rawSourceStream = new RawSourceWaveStream(MemoryStream, WaveFormat.CreateIeeeFloatWaveFormat(44100, 1));

            //_autoTuner = new AutoTuneWaveProvider(_wave16ToFloatProvider, AutoTuneSettings);

            _autoTuner = new AutoTuneWaveProvider(rawSourceStream, AutoTuneSettings);

            _waveFloatTo16Provider = new WaveFloatTo16Provider(_autoTuner);

            _monoToStereoProvider = new MonoToStereoProvider16(_waveFloatTo16Provider);

            //_monoToStereoProvider = new MonoToStereoProvider16(_autoTuner);

            _waveOutput                 = new WaveOutEvent();
            WaveOutput.DeviceNumber     = output.AudioDeviceId;
            WaveOutput.PlaybackStopped += WaveOutput_PlaybackStopped;
            WaveOutput.Init(_monoToStereoProvider);


            //JoeWaveOutEvent joeWaveOut = new JoeWaveOutEvent();
            //joeWaveOut.DeviceNumber = output.AudioDeviceId;
            //joeWaveOut.DesiredLatency = 329;
            //joeWaveOut.NumberOfBuffers = 7;
            //joeWaveOut.Init(_monoToStereoProvider);

            //DirectSoundDeviceInfo foundDeviceInfo = null;
            //foreach (DirectSoundDeviceInfo deviceInfo in DirectSoundOut.Devices)
            //{
            //    if (deviceInfo.Description.Contains(output.AudioDeviceName))
            //    {
            //        foundDeviceInfo = deviceInfo;
            //        break;
            //    }
            //}

            //if (foundDeviceInfo != null)
            //{
            //    DirectSoundOutput = new DirectSoundOut(foundDeviceInfo.Guid, 300);
            //    DirectSoundOutput.PlaybackStopped += DirectSoundOutput_PlaybackStopped;
            //    DirectSoundOutput.Init(_monoToStereoProvider);
            //}
        }