Găsirea marcajelor temporale
Știm că frecvența de eșantionare a undei noastre sonore este de 48 kHz, dar ce ne-am face dacă n-am ști asta? Am putea afla acest lucru împărțind lungimea array-ului undei sonore la durata undei sonore. Totuși, modulul wave din Python oferă o metodă mai bună. Apelând getframerate() pe un obiect wave, obții rata de cadre a acelui obiect.
Putem folosi apoi metoda linspace() din NumPy pentru a afla marcajul temporal al fiecărui număr întreg din array-ul undei noastre sonore. Acest lucru ne va ajuta mai târziu să vizualizăm unda sonoră.
Metoda linspace() primește parametrii start, stop și num și returnează num valori distribuite uniform între start și stop.
În cazul nostru, start va fi zero, stop va fi lungimea array-ului undei sonore împărțită la rata de cadre (adică durata fișierului audio), iar num va fi lungimea array-ului undei sonore.
Acest exercițiu face parte din cursul
Procesarea limbajului vorbit în Python
Instrucțiuni pentru exercițiu
- Convertește octeții undei sonore în numere întregi.
- Obține rata de cadre a fișierului audio „good morning" folosind
getframerate(). - Setează
stopca fiind lungimea luisoundwave_gmîmpărțită la rata de cadre. - Setează
numca fiind lungimea luisoundwave_gm.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# Read in sound wave and convert from bytes to integers
good_morning = wave.open('good_morning.wav', 'r')
signal_gm = good_morning.readframes(-1)
soundwave_gm = np.frombuffer(____, dtype='int16')
# Get the sound wave frame rate
framerate_gm = good_morning.____
# Find the sound wave timestamps
time_gm = np.linspace(start=0,
stop=____/____,
num=____)
# Print the first 10 timestamps
print(time_gm[:10])