Tìm các mốc thời gian (time stamp)
Chúng ta biết tần số lấy mẫu của sóng âm là 48 kHz, nhưng nếu không biết thì sao? Ta 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, module 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 (frame rate) của đối tượng đó.
Sau đó, ta có thể dùng phương thức linspace() của NumPy để tìm mốc thời gian của 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 về sau.
Phương thức linspace() nhận các tham số start, stop và num, và trả về num giá trị được giãn cách đều giữa start và stop.
Trong trường hợp của chúng ta, start sẽ là 0, 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 của 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 bytes của sóng âm thành số nguyên.
- Lấy tốc độ khung hình của tệp audio good morning bằng
getframerate(). - Đặt
stopbằng độ dài củasoundwave_gmchia cho tốc độ khung hình. - Đặt
numbằng độ 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])