android java从sd卡播放wav音频文件
我无法从sd卡播放wav音频文件: 这是我的代码:android java从sd卡播放wav音频文件,java,android,audio,wav,sd-card,Java,Android,Audio,Wav,Sd Card,我无法从sd卡播放wav音频文件: 这是我的代码: mp = new MediaPlayer(); //Defined as MediaPlayer above try { mp.setDataSource(fileNamePath); mp.prepare(); mp.start(); } catch (IOException e) { e.printStackTra
mp = new MediaPlayer(); //Defined as MediaPlayer above
try {
mp.setDataSource(fileNamePath);
mp.prepare();
mp.start();
} catch (IOException e) {
e.printStackTrace();
}
文件名路径的格式为:/storage/emulated/0/MyApp/name.wav
这是我得到的错误代码:
E/MediaPlayer: stop called in state 1, mPlayer(0x0)
E/MediaPlayer: error (-38, 0)
E/MediaPlayer: Error (-38,0)
我希望你能在这里帮助我
谢谢 Android media player在使用某些wav文件时遇到一些问题,我建议您使用AudioTrack而不是media player 以下是一个例子:
new Thread(new Runnable() {
@Override
public void run() {
try {
// just put here your wav file
File yourWavFile = new File(Environment.getExternalStorageDirectory() + "/" + AUDIO_FOLDER, fileName);
FileInputStream fis = new FileInputStream(yourWavFile);
int minBufferSize = AudioTrack.getMinBufferSize(16_000,
AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 16_000,
AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT,
minBufferSize, AudioTrack.MODE_STREAM);
int i = 0;
byte[] music = null;
try {
music = new byte[512];
at.play();
while ((i = fis.read(music)) != -1)
at.write(music, 0, i);
} catch (IOException e) {
e.printStackTrace();
}
at.stop();
at.release();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}).start();
这段代码给了我很多错误,我正在用java编程,如何正确调用这个函数?这是我的音频文件位置的字符串:String file=Environment.getExternalStorageDirectory+/+audio\u FOLDER+/+fileName;我如何使用这个字符串?谢谢你的帮助@Florian lol是一个带有lamda表达式的java代码,不管怎样,我编辑了响应,尝试新代码:只需将您的WavFile替换为来自环境的文件。getExternalStorageDirectory+/+AUDIO_FOLDER+/+FileName谢谢您的回答,现在我得到了结尾处。开始一个错误。表示方法声明无效;所需的返回类型;方法体缺失;或声明摘要。我该如何解决这个新问题?@Florian哦,忘了放一个大括号:EditedThanks谢谢你的帮助,一般来说代码现在可以工作了,但是出现的只是奇怪的声音,而不是wav文件的声音