Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android java从sd卡播放wav音频文件_Java_Android_Audio_Wav_Sd Card - Fatal编程技术网

android java从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

我无法从sd卡播放wav音频文件:

这是我的代码:

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文件的声音