Tiempo de lectura: 5 minutos, 5 segundos A partir de este artículo, presentaré una serie sobre un tema original (al menos para mí y para este blog). En primer lugar por el lenguaje de programación que estoy usando para mostrar mi idea y en segundo lugar por el tema: modificación de melodías, o para ser más precisos, procesamiento de sonido usando el lenguaje Python. Ya escribí una tesis sobre este tema en mi idioma nativo (polaco), por lo que decidí comenzar esta serie para que la audiencia mundial pueda aprender sobre ello. Teoría En primer lugar, debemos introducir algunos conceptos clave para poder transformarlos en una aplicación funcional. Necesitamos comprender los dominios que son el procesamiento de sonido y señales. Sonido Todo sonido que podemos escuchar puede ser en realidad una onda que se propaga por el aire. Es un cambio en la presión del aire a lo largo del tiempo. Fig. 1, Por Rburtonresearch – Trabajo propio, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=45035734 Esos cambios de presión y amplitudes se pueden medir y guardar como un archivo para el ordenador (como un archivo WAVE, por ejemplo). El archivo WAVE contiene información clara sobre las amplitudes. Procesamiento de señales FT y FFT Ok, ya hemos hojeado el tema, pero ¿cómo encontrar qué frecuencia estamos escuchando en un momento particular? Necesitamos utilizar un método brillante llamado Transformada de Fourier (FT) o, para ser más precisos, su versión de algoritmo adaptada a computadora llamada Transformada Rápida de Fourier (FFT). Una versión ingenua de este algoritmo (FT) es realmente ineficaz y tomaría demasiado tiempo procesar datos de sonido, así que ahí es donde entra en juego la FFT. Sin embargo, la historia de FT y FFT es una gran idea para un artículo diferente. Gracias a wiki podemos visualizar la idea de FT en gráficos. Fig 2. Función y su La primera figura muestra un gráfico de amplitud en el tiempo ya conocido para la función: este último presenta el resultado del operador Transformada de Fourier (matemáticamente hablando, FT es un operador lineal) aplicado a la entrada de muestra que se muestra en el primer gráfico. Como resultado obtenemos frecuencias que forman la onda de entrada y su potencia en dB. STFT Tenemos frecuencias de toda la muestra pero aún no sabemos qué frecuencia (nota) tiene el sonido en un determinado momento. Para ese problema, tenemos que utilizar otro método brillante con un acrónimo genial Short Time Fourier Transform (STFT). STFT nos permite calcular la frecuencia y su potencia en dB en un momento determinado. Una nota, por ejemplo un sonido C7, es una onda sonora que tiene una frecuencia de 2093,00 Hz. La tabla disponible en https://pages.mtu.edu/~suits/notefreqs.html muestra las frecuencias de la mayoría de las notas sonoras que el oído humano puede oír. ¡La conclusión es que tener un valor de frecuencia y su potencia en un determinado momento nos permite reproducir la melodía de toda la muestra! Fig. 3, Resultado de STFT en una muestra de voz humana: análisis espectral La figura anterior muestra el resultado de STFT aplicado a la muestra de sonido: un análisis espectral. (es una muestra diferente, no la misma ola que en las dos figuras anteriores). La línea verde, etiquetada como F0, es un gráfico de la melodía calculada por el algoritmo pYIN. Modificando las frecuencias en determinados momentos podemos cambiar la melodía. Entonces sólo necesitamos usar iSTFT (operación inversa) para adquirir sonido modificado. Frecuencia fundamental Una última pieza de teoría. ¿Cuál es la frecuencia fundamental etiquetada como F0? Según wikipedia, «lo fundamental es el tono musical de una nota que se percibe como el presente parcial más bajo». El tono se puede asignar a la frecuencia en nuestros términos. Mirando la Fig. 3 podemos ver el área más brillante que abarca desde aproximadamente 0,06 a 0,36 s. – el mismo que ha sido marcado con línea azul. Esta es la frecuencia más baja de todos los armónicos en un momento determinado. Todos los armónicos más altos (F1, F2) también se pueden ver en la figura como franjas más brillantes (mayor potencia en dB) en frecuencias más altas. Implementación Hay mucha teoría detrás de este concepto. Afortunadamente, tenemos una maravillosa biblioteca de Python que hace los cálculos por nosotros para que podamos centrarnos en nuestra idea en lugar de implementarla a mano (aunque eso también sería divertido). librosa es una rica biblioteca para análisis de música y audio. Sólo necesitamos obtener Python, instalarlo, luego obtener librosa e instalarlo también. Estoy usando PyCharm de JetBrains, lo que hace que sea bastante fácil de hacer, pero puedes elegir tu IDE favorito. PyCharm Una vez que haya adquirido PyCharm, vaya a Archivo -> Configuración. Luego elija el intérprete de Python y haga clic en el signo «más». Escribe ‘librosa’ y elige la última versión (0.8.0 en el momento de escribir esto). Haga clic en Instalar paquete, luego en Aceptar, espere a que se instale y estará listo. Otras bibliotecas que deben instalarse para mostrar un gráfico son ‘matplotlib’ y ‘numpy’. Repita los pasos anteriores e instale la versión más reciente. Probando librosa Cree un nuevo archivo .py y escriba el código a continuación. importar librosafrom librosa importar displayimport matplotlib.pyplot como pltimport numpy como npfig, ax = plt.subplots()y, sr = librosa.load(librosa.ex(‘trumpet’))stft_absolute_values ​​= np.abs(librosa.stft(y) )img = display.specshow(librosa.amplitude_to_db(stft_absolute_values, ref=np.max), y_axis=»log», x_axis=»time», ax=ax)ax.set_title(‘Espectrograma de potencia’)fig.colorbar(img , ax=ax, format=»%+2.0f dB»)plt.show() Ejecute el código y ¡listo! Transformamos rápidamente ondas sonoras en frecuencias y creamos un diagrama realmente claro usando Python y librosa. Buen trabajo. Aquí es donde me detengo. En la siguiente parte, les mostraré una implementación real del código de modificación de melodías, conversión de muestras usando STFT y viceversa. Explique detalladamente cómo leer, comprender y modificar los resultados de la Transformación de Fourier. ¡Espero verte allí! Si tiene alguna pregunta o comentario, ¡no dude en comunicarse conmigo! Feliz 0 0 % Triste 0 0 % Emocionado 0 0 % Sueño 0 0 % Enojado 0 0 % Sorpresa 0 0 %

Source link