Play the chinese mp3 from assets folder in android - android

I have a chinese mp3 file and I want to play with MediaPlayer but it is not played in this. My code is like this:
AssetFileDescriptor afd=getAssets().openFd("music/formes/ZH/三角形.mp3");
mySound = new MediaPlayer();
mySound.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
mySound.prepare();
mySound.start();
The logcat out put is:
java.io.FileNotFoundException: music/formes/ZH/三角形.mp3

ArrayList al = new ArrayList();
String[] fileNames =getAssets().list("music/formes/ZH/");
for(String name:fileNames){
al.add(name);
System.out.println(name);
}
AssetFileDescriptor descriptor = getAssets().openFd("music/formes/ZH/" + al[0]);
And For Playing
MediaPlayer player = new MediaPlayer();
long start = descriptor.getStartOffset();
long end = descriptor.getLength();
player.setDataSource(this.descriptor.getFileDescriptor(), start, end);
player.prepare();
player.setVolume(1.0f, 1.0f);
player.start()
;

Related

MediaPlayer plays only 2-3 seconds not full mp3

There is mp3 file which is 20 seconds long.
But MediaPlayer only plays 2-3 seconds.
I am using below code to play mp3 from raw file.
try{
AssetFileDescriptor afd = getApplicationContext().getResources().openRawResourceFd(R.raw.buzzer6);
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){
#Override
public void onPrepared(MediaPlayer mp){
mp.start();
}
});
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.prepare();
} catch (IOException ioe) {
ioe.printStackTrace();
}
So what is the issue?
I want to Play full mp3 file which is 20 seconds.
I suggest you to have a look at this post
Basically if you try to enlarge the scope of MediaPlayer as instance variable it should work
(In the example is declared static, you probably do not need to declare it static)
just change this line:
MediaPlayer mediaPlayer = new MediaPlayer();
in:
private MediaPlayer mediaPlayer //is an instance variable not a local one
while into the method you maintain:
mediaPlayer = new MediaPlayer();

play mp3 file in resource folder not working

I want to play an mp3 file in my res/raw folder.
But i get error as "error (1, -2147483648)" and IOException on mp.prepare()
My code
try {
MediaPlayer mPlayer = MediaPlayer.create(NavigationHome.this, R.raw.notfy);
mp.prepare();
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
I also tried with
try {
mp.setDataSource(NavigationHome.this, Uri.parse("android.resource://com.hipay_uae/res/raw/notfy"));
mp.prepare();
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
Another solution that I tried
AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
MediaPlayer player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
player.prepare();
player.start();
These too didn't work for me.
It will help more if you can post the StackTrace in your question.
But, as per the information in your question, the below code should work for playing the media file from the raw resource folder.
If you use the create() method, prepare() gets called internally and you don't need to explicitly call it.
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.notify);
mediaPlayer.start();
But, the point to consider is that prepare() generally throws an IllegalStateException, and in your case, you are getting an IOException. So it would be worth checking if the file is in fact present in raw folder and/or the file is corrupt.
Try to initialize your media player before preparing it or setting data source to it
Play From external directory
String filePath = Environment.getExternalStorageDirectory()+"/folderName/yourfile.mp3";
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(filePath);
mediaPlayer.prepare();
mediaPlayer.start()
From raw folder
MediaPlayer mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.song);
mediaPlayer.start();
Try this
String fname="your_filename";
int resID=getResources().getIdentifier(fname, "raw", getPackageName());
MediaPlayer mediaPlayer=MediaPlayer.create(this,resID);
mediaPlayer.start();

Can't play media from Assets on Android

In one of my Activities I want to show a .gif image(load it from assets) and play a music file. It is really interesting that if I remove the code which loads the gif, the music gets played, but if I want to load and show the gif, the music doesn't play! Why?
WebView web = (WebView) findViewById(R.id.web);
web.loadUrl("file:///android_asset/h.gif");
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());
AssetFileDescriptor afd = null;
try {
afd = getAssets().openFd("background.mp3");
MediaPlayer player = new MediaPlayer();
player.setDataSource(
afd.getFileDescriptor(),
afd.getStartOffset(),
afd.getLength());
player.prepare();
player.start();
}
catch (IOException e) {
e.printStackTrace();
}

android MediaPlayer is playing the wrong mp3 file in assets directory

I'm trying to play an mp3 file from the assets directory, but when I start it up with the MediaPlayer, something completely different plays. Here's the code:
String mp3File = "dir/a/music.mp3"; //the path here is file:///android_asset/dir/a/music.mp3;
AssetManager assetMan = getAssets();
MediaPlayer media = new MediaPlayer();
FileInputStream mp3Stream = assetMan.openFd(mp3File).createInputStream();
media.setDataSource(mp3Stream.getFD());
media.prepare();
media.start();
Instead of playing mp3File, it seems to play a bunch of other files that reside in the assets directory. Any ideas?
Use this way it is very useful function :)
public void playBeep() {
try {
if (m.isPlaying()) {
m.stop();
m.release();
m = new MediaPlayer();
}
AssetFileDescriptor descriptor = getAssets().openFd("mp3 name.mp3");
m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
descriptor.close();
m.prepare();
m.setVolume(1f, 1f);
m.setLooping(true);
m.start();
} catch (Exception e) {
}
}
MediaPlayer mp = new MediaPlayer();
AssetFileDescriptor descriptor;
descriptor = getAssets().openFd( "filename.mp3" );
mp.setDataSource( descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength() );
descriptor.close();
mp.prepare();
mp.start();
put your mp3 in the assets folder.
you can refer this link also play-audio-file-from-the-assets-directory and this also android-problem-playing-sounds-from-assets-folder

Android media player bug

I have the media player playing an mp3 when I load my application. But I had to move this application and now every time I load the application this gives a force close error.
The media player is opened like this:
final MediaPlayer mp = MediaPlayer.create(Splash.this, R.raw.indra);
mp.start();
I know its the media player which causes the error as when I comment the lines above out the application works.
Is there any other ways I can try to load the mp3?
Thanks
Edit:
MediaPlayer mp = new MediaPlayer();
AssetFileDescriptor descriptor = contex.getAssets().openFd("indra.mp3");
mp.setDataSource( descriptor.getFileDescriptor(),
descriptor.getStartOffset(), descriptor.getLength() );
descriptor.close();
mp.prepare();
mp.start();
Edit:
try {
MediaPlayer mp = new MediaPlayer();
AssetFileDescriptor descriptor;
descriptor = contex.getAssets().openFd("indra.mp3");
mp.setDataSource( descriptor.getFileDescriptor(),
descriptor.getStartOffset(), descriptor.getLength() );
descriptor.close();
mp.prepare();
mp.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Just put your file in asset folder n apply this code..
Media Player mp = new MediaPlayer();
AssetFileDescriptor descriptor = contex.getAssets().openFd(fileName);
mp.setDataSource( descriptor.getFileDescriptor(),
descriptor.getStartOffset(), descriptor.getLength() );
descriptor.close();
mp.prepare();
mp.start();

Categories

Resources