Come posso creare un grafico ondulato audio usando il generatore?
Ecco come puoi farlo usando Python, sfruttando le librerie per la generazione del suono e la creazione di immagini:
1. Genera i dati dell'onda sonora:
Questa parte crea i dati numerici che rappresentano l'onda sonora. Useremo `numpy` per il calcolo numerico e` Scipy` per generare diverse forme d'onda.
`` `Python
Importa Numpy come NP
Importa matplotlib.pyplot come plt
Import Scipy.io.Wavfile come WAV
da Scipy.signal Import Highoth, Square
Parametri
Frequenza =440 # Hz (Nota A4)
durata =2 # secondi
Sample_rate =44100 # Hz (velocità audio standard)
ampiezza =0,8 # mantienilo al di sotto di 1 per evitare il ritaglio
Time Vector
t =np.linspace (0, durata, int (campione_rate * durata), endpoint =false)
Scegli una forma d'onda (seno, quadrato, dente di sega, ecc.)
#WaveForm =np.sin (2 * np.pi * frequenza * t) * ampiezza # sine wave
#WaveForm =Square (2 * np.pi * Frequency * T) * Amplitude # Square Wave
WaveForm =sewtooth (2 * np.pi * frequenza * t) * ampiezza # sewtooth wave
#Optional:aggiungi un po 'di rumore
rumore =np.random.normal (0, 0.1, len (forma d'onda))
forma d'onda +=rumore
normalizza per evitare il ritaglio (importante per l'uscita audio)
WaveForm =WaveForm / Np.Max (NP.ABS (Wave Form))
#Optional:salva come file wav
wav.write ("output.wav", sample_rate, waveform.astype (np.float32))
`` `
2. Crea il grafico:
Questa parte prende i dati di onda audio generati e lo traccia usando `matplotlib`.
`` `Python
Traccia la forma d'onda
plt.figure (figsize =(10, 4))
plt.plot (t, forma d'onda)
plt.xlabel ("time (s)")
plt.ylabel ("ampiezza")
plt.title ("forma d'onda sonora")
plt.grid (vero)
plt.savefig ("sound_wave.png") #Save come png
plt.show ()
`` `
Codice completo:
`` `Python
Importa Numpy come NP
Importa matplotlib.pyplot come plt
Import Scipy.io.Wavfile come WAV
da Scipy.signal Import Highoth, Square
Parametri
Frequenza =440 # Hz (Nota A4)
durata =2 # secondi
Sample_rate =44100 # Hz (velocità audio standard)
ampiezza =0,8 # mantienilo al di sotto di 1 per evitare il ritaglio
Time Vector
t =np.linspace (0, durata, int (campione_rate * durata), endpoint =false)
Scegli una forma d'onda
WaveForm =sewtooth (2 * np.pi * frequenza * t) * ampiezza
#Optional:aggiungi un po 'di rumore
rumore =np.random.normal (0, 0.1, len (forma d'onda))
forma d'onda +=rumore
normalizza per evitare il ritaglio
WaveForm =WaveForm / Np.Max (NP.ABS (Wave Form))
#Optional:salva come file wav
wav.write ("output.wav", sample_rate, waveform.astype (np.float32))
Traccia la forma d'onda
plt.figure (figsize =(10, 4))
plt.plot (t, forma d'onda)
plt.xlabel ("time (s)")
plt.ylabel ("ampiezza")
plt.title ("forma d'onda sonora")
plt.grid (vero)
plt.savefig ("sound_wave.png")
plt.show ()
`` `
Questo codice lo farà:
1. Genera un'onda a dente di sega (puoi facilmente cambiarlo in forme d'onda sinusoidali, quadrate o utilizzando le funzioni `Scipy.signal`).
2. Opzionalmente aggiungere rumore per renderlo più realistico.
3. Normalizzare la forma d'onda per prevenire il ritaglio.
4. Opzionalmente salvalo come file WAV.
5. Creare e salvare un'immagine PNG dell'ampiezza dell'onda sonora nel tempo.
Ricorda di installare le librerie necessarie:`numpy`,` matplotlib` e `Scipy`. È possibile installarli utilizzando PIP:`PIP Installa numpy matplotlib Scipy`