在Azure上调用SpeechAPI进行文本到语音转换

时间:2016-03-13 00:27:23

标签: c# azure microsoft-speech-api

我在本地服务器上运行以下非常基本的TTS代码

using System.Speech.Synthesis;
...
SpeechSynthesizer reader = new SpeechSynthesizer();
reader.Speak("This is a test");

此代码依赖于System.Speech,我在VS 2015项目中添加了一个Reference。 工作正常,但从我读过的和尝试它我知道这在代码托管在Azure上时将无法正常工作。 如果实际上可以在天蓝色上进行TTS,我已经阅读了几篇有关SO查询的帖子。当然2年前它似乎不可能。 How to get System.Speech on windows azure websites?

所有道路似乎都会导致Microsoft Speech API https://azure.microsoft.com/en-gb/marketplace/partners/speechapis/speechapis/ 我已经注册并获得了我的私钥和密钥来调用此API。 不过我的问题是这个。我如何实际调用SpeechAPI?在上面的简单代码示例中我需要更改什么才能在azure上运行时这样做?

1 个答案:

答案 0 :(得分:2)

您在Azure市场中提到的语音API是名为ProjectOxford的AI Microsoft项目的一部分,该项目提供了一系列用于计算机视觉,语音和语言的API。

这些都是RESTful API,这意味着您将构建HTTP请求以发送到云中的托管在线服务。 语音到文本文档可用here,您可以在github上找到各种客户端的示例代码。特别是对于C#,您可以在this sample project中看到一些代码。

请注意,ProjectOxford仍处于预览状态(Beta)。可以在ProjectOxford MSDN forum上找到对使用这些API的其他支持。

但只是为了让您了解程序的外观(取自github上面的代码示例):

        AccessTokenInfo token;

        // Note: Sign up at http://www.projectoxford.ai for the client credentials.
        Authentication auth = new Authentication("Your ClientId goes here", "Your Client Secret goes here");

        ... 

        token = auth.GetAccessToken();

        ...

        string requestUri = "https://speech.platform.bing.com/synthesize";

        var cortana = new Synthesize(new Synthesize.InputOptions()
        {
            RequestUri = new Uri(requestUri),
            // Text to be spoken.
            Text = "Hi, how are you doing?",
            VoiceType = Gender.Female,
            // Refer to the documentation for complete list of supported locales.
            Locale = "en-US",
            // You can also customize the output voice. Refer to the documentation to view the different
            // voices that the TTS service can output.
            VoiceName = "Microsoft Server Speech Text to Speech Voice (en-US, ZiraRUS)",
            // Service can return audio in different output format. 
            OutputFormat = AudioOutputFormat.Riff16Khz16BitMonoPcm,
            AuthorizationToken = "Bearer " + token.access_token,
        });

        cortana.OnAudioAvailable += PlayAudio;
        cortana.OnError += ErrorHandler;
        cortana.Speak(CancellationToken.None).Wait();