============问题描述============

如题,byte数组转换成wav音频文件,并且播放,下面代码能生成data/data/com.example.playwav/cache/temp.wav

但是在播放的时候报异常。

我把代码和Log贴在下面了。

我分析,原因应该是wav文件格式的编解码问题,不能这么随随便便把任意的一个byte数组就转化为了wav

希望了解wav编解码开发的童鞋给点解决办法

byte[] a = { 52, 51, 48, 28, 58, 64, 98,-127, 56, 52, 51, 48, 28, 58, 64, 98,

64, 98, 13, 2, 56, -4, 62, -116, 0, -59, 39, -116, 0, -84,

64, 98, 13, 2, 56, -4, 62, -116, 0, -59, 39, -116, 0, -84,

64, 98, 13, 2, 56, -4, 62, -116, 0, -59, 39, -116, 0, -84,

64, 98, 13, 2, 56, -4, 62, -116, 0, -59, 39, -116, 0, -84,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65 };

playWav(a);

public void playWav(byte[] byteWav) {

String path = this.getCacheDir().getParent() + File.separator;

try {

File file = new File(path);

if (!file.exists()) {

file.mkdirs();

}

File tempWav = new File(file, "temp.wav");

if (!tempWav.exists())

tempWav.createNewFile();

FileOutputStream fos = new FileOutputStream(tempWav);

fos.write(byteWav);

fos.flush();

fos.close();

MediaPlayer mediaPlayer = new MediaPlayer();

FileInputStream fis = new FileInputStream(tempWav);

mediaPlayer.setDataSource(fis.getFD());

mediaPlayer.prepare();

mediaPlayer.start();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

报异常:10-17 11:16:42.726: E/MediaPlayer(20944): Unable to to create media player

10-17 11:16:42.726: D/String(20944): string = java.io.IOException: setDataSourceFD failed.: status=0x80000000

10-17 11:16:42.726: W/System.err(20944): java.io.IOException: setDataSourceFD failed.: status=0x80000000

10-17 11:16:42.726: W/System.err(20944): at android.media.MediaPlayer.setDataSource(Native Method)

10-17 11:16:42.726: W/System.err(20944): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:780)

10-17 11:16:42.726: W/System.err(20944): at com.example.playwav.MainActivity.playTempWav(MainActivity.java:56)

10-17 11:16:42.726: W/System.err(20944): at com.example.playwav.MainActivity$1.onClick(MainActivity.java:39)

10-17 11:16:42.736: W/System.err(20944): at android.view.View.performClick(View.java:2486)

10-17 11:16:42.736: W/System.err(20944): at android.view.View$PerformClick.run(View.java:9130)

10-17 11:16:42.736: W/System.err(20944): at android.os.Handler.handleCallback(Handler.java:587)

10-17 11:16:42.736: W/System.err(20944): at android.os.Handler.dispatchMessage(Handler.java:92)

10-17 11:16:42.736: W/System.err(20944): at android.os.Looper.loop(Looper.java:130)

10-17 11:16:42.736: W/System.err(20944): at android.app.ActivityThread.main(ActivityThread.java:3703)

10-17 11:16:42.736: W/System.err(20944): at java.lang.reflect.Method.invokeNative(Native Method)

10-17 11:16:42.736: W/System.err(20944): at java.lang.reflect.Method.invoke(Method.java:507)

10-17 11:16:42.736: W/System.err(20944): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)

10-17 11:16:42.736: W/System.err(20944): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)

10-17 11:16:42.736: W/System.err(20944): at dalvik.system.NativeStart.main(Native Method)

============解决方案1============

我做的一个项目的一部分,是个网络摄像头的播发,就是从网络收到被adpcm编码过的音频包,然后我用adpcm的codec解码,直接交由AudioTrack来进行播放

简单的流程就是   经过adpcm编码的 byte[]  解码成byte,然后由AudioTrack进行播放。

希望对你有所启发。理论上来说,最后的声音播放,就是二进制数据,进入音频I/O设备,然后调用硬件发出声音。

AudioTrack你可以去看下。

原文:http://www.cnblogs.com/llj1985522/p/4047417.html

android 字节转wav,android开发:把一个byte数组转换成wav音频文件,并且播放相关推荐

  1. Java将图片压缩质量后返回一个byte数组

    项目为了降低存储生成,需要将图片质量压缩大小不变,并且全程要在内存中进行,所以我写了下面的方法.方法中传入参数有两个一个是图片的byte数组,一个是压缩质量(压缩质量在0-1之间).处理完毕后会返回一 ...

  2. Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

    Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲) 准备 1.储存在raw文件夹 2. ...

  3. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  4. Java 音乐播放器开发学习之——音频文件的播放

    Java Sound API是javaSE平台提供底层的(low-level)处理声音接口,可以实现音频文件的播放. 其核心包括: AudioSystem AudioInputStream Audio ...

  5. Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutputStream用法)

    Java字节序 http://origin100.iteye.com/blog/267165 /** * 通信格式转换 * * Java和一些windows编程语言如c.c++.delphi所写的网络 ...

  6. Java字节序,java整型数与网络字节序 byte[] 数组转换关系

    Java字节序 http://origin100.iteye.com/blog/267165 /** * 通信格式转换 * * Java和一些windows编程语言如c.c++.delphi所写的网络 ...

  7. java byte(字节_Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutpu......

    /** * 通信格式转换 * * Java和一些windows编程语言如c.c++.delphi所写的网络程序进行通讯时,需要进行相应的转换 * 高.低字节之间的转换 * windows的字节序为低字 ...

  8. 音频格式简介和PCM转换成WAV

    1 音频格式简介 AudioRecord录制的音频文件格式为PCM,MediaPlayer无法播放PCM格式文件,AudioTrack可以播放PCM格式文件. PCM(Puls Code Modula ...

  9. kux格式怎么转换成mp3_把MP3格式的音频转换成WAV格式

    有时候工作中我们在处理音频的过程中,需要转换音频的格式,以便于更好的使用.例如,可能会要求把MP3格式的音频转换成其他的音频格式.这时候如何解决是一个问题.今天我就和大家介绍好用的音频转换器,可以快速 ...

最新文章

  1. 详解linux下auto工具制作Makefile源码包(制作篇)
  2. Struts2--标签tag
  3. unordered_map源码解析和个人理解
  4. AjaxPro2在Asp.net中的基本用法
  5. Linux ibm mq 教程,IBM MQ 使用指南
  6. 新JSON绑定库JSON-B发布公开预览版
  7. JPA 2.1: What is new
  8. svc android,在android中,如何使用 Svc WCF服务_android_开发99编程知识库
  9. 聊聊网络游戏同步那点事
  10. BZOJ3508 开灯 [校内NOIP2018模拟20181027] 密码锁
  11. 蓝宝石英语怎么读_黑金和蓝宝石
  12. 拓扑排序 详解 + 并查集 详解 + 最小生成树详解
  13. 哪个不是python合法的标识符_哪个不是python合法标识符
  14. 前景检测算法(十五)--LOBSTER算法
  15. python(九):函数、匿名函数 lambda
  16. 印刷业ERP系统解决方案
  17. 模拟电子技术(学习笔记 1)
  18. 火车头采集的文件发布到服务器上,火车头采集器图片采集上传设置
  19. 【系统篇 / 配置】❀ 06. 添加桌面图标 ❀ Windows Server 2016
  20. 免费复制/下载收费文档的方法总结

热门文章

  1. 无敌!阿里巴巴开源落地可实操项目:网约车+咚宝商城+英雄传说
  2. IntelliJ IDEA中的神仙插件(写代码必备)
  3. 数据库审计是什么意思?作用是什么?
  4. “耳朵人艺术”敲响了中国,也叫醒了世界
  5. Java 照片墙_js实现照片墙功能实例
  6. Python学习之处理excel一:读取excel以及基本操作
  7. 详细解析汇兑损益结转
  8. 我也曾对架构师的力量一无所知
  9. 《Python语言程序设计》王恺 王志 机械工业出版社 第七章 I/O编程与异常 课后习题答案
  10. python win7正常的文件路径到win10报错_如何更改临时文件路径_win10怎么更改临时文件夹的路径图文步骤...