java - 通过解码 Base64 播放音频

标签 java android

我的数据库有很多 base64 格式的短音频。我想在单击按钮时播放音频。基本上,我写了这段代码,但它不起作用。 (如果可能,文件最好不要写入存储,因为这个过程有延迟)

playButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        try{
            String url = "data:audio/mp3;base64,"+base64FormattedString;
            MediaPlayer mediaPlayer = new MediaPlayer();
            mediaPlayer.setDataSource(url);
            mediaPlayer.prepare();
            mediaPlayer.start();
        }
        catch(Exception e){
            e.printStackTrace();
        }

    }
});

堆栈跟踪在这里:https://gist.github.com/AliAtes/aa46261aba3d755fbbd1eba300356a5f

最佳答案

根据您的 API 约束,您可以使用 AudioTrack .此外,这很容易。使用 AudioTrack,您可以播放自 API 3 以来的 byte[] 音频数据。

您只需使用音频样本特性初始化您的 AudioTrack 对象:

AudioTrack audioTrack = new AudioTrack(...);

并调用:

audioTrack.play();

然后,解码您的 Base64 数据:

byte[] data = Base64.decode(yourBase64AudioSample, Base64.DEFAULT);

并放入audioTrack中播放:

int iRes = audioTrack.write(data, 0, data.length);

和 TADAAA :)

...不要忘记在播放后释放:

audioTrack.release();

关于java - 通过解码 Base64 播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42853981/

相关文章:

android - Admob 横幅广告加载失败,错误代码 : 3 No fill

使用 GoogleMap.AnimateCamera() 时,android google maps 不加载 map

java - 如何从 Java 运行 Linux 脚本

java - 需要重写方法来调用 super

java - ScrollView隐藏标题栏

android - fitsSystemWindows 在添加的 fragment 中不起作用

android - 无法理解 android studio 中的导航绘制预制代码

java - 使用解析服务进行缓存

java - 如何使用 iText 从 pdf 文件中提取数据

android - 如何使用 Picasso lib 在 ImageView 上放大和调整图像