การสั่นสะเทือนที่ดี


20

เสียงของแดมินได้รับการ immortalized ในชายหาดเพลงสั่นสะเทือนได้ดี หลายคนยังเชื่อมโยงเสียงกับชุดรูปแบบสำหรับชุดเดิมของStar Trekแต่เห็นได้ชัดว่ามันเป็นนักร้องเสียงโซปราโนจำลองของ

ความท้าทายนี้คุณจะต้องใช้แดมิน

อินพุต

  • ใช้อินพุต 2 มิติจากเมาส์หรืออุปกรณ์อินพุตอื่น ๆ (เช่นคุณสามารถใช้จอยสติ๊ก) ซึ่งจะสร้างเสียงจากอุปกรณ์เอาต์พุตเสียงดังนี้
    • การเพิ่ม x จะเป็นการเพิ่มความถี่ของเสียง โปรดทราบว่าความถี่เพิ่มขึ้นเป็นทวีคูณด้วยโน้ตดนตรีดังนั้นคุณต้องใช้ความสัมพันธ์เชิงเส้นระหว่างตำแหน่งของเมาส์ x และโน้ตดนตรีและ
    • การเพิ่ม y จะเป็นการเพิ่มระดับเสียง
  • ดูเหมือนว่าจะมีความสับสนเกี่ยวกับรูปแบบของคลื่นที่ผลิตโดยแดมินตัวจริงดังนั้นเพื่อความเรียบง่ายต้องใช้คลื่นไซน์ (หรือใกล้เคียงประมาณ)

กฎระเบียบ

  • โทนที่สร้างขึ้นต้องมีช่วงอย่างน้อย 2 คู่ ช่วงเพิ่มเติมเป็นที่ยอมรับ A-440 จะต้องอยู่ในระยะ
  • เพื่อสร้างลักษณะที่ปรากฏของเสียงที่มีความถี่และแอมพลิจูดอย่างต่อเนื่องช่วงของค่าที่พิจารณาในทั้งสองมิติจากอุปกรณ์อินพุตต้องมีอย่างน้อย 500 การใช้งานอาจเปิดหน้าต่าง (อย่างน้อย 500x500 พิกเซล) เพื่ออ่านอินพุตจากตำแหน่งเคอร์เซอร์ของเมาส์ หรือไม่เปิดหน้าต่างพิกัดอาจอ่านได้โดยตรงจากเมาส์หรืออุปกรณ์อินพุตอื่น ๆ
  • จะต้องมีวิธีที่ง่ายในการหยุดโปรแกรม - การผสมคีย์, การคลิกเมาส์หรืออุปกรณ์อินพุตทั่วไปอื่น ๆ CTRL-c เพียงพอแล้ว
  • อาจใช้ไลบรารีมาตรฐานใดก็ได้ตราบใดที่พวกเขาไม่ได้ใช้โซลูชันทั้งหมดโดยไม่ต้องทำงานอื่นใด
  • กฎมาตรฐานสำหรับCode GolfและI / O
  • คุณอาจหยุดโดยให้เม้าส์หรืออุปกรณ์ป้อนข้อมูลเสียโฟกัสที่ช่องป้อนข้อมูล

หมายเหตุ

  • เนื่องจากสัญญาณเสียงถูกสร้างขึ้นแบบไดนามิกต้องใช้ความระมัดระวังเพื่อให้แน่ใจว่าเสียงนั้นเป็นรูปคลื่นต่อเนื่อง นั่นคือไม่มีการคลิกหรือปรากฏเสียงที่เกิดจากการเปลี่ยนแปลงเฟสหรือแอมพลิจูดโดยฉับพลัน
  • คุณอาจ จำกัด โซนขนาดอินพุตไว้ที่ 500 โดย 500 แต่อาจใหญ่กว่านั้น

นี่คือดังนั้นคำตอบที่สั้นที่สุดในทุกภาษาจะชนะ

ขอขอบคุณเป็นพิเศษ

ขอขอบคุณเป็นพิเศษกับ Digital Trauma สำหรับการท้าทายนี้และโพสต์ไว้ใน Sandbox ของ Secret Santa ฉันได้ทำการแก้ไขบางอย่างและนี่คือโพสต์ดั้งเดิม

คำตอบ:


10

JavaScript ES6, 215 188 ไบต์

ดูเหมือนว่าจะทำงานได้ดีใน Chrome และ Edge Firefox และ Safari ไม่มาก

with(new AudioContext)o=createOscillator(onmousemove=e=>{o.frequency.value=9/innerWidth*e.x**2,v.gain.value=1-e.y/innerHeight}),v=createGain(),v.connect(destination),o.start(),o.connect(v)

บันทึกแล้ว 27 ไบต์ขอบคุณ@darrylyeo

ลองออนไลน์!

with(new AudioContext)o=createOscillator(onmousemove=e=>{o.frequency.value=9/innerWidth*e.x**2,v.gain.value=1-e.y/innerHeight}),v=createGain(),v.connect(destination),o.start(),o.connect(v)
<button onClick="o.stop()">Stop</button>


1
นั่นเป็นสิ่งที่ดีงาม! ฉันสนุกมากเกินไป
Christopher

2
ขอบคุณ ฉันคิดว่ามันสนุกยิ่งขึ้นเมื่อใช้กับรูปคลื่นสี่เหลี่ยม
powelles

1
ลองใช้แล้วทำให้แก้วหูหายไป
Christopher

o.type='sine'ไม่จำเป็นเนื่องจากเป็นค่าเริ่มต้น คุณสามารถลดความซับซ้อนเพียงแค่document.onmousemove onmousemove
darrylyeo

สนามกอล์ฟจาก 215 ถึง 188 ไบต์:with(new AudioContext)o=createOscillator(onmousemove=e=>{o.frequency.value=9/innerWidth*e.x**2,v.gain.value=1-e.y/innerHeight}),v=createGain(),v.connect(destination),o.start(),o.connect(v)
darrylyeo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.