Voicebox FX: เปลี่ยนเสียงด้วย CircuitPython I2S
อยากลองทำ Voice Changer บนไมโครคอนโทรลเลอร์ แต่พอเจอคำว่า I2S, Audio Buffer, WAV, Pitch Shift ก็เริ่มรู้สึกว่าเรื่องเสียงมันยากเกินไป?
Voicebox FX เป็น Project ที่ช่วยแกะเรื่องพวกนี้ ให้เห็นเป็นสายงานเดียวตั้งแต่ รับเสียงจากไมโครโฟน, บันทึกเป็น WAV, เล่นกลับ, ใส่ Pitch, Reverb, Echo แล้วส่งเสียงออกลำโพง ทั้งหมดบน CircuitPython
Hackaday เลยมอง Project นี้ ไม่ใช่แค่ Gadget เปลี่ยนเสียงสนุก ๆ แต่เป็นเหมือน Reference Design สำหรับ CircuitPython I2S Audio ที่เอาไปต่อยอด Project เสียงอื่นได้อีกเยอะ
Key Takeaways
- Controller หลักคือ Adafruit Feather RP2350 with HSTX Port and 8MB PSRAM
- รับเสียงด้วย ICS-43434 I2S MEMS Microphone
- ส่งเสียงออกผ่าน MAX98357A I2S 3W Class-D Amplifier
- ใช้ Mini Oval Speaker 8Ω 1W
- อัด Audio Sample ได้สูงสุด 20 วินาทีตาม Code ของ Project
- Recording ใช้ Sample Rate 16 kHz
- Mic รับข้อมูล I2S และแปลง Output เป็น 16-bit Mono สำหรับระบบ Playback
- ไฟล์ Recording ถูกบันทึกเป็น
/recording.wav - สามารถเล่น Recording แบบ Loop
- Physical Controls หลักคือ Pitch, Reverb และ Delay/Echo
- Effect Chain ใช้ PitchShift → Freeverb → Echo → Distortion
- Distortion ใน Code ถูกใช้เป็น Gain Boost ไม่ใช่ Effect Knob สำหรับผู้ใช้
- NeoPixel 8 ดวงใช้บอก State ของ Recording / Saving / Playback / Error
- ใช้ Battery 3.7V 2200mAh ทำให้เป็นอุปกรณ์พกพา
- เคสมี 3MF และ CAD Source สำหรับ FDM 3D Printing
- Minimum Build Volume คือ 80 × 130 × 16 mm
- Project ระบุ PLA สำหรับชิ้นส่วน 3D Print
Voicebox FX คืออะไร?
Adafruit สร้าง Voicebox FX เป็นอุปกรณ์บันทึกเสียงแบบพกพา ที่ให้เราอัดเสียงสั้น ๆ แล้วเล่นกลับพร้อมเปลี่ยน Character ของเสียงด้วย Physical Controls
ผู้ใช้ไม่ต้องเปิด Laptop เพื่อหมุน Effect ระหว่าง Playback
บนตัวเครื่องมี:
- ปุ่ม Record
- ปุ่ม Play
- Slide Potentiometer สำหรับ Pitch
- Rotary Pot สำหรับ Reverb
- Rotary Pot สำหรับ Delay / Echo
- NeoPixel Status Lights
- Speaker ในตัว
จุดที่ทำให้มันน่าสนใจสำหรับ Maker คือทุกอย่างไม่ได้เกิดจาก Audio Chip สำเร็จรูปที่ซ่อน Logic ไว้หมด
RP2350 รับ Audio, บันทึก, จัดการ WAV, สร้าง Effect Chain และควบคุม Playback ผ่าน CircuitPython ให้เราเห็น Workflow ค่อนข้างครบ
I2S คืออะไรแบบไม่ต้องเปิด Datasheet ก่อน?
I2S ย่อมาจาก Inter-IC Sound
ถ้าอธิบายแบบ Maker:
มันคือ Interface สำหรับส่งข้อมูลเสียงแบบดิจิทัล ระหว่าง Component
ต่างจากการอ่าน Analog Microphone ตรงที่ Audio Data ถูกส่งเป็น Digital Stream ผ่านสัญญาณ Clock และ Data
↓
I2S Microphone
↓
Digital Audio Data
↓
Feather RP2350
↓
Digital Audio Processing
↓
I2S Amplifier
↓
Speaker
ทำไม Voicebox FX ถึงเป็น Reference ที่ดี? เพราะมีทั้ง I2S Input และ I2S Output อยู่ใน Project เดียว ทำให้เราเห็นทั้งเส้นทาง “รับเสียงเข้า” และ “ส่งเสียงออก” แบบครบวงจร
Audio Architecture: จากเสียงพูดไปจนถึงเสียงที่ผ่าน Effect
มองภาพรวม Project นี้แยกเป็นสองช่วง:
ช่วงที่ 1 — Recording
↓
Feather RP2350
↓
Audio Capture ใน Memory
↓
เขียนเป็น recording.wav ลง CIRCUITPY
ช่วงที่ 2 — Playback + Effects
↓
Pitch Shift
↓
Reverb
↓
Echo
↓
Gain Boost
↓
I2S Output
↓
MAX98357A
↓
Speaker
Project ไม่ได้ใส่ Effect ลงไปในไฟล์ต้นฉบับถาวร ก่อน Playback
ตอนเล่นกลับ Audio ถูกส่งผ่าน Effect Chain และ Potentiometer เปลี่ยน Parameter ระหว่างที่เสียงกำลัง Loop
Hardware ที่ใช้ใน Voicebox FX
| อุปกรณ์ | หน้าที่ใน Project |
|---|---|
| Adafruit Feather RP2350 with HSTX Port and 8MB PSRAM | Controller หลักสำหรับ Recording, WAV, Effects และ I/O |
| Adafruit I2S MEMS Microphone Breakout – ICS-43434 | รับเสียงแบบ Digital I2S |
| Adafruit I2S 3W Class-D Amplifier – MAX98357A | รับ I2S Output และขับ Speaker |
| Mini Oval Speaker 8Ω 1W | เล่นเสียงออกจากตัวเครื่อง |
| NeoPixel Stick 8 × RGB LED | แสดงสถานะ Power, Record, Save, Playback และ Error |
| 45mm Slide Potentiometer | ควบคุม Pitch Shift |
| 10K Rotary Potentiometer ×2 | ควบคุม Reverb และ Delay/Echo |
| Kailh Choc Low Profile Key Switches | ใช้เป็นปุ่ม Record / Play |
| Mini SPDT Toggle Switch | กำหนด CIRCUITPY Read/Write State ผ่าน D25 |
| SPDT Slide Switch | เปิด/ปิด Power ผ่าน EN |
| Li-ion Battery 3.7V 2200mAh | Power สำหรับ Portable Build |
| Snap-action Wire Block Connectors | รวม Shared Ground และ Shared 3V Wiring |
| 4-wire Silicone Ribbon Cable | งาน Wiring ภายใน |
| 30AWG Silicone Wire | งาน Signal / Power Wiring ภายใน Case |
Fasteners ตาม Build
- 6 × M2.5 × 4 mm
- 4 × M2.5 × 6 mm
- 2 × M2 × 4 mm
- 2 × M2 × 6 mm ตาม Parts List
- 6 × M3 × 6 mm
หมายเหตุ: Assembly Page มีขั้นตอนติด Slide Pot ที่กล่าวถึง M2 × 8 mm ขณะที่ Overview Fastener List แจกแจง M2 ขนาดอื่น ดังนั้นก่อนพิมพ์ Case หรือสั่งสกรูจำนวนมาก แนะนำเปิด Assembly Guide เวอร์ชันล่าสุดตรวจซ้ำอีกครั้ง
Wiring: I2S เข้าและออกใช้ Pin คนละชุด
ICS-43434 I2S Microphone → Feather RP2350
| Feather RP2350 | ICS-43434 |
|---|---|
| 3V | VDD |
| GND | GND |
| D9 | DOUT |
| D5 | BCLK |
| D6 | LRCL |
MAX98357A I2S Amplifier → Feather RP2350
| Feather RP2350 | MAX98357A |
|---|---|
| 3V | VIN |
| GND | GND |
| D11 | LRC |
| D10 | BCLK |
| SCL | DIN |
Controls / Status
| Pin | Function |
|---|---|
| A0 | Slide Potentiometer — Pitch |
| A1 | Rotary Potentiometer — Reverb |
| A2 | Rotary Potentiometer — Delay/Echo Parameter |
| D24 | Record Button |
| A3 | Play Button |
| D12 | NeoPixel Data |
| D25 | CIRCUITPY Read/Write Toggle |
| EN | Power Slide Switch |
ชื่อ Variable ใน Code อาจชวนงง: Input A2 ถูกตั้งชื่อตัวแปรว่า dist_slide แต่ Code ปัจจุบันนำค่าจาก Input นี้ ไปควบคุม echo.decay ดังนั้น Physical Knob ด้านขวา คือ Delay/Echo Control ไม่ใช่ Distortion Knob
Recording: สูงสุด 20 วินาที และบันทึกเป็น WAV
เมื่อกด Record:
- I2S Output ถูกหยุดเพื่อ Mute ฝั่ง Speaker
- NeoPixel เปลี่ยนเป็นสีแดง
- ระบบสร้าง Memory Buffer สำหรับเก็บ Audio
- I2S Microphone เริ่มส่ง Audio เข้า Buffer
Config ปัจจุบัน ตั้ง:
- Sample Rate: 16,000 Hz
- Maximum Recording: 20 วินาที
- Mono Output
- 16-bit Output Audio
- File:
/recording.wav
ตัว I2S Microphone ถูก Config ให้รับข้อมูลที่ Bit Depth สูงกว่า แล้ว Output เป็น 16-bit สำหรับเส้นทาง Audio ของ Project
ตอนกด Record อีกครั้ง
Recording จะหยุด แล้ว NeoPixel เปลี่ยนเป็นสีเหลือง ระหว่างที่ข้อมูลใน Memory ถูกเขียนลง CIRCUITPY เป็น WAV File
จุดที่น่าเรียนรู้: Project ไม่เขียนทุก Sample ลง Flash ทันที แต่ Capture Audio ไว้ใน Memory ก่อน แล้วค่อยสร้าง WAV File เมื่อจบ Recording
Effect Chain มี 4 Stage แต่ผู้ใช้ปรับจริง 3 อย่าง
Code ประกอบ Effect Chain เป็น:
↓
PitchShift
↓
Freeverb
↓
Echo
↓
Distortion Module ใช้ Gain Boost
↓
Mixer
↓
I2S Out
1. Pitch Shift
Slide Potentiometer ใช้เปลี่ยน Semitone ของเสียง
Code Map ค่าจาก Slider ไปประมาณ -13 ถึง +13 Semitones ซึ่งผู้เขียน Code อธิบายในบริบท การเลื่อน Pitch ขึ้นหรือลงประมาณหนึ่ง Octave
2. Reverb
Potentiometer ฝั่งซ้าย ควบคุมสัดส่วน Reverb ใน Mix
3. Delay / Echo
Potentiometer ฝั่งขวา ควบคุมค่า Echo Decay
4. Distortion
แม้ Source Code จะสร้าง Distortion Object แต่ Guide อธิบายตรง ๆ ว่า Stage นี้ ถูกใช้เป็น:
Gain Boost สำหรับ I2S Output
ดังนั้นอย่าโปรโมตว่าเครื่องมี “Distortion Knob”: Physical Controls ที่ผู้ใช้หมุนเพื่อเปลี่ยน Effect คือ Pitch, Reverb และ Delay/Echo
Physical Controls: ไม่ต้องเปิด Serial Console ตอนเล่น
| Control | หน้าที่ |
|---|---|
| Record Button | กดเริ่มอัด / กดอีกครั้งเพื่อหยุดและ Save |
| Play Button | เล่น Recording แบบ Loop / กดอีกครั้งเพื่อหยุด |
| Slide Pot | เลื่อนซ้ายลด Pitch, เลื่อนขวาเพิ่ม Pitch, ตรงกลางกลับใกล้ Pitch เดิม |
| Rotary Pot ซ้าย | เพิ่มหรือลด Reverb |
| Rotary Pot ขวา | เพิ่มหรือลด Delay/Echo |
| Slide Switch | Power On / Off |
| Toggle Switch | กำหนด Filesystem Mode สำหรับ CIRCUITPY |
NeoPixel 8 ดวงไม่ได้มีไว้ทำไฟ RGB เท่ ๆ อย่างเดียว
Project ใช้แสงเป็น Status Interface เพื่อบอกว่าเครื่องกำลังทำอะไร
| สี / Behavior | สถานะ |
|---|---|
| Purple ไล่ทีละดวง | Power-on / Startup Sound |
| แดง | กำลัง Recording |
| เหลือง | กำลังเขียน WAV ลง CIRCUITPY |
| เขียว | กำลัง Playback |
| น้ำเงิน | Error เช่น Filesystem เขียนไม่ได้ หรือหา Recording ไม่เจอ |
| ดับ | Idle / Playback หยุดแล้ว |
ทำไม Voicebox FX ต้องมี Toggle สำหรับ CIRCUITPY?
ปกติเวลาเราเสียบ CircuitPython Board เข้าคอมพิวเตอร์ CIRCUITPY Drive ถูกใช้แก้ไฟล์ code.py และ Library
แต่ Voicebox FX มีอีกโจทย์:
ตัวไมโครคอนโทรลเลอร์เองต้องเขียน recording.wav ลง Drive
Project จึงใช้ boot.py กับ Toggle Switch บน D25 เพื่อกำหนด Filesystem Mode ตั้งแต่ Boot
↓
CircuitPython เขียน CIRCUITPY ได้
↓
recording.wav สามารถถูก Save
D25 ไม่ต่อ Ground
↓
ใช้โหมดที่เหมาะกับการแก้ไฟล์ผ่าน Computer
ถ้าลืมเปลี่ยนโหมดก่อน Record: Code มี Error Handling และใช้ NeoPixel สีน้ำเงิน เพื่อบอกว่าไม่สามารถ Save File เพราะ Filesystem อยู่ในโหมดที่เขียนไม่ได้
CircuitPython Version รอบนี้มี Requirement ใหม่กว่าปกติ
Adafruit Guide ระบุว่า Project นี้ ใช้ Module Audio ใหม่หลายตัว เช่น:
audioi2sinaudiofilewriter- Pitch-shifting Module ตาม Project Bundle
ตอนที่ Guide เผยแพร่ ผู้สร้างระบุให้ใช้:
CircuitPython 10.3.0.alpha-4 หรือใหม่กว่า
จนกว่า CircuitPython 10.3.0 Stable จะออก
อย่าล็อกตัวเองไว้ที่ alpha-4 ตลอด: Requirement นี้เป็นสถานะของ Guide ณช่วงที่ Project เผยแพร่ ก่อนลงมือทำควรเปิด Install CircuitPython Page และตรวจ Release ล่าสุด ที่ผู้พัฒนาแนะนำอีกครั้ง
มี 2 จุดใน Guide ที่ชื่อไม่ตรงกัน ควรรู้ไว้ก่อน Copy File
1. GranularPitchShift vs PitchShift
หน้า Install CircuitPython กล่าวถึง Module ใหม่ ชื่อ GranularPitchShift
แต่ Code ที่แสดงในหน้า Code the Voicebox สร้าง Effect ด้วย:
audiodelays.PitchShift
บทความนี้จึงใช้คำกลางว่า:
Pitch Shift Effect ของ CircuitPython
และเวลาพูดถึง Implementation จะอิงชื่อที่ Code ปัจจุบันใช้
2. bootbeep.wav vs bootbeeps.wav
รายการไฟล์ที่หน้า Guide บอกให้ Copy เขียนว่า:
bootbeep.wav
แต่ Code ที่เปิด Startup Sound ใช้ชื่อ:
bootbeeps.wav
วิธีที่ปลอดภัยที่สุด: ดาวน์โหลด Project Bundle ของ Guide Version ล่าสุด แล้วใช้ชื่อไฟล์ ตาม Bundle และ Code ที่มากับ Version เดียวกัน ไม่ควร Rename จากบทความสรุปเพียงอย่างเดียว
3D Printed Case ทำให้ Project จากวงจรทดลองกลายเป็น Gadget จริง
ตัว Case ไม่ได้มีไว้แค่ปิดสายไฟ
Adafruit ออกแบบตำแหน่งสำหรับ:
- Feather RP2350
- I2S Amplifier
- I2S Microphone
- Battery
- NeoPixel Stick
- Toggle Switch
- Power Switch
- Potentiometers
- Record / Play Buttons
- Speaker
ไฟล์ที่แจก
- Individual 3MF Files ที่จัด Orientation พร้อมสำหรับ FDM
- Original CAD Source Files
Material
Source ระบุให้พิมพ์ ด้วย:
PLA Filament
Minimum Build Volume
Printer ต้องมีพื้นที่พิมพ์อย่างน้อย:
80 × 130 × 16 mm
Multi-color
Top Half ของ Case ถูกออกแบบสำหรับ Multi-color / AMS จำนวน 3 สี
LED Diffuser แนะนำ White หรือ Clear PLA
Knob และ Keycap มีส่วนที่ใช้ 2 สี
ไม่มี AMS ก็ทำได้
ZIP File มี:
Single-color Blank Versions
ดังนั้น Project ไม่ได้บังคับว่าต้องมี Multi-material Printer เท่านั้น
ไม่มีเครื่อง 3D Printer? ถ้าต้องการทำ Case ของ Voicebox FX หรือมีไฟล์ 3MF / CAD / STL สำหรับ Project Maker อื่น สามารถส่งไฟล์ให้ทีม Globalbyte ช่วยประเมินบริการรับพิมพ์ 3D ได้ก่อนเริ่มงานจริง
เรื่องสิทธิ์การใช้ไฟล์: ก่อนนำ CAD / 3MF ไปผลิตเพื่อจำหน่ายเชิงพาณิชย์ ควรตรวจ License และเงื่อนไขจากหน้า Project / ไฟล์ต้นฉบับ เวอร์ชันล่าสุดก่อนเสมอ
Assembly: แบ่ง Bottom Case กับ Top Case ชัดเจน
CAD Design แบ่งตำแหน่งอุปกรณ์ไว้ค่อนข้างเป็นระบบ
Bottom Half
- Feather RP2350
- I2S Amplifier
- Battery
- NeoPixel Stick
- Toggle Switch
- Slide Power Switch
- Wago / Block Connectors
Top Half
- I2S Microphone
- Speaker
- 2 × Rotary Potentiometers
- Slide Potentiometer
- Record / Play Key Switches
Step-by-Step Assembly Flow
ติด NeoPixel Mount
ยึด Mount เข้ากับ Bottom Case ก่อนติด NeoPixel Stick
ใส่ Battery และ Power Switch
Battery 2200mAh ถูกกดเข้ากับ Clip ที่ออกแบบไว้ใน Bottom Case และติด Slide Switch ใน Holder ของ Case
ติด Feather และ Amplifier
วาง Board บน Standoff ที่ออกแบบไว้ และยึดด้วย Machine Screws
ติด Toggle และ NeoPixel
Toggle Switch ยึดผ่านช่อง Case ส่วน NeoPixel Stick ยึดลง Mount
ติด Speaker และ Microphone
Speaker อยู่ใน Recess ของ Top Case ส่วน I2S Mic อยู่บน Standoff แยกของตัวเอง
ติด Button Plate และ Potentiometers
ใส่ Rotary Pots, Slide Pot และ Key Switch Assembly ตามช่องที่ออกแบบไว้
รวม Shared Ground
Ground จากอุปกรณ์ต่าง ๆ ถูกรวมผ่าน Block Connector ที่ติดอยู่ใน Bottom Case
รวม 3V Distribution
3V จาก Feather ถูกกระจายผ่านอีก Block ไปยัง Mic, Amp และ Potentiometers
ประกบ Case
เช็กให้สายทั้งหมด อยู่ด้านใน ก่อนยึด Top และ Bottom เข้าด้วยกัน
ใส่ Knobs และ Keycaps
ปิดงานด้วย Rotary Knobs, Slider Knob และ Keycaps
วิธีใช้ Voicebox FX แบบ Step-by-Step
เปิด Power
ใช้ Slide Switch ด้านข้าง Case เปิดเครื่อง
NeoPixel จะไล่ขึ้นทีละดวง ระหว่าง Startup Tune ก่อนเข้าสู่สถานะพร้อมใช้งาน
กด Record
NeoPixel เปลี่ยนเป็นสีแดง เพื่อบอกว่ากำลังอัดเสียง
กด Record อีกครั้งเพื่อหยุด
ไฟเปลี่ยนเป็นสีเหลือง ระหว่างเขียน recording.wav ลง CIRCUITPY
กด Play
ไฟเปลี่ยนเป็นสีเขียว และ Recording เริ่มเล่นแบบ Loop
เลื่อน Pitch
เลื่อน Slider ไปซ้ายเพื่อลด Pitch, ไปขวาเพื่อเพิ่ม Pitch และกลับตรงกลาง เพื่อเข้าใกล้เสียงต้นฉบับ
หมุน Reverb
Potentiometer ฝั่งซ้าย เพิ่มหรือลดปริมาณ Reverb
หมุน Echo
Potentiometer ฝั่งขวา เปลี่ยน Delay/Echo ของเสียงที่กำลังเล่น
กด Play เพื่อหยุด
Playback หยุด และ NeoPixel กลับเป็นสถานะดับ
Code Snippet ที่ช่วยให้เห็น Architecture
Project มี Source Code เต็ม บน Adafruit Guide แต่ในบทความนี้ เลือกเฉพาะ Config สั้น ๆ ที่ช่วยให้เข้าใจ Flow โดยไม่แทนที่ Code ต้นฉบับ
SAMPLE_RATE = 16000
OUTPUT_PATH = "/recording.wav"
MAX_RECORD_SECONDS = 20
storage.remount("/", readonly=switch.value)
pitch_shift.play(wav, loop=True)
reverb.play(pitch_shift, loop=True)
echo.play(reverb, loop=True)
amp.play(echo, loop=True)
อย่าใช้ Snippet นี้แทน Source Code เต็ม: Project ยังมี Import, Pin Setup, Audio Mixer, Error Handling, NeoPixel State, Button Logic และ Library Dependencies อีกหลายส่วน ควรเปิด Code ต้นฉบับ ก่อน Flash ลง Board
ดู Case และ Demo เพิ่มเติม
รอบนี้มีหลายภาพ และมีวิดีโอ 2 ตัว จึงแสดง Hero เพียงภาพเดียวด้านบน ส่วน Media อื่น ซ่อนไว้ใน Pure CSS View more
ทำไม Hackaday ถึงเรียก Project นี้ว่า Blueprint สำหรับ I2S Audio?
เพราะ Voicebox FX ไม่ได้โชว์แค่ “เปิด WAV File แล้วส่งออก Speaker”
แต่รวมเส้นทาง Audio หลายส่วนไว้พร้อมกัน:
- I2S Digital Microphone Input
- Audio Capture
- Memory Buffer
- WAV File Writing
- Looped Playback
- Real-time Effect Parameters
- Audio Mixer
- I2S Digital Output
- Class-D Amplifier
- Physical User Interface
เพราะฉะนั้น ถ้า Project ถัดไปของเรา เป็น:
- Voice Recorder
- Sound Toy
- Audio Sampler
- Portable Sound Effect Box
- Interactive Prop
- Audio Installation
Architecture ของ Voicebox FX ก็เป็นจุดเริ่มต้น สำหรับศึกษาต่อได้ โดยไม่จำเป็นต้อง Copy ตัวเครื่องทั้งชุด
ถ้าเป็น Maker ไทย ควรเริ่มจากส่วนไหนก่อน?
ไม่จำเป็นต้องพิมพ์ Case และประกอบทุกอย่าง ตั้งแต่วันแรก
ถ้าเป้าหมายคือ เรียน CircuitPython Audio สามารถแยกทดลองเป็น Stage ตาม Architecture ของต้นฉบับได้
เริ่มจาก I2S Microphone
ให้ Board รับ Audio Digital Stream ได้ก่อน
ทดสอบ Recording
ลอง Capture และสร้าง WAV ตาม Flow ของ Project
เพิ่ม I2S Output
ต่อ MAX98357A และ Speaker ให้ Playback ทำงานก่อนใส่ Effect
ค่อยต่อ Physical Controls
เพิ่ม Slide Pot, Rotary Pots และ Buttons เมื่อ Audio Path พื้นฐานทำงานแล้ว
ปิดงานด้วย Enclosure
เมื่อ Electronics ผ่านการทดสอบ ค่อยพิมพ์ 3D Case และประกอบเป็น Portable Device
ถ้ากำลังหา Board, Sensor, Audio Module หรือบริการ 3D Print: สามารถส่งโจทย์ Project ให้ทีม Globalbyte ช่วยเช็กตัวเลือก และประเมินงานพิมพ์ Case ก่อนเริ่มประกอบได้
Project นี้มีทั้ง Audio, Filesystem และ CAD — แนะนำเปิดต้นฉบับควบคู่กัน
โดยเฉพาะก่อน:
- Flash CircuitPython
- Copy Project Bundle
- ต่อ I2S Microphone
- ต่อ I2S Amplifier
- เปลี่ยน CIRCUITPY Read/Write Mode
- แก้ Audio Code
- พิมพ์ 3D Case
- ประกอบ Wiring ทั้งเครื่อง
FAQ: Voicebox FX และ CircuitPython I2S
Voicebox FX ใช้ไมโครคอนโทรลเลอร์อะไร?
ใช้ Adafruit Feather RP2350 with HSTX Port and 8MB PSRAM ตาม Project ต้นฉบับ
เป็น AI Voice Changer หรือไม่?
ไม่ Project ใช้ Digital Audio Effects เช่น Pitch Shift, Reverb และ Echo ไม่ได้ใช้ AI Model ตาม Source
I2S ใช้ตรงไหนบ้าง?
ใช้ทั้งฝั่ง ICS-43434 Microphone ส่ง Audio เข้า RP2350 และฝั่ง RP2350 ส่ง Audio ไป MAX98357A Amplifier
อัดเสียงได้นานแค่ไหน?
Code ปัจจุบัน ตั้ง Maximum Recording ไว้ 20 วินาที
Recording ใช้ Sample Rate เท่าไร?
16 kHz ตาม Config ใน Source Code
เสียงเป็น Stereo ไหม?
Recording Path ใน Code ตั้ง Output เป็น Mono และใช้ 16-bit Audio
Recording ถูกเก็บไว้ที่ไหน?
บันทึกเป็น /recording.wav บน CIRCUITPY Filesystem
ทำไมต้องมี Toggle Switch แยก?
Toggle บน D25 ถูกใช้โดย boot.py เพื่อกำหนด Read/Write State ของ CIRCUITPY เนื่องจากตัว Board ต้องสามารถ Save Recording ลง Filesystem ได้
มี Effect อะไรให้ปรับ?
Physical Controls ปรับ Pitch, Reverb และ Delay/Echo
แล้ว Distortion ใน Code คืออะไร?
Guide ระบุว่า Distortion Effect Object ถูกใช้เป็น Amplifier / Gain Boost สำหรับ I2S Output ไม่ใช่ Physical Effect Knob ที่ผู้ใช้ปรับโดยตรง
Pitch เลื่อนได้ประมาณเท่าไร?
Code Map ค่า ประมาณ -13 ถึง +13 Semitones เพื่อให้เลื่อนเสียงลงและขึ้น ในช่วงประมาณหนึ่ง Octave
ไฟสีแดงหมายถึงอะไร?
กำลัง Recording
ไฟสีเหลืองหมายถึงอะไร?
กำลังเขียน WAV File ลง CIRCUITPY
ไฟสีเขียวหมายถึงอะไร?
กำลัง Playback Recording
ไฟสีน้ำเงินหมายถึงอะไร?
Code ใช้สีน้ำเงิน สำหรับ Error State เช่นเขียน File ไม่ได้ หรือ Recording File หาย
ใช้ CircuitPython Version ไหน?
Guide ณเวลาที่เผยแพร่ ระบุ 10.3.0.alpha-4 หรือใหม่กว่า จนกว่า 10.3.0 Stable จะออก จึงควรตรวจหน้า Install ล่าสุดก่อนเริ่ม Project
เคสต้องใช้ Printer แบบ Multi-color เท่านั้นไหม?
ไม่ Design หลักรองรับ Multi-color แต่ ZIP File มี Single-color Blank Versions สำหรับบางชิ้นด้วย
ใช้ Filament อะไร?
CAD Guide ระบุ PLA สำหรับ FDM Printing
Printer ต้องมี Build Volume อย่างน้อยเท่าไร?
80 × 130 × 16 mm ตาม CAD Guide
ไม่มีเครื่อง 3D Printer ทำยังไง?
สามารถใช้ไฟล์ 3MF / CAD จาก Source แล้วส่งให้บริการ 3D Printing ช่วยประเมินงานได้ โดยควรตรวจ License หากจะนำชิ้นงานไปใช้เชิงพาณิชย์
Voicebox FX น่าสนใจเพราะมันไม่ได้สอน Audio แค่ครึ่งทาง
Project Audio หลายตัว มักสอนอย่างใดอย่างหนึ่ง:
“อ่าน Mic” หรือ “เล่น WAV”
แต่ Voicebox FX เชื่อมหลายเรื่องเข้าด้วยกัน จนเห็น System แบบ End-to-End:
↓
RP2350 Audio Capture
↓
WAV Recording
↓
Pitch + Reverb + Echo
↓
Mixer / Gain
↓
I2S Amplifier
↓
Speaker
↓
Physical Controls + NeoPixel Status
↓
Portable 3D Printed Device
สำหรับ Maker ที่อยากเริ่มจับ CircuitPython Audio แบบจริงจังกว่า “เปิดเสียง Beep” Project นี้จึงเป็นตัวอย่าง ที่น่าแกะมาก
เพราะนอกจาก Software ยังได้เห็นด้วยว่า Audio Project ที่ใช้งานจริง ต้องคิดถึง Input, Output, File Storage, User Control, Status Feedback, Power และ Enclosure พร้อมกันยังไง
References / แหล่งข้อมูลต้นฉบับ
- Hackaday — Voicebox FX Is A Blueprint For CircuitPython I2S Audio
- Adafruit Learning System — Voicebox FX
- Adafruit — Voicebox FX Circuit Diagram
- Adafruit — Install CircuitPython
- Adafruit — Code the Voicebox
- Adafruit — Voicebox FX CAD Files
- Adafruit — Voicebox FX Wiring
- Adafruit — Voicebox FX Assembly
- Adafruit — Voicebox FX Use Guide
อยากทำ Audio Project แต่ยังขาด Board, Module หรือ Case?
ถ้ากำลังทำ Project แนว Voice Recorder, Audio Effects, CircuitPython, I2S, RP2350 หรืออุปกรณ์ Maker สามารถสอบถามทีม Globalbyte เพื่อช่วยเช็ก Board และ Module ที่เหมาะกับโจทย์ได้
และถ้ามีไฟล์ 3MF, STL หรือ CAD สำหรับ Enclosure แต่ยังไม่มีเครื่องพิมพ์ สามารถส่งไฟล์ เพื่อสอบถามบริการรับพิมพ์ 3D ของ Globalbyte และประเมินงานก่อนผลิตได้
บทความนี้ไม่ได้ยืนยันว่า Feather RP2350, ICS-43434, MAX98357A หรืออุปกรณ์รุ่นเดียวกับต้นฉบับ มี Stock พร้อมจำหน่ายที่ Globalbyte กรุณาสอบถามผ่าน LINE OA เพื่อเช็กสินค้า หรือหาอุปกรณ์ทางเลือก ที่เหมาะกับ Project