public void RespectsOffsetAndCount() { var sp = new SilenceProvider(new WaveFormat(44100, 2)); var length = 10; var b = Enumerable.Range(1, length).Select(n => (byte)1).ToArray(); var read = sp.Read(b, 2, 4); Assert.AreEqual(4, read); Assert.AreEqual(new byte[] { 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 }, b); }
public void CanReadSilence() { var sp = new SilenceProvider(new WaveFormat(44100, 2)); var length = 1000; var b = Enumerable.Range(1, length).Select(n => (byte)1).ToArray(); var read = sp.Read(b, 0, length); Assert.AreEqual(length, read); Assert.AreEqual(new byte[length], b); }
private static async Task <bool> MakeAudioConfigAsync(SpeechHandler handler) { // var audioConfig = AudioConfig.FromWavFileInput(@"D:\Users\ManabuTonosaki\OneDrive - tomarika\tono.wav"); // var audioConfig = AudioConfig.FromDefaultMicrophoneInput(); Debug.Assert(handler.Device != null); var wavein = new WasapiLoopbackCapture(handler.Device); var waveoutFormat = new WaveFormat(16000, 16, 1); var lastSpeakDT = DateTime.Now; var willStop = DateTime.MaxValue; wavein.DataAvailable += (s, e) => { if (e.BytesRecorded > 0) { using var ms = new MemoryStream(e.Buffer, 0, e.BytesRecorded); using var rs = new RawSourceWaveStream(ms, wavein.WaveFormat); using var freq = new MediaFoundationResampler(rs, waveoutFormat.SampleRate); var w16 = freq.ToSampleProvider().ToMono().ToWaveProvider16(); var len = w16.Read(handler.buf, 0, handler.buf.Length); handler.AudioInputStream.Write(handler.buf, len); lastSpeakDT = DateTime.Now; willStop = DateTime.MaxValue; } else { if (DateTime.Now < willStop) { if (willStop == DateTime.MaxValue) { willStop = DateTime.Now + TimeSpan.FromSeconds(10); } var silence = new SilenceProvider(waveoutFormat); var len = silence.Read(handler.buf, 0, waveoutFormat.BitsPerSample * waveoutFormat.SampleRate / 8 / 100); // 10ms var cnt = (int)((DateTime.Now - lastSpeakDT).TotalMilliseconds / 10); for (var i = 0; i < cnt; i++) { handler.AudioInputStream.Write(handler.buf, len); } lastSpeakDT = DateTime.Now; } } }; var audioformat = AudioStreamFormat.GetWaveFormatPCM(samplesPerSecond: 16000, bitsPerSample: 16, channels: 1); handler.AudioInputStream = AudioInputStream.CreatePushStream(audioformat); handler.AudioConfig = AudioConfig.FromStreamInput(handler.AudioInputStream); await Task.Delay(100); handler.StopRequested += (s, e) => { wavein.StopRecording(); }; wavein.StartRecording(); return(true); }