การหาจุดเวลา (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])