บทที่ 6 โปรแกรมเล่นไฟล์ wave
หลังจากการสร้างเมนูบาร์ สำหรับขั้นตอนต่อไปจะเป็นการ เพิ่มเติมปุ่มเข้าไปยังเมนูบาร์ และการจัดการกับปุ่ม ที่สร้างขึ้น โดยขั้นตอนทั้งหมด คุณต้องทำการสร้างขั้นตอนในบท โปรแกรมตัวอย่างการใช้เมนู เป็นที่เรียบร้อย ก่อนการทดลองเขียนโปรแกรมในบทนี้ หรือสามารถ ดาว์นโหลดไฟล์ตัวอย่าง ได้จากลิงค์ ด้านล่าง
ดาวน์โหลดโปรแกรม
ออกแบบหน้าตาโปรแกรม
โปรแกรมจะออกแบบง่ายๆ โดยทำการวางปุ่มไว้บน ฟอร์มเพียงปุ่มเดียว เพื่อให้ผู้ใช้คลิก และจะมีการเล่นไฟล์ wave ออกมา
- ทำการเปิดโปรแกรม eVB ผ่านทางเมนู Start->Programs->Microsoft eMbedded Tools->eMbedded Visual Basic 3.0
- คลิกเลือก File->New Project หรือกดปุ่ม Ctrl+N จะปรากฏหน้าต่าง ให้ทำการเลือก Windows CE for Pocket PC 2002 แล้วคลิกปุ่ม OK
รูปแสดง การเลือกสร้าง Project ใหม่
- ทำการดับเบิ้ลคลิก คอนโทรล รูปปุ่ม (CommandButton) ที่อยู่บน Toolbox จะปรากฏปุ่มวางไว้ บน Form
- คลิกเลือกที่ปุ่ม และทำการเปลี่ยนค่า Property ตามตารางด้านล่าง
Control |
Property |
Value |
CommandButton |
Name |
cmdPlaysound |
|
Caption |
Play Sound |
- จะได้ผลการกำหนด Property ดังรูป
รูปแสดง ผลที่ได้จากการกำหนด Property ให้กับปุ่ม
เพิ่มโมดูล (Module) และ API ของเสียง
สำหรับในตัวนี้จะทำการเพิ่ม โมดูล เข้ามาเพื่อจะใช้ในการประกาศตัวแปร และฟังก์ชั่น API (Application Programming Interface) เพื่อจะทำให้ ฟอร์มทุกฟอร์ม(ในกรณีที่มีหลายฟอร์ม) ทำการเรียกใช้ ฟังก์ชั่น หรือ ซับ ที่อยู่ใน โมดูล ได้เหมือนกัน โมดูล จึงเปรียบเสมือนกับข้อมูลส่วนกลางที่ใช้ร่วมกัน ระหว่างฟอร์มภายในโปรเจคเดียวกัน
สำหรับ API นั้น เป็นวิธีการประกาศ ฟังก์ชั่นเพื่อเรียกใช้คำสั่งของระบบ เช่นในตัวอย่างนี้ จะเป็นการเรียกใช้ API ที่ชื่อว่า PlaySound มาใช้งาน ในการเล่นเสียงจากไฟล์ wave ขั้นตอนจะเริ่มจาก
- คลิกเลือกที่เมนู Project->Add Module จะปรากฏหน้าต่าง Add Module ให้คุณคลิกปุ่ม Open คุณจะได้หน้าต่าง สำหรับป้อนโค้ด ในส่วนของโมดูล ดังรูป
รูปแสดง หน้าต่างของโมดูล
รูปแสดง รายการโมดูล ที่เพิ่มเข้ามาสู่โปรเจค
- จะสังเกตุได้ว่าในส่วนของ Property เราสามารถเปลี่ยนชื่อของ โมดูลได้ตามต้องการ
- ให้ทำการป้อนโค้ด ตามตารางลงไปในส่วนของโมดูล
Option Explicit
Public Const SND_SYNC = &H0 ' play synchronously (default)
Public Const SND_ASYNC = &H1 ' play asynchronously
Public Declare Function PlaySound Lib "Coredll" _
Alias "PlaySoundW" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Sub music_play(ByVal music_filename As String)
Dim af As Long
af = PlaySound(music_filename, 0, SND_ASYNC)
End Sub
|
ในส่วนของโมดูลจะเริ่มต้นด้วย การประกาศค่าคงที่ สำหรับใช้เป็นการกำหนดการเล่นไฟล์ wave ซึ่งจะมีอยู่ 2 แบบ ถัดจากนั้น จะเป็นการประกาศฟังก์ชั่น PlaySound (ส่วนนี้คือการประกาศ API) และถัดจากนั้น จะมีการสร้างซับ ชื่อว่า Sub music_play โดยมีการรับชื่อของไฟล์ wave ที่ต้องการให้เล่นเสียง เข้ามาเก็บในตัวแปร music_filename
ภายในซับ Sub music_play จะทำการเรียกใช้ PlaySound ที่ได้ประกาศไว้ และมีการส่งชื่อของไฟล์ wave ที่ต้องการเล่นเสียงไปให้กับฟังก์ชั่นได้ทำงาน ส่วนหลังสุดจะกำหนดการเล่นให้เป็นแบบ SND_ASYNC ซึ่งค่าตรงนี้ คุณสามารถกลับมาเปลี่ยนเป็น SND_SYNC เพื่อทดสอบความแตกต่างระหว่างการเล่นเสียง ทั้ง 2 แบบ
เริ่มต้นใส่โค้ดการทำงาน
- ทำการดับเบิ้ลคลิกปุ่ม cmdPlaysound ที่อยู่บนฟอร์ม จะปรากฏหน้าต่าง Code View
- ทำการป้อนโค้ดเพื่อเรียกใช้งานฟังก์ชั่น ที่เราได้สร้างไว้ใน โมดูล ตามตาราง
Private Sub cmdPlaysound_Click()
Dim title_wave As String
Dim df As Long
title_wave = "\Windows\Alarm1.WAV"
music_play (title_wave)
End Sub
|
จากโค้ดจะเป็นการประกาศตัวแปร title_wave เพื่อเก็บชื่อไฟล์ wave ที่อยู่ภายในเครื่อง Pocket PC หรือ Emulator อยู่แล้ว จากนั้นจะทำการเรียกใช้ ฟังก์ชั่น music_play โดยส่งชื่อไฟล์ที่ต้องการเล่นเสียง wave ออกมา
- ทำการทดสอบโปรแกรม โดยกดปุ่ม F5 ให้คุณทดสอบคลิกปุ่มที่ต้องการ จะได้ผล เป็นเสียงเมื่อคุณทำการคลิกที่ปุ่ม Play Sound
รูปแสดง การทดสอบการทำงานของโปรแกรม โดยคลิกปุ่ม Play Sound
|