2007/Jul/13

Octave
Note Numbers
CC#D D#EFF#GG#AA#B
-1 01 2 3 45 67891011
0121314 1516171819202122 23
1242526272829303132333435
2363738394041424344454647
348495051525354 5556575859
4606162636465666768697071
5727374757677787980818283
6848586878889909192939495
796979899100101102103104105106107
8108109110111112113114115116117118119
9120121122123124125 126127
เรามาเริ่มทำอะไรที่ดูเกี่ยวกับดนตรีมากขึ้นกันดีกว่า หลังจากที่ผ่านมา เจอเน่านี้ นำเสนอด้านการเขียนโปรแกรมมาหลายทีละ อิอิ
(แต่สิ่งที่จะทำให้ดูต่อไปนี่ ก็อาศัยผสมผสานประสบการณ์ที่ผ่านๆมาใน เจอเน่านะครับ
ถ้าใครอ่านแล้วงง อาจจะเป็นเพราะว่า ยังไม่ได้ลองทำอันที่ผ่านๆมาเล่น)

แล้วนี่เอาตารางอะไรของชาวบ้านเขาขึ้นมาเนี่ย
จะดูดวงกันหรือไง? อ้อ ไม่ใช่
นี่คือ ตาราง MIDI Note Numbers!
http://www.harmony-central.com/MIDI/Doc/table2.html

จากระบบการส่งข้อมูลของ midi
ก็ได้เกิดมาตรฐานที่เป็นที่นิยมกัน
ในการส่งค่าระดับเสียง โน้ต ในดนตรีสากล
ระดับเสียงที่ว่านี้ ก็เทียบตามโน้ตในดนตรีสากลโดยตรงเลย
ก็คือ โด่ เร มี้ ฯลฯ
โดยไล่ ออคเทฟ (octave) ต่างๆ
ตั้งแต่ ต่ำกว่าเปียโน จนไปถึงสูงกว่าเปียโน

ด้วยความที่ ยุคนั้น ค่าของ midi ยังรับส่งกันด้วยข้อมูล 7 bit แบบนี้
(สมัยนี้ก็เห็นยังใช้อยู่นะ ฮ่าๆๆ)
ทำให้ ส่งความละเอียดได้เพียง 27 นั่นคือ 128 หน่วย
ถ้าคิดเป็นโน้ต ก็คือ มันครอบคลุมจำนวนโน้ตที่กว้างมาก
กว้างกว่าเปียโนหน่อยๆ ก็ถือว่า ใช้ทำงานดนตรีได้กว้างพอควรเลยล่ะ

สิ่งที่ควรรู้ก็คือ:
ระบบดนตรีสากลดั้งเดิมเนี่ย
จะแบ่งระดับเสียงต่างๆ เป็น octaveๆ
เวลาลองไล่โน้ตครบชุดหนึ่ง
เมื่อโน้ตไล่แล้ววนกลับมาเป็นโน้ตตัวเดิม
(แต่มีระดับเสียงต่างกัน)
ก็จะเรียกว่า เป็นโน้ตเดียวกันแต่อยู่ต่าง octave กัน

เช่น โด่ โด โด๊

-_-"

คราวนี้ มีตัว โด (C) ตัวหนึ่ง เป็น C ที่มีจุดเด่นอยู่ตรงที่
เป็นโน้ตที่เป็นเสียงที่อยู่ตรงกลางระหว่างเสียงผู้ชายกับผู้หญิง
(แล้วก็เป็น C ที่อยู่ กลางๆ ค่อนไปทางซ้ายนิดๆ ของ piano)
โน้ตตัวนี้ เรียกว่า middle C (C กลาง)
ในระบบ midi ก็ได้กำหนดว่า โน้ตหมายเลข 60 นั้น ให้เป็น C กลาง

หลังจากนั้น โน้ตอื่นๆ ก็จะคิดเทียบกับ ซี กลาง ได้เลย

คราวนี้ อีกหนึ่งอย่างที่ควรรู้จักก็คือ tone และ semitone
โทน ก็คือโทนเสียง และการเทียบเสียง ตามปกติที่เรารู้จัก
เช่น ถ้าเราเคยออกเสียงร้อง โด เร มี ฟา ..
การเดินทางจาก โด ไป เร.. นี่ก็คือ เพิ่มขึ้น 1 โทนเสียง
เร ไป มี ก็เพิ่มขึ้น 2 โทนเสียง..
เป็นเช่นนี้ไปเรื่อยๆ
แต่ถ้า ลองคิดเสียงในหัวดู (โดยเฉพาะคนที่รู้จัก major scale)
จะสังเกตได้ว่า เสียงที่เพิ่มขึ้นไป ในแต่ละโทนเสียง มันไม่ได้ขึ้นไปเท่ากัน
บางที มันก็เหมือนขึ้นไป 1 โทนเต็มๆ
บางที ก็เหมือนเดินขึ้นไปแค่ ครึ่งโทนเสียงเท่านั้น
เช่น โด ไปเร นี่ เพิ่ม 1 โทนเสียง
แต่ลองออกเสียง มี ไปฟา นี่รู้สึกได้ว่า เพิ่มขึ้นไปแค่ ครึ่งเท่านั้น)

ศัพท์ที่ว่า "ครึ่งโทนเสียง" ก็เรียกว่า semitone (เซมิโทน .. เซมิ = ครึ่ง)
ในดนตรีสากลปกติที่เรารู้จัก ระดับเสียงที่ห่างกัน 1 octave นั้น
ห่างกัน 12 semitone ด้วยกัน
ดูจากตารางแล้วก็จะเห็นสอดคล่้องกัน ก็คือ
เมื่อโน้ตขึ้น octave ใหม่ ก็จะวนทีละ 12 ตัว


ตอนนี้เรามาทดลองฟังเสียงกันดีกว่า
เริ่มจาก UGen (unit generator) ที่เรารู้จักแล้วก็คือ
SinOsc.. (sine wave oscillator)

พิมพ์โค้ดดังนี้ครับ

SinOsc s1 => dac;
2::second => now;

เสร็จแล้วลอง Add Shred แล้วฟังดู
อันนี้ก็เป็นการฟังเสียง Sine Wave อย่างง่ายๆ
แต่ว่าจะเห็นว่า เขาปรับความถี่ไว้แล้ว
แต่เป็นเท่าไหร่ล่ะ?

การที่เราจะ อ่าน (read) หรือ ปรับ (write) ค่าความถี่ของ oscillator หนึ่งๆนั้น