2007/Jul/02

คราวที่แล้ว ก็ได้แนะนำให้รู้จัก ภาษาเขียนโปรแกรม ที่ชื่อว่า ChucK กันไปแล้วนะครับ แล้วก็ แนะนำโปรแกรมที่สำหรับจะเอาไว้ แก้โค้ด save-load รัน และทำงานภาษา ChucK อย่างสะดวกสบายแล้ว ก็คือ โปรแกรม miniAudicle นี่เอง
(เจอเน่า คราวที่แล้ว ติดตามอ่านได้ ที่นี่ เลย)

หลังจาก install เรียบร้อยแล้ว
(ในกรณีคนที่เล่น windows ก็สร้าง Folder สำหรับไว้โปรแกรมที่ ไว้ที่ไหนก็ได้ตามสะดวกไว้ก่อน.. สำหรับ Mac OS X ลากใส่ Application และ Dash Board ได้เลย.. สำหรับ Linux ถ้าจะรันสะดวกๆ ลากใส่ /usr/bin)
ลองรันมันขึ้นมาเลยดีกว่า ก็จะเห็นหน้าตาตามนี้



ก็คือ จะแบ่งเป็น Windows ทั้งหมด 3 หน้าต่างด้วยกัน
  1. miniAudicle ในส่วนโปรแกรมหลัก ที่มีเมนูสำหรับทำงานต่างๆ และใช้เขียนโค้ดภาษา ChucK ได้
    สามารถจัดการกับโค้ดต่างๆ ได้ด้วยการ File -> Load, Save ฯลฯ ได้เหมือนโปรแกรมพิมพ์ข้อความทั่วไป
  2. Virtual Machine เป็นส่วนกลาง ที่เอาไว้รันโปรแกรมที่เขียนด้วย ChucK
  3. Console Monitor เป็นส่วนที่เอาไว้แสดงผลต่างๆ และช่วยรายงานเวลาเกิดความผิดพลาด หรือเกิดบั๊กในโปรแกรม
ไหนๆก็เปิดขึ้นมาแล้ว เราก็จะมาทดลองใช้กันดูเลยดีกว่า!

ก็จะเล่าให้ฟังก่อน ว่าหลักการการทำงานของภาษา ชัก นั้น มันเป็นอย่างไร
เรื่องก็มีอยู่ว่า ภาษานี้ จะมี "ส่วนกลาง" ที่ทำหน้าที่ประมวลผล ซึ่งเราสามารถส่งเอาโปรแกรมที่เราเขียน ไปประมวล หรือรัน กับส่วนกลางได้
เราสามารถส่งโปรแกรมไปรันได้ทีละหลายๆโปรแกรมพร้อมกัน โดยโปรแกรมเหล่านั้น อาจจะทำงานแยกกัน หรือร่วมกันได้ด้วย
สิ่งที่เป็นส่วนกลางนี่ ก็จะเรียกว่า Virtual Machine (ย่อสั้นๆว่า VM) เราสามารถเปิด ปิด Virtual Machine ได้ เมื่อจะเริ่มใช้งาน ภาษา ChucK ก็เช่นกัน เราก็ต้องเปิดให้ Virtual Machine ทำงานก่อน

คราวนี้ ภาษา ชัก ด้วยความที่เป็นภาษาที่มีจุดเด่นด้านเสียง ดังนั้น หลักๆแล้ว Virtual Machine สิ่งที่มันต้องการก็คือ การติดต่อกับ Soundcard ของพวกเรานี่เอง
เพื่อที่จะ รับเสียงเข้ามา หรือเล่นเสียงออกไป
(แต่ถ้าไม่ใช้ Soundcard ก็สามารถให้โปรแกรมทำงานได้โดยไม่เล่นเสียงออกมา โดยใช้ silent mode นี่เอง)

งั้นมาลองดูว่า miniAudicle จะสามารถติดต่อกับ soundcard ใดของเราได้บ้าง
ดูที่หน้าต่าง miniAudicle -> เมนู Edit -> Preferences ->
ลองดูที่ Audio Input กับ Output ในนั้น จะทำการเลือก Soundcard ได้
และยังเลือกได้ด้วยว่า Soundcard นั้นๆ มี input, output กี่อัน
สำหรับกรณีปกติ เลือกเป็น 2 ไว้ก่อนก็ได้ (output มี 2 อัน สำหรับการใช้งานแบบ stereo ปกติ)

ส่วน Sample Rate นี่คือ ความถี่ในการคิดคำนวณ และเล่นเสียงออกมา ผ่านทาง soundcard นั้นๆ
ก็คงจะรู้กันมาบ้างไม่มากก็น้อย ว่ามาตรฐาน Sample Rate ของการฟังเพลง ทั่วไป โดยเฉพาะกับคอมพิวเตอร์บ้านๆนี่
ก็จะเป็น 44100 hz
ยิ่งถ้าพูดถึง เพลงที่เราฟังจาก CD พวกนี้นี่ Sample Rate = 44100 hz เลย
ดังนั้น ถ้ายังไง ก็ขอแนะนำให้เริ่มจาก 44100 ก่อน
น่าจะเป็นค่าที่ ซัพพอร์ทกับ soundcard ทั่วไปได้ดีที่สุด
(ยิ่ง sample rate สูง ความละเอียดของการคำนวณก็จะดีขึ้น
สามารถสร้างเสียงที่ เนียน ได้มากขึ้น)


หลังจากเซ็ตเรียบร้อยแล้ว (ถ้าใช้คอม บ้านๆ ธรรมดา เป็นไปได้ว่า ไม่จำเป็นต้องเซ็ตอะไรเลย)
กด OK ได้เลย!

งั้น ไหนๆก็จะมาเริ่มแล้ว รีรออะไรอยู่เล่า? มาเปิดการทำงานของ Virtual Machine เลยดีกว่า!
โดยการกดในหน้าต่าง Virtual Machine ที่ปุ่ม Start Virtual Machine
(สามารถทำการปิดได้โดยกดที่ปุ่มเดิ่ม = Stop Virtual Machine: แต่ความสามารถนี้เป็นไปได้ว่า ยังไม่มีใน Windows, ถ้าจะปิดใน Windows ก็อาศัยการปิดโปรแกรม miniAudicle ที่หน้าต่าง miniAudicle ไปเลยแล้วกัน)


ถ้าการติดต่อกับ Soundcard สามารถเป็นไปอย่างราบรื่น
ก็จะขึ้นข้อความประมาณข้างบนนี้ ก็คือ ติดต่อได้สำเร็จอย่างไร ได้ Sample Rate เท่าไหร่ มีกี่ input, output อะไรทำนองนั้น..

แล้วตอนนี้แหละ เราก็จะสามารถเริ่มเขียนโปรแกรมภาษา ChucK แล้วลองรันดู
เพื่อความตื่นเต้น ก็จะขอแสดงให้ดูให้เห็นๆไปเลยว่า นี่มันเป็นโปรแกรมด้านเสียง
ก็มาลองฟังเสียงกันเลยดีกว่า!


เริ่มต้นจากการพิมพ์ในหน้า miniAudicle ที่ไฟล์ว่างๆที่เรามี (unnamed1)
ลองพิมพ์ข้อความตามนี้ลงไปเลยครับ

// connect SinOsc to dac
SinOsc s => dac;
// wait for 1 second
second => now;
เสร็จแล้ว ก็ลองมองดูในหน้า miniAudicle
จะเห็นเครื่องหมาย + เขียนไว้ว่า Add Shred (เพิ่ม เชร็ด?)
เอาเป็นว่า ลองกดกันเลย!

ถ้าสำเร็จ ใน Console Monitor จะขึ้นว่า
[chuck](VM): sporking incoming shred: 1 (unnamed1)...

อ๊ะ... เปิดลำโพงอยู่หรือเปล่า ได้ยินเสียงอะไรกัน
(ถ้าไม่สำเร็จ ลองเช็คดูนะครับว่าเขียนถูกต้องไหม เช่น // มีสองตัว, ปิดท้ายประโยคที่บอกด้วย ; เช็คตัวเล็กตัวใหญ่)
เสียงที่ว่านี่ คือเสียงของคลื่นเสียงชนิดไซน์ (Sine Wave) ลักษณะเสียงก็คือ กลม เป็นเสียงที่ถือเป็นองค์ประกอบสำคัญของเสียงต่างๆทั่วไป
ถ้าสังเกตดู (ลองกด Add Shred ฟังดูหลายๆทีก็ได้ ฮ่าๆ)
มันมีความยาว 1 วินาทีพอดี

เราจะลองมาแปลภาษา ChucK ที่พวกเราเพิ่งเขียนกันไปเมื่อกี๊
ด้วยความรู้อันน้อยนิด แต่ด้วยภาษาของเขาออกแบบมาง่ายสำหรับการเข้าใจ
ทำให้เข้าใจง่ายมาก

เครื่องหมาย // เป็นเหมือนกับ comment หรือ remark
เอาไว้เขียนอะไรก็ได้ สิ่งที่อยู่หลัง // นั้น เรามีอิสระที่จะเขียนอะไรก็ได้
เช่น เตือนความจำ หรือเขียนอธิบายส่วนต่างๆของโปรแกรม

เรามาดู สิ่งที่เป็นดาราในวันนี้กัน ก็คือเครื่องหมาย
=> นี่แหละ
มองเครื่องหมายนี้ ผ่านๆ อาจจะเหมือนกับรูปร่างของอะไรซักอย่าง
แถมยังตั้งชื่อภาษาว่า ชัก อีกซะนี่

ความหมายง่ายๆของมันก็คือ "ต่อสาย" หรือ "ส่งไปให้"

คราวนี้มาทำความรู้จักศัพท์อีกคำ คือคำว่า dac (Digital-to-Analog Converter)
ความหมายง่ายๆของมันก็คือ เครื่องที่เปลี่ยนจากสัญญาณดิจิตอล ที่คอมพิวเตอร์คำนวณออกมา เป็นสัญญาณไฟฟ้า เราเอาสัญญาณนี้มาต่อออกลำโพง ทำให้เกิด เสียงให้เราได้ฟังกัน
พูดง่ายๆ ก็เหมือนกับการต่อลำโพงนี่แหละ

SinOsc s => dac;
งั้นอันนี้แปลว่าอย่างนี้แล้วกัน: เอา เครื่องกำเนิดสัญญาณ Sine (Sine Wave Oscillator - ไซน์ เวฟ ออสซิลเลเตอร์) ที่ชื่อ s มาต่อเสียงออกลำโพง

จะขอเรียกว่า เอา Sine Wave Oscillator ชื่อ s มาชักใส่ ลำโพง ละกัน
หลังจากนี้ => นี่ผมจะเรียกว่า ชักใส่ ล่ะนะ

พอต่อสายแล้ว มันก็ไม่ได้เกิดอะไรขึ้น
ถ้าเราอยากฟังว่าผลของการต่อสายนั้นเป็นอย่างไร
ก็ต้อง "ปล่อยให้เวลาผ่านไป"

งั้นมารู้จักคำอีกคำกัน ก็คือคำว่า now
now เป็นวัตถุเกี่ยวกับ เวลา ที่สำคัญใน ChucK
คือ now มันเป็นเหมือนเวลาในปัจจุบัน และ มันก็เดินไปได้เรื่อยๆ
การที่เราเอา ระยะเวลา (duration) ไปชักใส่ now (ปัจจุบัน)
ความหมายง่ายๆของมันก็คือ ให้ "รอ" ในระยะเวลานั้นๆ

ถ้าเราลองเปลี่ยนจากคำว่า second เป็นอื่นๆเช่น
ms หรือ minute หรือ hour หรือ day หรือ week ก็จะเห็นว่า มันเล่นเสียงนั้น ยาว ตามเวลาที่กำหนด
ms หมายถึง millisecond หรือ เศษ 1 ส่วน 1,000 ของวินาที นี่เอง
minute ก็คือ นาที
day ก็คือ วัน
week ก็คือ อาทิตย์
เอ่อ.. แต่ผมว่า ถ้ารอฟังเสียงนี่ยาวซัก วันหนึ่ง
ผมก็ยอมรับในความอดทนนะ ฮ่าๆๆ


พอเห็นความสามารถในการสร้างเสียงสดๆ ของ ChucK แล้ว
ลองมาดูความสามารถอีกด้านบ้าง ก็คือ การแสดงค่า และการคำนวณค่า

การพิมพ์ค่าใดๆ ออกมานั้น
เราสามารถเขียนง่ายๆเป็นภาษาชัก ด้วยเครื่องหมาย เปิดปิดดังนี้ <<< >>>
สิ่งที่อยู่ตรงกลางของเครื่องหมายนี้ ก็จะถูกพิมพ์ออกมา
โดยมีลักษณะดังนี้:
ถ้าสิ่งที่อยู่ตรงกลาง มีสิ่งเดียว มันจะพิมพ์ออกมาให้ด้วยว่า สิ่งนั้น เป็นข้อมูล ชนิดใด
แต่ถ้ามีหลายสิ่งให้พิมพ์ (คั่นด้วยเครื่องหมาย คอมม่า คือ , นี่แหละ) มันจะพิมพ์ต่อกันให้

ลองใส่ประโยคเหล่านี้เข้าไปที่พื้นที่สำหรับพิมพ์โค้ดชักนี่แหละครับ
<<< 1 >>>;
<<< 0.1 >>>;
<<< second >>>;
<<< hour / minute >>>;
<<< "Hello, World!" >>>;
<<< "There are", week / second, "seconds in one week!" >>>;
<<< "You have started VM for", now / minute, "minutes." >>>;
<<< 3 * 4 + 5 * 6 >>>;
<<< pi * 2 >>>;

พิมพ์โค้ดตามนี้แล้ว เมื่อกด Add Shred ผมได้ผลออกมาตามนี้ (ดูใน Console Monitor กัน)
1 :(int)
0.100000 :(float)
44100.000000 :(dur)
60.000000 :(float)
"Hello, World!" : (string)
There are 604800.000000 seconds in one week!
You have started VM for 32.011852 minutes.
42 :(int)
6.283185 :(float)

จะเห็นว่า แค่นี้เราก็เริ่มรู้จักแล้วว่า ในชักนี่ มีชนิดของค่าต่างๆ หลายๆแบบ
ไม่ว่าจะเป็น int (integer คือ จำนวนเต็ม), float (คือเลขที่มีทศนิยม), dur (duration คือ ระยะเวลา), string (ข้อความ)

และแถมยังมีการนำมาคำนวณคิดเลขกันได้ เช่น บวก + คูณ * หาร /
เวลาที่เราอยากจะให้เครื่องแสดงอะไรออกมา ก็ใช้วิธีการนี้ ในการสั่งนี่เอง

เป็นอย่างไรครับ กับการเริ่มต้น? วันนี้ประมาณนี้ก่อนแล้วกันนะ เช้าแล้ว ผมไปนอนก่อนล่ะ ฮ่าๆๆ

- kij



Comment

Comment:

Tweet


แม่ Lina จากสิ่งที่มีให้เห็นในการเขียน แต่ไม่ชอบไม่เห็นเปิดใช้งานอาจจะเป็นปัญหาส่วนตัวจะชนะดังนั้นมันจึงไม่ใช่เรื่องง่ายที่จะประเมินไม่มีราย
#49 by visit site (103.7.57.18|122.168.27.46) At 2012-08-22 18:31,
ค้นหา gowns บุคคลออนไลน์ที่ทันสมัย​​, 2011 เสื้อผ้าพรหม, ชุดงานเลี้ยง, ชุดบุคคลที่ถูก
ชุดเพื่อนเจ้าสาว, gowns เพื่อนเจ้าสาว, เพื่อนเจ้าสาวในราคาถูก
#48 by Massage Therapy Scholarships (103.7.57.18|122.168.43.59) At 2012-07-25 16:29,
http://www.okey-oyna.com

เอ่อ.. แต่ผมว่า ถ้ารอฟังเสียงนี่ยาวซัก วันหนึ่ง
ผมก็ยอมรับในความอดทนนะ ฮ่าๆๆ
#47 by Okey Oyna (78.171.240.61) At 2011-04-13 02:31,
Prom Dresses: Find Online fashionable prom dresses, 2011 Prom Dresses, prom gown, cheap prom dresses
bridesmaid dresses, bridesmaid gowns, cheap bridesmaid
#46 by cosplay (114.222.93.50) At 2010-09-25 15:49,
comment6, çíàêîìñòâà åêàòåðèíáóðã ñ äåâóøêîé èíâàëèäîì, çíàêîìñòâî äÿë ñåêñà ñ ãååì, çíàêîìñòâà äçåðæèíñêèé ìîñêîâñêàÿ îáëàñòü, çíàêîìñòâî â ñòàâðàïîëå,
#45 by Buyyfzap (93.174.93.154) At 2010-07-09 20:28,
comment2, ñòàâðîïîëü èíòèì çà äåíüãè, ñàéò çíàêîìñòâ ïèæîí, çíàêîìñòâà ñåêñà äåâóøêè íîâîñòü, óàëüíûå çíàêîìñòâà â ëîñ àíæåëåñå,
#44 by Cotbuypi (93.174.93.154) At 2010-07-09 20:05,
comment2, ãäå ïîçíàêîìèòüñÿ â êàìûøèíå, çíàêîìñòâà â ãîðîäå ðîñòîâ, íàéòè â çíàêîìñòâàõ îëþ,
#43 by Sfhapehx (93.174.93.154) At 2010-07-09 19:31,
comment1, òàòàðñêèå çíàêîìñòâà ïåðìü, òðàíñû çíàêîìñòâà êèåâ, îçåðû î çíàêîìñòâà,
#42 by Mlydmzxm (93.174.93.154) At 2010-07-09 19:20,
comment2, 24 open êðóãëîñóòî÷íûå çíàêîìñòâà, çíàêîìñòâî êóïÿíñê, çíàêîìñòâà ãîðîäà íîâîêóçíåöêå äëÿ ñåêñà,
#41 by Fwbogjen (93.174.93.154) At 2010-07-09 18:46,
comment3, èíòèì çíàêîìñòâà äëÿ ñýêñà, çíàêîìñòâà ïðîñòî ñåêñ, ïîçíàêîìèòüñÿ ñ áåç ñåêñóàëüíîé çàìóæíåé ïàðîé,
#40 by Qpocijny (93.174.93.154) At 2010-07-09 18:35,
comment1, çíàêîìñòâà àôðèêàíêè, ñàéò ñåêñ çíàêîìñòâà ãîðîäà ìîçûðÿ, èíòèì çíàêîìñòâà áîëîãîå, áåëåáåé çíàêîìñòâî ñ ìóæ÷èíîé,
#39 by Zudnkuyd (93.174.93.154) At 2010-07-09 18:24,
comment3, çíàêîìñòâî ñ æåíùèíàìè ïî àäæàðèè, çíàêîìñòâà äëÿ ñåêñà êóðòàìûø, èíòèì çíàêîìñòâà êèðîâ,
#38 by Ztdpoavq (93.174.93.154) At 2010-07-09 18:12,