コード例 #1
0
        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);
        }
コード例 #2
0
 public IWavePlayer Open(IWavePipeConfiguration config)
 {
     return(new AsioOut(Device.Name)
     {
         ChannelOffset = _index
     });
 }
コード例 #3
0
 public WavePipeInfo(IWavePipeConfiguration wavePipeConfiguration)
 {
     Configuration = wavePipeConfiguration;
     InputSource   = wavePipeConfiguration.InputSource;
     OutputSource  = wavePipeConfiguration.OutputSource;
     Configure(wavePipeConfiguration);
 }
コード例 #4
0
 public void Reconfigure(IWavePipeConfiguration configuration)
 {
     Configuration = configuration;
     Stop();
     Configure(configuration);
     Start();
 }
コード例 #5
0
 public IWavePlayer Open(IWavePipeConfiguration config)
 {
     return(new WaveOutEvent
     {
         DesiredLatency = config.OutputLatency ?? 100,
         DeviceNumber = _index,
         NumberOfBuffers = config.OutputBufferCount ?? 3
     });
 }
コード例 #6
0
 public IWaveIn Open(IWavePipeConfiguration config)
 {
     return(new AsioWaveInWrapper(new AsioOut(Device.Name)
     {
         InputChannelOffset = _index
     })
     {
         WaveFormat = config.InputFormat
     });
 }
コード例 #7
0
        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);
        }
コード例 #8
0
        public void Stop(IWavePipeConfiguration wavePipeDeviceInfo)
        {
            var existingPipe = GetExistingPipe(wavePipeDeviceInfo);

            if (existingPipe == null)
            {
                return;
            }

            existingPipe.Stop();
            _pipes.Remove(existingPipe);
            existingPipe.Dispose();
        }
コード例 #9
0
 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;
 }
コード例 #10
0
        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);
        }
コード例 #11
0
ファイル: WavePipe.cs プロジェクト: SaxxonPike/Playthrough2
        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);
        }
コード例 #12
0
        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;
            }
        }
コード例 #13
0
 public WavePipeThreadInfo(IWaveInSource waveIn, IWaveOutSource waveOut, IWavePipeConfiguration configuration)
 {
     _waveInDevice  = waveIn;
     _waveOutDevice = waveOut;
     _configuration = configuration;
 }
コード例 #14
0
 public void SaveToLocalFile(IWavePipeConfiguration configuration)
 {
     SaveToFile(GetLocalConfigurationFileName(), configuration);
 }
コード例 #15
0
 public void SaveToUserProfile(IWavePipeConfiguration configuration)
 {
     SaveToFile(GetUserProfileFileName(), configuration);
 }
コード例 #16
0
        private void SaveToFile(string fileName, IWavePipeConfiguration configuration)
        {
            var data = JsonConvert.SerializeObject(configuration, Formatting.Indented);

            File.WriteAllText(fileName, data);
        }
コード例 #17
0
 public bool ContainsPipeWithDevices(IWavePipeConfiguration wavePipeDeviceInfo)
 {
     return(GetExistingPipe(wavePipeDeviceInfo) != null);
 }
コード例 #18
0
 public IWavePlayer Open(IWavePipeConfiguration config)
 {
     return(new DirectSoundOut(_guid, config.OutputLatency ?? 40));
 }
コード例 #19
0
 private IWavePipeInfo GetExistingPipe(IWavePipeConfiguration wavePipeConfiguration)
 {
     return(_pipes.FirstOrDefault(p =>
                                  p.Configuration.InputSource?.Id == wavePipeConfiguration.InputSource?.Id &&
                                  p.Configuration.OutputSource?.Id == wavePipeConfiguration.OutputSource?.Id));
 }