Kako lahko ustvarim valovno obliko iz zvoka?
1. Preprosta metoda (z uporabo knjižnic):
Ta pristop je najlažji in ne zahteva poglobljenega znanja o obdelavi zvoka. Uveljavili boste knjižnice, ki obvladujejo težko dviganje za vas. Takole bi to storili s Python s knjižnicami `Librbosa` in` Matplotlib`:
`` `Python
uvoz Librosa
uvoz librosa.display
uvozite matplotlib.pyplot kot plt
Naložite zvočno datoteko
audio_file ="your_audio_file.wav" # Zamenjajte s svojo potjo zvočne datoteke
y, sr =librosa.load (audio_file)
Prikažite valovno obliko
plt.Figure (slsize =(14, 5))
librosa.display.waveShow (y, sr =sr)
plt.title ("valovna oblika")
PLT.XLABEL ("Čas (s)")
plt.ylabel ("amplituda")
plt.show ()
`` `
Preden zaženete to kodo:
* Namestite potrebne knjižnice: `PIP Namestite librbosa matplotlib`
* Zamenjajte `" your_audio_file.wav "`: z dejansko potjo do zvočne datoteke. Datoteka mora biti datoteka WAV za najboljšo združljivost. Librosa lahko obravnava druge formate, vendar je za to nalogo na splošno prednostna WAV.
2. Vmesna metoda (ročna obdelava):
To zagotavlja več nadzora, vendar zahteva razumevanje zvočnih temeljev. Neposredno boste sodelovali z zvočnimi podatki:
`` `Python
uvozni val
uvozi numpy kot np
uvozite matplotlib.pyplot kot plt
Odprite datoteko WAV
z wave.open ("your_audio_file.wav", "rb") kot wf:
num_channels =wf.gettnchannels ()
vzorca_Width =wf.getSampWidth ()
frame_rate =wf.getFramerate ()
num_frames =wf.gettnFrames ()
Data =wf.readFrames (num_frames)
Pretvorite podatke v Numpy Array
Data =np.frombuffer (podatki, dtype =np.int16) # prilagodite dtype, če je vzorec_Width drugačen
Če stereo pretvorite v mono (povprečni kanali)
Če je num_channels ==2:
Data =np.mean (data.reshape (-1, 2), os =1)
Normalizirajte podatke
Data =podatki / np.max (np.abs (podatki))
Časovni vektor
čas =np.arange (0, num_frames) / frame_rate
Narišite valovno obliko
plt.Figure (slsize =(14, 5))
Plt.plot (čas, podatki)
plt.title ("valovna oblika")
PLT.XLABEL ("Čas (s)")
plt.ylabel ("amplituda")
plt.show ()
`` `
Ta koda:
* Odpre datoteko WAV z modulom `Wave`.
* Bere surove zvočne podatke.
* Pretvori ga v Numpy matriko za lažjo manipulacijo.
* Upravlja stereo zvok s povprečjem kanalov, da ustvari mono valovno obliko.
* Normalizira podatke v razpon med -1 in 1 za boljšo vizualizacijo.
* Ustvari časovni vektor za načrtovanje.
* Narišite valovno obliko z `matplotlib`.
3. Napredne metode (FFT, spektrogrami):
Za podrobnejšo analizo lahko uporabite hitro Fourierovo transformacijo (FFT) za analizo frekvenčnih komponent zvočnega signala in tako ustvarite spektrograme. Knjižnice, kot sta `Librosa` in` Scipy`, zagotavljajo učinkovite implementacije FFT. To je zunaj obsega preproste razlage, vendar vključuje preoblikovanje signala časovne domene v frekvenčno domeno za vizualizacijo frekvenc sčasoma. Librsosa `librbosa.feature.mel_spectrogram` je odlično izhodišče za to.
Izbira prave metode:
* Preprosta metoda: Najboljše za hitre vizualizacije valovnih oblik, ne da bi potrebovali globoko razumevanje zvoka.
* Vmesna metoda: Daje več nadzora in vpogleda v surove zvočne podatke.
* Napredna metoda: Potrebno za podrobno analizo frekvence in vizualizacijo (spektrogrami).
Ne pozabite namestiti potrebnih knjižnic, preden zaženete katero koli od teh kod. Izberite metodo, ki najbolje ustreza vašim potrebam in ravni razumevanja. Zgoraj navedeni primeri uporabljajo Python, vendar je podobno funkcionalnost mogoče doseči v drugih programskih jezikih, kot je JavaScript (z uporabo knjižnic, kot je spletni zvočni API) ali C ++ (z uporabo knjižnic, kot je SDL).