Algoritmo di riverbero di alta qualità


11

Ho fatto un po 'di ricerche su questo sito ma, sorprendentemente, non ho trovato molte informazioni rilevanti e la mia conoscenza di DSP è molto limitata.

Il mio obiettivo è abbastanza semplice: voglio programmare un riverbero algoritmico in C ++ che suona davvero bene. O più esattamente, l'opzione migliore sarebbe quella di consentire all'utente finale di scegliere il compromesso tra qualità e utilizzo della cpu.

Da quello che ho scoperto finora è che, per creare un riverbero, è necessario alimentare il segnale dry in un algoritmo di riflessioni iniziali, quindi in un algoritmo di riflessioni tardive. È corretto ?

Ora, ho trovato un ampio articolo sulla parte delle riflessioni tardive, utilizzando Feedback Delay Network ( RIDUZIONE DEI REQUISITI DI REVERBERAZIONE ARTIFICIALE UTILIZZANDO LE RETI DI RITARDO DI FEEDBACK A TEMPO VARIANTE ). Da quello che ho letto, FDN è un modo di alta qualità, non troppo espansivo (cpu saggio) di simulare le riflessioni tardive. Inoltre, immagino che tu possa controllare il trade-off di addebiti qualità / cpu modificando il numero di linee di ritardo.

Tuttavia non ho assolutamente idea di come programmare l'algo delle prime riflessioni (ricordi? Sono davvero ignorante nel dominio DSP).

Mi sembrerebbe logico usare una sorta di multi delay, che ha il vantaggio di essere facile da programmare e computazionalmente economico. Ma sembra troppo semplice per essere vero.

Inoltre, il mio istinto mi dice che uno o più filtri devono essere inclusi da qualche parte nel percorso del segnale.

Qualcuno potrebbe chiarire un po 'questo argomento per me?

Due note:

  • Non sto affatto cercando un riverbero di convoluzione. Non mi interessa davvero il realismo del riverbero, ma invece voglio un buon suono, ottimizzabile, non un riverbero affamato di CPU.
  • Inoltre, la parte di codifica non è ciò che mi preoccupa, altrimenti chiederei su StackOverflow. È davvero la parte DSP, e proprio quella parte, che sto cercando :)

Risposte:


10

Devi generare le prime riflessioni con pochi tocchi di ritardo (= convoluzione con la somma di una manciata di dirac); e la "coda" con ciò che viene solitamente implementato con una rete di filtri all-pass (AP) e pettine.

La prima parte è banale da implementare ma difficile da suonare bene. Potrebbe essere utile esaminare il posizionamento dei picchi alla testa delle risposte all'impulso preregistrate per avere un'idea di che tipo di risposte siano "naturali". È difficile renderlo facilmente parametrizzabile con alcune impostazioni, anche se potresti cavartela offrendo una serie di preset per questa parte per ottenere un riverbero "ibrido" sulla Virsyn Reflect.

La coda è dove risplendono i riverberi algoritmici (nessun gioco di parole previsto), poiché è facile da parametrizzare. Il nonno dei riverberi algoritmici è di Schroederalgoritmo. Nota che genera solo una "coda", non riflessioni precoci: potresti aumentarla con qualche tocco di ritardo per dargli una testa. Non suona molto bene (molto "granuloso") ma è un inizio decente - con quello hai qualcosa con cui fare confusione e aiuta a capire l'impatto di ogni parametro. Molti riverberi algoritmici elogiati, in particolare quelli degli anni '80 (Lexicon, Eventide, Publison) sono solo topologie finemente sintonizzate di filtri all-pass e filtri a pettine. Sospetto che ciò abbia comportato molte prove ed errori da parte di orecchie esperte che sono diventate molto brave a capire come suonerebbero i cambiamenti nei parametri o nella topologia, piuttosto che qualsiasi approccio scientifico. Ecco un'altra lettura interessante- mostra la topologia di riverbero preferita di Keith Barr. Il midiverb originale potrebbe non essere la tua definizione di "riverbero algoritmico di alta qualità", ma suonava dolce, e mette le cose in prospettiva per sapere che è stato realizzato con un "dsp" capace solo di MAC con coefficienti di 0,5 ...

La stanza di Valhalla è il mio riverbero algoritmico del mio software preferito - prenditi del tempo per leggere il blog del suo sviluppatore per trovare ispirazione sul tipo di cose che aiutano a farlo bene.


2
Hai dimenticato di menzionare Freeverb come una variante più moderna (con il codice disponibile, può essere trovata ad esempio nella csound, o ladspa codebase) dell'algoritmo di Schroeder.
Pichenettes,

Molto interessante ! Adoro anche i prodotti Valhalla (ValhallaShimmer brilla, nemmeno un gioco di parole :)). Perché menzioni la convoluzione per la riflessione precoce? È sufficiente un ritardo normale multitap?
Dinaiz,

1
Ho citato la convoluzione perché il "ritardo multitap" è solo un particolare tipo di convoluzione (con alcuni coefficienti non nulli, quindi può essere calcolato in modo ingenuo e senza l'artiglieria associata a convoluzioni "dense"). Comunque, come ha sottolineato Hilmar, un ritardo multitap potrebbe essere un po 'troppo ingenuo e dopo alcune riflessioni, quindi la diffusione temporale (= filtro passa basso) l'eco suonerà più naturale. Questo può essere fatto con un ritardo multi-tap con un semplice LP per ogni tocco; oppure calcolando direttamente l'intera parte delle prime riflessioni del riverbero con un motore di convoluzione e IR preimpostati.
Pichenettes,

8

Realizzare un buon riverbero dal suono NON è facile. Le reti di ritardo del feedback sono sicuramente la strada da percorrere. Gli algoritmi originali di Schroeder con tutti i passaggi e filtri a pettine soffrono di "assottigliamento spettrale" che lo rende un suono metallico. È necessario comporre l'attenuazione dipendente dalla frequenza sulle diverse linee di ritardo che sono rappresentative del tempo di riverbero (in funzione della frequenza). Le prime riflessioni possono essere fatte attraverso una linea di ritardo intercettata anche con una certa attenuazione dipendente dalla frequenza e alcuni diffusori per de-correlarli. Fare stereo richiede anche alcuni mezzi di de-correlazione.

C'è un'implementazione open source abbastanza buona che galleggia, si chiama GVerb ed è usata, ad esempio, in Audacity. Una ricerca su Google dovrebbe portarti a una copia (legale) del codice sorgente.


Dal tuo post sembra facile! Beh, almeno posso capirlo, tranne la parte sulla de-correlazione. Cosa intendi esattamente con questo? Anche per quanto riguarda l'attenuazione dipendente dalla frequenza, immagino che intendi buttare via alcuni filtri e mettere a punto a orecchio le sue frequenze per ogni linea. Di che tipo di filtro stiamo parlando? HP? LP? BP? Grazie !
Dinaiz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.