You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为.NET Core 2机器人添加语音转文本功能?

没问题!我来帮你把Microsoft Cognitive Services的语音转文本功能集成到你的.NET Core 2 Bot里,结合你提到的那个基础版“Hi there!”机器人示例一步步说明:

1. 安装适配的NuGet包

首先得给项目安装两个关键包,注意要选支持.NET Core 2的版本:

  • 在NuGet包管理器中安装 Microsoft.Bot.Builder(推荐v4.6.x系列,这是适配.NET Core 2的稳定版本)
  • 安装 Microsoft.CognitiveServices.Speech(选v1.15.x及以下版本,新版本不再支持.NET Core 2)

2. 配置语音服务凭证

在项目的appsettings.json里添加你的Azure语音服务密钥和区域信息:

{
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "SpeechServiceKey": "你的Azure语音服务密钥",
  "SpeechServiceRegion": "你的服务区域,比如eastus"
}

3. 修改Bot类,添加语音转文本逻辑

打开你的Bot类(对应基础示例里的EchoBot.cs),先注入配置,再实现语音转文本的核心方法:

注入配置到Bot类

private readonly IConfiguration _configuration;

public EchoBot(IConfiguration configuration)
{
    _configuration = configuration;
}

实现语音转文本方法

private async Task<string> ConvertSpeechToTextAsync(byte[] speechAudio)
{
    // 初始化语音服务配置
    var speechConfig = SpeechConfig.FromSubscription(
        _configuration["SpeechServiceKey"], 
        _configuration["SpeechServiceRegion"]);
    
    // 从内存流加载音频数据
    using var audioConfig = AudioConfig.FromWavFileInput(new MemoryStream(speechAudio));
    using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);
    
    // 执行一次语音识别
    var result = await recognizer.RecognizeOnceAsync();
    
    // 根据识别结果返回对应文本
    switch (result.Reason)
    {
        case ResultReason.RecognizedSpeech:
            return result.Text;
        case ResultReason.NoMatch:
            return $"语音识别失败:{NoMatchDetails.FromResult(result).Reason}";
        case ResultReason.Canceled:
            var cancellation = CancellationDetails.FromResult(result);
            return $"语音识别被取消:{cancellation.Reason},错误信息:{cancellation.ErrorDetails}";
        default:
            return "无法识别语音内容";
    }
}

4. 处理用户发送的语音消息

在OnTurnAsync方法里,增加对语音附件的判断和处理逻辑,替换原来的文本消息处理部分:

public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
{
    if (turnContext.Activity.Type == ActivityTypes.Message)
    {
        string messageContent = string.Empty;
        
        // 检查消息是否包含语音附件(通常是audio/wav格式)
        var speechAttachment = turnContext.Activity.Attachments?.FirstOrDefault(a => a.ContentType.StartsWith("audio/"));
        if (speechAttachment != null)
        {
            // 下载语音附件的二进制数据
            using var httpClient = new HttpClient();
            var audioStream = await httpClient.GetStreamAsync(speechAttachment.ContentUrl);
            using var memoryStream = new MemoryStream();
            await audioStream.CopyToAsync(memoryStream);
            var audioBytes = memoryStream.ToArray();
            
            // 调用语音转文本方法
            messageContent = await ConvertSpeechToTextAsync(audioBytes);
            await turnContext.SendActivityAsync(MessageFactory.Text($"我识别到你说的是:{messageContent}"), cancellationToken);
        }
        else
        {
            // 保留原来的文本消息处理逻辑
            messageContent = turnContext.Activity.Text;
            var responseText = $"你说的是:{messageContent}";
            await turnContext.SendActivityAsync(MessageFactory.Text(responseText, responseText), cancellationToken);
        }
    }
    else
    {
        await turnContext.SendActivityAsync(MessageFactory.Text($"收到了{turnContext.Activity.Type}类型的消息"), cancellationToken);
    }
}

几个关键注意点

  • 确保你已经在Azure门户创建了语音服务资源,并且密钥和区域配置正确。
  • 聊天客户端(比如Web Chat、Teams)发送的语音必须是符合要求的格式:推荐16kHz采样率、16位单声道的WAV文件,否则识别效果会很差甚至失败。
  • 如果遇到NuGet包版本冲突,优先保证Microsoft.Bot.Builder和Microsoft.CognitiveServices.Speech的版本都支持.NET Core 2。

内容的提问来源于stack exchange,提问作者Parvathy Sarat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:56:24