public double[] ProcessAndExtract(Stream voiceSample) { var processed = AudioConverter.ConvertAudioToDoubleArray(voiceSample, sampleRate); processed = voiceDetector.RemoveSilence(processed, sampleRate); normalizer.Normalize(processed, sampleRate); processed = extractor.ExtractFeatures(processed); return(processed); }
private double[] ProvideAmplitudeValues(byte[] sample) { var voiceDetector = new AutocorrellatedVoiceActivityDetector(); File.WriteAllBytes(TEMP_FILE, sample); double[] result = null; using (var stream = File.OpenRead(TEMP_FILE)) { result = AudioConverter.ConvertAudioToDoubleArray(stream, _sampleRate); } File.Delete(TEMP_FILE); return(voiceDetector.RemoveSilence(result, _sampleRate)); }
public List <Match> FindAudioFilesContainingSpeaker(Stream speakerAudioFile, string toBeScreenedForAudioFilesWithSpeakerFolder) { var result = new List <Match>(); var speakerVoicePrint = VoicePrint.FromFeatures(featureExtractor.ProcessAndExtract(speakerAudioFile)); foreach (var file in Directory.GetFiles(toBeScreenedForAudioFilesWithSpeakerFolder, "*.wav", SearchOption.TopDirectoryOnly)) { using (var fs = new FileStream(file, FileMode.Open)) { double[][] words = voiceDetector.SplitBySilence(AudioConverter.ConvertAudioToDoubleArray(fs, sampleRate), sampleRate); int wordsWithinThreshold = 0; for (int i = 0; i < words.Length; i++) { var wordVoicePrint = VoicePrint.FromFeatures(words[i]); double wordDistance = wordVoicePrint.GetDistance(calculator, speakerVoicePrint); if (wordDistance < distanceThreshold) { wordsWithinThreshold++; } } if (words.Length > 0 && (100.0 * ((double)wordsWithinThreshold / words.Length)) > wordsPctThreshold) { var fVoicePrint = VoicePrint.FromFeatures(featureExtractor.ProcessAndExtract(fs)); double fDistance = fVoicePrint.GetDistance(calculator, speakerVoicePrint); if (fDistance < distanceThreshold) { result.Add(new Match(file, fDistance)); } } } } return(result); }
/** * Converts the given audio file to an array of doubles with values between -1.0 and 1.0 * @param voiceSampleFile the file to convert * @return an array of doubles * @throws UnsupportedAudioFileException when the JVM does not support the file format * @throws IOException when an I/O exception occurs */ private double[] ConvertFileToDoubleArray(Stream voiceSampleFile) { return(AudioConverter.ConvertAudioToDoubleArray(voiceSampleFile, sampleRate)); }
static void Main(string[] args) { var start = DateTime.Now; try { string base_dir = "C:\\Users\\fabio\\Desktop\\audio_sample"; var tests = new List <string>(); using (var waveOut = new WaveOutEvent()) { var voiceDetector = new AutocorrellatedVoiceActivityDetector(); foreach (var pessoas in Directory.GetDirectories(base_dir).OrderBy(f => f)) { var info = new DirectoryInfo(pessoas); var nome = info.Name; Console.WriteLine($"nome:{nome}"); VoicePrint voice = null; foreach (var audio in Directory.GetFiles(pessoas, "audio_*.wav", SearchOption.TopDirectoryOnly)) { Console.WriteLine($"nome:{audio}"); using (var fs = File.OpenRead(audio)) { if (voice == null) { voice = recognito.CreateVoicePrint(nome, fs); } else { voice = recognito.MergeVoiceSample(nome, fs); } } using (var wr = new WaveFileReader(audio)) { Console.WriteLine("Play Original"); waveOut.Init(wr); waveOut.PlayAndWait(); } using (var fs = new FileStream(audio, FileMode.Open)) { var sentence = AudioConverter.ConvertAudioToDoubleArray(fs, sampleRate); var words = voiceDetector.SplitBySilence(sentence, sampleRate); var aa = AudioConverter.WriteAudioInputStream(sentence); if (words.Length > 1) { foreach (var word in words) { var aw = AudioConverter.WriteAudioInputStream(word); using (var wr = new WaveFileReader(aw)) { Console.WriteLine("Play Word"); waveOut.Init(wr); waveOut.PlayAndWait(); Thread.Sleep(1000); } } } } } } } Console.WriteLine("\n\nTestes"); tests = Directory.GetFiles(base_dir, "teste_*.wav", SearchOption.AllDirectories).ToList(); foreach (var test in tests) { Console.WriteLine($"Testando: {test}"); using (var fs = new FileStream(test, FileMode.Open)) { var identify = recognito.Identify(fs).FirstOrDefault(); Console.WriteLine($"identify.Key:{identify.Key},identify.Distance: {identify.Distance}, identify.LikelihoodRatio:{identify.LikelihoodRatio}"); } } } catch (Exception ex) { Console.WriteLine("[ERROR]"); Console.WriteLine(ex); } finally { Console.WriteLine($"Time:{(DateTime.Now - start)}"); Console.WriteLine("Press Any Key do Close"); Console.ReadKey(); } }