2017-10-07 29 views
2

我正在製作一個簡單的網絡應用程序,需要播放一些音頻文件,使用howler.js。 howler.js接受base64 URI作爲輸入,所以我想嘗試一下。爲了測試它,我拿了一個示例音頻文件,並使用在線audio-to-base64 encoder獲取base64 URI。我添加的數據描述(「數據:音頻/ WAV; BASE64」)以base64字符串的前面,複製並粘貼到下面的JS函數...:爲什麼使用python和在線webapp將wav文件編碼爲base64會給出不同的結果?

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

...它完美地工作。由於我會處理相當數量的音頻文件,我想我會使用一個簡短的python腳本將它們全部轉換爲base64。爲了測試,我轉換相同的音頻到Base64字符串以下Python代碼:

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)) 

我注意到的base64字符串是不同的前一個我從網站早點起牀。我粘貼到這一點前面所示的JS功能,但是當我試圖播放的聲音,我得到以下錯誤:

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

似乎有某種的方式蟒蛇不同的是編碼爲base64。這可能是什麼原因?

+0

atob()'叫什麼? – guest271314

+0

它被稱爲howler.js代碼本身。看看這裏:https://github.com/goldfire/howler.js/blob/master/dist/howler.core.min.js(代碼是在一行,但CTRL + F會告訴你在哪裏'atob()'被調用)。 –

+0

你可以創建一個jsfiddle https://jsfiddle.net或者plnkr https://plnkr.co,包括在'python'創建的'data URI'嗎? – guest271314

回答

1

過了一段時間後又回來了,問題變得明顯。這只是我在OP(第二塊)中提到的代碼塊中的一個問題,我曾用它將base64編碼寫入文件。

base64.b64encode(f1.read())返回一個位串,它在Python中用下列符號表示(即當您打印/編寫它時,您會看到它):b'string goes here'。所以問題只是b' '纏繞在我實際的base64字符串上,而我正在使用它。我所要做的就是擺脫b' ',這是我通過將bitstring轉換爲ASCII來完成的:str(encoded_f1,'ascii', 'ignore')

真的很愚蠢的錯誤,但希望它可以幫助別人。

相關問題