Thursday, August 1, 2013

Play sounds via SoundPool

Play sounds via SoundPool
ဒီတစ္ခါေတာ့ Android media API ကုိသံုးျပီး sound file တစ္ခုကို play မယ့္ apk ကိုေရးမွာျဖစ္ပါတယ္။
Android device ရဲ႕ screen ကုိ လက္နဲ႕ထိလုိက္တုိင္းမွာ အသံဖုိင္တစ္ခုကို play ေပးမယ့္ application တစ္ခုေရးၾကည့္ရေအာင္။
Sound file ေတြကို play ဘုိ႕ အဓိက API ၂မ်ိဳးရွိပါတယ္။ ပထမတစ္ခုကေတာ့ SoundPool class ကုိအသံုးျပဳတာျဖစ္ပါတယ္။ ေနာက္တစ္ခုကေတာ့ MediaPlayer class ကုိသံုးတာပါ။
Audio clip ေလးေတြအတြက္ဆိုရင္ SoundPool ကုိသံုးႏုိင္ပါတယ္။ SoundPool က sound ကို repeat လုပ္ေပးႏိုင္ပါတယ္။ sound ေတြကိုလည္း တျပိဳင္နက္ play ေပးႏုိင္ပါတယ္။ SoundPool ကိုသံုးျပီး play မယ့္ sound file ေတြဟာ 1MB ထက္ေတာ့မေက်ာ္သင့္ပါဘူး။ longer music and movie ေတြအတြက္ဆိုရင္ေတာ့ media player ကုိသံုးတာပိုျပီးသင့္ေတာ္ပါတယ္။
SoundPool ကုိသံုးျပီး Project တစ္ခု create လုပ္ရေအာင္။ Application နဲ႕ Project name ေတြကို ၾကိဳက္ရာေပးပါ။ application ကုိ install လုပ္ျပီးတဲ့အခါ Application name ကုိ device မွာျမင္ရမွာပါ။ Project name ကေတာ့ application ေရးေနစဥ္မွာဘဲအသံုးျပဳမွာပါ။
ေအာက္ပါ source code မ်ားကိုမျပင္ဘဲ သံုးလို႕ရေအာင္ Package name ကို com.computerandmobiletech.soundpool လို႕ေပးပါ။ Activity name ကို PlaySound လုိ႕ေပးပါ။ layout file ကုိေတာ့ main လို႕အမည္ေပးပါ။
Layout file ျဖစ္တဲ့ main.xml file မွာ ေအာက္ပါအတုိင္းေရးပါ။

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”vertical” >

<TextView
android:id=”@+id/textView1″
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:text=”Click on the screen to start playing” >
</TextView>

</LinearLayout>
ကိုယ္ play ခ်င္တဲ့ sound file တစ္ခုကိုရွာထားပါ။ ဒီလင့္ကေနရွာခ်င္ရင္လည္းရပါတယ္။
http://rpg.hamsterrepublic.com/ohrrpgce/Free_Sound_Effects
ႏွစ္သက္ရာတစ္ဖုိင္ကို ေဒါင္းျပီး sound1.ogg လို႕အမည္ေျပာင္းေပးလုိက္ပါ။ ျပီးရင္ res folder ေအာက္မွာ raw ဆိုတဲ့ folder တစ္ခုကိုထပ္လုပ္လုိက္ပါ။ raw ထဲမွာ sound1.ogg file ကုိထည့္လိုက္ပါ။
ျပီးရင္ Activity အတြက္ java code ကိုေရးပါမယ္။ src ရဲ႕ com.computerandmobiletech.soundpool ဒီ package ေအာက္မွာ PlaySound.java file ရွိပါမယ္။ အဲဒီဖုိင္ကိုဖြင့္ျပီး ေအာက္ပါ java code မ်ားကို ရိုက္ထည့္ပါ။
package com.computerandmobiletech.soundpool;

import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class PlaySound extends Activity implements OnTouchListener {
private SoundPool soundPool;
private int soundID;
boolean loaded = false;

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

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
View view = findViewById(R.id.textView1);
view.setOnTouchListener(this);
// Set the hardware buttons to control the music
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
// Load the sound
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
loaded = true;
}
});
soundID = soundPool.load(this, R.raw.sound1, 1);

}

@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Getting the user sound settings
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float actualVolume = (float) audioManager
.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = (float) audioManager
.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = actualVolume / maxVolume;
// Is the sound loaded already?
if (loaded) {
soundPool.play(soundID, volume, volume, 1, 0, 1f);
Log.e(“Test”, “Played sound”);
}
}
return false;
}
}
ျပီးရင္ run ၾကည့္ပါ။ screen ကုိ လက္နဲ႕ထိလုိက္တုိင္းမွာကိုယ္ထည့္ထားတဲ့ sound1.ogg file ကို play ေပးမွာျဖစ္လိ္ု႕ အသံတစ္ခုကိုၾကားရမွာျဖစ္ပါတယ္။ အသံအတိုးအက်ယ္ကေတာ့ ကိုယ့္ device ရဲ႕ လက္ရွိ setting အတုိင္းျဖစ္ပါတယ္။

Credit to: http://computerandmobiletech.com

No comments:

Post a Comment