Algoritma reverb berkualitas tinggi

11

Saya melakukan sedikit pencarian di situs ini tetapi yang mengejutkan, saya tidak menemukan banyak informasi yang relevan, dan pengetahuan saya tentang DSP sangat terbatas.

Tujuan saya cukup sederhana: Saya ingin memprogram reverb algoritmik dalam C ++ yang terdengar sangat bagus. Atau lebih tepatnya, opsi terbaik adalah membiarkan pengguna akhir memilih trade-off antara kualitas dan penggunaan cpu.

Dari apa yang saya temukan sejauh ini adalah bahwa, untuk membuat reverb, Anda harus memasukkan sinyal kering ke dalam algoritma refleksi awal, kemudian ke algo refleksi akhir. Apakah ini benar ?

Sekarang, saya menemukan artikel yang luas di bagian akhir refleksi, menggunakan Feedback Delay Network ( MENGURANGI PERSYARATAN REVERBERASI ARTIFIKIAL MENGGUNAKAN JARINGAN TAMPAKAN PEMBAYARAN UMPAN BALIK WAKTU-VARIAN ). Dari apa yang saya baca, FDN adalah kualitas tinggi, tidak terlalu ekspansif (cpu wise) cara mensimulasikan refleksi akhir. Selanjutnya, saya kira Anda dapat mengontrol kualitas / biaya cpu trade-off dengan mengubah jumlah garis penundaan.

Namun saya sama sekali tidak tahu bagaimana memprogram refleksi awal algo (ingat? Saya benar-benar bodoh dalam domain DSP).

Kedengarannya logis bagi saya untuk menggunakan semacam penundaan multi, yang memiliki keuntungan untuk mudah diprogram dan komputasi murah. Tapi itu terdengar terlalu sederhana untuk menjadi kenyataan.

Lebih lanjut, naluri saya memberi tahu saya bahwa satu atau beberapa filter harus dimasukkan di suatu tempat di jalur sinyal.

Bisakah seseorang memperjelas topik ini sedikit untuk saya?

Dua catatan:

  • Saya tidak mengejar reverb konvolusi sama sekali. Saya tidak benar-benar peduli dengan realisme reverb, tetapi saya ingin yang bagus, tweakable, tidak reverb lapar-cpu.
  • Juga, bagian pengkodean bukan yang membuat saya khawatir, saya akan bertanya di stackoverflow sebaliknya. Ini benar-benar bagian DSP, dan hanya bagian itu, yang saya cari :)
Dinaiz
sumber

Jawaban:

10

Anda perlu membuat refleksi awal dengan beberapa ketukan penundaan (= konvolusi dengan jumlah segelintir dirac); dan "tail" dengan apa yang biasanya diimplementasikan dengan jaringan all-pass (AP) dan filter sisir.

Bagian pertama sepele untuk diterapkan tetapi sulit untuk terdengar benar. Mungkin membantu untuk melihat posisi puncak pada kepala respons impuls pra-rekam untuk mendapatkan gagasan tentang jenis respons apa yang "alami". Sulit untuk membuatnya dengan mudah parametrizable oleh beberapa pengaturan, meskipun Anda bisa lolos dengan menawarkan banyak preset untuk bagian ini untuk mendapatkan reverb "hybrid" à la Virsyn Reflect.

Ekor adalah tempat reverb algoritmik bersinar (tidak ada permainan kata-kata), karena mudah dipisah-pisahkan. Kakek reverb algoritmik adalah Schroederalgoritma. Perhatikan bahwa itu hanya menghasilkan "ekor", bukan refleksi awal - Anda bisa menambahnya dengan beberapa ketukan penundaan untuk memberikannya sebuah kepala. Kedengarannya tidak terlalu bagus (sangat "berbintik-bintik") tetapi ini merupakan awal yang baik - dengan itu Anda memiliki sesuatu untuk dikacaukan dan membantu memahami dampak dari setiap parameter. Banyak pujian algoritmik yang dipuji, terutama yang berasal dari tahun 80-an (Lexicon, Eventide, Publison) hanyalah topologi yang disetel dengan halus dari semua filter dan filter sisir. Saya menduga ini melibatkan banyak percobaan dan kesalahan oleh telinga terlatih yang menjadi sangat pandai mencari tahu bagaimana perubahan dalam parameter atau topologi akan terdengar, daripada pendekatan ilmiah apa pun. Ini bacaan menarik lainnya- Menunjukkan topologi reverb favorit Keith Barr. Midiverb asli mungkin bukan definisi Anda tentang "reverb algoritmik berkualitas tinggi", tetapi kedengarannya manis, dan menempatkannya dalam perspektif untuk mengetahui bahwa itu dibuat dengan "dsp" yang hanya mampu digunakan oleh MAC dengan koefisien 0,5 ...

Valhalla room adalah reverb algoritme perangkat lunak favorit saya - luangkan waktu untuk membaca blog pengembangnya untuk menemukan inspirasi tentang hal-hal yang membantu memperbaikinya.

pichenettes
sumber
2
Lupa menyebutkan Freeverb sebagai varian yang lebih modern (dengan kode yang tersedia, dapat ditemukan misalnya dalam csound, atau ladspa codebase) dari algoritma Schroeder.
pichenettes
Sangat menarik ! Saya suka produk Valhalla juga (ValhallaShimmer bersinar, tidak ada pun kata yang dimaksudkan :)). Mengapa Anda menyebutkan konvolusi untuk refleksi awal? Apakah sudah cukup lama penundaan multitap?
Dinaiz
1
Saya menyebutkan konvolusi karena "penundaan multitap" hanyalah konvolusi jenis tertentu (dengan beberapa koefisien non-nol, sehingga dapat dihitung dengan cara naif dan tanpa artileri yang terkait dengan konvolusi "padat"). Bagaimanapun, seperti yang ditunjukkan Hilmar, penundaan multitap mungkin agak terlalu naif dan setelah beberapa refleksi, sehingga penyebaran sementara (= penyaringan low-pass) gema akan terdengar lebih alami. Ini dapat dilakukan dengan penundaan multi-ketuk dengan LP sederhana untuk setiap ketukan; atau dengan secara langsung menghitung seluruh bagian refleksi awal reverb dengan mesin konvolusi dan IR yang telah ditetapkan.
pichenettes
8

Membuat reverb yang terdengar bagus TIDAK mudah. Jaringan keterlambatan umpan balik jelas merupakan cara yang harus dilakukan. Algoritma Schroeder asli dengan semua lintasan dan filter sisir mengalami "penipisan spektral" yang membuatnya terdengar metalik. Anda perlu menekan atenuasi tergantung frekuensi pada garis tunda berbeda yang mewakili waktu gema (sebagai fungsi frekuensi). Refleksi awal dapat dilakukan melalui jalur delay yang disadap juga dengan beberapa pelemahan tergantung frekuensi dan beberapa pemakai untuk mende-korelasikannya. Melakukan stereo juga memerlukan beberapa cara de-korelasi.

Ada implementasi open source yang cukup bagus, ini disebut GVerb dan digunakan dalam, misalnya, Audacity. Pencarian google akan membawa Anda ke salinan kode sumber (legal).

Hilmar
sumber
Dari posting Anda kedengarannya mudah! Yah setidaknya saya bisa memahaminya, kecuali bagian tentang de-korelasi. Apa yang Anda maksud dengan itu? Juga tentang attenaution tergantung frekuensi, saya kira maksud Anda membuang beberapa filter dan fine-tuning oleh telinga itu frekuensi untuk setiap baris. Filter seperti apa yang sedang kita bicarakan? HP? LP? BP? Terima kasih!
Dinaiz