สารบัญ:

Arduino Library สำหรับการถอดรหัส MP3: 4 ขั้นตอน
Arduino Library สำหรับการถอดรหัส MP3: 4 ขั้นตอน

วีดีโอ: Arduino Library สำหรับการถอดรหัส MP3: 4 ขั้นตอน

วีดีโอ: Arduino Library สำหรับการถอดรหัส MP3: 4 ขั้นตอน
วีดีโอ: เผยความลับ...!! ชิป QualComm บอร์ด BlueTooth 5.0 (เสียงใส) ที่เขาบอกว่า..อยู่ในตู้ Marshall ลองมาฟัง 2024, กรกฎาคม
Anonim
Arduino Library สำหรับการถอดรหัส MP3
Arduino Library สำหรับการถอดรหัส MP3
Arduino Library สำหรับการถอดรหัส MP3
Arduino Library สำหรับการถอดรหัส MP3

เนื่องจากการแพร่หลายของไมโครคอนโทรลเลอร์ที่รวดเร็วขึ้น เช่น ESP32 และ ARM M series MP3 ไม่จำเป็นต้องใช้ฮาร์ดแวร์ผู้เชี่ยวชาญอีกต่อไป ตอนนี้การถอดรหัสสามารถทำได้ในซอฟต์แวร์

มีห้องสมุดที่ยอดเยี่ยมจาก Earlephilhower ที่แสดงวิธีถอดรหัสไฟล์เสียงที่หลากหลายและเล่นบนไมโครคอนโทรลเลอร์ ESP ด้วยแรงบันดาลใจจากสิ่งนี้ ฉันได้ดัดแปลงโค้ดบางส่วนเพื่อสร้างวิธีการอ่านไฟล์ MP3 แบบแยกส่วนบนไมโครคอนโทรลเลอร์

ความหวังของฉันคือวิธีการนี้จะเป็นแบบทั่วไปเพียงพอสำหรับใช้กับไมโครคอนโทรลเลอร์ที่เร็วพอ (ไม่ใช่แค่บอร์ด ESP32) แต่ ณ ตอนนี้ฉันได้ทดสอบบน ESP32 เท่านั้น

เสบียง

อย่างที่ฉันพูดไปก่อนหน้านี้ ฉันหวังว่าวิธีนี้จะใช้ได้กับไมโครคอนโทรลเลอร์ที่รวดเร็ว แต่อาจไม่เป็นเช่นนั้น ดังนั้นเพื่อทำซ้ำผลลัพธ์ของฉัน คุณจะต้อง:

  • บอร์ด ESP32
  • กระดานฝ่าวงล้อม SD
  • การ์ด SD
  • สายจัมเปอร์
  • เขียงหั่นขนม
  • สาย micro USB (สำหรับอัพโหลดภาพร่าง)
  • Arduino IDE

ขั้นตอนที่ 1: วางเขียงหั่นขนม

วางเขียงหั่นขนม
วางเขียงหั่นขนม

วาง ESP32 และ SD card breakout บนเขียงหั่นขนม

ขั้นตอนที่ 2: การเดินสายการ์ด SD

การเดินสายไฟการ์ด SD
การเดินสายไฟการ์ด SD

การเชื่อมต่อการ์ด SD (ESP32 SD breakout) มีดังนี้:

GND GND

3v3 VDD

23 DI (MOSI)

19 DO (มิโซะ)

18 SCLK

5 CS

โปรดทราบว่าการเชื่อมต่อเหล่านี้จะแตกต่างกันหากคุณใช้ไมโครคอนโทรลเลอร์ตัวอื่น

ขั้นตอนที่ 3: ไลบรารีซอฟต์แวร์

หากคุณไม่ได้ติดตั้ง ESP-IDF ให้ไปที่เว็บไซต์และติดตั้ง

จากนั้นติดตั้งไลบรารี microdecoder คุณสามารถทำได้โดยดาวน์โหลดที่เก็บและวางไว้ในโฟลเดอร์ Arduino Libraries ของคุณ ปัจจุบันไลบรารี microdecoder รองรับไฟล์.wav และ.mp3

โดยไม่คำนึงถึงรูปแบบ มีวิธีการทั่วไปสองสามวิธีที่เกี่ยวข้องกับแต่ละคลาส และครอบคลุมในโค้ดด้านล่าง ซึ่งรวมถึงการรับข้อมูลเมตาของไฟล์และการพิมพ์ไปยังจอภาพแบบอนุกรม

#include "SD.h" // อินพุต

#include "mp3.h" // ตัวถอดรหัส #include "pcm.h" // ที่เก็บข้อมูลเสียงดิบ mp3 MP3; การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); // ตั้งค่า Serial SD.begin(); // ตั้งค่าไฟล์การเชื่อมต่อ SD = SD.open("/cc.mp3"); // เปิดไฟล์ MP3 MP3.begin(ไฟล์); // บอกคลาส MP3 ว่าไฟล์ใดที่จะประมวลผล MP3.getMetadata(); // รับ metadata Serial.print ("บิตต่อตัวอย่าง: "); Serial.println (MP3.bitsPerSample); // พิมพ์บิตต่อตัวอย่าง Serial.print("Sample Rate: "); Serial.println(MP3. Fs); // และอัตราตัวอย่าง } วงเป็นโมฆะ () { }

ขั้นตอนที่ 4: พล็อตข้อมูล MP3 บน Serial Monitor

พล็อตข้อมูล MP3 บน Serial Monitor
พล็อตข้อมูล MP3 บน Serial Monitor

ด้วยรหัสด้านล่าง คุณสามารถพล็อตข้อมูลเสียงบางส่วนบนจอภาพแบบอนุกรม การดำเนินการนี้จะช้ามากแต่จะแสดงให้คุณเห็นถึงวิธีใช้ไลบรารี MP3 นอกจากนี้ยังลดขนาดข้อมูลลงเป็น 16 เท่า เพื่อให้เมื่อวางแผนข้อมูลแล้ว ข้อมูลจะดูเหมือนรูปคลื่นเสียง รหัสนี้นำมาจากตัวอย่าง SPI_MP3_Serial.ino ที่มาพร้อมกับไลบรารี microdecoder แน่นอน ก้าวไปข้างหน้าคุณจะต้องการเล่นข้อมูลเสียงนี้อย่างใด แต่นั่นเป็นหัวข้อของคำสั่งอื่น

#include "SD.h" // อินพุต

#include "mp3.h" // ตัวถอดรหัส mp3 MP3; // MP3 คลาส pcm เสียง; // การตั้งค่าข้อมูลเสียงดิบเป็นโมฆะ () { Serial.begin (115200); // ตั้งค่า Serial SD.begin(); // ตั้งค่าไฟล์การเชื่อมต่อ SD = SD.open("/cc.mp3"); // เปิดไฟล์ MP3 MP3.begin(ไฟล์); // ส่งไฟล์ไปที่คลาส MP3 } void loop () { เสียง = MP3.decode (); // ถอดรหัสข้อมูลเสียงเป็นคลาส pcm /* มี 32 ตัวอย่างใน audio.interleaved (16 ซ้ายและ 16 ขวา) * แต่เรากำลังจะพล็อตจุดข้อมูลแรกในแต่ละช่องเท่านั้น * ลดขนาดข้อมูลอย่างมีประสิทธิภาพด้วยปัจจัย 16 (สำหรับ * ดูรูปคลื่นเท่านั้น) */ Serial.print(audio.interleaved[0]); // ช่องซ้าย Serial.print(" "); Serial.println(เสียง.อินเตอร์ลีฟ[1]); // ช่องขวา }

แนะนำ: