รับอินพุตและเอาต์พุตที่เชื่อมต่อหรือไม่

โหนด WebAudio สามารถเข้าถึงโหนดอื่นที่เชื่อมต่ออยู่หรือไม่ (ไม่ว่าจะเป็นอินพุตหรือเอาต์พุต)

ตัวอย่างเช่น ฉันมีโหนดเกนและโหนดต้นทางบัฟเฟอร์ โหนดแหล่งบัฟเฟอร์เชื่อมต่อกับโหนดเกนและโหนดเกนเชื่อมต่อกับปลายทางสุดท้าย:

var gainNode = ac.createGainNode(); // gain node
ac.createBufferSource().connect(gainNode); // source
gainNode.connect(ac.destination);

เมื่ออ้างอิงถึงโหนดเกนเท่านั้น ฉันจะรับการอ้างอิงไปยังโหนดต้นทางได้หรือไม่ และในทางกลับกัน.


person katspaugh    schedule 19.09.2013    source แหล่งที่มา


คำตอบ (1)


ไม่. ฉันไม่แน่ใจเลยว่าทำไม ดูเหมือนว่านั่นจะทำให้บางสิ่งง่ายขึ้นเล็กน้อย

แก้ไข:

หากคุณรู้สึกอยากผจญภัย คุณอาจลองทำอะไรแปลกๆ แบบนี้:

AudioNode.prototype.connect = (function(){
  var func = AudioNode.prototype.connect;
  return function(){
   ( this.outputs || ( this.outputs = [] ) ).push(arguments[0]);
   return func.apply(this, arguments);
  }
}());

ซึ่งจะให้การเชื่อมต่อ AudioNodes output อาร์เรย์ของโหนดเอาต์พุต คุณจะต้องแทนที่ AudioNode.prototype.disconnect ในลักษณะเดียวกันเพื่อลบออกจากอาร์เรย์

นี่อาจเป็นแนวคิดที่ แย่มาก แต่อาจได้ผลสำหรับคุณ ขึ้นอยู่กับสิ่งที่คุณต้องทำ

person Kevin Ennis    schedule 19.09.2013
comment
โอเค :) ขอบคุณ เควิน! - person katspaugh; 19.09.2013
comment
ไม่ มันไม่ได้ - แต่เหตุผลก็คือ ถ้าเราเสนอการวิปัสสนากราฟบนโหนดเช่นนี้ เราจะไม่สามารถแสดงกราฟย่อยของโหนดรวบรวมขยะที่เล่นเสร็จแล้วได้ (เพราะคุณสามารถเดินกลับไปยังโหนดจากปลายทางได้ และคุณจะเห็นว่ามันหายไป - ซึ่งหมายความว่าคุณสามารถสังเกตการทำงานของการเก็บขยะซึ่งเป็น JS no-no ที่แน่นอน) - person cwilso; 20.09.2013
comment
คุณสามารถทำการแทนที่การเชื่อมต่อ() ที่คุณแนะนำข้างต้นได้ เนื่องจากเป็นเพียงทางเดียว (ปัญหาหลักคือการวิปัสสนาเกี่ยวกับสิ่งที่เชื่อมต่อกับอินพุตของโหนด ไม่ใช่เอาต์พุตที่เชื่อมต่ออยู่) แต่คุณยังคงต้องระมัดระวังไม่ให้กระทบต่ออายุการใช้งานของวัตถุ - person cwilso; 20.09.2013