none
Text-to-Speach - Beispielcode funktioniert nicht RRS feed

  • Frage

  • Ich habe den Code von hier zum erhalten eines Tokens (C#) versucht:

    https://docs.microsoft.com/de-de/azure/cognitive-services/speech-service/rest-text-to-speech

    Leider kommt keine Rückmeldung beim Aufurf der Zeile:

    var result = await client.PostAsync(uriBuilder.Uri.AbsoluteUri, null);

    Beim Aufurf von

    https://westus.api.cognitive.microsoft.com/sts/v1.0/issueToken

    Es kommt der 404 Fehler, habe eher mit was anderem gerechnet und frage mich ob die Urls stimmen!?


    Sonntag, 5. Januar 2020 18:07

Antworten

  • Moin,

    ich möchte Dir nicht das Herz brechen, aber der folgende Code als einfache C#-Konsolen-App gibt den Token aus:

    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    
    namespace ConsoleApp3
    {
    
        public class Authentication
        {
            public static readonly string FetchTokenUri = "https://westeurope.api.cognitive.microsoft.com/sts/v1.0/issuetoken";
            private string subscriptionKey;
            private string token;
    
            public Authentication(string subscriptionKey)
            {
                this.subscriptionKey = subscriptionKey;
                this.token = FetchTokenAsync(FetchTokenUri, subscriptionKey).Result;
            }
    
            public string GetAccessToken()
            {
                return this.token;
            }
    
            private async Task<string> FetchTokenAsync(string fetchUri, string subscriptionKey)
            {
                using (var client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
                    UriBuilder uriBuilder = new UriBuilder(fetchUri);
    
                    var result = await client.PostAsync(uriBuilder.Uri.AbsoluteUri, null);
                    Console.WriteLine("Token Uri: {0}", uriBuilder.Uri.AbsoluteUri);
                    return await result.Content.ReadAsStringAsync();
                }
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Authentication auth = new Authentication("<KEY AUS PORTAL>");
                Console.WriteLine(auth.GetAccessToken());
            }
        }
    }


    Evgenij Smirnov

    http://evgenij.smirnov.de


    Montag, 6. Januar 2020 18:17
  • Herz hast mir nicht gebrochen, bin aber nun so richtig verwirrt!?

    1. Windos Forms = Passiert gar nichts nach dem PostAsync

    2. PowerShell = 401 (dies wohlgemerkt auf 2 Rechnern sogar getestet)

    3. Konsolen-App = ich bekomme einen Token

    Ich habe 1. nach 3. kopiert.

    Also das das bisher kurioseste was ich bisher je hatte. Wollte das eigentlich in Windows Form machen, aber geht auch als Konsolen-App.

    Danke

    Dienstag, 7. Januar 2020 11:39

Alle Antworten

  • Moin,

    ist Deine Subscription denn auch für US West?

    Im Sommer hat das noch wie beschrieben funktioniert :-) Seitdem wurde zwar Bing Speech abgeschaltet, aber die Speech API ist ja ein anderer Dienst...


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Sonntag, 5. Januar 2020 18:20
  • Hallo,ist egal welche API Url ich nutze, bei allen das gleiche, aber es ist diese, die mir angezeigt werden bei den Keys die ich nutzen kann:

    Unified Speech Services for free trials on Azure.com. 5,000 transactions per month, 20 per minute. Trial keys will expire after a 30 day period, after which you can create a Cognitive Services account on Azure portal. As part of the bundle, this trial only includes the following: Speech-to-Text, Text-to-Speech, Speech Translation.

    Endpoint: https://westus.api.cognitive.microsoft.com/sts/v1.0

    Key 1: XXXXXXXXXXXXXXXXXXXX

    Key 2: XXXXXXXXXXXXXXXX

    Sonntag, 5. Januar 2020 19:55
  • Moin,

    also der folgende PowerShell-Code hat ein valides OAuthToken zurückgeliefert:

    $FetchTokenHeader = @{
      'Content-type'='application/x-www-form-urlencoded';
      'Content-Length'= '0';
      'Ocp-Apim-Subscription-Key' = 'Key aus dem Portal'
    }
    $OAuthToken = Invoke-RestMethod -Method POST -Uri https://westeurope.api.cognitive.microsoft.com/sts/v1.0/issuetoken -Headers $FetchTokenHeader
    $OAuthToken


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Sonntag, 5. Januar 2020 20:15
  • Danke, da bekomme ich wenigstens 401, aber wieso ist mein Key falsch, das habe ich doch direkt von der Seite kopiert, weder Key1 noch key2 geht :(

    Und wieso bekomme ich über C# gar keine Rückantwort, selbst nach Minuten tut sich nichts!?

    Das grade echt frustrierend :(

    Montag, 6. Januar 2020 17:35
  • Danke, da bekomme ich wenigstens 401, aber wieso ist mein Key falsch, das habe ich doch direkt von der Seite kopiert, weder Key1 noch key2 geht :(

    Vermutlich falsche Region, sagt ja auch die Fehlermeldung. Check nochmal im Portal, wo die entsprechende Resource Group liegt.

    Evgenij Smirnov

    http://evgenij.smirnov.de

    Montag, 6. Januar 2020 18:05
  • Moin,

    ich möchte Dir nicht das Herz brechen, aber der folgende Code als einfache C#-Konsolen-App gibt den Token aus:

    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    
    namespace ConsoleApp3
    {
    
        public class Authentication
        {
            public static readonly string FetchTokenUri = "https://westeurope.api.cognitive.microsoft.com/sts/v1.0/issuetoken";
            private string subscriptionKey;
            private string token;
    
            public Authentication(string subscriptionKey)
            {
                this.subscriptionKey = subscriptionKey;
                this.token = FetchTokenAsync(FetchTokenUri, subscriptionKey).Result;
            }
    
            public string GetAccessToken()
            {
                return this.token;
            }
    
            private async Task<string> FetchTokenAsync(string fetchUri, string subscriptionKey)
            {
                using (var client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
                    UriBuilder uriBuilder = new UriBuilder(fetchUri);
    
                    var result = await client.PostAsync(uriBuilder.Uri.AbsoluteUri, null);
                    Console.WriteLine("Token Uri: {0}", uriBuilder.Uri.AbsoluteUri);
                    return await result.Content.ReadAsStringAsync();
                }
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Authentication auth = new Authentication("<KEY AUS PORTAL>");
                Console.WriteLine(auth.GetAccessToken());
            }
        }
    }


    Evgenij Smirnov

    http://evgenij.smirnov.de


    Montag, 6. Januar 2020 18:17
  • Herz hast mir nicht gebrochen, bin aber nun so richtig verwirrt!?

    1. Windos Forms = Passiert gar nichts nach dem PostAsync

    2. PowerShell = 401 (dies wohlgemerkt auf 2 Rechnern sogar getestet)

    3. Konsolen-App = ich bekomme einen Token

    Ich habe 1. nach 3. kopiert.

    Also das das bisher kurioseste was ich bisher je hatte. Wollte das eigentlich in Windows Form machen, aber geht auch als Konsolen-App.

    Danke

    Dienstag, 7. Januar 2020 11:39