2017-10-07 10 views
2

howler.js을 사용하여 일부 오디오 파일을 재생해야하는 간단한 웹 앱을 만들고 있습니다. howler.js는 base64 URI를 입력으로 받아들이므로이를 시험해보고 싶었습니다. 이를 테스트하기 위해 샘플 오디오 파일을 가져 와서 온라인 audio-to-base64 encoder을 사용하여 base64 URI를 가져 왔습니다. base64로 문자열의 맨 앞에 복사하여 다음 JS 기능에 붙여 ... :왜 파이썬과 온라인 webapp를 사용하여 wav 파일을 base64로 인코딩하면 다른 결과가 나타 납니까?

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

... 그리고 그것은 완벽하게 작동; 나는 ("base64로, 오디오/WAV 데이터") 데이터 설명을 추가 . 꽤 많은 수의 오디오 파일을 처리 할 것이므로, 짧은 파이썬 스크립트를 사용하여 모든 파일을 base64로 변환 할 수있을 것이라고 생각했습니다. 나는 다음과 같은 파이썬 코드로 base64로 문자열 같은 오디오 변환, 테스트하려면 :

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. 

베이스 64로 인코딩입니다. 그 원인은 무엇일까요?

+0

'atob()이 (가) 어디에서 호출됩니까? – guest271314

+0

howler.js 코드 자체라고합니다. 여기에서 확인하십시오 : https://github.com/goldfire/howler.js/blob/master/dist/howler.core.min.js (코드는 한 줄에 표시되어 있지만 CTRL + F를 누르면 표시됩니다. 'atob()'이 불려갑니다). –

+0

'python'에서 생성 된'data URI'를 포함하여 jsfiddle https://jsfiddle.net 또는 plnkr https://plnkr.co를 만들 수 있습니까? – guest271314

답변

1

잠시 후이 문제가 다시 발생하여 문제가 분명해졌습니다. 그것은 내가 파일에서 base64 인코딩을 쓰는 데 사용했던 OP 블록 (두 번째 블록)에서 언급 한 코드 블록에만 문제가있었습니다.

base64.b64encode(f1.read())은 파이썬에서 다음 표기법으로 기호화 된 비트 문자열을 반환합니다. 즉, 인쇄하거나 쓸 때이 문자가 표시됩니다 : b'string goes here'. 그래서 문제는 단지 b' '이 실제 base64 문자열로 감싸졌고, 저는 그것을 사용하고있었습니다. 내가해야만하는 일은 str(encoded_f1,'ascii', 'ignore')과 같이 비트 스트링을 ASCII로 변환하여 수행 한 b' '을 제거하는 것입니다.

정말 바보 같은 실수지만, 누군가가 도움이 되었기를 바랍니다.