20.11.2016 Views

ANDROID APP

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

154 บทที่ 6 เทคนิคการทำางานร่วมกับมัลติมีเดีย<br />

เสียง<br />

การบันทึกและเล่นข้อมูลเสียงจะมีเฟรมเวิร์คอยู่ 2 ชนิดที่เรียกใช้งานได้ ซึ่งการเลือกใช้นั้นจะ<br />

ขึ้นอยู่กับประเภทการทำงานของแอพ ซึ่งได้แก่<br />

m MediaPlayer/MediaRecorder – เมธอดมาตรฐานที่ใช้จัดการข้อมูลเสียง ซึ่งจะอยู่ในรูป<br />

ของไฟล์หรือข้อมูลแบบสตรีมก็ได้เวลาทำงานเฟรมเวิร์คนี้จะสร้างเธรดเป็นของตัวเอง<br />

m AudioTrack/AudioRecorder – เฟรมเวิร์คชนิดนี้สามารถเข้าถึงข้อมูลเสียงแบบ Raw<br />

ได้โดยตรง โดยจะทำงานอยู่บนหน่วยความจำ และจะส่งข้อมูลไปยังส่วนบัฟเฟอร์เมื่ออยู่<br />

ในสถานะพร้อมใช้งานโดยไม่จำเป็นต้องจัดเก็บอยู่ในรูปของไฟล์ก่อนใช้งานได้<br />

เวลาทำงานเฟรมเวิร์คนี้จะไม่สร้างเธรดของตัวเอง<br />

การใช้งานเมธอดเหล่านี้จะกล่าวถึงในหัวข้อถัดไป<br />

กรรมวิธี: การสั่งให้เล่นไฟล์เสียงที่เลือกไว้<br />

เราจะใช้คลาส MediaRecorder และ MediaPlayer ในการบันทึกและเล่นข้อมูลเสียง<br />

และข้อมูลวิดีโอ ซึ่งในหัวข้อนี้เราจะทดลองการใช้งานร่วมกับข้อมูลเสียง โดยมีขั้นตอนการทำงานดังนี้<br />

1. สร้างอินสแตนซ์จากคลาส MediaPlayer<br />

MediaPlayer m_mediaPlayer = new MediaPlayer();<br />

2. กำหนดแหล่งของข้อมูลที่จะใช้งาน ซึ่งสามารถสร้างจากข้อมูลเสียงแบบ Raw ได้<br />

m_mediaPlayer = MediaPlayer.create(this, R.raw.my_music);<br />

นอกเหนือจากนั้น เราสามารถใช้ข้อมูลประเภทสตรีมได้เช่นกัน แต่จะต้องใช้คำสั่ง<br />

เพิ่มเติมเพื่อเตรียมการทำงานดังนี้<br />

m_mediaPlayer.setDataSource(path);<br />

m_mediaPlayer.prepare();<br />

ในการทำงานของชุดคำสั่งนั้น เราจะต้องใช้คำสั่ง try-catch มาครอบไว้เพื่อป้องกันข้อ<br />

ผิดพลาดที่อาจเกิดขึ้นในกรณีที่ระบบหาแหล่งข้อมูลไม่พบ<br />

3. เริ่มต้นเล่นข้อมูลเสียง<br />

m_mediaPlayer.start();<br />

4. เมื่อเล่นข้อมูลเสียงเสร็จแล้วก็จะหยุดการทำงานของ MediaPlayer และยกเลิก<br />

อินสแตนซ์เพื่อคืนหน่วยความจำกลับสู่ระบบ<br />

m_mediaPlayer.stop();<br />

m_mediaPlayer.release();<br />

ในหัวข้อนี้เรายังคงใช้คำสั่ง ListFiles จากในชุดคำสั่งที่ 6.3 ละ 6.4 มาใช้ในการสร้าง<br />

รายการของไฟล์ที่จะเอามาเล่น ในการทำงานนี้เราจะเก็บไฟล์เสียงที่จะใช้ไว้ในไดเร็กทอรี /sdcard/<br />

music/ ซึ่งไดเร็กทอรีนี้สามารถเปลี่ยนในภายหลังได้ตามความต้องการ<br />

เมื่อคำสั่ง ListFiles ได้ส่งค่าของไฟล์ที่ต้องการจะเล่นกลับมายังระบบแล้ว เราก็จะเริ่มต้น<br />

การทำงานของ MediaPlayer และสั่งให้เมธอด startMP() เริ่มทำงาน โดยหลังจากเริ่มทำงานแล้ว<br />

จะปรากฏปุ่มบนจอภาพ ซึ่งแสดงข้อความบนปุ่มว่า Pause

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!