Saya mencoba menerapkan kompresi rentang dinamis audio dalam JavaScript (tidak menggunakan API audio web).
Ada banyak artikel untuk teknisi suara, dan beberapa dokumentasi tingkat tinggi, tetapi saya tidak dapat menemukan referensi yang membantu untuk benar-benar menerapkan kompresi rentang dinamis digital.
Dari apa yang saya pahami, setidaknya ada 3 langkah dalam menghitung sinyal yang diperbaiki.
- menghitung level input
- menghitung penguatan untuk diterapkan pada sinyal
- menerapkan gain
Saya memproses audio dalam blok, jadi untuk 1) saya berpikir untuk menghitung RMS satu blok
Adakah petunjuk untuk referensi yang bagus? Atau ada yang mau menjelaskan sedikit langkah yang diperlukan untuk mengimplementasikan ini?
audio
dynamic-range-compression
sebpiq
sumber
sumber
Jawaban:
Berikut adalah beberapa saran:
Prinsipnya adalah membuat amplop sinyal (dikontrol oleh serangan dan lepaskan), bentuk amplop itu menggunakan beberapa fungsi transfer (dikontrol oleh rasio, ambang batas dan lutut), dan kemudian menerapkan hasil itu kembali ke sinyal asli. Tahap peningkatan makeup sering kali terjadi.
Jawaban @ Deve menunjukkan beberapa kemungkinan fungsi transfer.
sumber
Untuk permulaan yang sederhana saya akan menggunakan karakteristik non-linearg( x ) yang menekan sinyal input Anda:
dimana (seperti yang ditunjukkan oleh endolith dalam komentar)x adalah amplop dari sinyal audio input dany adalah amplop keluaran yang diterapkan pada sinyal audio aktual. g(x ) dapat berupa fungsi apa pun yang mengurangi nilai input besar lebih kuat dari nilai input kecil. The A-Law danμ Fungsi -Law telah dikembangkan untuk kompres sinyal bicara untuk telepon, misalnya Saya tidak tahu seberapa bagus ini terdengar untuk musik.
Fungsi kompresi lain yang sangat sederhana adalah menipiskan semua amplitudo di atas ambang batas tertentuδ :
Untuk kompresor audio,δ biasanya diberikan dalam dB dan r dinyatakan sebagai beberapa rasio, misalnya 3: 1 (yaitu r = 3 ). Ini menghasilkan fungsi eksponensial, ketika dinyatakan secara linear (harap itu benar, silakan periksa jugax > 0 ):
Serangan dan pelepasan berdampak pada suara yang berbeda seperti tendangan, jerat, dan vokal. Mereka menentukan berapa lama sebelum ambang tercapai, kompresor harus mulai bekerja dan berapa lama harus tetap bekerja setelah sinyal jatuh di bawah ambang batas. Untuk menerapkan ini, Anda harus menggunakan semacam pandangan ke depan.
Seperti semua amplitudo di bawah iniδ dilemahkan, rentang dinamis yang tersedia tidak sepenuhnya dieksploitasi. Ini dikoreksi oleh apa yang disebut "make up gain" yang hanya merupakan perkalian sederhana dari sinyal terkompresi dengan faktor penguatanG > 1 . Dengan terlebih dahulu mengurangi rentang dinamis dan kemudian memperkuat kompresor sinyal dapat membuat musik tampak "lebih keras".
sumber