Yüksek kaliteli yankı algoritması


11

Bu sitede biraz arama yaptım, ancak şaşırtıcı bir şekilde çok ilgili bilgi bulamadım ve DSP hakkındaki bilgim çok sınırlı.

Amacım oldukça basit: C ++ 'da gerçekten iyi görünen algoritmik bir yankı programlamak istiyorum. Ya da daha doğrusu, en iyi seçenek son kullanıcının kalite ve işlemci kullanımı arasındaki ödünleşimi seçmesine izin vermek olacaktır.

Şimdiye kadar bulduğum kadarıyla, bir yankı oluşturmak için kuru sinyali erken bir yansımalar algoritmasına, sonra geç yansımalar algo'ya beslemelisiniz. Bu doğru mu ?

Şimdi, Geri Bildirim Gecikme Ağı'nı kullanarak ( TIME-VARYANT FEEDBACK DELAY NETWORKS KULLANARAK YAPAY REVERBERASYON GEREKSİNİMLERİNİ AZALTMA) kullanarak, geç yansımalar kısmında kapsamlı bir makale buldum . Okuduğum kadarıyla, FDN geç refleksleri simüle etmenin çok geniş (cpu açısından) olmayan yüksek kaliteli bir yoludur. Ayrıca, gecikme hatlarının sayısını değiştirerek kalite / cpu şarj değişimini kontrol edebilirsiniz.

Ancak ben erken yansımaları algo programlamak hakkında kesinlikle hiçbir fikrim yok (unutmayın? Gerçekten DSP etki alanında cahilim).

Programlanması kolay ve hesaplama açısından ucuz olma avantajına sahip bir çeşit çoklu gecikmeyi kullanmak benim için mantıklı gelebilir. Ama bu gerçek olamayacak kadar basit geliyor.

Dahası, içgüdüm bana sinyal yolunda bir veya birkaç filtrenin dahil edilmesi gerektiğini söylüyor.

Bazıları bu konuyu benim için biraz açıklığa kavuşturabilir mi?

İki not:

  • Ben bir kıvrım yankısından sonra değilim. Yankının gerçekçiliğini gerçekten umursamıyorum, ama bunun yerine iyi bir sondaj, tweakable, cpu-aç reverb istemiyorum.
  • Ayrıca, kodlama kısmı beni endişelendiren şey değil, aksi takdirde stackoverflow sormak istiyorum. Gerçekten DSP kısmı ve sadece peşimde olduğum kısım :)

Yanıtlar:


10

Birkaç gecikme dokunuşuyla erken yansımalar oluşturmalısınız (= bir avuç diracs toplamıyla kıvrım); ve genellikle all-pass (AP) ve tarak filtreleri ağı ile uygulanan "kuyruk".

İlk bölüm uygulanması önemsiz olmakla birlikte, doğru şekilde ses çıkarması zordur. Ne tür tepkilerin "doğal" olduğu hakkında bir fikir edinmek için piklerin önceden kaydedilmiş dürtü tepkilerinin başına konumlandırılmasına bakmak yardımcı olabilir. Virsyn Yansıtma "hibrit" yankısı elde etmek için bu bölüm için bir dizi ön ayar sunarak ondan kurtulabilirsiniz, ancak birkaç ayar ile kolayca parametrelenebilir hale getirmek zordur.

Kuyruk, algoritmik yankıların parladığı (punta amaçlı değil), çünkü parametrelendirilmesi kolaydır. Algoritmik yankıların dedesi Schroederalgoritması. Erken yansımalar değil, sadece bir "kuyruk" oluşturduğunu unutmayın - bir kafa vermek için birkaç gecikme dokunuşuyla artırabilirsiniz. Kulağa çok iyi gelmiyor (çok "grenli") ama iyi bir başlangıç ​​- bununla uğraşacak bir şeyiniz var ve her parametrenin etkisini anlamaya yardımcı oluyor. Övülen algoritmik reverbler, özellikle 80'lerden (Lexicon, Eventide, Publison) olanlar, tüm geçiş filtrelerinin ve tarak filtrelerinin ince ayarlanmış topolojileridir. Bunun, herhangi bir bilimsel yaklaşımdan ziyade parametrelerdeki veya topolojideki değişikliklerin nasıl ses çıkardığını anlamaya çok iyi gelen eğitimli kulakların çok fazla deneme yanılma içerdiğinden şüpheleniyorum. İşte bir başka ilginç okuma- Keith Barr'ın favori yankı topolojisini gösteriyor. Orijinal midiverb "yüksek kaliteli algoritmik yankı" tanımınız olmayabilir, ama kulağa hoş geldi ve sadece 0.5 katsayılı MAC'lara sahip bir "dsp" ile yapıldığını bilmek için perspektif koyar ...

Valhalla odası benim en sevdiğim yazılım algoritmik yankıdır - doğru yapmanıza yardımcı olacak şeyler hakkında ilham bulmak için geliştiricinin blogunu okumak için biraz zaman ayırın .


2
Freeverb'den Schroeder algoritmasının daha modern bir varyantı (mevcut kod ile, örneğin csound veya ladspa kod tabanında bulunabilir) olarak bahsetmeyi unuttum.
pichenettes

Çok ilginç ! Valhalla ürünlerini de çok seviyorum (ValhallaShimmer parlıyor, hiçbir cinas amaçlanmadı :)). Neden erken yansımanın evrişiminden bahsediyorsunuz? Normal bir gecikme multitap gecikmesi yeterli mi?
Dinaiz

1
Evrişimden bahsettim çünkü "multitap gecikmesi" sadece belirli bir evrişim türüdür (birkaç boş olmayan katsayı ile, bu yüzden saf yolla ve "yoğun" evrişimlerle ilişkili topçu olmadan hesaplanabilir). Her neyse, Hilmar'ın işaret ettiği gibi, bir multitap gecikmesi biraz fazla saf olabilir ve birkaç yansımadan sonra, geçici olarak yayılması (= düşük geçişli filtreleme) yankı daha doğal gelecektir. Bu, her musluk için basit bir LP ile çoklu musluk gecikmesi ile yapılabilir; ya da yankıların tüm erken yansımalarını doğrudan bir evrişim motoru ve önceden ayarlanmış IR'ler ile hesaplayarak.
pichenettes

8

İyi bir sesli yankı yapmak kolay DEĞİLDİR. Geri bildirim gecikme ağları kesinlikle gitmek için bir yoldur. Tüm geçişler ve tarak filtrelere sahip orijinal Schroeder algoritmaları, metalik ses veren "spektral inceltme" den muzdariptir. Yankı süresini temsil eden farklı frekans hatlarında frekansa bağlı zayıflamayı çevirmeniz gerekir (frekansın bir fonksiyonu olarak). Erken yansımalar, bazı frekansa bağlı zayıflama ve bunların korelasyonunu düşürmek için birkaç difüzör ile hafifçe vurulan bir gecikme çizgisi ile yapılabilir. Stereo yapmak da bazı korelasyon araçlarını gerektirir.

Etrafta yüzen oldukça iyi bir açık kaynak uygulaması var, buna GVerb deniyor ve örneğin Audacity'de kullanılıyor. Google araması sizi kaynak kodunun (yasal) bir kopyasına götürmelidir.


Mesajınızdan kolay geliyor! De-korelasyon ile ilgili kısmı hariç, en azından anlayabiliyorum. Bununla tam olarak ne demek istiyorsun? Ayrıca frekansa bağlı katılım hakkında, sanırım bazı filtreleri atmak ve her hat için frekanslar kulak tarafından ince ayar yapmak istersiniz. Ne tür bir filtreden bahsediyoruz? HP? LP? BP? Teşekkürler !
Dinaiz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.