เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การหาจุดเวลา (timestamp)

เรารู้อยู่แล้วว่าความถี่การสุ่มสัญญาณของคลื่นเสียงนี้คือ 48 kHz แต่ถ้าไม่รู้ล่ะ เราสามารถหาค่านี้ได้ด้วยการนำความยาวของอาร์เรย์คลื่นเสียงไปหารด้วยระยะเวลาของคลื่นเสียง อย่างไรก็ตาม โมดูล wave ของ Python มีวิธีที่ดีกว่านั้น การเรียก getframerate() กับออบเจ็กต์ wave จะคืนค่าอัตราการสุ่มสัญญาณ (frame rate) ของออบเจ็กต์นั้นกลับมา

จากนั้นเราสามารถใช้เมธอด linspace() ของ NumPy เพื่อหาจุดเวลาของแต่ละค่าจำนวนเต็มในอาร์เรย์คลื่นเสียงของเรา วิธีนี้จะช่วยให้เราแสดงภาพคลื่นเสียงได้ในขั้นตอนถัดไป

เมธอด linspace() รับพารามิเตอร์ start, stop และ num แล้วคืนค่าจำนวน num ค่าที่เว้นระยะห่างเท่า ๆ กันระหว่าง start และ stop

ในกรณีนี้ start จะเป็นศูนย์ stop จะเป็นความยาวของอาร์เรย์คลื่นเสียงหารด้วยอัตราการสุ่มสัญญาณ (หรือระยะเวลาของไฟล์เสียง) และ num จะเป็นความยาวของอาร์เรย์คลื่นเสียง

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Spoken Language Processing ด้วย Python

ดูคอร์ส

คำแนะนำการฝึกหัด

  • แปลงไบต์ของคลื่นเสียงให้เป็นจำนวนเต็ม
  • หาอัตราการสุ่มสัญญาณของไฟล์เสียง good morning โดยใช้ getframerate()
  • กำหนด stop ให้เป็นความยาวของ soundwave_gm หารด้วยอัตราการสุ่มสัญญาณ
  • กำหนด num ให้เป็นความยาวของ soundwave_gm

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

# 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])
แก้ไขและรันโค้ด