Bắt đầu ngayBắt đầu miễn phí

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, stopnum, rồi trả về num giá trị cách đều nhau giữa startstop.

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

Xem khóa học

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 stop là độ dài của soundwave_gm chia cho tốc độ khung hình.
  • Đặt num là độ dài của soundwave_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])
Chỉnh sửa và Chạy Mã