2013-12-21 3 views
0

나는 html5 오디오 요소의 인스턴스 주위에 컨트롤을 래핑하는 객체를 만들기 위해 노력하고 있습니다. 테스트를 위해, 나는 (읽기 쉽도록 단순화)이 같은 물체 ..js/jquery의 객체 배열에서 오디오 파일 재생

function AudioObject(audio) { 
    var innerAudio = audio; 

    this.Play = function() { 
     innerAudio.play() 
    } 
} 

을했습니다 그리고 나는이 AudioObject의 인스턴스를 잡고 배열을 가지고있다.

var AudioObjects = []; 

그런 다음 새 AudioObject를 만들 때이를 배열에 추가합니다. AudioObjects를 딜레이로 재생하여 연속적으로 재생하는 기능이 있습니다. 이런 식으로 뭔가가 :

var audioObj = new AudioObject(audio); 
AudioObjects.push(audioObj); 
.... 
.... 
var delay = 0; 
$.each(AudioObjects, function(iterator, obj) { 
    setTimeout(obj.Play, delay); 
    delay = delay + 3000; 
} 

한 오디오 파일이, 그것은 제대로 재생,하지만 난 더 AudioObjects를 추가하면, 배열의 각 하나는 최신 만든 오디오 요소에 자신의 innerAudio 변수 세트가 있습니다. 나는 html에서 개별적으로 각각을 연주 할 수있다. 나는 생성시에 디버깅을했고 올바른 오디오를 설정하는 것을 볼 수 있지만, 배열에 푸시 된 후 배열의 객체는 모두 최신 innerAudio로 전환됩니다.

개체를 올바르게 인스턴스화하지 않습니까? 경고 문안을 시험해보기 위해 this jsfiddle을 만들었습니다. 문제가없는 것 같습니다.

업데이트 : 내 문제를 발견 한 것 같습니다. 이것은 내가 당신이 객체 내부에 "public"과 "private"함수를 작성한다고 생각한 방법입니다.

function Thing(test) { 
    var thingTest = test; 

    // Public function 
    this.PublicTest = function() { 
     setTimeout(Test, 1000); 
    } 

    // Private function 
    PrivateTest = function() { 
     alert(thingTest); 
    } 
} 

이것은 본질적으로 내 코드가 구조화 된 방식이지만 "개인용"기능은 공개용 코드와 다른 범위를가집니다. 내 배열을 두 번 확인하고 실제로 올바른 오디오 소스로 올바른 audioObject를 저장했지만 "개인"함수를 호출하는 함수를 실행하면 잘못된 오디오 파일이 호출됩니다.

나는 무엇이 일어나고 있는지 보여주기 위해 the jsfiddle을 업데이트했습니다. "test1", "test2"경고하지만 "test2"를 두 번 경고한다고 생각했습니다.

업데이트 2 :

function Play() { // <<< That's all I had to change! 
    innerAudio.play() 
} 

답변

0

당신이 각 오디오 래퍼에 대해 고유 한 aduio 객체를 생성 함이에 개인 기능을 변경 기록을 위해 문제를 해결?

var audio = new Audio(); 
audio.src = 'src'; 

var audioObj = new AudioObject(audio); 
AudioObjects.push(audioObj); 
+0

나는 내가 꽤 확신한다. 이것은 새로운 AudioObject를 만드는 라인입니다. var recObj = new AudioObject (0, audio.duration, audio); 개체가 만들어지면 "audio"는 AudioObjects 배열에있는 AudioObject와 다른 src를 참조합니다. 배열에있는 객체가 변경되면이 새로운 객체를 밀어 넣기 만하면됩니다. – user2579064

+0

아! 내 문제를 발견 !! 원래 게시물을 업데이트하고 있습니다. – user2579064