我需要你的帮助。我尝试播放存储在Assets文件夹中的音频文件,但发生了错误。
以下是我的代码:
try{
if (player.isPlaying()) {
player.stop();
player.release();
}
}catch(Exception e){
Toast.makeText(this, "an exception occurred", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
try{
AssetFileDescriptor afd = BeeDailyConvo.this.getAssets().openFd("sounds/hello_kr.wma");
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
player.prepare();
player.start();
}catch(Exception e){
e.printStackTrace();
}
这是我的logcat:
06-16 22:39:53.330:W / MediaPlayer(13490):info / warning(1,26)
06-16 22:39:53.330:E / MediaPlayer(13490):错误(1,-4)
请您解释我的代码有什么问题?
提前谢谢
此致
普里斯卡
答案 0 :(得分:4)
此问题已得到解决。
在准备播放器之前必须关闭资产文件描述符。这就是我解决问题的方法:
player = new MediaPlayer();
AssetFileDescriptor afd = BeeDailyConvo.this.getAssets()
.openFd("sounds/"+file);
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
afd.close();**//just added this line**
player.prepare();
player.start();
答案 1 :(得分:3)
您可以在此处查看所有错误代码Media player Error codes
-4错误代码表示您提供了无效参数。
将您的代码放入try catch块。
尝试使用
try {
AssetFileDescriptor afd = CustomListViewActivity.this.getAssets()
.openFd("sounds/hello_kr.wma");
player.setDataSource(afd.getFileDescriptor());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
答案 2 :(得分:1)
遗憾的是,由于某种原因,关于MediaPlayer错误代码的信息非常少。但是我建议你尝试将声音文件放在res / raw /而不是资源中。
修改强>
从使用开发人员文档中的MediaPlayer部分开始。这将向您展示如何正确设置和播放声音。
编辑2:
证明可以从资产中执行此操作,请参阅此问题:Play audio file from the assets directory
答案 3 :(得分:1)
我认为不支持wma文件。
http://developer.android.com/guide/appendix/media-formats.html
我注意到你没有指定audioStreamType
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MISIC);
答案 4 :(得分:0)
用这种方式解决你的问题:)
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) {
}
}