public SoundRecorder(int sampleRate, VoiceActivityDetector vad) { this.vad = vad; if (!AVAudioSession.SharedInstance().Category == AVAudioSession.CategoryRecord && !AVAudioSession.SharedInstance().Category == AVAudioSession.CategoryPlayAndRecord) { throw new AIServiceException("AVAudioCategory not set to RECORD or PLAY_AND_RECORD. Please set it using AVAudioSession class."); } audioStreamDescription = new AudioStreamBasicDescription { Format = AudioFormatType.LinearPCM, FormatFlags = AudioFormatFlags.LinearPCMIsSignedInteger | AudioFormatFlags.LinearPCMIsPacked, SampleRate = sampleRate, BitsPerChannel = BitsPerChannel, ChannelsPerFrame = Channels, BytesPerFrame = (BitsPerChannel / 8) * Channels, FramesPerPacket = 1, Reserved = 0, }; audioStreamDescription.BytesPerPacket = audioStreamDescription.BytesPerFrame * audioStreamDescription.FramesPerPacket; inputQueue = CreateInputQueue(audioStreamDescription); }
static void ProcessStream(VoiceActivityDetector vad, Stream inputStream) { var bufferSize = 3000 + new Random().Next(200); var buffer = new byte[bufferSize]; int bytesRead = 0; bytesRead = inputStream.Read(buffer, 0, bufferSize); while (bytesRead > 0) { vad.ProcessBufferEx(buffer, bytesRead); bufferSize = 3000 + new Random().Next(200); buffer = new byte[bufferSize]; bytesRead = inputStream.Read(buffer, 0, bufferSize); } }
private void buttonStartTest_Click(object sender, RoutedEventArgs e) { try { // speexPreprocessor = new SpeexPreprocessFilter(AudioConstants.SamplesPerFrame, sampleRate, new MediaConfig(), null, "VAD test page Speex Preprocessor"); voiceActivityDetector = new VoiceActivityDetector(AudioFormat.Default, VoiceActivityDetector.Aggressiveness.Normal); // DataContext = voiceActivityDetector. speexPreprocessor.GetVadViewModel(this.Dispatcher); InitializeCaptureSource(); //buttonStartTest.IsEnabled = false; } catch (Exception ex) { ClientLogger.Debug(ex.ToString()); MessageBox.Show(ex.ToString()); } }
public void TestEnabled() { var vad = new VoiceActivityDetector(SAMPLE_RATE); vad.Enabled = false; var inputStream = ReadFileFromResource("speech.raw"); speechEnd = false; speechBegin = false; vad.SpeechBegin += () => { speechBegin = true; }; vad.SpeechEnd += () => { speechEnd = true; }; ProcessStream(vad, inputStream); Assert.IsTrue(speechBegin); Assert.IsFalse(speechEnd); }
public void TestSpeechDetect() { var vad = new VoiceActivityDetector(SAMPLE_RATE); var inputStream = ReadFileFromResource("speech.raw"); speechEnd = false; speechBegin = false; speechNotDetected = false; vad.SpeechBegin += () => { speechBegin = true; }; vad.SpeechEnd += () => { speechEnd = true; }; vad.SpeechNotDetected += () => { speechNotDetected = true; }; ProcessStream(vad, inputStream); Assert.IsTrue(speechBegin); Assert.IsTrue(speechEnd); Assert.IsFalse(speechNotDetected); Assert.IsTrue(vad.SpeechBeginTime > 800 && vad.SpeechBeginTime < 950, "vad.SpeechBeginTime " + vad.SpeechBeginTime); Assert.IsTrue(vad.SpeechEndTime > 2400 && vad.SpeechEndTime < 2900, "vad.SpeechEndTime " + vad.SpeechEndTime); }
public DtxFilter(AudioFormat audioFormat) { _audioFormat = audioFormat; _vad = new VoiceActivityDetector(audioFormat, VoiceActivityDetector.Aggressiveness.Normal); }
internal AudioStream(AudioRecord record, VoiceActivityDetector vad) { this.vad = vad; audioRecord = record; }