public void TestProcess() { Porcupine p = new Porcupine(Path.Combine(Environment.CurrentDirectory, "porcupine_params.pv"), keywordFilePath: $"{GetAbsRootPath()}resources/keyword_files/porcupine_{GetEnvironmentName()}.ppn", sensitivity: 0.5f); Assert.AreEqual(PicoVoiceStatus.SUCCESS, p.Status, "the status of the creation of the recognition system has failed"); WAVFile file = new WAVFile(); file.Open("porcupine.wav", WAVFile.WAVFileMode.READ); Assert.AreEqual(p.SampleRate() / 1000, file.BitsPerSample, "The samplerate is not equal!!!"); List <short> data = new List <short>(); while (file.NumSamplesRemaining > 0) { data.Add(BitConverter.ToInt16(file.GetNextSample_ByteArray())); } int framecount = (int)Math.Floor((decimal)(data.Count / p.FrameLength())); var results = new List <bool>(); for (int i = 0; i < framecount; i++) { int start = i * p.FrameLength(); int count = p.FrameLength(); List <short> frame = data.GetRange(start, count); p.Process(frame.ToArray(), out bool result); results.Add(result); } var res = results.Count(x => x); Assert.AreEqual(1, res, $"The result is not as expected, expected {1} got {res}"); p.Dispose(); }
public void MultipleKeywords() { var modelFilePath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, "porcupine_params.pv")); Assert.IsTrue(File.Exists(modelFilePath), $"File.Exists(modelFilePath) --> {modelFilePath}"); paths.ForEach(keywordFilePath => Assert.IsTrue(File.Exists(keywordFilePath), $"File.Exists(keywordFilePath) --> {keywordFilePath}")); Porcupine p = new Porcupine(modelFilePath, keywordFilePaths: paths, sensitivities: senses); Assert.AreEqual(PicoVoiceStatus.SUCCESS, p.Status, "the status of the creation of the recognition system has failed"); WAVFile file = new WAVFile(); file.Open("multiple_keywords.wav", WAVFile.WAVFileMode.READ); Assert.AreEqual(p.SampleRate(), file.AudioFormat.SampleRateHz, "The samplerate is not equal!!!"); List <short> data = new List <short>(); while (file.NumSamplesRemaining > 0) { data.Add(BitConverter.ToInt16(file.GetNextSample_ByteArray())); } int framecount = (int)Math.Floor((decimal)(data.Count / p.FrameLength())); var results = new List <int>(); for (int i = 0; i < framecount; i++) { int start = i * p.FrameLength(); int count = p.FrameLength(); List <short> frame = data.GetRange(start, count); PicoVoiceStatus status = p.ProcessMultipleKeywords(frame.ToArray(), out int result); if (result >= 0) { results.Add(result); } Assert.AreEqual(PicoVoiceStatus.SUCCESS, status, "The status is not as expected"); } var requiredRes = new[] { 8, 0, 1, 2, 3, 4, 5, 7, 8, 9 }; Assert.AreEqual(requiredRes.Length, results.Count, $"expected results length are different expected {requiredRes.Length} got {results.Count}"); for (var i = 0; i < results.Count; i++) { Assert.AreEqual(requiredRes[i], results[i], $"The result is not as expected, expected {requiredRes[i]} got {results[i]}"); } p.Dispose(); }
byte[] GetWavData(string fileName) { var wav = new WAVFile(); wav.Open(fileName, WAVFile.WAVFileMode.READ); wav.SeekToAudioDataStart(); byte[] data = new byte[wav.DataSizeBytes]; byte[] arr; int start = 0; do { arr = wav.GetNextSample_ByteArray(); arr.CopyTo(data, start); start += arr.Length; }while (wav.NumSamplesRemaining > 1); wav.Close(); return(data); }