diff --git a/◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯ⵙ◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯/◯✤ᴥᗩ◯ⵙ◯ᗩᴥ✤◯/◯ᗱᗴᴥᗩᗯ✤⏀Ⓞᔓᔕ◯ⵙ◯ᔓᔕⓄ⏀✤ᗯᗩᴥᗱᗴ◯/◯ᗝ∶◯⚪◯∶ᗝ◯ⵙ◯ᗝ∶◯⚪◯∶ᗝ◯/◯ᗱᗴᕤᕦᗩᑎᕤᕦИNᗩᙁ◯ߦᑎ✻ᴥᗩᙏ◯✤ꕤᗱᗴ✤ᴥᗱᗴߦ人옷◯ⵙ◯옷人ߦᗱᗴᴥ✤ᗱᗴꕤ✤◯ᙏᗩᴥ✻ᑎߦ◯ᙁᗩИNᕤᕦᑎᗩᕤᕦᗱᗴ◯/◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯ⵙ◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯/⚪ᔓᔕ⚪ᒍᒐ⚪◌⚪ⵈ⚪ᗝ⚪◌⚪◌⚪◌⚪◌⚪◌⚪◌⚪ᗝ⚪ⵈ⚪◌⚪ᒍᒐ⚪ᔓᔕ⚪/QAPZ.ƧJ.ԐD.⚪H⚪✤⚪ᕈᕋ⚪ИN⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ᗯ⚪ᗩ⚪ᗯ⚪◯⚪ᗱᗴ⚪ᑎ⚪¤⚪ꖴ⚪ИN⚪ᑎ⚪◌⚪◌⚪◌⚪✺⚪✺⚪◌⚪◌⚪◌⚪ᑎ⚪ИN⚪ꖴ⚪¤⚪ᑎ⚪ᗱᗴ⚪◯⚪ᗯ⚪ᗩ⚪ᗯ⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ИN⚪ᕈᕋ⚪✤⚪H⚪.D3.JS.ZPAQ b/◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯ⵙ◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯/◯✤ᴥᗩ◯ⵙ◯ᗩᴥ✤◯/◯ᗱᗴᴥᗩᗯ✤⏀Ⓞᔓᔕ◯ⵙ◯ᔓᔕⓄ⏀✤ᗯᗩᴥᗱᗴ◯/◯ᗝ∶◯⚪◯∶ᗝ◯ⵙ◯ᗝ∶◯⚪◯∶ᗝ◯/◯ᗱᗴᕤᕦᗩᑎᕤᕦИNᗩᙁ◯ߦᑎ✻ᴥᗩᙏ◯✤ꕤᗱᗴ✤ᴥᗱᗴߦ人옷◯ⵙ◯옷人ߦᗱᗴᴥ✤ᗱᗴꕤ✤◯ᙏᗩᴥ✻ᑎߦ◯ᙁᗩИNᕤᕦᑎᗩᕤᕦᗱᗴ◯/◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯ⵙ◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯/⚪ᔓᔕ⚪ᒍᒐ⚪◌⚪ⵈ⚪ᗝ⚪◌⚪◌⚪◌⚪◌⚪◌⚪◌⚪ᗝ⚪ⵈ⚪◌⚪ᒍᒐ⚪ᔓᔕ⚪/QAPZ.ƧJ.ԐD.⚪H⚪✤⚪ᕈᕋ⚪ИN⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ᗯ⚪ᗩ⚪ᗯ⚪◯⚪ᗱᗴ⚪ᑎ⚪¤⚪ꖴ⚪ИN⚪ᑎ⚪◌⚪◌⚪◌⚪✺⚪✺⚪◌⚪◌⚪◌⚪ᑎ⚪ИN⚪ꖴ⚪¤⚪ᑎ⚪ᗱᗴ⚪◯⚪ᗯ⚪ᗩ⚪ᗯ⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ИN⚪ᕈᕋ⚪✤⚪H⚪.D3.JS.ZPAQ
new file mode 100644
index 00000000..0bff1864
Binary files /dev/null and b/◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯ⵙ◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯/◯✤ᴥᗩ◯ⵙ◯ᗩᴥ✤◯/◯ᗱᗴᴥᗩᗯ✤⏀Ⓞᔓᔕ◯ⵙ◯ᔓᔕⓄ⏀✤ᗯᗩᴥᗱᗴ◯/◯ᗝ∶◯⚪◯∶ᗝ◯ⵙ◯ᗝ∶◯⚪◯∶ᗝ◯/◯ᗱᗴᕤᕦᗩᑎᕤᕦИNᗩᙁ◯ߦᑎ✻ᴥᗩᙏ◯✤ꕤᗱᗴ✤ᴥᗱᗴߦ人옷◯ⵙ◯옷人ߦᗱᗴᴥ✤ᗱᗴꕤ✤◯ᙏᗩᴥ✻ᑎߦ◯ᙁᗩИNᕤᕦᑎᗩᕤᕦᗱᗴ◯/◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯ⵙ◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯/⚪ᔓᔕ⚪ᒍᒐ⚪◌⚪ⵈ⚪ᗝ⚪◌⚪◌⚪◌⚪◌⚪◌⚪◌⚪ᗝ⚪ⵈ⚪◌⚪ᒍᒐ⚪ᔓᔕ⚪/QAPZ.ƧJ.ԐD.⚪H⚪✤⚪ᕈᕋ⚪ИN⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ᗯ⚪ᗩ⚪ᗯ⚪◯⚪ᗱᗴ⚪ᑎ⚪¤⚪ꖴ⚪ИN⚪ᑎ⚪◌⚪◌⚪◌⚪✺⚪✺⚪◌⚪◌⚪◌⚪ᑎ⚪ИN⚪ꖴ⚪¤⚪ᑎ⚪ᗱᗴ⚪◯⚪ᗯ⚪ᗩ⚪ᗯ⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ИN⚪ᕈᕋ⚪✤⚪H⚪.D3.JS.ZPAQ differ
diff --git a/◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯ⵙ◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯/◯✤ᴥᗩ◯ⵙ◯ᗩᴥ✤◯/◯ᗱᗴᴥᗩᗯ✤⏀Ⓞᔓᔕ◯ⵙ◯ᔓᔕⓄ⏀✤ᗯᗩᴥᗱᗴ◯/◯ᗝ∶◯⚪◯∶ᗝ◯ⵙ◯ᗝ∶◯⚪◯∶ᗝ◯/◯ᗱᗴᕤᕦᗩᑎᕤᕦИNᗩᙁ◯ߦᑎ✻ᴥᗩᙏ◯✤ꕤᗱᗴ✤ᴥᗱᗴߦ人옷◯ⵙ◯옷人ߦᗱᗴᴥ✤ᗱᗴꕤ✤◯ᙏᗩᴥ✻ᑎߦ◯ᙁᗩИNᕤᕦᑎᗩᕤᕦᗱᗴ◯/◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯ⵙ◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯/⚪ᔓᔕ⚪ᒍᒐ⚪◌⚪ⵈ⚪ᗝ⚪◌⚪◌⚪◌⚪◌⚪◌⚪◌⚪ᗝ⚪ⵈ⚪◌⚪ᒍᒐ⚪ᔓᔕ⚪/ƧJ.ԐD.⚪H⚪✤⚪ᕈᕋ⚪ИN⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ᗯ⚪ᗩ⚪ᗯ⚪◯⚪ᗱᗴ⚪ᑎ⚪¤⚪ꖴ⚪ИN⚪ᑎ⚪◌⚪◌⚪◌⚪✺⚪✺⚪◌⚪◌⚪◌⚪ᑎ⚪ИN⚪ꖴ⚪¤⚪ᑎ⚪ᗱᗴ⚪◯⚪ᗯ⚪ᗩ⚪ᗯ⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ИN⚪ᕈᕋ⚪✤⚪H⚪.D3.JS b/◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯ⵙ◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯/◯✤ᴥᗩ◯ⵙ◯ᗩᴥ✤◯/◯ᗱᗴᴥᗩᗯ✤⏀Ⓞᔓᔕ◯ⵙ◯ᔓᔕⓄ⏀✤ᗯᗩᴥᗱᗴ◯/◯ᗝ∶◯⚪◯∶ᗝ◯ⵙ◯ᗝ∶◯⚪◯∶ᗝ◯/◯ᗱᗴᕤᕦᗩᑎᕤᕦИNᗩᙁ◯ߦᑎ✻ᴥᗩᙏ◯✤ꕤᗱᗴ✤ᴥᗱᗴߦ人옷◯ⵙ◯옷人ߦᗱᗴᴥ✤ᗱᗴꕤ✤◯ᙏᗩᴥ✻ᑎߦ◯ᙁᗩИNᕤᕦᑎᗩᕤᕦᗱᗴ◯/◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯ⵙ◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯/⚪ᔓᔕ⚪ᒍᒐ⚪◌⚪ⵈ⚪ᗝ⚪◌⚪◌⚪◌⚪◌⚪◌⚪◌⚪ᗝ⚪ⵈ⚪◌⚪ᒍᒐ⚪ᔓᔕ⚪/ƧJ.ԐD.⚪H⚪✤⚪ᕈᕋ⚪ИN⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ᗯ⚪ᗩ⚪ᗯ⚪◯⚪ᗱᗴ⚪ᑎ⚪¤⚪ꖴ⚪ИN⚪ᑎ⚪◌⚪◌⚪◌⚪✺⚪✺⚪◌⚪◌⚪◌⚪ᑎ⚪ИN⚪ꖴ⚪¤⚪ᑎ⚪ᗱᗴ⚪◯⚪ᗯ⚪ᗩ⚪ᗯ⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ИN⚪ᕈᕋ⚪✤⚪H⚪.D3.JS
new file mode 100644
index 00000000..4d29246f
--- /dev/null
+++ b/◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯ⵙ◯ᗩIᗝI⚭◯⚪◯⚭IᗝIᗩ◯/◯✤ᴥᗩ◯ⵙ◯ᗩᴥ✤◯/◯ᗱᗴᴥᗩᗯ✤⏀Ⓞᔓᔕ◯ⵙ◯ᔓᔕⓄ⏀✤ᗯᗩᴥᗱᗴ◯/◯ᗝ∶◯⚪◯∶ᗝ◯ⵙ◯ᗝ∶◯⚪◯∶ᗝ◯/◯ᗱᗴᕤᕦᗩᑎᕤᕦИNᗩᙁ◯ߦᑎ✻ᴥᗩᙏ◯✤ꕤᗱᗴ✤ᴥᗱᗴߦ人옷◯ⵙ◯옷人ߦᗱᗴᴥ✤ᗱᗴꕤ✤◯ᙏᗩᴥ✻ᑎߦ◯ᙁᗩИNᕤᕦᑎᗩᕤᕦᗱᗴ◯/◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯ⵙ◯✤ߦꖴᴥᑐᑕᔓᔕᗩΛᗩᒍᒐ◯⚪◯ᒍᒐᗩΛᗩᔓᔕᑐᑕᴥꖴߦ✤◯/⚪ᔓᔕ⚪ᒍᒐ⚪◌⚪ⵈ⚪ᗝ⚪◌⚪◌⚪◌⚪◌⚪◌⚪◌⚪ᗝ⚪ⵈ⚪◌⚪ᒍᒐ⚪ᔓᔕ⚪/ƧJ.ԐD.⚪H⚪✤⚪ᕈᕋ⚪ИN⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ᗯ⚪ᗩ⚪ᗯ⚪◯⚪ᗱᗴ⚪ᑎ⚪¤⚪ꖴ⚪ИN⚪ᑎ⚪◌⚪◌⚪◌⚪✺⚪✺⚪◌⚪◌⚪◌⚪ᑎ⚪ИN⚪ꖴ⚪¤⚪ᑎ⚪ᗱᗴ⚪◯⚪ᗯ⚪ᗩ⚪ᗯ⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ИN⚪ᕈᕋ⚪✤⚪H⚪.D3.JS
@@ -0,0 +1,462 @@
+function _1(md){return(
+md`#
⠀⠀⠀⠀⠀⠀⠀⠀⚪H⚪✤⚪ᕈᕋ⚪ИN⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ᗯ⚪ᗩ⚪ᗯ⚪◯⚪ᗱᗴ⚪ᑎ⚪¤⚪ꖴ⚪ИN⚪ᑎ⚪◌⚪◌⚪◌⚪✺⚪✺⚪◌⚪◌⚪◌⚪ᑎ⚪ИN⚪ꖴ⚪¤⚪ᑎ⚪ᗱᗴ⚪◯⚪ᗯ⚪ᗩ⚪ᗯ⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ИN⚪ᕈᕋ⚪✤⚪H⚪⠀⠀⠀⠀⠀⠀⠀⠀
+# ⠀⠀⠀⠀⠀⠀⠀⠀⚪H⚪✤⚪ᕊᕍ⚪NИ⚪ᗱᗴ⚪ᙀ⚪ᗱᗴ⚪ᗰ⚪ᗨ⚪ᗰ⚪◯⚪ᗱᗴ⚪ᑌ⚪¤⚪ꖴ⚪NИ⚪ᑌ⚪◌⚪◌⚪◌⚪✺⚪✺⚪◌⚪◌⚪◌⚪ᑌ⚪NИ⚪ꖴ⚪¤⚪ᑌ⚪ᗱᗴ⚪◯⚪ᗰ⚪ᗨ⚪ᗰ⚪ᗱᗴ⚪ᙀ⚪ᗱᗴ⚪NИ⚪ᕊᕍ⚪✤⚪H⚪⠀⠀⠀⠀⠀⠀⠀⠀`
+)}
+
+function _2(htl){return(
+htl.html``
+)}
+
+function _ᑎ(md){return(
+md``
+)}
+
+function _4(htl){return(
+htl.html``
+)}
+
+function _5(htl){return(
+htl.html``
+)}
+
+function _6(ᑎᑎ){return(
+ᑎᑎ
+(
+(t)=>
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,13))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,12))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,11))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,10))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,9))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,8))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,7))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,6))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,5))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,4))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,3))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,2))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,1))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,0))
+,
+84.406022589954030768899117092091000289089388918088900852079/Math.pow(3,0)
+)
+)}
+
+function _ᑎᑎ(ⵙᖆᖇⵙᗱᗴⵙꗳⵙᑎⵙ8ⵙᗝⵙИNⵙᑎⵙⵔⵙᔓᔕⵙᔓᔕⵙⵔⵙᑎⵙИNⵙᗝⵙ8ⵙᑎⵙꗳⵙᗱᗴⵙᖆᖇⵙ){return(
+function ᑎᑎ(genFn, duration = 1) {
+ return new ⵙᖆᖇⵙᗱᗴⵙꗳⵙᑎⵙ8ⵙᗝⵙИNⵙᑎⵙⵔⵙᔓᔕⵙᔓᔕⵙⵔⵙᑎⵙИNⵙᗝⵙ8ⵙᑎⵙꗳⵙᗱᗴⵙᖆᖇⵙ(genFn, duration).gui();
+}
+)}
+
+function _ⵙᖆᖇⵙᗱᗴⵙꗳⵙᑎⵙ8ⵙᗝⵙИNⵙᑎⵙⵔⵙᔓᔕⵙᔓᔕⵙⵔⵙᑎⵙИNⵙᗝⵙ8ⵙᑎⵙꗳⵙᗱᗴⵙᖆᖇⵙ(ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ,DOM,html,width){return(
+class ⵙᖆᖇⵙᗱᗴⵙꗳⵙᑎⵙ8ⵙᗝⵙИNⵙᑎⵙⵔⵙᔓᔕⵙᔓᔕⵙⵔⵙᑎⵙИNⵙᗝⵙ8ⵙᑎⵙꗳⵙᗱᗴⵙᖆᖇⵙ {
+ constructor(genFn, duration = 1) {
+ this.duration = duration;
+ // Create an audio buffer.
+ this.audioBuffer = ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ.createBuffer(1, ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ.sampleRate * this.duration, ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ.sampleRate);
+ this.buffer = this.audioBuffer.getChannelData(0);
+ let max = 0;
+ for (let i = 0; i < this.audioBuffer.length; i++) {
+ const value = genFn(i / ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ.sampleRate);
+ this.buffer[i] = value;
+ if (Math.abs(value) > max) max = Math.abs(value);
+ }
+ for (let i = 0; i < this.audioBuffer.length; i++) {
+ this.buffer[i] = this.buffer[i] / max;
+ }
+ }
+ play(maxVol = 1/3) {
+ this.stop();
+ this.source = ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ.createBufferSource();
+ this.source.buffer = this.audioBuffer;
+ const gain = ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ.createGain();
+ gain.gain.value = maxVol;
+ this.source.connect(gain);
+gain.connect(ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ.destination);
+ this.source.start();
+ }
+ stop() {
+ if (this.source) this.source.stop();
+ }
+ draw(height = 50, width = width, color = '#CACACA') {
+ const drawingCtx = DOM.context2d(width, height);
+ // Draw the middle line.
+ drawingCtx.strokeStyle = 'gainsboro';
+ drawingCtx.beginPath();
+ drawingCtx.moveTo(0, height / 2);
+ drawingCtx.lineTo(width, height / 2);
+ drawingCtx.stroke();
+ // Draw the waveform.
+ drawingCtx.strokeStyle = color;
+ drawingCtx.beginPath();
+ for (let i = 0; i < width; i++) {
+ const value = this.buffer[Math.floor(i / width * this.audioBuffer.length)];
+ const y = height - Math.floor((value / 2 + 0.5) * height * .9 + height * 0.05);
+ if (i == 0) {
+ drawingCtx.moveTo(i, y);
+ } else {
+ drawingCtx.lineTo(i, y);
+ }
+ }
+ drawingCtx.stroke();
+ return drawingCtx.canvas;
+ }
+ gui() {
+ const ui = html`
+
+
+◯
+${this.duration}
+⚪
+
+
+
+
+
+⚪
+${this.duration}
+◯
+
+
`;
+ const cursor = ui.querySelector('.cursor');
+ let interval = null;
+ const resetInterval = () => {
+ if (interval != null) {
+ clearInterval(interval);
+ interval = null;
+ }
+ };
+ const soundPlayer = ui.querySelector('.sound-player');
+ ui.querySelector('.sound-pane').appendChild(this.draw(46, width - 20));
+ ui.querySelector('.play-button').onclick = () => {
+ cursor.style.left = '0';
+ this.play();
+ cursor.style.display = 'block';
+ const playTime = Date.now();
+ resetInterval();
+ interval = setInterval(() => {
+ if (!document.contains(soundPlayer)) {
+ resetInterval();
+ this.stop();
+ }
+ let progress = (Date.now() - playTime) / this.duration / 1000;
+ if (progress < 0) progress = 0;
+ if (progress > 1) {
+ progress = 1;
+ resetInterval();
+ this.stop();
+ cursor.style.display = 'none';
+ }
+ cursor.style.left = `${Math.floor(progress * (width - 20))}px`;
+ }, 20);
+ };
+ ui.querySelector('.stop-button').onclick = () => {
+ resetInterval();
+ this.stop();
+ cursor.style.display = 'none';
+ };
+ return ui;
+ }
+}
+)}
+
+function _ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ(){return(
+new (window.AudioContext || window.webkitAudioContext)()
+)}
+
+function _10(htl){return(
+htl.html``
+)}
+
+function _11(htl){return(
+htl.html``
+)}
+
+function _ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ(){return(
+new (window.AudioContext || window.webkitAudioContext)()
+)}
+
+function _ⵙᖈᖉⵙᗱᗴⵙꗳⵙᑌⵙ8ⵙᗜⵙNИⵙᑌⵙⵔⵙᔕᔓⵙᔕᔓⵙⵔⵙᑌⵙNИⵙᗜⵙ8ⵙᑌⵙꗳⵙᗱᗴⵙᖈᖉⵙ(ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ,DOM,html,width){return(
+class ⵙᖈᖉⵙᗱᗴⵙꗳⵙᑌⵙ8ⵙᗜⵙNИⵙᑌⵙⵔⵙᔕᔓⵙᔕᔓⵙⵔⵙᑌⵙNИⵙᗜⵙ8ⵙᑌⵙꗳⵙᗱᗴⵙᖈᖉⵙ {
+ constructor(genFn, duration = 1) {
+ this.duration = duration;
+ // Create an audio buffer.
+ this.audioBuffer = ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ.createBuffer(1, ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ.sampleRate * this.duration, ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ.sampleRate);
+ this.buffer = this.audioBuffer.getChannelData(0);
+ let max = 0;
+ for (let i = 0; i < this.audioBuffer.length; i++) {
+ const value = genFn(i / ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ.sampleRate);
+ this.buffer[i] = value;
+ if (Math.abs(value) > max) max = Math.abs(value);
+ }
+ for (let i = 0; i < this.audioBuffer.length; i++) {
+ this.buffer[i] = this.buffer[i] / max;
+ }
+ }
+ play(maxVol = 1/3) {
+ this.stop();
+ this.source = ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ.createBufferSource();
+ this.source.buffer = this.audioBuffer;
+ const gain = ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ.createGain();
+ gain.gain.value = maxVol;
+ this.source.connect(gain);
+gain.connect(ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ.destination);
+ this.source.start();
+ }
+ stop() {
+ if (this.source) this.source.stop();
+ }
+ draw(height = 50, width = width, color = '#CACACA') {
+ const drawingCtx = DOM.context2d(width, height);
+ // Draw the middle line.
+ drawingCtx.strokeStyle = 'gainsboro';
+ drawingCtx.beginPath();
+ drawingCtx.moveTo(0, height / 2);
+ drawingCtx.lineTo(width, height / 2);
+ drawingCtx.stroke();
+ // Draw the waveform.
+ drawingCtx.strokeStyle = color;
+ drawingCtx.beginPath();
+ for (let i = 0; i < width; i++) {
+ const value = this.buffer[Math.floor(i / width * this.audioBuffer.length)];
+ const y = height - Math.floor((value / 2 + 0.5) * height * .9 + height * 0.05);
+ if (i == 0) {
+ drawingCtx.moveTo(i, y);
+ } else {
+ drawingCtx.lineTo(i, y);
+ }
+ }
+ drawingCtx.stroke();
+ return drawingCtx.canvas;
+ }
+ gui() {
+ const ui = html`
+
+
+◯
+${this.duration}
+⚪
+
+
+
+
+
+⚪
+${this.duration}
+◯
+
+
`;
+ const cursor = ui.querySelector('.cursor');
+ let interval = null;
+ const resetInterval = () => {
+ if (interval != null) {
+ clearInterval(interval);
+ interval = null;
+ }
+ };
+ const soundPlayer = ui.querySelector('.sound-player');
+ ui.querySelector('.sound-pane').appendChild(this.draw(46, width - 20));
+ ui.querySelector('.play-button').onclick = () => {
+ cursor.style.left = '0';
+ this.play();
+ cursor.style.display = 'block';
+ const playTime = Date.now();
+ resetInterval();
+ interval = setInterval(() => {
+ if (!document.contains(soundPlayer)) {
+ resetInterval();
+ this.stop();
+ }
+ let progress = (Date.now() - playTime) / this.duration / 1000;
+ if (progress < 0) progress = 0;
+ if (progress > 1) {
+ progress = 1;
+ resetInterval();
+ this.stop();
+ cursor.style.display = 'none';
+ }
+ cursor.style.left = `${Math.floor(progress * (width - 20))}px`;
+ }, 20);
+ };
+ ui.querySelector('.stop-button').onclick = () => {
+ resetInterval();
+ this.stop();
+ cursor.style.display = 'none';
+ };
+ return ui;
+ }
+}
+)}
+
+function _ᑌᑌ(ⵙᖈᖉⵙᗱᗴⵙꗳⵙᑌⵙ8ⵙᗜⵙNИⵙᑌⵙⵔⵙᔕᔓⵙᔕᔓⵙⵔⵙᑌⵙNИⵙᗜⵙ8ⵙᑌⵙꗳⵙᗱᗴⵙᖈᖉⵙ){return(
+function ᑌᑌ(genFn, duration = 1) {
+ return new ⵙᖈᖉⵙᗱᗴⵙꗳⵙᑌⵙ8ⵙᗜⵙNИⵙᑌⵙⵔⵙᔕᔓⵙᔕᔓⵙⵔⵙᑌⵙNИⵙᗜⵙ8ⵙᑌⵙꗳⵙᗱᗴⵙᖈᖉⵙ(genFn, duration).gui();
+}
+)}
+
+function _15(ᑌᑌ){return(
+ᑌᑌ
+(
+(t)=>
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,13))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,12))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,11))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,10))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,9))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,8))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,7))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,6))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,5))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,4))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,3))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,2))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,1))
++
+Math.sin(t*8*Math.atan(1)*1/84.406022589954030768899117092091000289089388918088900852079*Math.pow(3,0))
+,
+84.406022589954030768899117092091000289089388918088900852079/Math.pow(3,0)
+)
+)}
+
+function _16(htl){return(
+htl.html``
+)}
+
+function _17(htl){return(
+htl.html``
+)}
+
+function _ᑌ(md){return(
+md``
+)}
+
+function _19(htl){return(
+htl.html``
+)}
+
+function _20(md){return(
+md`# ⠀⠀⠀⠀⠀⠀⠀⠀⚪H⚪✤⚪ᕈᕋ⚪ИN⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ᗯ⚪ᗩ⚪ᗯ⚪◯⚪ᗱᗴ⚪ᑎ⚪¤⚪ꖴ⚪ИN⚪ᑎ⚪◌⚪◌⚪◌⚪✺⚪✺⚪◌⚪◌⚪◌⚪ᑎ⚪ИN⚪ꖴ⚪¤⚪ᑎ⚪ᗱᗴ⚪◯⚪ᗯ⚪ᗩ⚪ᗯ⚪ᗱᗴ⚪ᙁ⚪ᗱᗴ⚪ИN⚪ᕈᕋ⚪✤⚪H⚪⠀⠀⠀⠀⠀⠀⠀⠀
+# ⠀⠀⠀⠀⠀⠀⠀⠀⚪H⚪✤⚪ᕊᕍ⚪NИ⚪ᗱᗴ⚪ᙀ⚪ᗱᗴ⚪ᗰ⚪ᗨ⚪ᗰ⚪◯⚪ᗱᗴ⚪ᑌ⚪¤⚪ꖴ⚪NИ⚪ᑌ⚪◌⚪◌⚪◌⚪✺⚪✺⚪◌⚪◌⚪◌⚪ᑌ⚪NИ⚪ꖴ⚪¤⚪ᑌ⚪ᗱᗴ⚪◯⚪ᗰ⚪ᗨ⚪ᗰ⚪ᗱᗴ⚪ᙀ⚪ᗱᗴ⚪NИ⚪ᕊᕍ⚪✤⚪H⚪⠀⠀⠀⠀⠀⠀⠀⠀`
+)}
+
+export default function define(runtime, observer) {
+ const main = runtime.module();
+ main.variable(observer()).define(["md"], _1);
+ main.variable(observer()).define(["htl"], _2);
+ main.variable(observer("ᑎ")).define("ᑎ", ["md"], _ᑎ);
+ main.variable(observer()).define(["htl"], _4);
+ main.variable(observer()).define(["htl"], _5);
+ main.variable(observer()).define(["ᑎᑎ"], _6);
+ main.variable(observer("ᑎᑎ")).define("ᑎᑎ", ["ⵙᖆᖇⵙᗱᗴⵙꗳⵙᑎⵙ8ⵙᗝⵙИNⵙᑎⵙⵔⵙᔓᔕⵙᔓᔕⵙⵔⵙᑎⵙИNⵙᗝⵙ8ⵙᑎⵙꗳⵙᗱᗴⵙᖆᖇⵙ"], _ᑎᑎ);
+ main.variable(observer("ⵙᖆᖇⵙᗱᗴⵙꗳⵙᑎⵙ8ⵙᗝⵙИNⵙᑎⵙⵔⵙᔓᔕⵙᔓᔕⵙⵔⵙᑎⵙИNⵙᗝⵙ8ⵙᑎⵙꗳⵙᗱᗴⵙᖆᖇⵙ")).define("ⵙᖆᖇⵙᗱᗴⵙꗳⵙᑎⵙ8ⵙᗝⵙИNⵙᑎⵙⵔⵙᔓᔕⵙᔓᔕⵙⵔⵙᑎⵙИNⵙᗝⵙ8ⵙᑎⵙꗳⵙᗱᗴⵙᖆᖇⵙ", ["ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ","DOM","html","width"], _ⵙᖆᖇⵙᗱᗴⵙꗳⵙᑎⵙ8ⵙᗝⵙИNⵙᑎⵙⵔⵙᔓᔕⵙᔓᔕⵙⵔⵙᑎⵙИNⵙᗝⵙ8ⵙᑎⵙꗳⵙᗱᗴⵙᖆᖇⵙ);
+ main.variable(observer("ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ")).define("ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ", _ⵙTⵙꕤⵙᗱᗴⵙTⵙИNⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗝⵙᑎⵙᗩⵙᗩⵙᑎⵙᗝⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙИNⵙTⵙᗱᗴⵙꕤⵙTⵙ);
+ main.variable(observer()).define(["htl"], _10);
+ main.variable(observer()).define(["htl"], _11);
+ main.variable(observer("ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ")).define("ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ", _ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ);
+ main.variable(observer("ⵙᖈᖉⵙᗱᗴⵙꗳⵙᑌⵙ8ⵙᗜⵙNИⵙᑌⵙⵔⵙᔕᔓⵙᔕᔓⵙⵔⵙᑌⵙNИⵙᗜⵙ8ⵙᑌⵙꗳⵙᗱᗴⵙᖈᖉⵙ")).define("ⵙᖈᖉⵙᗱᗴⵙꗳⵙᑌⵙ8ⵙᗜⵙNИⵙᑌⵙⵔⵙᔕᔓⵙᔕᔓⵙⵔⵙᑌⵙNИⵙᗜⵙ8ⵙᑌⵙꗳⵙᗱᗴⵙᖈᖉⵙ", ["ⵙTⵙꕤⵙᗱᗴⵙTⵙNИⵙⵔⵙᑐᑕⵙⵔⵙꖴⵙᗜⵙᑌⵙᗨⵙᗨⵙᑌⵙᗜⵙꖴⵙⵔⵙᑐᑕⵙⵔⵙNИⵙTⵙᗱᗴⵙꕤⵙTⵙ","DOM","html","width"], _ⵙᖈᖉⵙᗱᗴⵙꗳⵙᑌⵙ8ⵙᗜⵙNИⵙᑌⵙⵔⵙᔕᔓⵙᔕᔓⵙⵔⵙᑌⵙNИⵙᗜⵙ8ⵙᑌⵙꗳⵙᗱᗴⵙᖈᖉⵙ);
+ main.variable(observer("ᑌᑌ")).define("ᑌᑌ", ["ⵙᖈᖉⵙᗱᗴⵙꗳⵙᑌⵙ8ⵙᗜⵙNИⵙᑌⵙⵔⵙᔕᔓⵙᔕᔓⵙⵔⵙᑌⵙNИⵙᗜⵙ8ⵙᑌⵙꗳⵙᗱᗴⵙᖈᖉⵙ"], _ᑌᑌ);
+ main.variable(observer()).define(["ᑌᑌ"], _15);
+ main.variable(observer()).define(["htl"], _16);
+ main.variable(observer()).define(["htl"], _17);
+ main.variable(observer("ᑌ")).define("ᑌ", ["md"], _ᑌ);
+ main.variable(observer()).define(["htl"], _19);
+ main.variable(observer()).define(["md"], _20);
+ return main;
+}