Kako mogu stvoriti grafiku zvučnog vala pomoću generatora?
Evo kako to možete učiniti pomoću Pythona, korištenja knjižnica za stvaranje zvuka i stvaranja slike:
1. Generirati podatke o zvučnom valu:
Ovaj dio stvara numeričke podatke koji predstavljaju zvučni val. Koristit ćemo `numpy` za numeričko računanje i` scipy` za generiranje različitih valnih oblika.
`` `Python
Uvoz numpi kao NP
uvoz matplotlib.pyplot kao plt
uvoz scipy.io.wavfile kao wav
od scipy.signal uvoza Sawtooth, kvadrat
Parametri
Frekvencija =440 # Hz (napomena A4)
Trajanje =2 # sekunde
uzorak_rate =44100 # Hz (standardna brzina zvuka)
amplituda =0,8 # Drži ga ispod 1 kako biste izbjegli rezanje
Vremenski vektor
t =np.linspace (0, trajanje, int (uzorak_rate * trajanje), krajnja točka =lažno)
Odaberite valni oblik (sine, kvadrat, pile itd.)
#waveform =np.sin (2 * np.pi * frekvencija * t) * amplituda # sine val
#waveform =kvadrat (2 * np.pi * frekvencija * t) * amplituda # kvadratni val
valni oblik =sawtooth (2 * np.pi * frekvencija * t) * amplituda # SawTooth val
#Option:Dodajte malo buke
buka =np.random.normal (0, 0,1, len (valni oblik))
valni oblik +=buka
Normalizirajte kako biste izbjegli rezanje (važno za izlaz zvuka)
Valni oblik =valni oblik / np.max (np.abs (valni oblik))
#Option:Spremi kao WAV datoteku
wav.write ("output.wav", Sample_rate, WaveForm.astype (np.float32))
`` `` ``
2. Stvorite grafiku:
Ovaj dio uzima generirane podatke zvučnog vala i crta ih pomoću `matplotlib`.
`` `Python
Nacrtajte valni oblik
plt.Figure (figsize =(10, 4))
plt.plot (t, valni oblik)
plt.xlabel ("Vrijeme (i)")
plt.Ylabel ("Amplituda")
plt.title ("Oblik zvučnog vala")
plt.Grid (istina)
plt.savefig ("sound_wave.png") #save kao PNG
plt.show ()
`` `` ``
Kompletni kod:
`` `Python
Uvoz numpi kao NP
uvoz matplotlib.pyplot kao plt
uvoz scipy.io.wavfile kao wav
od scipy.signal uvoza Sawtooth, kvadrat
Parametri
Frekvencija =440 # Hz (napomena A4)
Trajanje =2 # sekunde
uzorak_rate =44100 # Hz (standardna brzina zvuka)
amplituda =0,8 # Drži ga ispod 1 kako biste izbjegli rezanje
Vremenski vektor
t =np.linspace (0, trajanje, int (uzorak_rate * trajanje), krajnja točka =lažno)
Odaberite valni oblik
valni oblik =sawtooth (2 * np.pi * frekvencija * t) * amplituda
#Option:Dodajte malo buke
buka =np.random.normal (0, 0,1, len (valni oblik))
valni oblik +=buka
Normalizirajte kako biste izbjegli rezanje
Valni oblik =valni oblik / np.max (np.abs (valni oblik))
#Option:Spremi kao WAV datoteku
wav.write ("output.wav", Sample_rate, WaveForm.astype (np.float32))
Nacrtajte valni oblik
plt.Figure (figsize =(10, 4))
plt.plot (t, valni oblik)
plt.xlabel ("Vrijeme (i)")
plt.Ylabel ("Amplituda")
plt.title ("Oblik zvučnog vala")
plt.Grid (istina)
plt.savefig ("sound_wave.png")
plt.show ()
`` `` ``
Ovaj kôd će:
1. Generirajte val Sawtooth -a (to lako možete promijeniti u sinusne, kvadratne ili druge valne oblike pomoću funkcija `scipy.signal`).
2. Po želji dodajte buku kako biste je učinili realnijom.
3. Normalizirajte valni oblik kako biste spriječili rezanje.
4. Po želji spremite ga kao WAV datoteku.
5. Stvorite i spremite PNG sliku amplitude zvučnog vala s vremenom.
Ne zaboravite instalirati potrebne biblioteke:`numpy`,` matplotlib` i `Scipy`. Možete ih instalirati pomoću PIP:`PIP UGRADNJI NUMPY MATPLOTLIB SCIPY`