C# 如何使语音合成器通过特定设备讲话?

C# 如何使语音合成器通过特定设备讲话?,c#,speech-recognition,text-to-speech,speechsynthesizer,C#,Speech Recognition,Text To Speech,Speechsynthesizer,我是语音识别的新手,所以如果问题是非常基本的,请原谅 我的应用程序通过麦克风捕捉我所说的内容。对于我说的每个命令,我都使用我的c代码编写了一些响应,SpeechSynthesizer使用下面提到的代码来做这些,没有任何问题。 但是我希望SpeechSynthesis通过我的笔记本电脑扬声器而不是我的默认输入设备麦克风做出回应。这可行吗 下面给出了我当前使用的代码。我正在寻找的东西,可以得到所有的播放设备可用,然后选择和发言回使用我的扬声器 public void SpeakTheText(str

我是语音识别的新手,所以如果问题是非常基本的,请原谅

我的应用程序通过麦克风捕捉我所说的内容。对于我说的每个命令,我都使用我的c代码编写了一些响应,SpeechSynthesizer使用下面提到的代码来做这些,没有任何问题。 但是我希望SpeechSynthesis通过我的笔记本电脑扬声器而不是我的默认输入设备麦克风做出回应。这可行吗

下面给出了我当前使用的代码。我正在寻找的东西,可以得到所有的播放设备可用,然后选择和发言回使用我的扬声器

public void SpeakTheText(string text)
{
    SpeechInput = text;
    SpeechSynthesizer _synthesizer = new SpeechSynthesizer();
    _synthesizer.SelectVoiceByHints(VoiceGender.Male);
    _synthesizer.SetOutputToDefaultAudioDevice();//Microphone
    _synthesizer.SpeakAsync(SpeechInput);                       
}

您可以使用System.Media.SoundPlayer类从流中输出音频。请参见下面的示例

我不确定SoundPlayer是否可以指定输出设备,但它应该使用默认的输出设备进行输出。

看看,它已经实现了此功能。您可以查看它们的实现,并复制所需的代码或克隆/获取包

根据实现,您可以简单地在其上循环

[TestFixture]
public class DirectSoundTests
{
    [Test]
    [Category("IntegrationTest")]
    public void CanEnumerateDevices()
    {
        foreach(var device in DirectSoundOut.Devices)
        {
             Debug.WriteLine(String.Format("{0} {1} {2}", device.Description, device.ModuleName, device.Guid));
         }
      }
}
基于-控制面板决定您的音频输出-不应该是麦克风-应该是带有扬声器的音频设备。。确保已在控制面板中配置并测试了该选项

[TestFixture]
public class DirectSoundTests
{
    [Test]
    [Category("IntegrationTest")]
    public void CanEnumerateDevices()
    {
        foreach(var device in DirectSoundOut.Devices)
        {
             Debug.WriteLine(String.Format("{0} {1} {2}", device.Description, device.ModuleName, device.Guid));
         }
      }
}