Tijdstempels bepalen
We weten dat de bemonsteringsfrequentie van onze geluidsgolf 48 kHz is, maar wat als we dat niet wisten? We zouden die kunnen vinden door de lengte van onze geluidsgolf-array te delen door de duur van onze geluidsgolf. Maar Python's wave-module heeft een betere manier. Als je getframerate() aanroept op een wave-object, krijg je de framesnelheid van dat object terug.
Vervolgens kunnen we NumPy's linspace() gebruiken om de tijdstempel van elk geheel getal in onze geluidsgolf-array te bepalen. Dat helpt ons straks bij het visualiseren van onze geluidsgolf.
De methode linspace() neemt de parameters start, stop en num en geeft num gelijkmatig verdeelde waarden terug tussen start en stop.
In ons geval is start nul, is stop de lengte van onze geluidsgolf-array gedeeld door de framesnelheid (oftewel de duur van ons audiobestand) en is num de lengte van onze geluidsgolf-array.
Deze oefening maakt deel uit van de cursus
Spoken Language Processing in Python
Oefeninstructies
- Zet de bytes van de geluidsgolf om naar gehele getallen.
- Haal de framesnelheid van het "good morning"-audiobestand op met
getframerate(). - Zet
stopgelijk aan de lengte vansoundwave_gmgedeeld door de framesnelheid. - Zet
numgelijk aan de lengte vansoundwave_gm.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# 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])