2014-12-02 2 views
1

잘 작동합니다. 오해하지 마십시오. 것은 비동기 적으로 대신 동 기적으로로드하려고합니다.동기 아약스 요청을 사용하여 오디오를 arrayBuffer로 변환하는 방법은 무엇입니까?

req.open("GET", url[i], true) 

마지막 인수는 동기인지 여부를 선언하는 곳입니다. 어떤 이유로 든 false로 만들면 배열 버퍼에 대한 응답 유형을 변경할 수 없습니다.

이 방법은 배열 버퍼가 아니므로 응답을 읽을 수 없기 때문에 메서드가 중단됩니다. 놀랍게도 자연스러운 행동입니다.

context.decodeAudioData(req.response, function(buffer){}); 

나는 이것에 대해 약간의 재검토를했지만, 문자열을 배열 버퍼로 변환하는 방법만을 발견했다. 이 경우, mp3 형식과 같은 오디오를 배열 버퍼로 변환하면서 요청을 동기식으로 유지합니다. 해결 방법이 있습니까?

+0

아마도 이것이 가능하지 않을 수 있습니다. 의도적 인 것일 수도 있습니다 - 아약스를 동 기적으로 수행하는 것은 강력하게 권장되지 않습니다. – soktinpk

+0

그러나 나는 그것에 해를 실제로 보지 않는다? 그것의 단순한 XMLHttpRequests 및 audioBuffer로 변환. – user43353

+0

해를 끼치고있는 중입니다. 대기 시간 동안 브라우저가 멈 춥니 다. 현재 렌더링중인 오디오를 버려두는 것입니다. –

답변

0

표준 쪽에서입니다. 동기화 요청이 미래의 사양에서 포기 될 것이라는 소문이 있습니다. 새로운 기능이 지원되지 않습니다. this message을 확인하십시오.

xhr.responseType이 설정된 경우 XMLHttpRequest2 사양이 최근에 동기 요청 전송을 금지하도록 변경되었습니다.

여기 the spec입니다 : 비동기가 거짓

경우는 withCredentials이 값이 true 속성, 또는 responseType 속성이 관련 XMLHttpRequest의 문서이며, 두 시간 제한 속성 값이 0이 아닌 값이 빈 문자열이 아닌 경우 "InvalidAccessError"예외를 throw하고이 단계를 종료하십시오.

응용 프로그램 측면입니다. ArrayBuffer을 사용하면 대개 요청한 리소스가 어떻게 든 큰 바이너리라는 의미입니다. 동기 요청이 UI를 차단할 수 있지만 이는 정말 나쁜 사용자 환경입니다. 그래서 그렇게 할 수 있다고해도 좋은 아이디어는 아닙니다.

+0

흠. 파일에 의존하는 코드가 있기 때문에 코드가 실행되기 전에 모든 파일을 먼저로드하려고했습니다. 로드가 끝나기 전에 실행되면 파일이 정의되지 않은 상태로 출력됩니다. – user43353

+0

@ user43353 대부분의 HTML 게임처럼 리소스 관리 도구가 필요할 수 있습니다. – Leo

관련 문제