Apakah ada program yang dapat menentukan nada tertinggi dalam file audio?

14

Apakah ada program Windows yang dapat menentukan "frekuensi gelombang suara tertinggi" yang ditemukan dalam file audio (misalnya file mp3)?

Sebagai contoh, harus dapat menganalisis file Dog-Whistle-0 dan menentukan bahwa frekuensi tertinggi yang ditemukan dalam file kira-kira ~ 12000 Hz.

Selain itu, harus bisa menganalisis Piano.mp3 dan menentukan nada tertinggi.

Pacerier
sumber

Jawaban:

13

R adalah platform-silang dan sumber bebas / terbuka.

Muat, dan muat tuneRdan seewavepustaka (instal dari pengelola paket jika belum diinstal).

library(tuneR)
library(seewave)

Kemudian, muat file MP3 atau WAV Anda:

w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")

Sekarang, mari kita plot spektrum dan puncaknya:

fpeaks(meanspec(w), nmax=1)

Hasil:

Hasil numerik:

fpeaks(meanspec(w), nmax=1, plot=FALSE)
12.05859

Di atas hanya berfungsi dengan data non-musikal. Ketika Anda menganalisis frekuensi musik, Anda akan menemukan bahwa frekuensi tertinggi akan selalu sekitar 12-20 kHz, tergantung pada instrumen yang terlibat. Namun, frekuensi tertinggi ini tidak akan memberi Anda perkiraan not yang sedang diputar, karena not musik, ketika dimainkan oleh instrumen, akan terdiri dari beberapa frekuensi.

Ini adalah apa yang disebut "timbre" instrumen, dan Anda akan menemukan bahwa A pada 440 Hz oleh seruling akan mencakup komponen frekuensi yang berbeda dibandingkan dengan A yang dimainkan oleh gitar listrik.

Taruhan terbaik Anda adalah menjalankan analisis frekuensi dominan dengan melihat puncak frekuensi di atas jendela waktu geser, dan memeriksa di mana yang tertinggi terjadi.

Tidak ada yang namanya "frekuensi dari waktu ke waktu". Anda hanya dapat memplot frekuensi rata-rata (atau dominan) di atas jendela waktu geser tertentu . Seewave menawarkan beberapa fungsi untuk memilih jendela waktu, tetapi menjadi agak rumit.

Anda bisa menggunakannya

s = specprop(meanspec(w, from=10, to=11)) 

untuk mendapatkan properti spektrum dari 10 hingga 11 detik dan kemudian menelepon s$centroidatau s$meanuntuk mendapatkan centroid atau frekuensi rata-rata dari jendela waktu tertentu (meskipun 1 detik cukup besar untuk analisis audio).

Jika file Wave Anda menggunakan pengambilan sampel 44,1 kHz, Anda dapat melakukan downsample untuk mengurangi upaya perhitungan, misalnya menjadi 16 kHz.

w = downsample(w, 16000)

Tetapi ingat bahwa menurut Teorema Nyquist , frekuensi maksimum yang dapat direpresentasikan sekarang adalah 8 kHz.

Anda juga dapat mencari perangkat lunak pendeteksi pitch. Seperti ini , yang membutuhkan MATLAB.

slhck
sumber
Btw alih-alih fpeaks, apakah Anda sadar jika ada fungsi yang memplot grafik frekuensi terhadap waktu?
Pacerier
Lihat pembaruan saya. Itu tidak sepele. Saya belum pernah bekerja dengan audio sebanyak itu untuk mengetahui apakah ada sesuatu yang lebih baik di sekitar, maaf.
slhck
8

Sudahkah Anda mencoba Audacity ? Ini adalah alat freeware yang memiliki beberapa alat analisis yang cukup canggih, termasuk Plot Spectrum perintah diakses dari Analisa -> Plot Spectrum ... .

Tangkapan layar

Perhatikan bahwa Anda mendapatkan hasil yang berbeda dengan versi file MP3 dibandingkan dengan versi WAV karena kompresi MP3 telah mengubah bentuk gelombang dan memperkenalkan artefak / aliasing.

Sunting: File suara yang Anda tautkan bukan contoh yang baik untuk ini. File frekuensi yang lebih tinggi hanya sampel pada 44.1KHz yang dirancang untuk pendengaran manusia (sekitar 20KHz maks). Anda tidak dapat mewakili frekuensi ultrasonografi tanpa meningkatkan laju sampel.

James P
sumber
Hmm, sepertinya tidak berfungsi dengan file Piano.mp3 . Bagi saya ini menunjukkan screenshoot.me/uZZ2N0 10121 Hz (D # 9) , namun ini sangat tidak mungkin karena kunci terbesar pada piano adalah C8 (4186Hz). Apakah saya melakukan sesuatu yang salah?
Pacerier
3
@Pacerier Tidak, tetapi Anda sedikit mengubah pertanyaan Anda. Sampel peluit anjing mudah diidentifikasi karena frekuensi dengan puncak tertinggi dalam spektrum juga merupakan frekuensi tertinggi dan pada saat yang sama catatan dominan. Untuk musik, frekuensi tertinggi belum tentu nada tertinggi, karena nada musik yang dimainkan oleh instrumen terdiri dari beberapa frekuensi.
slhck
@lhck Ic, saya pikir kita bisa menebak pesan itu jika kita punya frekuensi, sepertinya tidak begitu mudah ..
Pacerier
@Pacerier: Jika Anda mengatur Ukuran ke nilai yang lebih tinggi, saya yakin itu dapat memberikan hasil yang lebih tepat dan menghilangkan beberapa harmonisa.
James P
2
@Pacerier Tidak, ini tidak sesederhana itu. Deteksi pitch mengharuskan Anda untuk mengubah bentuk gelombang menjadi spektrum frekuensi terlebih dahulu (Fast Fourier Transform), lalu menerapkan filter (umumnya low-pass), dan satu putaran filter lainnya. Kecuali Anda menemukan alat yang melacak pitch dari waktu ke waktu, apa yang Anda cari benar-benar akan sulit. Anda bisa melihat ke alat koreksi vokal seperti Melodyne .
slhck