AssetManager এবং MediaPlayer ব্যবহার করে অডিও প্লেব্যাক
অ্যান্ড্রয়েড অ্যাপের `assets/` ফোল্ডার থেকে অডিও ফাইল প্লে করার জন্য `AssetFileDescriptor` এবং `MediaPlayer` ক্লাস ব্যবহার করা হয়। এটি র সোর্স (`res/raw/`) থেকে আলাদা কারণ এসেট ফাইলগুলো কম্প্রেসড থাকে না।
ধাপ ১: প্রজেক্ট তৈরি করুন
স্ট্যান্ডার্ড অ্যান্ড্রয়েড প্রজেক্ট।
ধাপ ২: এসেটস ফোল্ডার তৈরি করুন
- Project view-এ `app` মডিউলে রাইট-ক্লিক
- New → Folder → Assets Folder
- Finish ক্লিক করুন
- `assets/` ফোল্ডারে আপনার অডিও ফাইল (যেমন `audio.mp3`) কপি করুন
ধাপ ৩: লেআউট
res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btnPlayAudio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Play Audio"
android:textStyle="italic" />
</RelativeLayout>
ধাপ ৪: অডিও প্লে লজিক
src/MainActivity.java:
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.btnPlayAudio);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playAudioFromAssets();
}
});
}
private void playAudioFromAssets() {
MediaPlayer mediaPlayer = new MediaPlayer();
try {
AssetFileDescriptor afd = getAssets().openFd("audio.mp3");
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mediaPlayer.prepare();
mediaPlayer.start();
Toast.makeText(this, "Playing audio from Assets directory", Toast.LENGTH_SHORT).show();
// রিসোর্স রিলিজের জন্য completion listener
mediaPlayer.setOnCompletionListener(mp -> {
mp.release();
});
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "Error playing audio: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
গুরুত্বপূর্ণ টিপস
- ফাইল নাম: কেস-সেনসিটিভ, এক্সটেনশন সহ (`.mp3`, `.wav`, `.ogg`)
- AssetFileDescriptor: `getStartOffset()` এবং `getLength()` ব্যবহার করুন বড় ফাইলের জন্য
- মেমরি ম্যানেজমেন্ট: `mediaPlayer.release()` কল করা জরুরি
- এসেটস vs Raw: Raw রিসোর্স (`R.raw.audio`) অ্যাক্সেস সহজ, এসেটস ফোল্ডার সাব-ডিরেক্টরি সাপোর্ট করে
সাব-ফোল্ডার ব্যবহার
// assets/sounds/audio.mp3 থাকলে
AssetFileDescriptor afd = getAssets().openFd("sounds/audio.mp3");