通过解码Base64播放音频

ATE*_*TES 5 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();
        }

    }
});
Run Code Online (Sandbox Code Playgroud)

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

N0u*_*0un 5

根据您的API约束,您可以使用AudioTrack。此外,这很容易。有了AudioTrack你可以玩byte[],因为API 3音频数据。

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

AudioTrack audioTrack = new AudioTrack(...);
Run Code Online (Sandbox Code Playgroud)

并致电:

audioTrack.play();
Run Code Online (Sandbox Code Playgroud)

然后,对Base64数据进行解码:

byte[] data = Base64.decode(yourBase64AudioSample, Base64.DEFAULT);
Run Code Online (Sandbox Code Playgroud)

并放回audioTrack播放:

int iRes = audioTrack.write(data, 0, data.length);
Run Code Online (Sandbox Code Playgroud)

和TADAAA :)

...别忘了玩释放:

audioTrack.release();
Run Code Online (Sandbox Code Playgroud)