我必须使用来自ReadSpeaker的TTS(文本说话)SaaS才能将音频添加到我正在开发的应用程序中。
现在我们当前使用的基本SCAPI帐户有一个基本设置,您只需设置一个URL并获取我们需要输出的MP3流。由于服务密钥位于URL中,因此我们无法在前端使用它,因此我们需要通过服务器传输文件。
在我测试Samsung 6S上的开发代码之前,一切正常。如果它根本没有播放,那么服务自己的链接工作,即这有效:
<audio controls>
<source
src="http://tts.readspeaker.com/a/speak?key=[ServiceKey]&lang=en_uk&voice=Female01&audioformat=mp3&volume=200&text=test text 2"
type="audio/mp3">
Your browser does not support the audio element.
</audio>
虽然通过我们的服务器完全相同的代码不在Samsung 6S上,而且链接与控制器中的流源相同。
我已经通过几种不同的方式在服务器上传输文件,但每次都在三星6S(全新的开箱即用的无模块)中完全平放。
这是我用过的代码。
无效控制器:
string url = "http://tts.readspeaker.com/a/speak?key=[ServiceKey]&lang=en_uk&voice=Female01&audioformat=mp3&volume=200&text=test text 2";
HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)HttpWRequest.GetResponse();
Stream stream = response.GetResponseStream();
MemoryStream ms = new MemoryStream();
stream.CopyTo(ms);
Response.AddHeader("Content-Type", response.ContentType);
Response.AddHeader("Content-Length", response.ContentLength.ToString());
Response.AddHeader("Access-Control-Allow-Origin", "*");
Response.AddHeader("Connection", "close");
Response.Flush();
audioData = ms.ToArray();
Response.BinaryWrite(audioData);
Response.End();
标准FileStreamResult
我在其中使用上面的代码的MemoryStream并通过它发送,即使用FileStreamResult控制器而不是手动设置标头:
return new FileStreamResult(ms, response.ContentType);
和even a modified FileStreamResult I found here,允许实际流式传输网址,而无需将其下载到服务器。
我也使用此方法从ReadSpeaker获取字节数据:
byte[] audioData;
using (WebClient client = new WebClient())
{
audioData = client.DownloadData("http://tts.readspeaker.com/a/speak?key=[ServiceKey]&lang=en_uk&voice=Female01&audioformat=mp3&volume=200&text=test text 2");
}
然后无数种方式输出它,但总是结果是一样的,在其他一切工作正常(甚至IE7,不是音频标签,但仍然)但不是三星6S。
我不知道我必须在这里遗漏一些非常基本的东西,因为我尝试的一切都在其他一切上都很好,但在三星6S上什么都没有。即使在像LG G4这样的其他高端机器人上它也可以工作但是在6S上......什么都没有,喷射音频标签中的直接服务链接工作得很好?
所以我知道我在这里做错了什么,有什么想法吗?
答案 0 :(得分:1)
编码似乎很好。
三星拥有自己的TTS,可能会干扰您自己的TTS。您可能想要使用它,卸载它或启用它。 http://www.samsung.com/in/support/skp/htg/16082