การเล่นไฟล์เสียงใน Android

android

วันนี้ผมว่างเขียนบทความอีกครั้ง เรามาต่อกันกับ android ต่อโดยครั้งนี้จะเป็นการเล่นไฟล์เสียงใน android สำหรับไฟล์เสียงที่รองรับมีดังนี้

?WAV(PCMuncompressed)

?AAC(AppleiPodformat,unprotected)

?MP3(MPEG-3) ?WMA(Windowsmediaaudio)

?AMR(Speechcodec)

?OGG(OggVorbis)?

?MIDI(Instruments)

ส่วนการ encode ที่รองรับ

MP4(MPEG-4lowbitrate)

?H.263(3GP)

?H.264(AVC)

เรามาเริ่มเขียนโปรแกรมกันเลยดีกว่า ขั้นแรกก็ต้องสร้างโปรเจ็คใหม่ก่อน

โดยรายละเอียดตามนี้ครับ

ProjectName: ThaicodingSound

Build Target: Android 2.2

Application Name: ThaicodingSound

Package Name: org.thaicoding.sound

Create Activity: ThaicodingSound

Min SDK Version: 8

androidsound

androidsound

หลังจากที่เราสร้าง project เสร็จก็ให้ทำการเตรียมไฟล์เสียง ซึ่งสามารถดาวโหลดจาก code ตัวอย่างได้นะครับ

โดยให้สร้าง folder ที่ชื่อ raw ใน res เพื่อทำการเก็บไฟล์เสียงที่ใช้แล้วให้ copy file เสียงไปไว้ใน raw

androidsound

เมื่อทำการ copy files ไปไว้แล้วก็ให้ทำการเขียนโค้ดตามนี้เลยครับ

[sourcecode language=”java”]

package org.thaicoding.sound;

import android.app.Activity;

import android.os.Bundle;

import android.media.AudioManager;

import android.media.MediaPlayer;

import android.view.KeyEvent;

public class ThaiCodingSound extends Activity {

/** Called when the activity is first created. */

private MediaPlayer mp;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

setVolumeControlStream(AudioManager.STREAM_MUSIC);

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event)

{

int resId;

switch(keyCode){

case KeyEvent.KEYCODE_DPAD_UP:

resId = R.raw.aexp3;

break;

case KeyEvent.KEYCODE_DPAD_DOWN:

resId = R.raw.cartcar;

break;

case KeyEvent.KEYCODE_DPAD_LEFT:

resId = R.raw.jetpass;

break;

case KeyEvent.KEYCODE_DPAD_RIGHT:

resId = R.raw.rain2;

break;

default:

return super.onKeyDown(keyCode, event);

}

//Release any resources from? previous MediaPlayer

if(mp != null)

{

mp.release();

}

//Create a new MediaPlayer to play this sound

mp = MediaPlayer.create(this, resId);

mp.start();

return true;

}

}

[/sourcecode]

androidsound

เมื่อเขียนเสร็จก็ลองเปิดตัว emulator แล้วก็ลองรันโปรแกรมดู จากนั้นก็กด ขึ้นลง ซ้าย ขวา มันก็จะเล่นไฟล์ต่างเงื่อนไขที่เรา switch ไว้นั้นเอง โดยเราใช้ object MediaPlayer เป็นตัวที่ทำการเล่นเสียงต่างๆ โดยที่เรากำหนดเงื่อนไขการกดใน switch เช่นกดขึ้นจะเป็น resId = R.raw.aexp3; สังเกตว่า R.raw.aexp3 คือการอ้างอิงชื่อไฟล์เสียงที่เราได้ทำการ copy ไปไว้นั้นเอง? เมื่อเรากำหนดว่าจะเล่นไฟล์ไหนแล้วก่อนที่จะเล่นเราก็ต้องทำการ clear ไฟล์ที่ object MediaPlayer เล่นก่อนหน้านี้เพื่อกันกรณีไฟล์เพลงขนาดยาวแล้วเล่นยังไม่จบ โดยเรียกใช้ method relase() นั้นเอง จากนั้นเราก็เรียกใช้ method create(this, resId); ส่งชื่อไฟล์เสียงไป ทำการเล่นไฟล์เสียงโดยใช้ start() ตามโค้ดนั้นเอง

Download SourceCode

 

Leave a Reply

Your email address will not be published. Required fields are marked *