2017-10-19 6 views
0

JavaScript로 매우 간단한 게임을 작성하고 있으며 "재생"기능을 호출 한 시간부터 오디오 재생이 시작될 때까지 약 0.5 초 지연된다는 것을 알았습니다. 이게 정상인가? 자바 스크립트 오디오 재생의 지연

는 내가 가지고있는 코드 :

var audio = new Audio("games/aventura4/sfx/hit.wav"); 
audio.play(); 

나는 또한 한 번만 오디오 변수를 초기화 시도하고 단지 audio.play()를 호출 (수행 한 후 audio.currentTime = 0, 물론) , 그리고 지연은 여전히 ​​거기에있다!

뭐가 잘못 되었나요? (나는 이것을 Safari에서 시도하고있다, btw).

편집 : 이것을 실험하고 나면 문제가 Safari에서 실행되고있는 것 같습니다. Chrome에는 지체가 없습니다. 하지만 여전히 Safari에서 이러한 문제가 발생합니다.

편집 2 :는 그것이이 다른 질문에 관련이있을 수있는 것 같다 HTML5 Audio tag on Safari has a delay

+0

내가 확실하지 않다) (.play하는 #source를 사용하지만 – void

+0

네트워크 탭을 확인하고 wav 파일을 다운로드 할 때 볼 ... 때문에 버퍼링이 될 수 있습니다. .. 서버에서 가져 오는 중 시간이 걸릴 수 있습니다. 페이지로드시 가져 오기 시도 –

답변

1

당신은 (수동 또는 코드에서 그것을 할 수 있는지 여부) 네트워크 요청을 얻기 위해 발행있는 "재생"버튼을 누르면 때 오디오. 전체 파일을 다운로드하기 전에 시작할 수는 있지만 버퍼를 시작하기 전에 적당한 크기의 파일을 다운로드해야합니다. 그렇지 않으면 재생하려고 시도 할 때 심하게 터질 것입니다.

당신은 오디오 싶은 브라우저에 힌트 수와 사전은로드 :

<audio preload="auto"> 

그러나 그것은 단순히 힌트, 그것은 아무것도 보장 할 것이다. 이 속성을 너무 많이 사용하면 역효과를 낼 수 있습니다.

JavaScript 솔루션을 사용하면 이전에 오디오를 인스턴스화 할 수 있습니다. 재생할만큼 버퍼링되면 실행되는 oncanplaythrough 이벤트가 발생합니다.

+0

고마워! 나는 이것을 시도했지만 동일한 지연을 본다. 몇 가지 실험을 한 후 문제가 사파리라고 생각합니다! 그것은 크롬에서 지체없이 작동합니다 ... –

0

이 문제는 발생하지 않지만 약간 구조가 다릅니다. 내 HTML 파일에서 오디오 태그가 있습니다.

<audio id="hitSound" src="games/aventura4/sfx/hit.wav""></audio> 

그러면 해당 소리를 호출하는 javascript 함수를 만듭니다.

function playHitSound() { 
    document.getElementById("hitSound").play(); 
} 

소리를 재생하려면이 함수를 호출하십시오. 어떤 종류의 지체없이 나를 위해 일합니다. 파일을 가져 오는 완료 될 때까지 대기 요청 &을하여 파일을 얻기에 지연이

+0

고마워! 나는 이것을 시도했지만 동일한 지연을 본다.몇 가지 실험을 한 후 문제가 사파리라고 생각합니다! Chrome에서 지체없이 작동합니다 ... –

0

.... 하나의 해결책은 아약스 호출하여 페이지로드에 .wav 파일을 호출하는 것입니다 ...

$.ajax({ 
      url: 'games/aventura4/sfx/hit.wav', 
      cache: true,   
      success: function(data) {    
       $('audio #source').attr('src', data); //store it in some ID 
      } 

을 응답 캐시는

+0

감사합니다! 나는 Javascript 나 HTML이 아닌 것을 사용하지 않기를 바랄 것이다. 절대 아약스를 사용하지 않았으므로 차라리 멀리 떨어져있을 것이다 :) –