C# Azure认知服务-语音到文本:未检测到麦克风

C# Azure认知服务-语音到文本:未检测到麦克风,c#,wpf,.net-5,azure-cognitive-services,azure-speech,C#,Wpf,.net 5,Azure Cognitive Services,Azure Speech,问题:为什么以下代码未检测到Windows 10上的麦克风?没有代码,麦克风工作正常,我可以通过单击窗口键+H使用它。我可以在上面发言,它可以把我的演讲稿写进任何聚焦的文本编辑器。因此,在下面的代码中,我想知道我可能遗漏了什么,我们如何修复它 详细信息:在我的WPF.NET 5应用程序中,我遵循Microsoft教程的从麦克风识别部分。他们使用的是控制台应用程序,我使用的是WPF应用程序。如前所述,我创建了一个Azure语音服务资源,并在下面的代码中输入了订阅密钥和区域 当我运行应用程序时,如下

问题:为什么以下代码未检测到Windows 10上的麦克风?没有代码,麦克风工作正常,我可以通过单击
窗口键+H
使用它。我可以在上面发言,它可以把我的演讲稿写进任何聚焦的文本编辑器。因此,在下面的代码中,我想知道我可能遗漏了什么,我们如何修复它

详细信息:在我的
WPF.NET 5
应用程序中,我遵循Microsoft教程的
从麦克风识别部分。他们使用的是控制台应用程序,我使用的是WPF应用程序。如前所述,我创建了一个Azure语音服务资源,并在下面的代码中输入了订阅密钥和区域

当我运行应用程序时,如下图所示,可以确认屏幕上没有麦克风。通常,当它打开时,它会显示在屏幕顶部。但在一些罕见的情况下,你会在窗口的右下角看到它的图标——点击它,你可以把它带到顶部并开始说话

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        SpeechConfig speechConfig = SpeechConfig.FromSubscription("IEnteredMyAzureCognitiveServiceSubscriptionKeyHere", "eastus");
        _ = FromMic(speechConfig);
    }

    async static Task FromMic(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
        using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);

        MessageBox.Show("Speak into your microphone.");
        var result = await recognizer.RecognizeOnceAsync();
        System.Diagnostics.Debug.WriteLine($"RECOGNIZED: Text={result.Text}");
    }
}

更新

在我将两个代码行从构造函数移动到按钮点击(…)事件之后,如下所示,然后在点击按钮之后,我确实看到了windows任务栏右下角的麦克风图标。但是,当我单击该图标时,它会打开以下设置窗口,而不是打开麦克风。但这并没有帮助,因为我需要打开麦克风,让用户开始对它说话:

private async void btnRecogSpeech_Click(object sender, RoutedEventArgs e)
{
    SpeechConfig speechConfig = SpeechConfig.FromSubscription("My subscription key here", "eastus");
    await FromMic(speechConfig);
}

在给定的代码示例中,您没有在等待任务,这可能就是为什么您的程序刚刚退出,并且您没有看到程序输出的转录本的原因。请尝试以下操作:

    public MainWindow()
    {
        InitializeComponent();
        SpeechConfig speechConfig = SpeechConfig.FromSubscription("IEnteredMyAzureCognitiveServiceSubscriptionKeyHere", "eastus");
        await FromMic(speechConfig);
    }

另外,请在此处查看Azure Speech SDK快速入门:

您需要在设置应用程序中向下滚动,并授予应用程序打开麦克风的权限


一旦你做到了这一点,你的应用程序将能够访问麦克风,你将能够取得进展。

你不能在构造函数中等待
,因为它不能被取消异步。异步加载的事件处理程序可以工作。@Clemens在阅读您的评论后,我刚刚在帖子中添加了一个更新部分-以防您或其他人有任何建议。FromMic应该等待,例如在异步加载的事件处理程序中:
Loaded+=async(s,e)=>await FromMic(speechConfig)上面我文章第二张截图的下半部分显示了可以访问麦克风的应用程序列表。列出的应用程序包括:
Microsoft Edge、语音识别、语音运行时可执行文件、语音UX配置、MyWPFApp4Speech2TextTEST。
这些应用程序都没有任何其他选项(按钮、右键单击菜单等)可用于进一步配置。因此,我假设所有这些应用程序,包括我的(列表中最后一个)都有使用麦克风的权限。您可以通过单击Windows设置主页上的
隐私
链接进入该设置。并且上述设置窗口的
允许桌面应用程序访问您的麦克风
部分下的选项按钮被打开。我在上面的评论中列出的应用程序列在本节下面。我还试着以管理员身份运行
VS2019
,但仍然没有成功。