ในการอัดเสียงและเล่นเสียงในภาษา 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 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)