Tôi đã dành nhiều năm để nghiên cứu phát hiện cao độ trên âm nhạc đa âm - như phát hiện các nốt của độc tấu guitar trong bản ghi mp3. Tôi cũng đã viết một phần trên Wikipedia trong đó mô tả ngắn gọn về quy trình (xem phần phụ "Phát hiện cao độ" trong liên kết bên dưới).
Khi một phím duy nhất được nhấn trên một cây đàn piano, những gì chúng ta nghe thấy không chỉ là một tần số rung động âm thanh, mà là một hỗn hợp của nhiều rung động âm thanh xảy ra ở các tần số khác nhau liên quan đến toán học. Các yếu tố của hỗn hợp rung động này ở các tần số khác nhau được gọi là sóng hài hoặc hạt. Chẳng hạn, nếu chúng ta nhấn phím Trung C trên đàn piano, các tần số riêng của sóng hài tổng hợp sẽ bắt đầu ở mức 261,6 Hz là tần số cơ bản, 523 Hz sẽ là sóng hài bậc 2, 785 Hz sẽ là sóng hài bậc 3, 1046 Hz sẽ là sóng hài bậc 3 là sóng hài bậc 4, v.v ... Các sóng hài sau này là bội số nguyên của tần số cơ bản, 261,6 Hz (ví dụ: 2 x 261,6 = 523, 3 x 261,6 = 785, 4 x 261,6 = 1046).
Tôi sử dụng Biến đổi logarit DFT đã sửa đổi để lần đầu tiên phát hiện các sóng hài có thể bằng cách tìm tần số có mức cực đại (xem sơ đồ bên dưới). Do cách tôi thu thập dữ liệu cho Nhật ký DFT đã sửa đổi của mình, tôi KHÔNG phải áp dụng Chức năng cửa sổ cho tín hiệu, cũng như không thêm và chồng lấp . Và tôi đã tạo ra DFT để các kênh tần số của nó được đặt theo logarit để phù hợp trực tiếp với tần số mà các sóng hài được tạo bởi các nốt trên guitar, saxophone, v.v.
Hiện đã nghỉ hưu, tôi đã quyết định phát hành mã nguồn cho công cụ phát hiện cao độ của mình trong một ứng dụng trình diễn miễn phí có tên là PitchScope Player . PitchScope Player có sẵn trên web và bạn có thể tải xuống tệp thực thi cho Windows để xem thuật toán của tôi hoạt động trên tệp mp3 bạn chọn. Liên kết dưới đây với GitHub.com sẽ dẫn bạn đến mã nguồn đầy đủ của tôi, nơi bạn có thể xem cách tôi phát hiện các sóng hài với một biến đổi DFT logarit tùy chỉnh, sau đó tìm các hạt (sóng hài) có tần số thỏa mãn mối quan hệ số nguyên chính xác xác định một ' sân cỏ'.
Thuật toán phát hiện cao độ của tôi thực sự là một quá trình gồm hai giai đoạn: a) Trước tiên, ScalePitch được phát hiện ('ScalePitch' có 12 giá trị cao độ có thể có: {E, F, F #, G, G #, A, A #, B, C, C #, D , D #}) b) và sau khi ScalePitch được xác định, thì Octave được tính bằng cách kiểm tra tất cả các sóng hài cho 4 ghi chú Octave-Candidate có thể. Thuật toán được thiết kế để phát hiện cao độ nổi trội nhất (một nốt nhạc) tại bất kỳ thời điểm nào trong một tệp MP3 đa âm. Điều đó thường tương ứng với các nốt của một bản nhạc cụ. Những người quan tâm đến mã nguồn C ++ cho thuật toán Phát hiện sân khấu 2 giai đoạn của tôi có thể muốn bắt đầu tại hàm Estimate_ScalePitch () trong tệp SPitchCalc.cpp tại GitHub.com.
https://github.com/CreativeDetector/PitchScope_Player
https://en.wikipedia.org/wiki/Transcrip_(music)#Pitch_detection
Dưới đây là hình ảnh của một DFT logarit (được tạo bởi phần mềm C ++ của tôi) trong 3 giây của một bản ghi ta guitar trên bản ghi mp3 đa âm. Nó cho thấy cách các giai điệu xuất hiện cho các nốt riêng lẻ trên guitar, trong khi chơi solo. Đối với mỗi ghi chú trên DFT logarit này, chúng ta có thể thấy nhiều sóng hài của nó kéo dài theo chiều dọc, bởi vì mỗi sóng hài sẽ có cùng độ rộng thời gian. Sau khi Octave của ghi chú được xác định, sau đó chúng tôi biết tần suất của Nguyên tắc cơ bản.
Sơ đồ bên dưới trình bày thuật toán Phát hiện Octave mà tôi đã phát triển để chọn ghi chú Octave-Candidate chính xác (nghĩa là Cơ bản chính xác), khi ScalePitch cho ghi chú đó đã được xác định. Những ai muốn xem phương thức đó trong C ++ nên truy cập hàm Calc_Best_Octave_Candidate () bên trong tệp có tên FundCandidCalcer.cpp, được chứa trong mã nguồn của tôi tại GitHub.