Wyznaczanie znaczników czasu
Wiemy, że częstotliwość próbkowania naszej fali dźwiękowej wynosi 48 kHz – ale co zrobić, gdy jej nie znamy? Możemy ją wyliczyć, dzieląc długość tablicy fali dźwiękowej przez czas trwania nagrania. Moduł wave w Pythonie oferuje jednak wygodniejszy sposób: wywołanie metody getframerate() na obiekcie wave zwraca jego częstotliwość próbkowania.
Następnie możemy użyć metody linspace() z biblioteki NumPy, aby wyznaczyć znacznik czasu dla każdej próbki w tablicy fali dźwiękowej. Przyda nam się to później przy wizualizacji fali.
Metoda linspace() przyjmuje parametry start, stop i num, a zwraca num równomiernie rozłożonych wartości między start a stop.
W naszym przypadku start przyjmuje wartość zero, stop to długość tablicy fali dźwiękowej podzielona przez częstotliwość próbkowania (czyli czas trwania pliku audio), a num to długość tablicy fali dźwiękowej.
To ćwiczenie jest częścią kursu
Przetwarzanie mowy w Pythonie
Instrukcje do ćwiczenia
- Przekonwertuj bajty fali dźwiękowej na liczby całkowite.
- Pobierz częstotliwość próbkowania pliku audio z porannym pozdrowieniem, używając metody
getframerate(). - Ustaw wartość
stopjako długość tablicysoundwave_gmpodzieloną przez częstotliwość próbkowania. - Ustaw wartość
numjako długość tablicysoundwave_gm.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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])