ผู้เขียน Instructables ภายใต้ชื่อเล่น rgco ได้สร้างซินธิไซเซอร์สี่ระดับเสียงสี่ระดับ Arduino Uno สำหรับการเปรียบเทียบซินธิไซเซอร์สำหรับเด็กที่แพร่หลายซึ่งแตกต่างจากการออกแบบและสร้างโดยชิปตัวเดียวกันนั้นเป็นเสียงสามเสียง จริงพวกเขาสามารถเล่นดนตรีโดยอัตโนมัติตามจังหวะจดจำท่วงทำนองด้วยเสียงเดียวและเลียนแบบเสียงสัตว์ แต่แล้ว สินค้าทำที่บ้าน เสียงดีกว่า ทำไม?
ทุกอย่างเกี่ยวกับพารามิเตอร์ ความถี่ในการสุ่มตัวอย่าง 31 kHz, 9 บิต, 4 เสียง, การสังเคราะห์เอฟเอ็มพร้อมด้วยการกวาดเวลาที่แตกต่างกัน, ซอง ADSR, 12 เครื่องมือเสมือน, 18 คีย์ที่ประกอบไปด้วย 1.5 อ็อกเทฟ
ต้นแบบประกอบด้วยวงจรซินธิไซเซอร์ใน Fritzing:
ในนั้นมันจำลองตำแหน่งของส่วนประกอบบนเขียงหั่นขนมประเภทเขียงหั่นขนมและการเชื่อมต่อระหว่างพวกเขา:
และรวบรวมรูปแบบในชีวิตจริง:
เพียงแค่“ เทและใช้” เป็นสิ่งที่ง่ายที่สุดที่คุณสามารถทำได้กับการออกแบบ 18 คีย์ (จากก่อนที่คู่ที่สี่ถึง FA ห้า) - เพื่อเล่นสิบเก้าสลับเครื่องดนตรีเสมือนในแหวน: เปียโน, ระนาด, กีตาร์, ฉิ่ง, ระฆัง, ขี้ขลาด, vibrato, โลหะ, ไวโอลิน, ทรัมเป็ต, หีบเพลง ลักษณะของเสียงนั้นได้รับผลกระทบตามระยะเวลาของการกดแป้น แต่ไม่ใช่ความพยายามซึ่งต่างจากซินธิไซเซอร์ระดับมืออาชีพ แต่ผู้พัฒนาต้องการให้คุณลองเขียนโปรแกรมเครื่องมือเสมือนของคุณด้วย แต่ละคนจะได้รับจากสิบพารามิเตอร์ ตัวช่วยสร้างจะบอกคุณว่าพารามิเตอร์นั้นขึ้นอยู่กับอะไร
ldness - ปริมาณ
หากพารามิเตอร์นี้น้อยกว่า 64 จะไม่รวมการโอเวอร์โหลดและการบิดเบือนที่เกี่ยวข้อง แต่ถ้าคุณตั้งโปรแกรมอุปกรณ์เสมือนดังกล่าวที่ไม่ส่งเสียงที่ระดับความดังสูงสุดเป็นเวลานานค่าของพารามิเตอร์นี้อาจเกิน 64 เนื่องจากเสียงทั้งสี่เสียงพร้อมกันไม่บ่อยนัก
pitch0 - การเปลี่ยนระดับเสียง
ช่วงสอดคล้องกับข้างต้นถ้าคุณตั้งค่าพารามิเตอร์นี้เป็น 12 ลดการย้ายลงเพิ่มขึ้น ศูนย์สอดคล้องกับการเลื่อนลงหนึ่งคู่แปดเท่าและ 24 ขึ้นไปหนึ่งคู่
ADSR_a - อัตราการฆ่าปริมาณจากศูนย์ถึงสูงสุด
ยิ่งเล็กลงก็ยิ่งช้าตัวอย่างเช่น 8192 สอดคล้องกับ 4 ms, 256 ถึง 128 ms
ADSR_d - ความเร็วในการลดปริมาณจากค่าสูงสุดเป็นค่าที่ระบุโดยพารามิเตอร์ ADSR_s
หลักการเดียวกัน
ADSR_s - ค่าที่ปริมาณลดลงเมื่อกดปุ่มเป็นเวลานาน
ตัวอย่างเช่น 256 - ปริมาณยังคงสูงสุดตลอดเวลาในขณะที่ถือกุญแจ 192 - ระดับเสียงลดลงถึง 80 เปอร์เซ็นต์และยังคงอยู่ในขณะที่กดปุ่มค้างไว้ 0 - ระดับเสียงจะลดลงเป็นศูนย์แม้ว่าจะกดปุ่มค้างไว้ก็ตาม
ADSR_r - ความเร็วในการลดระดับเสียงเป็นศูนย์หลังจากปล่อยคีย์
หลักการเหมือนกับพารามิเตอร์ ADSR_a และ ADSR_d
FM_inc - อัตราส่วนของความถี่มอดูเลตต่อเสียง
ด้วยค่า 256 อัตราส่วนนี้จะกลายเป็น 1: 1 โดยมี 512 - 2: 1 โดยมี 128 - 1: 2 ส่วนที่เหลือจะเป็นแบบอะนาล็อก หากพารามิเตอร์นี้ถูกตั้งค่าเป็นทวีคูณของ 64 เสียงจะไม่เป็นอันตราย
FM_a1 - ช่วงของการปรับความถี่ที่จุดเริ่มต้นของโน้ต
256 สอดคล้องกับช่วงฮาร์โมนิกที่หลากหลาย ด้วยการลดลงของโทนเสียงที่สะอาดยิ่งขึ้นด้วยการเพิ่มความกลมกลืนของเสียงจะยิ่งมากขึ้น
FM_a2 - การปรับความถี่การกวาดเมื่อสิ้นสุดโน้ต
หลักการเดียวกัน สำหรับเครื่องดนตรีจริงส่วนใหญ่ฮาร์มอนิกจะสลายตัวเร็วกว่าน้ำเสียงพื้นฐาน หากคุณทำตรงกันข้ามคุณจะได้รับเสียงที่ผิดปกติ
FM_dec - ความเร็วการเปลี่ยนแปลงของช่วงการปรับความถี่จากชุดที่ตั้งไว้โดย FM_a1 เป็นชุดที่กำหนดโดย FM_a2
หลักการเหมือนกับพารามิเตอร์ ADSR_a, ADSR_d และ ADSR_r
ความถี่ PWM ที่ 31,250 Hz นั้นได้มาจากการหารความถี่สัญญาณนาฬิกา (16 MHz) ด้วย 512 โปรแกรมได้รับการออกแบบในลักษณะที่เหตุการณ์เชื่อมโยงกับเวลาโดยไม่มีการขัดจังหวะ บิตที่เกี่ยวข้องกับตัวจับเวลา เพื่อให้โปรแกรมจัดการทำทุกอย่างที่จำเป็นต้องใช้เฉพาะจำนวนเต็ม 8 และ 16 บิตที่มีความยาว คลื่นไซน์ถูกนำเสนอในรูปแบบของตารางจำนวน 8 บิต การดำเนินงานเสริม - การอ่านสถานะคีย์การเปลี่ยนเครื่องมือเสมือนการเลือกเสียงการคำนวณพารามิเตอร์บันทึกย่อที่เปลี่ยนแปลงเวลา - มีการกระจายใน 15 ขั้นตอนซึ่งใช้เวลา 0.48 มิลลิวินาทีในการดำเนินการให้เสร็จสมบูรณ์ ในเวลานี้การดำเนินการบางอย่างดำเนินการด้วยความแม่นยำ 32 บิตซึ่งจำเป็นต้องคูณเลขฐานสอง 16 บิตสองรายการ
คลื่นไซน์เรียบง่ายฟังดูน่าเบื่อเพราะไม่มีฮาร์โมนิกส์ในสเปกตรัม การสังเคราะห์ FM ช่วยให้คุณสามารถรับและเปลี่ยนคลื่นความถี่ได้ตลอดเวลาจำลองเสียงเครื่องดนตรีจริง ความถี่ที่หลากหลายให้เสียง anharmonic ที่เกิดขึ้นเช่นในระฆัง อุปกรณ์เลียนแบบการเปลี่ยนแปลงของคลื่นความถี่ในเครื่องดนตรีจริงเมื่อเวลาผ่านไปเมื่อเสียงประสานบางตัวสลายตัวเร็วกว่าตัวอื่น ๆ