我对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〜25秒后Lex服务器将返回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库。
亚马逊Lex希望音频采用PCM或Opus格式(有关详细信息,请阅读此documentation)。您可以从亚马逊中引用此AI blog post以获取有关如何对您的wav音频进行PCM编码的更多信息。
对于c#,AWSSDk中似乎存在某种问题 - 发生的事情是Lex服务返回了纯文本错误消息,并且SDK正试图将其解析为JSON。有时您可以深入了解异常详细信息并找到原始响应,或者只使用Fiddler。