บทความ

กำลังแสดงโพสต์จาก เมษายน, 2011

ฆ้อง MIDI ด้วย Chuck

แนวคิดหนึ่งที่อยากทำมานานก็คือพัฒนาโปรแกรมที่ช่วยให้นักดนตรีไทยประพันธ์เพลงได้สะดวกขึ้น ทางหนึ่งที่ทำได้ก็คือเขียนโปรแกรมรับข้อมูล MIDI จากคีย์บอร์ด แล้วสังเคราะห์เสียงตามคำสั่ง Chuck มีความสามารถในการสื่อสารกับเครื่องดนตรีอิเล็กทรอนิกส์ทาง MIDI โดยใน Chuck จะมีคลาส MIDI ในตัว การเรียกใช้ความสามารถทาง MIDI ใน Chuck ทำได้ดังตัวอย่าง (จาก Official Chuck Tutorial ) MidiIn min; MidiMsg msg; // open midi receiver, exit on fail if ( !min.open(0) ) me.exit(); while( true ) { // wait on midi event min => now; // receive midimsg(s) while( min.recv( msg ) ) { // print content <<< msg.data1, msg.data2, msg.data3 >>>; } } จากการทดลองพบว่า msg.data1 คือข้อมูล Channel และคำสั่ง MIDI อื่น ๆ เช่น Note-On, Note-Off msg.data2 คือขั้นเสียง msg.data3 คือความดัง (Velociy) เราสามารถใช้ msg.data# มาควบคุมการสังเคราะห์เสียงของ Chuck ที่เราทำไว้เมื่อ คราวก่อน ได้ดังนี้ MidiIn min; MidiMsg msg; min.open(0) => int AmIOpen; if(!AmIOpen) { <<< ...

การสังเคราะห์เสียงด้วย Chuck

ก่อนหน้านี้ได้ลองใช้ Puredata (pd) สังเคราะห์สัญญาณ Decay Sinusoid ซึ่งมีลักษณะเสียงคล้ายเสียงฆ้อง ตั้งใจว่าจะใช้สังเคราะห์เสียงดนตรีไทย แต่ว่าการใช้งาน Python ร่วมกับ Puredata แม้ว่าจะทำได้ แต่ดูเหมือนว่าจะทำได้ยาก เนื่องจากมีเอกสารกำกับน้อย น่าจะเหมาะกับคนที่ใช้ Python จนคล่องแคล่วแล้วมากกว่า ผมก็เลยกลับมาพิจารณา Chuck อย่างจริงจังอีกครั้งหนึ่งหลังจากที่ได้เอาคู่มือมาพลิกผ่าน ๆ เมื่อหลายเดือนก่อนพบว่าน่าจะสามารถใช้งานร่วมกับ Python ได้ง่ายกว่า Chuck คืออะไร Chuck คือ Real-Time Audio Programming Language สำหรับงานสังเคราะห์และเรียบเรียงเสียงสังเคราะห์ โปรแกรมที่เขียนด้วย Chuck จะรันใน Chuck Virtual Machine ที่มีความสามารถในการรันหลาย ๆ โปรแกรม (Shred) ได้พร้อม ๆ กัน และแต่ละ Shred ก็สามารถสื่อสารเพื่อประสานงานกันได้ ท่านที่สนใจสามารถอ่านรายละเอียดเพิ่มเติมได้ที่ http://chuck.cs.princeton.edu/ และ http://kijjaz.exteen.com/20070702/entry (ภาษาไทย) ตัวอย่างสคริปต์ที่รันใน Chuck SinOsc s => dac; 440 => s.freq; 0.5 => s.gain; 2::second => now; สคริปต์ข้างต้นนี้จะกระทำ 2 สิ่ง...

ติดตั้งเครื่องพิมพ์ Canon LBP3050 บน Debian (wheezy)

รูปภาพ
[ T_T สุดท้ายก็ไม่สามารถพิมพ์ภาพได้ครับ นอกจากนี้เมื่อตอนทดสอบยังไม่ได้ทดสอบกับภาษาไทย พอทดสอบกับภาษาไทยก็ยิ่งแย่ ตัวหนังสือตีกันไปหมด ตอนนี้ยกธงขาวแล้ว แฟนจะเหน็บก็ต้องยอมแล้วล่ะ] ที่บ้านมีเครื่องพิมพ์อยู่เครื่องหนึ่งคือ Canon LBP3050 เป็นของแฟน พอจัดห้องทำงานที่บ้านใหม่แฟนก็ยกเครื่องพิมพ์เครื่องนี้ให้ แต่ว่าเวลาเอามาใช้กับเครื่องคอมพ์ของผมดันพิมพ์งานไม่ออก!! ทั้ง ๆ ที่ Linux ตรวจเจอเครื่องพิมพ์ งานเข้าล่ะครับ เพราะแฟนผมชอบเหน็บให้เจ็บใจเล่น ๆ เวลาที่ Linux ทำอะไรบางอย่างไม่ได้ในขณะที่ Windows ของเธอทำได้ (ผมก็เหน็บเธอเหมือนกันเวลาที่ Windows ทำอะไรบางอย่างไม่ได้ในขณะที่ Linux ทำได้ ก็เจ๊ากันไปนะ ฮิ ฮิ) ผมพบว่าระบบตรวจจับเครื่องพิมพ์อัตโนมัติของ Linux ใช้ไม่ได้กับเครื่องพิมพ์บางจำพวก และเจ้า Canon LBP3050 เครื่องนี้ก็เป็นหนึ่งในนั้นครับ ในกรณีของ Canon LBP3050 นั้นผมคิดว่าเป็นเพราะ LBP3050 เป็นเครื่องพิมพ์ที่ใช้เทคโนโลยี CAPT - Canon Advanced Printing Technology ซึ่งทาง Canon โฆษณาว่าสามารถพิมพ์งานได้เร็ว และพิมพ์งานที่ขนาด (หน่วยความจำ) ใหญ่ได้โดยไม่ต้องเพิ่มหน่วยความจำ ... เอาเถอะ ...