Tìm các mốc thời gian
Chúng ta biết tần số của sóng âm là 48 kHz, nhưng nếu không biết thì sao? Bạn có thể tìm bằng cách lấy độ dài mảng sóng âm chia cho thời lượng của sóng âm. Tuy nhiên, mô-đun wave của Python có cách tốt hơn. Gọi getframerate() trên một đối tượng wave sẽ trả về tốc độ khung hình của đối tượng đó.
Sau đó, chúng ta có thể dùng phương thức linspace() của NumPy để tìm mốc thời gian cho từng số nguyên trong mảng sóng âm. Điều này sẽ giúp bạn trực quan hóa sóng âm sau này.
Phương thức linspace() nhận các tham số start, stop và num, rồi trả về num giá trị cách đều nhau giữa start và stop.
Trong trường hợp này, start sẽ là không, stop sẽ là độ dài mảng sóng âm chia cho tốc độ khung hình (tức thời lượng của tệp âm thanh) và num sẽ là độ dài mảng sóng âm.
Bài tập này là một phần của khóa học
Xử lý Ngôn ngữ Nói bằng Python
Hướng dẫn bài tập
- Chuyển đổi các byte của sóng âm thành số nguyên.
- Lấy tốc độ khung hình của tệp âm thanh good morning bằng
getframerate(). - Đặt
stoplà độ dài củasoundwave_gmchia cho tốc độ khung hình. - Đặt
numlà độ dài củasoundwave_gm.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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])