android 字节转wav,android开发:把一个byte数组转换成wav音频文件,并且播放
============问题描述============
如题,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音频文件,并且播放相关推荐
- Java将图片压缩质量后返回一个byte数组
项目为了降低存储生成,需要将图片质量压缩大小不变,并且全程要在内存中进行,所以我写了下面的方法.方法中传入参数有两个一个是图片的byte数组,一个是压缩质量(压缩质量在0-1之间).处理完毕后会返回一 ...
- Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)
Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲) 准备 1.储存在raw文件夹 2. ...
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- Java 音乐播放器开发学习之——音频文件的播放
Java Sound API是javaSE平台提供底层的(low-level)处理声音接口,可以实现音频文件的播放. 其核心包括: AudioSystem AudioInputStream Audio ...
- Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutputStream用法)
Java字节序 http://origin100.iteye.com/blog/267165 /** * 通信格式转换 * * Java和一些windows编程语言如c.c++.delphi所写的网络 ...
- Java字节序,java整型数与网络字节序 byte[] 数组转换关系
Java字节序 http://origin100.iteye.com/blog/267165 /** * 通信格式转换 * * Java和一些windows编程语言如c.c++.delphi所写的网络 ...
- java byte(字节_Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutpu......
/** * 通信格式转换 * * Java和一些windows编程语言如c.c++.delphi所写的网络程序进行通讯时,需要进行相应的转换 * 高.低字节之间的转换 * windows的字节序为低字 ...
- 音频格式简介和PCM转换成WAV
1 音频格式简介 AudioRecord录制的音频文件格式为PCM,MediaPlayer无法播放PCM格式文件,AudioTrack可以播放PCM格式文件. PCM(Puls Code Modula ...
- kux格式怎么转换成mp3_把MP3格式的音频转换成WAV格式
有时候工作中我们在处理音频的过程中,需要转换音频的格式,以便于更好的使用.例如,可能会要求把MP3格式的音频转换成其他的音频格式.这时候如何解决是一个问题.今天我就和大家介绍好用的音频转换器,可以快速 ...
最新文章
- 详解linux下auto工具制作Makefile源码包(制作篇)
- Struts2--标签tag
- unordered_map源码解析和个人理解
- AjaxPro2在Asp.net中的基本用法
- Linux ibm mq 教程,IBM MQ 使用指南
- 新JSON绑定库JSON-B发布公开预览版
- JPA 2.1: What is new
- svc android,在android中,如何使用 Svc WCF服务_android_开发99编程知识库
- 聊聊网络游戏同步那点事
- BZOJ3508 开灯 [校内NOIP2018模拟20181027] 密码锁
- 蓝宝石英语怎么读_黑金和蓝宝石
- 拓扑排序 详解 + 并查集 详解 + 最小生成树详解
- 哪个不是python合法的标识符_哪个不是python合法标识符
- 前景检测算法(十五)--LOBSTER算法
- python(九):函数、匿名函数 lambda
- 印刷业ERP系统解决方案
- 模拟电子技术(学习笔记 1)
- 火车头采集的文件发布到服务器上,火车头采集器图片采集上传设置
- 【系统篇 / 配置】❀ 06. 添加桌面图标 ❀ Windows Server 2016
- 免费复制/下载收费文档的方法总结
热门文章
- 无敌!阿里巴巴开源落地可实操项目:网约车+咚宝商城+英雄传说
- IntelliJ IDEA中的神仙插件(写代码必备)
- 数据库审计是什么意思?作用是什么?
- “耳朵人艺术”敲响了中国,也叫醒了世界
- Java 照片墙_js实现照片墙功能实例
- Python学习之处理excel一:读取excel以及基本操作
- 详细解析汇兑损益结转
- 我也曾对架构师的力量一无所知
- 《Python语言程序设计》王恺 王志 机械工业出版社 第七章 I/O编程与异常 课后习题答案
- python win7正常的文件路径到win10报错_如何更改临时文件路径_win10怎么更改临时文件夹的路径图文步骤...