Saya mencoba menerapkan permainan menyanyi yang akan menganalisis input mic mentah dan memberi tahu pemain seberapa bagus dia bernyanyi. Itu perlu dilakukan secara real-time.
Saya telah menemukan banyak utas yang menanyakan pertanyaan yang sama tetapi saya masih belum selesai dengan hal itu, mungkin karena kurangnya pengalaman saya di lapangan dan latar belakang matematika yang dangkal. Saya telah menerapkan algoritma berdasarkan artikel DSPDimension situs web pergeseran pitch: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/
Saya mengekstrak frekuensi dan besaran sebenarnya seperti yang dijelaskan dalam artikel, tapi saya tidak tahu menemukan frekuensi dasar dengan ini. Saya sudah mencoba untuk mendapatkan bin dengan magnitudo terbesar tetapi itu hanya memberi saya hasil yang tepat untuk sinyal nada yang lebih tinggi, tidak masalah faktor oversampling yang saya gunakan. Saya masih mendapatkan data buruk untuk sinyal freq rendah. Apakah pendekatan ini sepenuhnya salah atau saya berada di jalur yang benar tetapi hanya melewatkan sesuatu?
Terima kasih sebelumnya,
EDIT: Saya lupa menyebutkan bahwa saya hanya tertarik pada kelas pitch, jadi tidak apa-apa jika fundamentalnya hilang tetapi saya memiliki nada kuat dalam sampel.
EDIT2: Terima kasih untuk semua orang, saya baru saja menyelesaikan versi algoritma yang bekerja seperti pesona. Masalah estimasi pitch rendah adalah karena tes input saya. Ketika saya menyanyikan not itu cocok dengan benar. Juga, saya sedang mempertimbangkan semua harmonisa sekarang, bukan hanya puncak tertinggi.
sumber
Jawaban:
Itu karena harmonik yang lebih besar dari yang mendasar. Plot spektrum Anda dan Anda akan melihat. Metode yang lebih baik untuk menemukan fundamental yang benar adalah autokorelasi. Kemudian Anda "menggeser" bentuk gelombang melewati dirinya sendiri dan menemukan penundaan di mana bentuk gelombang sejajar dengan dirinya sendiri.
http://www.phon.ucl.ac.uk/courses/spsci/matlab/lect10.html
Apakah Anda benar-benar ingin mereka menyanyikan nada yang tepat, atau apakah boleh jika mereka menyanyikan satu oktaf di atas atau di bawah tergantung pada daftar suara mereka?
sumber
Ya, menggunakan penduga frekuensi puncak untuk nada salah. Pitch adalah fenomena psikoakustik, sehingga deteksi atau estimasi pitch berbeda dari estimasi frekuensi. Ada banyak metode estimasi pitch yang diberikan dalam jawaban sebelumnya untuk pertanyaan serupa di sini. Ada lebih dari 1 untuk dipilih.
Ini satu: /programming/4227420/matlab-missing-fundamental-from-an-fft/4231322#4231322 , dan lainnya: Kiat untuk meningkatkan deteksi pitch
TAMBAH # 1: Pertanyaan yang mirip dengan ini sering ditanyakan sehingga saya menulis posting blog yang lebih panjang tentang topik ini: http://www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft- frequency.html
sumber