แก้ปัญหาภาษาไทยของ ID3 Tag (Part II)

ภาคแรก เคยกล่าวถึงการแก้ปัญหาเกี่ยวกับ ID3Tag ด้วยโปรแกรม EasyTAG ซึ่งก็จะพอจะบรรเทาปัญหาดังกล่าวได้บ้าง แต่ยังถือว่ายังไม่สมบูรณ์ เนื่องจากบางตำแหน่งของ Tag ยังแปลงรหัสภาษาได้ไม่ครบถ้วน ส่วนตัวยังไม่ค่อยพอใจ เพียงแต่แก้ขัดไปก่อนชั่วคราว ...
ภาคสอง เป็นบล็อกที่เขียนแล้วเกิดความละอายใจมาก เพราะดูแล้วอาจเป็นการส่งเสริมการใช้งานแบบผิดกฏหมาย (แผ่นเพลง mp3) ที่ปัจจุบันหาง่ายกว่าร้านขายยา แผ่นซีดีหนึ่งแผ่นสามารถบรรจุเพลงได้มากถึง 180 เพลงขึ้นไป ซึ่งปกติวิธีการแปลงเพลงจาก audio เป็นเพลงรูปแบบ mp3 จะใช้โปรแกรมแปลงบนวินโดว์จัดทำขึ้น ทำให้การบรรจุค่าต่างๆ Tag จะเป็นรหัสภาษา cp874 โดยปริยาย ซึ่งถือได้รหัสตัวนี้ว่าเป็นคู่แฝดกับ tis620 ที่ผู้ใช้งานบนลินุกส์นิยมใช้กัน หากย้อนไปก่อนหน้านี้สองปีก่อนผู้ใช้งานลินุกส์ก็ยังใช้งาน mp3 อย่างเป็นสุขใจยิ่ง ไม่มีผลกระทบสักเท่าไหร่ใดนัก ...
จนกระทั่งสักปีที่ผ่านมา วงการคอมพิวเตอร์ได้มีการหยิบยกรหัสภาษา Unicode มาใช้เป็นรหัสมาตราฐานอย่างเข้มข้นขึ้น บรรดาซอฟท์แวร์ต่างๆ ก็เริ่มจะอิงมาตราฐานดังกล่าวขึ้นเรื่อยๆ ไม่เว้นแม้แต่โปรแกรมประเภท Media Player เดิมตัวเองชอบฟังเพลง mp3 ด้วยโปรแกรม AmaroK ซึ่งระยะแรกๆโปรแกรมสามารถกำหนดรหัสภาษาต่างๆได้อิสระด้วยผู้ใช้งาน จนกระทั่วเวอร์ชั่น 1.4 เป็นต้นมา ฟังค์ชั่นกำหนดรหัสภาษาแสดงผล ถูกตัดทิ้งไป โดยบังคับให้ใช้งานด้วยรหัสภาษา Unicode ไปในตัว นอกจากตัว AmaroK แล้วโปรแกรมมีเดียเพลย์เยอร์อื่นๆที่นิยมใช้กัน ก็ประสบปัญหาเดียวกัน เช่น Rhythmbox , Banshee แต่ก็ยังมี XMMS ที่ยังคงความสามารถในการแสดงรหัสภาษาแบบ tis620 ได้อยู่ แต่ตัวเองก็ถือว่าโปรแกรม XMMS เป็นโปรแกรมที่ทรงคุณค่าควรจะเทิดทูนเก็บไว้บนหิ้ง เพราะโปรแกรมขาดการพัฒนาอย่างต่อเนื่อง ทำให้ขาดฟังค์ชั่นใหม่ๆที่นิยมใช้กัน (บอกว่า"เชย"ก็เกรงใจ) ...
บล็อกภาคนี้ถูกหยิบยกขึ้นมาเนื่องจากไปเจอวิธีการแก้ปัญหา ID3 Tag ได้อย่างสมบูรณ์แบบจาก ไทยลินุกส์คาเฟ่ เริ่มต้นจาก อ.Phong_TH(ผู้สร้างกระแส PCLinuxOS) แนะนำฟังค์ชั่นแก้ไขที่ตรงจุดมากที่สุด และอาจารย์วิทยา(wd) ได้มาต่อยอดสร้างเชลล์สคริปครอบฟังค์ชั่น เพื่อเสริมให้การทำงานสมบูรณ์แบบมากขึ้น ตัวเองได้คัดลอกวิธีการดังกล่าวมาไว้ที่บล็อกนี้เพื่อเป็นการสำรองบทความซึ่งกันและกันด้วยนิ ...
วิธีการจัดทำ ได้นำฟังค์ชั่นแปลงค่า MP3Unicode จาก เว็บนี้ ส่วนซอร์สโค๊ด ที่นี่ ทำการแตกแฟ้มดังกล่าว ซึ่งจะได้โฟลเดอร์ที่ชื่อว่า mp3unicode-1.0.1 ให้เข้าไปในโฟลเดอร์ดังกล่าว ค้นหาแฟ้มที่ชื่อว่า mp3unicode.cpp ใช้อิดิเตอร์แก้ไขค่าดังตัวอย่าง (แทรกกลุ่มข้อความที่มีสีแดง) แล้วจัดเก็บแฟ้ม
....หาข้อความกลุ่มนี้จากแฟ้ม Makefile (กรณีนี้ใช้กับลินุกส์เบสออน Ubuntu)
....
int main(int argc, char **argv) { cmdParser parser("mp3unicode", "1.0.1"); QStringList bit8encodings;
bit8encodings.append("cp1251");
bit8encodings.append("koi8-r");
bit8encodings.append("cp874");
....
....
-I${QTDIR}/include -L${QTDIR}/libแก้ข้อความดังกล่าวให้เป็นตามตัวอย่าง แล้วจัดเก็บแฟ้ม
-I /usr/include/qt3 -L /usr/lib/qt3ติดตั้งไลบรารี่และแพ็คเกจต่างๆที่จำเป็นต่อการคอมไพล์งานในครั้งนี้ (base on Ubuntu)
sudo apt-get install build-essential libtag1-dev libqt3-mt-devคอมไพล์โปรแกรมด้วยคำสั่ง
makeหลังจากคอมไพล์โดยปราศจาก Error จะได้แฟ้ม mp3unicode ให้ทำการคัดลอกแฟ้มดังกล่าวไปยังตำแหน่งที่เหมาะสมกับการเรียกใช้งาน
sudo cp -f mp3unicode /usr/local/binขณะนี้เราจะได้โปรแกรมแปลง ID3Tag เรียบร้อย เรียกใช้งานในแบบไฟล์ต่อไฟล์
mp3unicode --source-encoding cp874 --id3v1-encoding none --id3v2-encoding unicode [file.mp3]แต่ในความเป็นจริง ไม่เวิร์คแน่นอน หากเรามาแปลงไฟล์ทีละไฟล์มือหงิกพอดี ดังนั้นเพื่อความสะดวกในการใช้งาน จึงต้องการสร้างเชลล์สคริปครอบฟังค์ชั่นดังกล่าว โดยให้มีวิธีการทำงานโดยการแปลงไฟล์ภายในโฟลเดอร์ทั้งหมด และยังล้วงเข้าไปแปลงแฟ้มลึกลงไปเรื่อยๆ กรณีที่มี "โฟลเดอร์ลูกภายใน" ให้สร้างสคริปตัวนี้ผ่านทาง Terminal Console
sudo touch /usr/local/bin/tag2utfเขียนคำสั่งเชลล์สคริปดังตัวอย่าง
sudo chmod 755 /usr/local/bin/tag2utf
sudo nano /usr/local/bin/tag2utf
จัดเก็บแฟ้ม วิธีการจัดทำก็จบเรียบร้อย ส่วนวิธีใช้งานจะสั่งผ่านคอมมานไลน์ โดยให้ไปอยู่ ณ ตำแหน่งภายในโฟลเดอร์ที่ต้องการจะแปลงแฟ้ม แล้วใช้คำสั่ง tag2utf จากนั้นโปรแกรมจะแสดงแฟ้มต่างๆที่ได้รับการแปลงเรียบร้อยจนสิ้นสุดการทำงาน ...#!/bin/bash
# FROM Master phong_th (ARTICLE AT:)
# AND Master Widdaya (ADVANCED MODIFIED:)
SKEL="*mp3 *MP3 *Mp3"
processfile() {
local i
for i in $SKEL; do
if [ -f "$i" ]; then
chmod +w "$i"
echo "Encoding: $i"
mp3unicode --source-encoding cp874 --id3v1-encoding none --id3v2-encoding unicode "$i"
fi
done
for i in *; do
if [ -d "$i" ]; then
echo "enter directory $i"
pushd "$i"
processfile
echo "exit directory $i"
popd
fi
done
}
processfile
*** บล็อกไตเติ้ลนี้ขอยกเครดิตให้ อ.phong_th และ อ.วิทยา ผู้เชี่ยวชาญประจำบอร์ด www.thailinuxcafe.com



คุณสมเจตน์ครับ เปลี่ยนบรรทัด
SKEL="*mp3" เป็น
SKEL="*mp3 *MP3 *Mp3"
ก็ได้แล้วครับ
สำหรับการแสดงซอร์สโค๊ดใน html
ควรใส่ไว้ในแท็ก <pre>...</pre> น่ะครับ จะแสดงได้สวยงามกว่า