【问题标题】:sending an AJAX request for an audio blob to an async API将音频 blob 的 AJAX 请求发送到异步 API
【发布时间】:2019-07-30 20:49:15
【问题描述】:

我正在处理一个遗留系统,我正在尝试调用一个 HTTP 处理程序,我已经添加了一些从 Azure 服务检索音频 blob 的逻辑。 问题是,我似乎无法将内容返回给客户端,因此我可以播放它。 我从 jQuery 调用中得到的响应是: "System.Threading.Tasks.Task`1[System.String]"

这是processRequest代码:

public void ProcessRequest(HttpContext context)
    {
        var text = "walk";
        Authentication auth = new Authentication("subscriptionID");
        context.Response.Write(auth.getVoice(text));
    }

getVoice 函数如下:

 public async Task<string> getVoice(string text)
    {
        using (var client = new HttpClient())
        {
            try
            {
                client.DefaultRequestHeaders
                    .Add("User-Agent", "uagent");
                client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + this.token);
                client.DefaultRequestHeaders.Add("host", "westeurope.tts.speech.microsoft.com");
                client.DefaultRequestHeaders.Add("X-MICROSOFT-OutputFormat", "audio-16khz-32kbitrate-mono-mp3");
                UriBuilder uriBuilder = new UriBuilder(VoiceUri);
                // send xml post 
                var voiceTest = "<speak version='1.0' xml:lang='en-US'><voice xml:lang='en-US' xml:gender='Female'\n\rname='Microsoft Server Speech Text to Speech Voice (en-US, ZiraRUS)'>\n\rWalk\n\r</voice></speak>";
                var data = new StringContent(voiceTest, Encoding.UTF8, "application/xml");
                data.Headers.ContentType = new MediaTypeHeaderValue("application/ssml+xml");
                var result = await client.PostAsync(uriBuilder.Uri.AbsoluteUri, data);
                return await result.Content.ReadAsStringAsync();
            }
            catch (Exception e)
            {

                return null;
            }
        }

服务器 API 调用成功,但我似乎无法在客户端接收它以便之后将其播放给用户。

【问题讨论】:

    标签: javascript c# jquery ajax azure-cognitive-services


    【解决方案1】:

    您必须解开auth.getVoice 的结果。您可以使用await 关键字来完成。您还需要您的处理程序来实现 HttpTaskAsyncHandler 类以使其工作

    public class TestHandler : HttpTaskAsyncHandler
    {
        public async override Task ProcessRequestAsync(HttpContext context)
        {
            var text = "walk";
            Authentication auth = new Authentication("subscriptionID");
            context.Response.Write(await auth.getVoice(text)); //added await here
        }
    //..
    }
    

    【讨论】:

    • 好的,代码更改允许我接收 blob 数据,但我仍然不知道如何播放它。我正在尝试使用音频元素,但到目前为止没有成功。
    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多