Skip to content

สร้างเสียงสังเคราะห์ MIDI ในภาษา Python

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

MIDI คืออะไร ?
MIDI (Music Instrument Digital Interface) เป็นโพรโทคอลมาตรฐานสำหรับการประสานเครื่องดนตรีแบบดิจิทัลครับ
อ่านเพิ่มเติมได้ที่ https://th.wikipedia.org/wiki/มิดิ

ในการสร้างเสียงสังเคราะห์ MIDI ในภาษา Python ผมขอแนะนำโมดูลตัวช่วยที่มีชื่อว่า "Pyknon"

โมดูล Pyknon เป็นโมดูลสำหรับใช้สร้างเสียงสังเคราะห์ MIDI ได้แบบง่าย ๆ และรวดเร็ว โดยใส่เสียงโน้ตที่ต้องการลงไป และเก็บเสียงไว้ในไฟล์ MIDI

  • รองรับทั้ง Python 2 และ Python 3
  • ใช้ MIT license

สามารถติดตั้งได้โดยใช้คำสั่ง pip :

pip install pyknon

ตัวอย่างการใช้งาน

โค้ดตัวอย่างจากหน้าหลักโมดูล Pyknon

from pyknon.genmidi import Midi
from pyknon.music import NoteSeq

notes1 = NoteSeq("D4 F#8 A Bb4")
midi = Midi(1, tempo=90) # จังหวะ 90
midi.seq_notes(notes1, track=0)
midi.write("demo.mid")

ผลลัพธ์


เพลงช้าง
จากคอร์สเพลง

ช้าง ช้าง ช้าง ช้าง ช้าง
5   5   5   5   5
น้องเคยเห็นช้างหรือเปล่า
5   3   2   3   5   1
ช้างมันก็ตัวไม่เบา
5   3   2   3   1   2
จมูกยาวๆเรียกว่างวง
1   6.   1   1   6.   5.   1
มีเขี้ยวใต้งวงเรียกว่างา
1   6.   1   1   6.   5.   1 
มีหูมีตา หางยาว
5   6   5   3     2   1.

แปลงเป็น

G G G G G
G E D E G C
G E D E C D
C A. C C A. G. C
C A. C C A. G. C
G A G E D C.

นำมาสร้างเสียงสังเคราะห์

from pyknon.genmidi import Midi
from pyknon.music import NoteSeq
notes1 = NoteSeq("G G G G G  G E D E G C  G E D E C D  C A. C C A. G. C  C A. C C A. G. C  G A G E D C.")
midi = Midi(5, tempo=70) # จังหวะ 70
midi.seq_notes(notes1, track=0)
midi.write("demo2.mid")

ผลลัพธ์

อ่านเอกสารการใช้งานได้ที่ https://s3.amazonaws.com/musicforgeeksandnerds.com/Pyknon+from+Music+for+Geeks+and+Nerds.pdf
หน้าหลักโมดูล https://kroger.github.io/pyknon/

ลองสร้างเสียงสังเคราะห์ดนตรีมาแบ่งปันกันดูครับ 😀

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

1 thought on “สร้างเสียงสังเคราะห์ MIDI ในภาษา Python

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *