Saya menghabiskan bertahun-tahun meneliti pendeteksian nada pada musik polifonik - seperti mendeteksi nada-nada dari solo gitar dalam rekaman mp3. Saya juga menulis bagian di Wikipedia yang memberikan uraian singkat tentang prosesnya (lihat subbagian "Pendeteksian Pitch" di tautan di bawah).
Ketika satu tombol ditekan pada piano, apa yang kita dengar bukan hanya satu frekuensi getaran suara, tetapi gabungan dari beberapa getaran suara yang terjadi pada frekuensi yang berhubungan secara matematis berbeda. Unsur-unsur komposit getaran ini pada frekuensi yang berbeda disebut sebagai harmonik atau parsial. Misalnya, jika kita menekan tombol C Tengah pada piano, frekuensi individual harmonik komposit akan mulai pada 261,6 Hz sebagai frekuensi dasar, 523 Hz akan menjadi Harmonik ke-2, 785 Hz akan menjadi Harmonik ke-3, 1046 Hz akan menjadi Harmonika ke-4, dll. Harmonisa selanjutnya adalah kelipatan bilangan bulat dari frekuensi dasar, 261,6 Hz (mis: 2 x 261,6 = 523, 3 x 261,6 = 785, 4 x 261,6 = 1046).
Saya menggunakan DFT Logarithmic Transform yang dimodifikasi untuk pertama-tama mendeteksi kemungkinan harmonisa dengan mencari frekuensi dengan level puncak (lihat diagram di bawah). Karena cara saya mengumpulkan data untuk Log DFT saya yang dimodifikasi, saya TIDAK harus menerapkan Fungsi Windowing ke sinyal, juga tidak menambah dan tumpang tindih . Dan saya telah membuat DFT sehingga saluran frekuensinya terletak secara logaritma untuk menyelaraskan langsung dengan frekuensi di mana harmonik dibuat oleh not pada gitar, saksofon, dll.
Sekarang sedang pensiun, saya telah memutuskan untuk merilis kode sumber untuk mesin deteksi pitch saya dalam aplikasi demonstrasi gratis yang disebut PitchScope Player . PitchScope Player tersedia di web, dan Anda bisa mengunduh executable untuk Windows untuk melihat algoritme saya bekerja pada file mp3 yang Anda pilih. Tautan di bawah ini ke GitHub.com akan mengarahkan Anda ke kode sumber lengkap saya di mana Anda dapat melihat bagaimana saya mendeteksi harmonik dengan transformasi DFT Logarithmic kustom, dan kemudian mencari parsial (harmonik) yang frekuensinya memenuhi hubungan bilangan bulat yang benar yang mendefinisikan ' nada'.
Algoritma Deteksi Pitch Saya sebenarnya adalah proses dua tahap: a) Pertama ScalePitch terdeteksi ('ScalePitch' memiliki 12 nilai nada yang mungkin: {E, F, F #, G, G #, A, A #, B, C, C #, D , D #}) b) dan setelah ScalePitch ditentukan, maka Oktaf dihitung dengan memeriksa semua harmonik untuk 4 kemungkinan catatan Oktaf-Calon. Algoritma ini dirancang untuk mendeteksi nada paling dominan (not musik) pada waktu tertentu dalam file MP3 polifonik. Itu biasanya sesuai dengan catatan solo instrumental. Mereka yang tertarik dengan kode sumber C ++ untuk algoritma 2 Stage Pitch Detection saya mungkin ingin memulai pada fungsi Estimate_ScalePitch () dalam file SPitchCalc.cpp di GitHub.com.
https://github.com/CreativeDetectors/PitchScope_Player
https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection
Di bawah ini adalah gambar DFT Logaritmik (dibuat oleh perangkat lunak C ++ saya) selama 3 detik dari solo gitar pada rekaman mp3 polifonik. Ini menunjukkan bagaimana harmonik muncul untuk not individu pada gitar, saat bermain solo. Untuk setiap catatan pada DFT Logaritmik ini kita dapat melihat beberapa harmoniknya memanjang secara vertikal, karena masing-masing harmonik memiliki lebar waktu yang sama. Setelah oktaf nota ditentukan, maka kita mengetahui frekuensi Fundamental.
Diagram di bawah ini menunjukkan algoritme Deteksi Oktaf yang saya kembangkan untuk memilih nada Oktaf-Calon yang benar (yaitu, Fundamental yang benar), setelah ScalePitch untuk catatan tersebut telah ditentukan. Mereka yang ingin melihat metode dalam C ++ harus pergi ke fungsi Calc_Best_Octave_Candidate () di dalam file yang disebut FundCandidCalcer.cpp, yang terkandung dalam kode sumber saya di GitHub.