Encontrando las marcas de tiempo
Sabemos que la frecuencia de nuestra onda de sonido es 48 kHz, pero ¿y si no la conociéramos? Podríamos calcularla dividiendo la longitud del array de la onda entre la duración de la onda. Sin embargo, el módulo wave de Python tiene una forma mejor. Llamar a getframerate() sobre un objeto wave devuelve su frecuencia de muestreo (frame rate).
Luego podemos usar el método linspace() de NumPy para calcular la marca de tiempo de cada entero en nuestro array de la onda. Esto nos ayudará a visualizar la onda más adelante.
El método linspace() recibe los parámetros start, stop y num, y devuelve num valores equiespaciados entre start y stop.
En nuestro caso, start será cero, stop será la longitud de nuestro array de la onda dividida por la frecuencia de muestreo (o la duración del archivo de audio) y num será la longitud de nuestro array de la onda.
Este ejercicio forma parte del curso
Procesamiento del lenguaje hablado en Python
Instrucciones del ejercicio
- Convierte los bytes de la onda de sonido a enteros.
- Obtén la frecuencia de muestreo del archivo de audio de good morning usando
getframerate(). - Define
stopcomo la longitud desoundwave_gmdividida por la frecuencia de muestreo. - Define
numcomo la longitud desoundwave_gm.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# 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])