Android Okhttp 请求(将WAV文件存储为MP3格式),调用mediaplayer朗读

近期做过案例,部分安卓设备不支持wav波形文件,不能正常播放语音,我的解决方案是将文件接收后,进行转化,转化成MP3格式,再调用mediaplayer进行朗读

1、OkHttpClient 声明,并调用接口

           OkHttpClient okHttpClient = new OkHttpClient.Builder().
                    //在这里,还可以设置数据缓存等
                    //设置超时时间
                            connectTimeout(20, TimeUnit.SECONDS).
                            readTimeout(20, TimeUnit.SECONDS).
                            writeTimeout(20, TimeUnit.SECONDS).
                            callTimeout(20, TimeUnit.SECONDS).
                    //错误重连
                            retryOnConnectionFailure(true).
                            build();
            Request.Builder builder = new Request.Builder();
            Request request = builder.get().url(“接口地址”).build();
            //  3将Request封装成call
            okhttp3.Call call = okHttpClient.newCall(request);

2、请求的结果通过异步返回进行处理调用

基本逻辑:接收到流文件,将流文件保存到制定的位置,最后关闭流

 call.enqueue(new okhttp3.Callback() {

                @Override
                public void onFailure(okhttp3.Call call, IOException e) {
                    "//AI文件下载失败了"
                }

                @Override
                public void onResponse(okhttp3.Call call, Response response) throws IOException {
                    try {
                        InputStream inputStream = response.body().byteStream();
                        long length = response.body().contentLength();
                        FileOutputStream fileOutputStream = null;
                        try {
                            fileOutputStream = new FileOutputStream(destPath);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        try {
                            XLog.d("AI语音流文件路径:" + destPath);
                            byte[] bytes = new byte[2048];
                            int len = 0, sum = 0;
                            while ((len = inputStream.read(bytes)) != -1) {
                                fileOutputStream.write(bytes, 0, len);
                                sum +=len;
                                int progress = (int) (sum * 1.0f / length * 100);
                                XLog.d("流文件下载中,当前进度:" + progress);
                            }
                            fileOutputStream.flush();
                        } catch (Exception e) {
                        } finally {
                            try {
                                fileOutputStream.close();
                                inputStream.close();
                            } catch (Exception e) {
                            }
                        }
}
  

3、调用mediaplayer进行播放

基本逻辑:调用完成后将上面下载的文件给删除了即可

  mediaPlayer.reset();// 重置mediaPaly,建议在初始化mediaplay立即调用。
  mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  mediaPlayer.setDataSource(destPath);
  mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
   @Override
  public void onPrepared(MediaPlayer mediaPlayer) {
          mediaPlayer.start();
   }
  }
 );
mediaPlayer.prepareAsync();
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
 return false;
 }
 });
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
 @Override
public void onCompletion(MediaPlayer mediaPlayer) {                                    
       FileUtils.deleteFile(destPath);
  }
});

播放的时候一定注意下,如果mediaplayer调用的时候没有声音,注意查看下有木有加

mediaPlayer.reset()
这句话
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值