1
JavaScript로 웹 오디오 API를 사용하여 사운드를 버퍼에로드하고 재생하려고합니다. 불행하게도이 작동하지 않습니다와 나는 다음과 같은 오류가 발생합니다 :자바 스크립트 웹 오디오 : 오디오 데이터를 제대로 디코딩 할 수 없습니까?
Uncaught TypeError: Failed to set the 'buffer' property on 'AudioBufferSourceNode':
The provided value is not of type 'AudioBuffer'.
내가 나에게 오류를 제공하는 라인을 정확히 파악할 수 있지만, 내가 왜 몰라.
var audioContext;
var playSoundBuffer;
function init() {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
audioContext = new AudioContext();
loadNote();
}
function loadNote() {
var request = new XMLHttpRequest();
request.open("GET", "./sounds/topE.wav", true);
request.responseType = "arraybuffer";
request.onload = function() {
audioContext.decodeAudioData(request.response, function(buffer) {
playSoundBuffer = buffer;
}, function(error) {
console.error("decodeAudioData error", error);
});
};
request.send();
playSound();
}
function playSound() {
var source = audioContext.createBufferSource();
source.buffer = playSoundBuffer; // This is the line that generates the error
source.connect(audioContext.destination);
source.start(0);
}
내가 decodeAudioData 방법은 첫 번째 콜백 함수에 오디오 버퍼 (두 번째 매개 변수)를 반환 생각 : 도움이된다면 여기에 관련 코드입니다. 이 AudioBuffer를 "playSoundBuffer"에 저장하려고 시도했지만 그 오류가 발생하고 이유가 확실하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다.
답장을 보내 주셔서 감사합니다. 제안 된 수정 사항으로 인해 사운드가 제대로 재생되었습니다. 불행히도 나는 비동기 함수가 어떻게 작동 하는지를 정말로 이해하지 못한다. playSound() 메서드가 decodeAudioData 메서드와 동시에 실행 되었습니까? 그게 오류를 구체적으로 일으키는 원인 이었습니까? 도와 주셔서 다시 한 번 감사드립니다! – hashahid
당신이'playSound()'메소드를 실제로'decodeAudioData' 메소드 전에 익스포트 한 기사 인 https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests가 있습니다 요청을 보낸 직후 (비동기식)와 요청이 도착하기 전에, 그리고 디코딩을 시작하기 전에 (비동기식이기도 함) – Winchestro