Trazar varios sonidos en gráficos usando Python y Matplotlib

En este artículo, exploraremos la forma de visualizar ondas sonoras utilizando Python y Matplotlib.

Módulos necesarios

 1. Matplotlib : Instale Matplotlib usando el siguiente comando:

pip install matplotlib

2. Numpy : Numpy se instala automáticamente con Matplotlib. Aunque, si enfrenta algún error de importación, use el siguiente comando para instalar Numpy

pip install numpy

Nota: si está en Linux como yo, es posible que deba usar pip3 en lugar de pip o puede crear un entorno virtual y ejecutar el comando anterior.

Acercarse

  • Importe el módulo matplotlib, Numpy, wave y sys.
  • Abra el archivo de audio usando el método wave.open() .
  • Lea todos los cuadros de la onda de sonido abierta usando la función readframes().
  • Almacene la velocidad de fotogramas en una variable utilizando la función getframrate().
  • Finalmente, trace el eje x en segundos usando la velocidad de fotogramas.
  • Use la función matplotlib.figure() para trazar el gráfico derivado
  • Use etiquetas según el requisito.

A continuación se muestra la implementación.
 

Python3

# imports
import matplotlib.pyplot as plt
import numpy as np
import wave, sys
 
# shows the sound waves
def visualize(path: str):
   
    # reading the audio file
    raw = wave.open(path)
     
    # reads all the frames
    # -1 indicates all or max frames
    signal = raw.readframes(-1)
    signal = np.frombuffer(signal, dtype ="int16")
     
    # gets the frame rate
    f_rate = raw.getframerate()
 
    # to Plot the x-axis in seconds
    # you need get the frame rate
    # and divide by size of your signal
    # to create a Time Vector
    # spaced linearly with the size
    # of the audio file
    time = np.linspace(
        0, # start
        len(signal) / f_rate,
        num = len(signal)
    )
 
    # using matplotlib to plot
    # creates a new figure
    plt.figure(1)
     
    # title of the plot
    plt.title("Sound Wave")
     
    # label of x-axis
    plt.xlabel("Time")
    
    # actual plotting
    plt.plot(time, signal)
     
    # shows the plot
    # in new window
    plt.show()
 
    # you can also save
    # the plot using
    # plt.savefig('filename')
 
 
if __name__ == "__main__":
   
    # gets the command line Value
    path = sys.argv[1]
 
    visualize(path)

Producción:

plotting sound in python

Entonces, hemos terminado con la codificación, ahora es el momento de la verdad. Vamos a comprobar si realmente funciona o no. Puede probar cualquier archivo de audio, pero asegúrese de que sea un archivo wav . Si tiene algún otro tipo de archivo, puede usar ffmpeg para convertirlo a un archivo wav. Si lo desea, siéntase libre de descargar el archivo de audio que usaremos. Puedes descargarlo usando este enlace , pero prueba otros archivos también.
Para ejecutar el código, debe pasar la ruta del archivo de audio en la línea de comando. Para ello escribe lo siguiente en tu terminal:

python soundwave.py sample_audio.wav

Es importante tener en cuenta que el nombre del archivo de Python es soundwave.py y el nombre del archivo de audio es sample_audio.wav . Debe cambiarlos de acuerdo con su sistema. Ahora, debería haber aparecido una nueva ventana y debería estar viendo un gráfico de ondas de sonido. Si ha usado mi audio, entonces su trama debería verse así.

Publicación traducida automáticamente

Artículo escrito por debdutgoswami y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *