Encontrar las marcas de tiempo
Sabemos que la frecuencia de muestreo de nuestra onda de sonido es 48 kHz, pero ¿y si no lo supiéramos? Podríamos calcularla dividiendo la longitud de nuestro array de la onda por la duración de la señal. Sin embargo, el módulo wave de Python ofrece una opción mejor: llamar a getframerate() sobre un objeto wave devuelve su frame rate.
Luego podemos usar el método linspace() de NumPy para obtener la marca de tiempo de cada entero en nuestro array de la onda. Esto nos ayudará a visualizar la señal 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, la longitud de nuestro array de la onda dividida entre el frame rate (es decir, la duración del archivo de audio); y num, 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 el frame rate del archivo de audio de "good morning" usando
getframerate(). - Define
stopcomo la longitud desoundwave_gmdividida entre el frame rate. - Define
numcomo la longitud desoundwave_gm.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# 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])