如何获取语音数据

本文关键字:语音 数据 获取 何获取 | 更新日期: 2023-09-27 18:16:27

在我的程序中,我可以使用用户的声音输入词汇、文本、单词等。但是,有什么方法可以得到用户声音的音高吗?我用c#使用windows语音API。

下面是我用来获取语音数据的代码的一部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.Windows.Forms;
using System.IO;
namespace Speech_Recognizer
{
    public class RecognizeSpeech
    {
        private SpeechRecognitionEngine sEngine; //Speech recognition engine
        private SpeechSynthesizer sSpeak; //Speech synthesizer
        string text3 = "";
        public RecognizeSpeech()
        {
            //Make the recognizer ready
            sEngine = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US"));

            //Load grammar
            Choices sentences = new Choices();
            sentences.Add(new string[] { "I am hungry" });
            GrammarBuilder gBuilder = new GrammarBuilder(sentences);
            Grammar g = new Grammar(gBuilder);
            sEngine.LoadGrammar(g);
            //Add a handler
            sEngine.SpeechRecognized +=new EventHandler<SpeechRecognizedEventArgs>(sEngine_SpeechRecognized);

            sSpeak = new SpeechSynthesizer();
            sSpeak.Rate = -2;

            //Computer speaks the words to get the phones
            Stream stream = new MemoryStream();
            sSpeak.SetOutputToWaveStream(stream);

            sSpeak.Speak("I was hungry");
            stream.Position = 0;
            sSpeak.SetOutputToNull();

            //Configure the recognizer to stream
            sEngine.SetInputToWaveStream(stream);
            sEngine.RecognizeAsync(RecognizeMode.Single);

        }

        //Start the speech recognition task
        private void sEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            string text = "";
            if (e.Result.Text == "I am hungry")
            {
                foreach (RecognizedWordUnit wordUnit in e.Result.Words)
                {
                    text = text + wordUnit.Pronunciation + "'n";
                }
                MessageBox.Show(e.Result.Text + "'n" + text);
            }

        }
    }
}

可以看到,SpeechSynthesizer可以设置和获取语音速率、声音等,如何从用户的语音中获取音高?还有什么我可以了解的吗?

如何获取语音数据

不,Microsoft SR引擎不返回用户声音的音高数据。