Base64 to mp3 - Problem mit Umlauten

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von TKay, 30. Juni 2024 .

  1. 30. Juni 2024
    Hallo,

    ich versuche seit nun mehreren Stunden mittels Google Text2-Speech einen Ansagetext für einen Anrufbeantworter zu erstellen - im Browser (wenn man Play drückt) klingt es alles wunderbar.
    Nun will ich das gesprochene gern als wav oder mp3-Datei herunterladen um das in der FritzBox als Ansagetext zu verwenden.
    Im Web hab ich nun verschiedene Methoden gefunden das was google als Sample raus wirft zu verarbeiten.
    Einfachste Methode ist in die Entwicklerkonsole vom Browser zu wechseln und den Base64 Code rauszusuchen und diesen dann zu einer wav oder mp3-Datei zu konvertieren.

    Nur leider sind nach der manuellen Konvertierung die Umlaute verschwunden oder das komplette Audio klingt anders bzw. wird anders betont.

    Ihr könnt ja gern mal selbst den Test machen:

    1. Webseite aufrufen: https://cloud.google.com/text-to-speech?hl=de
    2. leicht runterscrollen zur DEMO, wo man Text eingeben kann
    als Text: (nur ein Beispieltext den ich mir gerade ausgedacht hab, damit ein paar Umlaute drin sind)
    Wir sind für Sie morgen wieder verfügbar. Ihre Kürschnerei hat für Sie ab nächster Woche geänderte Öffnungszeiten.

    Sprache: Deutsch
    VoiceType: WaveNet
    VoiceName: de-DE-Wavenet-F

    Anschließen spielt es keine Rolle ob ich einen Online-Base64 Konverter nehme oder das ganze mittels Powershel durchjage:
    $base64String = "<base64string>"
    $bytes = [Convert]::FromBase64String($base64String)
    $outputFile = "output.mp3"
    [System.IO.File]::WriteAllBytes($outputFile, $bytes)
    Write-Output "MP3-Datei erfolgreich erstellt: $outputFile"


    ich erhalte immer wieder eine Audio-Datei in der sämtliche Umlaute fehlen und ich raffs einfach nicht warum.
    Im Anhang hab ich mal eine wav-Datei angehangen die durch den Onlinekonverter erstellt wurde.

    Ich mein, beim Abspielen im Browser wird doch genau dieser Base64-Code genutzt um den Ton abzuspielen - wie kann es also sein, dass genau dieser Code (wenn ich ihn manuell konvertiere) eine andere Ausgabe hat?
    Hat jemand dafür eine Erklärung?

    Gruß
    tkay
     

    Anhänge:

  2. 1. Juli 2024
    Das mit dem Base64 ist so eine Sache das kann normal keine vollständige UTF8 Inhalte codieren, möglicherweise fehlen deshalb die Umlaute.

    mit JS:
    Code:
    function b64DecodeUnicode(str) { return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); }).join('')); }
    
    function toBinary(string) {
     const codeUnits = new Uint16Array(string.length);
     for (let i = 0; i < codeUnits.length; i++) {
     codeUnits[i] = string.charCodeAt(i);
     }
     return btoa(String.fromCharCode(...new Uint8Array(codeUnits.buffer)));
    }
    
    var data_string = toBinary(b64DecodeUnicode(str));
    console.log(data_string);
    
    Dann hier einfügen und probieren: https://base64.online/decoders/decode-base64-to-audio
     
  3. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.