Algorithmic Symphony: Synthesizing 'Bella Ciao'
Arduino ไม่สามารถจัดการไฟล์ .mp3 ที่บีบอัดหนักๆ ได้โดยตรง เนื่องจากสมองขนาดเล็กแบบ 8-bit ของมันไม่มีทั้ง RAM และ Digital-to-Analog Converter (DAC) ที่จำเป็น โปรเจกต์ Bella Ciao Buzzer Music นี้ทำงานโดยการสังเคราะห์เสียงแบบฟิสิกส์ดิบที่ทรงพลัง! โดยการแมปค่าความถี่ตัวเลขทางคณิตศาสตร์ที่แน่นอน (เช่น Note C4 = 261 Hertz) อย่างชัดเจนไปยังฟังก์ชัน tone() อันเป็นที่รู้จัก Arduino ใช้โมดูล Timer ออนบอร์ดได้อย่างสมบูรณ์แบบเพื่อเขย่าแผ่น piezoelectric เซรามิกไปมาอย่างรวดเร็วทันที ทำให้เกิดการสั่นสะเทือนในอากาศจนกลายเป็นท่วงทำนองทางอัลกอริทึมที่ซับซ้อนและจดจำได้!

การจัดโครงสร้างเอาต์พุต: อาร์เรย์ Melody และ Duration
คุณไม่สามารถพิมพ์ tone(8, 261); delay(500); ซ้ำกัน 300 ครั้งได้อย่างมีประสิทธิภาพ! คุณต้องจัดโครงสร้างอาร์เรย์หนึ่งมิติสองชุดอย่างชัดเจนเพื่อเก็บลำดับข้อมูลโน้ตเพลงที่ซับซ้อนอย่างน่าทึ่ง!
- อาร์เรย์
melody[]: บรรจุความถี่ Hertz ทางกายภาพที่แน่นอน (ระดับเสียง) - อาร์เรย์
durations[]: บรรจุระยะเวลาที่แม่นยำทางคณิตศาสตร์ (4 = โน้ตตัวดำ, 8 = โน้ตเขบ็ตหนึ่งชั้น)
#include "pitches.h" // A massive text file indexing ALL musical notes to Ints!
// The Bella Ciao specific sequence of explicit musical math!
int melody[] = { NOTE_E4, NOTE_A4, NOTE_C5, NOTE_B4, NOTE_A4, NOTE_E4 };
int durations[] = { 4, 4, 4, 4, 4, 2 }; // The beat lengths corresponding exactly to the notes!
void setup() {
for (int i = 0; i < 6; i++) {
// Math: 1000ms divided by duration! (e.g., 1000/4 = 250ms per Quarter Note!)
int noteDurationMatrix = 1000 / durations[i];
tone(8, melody[i], noteDurationMatrix); // Hit the physical string!
// Create incredibly small 130% padding gaps between identical notes so they don't slur!
int pauseBetweenNotes = noteDurationMatrix * 1.30;
delay(pauseBetweenNotes);
noTone(8); // Halt vibration completely prior to striking the successive integer!
}
}
การสร้างสถาปัตยกรรมไฟล์ Header pitches.h
แทนที่จะเดาสุ่มว่าโน้ต F#5 (F-Sharp) สร้างความถี่เท่าใด นักพัฒนาจะใช้ประโยชน์จากไฟล์ header ที่รวมมาให้
- เมื่อเปิดแท็บใหม่ใน Arduino IDE เพื่อสร้าง
pitches.hคุณจะแมปข้อความ#defineนับพันรายการกับตัวเลขเต็มดิบโดยตรง - ตัวอย่าง:
#define NOTE_A4 440(มาตรฐานการตั้งเสียงสากลที่แน่นอน!) - ซึ่งจะทำให้คณิตศาสตร์ความถี่ที่ซับซ้อนถูกลดทอนลงไปอย่างสิ้นเชิง ช่วยให้คุณสามารถถอดโน้ตเพลงเปียโนธรรมดาลงในอาร์เรย์ซิลิคอนดิบได้อย่างหมดจดโดยไม่จำเป็นต้องใช้เครื่องคิดเลข!
ส่วนประกอบทางอะคูสติกที่จำเป็น
- Arduino Uno/Nano (จัดการ Timer loops ความเร็วสูงได้อย่างสมบูรณ์แบบ!)
- Passive Piezo Buzzer (เดี๋ยวก่อน คำเตือน! อย่าซื้อ "Active Buzzer" ที่มีจุดสีดำบนตัวมัน! Active Buzzer จะสร้างเสียงบี๊บ 2000Hz ที่คงที่โดยไม่ขึ้นกับ
tone()คุณต้องใช้ "Passive" Buzzer ซึ่งอนุญาตให้มีการสั่นของคลื่น square wave แบบกำหนดเองได้โดยตรงเท่านั้น!) - ไลบรารีโค้ด Pitches.h (จำเป็นสำหรับขั้นตอนการถอดเสียงที่มนุษย์อ่านได้)
- ตัวต้านทาน 100-Ohm (ไม่บังคับ แต่การใส่สิ่งนี้แบบอนุกรมจะช่วยลดความรุนแรงของคลื่น square wave ที่ส่งเสียงแหลมอย่างรุนแรงได้อย่างมาก สร้างโทนเสียงที่น่าฟังยิ่งขึ้นอย่างไม่มีที่สิ้นสุด!)