Phát hiện trống bpm trong tệp .wav ồn ào


12

Tôi đang tìm (các) thuật toán để giải quyết vấn đề sau: Đưa ra một âm thanh .wav ồn ào (một số tiếng ồn gió + ma sát trên micrô), làm thế nào để phát hiện BPM của nhịp trống mềm?

Tôi đã cố gắng googling chủ đề, nhưng kết quả khá kém, do số lượng phần mềm liên quan đến mp3 cao cho cả phân tích và tạo id vân tay. Không ai trong số họ cung cấp thông tin về cách thực sự làm điều đó.

Tôi nhận thức được các thuật toán để loại bỏ nhiễu, nhưng điều đó vẫn khiến tôi gặp phải vấn đề phát hiện BPM. Và tùy thuộc vào cách giải quyết vấn đề BPM, có thể tôi thậm chí không cần khử nhiễu (vì trống có xu hướng ở tần số thấp hơn và nhiễu cao hơn, thông thấp đơn giản có thể được xử lý trước đủ).


1
Điều này nghe có vẻ tương tự như vấn đề phát hiện ngáy của tôi .
Daniel R Hicks

Câu trả lời:


13

Một phương pháp hoạt động nếu có nhịp trống tương đối mạnh là lấy độ lớn của STFT của dạng sóng và sau đó tự động tương quan nó theo chiều thời gian. Đỉnh cao của chức năng tương quan tự động sẽ là nhịp, hoặc một hàm phụ của nó.

Điều này tương đương với việc chia tín hiệu thành nhiều dải tần số khác nhau, tìm đường bao biên độ của từng dải, tự động điều chỉnh từng đường bao, sau đó tổng hợp chúng. Tiếng ồn và các phần khác của âm nhạc được tính trung bình bằng hoạt động tương quan chéo.

Điều này là do tiếng trống tạo ra âm thanh có thời gian tồn tại ngắn ở nhiều tần số (đường thẳng đứng), trong khi các phần khác của âm nhạc chỉ tồn tại ở một vài tần số (đường ngang) và tiếng ồn tồn tại lâu nhưng ngẫu nhiên ở mọi tần số. Bạn có thể thấy sự lặp lại nhịp nếu bạn nhìn vào STFT:

nhập mô tả hình ảnh ở đây

Tôi đã nghĩ ra điều này cho một dự án trường học để tìm một giá trị BPM duy nhất cho toàn bộ tệp nhạc, nhưng nó cũng có thể được điều chỉnh theo luồng âm thanh với việc thay đổi BPM. Bạn cần xử lý các đoạn dài ít nhất gấp đôi thời gian của BPM mà bạn đang tìm kiếm.


FFT là một kỹ thuật thường hữu ích để tìm các tín hiệu định kỳ. Có thể có một chút khó khăn nếu tín hiệu không hoàn toàn đều đặn như bạn muốn: một tay trống có thể tăng tốc hoặc giảm tốc độ trong suốt bài hát - cố tình hay không - và điều này có thể gây rối với kết quả FFT trong miền tần số.
Xem lại

1
@Rethunk: Nếu BPM thay đổi theo thời gian, bạn sẽ cần thực hiện việc này theo từng khối và tìm BPM cho từng loại.
endolith

Lưu ý rằng nhịp đập thường được liên kết với âm nhạc và bạn cũng thấy một phần khác của âm nhạc trong bức tranh này: các đường ngang, thay đổi chiều cao theo nhịp. Vì vậy, về cơ bản có ba đóng góp năng lượng: nhịp đập (dọc), ghi chú (chiều ngang) và tiếng ồn (phần còn lại).
MSalters

@MSalters: Các thuyết minh có thể tương quan cũng vậy, mặc dù
endolith

4

Tự động tương quan chắc chắn là một phương pháp cơ bản tốt cho điều đó. Có một vài điều bạn có thể làm để có khả năng nâng cao điều này hơn nữa:

  1. Nếu bạn biết phổ tần số của trống, băng thông sẽ lọc tín hiệu để chỉ còn lại các tần số liên quan đến trống. Tùy thuộc vào trống, điều này có thể khá hẹp và sẽ loại bỏ được phần lớn tiếng ồn.
  2. Sau đó, tính đường bao miền thời gian của tín hiệu ("đỉnh mất mát" là cách dễ nhất để làm điều này) với hằng số thời gian gần như khớp với độ dài của nhịp trống.
  3. Sau đó thực hiện tương quan tự động
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.