나는 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()
}
나는 내가 꽤 확신한다. 이것은 새로운 AudioObject를 만드는 라인입니다. var recObj = new AudioObject (0, audio.duration, audio); 개체가 만들어지면 "audio"는 AudioObjects 배열에있는 AudioObject와 다른 src를 참조합니다. 배열에있는 객체가 변경되면이 새로운 객체를 밀어 넣기 만하면됩니다. – user2579064
아! 내 문제를 발견 !! 원래 게시물을 업데이트하고 있습니다. – user2579064