Algorithme de réverbération de haute qualité

11

J'ai fait un peu de recherche sur ce site mais étonnamment, je n'ai pas trouvé beaucoup d'informations pertinentes, et ma connaissance du DSP est très très limitée.

Mon objectif est assez simple: je veux programmer une réverbération algorithmique en C ++ qui sonne vraiment bien. Ou plus exactement, la meilleure option serait de laisser l'utilisateur final choisir le compromis entre la qualité et l'utilisation du processeur.

D'après ce que j'ai découvert jusqu'à présent, pour créer une réverbération, vous devez alimenter le signal sec dans un algorithme de premières réflexions, puis dans un algo de réflexions tardives. Est-ce correct ?

Maintenant, j'ai trouvé un article complet sur la partie des réflexions tardives, en utilisant Feedback Delay Network ( RÉDUCTION DES EXIGENCES DE RÉVERBERATION ARTIFICIELLE À L'AIDE DE RÉSEAUX DE RETARD DE RÉTROACTION VARIANT DANS LE TEMPS ). D'après ce que j'ai lu, le FDN est un moyen de haute qualité, pas trop étendu (au niveau du processeur), de simuler les réflexions tardives. De plus, je suppose que vous pouvez contrôler le compromis qualité / charge CPU en modifiant le nombre de lignes à retard.

Cependant, je n'ai absolument aucune idée de la façon de programmer les premières réflexions algo (rappelez-vous? Je suis vraiment ignorant dans le domaine DSP).

Il me semblerait logique d'utiliser une sorte de multi-delay, qui a l'avantage d'être facile à programmer et peu coûteux en calcul. Mais cela semble trop simple pour être vrai.

De plus, mon instinct me dit qu'un ou plusieurs filtres doivent être inclus quelque part dans le chemin du signal.

Quelqu'un pourrait-il clarifier un peu ce sujet pour moi?

Deux notes:

  • Je ne suis pas du tout après une réverbération à convolution. Je ne me soucie pas vraiment du réalisme de la réverbération, mais au lieu de cela, je veux une bonne sonorité, ajustable, pas à une réverbération gourmande en processeur.
  • De plus, la partie codage ne m'inquiète pas, je demanderais autrement sur stackoverflow. C'est vraiment la partie DSP, et juste cette partie, que je recherche :)
Dinaiz
la source

Réponses:

10

Vous devez générer des réflexions précoces avec quelques pressions de retards (= convolution avec la somme d'une poignée de diracs); et la "queue" avec ce qui est généralement implémenté avec un réseau de filtres passe-tout (AP) et de peigne.

La première partie est triviale à mettre en œuvre mais difficile à bien sonner. Il pourrait être utile d'examiner le positionnement des pics à la tête des réponses impulsionnelles préenregistrées pour avoir une idée du type de réponses «naturelles». Il est difficile de le rendre facilement paramétrable par quelques réglages, bien que vous puissiez vous en sortir en offrant un tas de préréglages pour cette partie pour obtenir une réverbération "hybride" à la Virsyn Reflect.

La queue est l'endroit où les réverbérations algorithmiques brillent (sans jeu de mots), car elles sont faciles à paramétrer. Le grand-père des réverbérations algorithmiques est Schroederalgorithme. Notez qu'il ne génère qu'une "queue", pas des réflexions précoces - vous pouvez l'augmenter avec quelques tapotements de retards pour lui donner une tête. Cela ne semble pas très bon (très "granuleux") mais c'est un début décent - avec cela, vous avez quelque chose à jouer et cela aide à comprendre l'impact de chaque paramètre. De nombreuses réverbérations algorithmiques appréciées, en particulier celles des années 80 (Lexicon, Eventide, Publison) ne sont que des topologies finement ajustées de filtres passe-tout et de filtres en peigne. Je soupçonne que cela a impliqué beaucoup d'essais et d'erreurs par des oreilles entraînées qui ont très bien compris comment les changements de paramètres ou de topologie sembleraient, plutôt que toute approche scientifique. Voici une autre lecture intéressante- montrant la topologie de réverbération préférée de Keith Barr. Le midiverb original n'était peut-être pas votre définition de "réverbération algorithmique de haute qualité", mais il sonnait bien, et cela met les choses en perspective de savoir qu'il a été fait avec un "dsp" uniquement capable de MAC avec des coefficients de 0,5 ...

Valhalla room est ma réverbération algorithmique de logiciel préférée - prenez le temps de lire le blog de son développeur pour trouver l'inspiration sur le genre de choses qui aident à bien faire les choses.

pichenettes
la source
2
J'ai oublié de mentionner Freeverb comme une variante plus moderne (avec du code disponible, par exemple dans le csound ou ladspa codebase) de l'algorithme de Schroeder.
pichenettes
Très intéressant ! J'adore aussi les produits Valhalla (ValhallaShimmer brille, sans jeu de mots non plus :)). Pourquoi mentionnez-vous la convolution pour une réflexion précoce? Shold un délai normal de retard multitap suffit?
Dinaiz
1
J'ai mentionné la convolution parce que le "retard multitape" n'est qu'un type particulier de convolution (avec quelques coefficients non nuls, donc il peut être calculé de manière naïve et sans l'artillerie associée aux convolutions "denses"). Quoi qu'il en soit, comme l'a souligné Hilmar, un retard multitape peut être un peu trop naïf et après quelques réflexions, donc la propagation temporelle (= filtrage passe-bas) l'écho semblera plus naturel. Cela peut être fait avec un retard multi-tap avec un LP simple pour chaque tap; ou en calculant directement toute la partie des premières réflexions de la réverbération avec un moteur à convolution et des IR prédéfinis.
pichenettes
8

Faire une bonne réverbération n'est pas facile. Les réseaux de retard de rétroaction sont certainement la voie à suivre. Les algorithmes originaux de Schroeder avec toutes les passes et les filtres en peigne souffrent d'un "amincissement spectral" qui le rend métallique. Vous devez composer une atténuation dépendante de la fréquence sur les différentes lignes à retard représentatives du temps de réverbération (en fonction de la fréquence). Les premières réflexions peuvent être effectuées à travers une ligne à retard tapée également avec une certaine atténuation dépendante de la fréquence et quelques diffuseurs pour les décorréler. Faire de la stéréo nécessite également certains moyens de décorrélation.

Il y a une assez bonne implémentation open source flottante, elle s'appelle GVerb et elle est utilisée, par exemple, dans Audacity. Une recherche Google devrait vous amener à une copie (légale) du code source.

Hilmar
la source
De votre message, cela semble facile! Eh bien au moins je peux le comprendre, sauf la partie sur la décorrélation. Que voulez-vous dire exactement par là? En ce qui concerne également la prudence en fonction de la fréquence, je suppose que vous voulez dire jeter des filtres et affiner à l'oreille ses fréquences pour chaque ligne. De quel type de filtre parlons-nous cependant? HP? LP? BP? Merci !
Dinaiz