private void DoListen(object obj) { waveOut.Play(); listener = new DuplexChannelFactory <ISpeexStreamer>(new InstanceContext(this), "NetTcpBinding_ISpeexStreamer", new EndpointAddress(ListenAddress)).CreateChannel(); listener.Subscribe(); IsPlaying = true; RaiseCommands(); }
public MainViewModel() { listenAddress = "net.tcp://localhost:8001/SpeexStreamer"; encoder = new SpeexEncoder(BandMode.Narrow); //encoder.VBR = true; //encoder.DTX = true; //todo: preProcessor = new NativePreprocessor(encoder.FrameSize, 16000);// { AGC = true, AGCIncrement = 1, MaxAGCGain = 10, Denoise = true, VAD = true }; //encoder = new NativeEncoder((EncodingMode) 1); //encoder.VBR = false; //encoder.DTX = false; waveFormat = new WaveFormat(encoder.FrameSize * 50, 16, 1); waveIn = new WaveIn { WaveFormat = waveFormat, BufferMillisconds = 40, NumberOfBuffers = 2 }; //waveIn = new WasapiCapture(); waveIn.DataAvailable += waveIn_DataAvailable; waveIn.RecordingStopped += waveIn_RecordingStopped; sender = new DuplexChannelFactory <ISpeexStreamer>(this, "NetTcpBinding_ISpeexStreamer").CreateChannel(); waveProvider = new JitterBufferWaveProvider(); waveProvider.VolumeUpdated += HandleVolumeUpdated; //waveOut = new DirectSoundOut(40); //waveOut = new WaveOut(); waveOut = new WasapiOut(AudioClientShareMode.Shared, 20); waveOut.Init(waveProvider); waveOut.PlaybackStopped += waveOut_PlaybackStopped; waveOut.Volume = 1.0f; StartCommand = new DelegateCommand <object>(DoStartRecording, obj => !IsRecording); ListenCommand = new DelegateCommand <object>(DoListen, obj => !IsPlaying); }