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?
Wo heißt 'atob()'? – guest271314
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). –
Können Sie eine jsfiddle https://jsfiddle.net oder plnkr https://plnkr.co einschließlich "Daten-URI" erstellt bei 'python' erstellen? – guest271314