如何让 SpeechSynthesizer 通过特定设备说话?

How can I make the SpeechSynthesizer speak through a particular device?

我是语音识别的新手,所以如果问题很基础,请原谅。

我的应用程序会捕捉我通过麦克风说的话。我已经使用我的 c# 代码为我说的每个命令编写了一些响应,并且 SpeechSynthesizer 使用下面提到的代码没有任何问题地做到了这一点。 但我希望 SpeechSynthesizer 通过我的笔记本电脑扬声器而不是我的默认输入设备(我的麦克风)做出回应。可行吗?

我目前使用的代码如下。我正在寻找可以让所有播放设备可用然后 select 并使用我的扬声器回复的东西。

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

您可以使用 System.Media.SoundPlayer class 从流中输出音频。请参阅 MSDN

中的示例
public void SpeakTheText(string text)
{  
    // Initialize a new instance of the speech synthesizer.  
    using (SpeechSynthesizer synth = new SpeechSynthesizer())  
    using (MemoryStream streamAudio = new MemoryStream())  
    {  
        // Create a SoundPlayer instance to play the output audio file.  
        System.Media.SoundPlayer m_SoundPlayer = new System.Media.SoundPlayer();  
        // Set voice to male
        synth.SelectVoiceByHints(VoiceGender.Male);
        // Configure the synthesizer to output to an audio stream.  
        synth.SetOutputToWaveStream(streamAudio);  

        // Speak a phrase.  
        synth.Speak(text);  
        streamAudio.Position = 0;  
        m_SoundPlayer.Stream = streamAudio;  
        m_SoundPlayer.Play();  

        // Set the synthesizer output to null to release the stream.   
        synth.SetOutputToNull();  

        // Insert code to persist or process the stream contents here.  
    }
}

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

查看 NAudio, it has implemented this feature. You can have a look at the implementation on their GIT 实现并复制您需要的代码或克隆/获取程序包。

根据实现,您可以简单地遍历它们

[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));
         }
      }
}

基于 Microsoft docs for the method - 控制面板决定了你的音频输出 - 它不应该是麦克风 - 它应该是带扬声器的音频设备..确保你已经配置好了 - 并且在控制面板中测试