La reproducción de una pieza de audio musical a una velocidad más lenta reduciría su tono (frecuencia). ¿Existe una herramienta y una teoría para ralentizar la reproducción de la canción mientras se mantiene la frecuencia? Supongo que uno puede hacer transformada de Fourier en ventana o transformada wavelet. Parece que uno tiene que preseleccionar el tamaño de la ventana o elegir dinámicamente la base de wavelet. ¿Existe alguna teoría y aplicación específica y detallada para hacerlo?
10
Respuestas:
Sí, algunos de nosotros podemos hacerlo, puedes acelerar o reducir la velocidad sin afectar el tono, algunos chicos llaman a esto aplicaciones de Time Stretch, hay diferentes formas de hacerlo, puedes hacerlo en el dominio de la frecuencia o el dominio del tiempo, tendrás que elegir lo que es mejor para usted, encontrará algunas ventajas y desventajas de cada uno.
Dominio del tiempo:
En Time Domain puedes probar algunas técnicas como:
Pros: es rápido, algunos algoritmos son fáciles de entender, de buena calidad en sonidos monofónicos.
Contras: en general, necesitará una pista de tono muy buena para empalmar en la posición correcta, es difícil de hacer :-(, por lo que si su pista de tono falla o no funciona en sonidos polifónicos, estos algoritmos darán muchos fallos / artefactos en el sonido de salida.
Dominio de la frecuencia:
Todo el tiempo que conozco en el dominio de la frecuencia se basa en técnicas de vocoder de fase .
Pros: funcionará en sonidos polifónicos o monofónicos.
Contras: puede ser doloroso comprender todas las matemáticas, la implementación es un poco difícil, no es tan rápida como los códigos de dominio de tiempo, para la voz prefiero los resultados de dominio de tiempo, algunos trucos para mejorar el resultado del codificador de voz de fase estándar no se comparten.
Puedo decir que la ventana y el tamaño del salto son una de las claves para la calidad del codificador de fase, generalmente elegimos la
4x
superposición para la resíntesis, una ventana de tamaño de hann4096
es suficiente para mis oídos (por supuesto, si tiene potencia de procesamiento para estos tamaños) , el codificador de voz de fase estándar puede agregar algunos efectos reverberantes, para tratar de evitar este tipo de problemas que tal vez necesite bloquear la fase.Para datailed echar un vistazo en el Miller Puckette y Portnoff papel
fuente
44100 * 60 = 2646000
puntos a la vez y procesar, así que olvídese de cualquier intento de procesamiento en tiempo real como este ,La herramienta / teoría que describe es realmente un gran área de investigación en tecnología musical, en términos generales llamada modificación de escala de tiempo de audio. Un componente importante de este campo es cómo puede evitar cambios audibles en la frecuencia después del estiramiento. Esto puede abordarse con métodos de dominio de frecuencia y tiempo, dependiendo de las restricciones u objetivos de su aplicación. La entrada de wikipedia para la modificación de escala de tiempo / tono de audio es un buen punto de partida.
Si desea seguir un enfoque utilizando la base de frecuencia / wavelet, el tamaño de su ventana y la elección de la base afectarán qué tan bien puede localizar la señal. Para usar el STFT como ejemplo, una ventana larga funcionará bien para sinusoides estacionarios pero destruirá sus transitorios. Una ventana más corta proporcionará una respuesta transitoria preferible a costa de la localización del dominio de frecuencia. El rendimiento de otras bases wavelet dependerá de la naturaleza de la proyección de su señal en la base.
fuente
A continuación hay un enlace a una función tutorial simple y valiosa en C ++ (smbPitchShift.cpp) de Stephan M. Bernsee, que puede ralentizar o acelerar la música sin cambiar su tono.
Él ha lanzado este código bajo la licencia The Wide Open License (WOL). Dentro de mi aplicación, pude adaptar su función para ralentizar la música en tiempo real , es decir, al reproducir un archivo mp3 y al mismo tiempo hacer una detección de tono en esa señal mp3.
También he incluido un enlace al sitio web de Bernsee que contiene sus descripciones detalladas sobre el estiramiento de tiempo y el cambio de tono de las señales de audio, como la música.
https://github.com/AndyA/BatPhone/blob/master/pitchshift.c
http://blogs.zynaptiq.com/bernsee/time-pitch-overview/
fuente
time stretch
, se aplica el código originalPitch Shift
, en este caso para aplicar la modificación de la escala de tiempo deberá combinarPitch Shifit + Resample (interpolation)
, el código de Bernsee funciona bien usando una ventana de tamaño4096
que podrá cambiar de tono una octava (arriba o abajo) , significa que en consecuencia solo podrá hacer una escala de tiempo con una buena calidad utilizando factores entre 2.0x-0.5x, un vocoder de fase bien construido puede lograr mejores resultados usando el mismo tamaño de ventana, y podrá extrapolar estos factores con mejor calidad8192
en los códigos de la página de descarga, por lo que debe hacer 4 veces más puntos para el procesamiento , Vuelvo a decir que con la mitad del tamaño de la ventana8192/2=4096
puede hacer lo mismo usando algunos secretos del codificador de voz de fase, el punto aquí es que puede mantener la calidad con mucho menos procesamiento.