/// <summary>
        /// 辨識輸入文字為語音
        /// </summary>
        /// <param name="textToSpeakBM">輸入文字為語音用</param>
        /// <returns></returns>
        public async Task TextToSpeak(RecognizeBM recognizeBM)
        {
            // 設定語音服務設定
            var config = this.GetSpeechConfig(recognizeBM);

            // 建立語音合成器類別
            using (var synthesizer = new SpeechSynthesizer(config))
            {
                Console.WriteLine("處理中...");

                // 判斷輸入是否為空白
                if (string.IsNullOrEmpty(recognizeBM.Text.Trim()))
                {
                    recognizeBM.Text = "無法辨識輸入,請重新輸入\n";
                }

                // 將文字合成為語音
                using (var result = await synthesizer.SpeakTextAsync(recognizeBM.Text))
                {
                    // 判斷回傳執行結果狀態
                    this.CheckReason(result);

                    Console.WriteLine($"系統辨識為: {recognizeBM.Text}\n");
                }
            }
        }
        /// <summary>
        /// 設定語音服務設定
        /// </summary>
        /// <param name="recognizeBM"></param>
        /// <returns></returns>
        private SpeechConfig GetSpeechConfig(RecognizeBM recognizeBM)
        {
            // 設定 訂用帳戶金鑰 與 訂用帳戶服務的所在區域
            // 免費試用的服務所在區域都是 westus
            var speechConfig =
                SpeechConfig.FromSubscription(recognizeBM.Subkey, recognizeBM.Region);

            // 要辨識的語言
            speechConfig.SpeechRecognitionLanguage = recognizeBM.Language;

            // 設定語音名稱
            speechConfig = this.SetVoiceName(recognizeBM.Language, speechConfig);

            return(speechConfig);
        }
        /// <summary>
        /// 辨識輸入語音為文字
        /// </summary>
        /// <param name="recognizeBM">語音辨識基本設定用</param>
        /// <returns>辨識後的文字</returns>
        public async Task <string> SpeakToText(RecognizeBM recognizeBM)
        {
            // 設定語音服務設定
            var config = this.GetSpeechConfig(recognizeBM);

            // 建立語音辨識器類別
            using (var recognizer = new SpeechRecognizer(config))
            {
                // RecognizeOnceAsync 此方法 僅適用於單個語音識別,如命令或查詢,輸入時間小於 15 秒
                // 如果需要長時間運行的多話語識別,請改用 StartContinuousRecognitionAsync(),
                // 輸入時間大於 15 秒
                var result = await recognizer.RecognizeOnceAsync();

                // 判斷回傳執行結果狀態
                this.CheckReason(result);

                return(recognizeText);
            }
        }
Пример #4
0
        /// <summary>
        /// 執行文字轉語音
        /// </summary>
        /// <param name="recognizeBM">語音辨識設定</param>
        /// <param name="keyWord">切換 手動/語音模式 關鍵字</param>
        /// <param name="modeStatus">模式狀態</param>
        /// <returns></returns>
        private async static Task <bool> StartTextToSpeak(
            RecognizeBM recognizeBM, string keyWord, bool modeStatus)
        {
            // 輸入關閉或結束,結束應用程式
            if (recognizeBM.Text.Contains("關閉") || recognizeBM.Text.Contains("結束"))
            {
                Console.WriteLine("應用程式結束,請輸入任意鍵繼續...");
                Console.ReadLine();
                Environment.Exit(0);
            }

            // 執行文字轉語音
            await speechService.TextToSpeak(recognizeBM);

            if (recognizeBM.Text.Contains(keyWord) || recognizeBM.Text == "切換")
            {
                return(!modeStatus);
            }

            return(modeStatus);
        }
Пример #5
0
        static async Task Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("模式切換方式如下:");
            Console.WriteLine("語音輸入模式下,說出 手動輸入 或 切換,即切換為手動輸入模式");
            Console.WriteLine("手動輸入模式下,輸入 語音輸入 或 切換,即切換為語音輸入模式");
            Console.WriteLine("任一模式下,輸入 關閉 或 結束,即結束應用程式");
            Console.ForegroundColor = ConsoleColor.White;

            // 實體化 語音辨識 服務
            speechService = new SpeechService();

            // 實體化 語音辨識基本設定用 BM
            var recognizeBM = new RecognizeBM();

            // 要辨識的語言
            recognizeBM.Language = "zh-TW";

            Console.WriteLine("輸入帳戶金鑰:");

            // 取得金鑰
            recognizeBM.Subkey = Console.ReadLine();

            // 取得服務端點位置,免費試用帳戶都為 westus
            recognizeBM.Region = "westus";

            // 預設程式啟動提示訊息
            recognizeBM.Text = "語音服務啟動";

            try
            {
                // 執行文字轉語音
                await speechService.TextToSpeak(recognizeBM);

                // 用來切換模式的 flag
                var isTextMode = false;

                while (true)
                {
                    if (isTextMode)
                    {
                        Console.WriteLine("手動輸入:");

                        // 取得輸入文字
                        recognizeBM.Text = Console.ReadLine();

                        // 執行文字轉語音
                        isTextMode = await StartTextToSpeak(recognizeBM, "語音輸入", isTextMode);
                    }
                    else
                    {
                        Console.WriteLine("語音輸入:");

                        // 取得輸入文字
                        recognizeBM.Text = await speechService.SpeakToText(recognizeBM);

                        // 執行文字轉語音
                        isTextMode = await StartTextToSpeak(recognizeBM, "手動輸入", isTextMode);
                    }
                }
            }
            catch
            {
                Console.WriteLine("應用程式執行失敗,請重新執行");
                Console.ReadLine();
            }
        }