public void WaveFileAudioSourceConstructorTest() { string fileName = Path.Combine(TestContext.CurrentContext.TestDirectory, "Resources", "a.wav"); WaveFileAudioSource target = new WaveFileAudioSource(fileName); Signal s = null; target.NewFrame += delegate(object sender, NewFrameEventArgs e) { if (s == null) { s = e.Signal; } Assert.AreEqual(s.SampleRate, 44100); Assert.AreEqual(s.Channels, 2); Assert.AreEqual(s.Length, 8192); Assert.AreEqual(s.Channels * s.Length, s.Samples); }; target.Start(); target.WaitForStop(); Assert.AreEqual(180224, target.FramesReceived); Assert.AreEqual(705600, target.BytesReceived); }
public void WaveFileAudioSourceConstructorTest() { string fileName = @"..\..\..\..\Unit Tests\Accord.Tests.Audio\Resources\Grand Piano - Fazioli - major A middle.wav"; WaveFileAudioSource target = new WaveFileAudioSource(fileName); Signal s = null; target.NewFrame += delegate(object sender, NewFrameEventArgs e) { if (s == null) { s = e.Signal; } Assert.AreEqual(s.SampleRate, 44100); Assert.AreEqual(s.Channels, 2); Assert.AreEqual(s.Length, 8192); Assert.AreEqual(s.Channels * s.Length, s.Samples); }; target.Start(); target.WaitForStop(); Assert.AreEqual(180224, target.FramesReceived); Assert.AreEqual(705600, target.BytesReceived); }
public void VoiceActivity_DetectFromFile() { // Initialize components and wire up pipeline. using (var pipeline = Pipeline.Create(nameof(this.VoiceActivity_DetectFromFile))) { var vad = new SimpleVoiceActivityDetector(pipeline, new SimpleVoiceActivityDetectorConfiguration()); var audioInput = new WaveFileAudioSource(pipeline, "16kHz1chan.wav", null, 20); audioInput.PipeTo(vad); // Add results from outputs. var results = new List <bool>(); vad.Out.Do(r => results.Add(r)); // Run pipeline and wait for completion. pipeline.Run(null, false); Assert.IsTrue(results.Count > 0, "No results!"); CollectionAssert.AreEqual(Enumerable.Repeat(false, 29).ToList(), results.GetRange(0, 29), "Initial silence detection failed!"); CollectionAssert.AreEqual(Enumerable.Repeat(true, 182).ToList(), results.GetRange(29, 182), "Voice activity detection failed!"); CollectionAssert.AreEqual(Enumerable.Repeat(false, 62).ToList(), results.GetRange(211, 62), "Trailing silence detection failed!"); } }
/// <summary> /// Tests speech recognition from any Wave file containing PCM audio in a format that the /// speech recognizer component accepts. /// </summary> /// <param name="filename">The Wave file containing the audio data.</param> /// <param name="expectedText">The expected recognized text.</param> /// <param name="srgsXmlGrammar">The grammar to use when decoding.</param> private void RecognizeSpeechFromWaveFile(string filename, string expectedText, string srgsXmlGrammar = null) { if (SpeechRecognitionEngine.InstalledRecognizers().Count == 0) { // Skip test if no installed recognizers on system. return; } // Read the WaveFormat from the file header so we can set the recognizer configuaration. WaveFormat format = WaveFileHelper.ReadWaveFileHeader(filename); // Initialize components and wire up pipeline. using (var pipeline = Pipeline.Create(nameof(this.RecognizeSpeechFromWaveFile))) { var recognizer = new SystemSpeechRecognizer(pipeline, new SystemSpeechRecognizerConfiguration() { BufferLengthInMs = 10000, InputFormat = format }); var audioInput = new WaveFileAudioSource(pipeline, filename); audioInput.Out.PipeTo(recognizer.In); // Test dynamic update of speech recognition grammar if (srgsXmlGrammar != null) { var grammarUpdater = Generators.Return <IEnumerable <string> >(pipeline, new string[] { srgsXmlGrammar }); grammarUpdater.PipeTo(recognizer.ReceiveGrammars); } // Add results from outputs. Note that we need to call DeepClone on each result as we // do not want them to be resused by the runtime. var results = new List <IStreamingSpeechRecognitionResult>(); recognizer.Out.Do(r => results.Add(r.DeepClone())); recognizer.PartialRecognitionResults.Do(r => results.Add(r.DeepClone())); // Run pipeline and wait for completion. pipeline.Run(); Assert.IsTrue(results.Count > 0, "No recognition results!"); Assert.IsTrue(results.Count > 1, "No partial hypotheses!"); // Verify partial results. for (int i = 0; i < results.Count - 1; ++i) { var partialResult = results[i]; Assert.IsFalse(partialResult.IsFinal); Assert.IsTrue(partialResult.Confidence.HasValue); Assert.IsTrue(partialResult.Confidence.Value > 0); Assert.IsFalse(string.IsNullOrEmpty(partialResult.Text)); } // Verify final results. var finalResult = results.Last(); Assert.IsTrue(finalResult.IsFinal); Assert.IsTrue(finalResult.Confidence.HasValue); Assert.IsTrue(finalResult.Confidence.Value > 0); Assert.AreEqual(expectedText, finalResult.Text, true); Assert.IsTrue(finalResult.Alternates.Length > 0); Assert.AreEqual(expectedText, finalResult.Alternates[0].Text, true); Assert.AreEqual(finalResult.Alternates[0].Confidence.Value, finalResult.Confidence.Value); Assert.IsTrue(finalResult.Audio.Length > 0); } }