public IWaveIn Open(IWavePipeConfiguration config) { IWaveIn result; var bufferMilliseconds = config.InputBufferLength ?? 50; var numberOfBuffers = config.InputBufferCount ?? 3; if (config.IsThreadCompatible) { result = new WaveInEvent { DeviceNumber = _index, BufferMilliseconds = bufferMilliseconds, NumberOfBuffers = numberOfBuffers }; } else { result = new WaveIn { DeviceNumber = _index, BufferMilliseconds = bufferMilliseconds, NumberOfBuffers = numberOfBuffers }; } if (config.InputFormat != null) { result.WaveFormat = config.InputFormat; } return(result); }
public IWavePlayer Open(IWavePipeConfiguration config) { return(new AsioOut(Device.Name) { ChannelOffset = _index }); }
public WavePipeInfo(IWavePipeConfiguration wavePipeConfiguration) { Configuration = wavePipeConfiguration; InputSource = wavePipeConfiguration.InputSource; OutputSource = wavePipeConfiguration.OutputSource; Configure(wavePipeConfiguration); }
public void Reconfigure(IWavePipeConfiguration configuration) { Configuration = configuration; Stop(); Configure(configuration); Start(); }
public IWavePlayer Open(IWavePipeConfiguration config) { return(new WaveOutEvent { DesiredLatency = config.OutputLatency ?? 100, DeviceNumber = _index, NumberOfBuffers = config.OutputBufferCount ?? 3 }); }
public IWaveIn Open(IWavePipeConfiguration config) { return(new AsioWaveInWrapper(new AsioOut(Device.Name) { InputChannelOffset = _index }) { WaveFormat = config.InputFormat }); }
private void Configure(IWavePipeConfiguration configuration) { WavePipe?.Dispose(); WaveIn?.Dispose(); WaveOut?.Dispose(); WaveIn = InputSource.Open(configuration); WaveOut = OutputSource.Open(configuration); WavePipe = new WavePipe(InputSource, OutputSource, configuration); }
public void Stop(IWavePipeConfiguration wavePipeDeviceInfo) { var existingPipe = GetExistingPipe(wavePipeDeviceInfo); if (existingPipe == null) { return; } existingPipe.Stop(); _pipes.Remove(existingPipe); existingPipe.Dispose(); }
private void SetConfiguration(IWavePipeConfiguration configuration) { inputBufferCountSlider.Value = GetClampedValueForTrackBar(inputBufferCountSlider, configuration.InputBufferCount); inputBufferSizeSlider.Value = GetClampedValueForTrackBar(inputBufferSizeSlider, configuration.InputBufferCount); outputBufferCountSlider.Value = GetClampedValueForTrackBar(outputBufferCountSlider, configuration.OutputBufferCount); outputLatencySlider.Value = GetClampedValueForTrackBar(outputLatencySlider, configuration.OutputLatency); inputFormatFrequency.Text = (configuration.InputFormat?.SampleRate ?? 44100).ToString(); inputFormatEnable.Checked = configuration.InputFormat == null; backgroundThreadCheckBox.Checked = configuration.UseBackgroundThread; discardDataCheckBox.Checked = configuration.DiscardSamplesIfLagging; }
public void Start(IWavePipeConfiguration wavePipeConfiguration) { var existingPipe = GetExistingPipe(wavePipeConfiguration); if (existingPipe != null) { existingPipe.Reconfigure(wavePipeConfiguration); return; } var newPipe = new WavePipeInfo(wavePipeConfiguration); newPipe.Start(); _pipes.Add(newPipe); }
public WavePipe(IWaveInSource waveIn, IWaveOutSource waveOut, IWavePipeConfiguration configuration) { _configuration = configuration; _threadInfo = new WavePipeThreadInfo(waveIn, waveOut, _configuration); var thread = new Thread(WavePipeThreadProc); if (!_configuration.IsThreadCompatible) { _threadInfo.Initialize(); } else { thread.Priority = ThreadPriority.AboveNormal; } thread.Start(_threadInfo); }
public WaveInBufferedStreamProvider(IWaveIn waveIn, IWavePipeConfiguration configuration) { _waveIn = waveIn; waveIn.DataAvailable += OnWaveInDataAvailable; _bufferedWaveProvider = new BufferedWaveProvider(WaveFormat) { DiscardOnBufferOverflow = configuration.DiscardSamplesIfLagging, }; if (configuration.DiscardSamplesIfLagging && configuration.InputSource.SupportsBufferSize && configuration.OutputSource.SupportsBufferSize) { var totalInputLatency = (configuration.InputSource.SupportsBufferCount ? configuration.InputBufferCount ?? 1 : 1) * (configuration.InputBufferLength ?? 20); var totalOutputLatency = (configuration.OutputSource.SupportsBufferCount ? configuration.OutputBufferCount ?? 1 : 1) * (configuration.OutputLatency ?? 40); _bufferedWaveProvider.BufferLength = waveIn.WaveFormat.ConvertLatencyToByteSize(totalInputLatency + totalOutputLatency); } else { _bufferedWaveProvider.BufferLength = waveIn.WaveFormat.AverageBytesPerSecond * 10; } }
public WavePipeThreadInfo(IWaveInSource waveIn, IWaveOutSource waveOut, IWavePipeConfiguration configuration) { _waveInDevice = waveIn; _waveOutDevice = waveOut; _configuration = configuration; }
public void SaveToLocalFile(IWavePipeConfiguration configuration) { SaveToFile(GetLocalConfigurationFileName(), configuration); }
public void SaveToUserProfile(IWavePipeConfiguration configuration) { SaveToFile(GetUserProfileFileName(), configuration); }
private void SaveToFile(string fileName, IWavePipeConfiguration configuration) { var data = JsonConvert.SerializeObject(configuration, Formatting.Indented); File.WriteAllText(fileName, data); }
public bool ContainsPipeWithDevices(IWavePipeConfiguration wavePipeDeviceInfo) { return(GetExistingPipe(wavePipeDeviceInfo) != null); }
public IWavePlayer Open(IWavePipeConfiguration config) { return(new DirectSoundOut(_guid, config.OutputLatency ?? 40)); }
private IWavePipeInfo GetExistingPipe(IWavePipeConfiguration wavePipeConfiguration) { return(_pipes.FirstOrDefault(p => p.Configuration.InputSource?.Id == wavePipeConfiguration.InputSource?.Id && p.Configuration.OutputSource?.Id == wavePipeConfiguration.OutputSource?.Id)); }