Programando un Vocoder

11

Quiero programar mi propio sintetizador de vocoder como "Songify" pero no puedo encontrar un algoritmo simple de vocoder. Tal vez pueda explicar o decir dónde buscar información sobre cómo funciona el vocoder.

Rytis Alekna
fuente
3
DAFX de Udo Zölzer et al tiene un codificador de fase simple con algún código MATLAB.
Phonon
1
Compruebe Melodify SDK , hace lo mismo y hay disponible una versión de prueba.
Danijel

Respuestas:

18

Me temo que todas las respuestas aquí son irrelevantes para la pregunta. Lo que se llama un vocoder en el mundo de la producción musical tiene poco que ver con el vocoder de fase utilizado en el procesamiento de señales. Para empeorar las cosas, la aplicación Songify a la que hace referencia la publicación original no es un ejemplo de vocoder. Vamos a resolver esto!

1. Vocoder de fase

El codificador de voz de fase al que hacen referencia las otras respuestas es una técnica de procesamiento de señal que se puede utilizar para realizar la modificación de señales de tiempo / tono (estiramiento de tiempo, cambio de tono), calculando una representación de la señal en tiempo y frecuencia (transformada de Fourier a corto plazo , o STFT) y luego insertar / eliminar tramas de señal y luego mantener la coherencia de la información de fase. Su relación con la voz es solo histórica, y actualmente se usa para cambiar el tono y estirar el tiempo en hardware / software de audio de gama baja. RubberBand es un ejemplo de biblioteca de alteración de tiempo / tono C ++ de código abierto basada en un codificador de fase.

2. Vocoder

Cuando las personas en el campo de la producción musical se refieren a un Vocoder, se refieren a un dispositivo que extrae la envoltura espectral de una señal (generalmente voz, llamada modulador) y filtra otra señal (generalmente una textura de sintetizador rica, llamada portadora) con un filtro cuya respuesta es la envoltura espectral extraída. Para ver un ejemplo del sonido resultante, escuche 0:23 en Kraftwerk Trans Europe Express , o el Proyecto The Raven de Alan Parsons desde los primeros segundos. El efecto resultante es un timbre de tipo vocal aplicado a la melodía o los acordes tocados por la señal portadora, dando la sensación de que una voz se habla a través de un sintetizador.

El vocoder era originalmente un dispositivo analógico, se implementó con dos bancos de una docena o más de filtros de paso de banda con Q alta. La señal del modulador se envía a través del primer banco de filtros, y la amplitud de todas las señales de sub-banda se rastrea con un Matriz de seguidores de sobres. En paralelo, la señal portadora se envía a través de otro banco de filtros. Cada sub-banda se amplifica (con un VCA) con las ganancias dadas por los seguidores del sobre. Si lees analógico, puedes echar un vistazo a los esquemas de un canal de codificador de voz aquí , del Vocoder vivo de Jurgen Haible- en la parte superior el filtro de señal del modulador, en la parte inferior el filtro de la portadora y el VCA. Las implementaciones de software de vocoders se mantienen cerca de esto, simplemente porque los productores de música esperan que los vocoders suenen como los dispositivos analógicos clásicos. Pero si no desea fidelidad a los dispositivos "vintage", y desea algo más barato que 40 biquads, otra forma de lograr el mismo resultado es estimar un filtro de todos los polos (de orden 8 a 20 dependiendo de qué tan cerca desee) para llegar a la voz original) desde la señal del modulador (modelado AR); y luego aplique este filtro al transportista. El problema típico aquí es que necesitará actualizar sus coeficientes de filtro cada 20 ms aproximadamente; entonces necesita una representación del filtro de todos los polos que maneja actualizaciones de coeficientes bien abruptas.

3. Autoajuste y reasignación de tono

Lo que Songify hace es lo siguiente: extraer la prosodia (contorno de tono) de la voz grabada y modificarla para que el contorno de tono resultante coincida con la melodía objetivo. Esto es un poco similar a lo que hace el autoajuste, con la diferencia de que el autoajuste "redondea" el tono hacia el semitono musicalmente más cercano, mientras que Songify simplemente lo empuja a un valor objetivo.

Los algoritmos en el trabajo aquí son muy diferentes del estiramiento de tiempo de cambio de tono tradicional, porque la señal de voz es monofónica y se ajusta bien al modelo de filtro fuente. Enfoques como Time-Domain Pitch-Synchronous-Overlap-Add (TD-PSOLA) son mucho más eficientes, tanto computacionalmente como en términos de calidad, para alterar de manera transparente el tono de la voz que los algoritmos genéricos de estiramiento de tiempo (generalmente realizados con codificadores de fase) ) Estos se utilizan, por ejemplo, en la síntesis del habla para alterar la prosodia de una oración sintetizada, ¡no muy diferente de Songify! El autoajuste también se basa en dichos métodos de dominio de tiempo (detectando ciclos completos de la forma de onda de entrada y volviendo a muestrearlos).

Ilustración de PSOLA

pichenettes
fuente
2

Aquí hay un enlace al pseudocódigo en Mathworks.

Aquí hay un enlace de una descripción del algoritmo en DSP Dimensions.

Un contenedor FFT tiene una frecuencia central. Cualquier sinusoide a esa frecuencia de depósito exacta tendrá la misma fase con referencia a 2 puntos de referencia compensados ​​exactamente a 1 trama FFT, o tendrá una fase delta que puede calcularse para 2 puntos de referencia o 2 tramas FFT a cierta distancia arbitraria (tal vez solapada) . La idea básica de un codificador de voz de fase es ajustar ligeramente cada frecuencia del contenedor FFT a una frecuencia cercana para que una sinusoide a esa frecuencia coincida con la fase detectada en los puntos de referencia de 2 cuadros FFT desplazados, si las frecuencias centrales del contenedor FFT no lo hacen.

Estas frecuencias ajustadas se pueden usar para una resíntesis granular de una forma de onda que exhibe más continuidad a través de cuadros resintetizados, incluso si la secuencia original de espectros se escala en los dominios de frecuencia o tiempo. Estas frecuencias de desplazamiento también se pueden usar para la estimación de frecuencia, o como parte de un método de estimación de tono. Con la estimación de tono más la resíntesis de sonido, uno podría tomar un sonido en un tono e impulsar una resíntesis a algo que suene casi igual, excepto en otro tono.

hotpaw2
fuente
2

El siguiente artículo describe un vocoder de fase basado en transformada de Fourier (STFT) a corto plazo, así como una técnica de adición de solapamiento síncrono de tono (PSOLA) para abordar las modificaciones de tono y tiempo de las señales de audio:

Moulines, E. y Laroche, J.
" Técnicas no paramétricas para la modificación del habla a escala de tiempo y escala de tono ",
Speech Communication, 1995.
(algunas versiones en PDF están disponibles en enlaces de Google Scholar )

Jean-louis Durrieu
fuente