Exemplo n.º 1
0
        /// <summary>
        /// Configures NAudio for audio capture from either the default or specified audio device index
        /// </summary>
        /// <param name="deviceNumber">Desired Capture Device Index; Default is 0</param>
        private void Initialize_NAudio(int deviceNumber = 0)
        {
            // If EventBasedAudio is already initialized, dispose
            if (EventBasedAudio != null)
            {
                EventBasedAudio.Dispose();
            }

            EventBasedAudio = new WaveInEvent();
            EventBasedAudio.DeviceNumber = deviceNumber;

            EventBasedAudio.WaveFormat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.Pcm, 8000, 1, 32000, 2, 16);

            BufferedAudioProvider = new BufferedWaveProvider(EventBasedAudio.WaveFormat);
            BufferedAudioProvider.BufferDuration = TimeSpan.FromSeconds(1);

            Azure_NAudio_Callback = new NAudioCompatibleAudioCallback(ref BufferedAudioProvider, ref BufferedAudioProvider_LockObject);

            EventBasedAudio.DataAvailable += (s, e) =>
            {
                lock (BufferedAudioProvider_LockObject)
                {
                    BufferedAudioProvider.AddSamples(e.Buffer, 0, e.BytesRecorded);
                }

                if (AudioFileWriter != null)
                {
                    AudioFileWriter.Write(e.Buffer, 0, e.BytesRecorded);
                }
            };
        }
Exemplo n.º 2
0
        /// <summary>
        /// Configures and Instantiates the Azure Speech-To-Text API; <seealso cref="Initialize_NAudio"/> must be called before using this function
        /// </summary>
        /// <param name="subscriptionKey">Valid Azure Subscription Key</param>
        /// <param name="subscriptionRegion">Valid Azure Subscription Region</param>
        /// <param name="CallbackFunction">Audio Source Callback Function</param>
        private void Initialize_AzureSpeech(string subscriptionKey, string subscriptionRegion, NAudioCompatibleAudioCallback CallbackFunction)
        {
            // If SpeechRecognizer is already initialized, dispose
            if (AzureSpeechRecognizer != null)
            {
                AzureSpeechRecognizer.Dispose();
            }

            // Configure SpeechConfig
            SpeechConfig AzureSpeechConfig = SpeechConfig.FromSubscription(subscriptionKey, subscriptionRegion);

            AzureSpeechConfig.SpeechRecognitionLanguage = "en-US";
            AzureSpeechConfig.EnableDictation();
            AzureSpeechConfig.EnableAudioLogging();
            AzureSpeechConfig.SetProperty(PropertyId.Speech_LogFilename, @"C:\Users\Joe\source\repos\Monotone\Monotone\bin\x86\Debug x86\log.txt");
            AzureSpeechConfig.SetProfanity(ProfanityOption.Raw);
            AzureSpeechConfig.OutputFormat = OutputFormat.Detailed;

            // Configure AudioConfig
            AudioConfig AzureAudioConfig = AudioConfig.FromStreamInput(CallbackFunction,
                                                                       AudioStreamFormat.GetWaveFormatPCM((uint)EventBasedAudio.WaveFormat.SampleRate,
                                                                                                          (byte)EventBasedAudio.WaveFormat.BitsPerSample,
                                                                                                          (byte)EventBasedAudio.WaveFormat.Channels));

            // Initialize SpeechRecognizer
            AzureSpeechRecognizer = new SpeechRecognizer(AzureSpeechConfig, AzureAudioConfig);

            // Configure Recognizer Events
            Azure_StopRecognition = new TaskCompletionSource <int>();

            //AzureSpeechRecognizer.Recognizing += (s, e) =>
            //{
            //    Debug.WriteLine($"RECOGNIZING: Text ={e.Result.Text}");
            //};

            AzureSpeechRecognizer.Recognized += (s, e) =>
            {
                if (e.Result.Reason == ResultReason.RecognizedSpeech)
                {
                    monotone_RecordTranscribe1.AddEntryLine(e.Result.Text, (timeIndex_Stopwatch.Elapsed - e.Result.Duration));
                }
            };

            AzureSpeechRecognizer.Canceled += (s, e) =>
            {
                if (e.Reason == CancellationReason.Error)
                {
                    MessageBox.Show($"Canceled due to Error {e.ErrorCode}\n\n" + $"Details: {e.ErrorDetails}\n\n" + $"Did you update your subscription info?",
                                    $"Azure Speech Recognition Error {e.ErrorCode}", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                StopRecording(this, new EventArgs());
            };

            AzureSpeechRecognizer.SessionStopped += (s, e) =>
            {
                Debug.WriteLine("Session Stopped");

                StopRecording(this, new EventArgs());
            };

            AzureSpeechRecognizer.SessionStarted += (s, e) =>
            {
                Debug.WriteLine("Session Start");
            };

            AzureSpeechRecognizer.SessionStopped += (s, e) =>
            {
                Debug.WriteLine("Session Stopped");
            };
        }