เครื่องตรวจจับระดับเสียงนี้ทำงานอย่างไร
ไมโครโฟนของคุณจะจับสัญญาณเสียงขนาด 8192 แซมเปิลในเบราว์เซอร์ — ประมาณ 170 ms ที่ 48 kHz ซึ่งนานพอที่จะเห็นรอบสัญญาณแม้แต่โน้ตเสียงเบสต่ำๆ เครื่องมือนี้ใช้ McLeod-style normalized autocorrelation ในช่วงเวลาดังกล่าว — โดยจะเปรียบเทียบรูปคลื่นล่าสุดกับสำเนาที่เลื่อนเวลาออกไปเพื่อหาการซ้ำของสัญญาณที่แรงที่สุด ความยาวของรอบสัญญาณนั้นคือคาบของคลื่น ส่วนส่วนกลับของคาบคือความถี่ในหน่วย Hz จากนั้นความถี่จะถูกแปลงเป็นตัวโน้ตดนตรีที่ใกล้เคียงที่สุดพร้อมค่าความเพี้ยน cents (1 ครึ่งเสียง = 100 เซนต์)
ก่อนการวิเคราะห์ เราจะขอให้เบราว์เซอร์ข้ามการปรับระดับเสียงอัตโนมัติ (auto-gain) การตัดเสียงสะท้อน และการตัดเสียงรบกวนจากไมโครโฟน ฟิลเตอร์เหล่านี้มักทำให้รูปคลื่นผิดเพี้ยนและทำให้ค่าระดับเสียงคลาดเคลื่อนไปหลายสิบเซนต์ในกรณีที่เสียงเบาหรือเครื่องดนตรีเสียงต่ำ ดังนั้นการปิดฟิลเตอร์เหล่านี้จึงช่วยเพิ่มความแม่นยำได้มากที่สุด นอกจากนี้เรายังใช้ median filter สั้นๆ กับเฟรมล่าสุดเพื่อกำจัดค่าที่กระโดดผิดปกติโดยไม่ทำให้เกิดความหน่วงที่สังเกตเห็นได้
วิธีนี้ติดตามเสียงโน้ตเดี่ยวที่ลากยาวได้ดีกว่า FFT ทั่วไป โดยเฉพาะในย่านความถี่ต่ำ เพราะมีโอกาสน้อยที่จะสับสนระหว่างเสียงโอเวอร์โทน (harmonics) กับโน้ตที่คุณกำลังเล่น ข้อเสียคือ: ไม่สามารถตรวจจับคอร์ดได้, การสั่นของเสียง (vibrato) จะทำให้ค่าเซนต์แกว่ง และสภาพแวดล้อมที่มีเสียงรบกวนอาจทำให้การตรวจจับคลาดเคลื่อน
การอ้างอิง: การตั้งสายมาตรฐาน
เครื่องตรวจจับเริ่มต้นที่ระดับเสียงมาตรฐาน A4 = 440 Hz และคุณสามารถปรับค่าอ้างอิงได้หากเครื่องดนตรีหรือวงของคุณใช้มาตรฐานอื่น ตัวโน้ตอื่นๆ จะมีอัตราส่วนคงที่ห่างออกไป — คือรากที่สิบสองของสอง (≈1.05946) ต่อหนึ่งครึ่งเสียง ส่วนออกเตฟจะมีความถี่เป็นสองเท่า: A3 คือ 220 Hz, A5 คือ 880 Hz ค่าเซนต์ใช้สำหรับวัดว่าคุณเพี้ยนไปเท่าไหร่ภายในหนึ่งครึ่งเสียง ซึ่งความต่างที่น้อยกว่า ±5 เซนต์มักจะฟังไม่ออกด้วยหูเปล่า
วิธีอ่านค่าบนหน้าจอ
- ตัวโน้ตขนาดใหญ่ — ตัวโน้ตที่ใกล้เคียงที่สุดที่เราตรวจพบในช่วงไม่กี่เฟรมล่าสุด
- แถบเซนต์ (Cents bar) — ตัวมาร์กเกอร์จะอยู่ตรงกลางเมื่อเสียงตรงพอดี จะเลื่อนไปทางซ้ายถ้าเสียงต่ำ (flat) และเลื่อนไปทางขวาถ้าเสียงสูง (sharp) สีเขียว = เสียงตรง (±5 ¢), สีส้ม = ใกล้เคียง (±20 ¢), สีแดง = เสียงเพี้ยนชัดเจน
- คีย์บอร์ดเปียโน — แสดงไฮไลต์ตัวโน้ตที่ตรวจพบในออกเตฟนั้นๆ ในช่วง C1–B6 ส่วนโน้ตที่อยู่นอกเหนือจากช่วงนี้จะยังคงแสดงผลในช่องตัวโน้ต
- ตรวจพบล่าสุด — ทุกครั้งที่คุณเปลี่ยนไปเล่นโน้ตตัวใหม่ที่ลากยาว เราจะเพิ่มโน้ตนั้นลงในรายการเพื่อให้คุณตรวจสอบย้อนหลังได้ว่าเพิ่งร้องหรือเล่นโน้ตอะไรไป
เคล็ดลับเพื่อความแม่นยำ
- ลากเสียงโน้ตตัวเดียวค้างไว้อย่างน้อยครึ่งวินาที — เครื่องตรวจจับต้องการข้อมูลที่สอดคล้องกันสองสามเฟรมก่อนจะยืนยันค่า
- ใช้ในห้องที่เงียบสงบ เสียงพัดลม การจราจร และเสียงคลิกคีย์บอร์ดอาจรบกวนการตรวจจับได้มากกว่าที่คุณคิด
- ประคองเสียงให้นิ่ง การสั่นเสียง (vibrato) จะทำให้ค่าเซนต์แกว่งแม้ว่าระดับเสียงเฉลี่ยจะถูกต้องก็ตาม
- ใช้ไมโครโฟนแยกถ้าเป็นไปได้ ไมโครโฟนแล็ปท็อปมักจะตัดเสียงที่ต่ำกว่า ~80 Hz ซึ่งทำให้ตรวจจับโน้ตเบสต่ำๆ ไม่ได้
- เข้าใกล้ไมโครโฟน การเพิ่มระยะห่างจากไมโครโฟนเป็นสองเท่าจะทำให้ระดับสัญญาณที่เครื่องตรวจจับได้รับลดลงเหลือเพียงหนึ่งในสี่
คำถามที่พบบ่อย
ฉันสามารถใช้เครื่องนี้ตั้งสายเครื่องดนตรีอะไรได้บ้าง?
อะไรก็ตามที่สร้างเสียงโน้ตตัวเดียวค้างไว้ในช่วงความถี่ประมาณ 40 Hz – 2.2 kHz: กีตาร์, กีตาร์เบส, อูคูเลเล่, ไวโอลิน, วิโอลา, เชลโล, ฮาร์ป, เครื่องเป่าทองเหลือง, เครื่องลมไม้ และเสียงร้องเพลงของคุณ ส่วนกลอง ฉาบ และการเล่นคอร์ดเปียโนแบบเต็มคอร์ดจะไม่สามารถตรวจจับได้ — เพราะระบบ autocorrelation ต้องการความถี่หลักเพียงความถี่เดียว
ทำไมตัวโน้ตถึงกระโดดไปมาตอนฉันร้องเพลง — เป็นที่ฉันหรือที่เครื่องมือ?
ส่วนใหญ่เกิดจากเสียงของคุณเอง แต่อาจจะไม่ใช่ในแบบที่คุณคิด ไมโครโฟนจะจับทั้งเสียงร้อง ลมหายใจ และเสียงสะท้อนในห้องรวมกัน ซึ่งการแกว่งของเสียงเพียงเล็กน้อยที่หูมนุษย์ไม่ได้ยินจะแสดงผลเป็นการแกว่งของค่าเซนต์ประมาณ ±20 เซนต์ ลองร้องโน้ตให้ดังขึ้นและนิ่งขึ้น แล้วค่าที่อ่านได้จะเสถียรขึ้นเอง
ทำไมเครื่องถึงหยุดตรวจจับเมื่อเจอโน้ตที่ต่ำมากหรือสูงมาก?
เครื่องตรวจจับถูกจำกัดไว้ที่ช่วงประมาณ 40 Hz – 2.2 kHz ต่ำกว่า 40 Hz ไมโครโฟนแล็ปท็อปส่วนใหญ่จะรับเสียงไม่ได้ และสูงกว่า 2.2 kHz เสียงโอเวอร์โทนจะเริ่มรบกวนจนทำให้การประมาณค่าระดับเสียงไม่น่าเชื่อถือ อย่างไรก็ตาม ในช่วงนี้เครื่องมือสามารถครอบคลุมได้ตั้งแต่โน้ต B0 ต่ำสุดของเบส 5 สาย ไปจนถึงช่วงเสียงสูงสุดของนักร้องโซปราโน
มีการบันทึกเสียงหรือส่งข้อมูลไปยังเซิร์ฟเวอร์หรือไม่?
ไม่มี การวิเคราะห์เสียงทั้งหมดเกิดขึ้นภายในเบราว์เซอร์ของคุณโดยใช้ Web Audio API ไม่มีการอัปโหลด จัดเก็บ หรือส่งข้อมูลใดๆ เมื่อคุณหยุดการตรวจจับหรือปิดแท็บ สตรีมเสียงก็จะสิ้นสุดลงทันที