How to create a custom voice for use with System.Speech.dll?

Siddharth Jain 1 Reputation point
2024-07-24T21:42:55.72+00:00

How can I create a custom voice that I can then use with the Speech Synthesizer that comes with System.Speech.dll? Please provide me with step by step instructions.

.NET
.NET
Microsoft Technologies based on the .NET software framework.
3,918 questions
{count} votes

2 answers

Sort by: Most helpful
  1. Jiale Xue - MSFT 46,456 Reputation points Microsoft Vendor
    2024-07-25T07:52:42.4633333+00:00

    Hi @siddharth jain , Welcome to Microsoft Q&A,

    The class scope SpeechSynthesizer object enables the application to have the ability to read aloud. The SpeechRecognitionEngine object enables the application to listen and recognize spoken words or phrases.

    Microsoft has a corresponding tutorial for the System.Speech.dll: https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/december/voice-recognition-speech-recognition-with-net-desktop-applications

    using System;
    using Microsoft.Speech.Recognition;
    using Microsoft.Speech.Synthesis;
    using System.Globalization;
    namespace ConsoleSpeech
    {
      class ConsoleSpeechProgram
      {
        static SpeechSynthesizer ss = new SpeechSynthesizer();
        static SpeechRecognitionEngine sre;
        static bool done = false;
        static bool speechOn = true;
        static void Main(string[] args)
        {
          try
          {
            ss.SetOutputToDefaultAudioDevice();
            Console.WriteLine("\n(Speaking: I am awake)");
            ss.Speak("I am awake");
            CultureInfo ci = new CultureInfo("en-us");
            sre = new SpeechRecognitionEngine(ci);
            sre.SetInputToDefaultAudioDevice();
            sre.SpeechRecognized += sre_SpeechRecognized;
            Choices ch_StartStopCommands = new Choices();
            ch_StartStopCommands.Add("speech on");
            ch_StartStopCommands.Add("speech off");
            ch_StartStopCommands.Add("klatu barada nikto");
            GrammarBuilder gb_StartStop = new GrammarBuilder();
            gb_StartStop.Append(ch_StartStopCommands);
            Grammar g_StartStop = new Grammar(gb_StartStop);
            Choices ch_Numbers = new Choices();
            ch_Numbers.Add("1");
            ch_Numbers.Add("2");
            ch_Numbers.Add("3");
            ch_Numbers.Add("4");
            GrammarBuilder gb_WhatIsXplusY = new GrammarBuilder();
            gb_WhatIsXplusY.Append("What is");
            gb_WhatIsXplusY.Append(ch_Numbers);
            gb_WhatIsXplusY.Append("plus");
            gb_WhatIsXplusY.Append(ch_Numbers);
            Grammar g_WhatIsXplusY = new Grammar(gb_WhatIsXplusY);
            sre.LoadGrammarAsync(g_StartStop);
            sre.LoadGrammarAsync(g_WhatIsXplusY);
            sre.RecognizeAsync(RecognizeMode.Multiple);
            while (done == false) { ; }
            Console.WriteLine("\nHit <enter> to close shell\n");
            Console.ReadLine();
          }
          catch (Exception ex)
          {
            Console.WriteLine(ex.Message);
            Console.ReadLine();
          }
        } // Main
        static void sre_SpeechRecognized(object sender,
          SpeechRecognizedEventArgs e)
        {
          string txt = e.Result.Text;
          float confidence = e.Result.Confidence;
          Console.WriteLine("\nRecognized: " + txt);
          if (confidence < 0.60) return;
          if (txt.IndexOf("speech on") >= 0)
          {
            Console.WriteLine("Speech is now ON");
            speechOn = true;
          }
          if (txt.IndexOf("speech off") >= 0)
          {
            Console.WriteLine("Speech is now OFF");
            speechOn = false;
          }
          if (speechOn == false) return;
          if (txt.IndexOf("klatu") >= 0 && txt.IndexOf("barada") >= 0)
          {
            ((SpeechRecognitionEngine)sender).RecognizeAsyncCancel();
            done = true;
            Console.WriteLine("(Speaking: Farewell)");
            ss.Speak("Farewell");
          }
          if (txt.IndexOf("What") >= 0 && txt.IndexOf("plus") >= 0)
          {
            string[] words = txt.Split(' ');
            int num1 = int.Parse(words[2]);
            int num2 = int.Parse(words[4]);
            int sum = num1 + num2;
            Console.WriteLine("(Speaking: " + words[2] + " plus " +
              words[4] + " equals " + sum + ")");
            ss.SpeakAsync(words[2] + " plus " + words[4] +
              " equals " + sum);
          }
        } // sre_SpeechRecognized
      } // Program
    } // ns
    

    Best Regards,

    Jiale


    If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment". 

    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.


  2. James Wood 0 Reputation points
    2024-07-26T07:54:13.5633333+00:00

    I think so premier adobe audio is one of the best solution. Thanks

    0 comments No comments

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.