¿Cómo puedo crear un gráfico de onda de sonido usando generador?

No puede crear un gráfico de onda de sonido * verdadero * directamente usando una función de generador único en la forma en que podría pensar (como una sola función de Python que genera un PNG). Las ondas de sonido son datos inherentemente temporales (la presión cambia con el tiempo). Un gráfico es una representación espacial. Debe *generar los datos de onda de sonido *, luego *procesar esos datos para crear una representación visual *.

Así es como puedes hacer esto usando Python, aprovechando las bibliotecas para la generación de sonido y la creación de imágenes:

1. Genere los datos de onda de sonido:

Esta parte crea los datos numéricos que representan la onda de sonido. Usaremos `Numpy` para el cálculo numérico y 'Scipy` para generar diferentes formas de onda.

`` `Python

importar numpy como np

Importar matplotlib.pyplot como PLT

import scipy.io.wavfile como wav

de scipy.signal import sawtooth, cuadrado

parámetros

frecuencia =440 # Hz (nota A4)

duración =2 # segundos

sample_rate =44100 # Hz (tasa de audio estándar)

amplitud =0.8 # Manténgalo por debajo de 1 para evitar el recorte

Time Vector

t =np.linspace (0, duración, int (sample_rate * duración), punto final =falso)

Elija una forma de onda (seno, cuadrado, diente de sierra, etc.)

#waveform =np.sin (2 * np.pi * frecuencia * t) * Amplitud # sine onda

#WaveForm =Square (2 * np.pi * frecuencia * t) * amplitud # onda cuadrada

forma de onda =sawtooth (2 * np.pi * frecuencia * t) * amplitud # sawtooth onda

#Optional:Agregue algo de ruido

ruido =np.random.normal (0, 0.1, len (forma de onda))

forma de onda +=ruido

Normalizar para evitar el recorte (importante para la salida de audio)

forma de onda =forma de onda / np.max (np.abs (forma de onda))

#Optional:Guardar como archivo WAV

wav.write ("output.wav", sample_rate, waveform.astype (np.float32))

`` `` ``

2. Crea el gráfico:

Esta parte toma los datos de onda de sonido generados y los traza usando `matplotlib`.

`` `Python

traza la forma de onda

plt.figure (figsize =(10, 4))

Plt.plot (T, forma de onda)

plt.xlabel ("Tiempo (s)")

plt.ylabel ("amplitud")

plt.title ("Forma de onda de sonido")

plt.grid (verdadero)

plt.saveFig ("Sound_wave.png") #save como PNG

plt.show ()

`` `` ``

Código completo:

`` `Python

importar numpy como np

Importar matplotlib.pyplot como PLT

import scipy.io.wavfile como wav

de scipy.signal import sawtooth, cuadrado

parámetros

frecuencia =440 # Hz (nota A4)

duración =2 # segundos

sample_rate =44100 # Hz (tasa de audio estándar)

amplitud =0.8 # Manténgalo por debajo de 1 para evitar el recorte

Time Vector

t =np.linspace (0, duración, int (sample_rate * duración), punto final =falso)

Elija una forma de onda

forma de onda =sawtooth (2 * np.pi * frecuencia * t) * amplitud

#Optional:Agregue algo de ruido

ruido =np.random.normal (0, 0.1, len (forma de onda))

forma de onda +=ruido

Normalizar para evitar recortar

forma de onda =forma de onda / np.max (np.abs (forma de onda))

#Optional:Guardar como archivo WAV

wav.write ("output.wav", sample_rate, waveform.astype (np.float32))

traza la forma de onda

plt.figure (figsize =(10, 4))

Plt.plot (T, forma de onda)

plt.xlabel ("Tiempo (s)")

plt.ylabel ("amplitud")

plt.title ("Forma de onda de sonido")

plt.grid (verdadero)

plt.saveFig ("Sound_wave.png")

plt.show ()

`` `` ``

Este código lo hará:

1. Genere una onda de diente de sierra (puede cambiar fácilmente esto a formas de onda sinuso, cuadradas u otras utilizando funciones `scipy.signal`).

2. Opcionalmente, agregue ruido para hacerlo más realista.

3. Normalice la forma de onda para evitar el recorte.

4. Opcionalmente guárdelo como un archivo WAV.

5. Cree y guarde una imagen PNG de la amplitud de la onda de sonido con el tiempo.

Recuerde instalar las bibliotecas necesarias:`numpy`,` matplotlib` y `scipy`. Puede instalarlos usando PIP:`PIP instale numpy matplotlib scipy`