Saya sudah membaca banyak pertanyaan tentang SO, dan terus terang, masing-masing dari mereka tidak menjelaskan cara khusus untuk melakukannya. Ada yang bilang "do FFT" dan ada yang bilang "zero crossing" dll. Tapi saya hanya mengerti sejauh mana input audio digital terdiri dari array amplitudo untuk frekuensi tertentu dan well .. Tidak benar-benar tahu banyak di luar itu.
Sekarang saya tahu teorema Nyquist, frekuensi, amplitudo, seri Fourier dll, dan itu dari 2-3 tahun yang lalu ketika saya melakukan itu di program universitas saya dalam beberapa semester. Tapi saat itu kami benar-benar tidak banyak diajarkan penggunaan Fourier di dunia nyata, dan saya tidak repot-repot menggali lebih dalam tentang subjek di luar pembelajaran hanya cukup untuk melewati subjek. Tapi sekarang aku harus menggunakan semua itu.
Berikut cuplikan dari suara yang saya coba deteksi:
Jelas suara memiliki grafik unik. Saya hanya ingin memahami cara mengekstrak karakteristik unik khusus mereka untuk garis runcing unik mereka dalam grafik. Seperti apa amplitudo, frekuensi, dll. Dan untuk berapa banyak waktu - meskipun itu sepele saya kira.
Saya ingin langkah demi langkah yang sederhana, daftar instruksi yang tidak jelas - Saya dapat menggunakan istilah yang tidak akan saya mengerti.
Seperti mungkin ini? -
Dapatkan input data audio
Plot spektogram
Dapatkan grafik spektogram untuk suara yang ingin Anda deteksi di lingkungan yang tidak bersuara
Pelajari grafik itu - gambarkan karakteristik unik dari suara itu
Buat semacam fungsi yang dapat mendeteksi karakteristik khusus tersebut dalam umpan audio langsung, menggunakan karakteristik suara yang ditemukan di (4)
Jika kecocokan ditemukan, baik - pekerjaan selesai.
Polandia algoritma untuk menghilangkan negatif palsu.
Saya sedang berpikir untuk membuat pengguna merekam suara yang ingin mereka simpan sebagai gerakan di lingkungan yang tenang. Dan pengguna akan membuat suara hanya di antara padding waktu tenang ; 3 detik di awal dan di akhir rekaman.
Jadi katakanlah, selama 3 detik pertama, sistem saya akan menetapkan bahwa input saat ini adalah suara latar belakang normal yang tenang. Dan kemudian perubahan tiba-tiba pada grafik akan menjadi input suara yang dimulai. Dan ketika itu berhenti, rekaman akan berlangsung selama 3 detik, padding time trailing quiet . Ini akan dilakukan secara manual oleh pengguna. Maka secara otomatis akan menyimpan karakteristik hanya bagian yang selama perubahan tiba-tiba dalam grafik berlangsung - di suatu tempat di antara waktu padding.
Dan dengan demikian karakteristik dari bagian itu akan disimpan sebagai data isyarat suara itu, yang akan digunakan untuk mendeteksi suara itu dalam umpan audio langsung di kemudian hari.
Masalahnya, saya memikirkan semua ini dalam bahasa Inggris. Saya perlu berpikir dalam matematika dan fisika, untuk dapat mengimplementasikannya secara efisien dalam kode saya. Aku benar-benar tidak mengerti tentang apa yang harus ditulis dan di mana harus menuliskannya dalam kode saya - bahkan dengan begitu banyak perpustakaan dan pertanyaan tentang SO yang saya miliki.
Dan maaf jika ini lama.
sumber
Jawaban:
Sementara saya setuju dengan salah satu komentar bahwa menggunakan teknik pengenalan suara mungkin merupakan awal yang baik, suara-suara ini berbeda dan saya tidak mengetahui ada orang yang melakukan penelitian untuk mengkategorikan mereka (makalah yang dikutip oleh Nathan tampaknya hanya untuk membedakan antara ucapan dan kebisingan), jadi kecuali seseorang menghadirkan sesuatu yang bertentangan dengan itu, Anda harus menemukan teknik Anda sendiri, dan itu akan membutuhkan banyak pembelajaran dan banyak pekerjaan. Yang terbaik yang bisa saya lakukan adalah membantu Anda memulai.
Pertama, jangan berharap ada yang bisa menghasilkan formula ajaib. Tidak ada persamaan untuk mendapatkan dari suara ke apa suara itu. Manusia dan komputer harus belajar dengan memasukkan data untuk membuat tebakan cerdas tentang bunyi apa itu. Alasan orang mengatakan dalam jawaban mereka "use FFT" atau "use zero crossing" adalah karena ini adalah beberapa blok bangunan DSP dasar yang digunakan dalam pengenalan suara dan algoritma terkait. Tetapi FFT dan zero crossing rate biasanya hanya langkah pertama dalam menciptakan seperangkat parameter yang menggambarkan suara. Parameter-parameter ini kemudian dianalisis secara statistik (bukan melalui fungsi sulap) untuk menentukan kategori mana yang paling mungkin dimiliki. Perhatikan bahwa saya mengatakan "kemungkinan besar": bahkan deteksi ucapan terbaik (dan otak manusia!
Jadi, beberapa parameter yang bisa Anda cari termasuk:
Setelah Anda memiliki satu set parameter yang menurut Anda akan memungkinkan Anda untuk membedakan suara Anda, Anda perlu menggunakan beberapa metode statistik untuk mengategorikannya. Hidden Markov Model sering digunakan dalam pidato. Anda juga dapat melihat regresi logistik, K-means, dan saya yakin ada pilihan lain, tapi saya pikir HMM sudah dicoba dan benar.
sumber
Saya menggunakan makalah ini pada titik akhir berdasarkan entropi ketika saya mencoba untuk mengabaikan jenis-jenis suara dalam panggilan telepon, digunakan untuk pengenalan suara komputer, jika suara yang Anda coba untuk menangkap adalah pidato maka entropi dapat bekerja dengan sangat baik, untuk musik mungkin tidak berguna.
sumber
Saya pikir rekomendasi Bjorn sangat bagus, tetapi saya ingin memberikan beberapa informasi tambahan. Dari uraian Anda, ini terdengar seperti masalah identifikasi timbre. Ada beberapa penelitian di bidang ini dalam konteks musik komputer (mengidentifikasi instrumen yang berbeda adalah hal yang berguna untuk dapat dilakukan dan mengatakan perbedaan antara jepret dan bertepuk tangan karena timbre suara). William Brenttelah melakukan beberapa penelitian di bidang ini (mencari timbreID di halamannya) dan membuat beberapa perangkat lunak untuk digunakan dalam Pure Data. Dalam setiap situasi yang Anda cari untuk peristiwa tertentu, melakukan segmentasi otomatis dengan deteksi serangan akan menjadi ide yang baik. Karena Anda sudah menggunakan STFT, menentukan onset tidak akan membutuhkan terlalu banyak pekerjaan tambahan (lihat deteksi onset Fluks Spektral). Garis besar sistem bisa seperti itu:
Latihan
Klasifikasi
Makalah ini tentang identifikasi timbre perkusi bisa berguna. Ini menguraikan definisi untuk fitur potensial untuk menghitung pada suara yang masuk dan metode klasifikasi penulis. Ini akan bekerja cukup baik untuk bunyi perkusi, tetapi mungkin tidak berfungsi dengan baik untuk sesuatu seperti ucapan (beberapa suku kata), dalam hal ini metode HMM akan lebih cocok. Demikian pula, akurasi deteksi serangan Anda akan bervariasi tergantung pada jenis suara yang Anda cari.
Jika Anda sangat khawatir tentang bidik vs. sakelar lampu, maka luangkan waktu untuk mencari tahu fitur mana yang secara akurat dapat membedakan antara dua suara.
sumber