การตรวจจับ drum bpm ในไฟล์. wav ที่มีเสียงดัง


12

ฉันกำลังมองหาอัลกอริทึม (s) เพื่อแก้ปัญหาต่อไปนี้: ด้วยการจับเสียง. wav ที่มีเสียงดัง (เสียงลม + เสียงเสียดสีบนไมโครโฟน) วิธีการตรวจสอบ BPM ของการตีกลองแบบนุ่ม

ฉันพยายามทำเรื่องนี้แล้ว แต่ผลลัพธ์ค่อนข้างแย่เนื่องจากซอฟต์แวร์ mp3 ที่เกี่ยวข้องจำนวนมากสำหรับการวิเคราะห์และการสร้างรหัสลายนิ้วมือ ไม่มีใครให้ข้อมูลเกี่ยวกับวิธีการใช้งานจริง

ฉันตระหนักถึงอัลกอริทึมในการลบเสียงรบกวน แต่ยังทำให้ฉันมีปัญหาในการตรวจจับ BPM และขึ้นอยู่กับวิธีแก้ไขปัญหา BPM เป็นไปได้ว่าฉันไม่จำเป็นต้อง denoise (เนื่องจากกลองมีแนวโน้มที่จะอยู่ในความถี่และเสียงรบกวนที่ต่ำกว่าในระดับที่สูงกว่า low-pass แบบง่ายอาจเพียงพอในการประมวลผลล่วงหน้า)


1
นี้ฟังดูคล้ายกับฉันปัญหาการตรวจสอบการกรน
Daniel R Hicks

คำตอบ:


13

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

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

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

ป้อนคำอธิบายรูปภาพที่นี่

ฉันมากับสิ่งนี้สำหรับโครงการโรงเรียนเพื่อหาค่า BPM เดียวสำหรับไฟล์เพลงทั้งหมด แต่มันสามารถปรับให้เข้ากับกระแสของเสียงด้วยการเปลี่ยน BPM ด้วย คุณต้องดำเนินการชิ้นส่วนที่มีความยาวอย่างน้อยสองเท่าของช่วงเวลาของ BPM ที่คุณต้องการ


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

1
@Rethunk: หาก BPM เปลี่ยนแปลงตลอดเวลาคุณจะต้องทำสิ่งนี้เป็นกลุ่มและค้นหา BPM สำหรับแต่ละรายการ
endolith

โปรดทราบว่าการเต้นมักเกี่ยวข้องกับเพลงและคุณเห็นอีกส่วนหนึ่งของเพลงในภาพนี้เช่นกัน: เส้นแนวนอนซึ่งเปลี่ยนความสูงได้ตามจังหวะ ดังนั้นโดยทั่วไปจะมีการให้พลังงานสามประการ: เต้น (แนวดิ่ง), บันทึก (แนวนอน) และเสียงรบกวน (ส่วนที่เหลือ)
MSalters

@MSalters: บันทึกย่ออาจมีความสัมพันธ์เช่นกัน
endolith

4

ความสัมพันธ์อัตโนมัติเป็นวิธีการพื้นฐานที่ดีอย่างหนึ่ง มีบางสิ่งที่คุณสามารถทำได้เพื่อเพิ่มศักยภาพให้ดียิ่งขึ้น:

  1. หากคุณทราบสเปกตรัมความถี่ของดรัมของคุณ bandpass จะกรองสัญญาณเพื่อให้มีเฉพาะความถี่ที่เกี่ยวข้องกับดรัมเท่านั้น ทั้งนี้ขึ้นอยู่กับกลองนี้อาจจะค่อนข้างแคบและควรกำจัดเสียงส่วนใหญ่
  2. จากนั้นคำนวณซองจดหมายโดเมนเวลาของสัญญาณ ("lossy peak" เป็นวิธีที่ง่ายที่สุดในการทำเช่นนี้) โดยมีค่าคงที่เวลาที่ตรงกับความยาวของจังหวะกลอง
  3. จากนั้นก็ทำการสัมพันธ์อัตโนมัติ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.