ข้ามไปยังเนื้อหา

<repeat>

องค์ประกอบ <repeat> ครอบเนื้อหา <structure> และเล่นมากกว่าหนึ่งครั้ง การซ้ำอาจซ้อนกันได้ เพลงจึงประกอบขึ้นจากหลายชั้นของการซ้ำ

แอตทริบิวต์ จำเป็น ประเภท คำอธิบาย
times ไม่ จำนวนเต็ม จำนวนครั้งทั้งหมดที่เนื้อหาที่ครอบเล่น 2 ขึ้นไป ค่าเริ่มต้น: 2

ลูกเดียวกับที่ <structure> รับ ลำดับใดก็ได้และซ้ำได้อิสระ:

ทุกอย่างภายใน <repeat> เล่น times รอบก่อนที่โน้ตจะดำเนินต่อไป จำนวนนี้คือจำนวนครั้งทั้งหมด ไม่ใช่จำนวนครั้งที่เพิ่มจากครั้งแรก times="2" จึงเล่นเนื้อหานั้นสองครั้ง และสองก็เป็นค่าเริ่มต้นด้วย เพราะ <repeat> ที่เล่นเนื้อหาครั้งเดียวไม่ได้ซ้ำอะไรเลย ละ times ไว้แล้วเนื้อหาเล่นสองครั้ง การครอบสองท่อนไว้ด้วยกันจะซ้ำทั้งคู่พร้อมกัน ได้ผลเป็น A B A B ซึ่งต่างจากการซ้ำแต่ละท่อนแยกกัน

เมื่อ repeat ซ้อนกัน จำนวนครั้งจะคูณกัน ท่อนที่ครอบด้วย times="2" ซ้อนอยู่ในอีก times="2" จะเล่นสี่ครั้ง

<structure>
<repeat times="2">
<repeat times="2">
<section id="s1" name="ท่อน 1" />
</repeat>
<section id="s2" name="ท่อน 2" />
</repeat>
</structure>

เล่นท่อน 1 สองครั้ง แล้วท่อน 2 หนึ่งครั้ง จากนั้นเล่นทั้งคู่ซ้ำอีกรอบ รวมเป็นสี่ห้องของท่อน 1 และสองห้องของท่อน 2 เรียงตามลำดับ 1 1 2 1 1 2

จำนวนรอบทั้งหมดของท่อนคือผลรวมของทุกการเล่นท่อนนั้น: สำหรับ <section> หรือ <play> แต่ละตัวที่อ้างถึงท่อนนั้น ให้คูณค่า times ของ <repeat> ทุกตัวที่ครอบตัวนั้นอยู่ แล้วรวมทุกตัวเข้าด้วยกัน ท่อนที่เล่นหนึ่งครั้งตรงที่ประกาศและอีกครั้งผ่าน <play> จึงมีสองรอบ ส่วนท่อนที่ประกาศโดยไม่มี repeat ครอบเลยมีหนึ่งรอบ ในตัวอย่างข้างบน ท่อน 1 มีรอบทั้งหมด 4 และท่อน 2 มี 2

การนับรอบเป็นแบบสัมบูรณ์ ตั้งแต่ครั้งแรกไปจนถึงครั้งสุดท้าย โดยไม่สนว่ารอบนั้นเกิดจาก repeat ชั้นไหน แอตทริบิวต์ pass ของ <ending> ใช้ตัวเลขสัมบูรณ์นี้ pass="4" บนท่อน 1 ข้างต้นจึงหมายถึงครั้งสุดท้ายในสี่ครั้ง และ pass="2,4" หมายถึงสองในสี่ครั้งนั้น

<repeat> ไม่ได้เปลี่ยนวิธีอ่านลำดับท่อน ลำดับยังคงเป็นลำดับที่องค์ประกอบ <section> ปรากฏในเอกสาร ไล่แบบ depth-first ผ่านชั้น <repeat> ที่ครอบอยู่ ดู <structure>

  • times ต้องเป็นจำนวนเต็ม 2 ขึ้นไป และเป็น 2 เมื่อไม่ระบุ <repeat> ที่เล่นเนื้อหาครั้งเดียวไม่ใช่การซ้ำ โน้ตที่เล่นท่อนครั้งเดียวจึงไม่ต้องมี <repeat> ครอบ
  • <repeat> ต้องมี <section> หรือ <play> อย่างน้อยหนึ่งตัว ไม่ว่าโดยตรงหรืออยู่ใน <repeat> ที่ซ้อนอยู่ข้างใน repeat ที่ครอบเฉพาะ annotation และ direction ไม่มีอะไรให้เล่นเลย
  • การซ้ำซ้อนลึกเท่าใดก็ได้
  • หากต้องการซ้ำช่วงบรรทัดภายในท่อนเดียวแทนท่อนทั้งหมด ใช้ <line-repeat>