게임을 프로그래밍하기 위해 HTML5를 사용하고 있습니다. 내가 지금 겪었던 장애물은 음향 효과를 재생하는 방법입니다.
구체적인 요구 사항은 거의 없습니다.
- 여러 사운드를 재생하고 믹스
- 동일한 샘플을 여러 번 재생합니다.
- 언제든 샘플의 재생을 중단
- 바람직하게는 (저품질) 원시 PCM을 포함하는 WAV 파일을 재생하지만 물론 변환 할 수 있습니다.
첫 번째 방법은 HTML5 <audio>
요소 를 사용하고 내 페이지에서 모든 사운드 효과를 정의하는 것이 었습니다. Firefox는 WAV 파일을 복숭아처럼 재생하지만 #play
여러 번 호출 해도 실제로는 여러 번 재생되지 않습니다. HTML5 사양에 대한 나의 이해에서 <audio>
요소는 재생 상태를 추적하므로 이유를 설명합니다.
내 생각은 오디오 요소를 복제하는 것이기 때문에 jQuery에 따라 다음과 같은 작은 JavaScript 라이브러리를 만들었습니다.
var Snd = {
init: function() {
$("audio").each(function() {
var src = this.getAttribute('src');
if (src.substring(0, 4) !== "snd/") { return; }
// Cut out the basename (strip directory and extension)
var name = src.substring(4, src.length - 4);
// Create the helper function, which clones the audio object and plays it
var Constructor = function() {};
Constructor.prototype = this;
Snd[name] = function() {
var clone = new Constructor();
clone.play();
// Return the cloned element, so the caller can interrupt the sound effect
return clone;
};
});
}
};
이제 Snd.boom();
Firebug 콘솔에서 할 수 있고을 재생할 snd/boom.wav
수 있지만 여전히 동일한 샘플을 여러 번 재생할 수는 없습니다. 이 <audio>
요소는 실제로 음향 효과를 재생하는 것이 아니라 스트리밍 기능에 가깝습니다.
HTML5와 JavaScript 만 사용하여 내가 빠졌을 수있는 영리한 방법이 있습니까?
또한 테스트 환경은 Ubuntu 9.10의 Firefox 3.5입니다. 내가 시도한 다른 브라우저-Opera, Midori, Chromium, Epiphany는 다양한 결과를 냈습니다. 일부는 아무것도하지 않으며 일부는 예외를 던집니다.