Algoritmo de reverberación de alta calidad.

11

Hice un poco de búsqueda en este sitio, pero sorprendentemente, no encontré mucha información relevante, y mi conocimiento de DSP es muy, muy limitado.

Mi objetivo es bastante simple: quiero programar una reverberación algorítmica en C ++ que suene realmente bien. O más exactamente, la mejor opción sería dejar que el usuario final elija la compensación entre calidad y uso de la CPU.

Por lo que descubrí hasta ahora es que, para crear una reverberación, debes alimentar la señal seca a un algoritmo de reflexiones tempranas y luego a un algoritmo de reflexiones tardías. Es esto correcto ?

Ahora, encontré un extenso artículo sobre la parte de reflexiones tardías, utilizando la Red de Retraso de Comentarios ( REDUCCIÓN DE LOS REQUISITOS DE REVERBERACIÓN ARTIFICIAL UTILIZANDO REDES DE RETARDO DE VOTACIONES VARIANTES ). Por lo que he leído, FDN es una forma de simulación de reflexiones tardías de alta calidad, no demasiado expansiva (CPU sabia). Además, supongo que puede controlar la compensación de calidad / carga de la CPU cambiando el número de líneas de retraso.

Sin embargo, no tengo ni idea de cómo programar algo de las reflexiones tempranas (¿recuerdas? Soy realmente ignorante en el dominio DSP).

Me parecería lógico utilizar una especie de retardo múltiple, que tiene la ventaja de ser fácil de programar y de bajo costo computacional. Pero eso suena demasiado simple para ser verdad.

Además, mi instinto me dice que uno o varios filtros deben incluirse en algún lugar de la ruta de la señal.

¿Podría alguien aclararme un poco este tema?

Dos notas:

  • No busco una reverb de convolución en absoluto. Realmente no me importa el realismo de la reverberación, pero en cambio quiero una buena reverberación, modificable, no hambrienta de CPU.
  • Además, la parte de codificación no es lo que me preocupa, de lo contrario pediría en stackoverflow. Es realmente la parte de DSP, y solo esa parte, que busco :)
Dinaiz
fuente

Respuestas:

10

Necesita generar reflexiones tempranas con unos pocos toques de demoras (= convolución con la suma de un puñado de diracs); y la "cola" con lo que generalmente se implementa con una red de filtros de paso completo (AP) y peine.

La primera parte es trivial de implementar pero difícil de lograr que suene bien. Puede ser útil observar la posición de los picos en la cabeza de las respuestas de impulso pregrabadas para tener una idea de qué tipo de respuestas son "naturales". Es difícil hacerlo fácilmente parametrizable con unos pocos ajustes, aunque puede salirse con la suya ofreciendo un montón de presets para esta parte para obtener una reverberación "híbrida" a la Virsyn Reflect.

La cola es donde brillan las reverberaciones algorítmicas (sin juego de palabras), ya que es fácil de parametrizar. El abuelo de las reverberaciones algorítmicas es el de Schroederalgoritmo. Tenga en cuenta que solo genera una "cola", no reflexiones tempranas; puede aumentarlo con unos pocos toques de demoras para darle una cabeza. No suena muy bien (muy "granulado") pero es un comienzo decente, con eso tiene algo con lo que meterse y ayuda a comprender el impacto de cada parámetro. Muchas elogiadas reverberaciones algorítmicas, especialmente las de los años 80 (Lexicon, Eventide, Publison) son solo topologías finamente ajustadas de filtros de paso completo y filtros de peine. Sospecho que esto involucró mucho ensayo y error por parte de oídos entrenados que se volvieron muy buenos para descubrir cómo sonarían los cambios en los parámetros o la topología, en lugar de cualquier enfoque científico. Aquí hay otra lectura interesante- mostrando la topología de reverb favorita de Keith Barr. El midiverb original podría no ser su definición de "reverberación algorítmica de alta calidad", pero sonaba dulce, y lo pone en perspectiva para saber que se hizo con un "dsp" solo capaz de MAC con coeficientes de 0.5 ...

La sala Valhalla es mi reverberación algorítmica de software favorita: tómese un tiempo para leer el blog de su desarrollador para encontrar inspiración sobre el tipo de cosas que ayudan a hacerlo bien.

pichenettes
fuente
2
Olvidé mencionar Freeverb como una variante más moderna (con código disponible, se puede encontrar, por ejemplo, en csound, o ladspa codebase) del algoritmo de Schroeder.
pichenettes
Muy interesante ! También me encantan los productos Valhalla (ValhallaShimmer brilla, sin juego de palabras tampoco :)). ¿Por qué mencionas convolución para la reflexión temprana? ¿Debería ser suficiente un retraso normal?
Dinaiz
1
Mencioné la convolución porque el "retraso de varias vueltas" es solo un tipo particular de convolución (con algunos coeficientes no nulos, por lo que se puede calcular de la manera ingenua y sin la artillería asociada con convoluciones "densas"). De todos modos, como señaló Hilmar, un retraso multitap puede ser demasiado ingenuo y después de algunas reflexiones, por lo que la difusión temporal (= filtrado de paso bajo) el eco sonará más natural. Esto se puede hacer con un retraso de múltiples toques con un LP simple para cada toque; o calculando directamente toda la parte de las reflexiones tempranas de la reverberación con un motor de convolución e IR preestablecidos.
pichenettes el
8

Hacer una buena reverberación NO es fácil. Las redes de retardo de retroalimentación son definitivamente el camino a seguir. Los algoritmos originales de Schroeder con todos los pasos y filtros de peine sufren de "adelgazamiento espectral" que lo hace sonar metálico. Debe marcar la atenuación dependiente de la frecuencia en las diferentes líneas de retardo que es representativa del tiempo de reverberación (en función de la frecuencia). Las reflexiones tempranas se pueden hacer a través de una línea de retardo intermitente también con cierta atenuación dependiente de la frecuencia y algunos difusores para descorrelacionarlas. Hacer estéreo también requiere algunos medios de descorrelación.

Hay una implementación bastante buena de código abierto flotando, se llama GVerb y se usa, por ejemplo, en Audacity. Una búsqueda en Google debería llevarlo a una copia (legal) del código fuente.

Hilmar
fuente
¡Desde tu publicación suena fácil! Bueno, al menos puedo entenderlo, excepto la parte sobre la des-correlación. ¿Qué quieres decir exactamente con eso? También acerca de la atención dependiente de la frecuencia, supongo que te refieres a tirar algunos filtros y ajustar por oído sus frecuencias para cada línea. ¿De qué tipo de filtro estamos hablando? HP? LP? BP? Gracias !
Dinaiz