2017-10-07 2 views
2

Ich mache eine einfache Web-App, die einige Audiodateien abspielen muss, mit howler.js. howler.js akzeptiert base64-URI als Eingabe, also wollte ich das ausprobieren. Um es zu testen, nahm ich eine Beispiel-Audiodatei und verwendete eine Online audio-to-base64 encoder, um die Base64-URI zu erhalten. Ich habe die Datenbeschreibung ("data: audio/wav; base64") die Vorderseite des Base64-String und kopiert und in die folgenden JS-Funktion eingefügt ...:Warum gibt die Codierung von WAV-Dateien zu base64 mit Python und Online-Webanwendung unterschiedliche Ergebnisse?

function playSound() { 
    var data = ""; 
    var sound = new Howl({ 
     src: [data], 
     loop: false 
    }); 
    sound.play(); 
} 

... und es funktionierte perfekt . Da ich mit einer ordentlichen Anzahl von Audiodateien zu tun hatte, dachte ich, dass ich ein kurzes Python-Skript verwenden würde, um sie alle in base64 zu konvertieren. Um zu testen, ich konvertierte die gleichen Audiodaten an einen Base64-String mit dem folgenden Python-Code:

import base64 
with open("0.wav", "rb") as f1,open("b64.txt", "w") as f2: 
    encoded_f1 = base64.b64encode(f1.read()) 
    f2.write("data:audio/wav;base64,") 
    f2.write(str(encoded_f1)) 

Ich bemerken, der Base64-String wurde verschiedene Front, den ich von der Website früher bekam. Ich klebte diese in die JS-Funktion früher gezeigt, aber wenn ich den Ton zu spielen versuchen, erhalte ich folgende Fehlermeldung:

Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded. 

Es scheint eine gewisse Art von Unterschied in der Art und Weise Python zu sein Codierung base64. Was könnte der Grund dafür sein?

+0

Wo heißt 'atob()'? – guest271314

+0

Es heißt der Code howler.js selbst. Schau es dir hier an: https://github.com/goldfire/howler.js/blob/master/dist/howler.core.min.js (der Code ist in einer einzigen Zeile, aber ein STRG + F zeigt dir wo 'atob()' wird aufgerufen). –

+0

Können Sie eine jsfiddle https://jsfiddle.net oder plnkr https://plnkr.co einschließlich "Daten-URI" erstellt bei 'python' erstellen? – guest271314

Antwort

1

Kam nach einer Weile darauf zurück und das Problem wurde offensichtlich. Es war nur ein Problem mit dem Block von Code, den ich in OP (der zweite Block) erwähnte, dass ich die Base64-Codierung in eine Datei geschrieben habe.

base64.b64encode(f1.read()) gibt eine Bit-Zeichenfolge zurück, die in Python mit der folgenden Notation symbolisiert wird (d. H. Wenn Sie es drucken/schreiben, sehen Sie es so): b'string goes here'. Das Problem war nur, dass die b' ' um meine eigentliche Base64-Zeichenfolge gewickelt wurde, und ich benutzte das. Alles, was ich zu tun hatte, war, die b' ' loszuwerden, die ich durch Umwandlung der Bitfolge in ASCII wie folgt gemacht hatte: str(encoded_f1,'ascii', 'ignore').

Wirklich dummer Fehler, aber hoffentlich hilft es jemand aus.

Verwandte Themen