当前位置: 首页 > 知识库问答 >
问题:

Android java播放wav音频文件从sd卡

慕飞章
2023-03-14

我无法从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)

我希望你能帮我?

谢谢

共有1个答案

璩慎之
2023-03-14

Android媒体播放器有一些wav文件的麻烦,我建议你使用AudioTrack而不是MediaPlayer。

下面是一个例子:

     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();
 类似资料:
  • 我正在读一本书。wav文件在C中,然后我尝试使用一些QT函数播放音频文件。以下是我如何阅读该文件: 所以我的音频文件在里面。的每个元素都是无符号的16位整数。 为了播放声音,我将每个16位无符号整数分成两个字符,然后每隔3毫秒(使用计时器)向音频卡发送256个字符。假设是256个字符的字符数组,我这样做(每隔3毫秒)来播放声音: 此外,定义为: 并且定义为: 并且音频格式设置正确为: 然而,当我试

  • 我将从REST服务接收非常短的音频数据。它们将以WAV格式到达。然后我需要在Android设备上播放它们。我想在不将数据保存到文件的情况下完成这项工作——这只会让它变得比需要的更复杂。然而,我无法从内存流让它工作。下面是我正在使用的测试代码(使用assets文件夹中的.wav文件): 当我从文件中播放它时,它是好的,但是内存流方法给了我一个IO异常准备失败错误。我怀疑问题可能是音频/wav值。我找

  • 我需要你的帮助。我正在开发一个android应用程序,我需要从sd卡中随机播放一首歌。我尝试了这种方式: 使用这种方法,我从文件夹中随机选择一首歌曲(此文件夹仅包含mp3文件)。 然后我用这个方法播放提取的歌曲: 我想知道如何使用MediaPlayer播放智能手机sd卡上的歌曲

  • 我通过谷歌阅读about.wav文件格式,我所能想到的是帧是由样本(一些定义的位深度)组成的,而wav立体声文件有多个叫做通道的东西......混乱的是一个通道是否由帧组成?当我播放一些音频文件时,所有通道都一起播放吗?如果一个通道由帧组成,所有通道的长度是否相等(位明智)?如果有人可以,请回答,当以波形播放wav文件时,我必须分别显示每个通道

  • 问题内容: 我正在用Java 做辫子。如果倒带时间,声音会向后播放。如何向后播放WAV文件?也许有像这样的流?在Braid网站上,您可以看到我的意思。 更新: _ 解决! 看到我自己的帖子。_ 问题答案: !!!!!! 我自己解决了这个问题(14岁!!), 我写了这个课: 然后:

  • 函数名称: 播放音频 函数功能: 在后台播放指定的声音文件 函数方法 media.playAudio(path,vol,flag) 参数 类型 必填 说明 path string 是 音频文件名,支持 mp3、m4a、m4r、ogg、wav vol string 否 音频音量,不写默认,使用当前设置的音量 flag string 否 是否循环播放,不写默认为 false - 不循环,true -