//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(); }
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); //} }