Hitta tidsstämplar
Vi vet att frekvensen för vår ljudvåg är 48 kHz – men vad gör vi om vi inte visste det? Vi kan räkna ut det genom att dividera längden på vår ljudvågsarray med ljudfilens varaktighet. Men Pythons wave-modul erbjuder ett smidigare sätt. Anropar man getframerate() på ett wave-objekt returneras samplingsfrekvensen för det objektet.
Vi kan sedan använda NumPys metod linspace() för att beräkna tidsstämpeln för varje heltal i vår ljudvågsarray. Det här kommer att hjälpa oss att visualisera ljudvågen längre fram.
Metoden linspace() tar parametrarna start, stop och num och returnerar num jämnt fördelade värden mellan start och stop.
I vårt fall sätter vi start till noll, stop till längden på vår ljudvågsarray dividerat med samplingsfrekvensen (det vill säga ljudfilens varaktighet) och num till längden på vår ljudvågsarray.
Den här övningen är en del av kursen
Taligenkänning i Python
Övningsinstruktioner
- Konvertera ljudvågens bytes till heltal.
- Hämta samplingsfrekvensen för good morning-ljudfilen med hjälp av
getframerate(). - Sätt
stoptill längden avsoundwave_gmdividerat med samplingsfrekvensen. - Sätt
numtill längden avsoundwave_gm.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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])