【发布时间】:2021-06-07 10:21:50
【问题描述】:
文本到语音自定义 Web API 我已经使用邮递员进行了测试,该邮递员能够在本地返回 Memorystream 并能够播放音频。 但在 Azure 中托管后无法返回 Memorystream,出现 502 错误。
我会将响应放在 Audio HTML 标签的 src 中。 enter image description here
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Speech.Synthesis;
using System.Globalization;
using System.Net.Http.Headers;
using System.Web;
namespace WebApplication4.Controllers
{
public class TextToSpeechController : ApiController
{
[System.Web.Http.Route("GetVoice/{Text}")]
[HttpGet]
public HttpResponseMessage Get(string Text)
{
//AudioStreem au = new AudioStreem();
try
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
var audioStream = GetAudio(Text);
audioStream.Position = 0;
response.Content = new StreamContent(audioStream);
response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("audio/wav");
return response;
}
catch (Exception ex)
{
var res = new HttpResponseMessage();
res.StatusCode = HttpStatusCode.BadRequest;
return res; ;
}
}
private static MemoryStream GetAudio(string input)
{
MemoryStream audioStream = new MemoryStream();
var t = new System.Threading.Thread(new System.Threading.ThreadStart(() =>
{
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
synthesizer.SetOutputToDefaultAudioDevice();
synthesizer.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Teen, 0, CultureInfo.GetCultureInfo("en-gb"));
synthesizer.SetOutputToWaveStream(audioStream);
//add a space between all characters to spell it out.
//string val = String.Join<char>(" ", input);
synthesizer.Speak(input);
}));
t.Start();
t.Join();
return audioStream;
}
}
}
【问题讨论】:
-
查询应用日志后,尝试解决。后来,我找到了权限问题。我建议你可以使用cognitive-services来实现你想要的功能,或者使用vm来部署你的程序。根据自己的实际情况选择。
-
我的回答对你有用吗?
标签: c# asp.net-web-api azure-web-app-service text-to-speech