เรื่องการโดดข้ามเพลง ไปยังช่วงเวลาที่กำหนด โดยเลื่อนบาร์
จะใช้การคำนวณตำแหน่งของบาร์ ให้เป็นตัวเลขอัตราส่วนครับ
แล้วเอาตัวเลขนั้น ไปคำนวณกับความยาวเพลงอีกทีนึง
ขออธิบายด้วยหลักการคำนวณธรรมดาๆ ก่อนนะครับ
สมมติว่า คะแนนสอบวิชาหนึ่ง มีคะแนนเต็ม 200 คะแนน
นาย ก. ได้คะแนน 125 คะแนน คิดเป็นอัตราส่วน 0.625 ของคะแนนเต็ม (125/200 = 0.625)
นาย ข. ได้คะแนน 75 คะแนน คิดเป็นอัตราส่วน 0.375 ของคะแนนเต็ม (75/200 = 0.375)
ในทางกลับกัน เราก็สามารถกล่าวว่า
นาย ก. ได้คะแนนเป็น 0.625 ของคะแนนเต็ม ดังนั้น นาย ก. ได้คะแนน 125 คะแนน (0.625*200 = 125)
นาย ข. ได้คะแนนเป็น 0.375 ของคะแนนเต็ม ดังนั้น นาย ข. ได้คะแนน 75 คะแนน (0.375*200 = 75)
-----------------
เอาการคำนวณเรื่องอัตราส่วนนี้ มาใช้กับเรื่องเสียงครับ
สมมติว่า รางของแถบเลื่อน มีความยาว 200 px
1. ตอนนี้ ลากบาร์ไปอยู่ที่ตำแหน่ง 125 px ก็จะคิดเป็นอัตราส่วน 0.625 ของความยาวทั้งหมด
2. เอา 0.625 ไปคูณกับความยาวเพลงทั้งหมด เช่น สมมติว่า เพลงยาว 3 นาที
3 นาที = 180 วินาที = 180000 มิลลิวินาที
0.625*180000 = มิลลิวินาทีที่ 112500 = วินาทีที่ 112.5
3. เอาไปใส่กับคำสั่ง start ของ Sound เช่น
my_sound.start(112.5);
ก็จะได้แถบเลื่อนเพลง หรือ Seek bar ครับผม
ถ้าเอาโค้ดจากของน้าแอ๊ดมาดัดแปลงเพิ่ม จะได้แบบนี้
var my_sound:Sound = new Sound();
my_sound.onLoad = function(success:Boolean) {
//ตรงนี้เป็นส่วนที่บอกว่า ระหว่างโหลด จะทำอะไรก็ว่าไป
//อย่างในที่นี้ ก็จะดึงค่าเวลาทั้งหมดของเพลงมาแสดง ( sound.duration = เวลาทั้งหมดของเพลง )
var totalSeconds:Number = this.duration/1000;
trace(this.duration+" ms ("+Math.round(totalSeconds)+" seconds)");
var minutes:Number = Math.floor(totalSeconds/60);
var seconds = Math.floor(totalSeconds)%60;
if (seconds<10) {
seconds = "0"+seconds;
}
trace(minutes+":"+seconds);
};
my_sound.loadSound("test.mp3", true); //ไฟล์เพลงที่โหลดจากภายนอก
//ฟังก์ชั่นสำหรับเลื่อนเล่นเพลงไปยังจุดที่กำหนด
function Seek(ratio:Number){
var seekSecond = my_sound.duration*ratio/1000; //เอา ความยาวเพลง*อัตราส่วนระหว่างจุดพิกัดบาร์และความยาวของรางเลื่อน/1000
/// หาร 1000 เพื่อแปลงเป็นวินาที เนื่องจาก my_sound.duration จะได้ค่าออกมาเป็น มิลลิวินาที
/// 1 วินาที = 1000 มิลลิวินาที
my_sound.start(seekSecond);
}
แล้วถ้าเอาหลายๆ อย่างมารวมกัน จะได้ออกมาเป็นตัว Music Player แบบนี้ครับ
- เพลงโหลดเสร็จแล้วกดปุ่ม Play นะครับ (กดก่อนเพลงเสร็จเจอบั๊กไม่รู้ด้วยเน้อ)
- เพลงโหลดเสร็จแล้ว กดที่แถบสีเทา จะเป็นการ Seek ช่วงของเพลงครับ
http://www.27cstudio.com/korstudio/tutorials/flamp1/musicplayer_v2.swfตัวนี้ใช้ ActionScript 3 เขียนครับผม
ส่วนเวอร์ชั่นเก่า (ActionScript 1.0) มีให้โหลดตามนี้ครับ
musicplayer_v2.5.zipตัวนี้เก่ามาก บั๊กชุกชุม ใครโหลดไปแล้ว ผมฝากแก้ด้วยนะครับ
