5 กรกฎาคม 2558

Published 7/05/2558 by with 0 comment

อัดและเล่นเสียง NumPy arrays ในภาษา Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปเขียนโปรแกรมอัดและเล่นเสียงในภาษา Python กันครับ

ในการอัดเสียงและเล่นเสียงในภาษา Python มีหลายโมดูลให้เลือกและบ้างโมดูลสามารถสังเคราะห์เสียงได้ บทความนี้ผมขอแนะนำโมดูล sounddevice ครับ

โมดูล sounddevice นี้สามารถอัดเสียงและเล่นเสียงในรูปแบบข้อมูลชนิด NumPy arrays ได้
รองรับทั้ง Python 2 และ Python 3
ใช้ License: MIT

การติดตั้ง sounddevice
ให้ทำการติดตั้ง cffi กับ numpy , scipy ก่อนครับ
pip install cffi
pip install numpy
pip install scipy

แล้วทำการติดตั้ง sounddevice โดยใช้คำสั่ง pip :
pip install sounddevice

การใช้งาน
ในการใช้งาน ให้ import sounddevice เข้ามาครับ

[python]import sounddevice as sd[/python]





การอัดเสียง

[python]
duration = 10 # เวลาในการอัดเสียง (วินาที)
fs = 44100 # ความถี่ในการอัดเสียง ส่วนใหญ่จะใช้ความถี่ 44100 หรือ 48000 frames per second
myrecording = sd.rec(duration * fs, samplerate=fs, channels=2)
[/python]

กระบวนการอัดเสียงจะถูกรันเป็นพื้นหลังครับ ถ้าต้องการให้โค้ดหยุดรันรอให้อัดเสียงเสร็จก่อนใช้คำสั่ง

[python]
sd.wait()
[/python]

ถ้าหากเราใช้คำสั่ง print แสดงข้อมูลจากตัวแปร myrecording ที่เราอัดเสียงลงไป

[python]print(myrecording)[/python]

ผลลัพธ์

[python]
[[ 0.00000000e+00 3.05175781e-05]
[ -3.05175781e-05 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00]
...,
[ 3.23486328e-03 3.23486328e-03]
[ 2.96020508e-03 2.96020508e-03]
[ 2.50244141e-03 2.47192383e-03]]
[/python]

เมื่อทำการตรวจเช็คชนิดข้อมูล

[python]print(type(myrecording))[/python]

ผลลัพธ์

[python]<class 'numpy.ndarray'>[/python]

จะพบว่า ข้อมูลเสียงที่เราอัดลงไปจะกลายเป็นข้อมูลชนิด numpy.ndarray ครับ
ถ้าเราต้องการบันทึกเสียงเก็บไว้ในไฟล์ ต้องใช้โมดูล scipy เข้ามาช่วยในการบันทึกไฟล์

[python]
from scipy.io.wavfile import write
write('test.wav', 44100, myrecording) # ชื่อไฟล์ ความถี่ ข้อมูลเสียงที่เก็บในชนิด numpy.ndarray
[/python]





เล่นเสียง
หลังจากที่เราไปลองอัดเสียงกันมาแล้ว เราจะไปเล่นเสียงที่เราอัดกันครับ
ใช้คำสั่ง

[python]
sd.play(myrecording, fs)
[/python]

โดยจะเล่นได้แค่เสียงเดียว ในกระบวนการพื้นหลัง หากต้องการหยุดเล่นเสียงใช้คำสั่ง

[python]sd.stop()[/python]

อ่านเอกสารการใช้งานเพิ่มเติมได้ที่ https://python-sounddevice.readthedocs.org/en/latest/
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)