5 คะแนน โดย fcbayernmuller 2024-01-29 | 5 ความคิดเห็น | แชร์ทาง WhatsApp

vibra

  • เป็นโปรเจกต์ที่พัฒนาไคลเอนต์สำหรับสื่อสารกับเซิร์ฟเวอร์ของบริการจดจำเพลง Shazam ด้วย C++
  • ทำงานได้เร็วกว่า songrec ซึ่งเป็นไคลเอนต์ Shazam โอเพนซอร์สที่เขียนด้วย Rust อยู่ราว 2 เท่า
  • สามารถอ่านไฟล์ wav และดึงข้อมูลได้ว่าไฟล์นั้นคือเพลงอะไร
  • สามารถจดจำเพลงที่กำลังบันทึกผ่านไมโครโฟนได้ โดยป้อน raw PCM data ผ่าน stdin
  • ต้องใช้ libfftw3 สำหรับการทำ fingerprinting และ libcurl สำหรับสื่อสารกับเซิร์ฟเวอร์ Shazam
  • ทำงานกับข้อมูล PCM ได้อย่างมีประสิทธิภาพ เช่น wav file downsampling และการแปลง channel จึงทำงานได้รวดเร็ว
  • มีไลบรารีที่ต้องพึ่งพาน้อยและบิลด์ได้ง่าย จึงสามารถนำไปใช้กับอุปกรณ์ฝังตัวได้

5 ความคิดเห็น

 
mdisprgm 2024-01-29

มีเหตุผลอะไรไหมที่เลือกใช้ C++ แทน rust?

 
cosine20 2024-01-29

ขอบคุณสำหรับการแบ่งปันครับ! ส่วนตัวผมสงสัยเหมือนกันว่าคุณปรับปรุงประสิทธิภาพอย่างไรบ้าง
ถ้าบน Raspberry Pi 4 ใช้เวลาราว ๆ 1 วินาที แบบนั้นก็ถือว่าใช้งานได้จริงมากเลยครับ

 
fcbayernmuller 2024-01-29

จริง ๆ แล้วที่ Rust Songrec ไม่มีประสิทธิภาพมากเกินไปนั้น เป็นเพราะมันจัดการกับ PCM data ที่รับเข้ามาโดยทำ downsampling, แปลงเป็น mono, และแปลงเป็น 16bit แยกกันทั้งหมด

ดังนั้นผมจึงปรับปรุงส่วนที่ต้องวนผ่านข้อมูล PCM ในแต่ละขั้นตอนทั้งหมด แน่นอนว่าความแตกต่างระหว่างภาษาอย่าง C++ กับ Rust ก็น่าจะมีผลมากเหมือนกัน

 
cosine20 2024-01-29

อ้อ ในโค้ด Rust แยกจัดการสามขั้นตอนนั้นไว้ต่างหากนี่เอง คงไม่ใช่เรื่องธรรมดาเลยที่จะปรับปรุงส่วนนั้นได้ สุดยอดมากครับ ' v')b

 
fcbayernmuller 2024-01-29

ขอบคุณมาก~!!!