【问题标题】:Encoding speech input for Amazon Lex?为 Amazon Lex 编码语音输入?
【发布时间】:2017-08-11 12:02:35
【问题描述】:

我在为 Amazon Lex 编码语音输入时遇到问题。

如果我将 InputStream 分配为 null,它会起作用,我会从 Lex 收到默认语音回答:“我能帮你什么忙”

            var amazonLexClient = new AmazonLexClient("APPID", "APPSECRET", Amazon.RegionEndpoint.USEast1);
            var amazonPostRequest = new Amazon.Lex.Model.PostContentRequest();
            var amazonPostResponse = new Amazon.Lex.Model.PostContentResponse();
            amazonPostRequest.BotAlias = "BookTrip";
            amazonPostRequest.BotName = "BookTrip";
            amazonPostRequest.ContentType = "audio/l16; rate=16000; channels=1";
            amazonPostRequest.UserId = "user";
            amazonPostRequest.InputStream = null;

            amazonPostResponse = await amazonLexClient.PostContentAsync(amazonPostRequest);

如果我尝试使用下面的编码(Lex 要求:16KHz,8 位,1 通道)发送录制的语音“你好吗”

            var amazonLexClient = new AmazonLexClient("APPID", "APPSECRET", Amazon.RegionEndpoint.USEast1);
            var amazonPostRequest = new Amazon.Lex.Model.PostContentRequest();
            var amazonPostResponse = new Amazon.Lex.Model.PostContentResponse();
            amazonPostRequest.BotAlias = "BookTrip";
            amazonPostRequest.BotName = "BookTrip";
            amazonPostRequest.ContentType = "audio/l16; rate=16000; channels=1";
            amazonPostRequest.UserId = "user";
            amazonPostRequest.InputStream = new MemoryStream();

            WaveFormat target = new WaveFormat(16000, 8, 1);
            WaveStream streamIn = new WaveFileReader("F:\\Whatever.wav");
            WaveFormatConversionStream str = new WaveFormatConversionStream(target, streamIn);
            WaveFileWriter.WriteWavFileToStream(amazonPostRequest.InputStream, str);

            amazonPostResponse = await amazonLexClient.PostContentAsync(amazonPostRequest);

那就不行了,大约20~25s后Lex server会返回null。

Amazon.Runtime.AmazonUnmarshallingException: 'Error unmarshalling response back from AWS.'
NullReferenceException: Object reference not set to an instance of an object.

谁能告诉我如何对 wav 文件进行编码以使其与 Amazon Lex 一起使用? 顺便说一句,我使用 Visual Studio 2017、C# 和 NAudio 库。

【问题讨论】:

标签: c# amazon-web-services audio-streaming amazon-lex


【解决方案1】:

Amazon Lex 要求音频采用 PCM 或 Opus 格式(阅读此documentation 了解更多详细信息)。您可以参考来自 Amazon 的 AI blog post 以获取有关如何对您的 wav 音频进行 PCM 编码的更多信息。

【讨论】:

    【解决方案2】:

    AWSSDk for c# 内部似乎存在某种问题 - 发生的情况是 Lex 服务返回了纯文本错误消息,并且 SDK 正在尝试将其解析为 JSON。有时您可以深入了解异常细节并找到原始响应,或者只使用 Fiddler。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多