vibra, ไคลเอนต์ Shazam สำหรับบริการจดจำเพลงด้วย C++
(github.com/BayernMuller)vibra
- เป็นโปรเจกต์ที่พัฒนาไคลเอนต์สำหรับสื่อสารกับเซิร์ฟเวอร์ของบริการจดจำเพลง Shazam ด้วย C++
- ทำงานได้เร็วกว่า songrec ซึ่งเป็นไคลเอนต์ Shazam โอเพนซอร์สที่เขียนด้วย Rust อยู่ราว 2 เท่า
- สามารถอ่านไฟล์ wav และดึงข้อมูลได้ว่าไฟล์นั้นคือเพลงอะไร
- สามารถจดจำเพลงที่กำลังบันทึกผ่านไมโครโฟนได้ โดยป้อน raw PCM data ผ่าน
stdin - ต้องใช้
libfftw3สำหรับการทำ fingerprinting และlibcurlสำหรับสื่อสารกับเซิร์ฟเวอร์ Shazam - ทำงานกับข้อมูล PCM ได้อย่างมีประสิทธิภาพ เช่น wav file downsampling และการแปลง channel จึงทำงานได้รวดเร็ว
- มีไลบรารีที่ต้องพึ่งพาน้อยและบิลด์ได้ง่าย จึงสามารถนำไปใช้กับอุปกรณ์ฝังตัวได้
5 ความคิดเห็น
มีเหตุผลอะไรไหมที่เลือกใช้ C++ แทน rust?
ขอบคุณสำหรับการแบ่งปันครับ! ส่วนตัวผมสงสัยเหมือนกันว่าคุณปรับปรุงประสิทธิภาพอย่างไรบ้าง
ถ้าบน Raspberry Pi 4 ใช้เวลาราว ๆ 1 วินาที แบบนั้นก็ถือว่าใช้งานได้จริงมากเลยครับ
จริง ๆ แล้วที่ Rust Songrec ไม่มีประสิทธิภาพมากเกินไปนั้น เป็นเพราะมันจัดการกับ PCM data ที่รับเข้ามาโดยทำ downsampling, แปลงเป็น mono, และแปลงเป็น 16bit แยกกันทั้งหมด
ดังนั้นผมจึงปรับปรุงส่วนที่ต้องวนผ่านข้อมูล PCM ในแต่ละขั้นตอนทั้งหมด แน่นอนว่าความแตกต่างระหว่างภาษาอย่าง C++ กับ Rust ก็น่าจะมีผลมากเหมือนกัน
อ้อ ในโค้ด Rust แยกจัดการสามขั้นตอนนั้นไว้ต่างหากนี่เอง คงไม่ใช่เรื่องธรรมดาเลยที่จะปรับปรุงส่วนนั้นได้ สุดยอดมากครับ ' v')b
ขอบคุณมาก~!!!