Saya mencoba menghitung kenyaringan trek audio yang saya simpan di buffer. Buffer berisi data PCM dari sinyal dan saya ingin mendapatkan seberapa 'keras' itu dengan menggunakan Root Mean Squared. Saya berasumsi saya bisa melakukan ini dalam domain waktu daripada harus beralih ke domain frekuensi. Apa yang akan menjadi kode semu untuk melakukan ini?
Apakah saya akan mengambil sampel untuk satu detik saja (audio [0] - audio [44099], audio [44099] - audio [88199] dll.) Dan menghitung RMS dari nilai-nilai itu? Jadi, misalnya, apakah saya akan melakukan ini:
untuk setiap detik?
<!-- html comment -->
untuk mengatasi pembatasan karakter dalam kasus yang jarang terjadi jika posting yang sempurna memiliki kesalahan kecil tapi sangat penting. Kebutuhan ini sangat jarang terjadi: biasanya ada lebih dari 6 karakter perbaikan yang harus dilakukan. Misalnya, ketika ada tanda kurung yang hilang, biasanya lebih baik menggunakan\sqrt{}
dan\frac{}{}
membangun di TeX.Jawaban:
Hal lain adalah bahwa nilai RMS tidak berkorelasi dengan baik dengan kenyaringan yang dirasakan. Anda mungkin ingin mempertimbangkan menyebutnya tingkat atau volume sebagai gantinya. Ada sesuatu yang disebut kontur kenyaringan yang setara yang menghitung seberapa sensitif telinga terhadap frekuensi tertentu dibandingkan dengan frekuensi lain, lihat artikel Wikipedia . Kurva ini bergantung pada level. Misalnya, telinga sangat sensitif terhadap nada 1kHz dibandingkan dengan nada 100Hz, seperti yang ditunjukkan dalam gambar ini (sumbu horizontal adalah frekuensi dalam Hz):
Salah satu hal relatif sederhana yang dapat Anda lakukan adalah memfilter data PCM Anda dengan kurva kenyaringan suara yang sama terbalik. Atau Anda dapat menerapkan pembobotan standar A, lihat artikel Filter Pembobotan Wikipedia . Kemudian Anda dapat menghitung nilai RMS dari output dari filter tertimbang kenyaringan suara yang sama.
sumber