¿Preguntas sobre el cambio de tono?

2

Hola, me preguntaba cómo implementar un cambio de tono.

Así que tengo una señal de entrada de audio muestreada a 48KHz y una FFT de 256 muestras. Entonces, mi tamaño de bins es 48000/256 = 187.5 Hz por contenedor.

De las 256 muestras, tomo el contenedor que tiene la magnitud máxima y luego, para encontrar la frecuencia con la que sigo esta fórmula:

frecuencia = binIndex * binSize.

Luego estoy multiplicando esta frecuencia por 2 para hacer un cambio de tono.

    
pregunta bobert

4 respuestas

3

Su solución cambiará el tono hacia arriba una cantidad fija según la frecuencia de la "onda sinusoidal" más alta. Por ejemplo, si lo alimenta con una onda sinusoidal de 440 Hz, entonces emitirá una onda sinusoidal de 880 Hz. 880 Hz es una octava más alta que 440, así que estás bien hasta ahora.

Sin embargo, la música no es solo una onda sinusoidal única. Una sola nota tendrá armónicos. Normalmente, cada armónico es un entero múltiple (o divisor) de la fundamental. Digamos que su nota de 440 Hz tiene un armónico en 880 Hz. Ese armónico está en un volumen más bajo que el fundamental.

Cuando ejecute esto a través de su algoritmo, seleccionará los 440 Hz y hará que todo aumente a otros 440 Hz. Lo que termina es que lo fundamental sale correctamente como 880 Hz, pero el armónico sale como 1320 Hz, pero debería ser 1760 Hz.

¡El resultado es que tu única nota ahora está fuera de sintonía consigo misma! Ahora considere que una sola nota no es solo una fundamental y una armónica, sino que podría haber cientos de armónicos, cada uno fuera de tono con la otra. ¡Ay!

Para dificultar aún más las cosas, no puede diferenciar las notas con la suficiente precisión. Por ejemplo, el medio C es 523.25 Hz. Pero C # sobre C media es 554.37 Hz. Ambos caerán en la misma bandeja FFT, por lo que los cambiará a la misma cantidad de Hz a pesar de que son notas diferentes que requieren una cantidad de turno diferente. Más fuera de tono cambiando.

FFT y FFT inversa no se utilizan para desplazadores de tono profesionales. Bueno, a veces se usan FFT, pero los datos del contenedor no solo se mueven y se colocan en una FFT inversa para cambiar el tono del audio, ya que esto hace que se produzcan ruidos de mal sonido.

Los algoritmos profesionales de cambio de tono están patentados, lo que tiene algunas cosas buenas y malas. Para usted lo bueno es que una búsqueda de patentes descubrirá todo tipo de documentación sobre cómo lo hacen los profesionales.

    
respondido por el user3624
0

Un enfoque natural para el cambio de tono es muestrear el audio entrante a una velocidad y reproducirlo en otra. El problema natural con esto es que el audio saliente se retrasaría cada vez más con respecto al audio entrante o se adelantaría. Para superar eso, si el audio entrante tendrá un solo tono dominante (por ejemplo, representa la voz de una sola persona, o una única cuerda de instrumento, etc.), puede muestrear los datos a alta velocidad (posiblemente utilizando un filtro digital para producir un sonido). forma de onda con más muestras por segundo que el original), busque en la forma de onda de alta velocidad los lugares que parecen coincidir más o menos, y luego duplique u omita el contenido entre los lugares que sean necesarios para mantener la forma de onda de salida en el tiempo con la entrada. Dependiendo del contenido de la fuente, este enfoque puede funcionar bien o puede sonar muy "inteligible". Hay varias formas en que uno puede tratar de "suavizar" los empalmes resultantes; tales enfoques harán que las cosas suenen menos chillonas, pero más "embarradas". Tengo una caja de efectos de guitarra barata que utiliza este enfoque para la función de armonización; suena bien si toco una nota a la vez sin superposición, pero si no puedo silenciar completamente una cuerda antes de tocar otra, el sonido resultante será confuso.

    
respondido por el supercat
0

Beneficios de cambio de tono del tratamiento de la fase. El ancho de los contenedores es demasiado crudo para representar el tono con precisión. Sin embargo, si se puede suponer que ninguna de las bandejas contiene más de una sinusoide de la señal original (la resolución de su FFT es lo suficientemente fina como para que cada componente interesante de la señal tenga su propia bandeja "privada"), entonces la información de la fase desde la FFT contiene información precisa sobre la ubicación del campo dentro de cada contenedor. Esto se debe a que cuando la señal se enrosca con la base sinusoidal, mostrará una fase de rotación. Por ejemplo, si la frecuencia central de un contenedor es de 400Hz, y una señal de 390 Hz llega a ese contenedor, la fase girará 10 Hz. Por supuesto, no ve la rotación en una sola ventana FFT, donde solo tiene un valor de una sola fase para ese contenedor (codificado como el argumento del número complejo). Pero si se rastrea a través de ventanas sucesivas, la variación de fase entre ventanas sucesivas de la señal aparecerá como una rotación de 10 Hz, indicando exactamente que el tono es 10 Hz fuera del centro de la frecuencia central de ese contenedor.

En una operación de cambio de tono, puede manipular la fase para que el desplazamiento entre la frecuencia del contenedor se traduzca correctamente. Entonces, por ejemplo, si se supone que el tono de 390 Hz se duplica a 780 Hz, entonces, en relación con un contenedor que está centrado en 800 Hz, la rotación de fase debe ser de 20 Hz ahora. En otras palabras, los "tiempos heterodinos" entre las frecuencias de bin y las frecuencias reales deben estar sujetos a la escala de frecuencia para hacer un trabajo preciso.

Echa un vistazo al phase vocoder artículo de Wikipedia, que es más bien libre de contenido, pero tiene algunos recursos externos valiosos. enlaces.

    
respondido por el Kaz
0

He estado intentando una implementación de hecho de fto por un tiempo, sin suerte y sin mucha ayuda.

Escalado (un "modulador de tono" es un escalador de frecuencia ... el desplazamiento de frecuencia es, como se mencionó, discretamente diferente) las coordenadas cartesianas usando la función sinc, que tiene exactamente el mismo efecto que cambiar la velocidad de lectura de una muestra en el dominio del tiempo, excepto que repite la función para los cambios ascendentes, por lo que también puede usar algo de PSOLA. dspdimension describe un método para cambiar sin cambiar el dominio del tiempo, pero es probable que sea una mierda, ya que no hay interpolación bin.

he intentado convertir a la forma polar y procesar la fase después del cambio en forma cartesiana (los depósitos acumulan los datos interpolados) y luego convertir a la polar, y no he encontrado un método de procesamiento de la fase en un análisis de disparo único que trabajos. El método dspdimension utiliza la diferencia entre los marcos analizados.

    
respondido por el user21914

Lea otras preguntas en las etiquetas