การหาค่าตำแหน่งเวลา
เรารู้ว่าความถี่ของคลื่นเสียงคือ 48 kHz แต่ถ้าไม่รู้ล่วงหน้าจะทำอย่างไร? วิธีหนึ่งคือนำความยาวของอาร์เรย์คลื่นเสียงหารด้วยระยะเวลาของไฟล์เสียง แต่โมดูล wave ของ Python มีวิธีที่ดีกว่า นั่นคือการเรียก getframerate() บน wave object ซึ่งจะคืนค่าเฟรมเรตของ object นั้น
จากนั้นใช้เมธอด 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])