Android AudioTrack/AudioRecord -wav文件读取3

 

下面是一个网上一个大神写的,在公司测过了,还不错.

还可以写一个构造函数:

initReader(InputStream is){
fis = new FileInputStream(is);  
bis = new BufferedInputStream(fis);  
}eg:call it as following :
InputStream is=Activity.getResource().openRawResource();
InitReader(is);

openRawResource(r.raw.wavname);上面漏了资源.

 

// filename: WaveFileReader.java
// RobinTang
// 2012-08-23import java.io.*;public class WaveFileReader {private String filename = null;private int[][] data = null;private int len = 0;private String chunkdescriptor = null;static private int lenchunkdescriptor = 4;private long chunksize = 0;static private int lenchunksize = 4;private String waveflag = null;static private int lenwaveflag = 4;private String fmtubchunk = null;static private int lenfmtubchunk = 4;private long subchunk1size = 0;static private int lensubchunk1size = 4;private int audioformat = 0;static private int lenaudioformat = 2;private int numchannels = 0;static private int lennumchannels = 2;private long samplerate = 0;static private int lensamplerate = 2;private long byterate = 0;static private int lenbyterate = 4;private int blockalign = 0;static private int lenblockling = 2;private int bitspersample = 0;static private int lenbitspersample = 2;private String datasubchunk = null;static private int lendatasubchunk = 4;private long subchunk2size = 0;static private int lensubchunk2size = 4;private FileInputStream fis = null;private BufferedInputStream bis = null;private boolean issuccess = false;public WaveFileReader(String filename) {this.initReader(filename);}// 判断是否创建wav读取器成功public boolean isSuccess() {return issuccess;}// 获取每个采样的编码长度,8bit或者16bitpublic int getBitPerSample(){return this.bitspersample;}// 获取采样率public long getSampleRate(){return this.samplerate;}// 获取声道个数,1代表单声道 2代表立体声public int getNumChannels(){return this.numchannels;}// 获取数据长度,也就是一共采样多少个public int getDataLen(){return this.len;}// 获取数据// 数据是一个二维数组,[n][m]代表第n个声道的第m个采样值public int[][] getData(){return this.data;}private void initReader(String filename){this.filename = filename;try {fis = new FileInputStream(this.filename);bis = new BufferedInputStream(fis);this.chunkdescriptor = readString(lenchunkdescriptor);if(!chunkdescriptor.endsWith("RIFF"))throw new IllegalArgumentException("RIFF miss, " + filename + " is not a wave file.");this.chunksize = readLong();this.waveflag = readString(lenwaveflag);if(!waveflag.endsWith("WAVE"))throw new IllegalArgumentException("WAVE miss, " + filename + " is not a wave file.");this.fmtubchunk = readString(lenfmtubchunk);if(!fmtubchunk.endsWith("fmt "))throw new IllegalArgumentException("fmt miss, " + filename + " is not a wave file.");this.subchunk1size = readLong();this.audioformat = readInt();this.numchannels = readInt();this.samplerate = readLong();this.byterate = readLong();this.blockalign = readInt();this.bitspersample = readInt();this.datasubchunk = readString(lendatasubchunk);if(!datasubchunk.endsWith("data"))throw new IllegalArgumentException("data miss, " + filename + " is not a wave file.");this.subchunk2size = readLong();this.len = (int)(this.subchunk2size/(this.bitspersample/8)/this.numchannels);this.data = new int[this.numchannels][this.len];for(int i=0; i<this.len; ++i){for(int n=0; n<this.numchannels; ++n){if(this.bitspersample == 8){this.data[n][i] = bis.read();}else if(this.bitspersample == 16){this.data[n][i] = this.readInt();}}}issuccess = true;} catch (Exception e) {e.printStackTrace();}finally{try{if(bis != null)bis.close();if(fis != null)fis.close();}catch(Exception e1){e1.printStackTrace();}}}private String readString(int len){byte[] buf = new byte[len];try {if(bis.read(buf)!=len)throw new IOException("no more data!!!");} catch (IOException e) {e.printStackTrace();}return new String(buf);}private int readInt(){byte[] buf = new byte[2];int res = 0;try {if(bis.read(buf)!=2)throw new IOException("no more data!!!");res = (buf[0]&0x000000FF) | (((int)buf[1])<<8);} catch (IOException e) {e.printStackTrace();}return res;}private long readLong(){long res = 0;try {long[] l = new long[4];for(int i=0; i<4; ++i){l[i] = bis.read();if(l[i]==-1){throw new IOException("no more data!!!");}}res = l[0] | (l[1]<<8) | (l[2]<<16) | (l[3]<<24);} catch (IOException e) {e.printStackTrace();}return res;}private byte[] readBytes(int len){byte[] buf = new byte[len];try {if(bis.read(buf)!=len)throw new IOException("no more data!!!");} catch (IOException e) {e.printStackTrace();}return buf;}
}

 

 

转载于:https://www.cnblogs.com/MMLoveMeMM/articles/3612724.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

db2数据库连接数 linux_介绍一款数据库管理工具DBeaver

之前连接MySQL一直使用的是navicate&#xff0c;挺好用的&#xff0c;不过是个付费软件&#xff0c;一直想找一款免费开源的软件来替代。今天偶然间发现DBeaver&#xff0c;这是一款基于java开发的数据库工具&#xff0c;而且可以支持Windows、Linux、MacOS多个平台&#xff0c…

jqgrid mvc_jqGrid,REST,AJAX和Spring MVC集成

jqgrid mvc两年多以前&#xff0c;我写了一篇关于如何在Struts2中实现优雅的CRUD的文章。 实际上&#xff0c;我必须就该主题写两篇文章&#xff0c;因为该主题如此广泛。 今天&#xff0c;我采用了一套更为流行的&#xff0c;完善的框架和库&#xff0c;采用了更为轻量级的现代…

android view getwidth 0,Android中View.getWidth()和View.getMeasuredWidth()的区别

一。也許很多童鞋對getWidth()和getMeasuredWidth()的用法有很多的不解&#xff0c;這兩者之間有什麼樣的不同呢&#xff0c;網上也有各種不同的版本&#xff0c;但大多數都大同小異&#xff0c;從這個地方CtrlC,到另一個地方CtrlV,沒有把問題說透&#xff0c;也有一部分文章誤…

微信利用PHP创建自定义菜单的方法

在使用通用接口前&#xff0c;你需要做以下两步工作&#xff1a;1.拥有一个微信公众账号&#xff0c;并获取到appid和appsecret&#xff08;在公众平台申请内测资格&#xff0c;审核通过后可获得&#xff09;2.通过获取凭证接口获取到access_token注意&#xff1a;access_token…

ChronicleMap –具有堆外内存的Java体系结构

我的上一篇文章是在几周前写的&#xff0c;在收到一些有效的反馈后&#xff0c;我想澄清几点&#xff0c;作为本文的序言。 “ 使用零垃圾创建数百万个对象 ”的主要收获应该是&#xff0c;使用Chronicle&#xff0c;在编写Java程序时&#xff0c;您不会“局限于”使用jvm分配…

HTML滚动条S默认最小值,css修改滚动条默认样式

html代码:这是内容111这里是内容222这里是内容333css代码:.inner{width: 265px;height: 400px;position: absolute;top: 33px;left: 13px;/*cursor: pointer;*/overflow:hidden;}.innerbox{overflow-x: hidden;overflow-y: auto;color: #000;font-size: .7rem;font-family: &qu…

下列不属于html5语义元素,HTML5 新的语义元素

HTML5 提供了新的语义元素来明确一个Web页面的不同部分:HTML5中新的语义元素HTML5 元素标签定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分。根据W3C HTML5文档: section 包含了一组内容及其标题。WWFThe World Wide Fund for Nature (WWF) is....HTM…

【Android Developers Training】 81. 解析XML数据

注&#xff1a;本文翻译自Google官方的Android Developers Training文档&#xff0c;译者技术一般&#xff0c;由于喜爱安卓而产生了翻译的念头&#xff0c;纯属个人兴趣爱好。 原文链接&#xff1a;http://developer.android.com/training/basics/network-ops/xml.html 可扩展…

java核心面试_不正确的核心Java面试答案

java核心面试总览 在Internet上&#xff0c;Java面试问题和答案从一个网站复制到另一个网站。 这可能意味着错误或过时的答案可能永远不会得到纠正。 这是一些不太正确或已经过时的问题和答案。 即是Java 5.0之前的版本。 每个提供的问题后都有两个部分。 斜体的第一部分指示…

outlook自动保存html,当创建一个新的HTML电子邮件时保持默认的Outlook格式

我想创建一个简单的脚本来创建一个HTML消息&#xff0c;并且我想保留尽可能多的默认值。当创建一个新的HTML电子邮件时保持默认的Outlook格式在我的情况下&#xff0c;当我使用Home创建一个新邮件->新邮件时&#xff0c;它总是会创建一个默认字体[Calibri 11]&#xff0c;格…

干加个偏旁可以变成什么字_面试官:“干”字加一笔,变成什么字?回答王和午字不对...

随着大学生的增多&#xff0c;如今的求职者进入职场&#xff0c;想到一份心仪的工作&#xff0c;最让人头疼的就是面试&#xff0c;越来越多的企业都需要全能型的人才&#xff0c;从而在面试的时候不仅要考核专业知识&#xff0c;面试官还要费尽心思出各种各样的题来考验求职者…

Oracle研学-查询

学自B站黑马程序员 1.单表查询 //查询水表编号为 30408 的业主记录 select * from T_OWNERS where watermeter30408 //查询业主名称包含“刘”的业主记录 select * from t_owners where name like %刘% //查询业主名称包含“刘”的并且门牌号包含 5 的业主记录 select * from…

国际站html代码,国际站必须看得懂的HTML代码

国际站必须看得懂的HTML代码國産〇〇柒大家每天都忙着找关键词&#xff0c;忙着写标题&#xff0c;忙着做各种的优化。目的就是想把自己的产品排名到前面&#xff0c;获得更多的曝光&#xff0c;带来更多的询盘。在这个过程中我们是客服同事也是一名搜索优化人员&#xff0c;但…

phoengap–node+websocket在线聊天室

该实验项目基于&#xff1a; phonegapnodewebsocket可以应用于android 和 ios平台。 已经测试通过。以下是测试的图&#xff1a; 首先是用node 架设服务器。 基本上都node 基于websocket的。 主要是对message做处理和判断来进行输出和逻辑处理 而客户都&#xff0c;由于android…

中音萨克斯指法表图_萨克斯的几个特殊指法记忆和几个概念

大家在平常的练习和吹奏的时候&#xff0c;经常会出现找不到相应的指法的情况&#xff0c;有经验的萨友们通过长时间的摸索&#xff0c;会找到其中的一些规律。实际上&#xff0c;能看懂“一图在手&#xff0c;不用再担心找不到指法了”里面的表格&#xff0c;可以起到同样的作…

计算机网络结构示意图,计算机网络原理-计算机网络体系结构.pdf

绪论  计算机 网络概述一、计算机网络的发展过程截止 目前为止 &#xff0c;计算机网络 已发展到第 四代 &#xff0c; 即出现了第四代计算机网&#xff0c;它们是&#xff1a;第一代 &#xff1a;面 向终端 的计算机 网络第二代 &#xff1a;分组交换计算机 网络 (包括国际标…

git配置和使用

1、注册bitbucket用户登录bitbucket站点https://bitbucket.org/注册一个用户&#xff0c;注册后用户名为linjiqin&#xff0c;邮箱为linjiqindkhs.com。 2、Create repository(仓库)登录bitbucket&#xff0c;点击“Create”按钮会出现一个Create a new repository页面&#xf…

操作系统饥饿现象_操作系统心得体会

一、操作系统1.基本概念操作系统简称OS&#xff0c;是配置在计算机硬件上的第一层软件&#xff0c;它能够有效的组织和管理计算机系统中的硬件和软件资源&#xff0c;合理的组织计算机工作流程&#xff0c;控制程序的执行&#xff0c;并向用户提供各种服务功能。OS是现代计算机…

组态王怎么做超级曲线_鸭肉怎么做?大叔教你红烧鸭块,香气扑鼻,简单易做,超级好吃...

晚餐总是要有硬菜上桌的&#xff0c;所谓硬菜无非是鸡鸭鱼肉&#xff0c;买只鸭子吧&#xff0c;倒也是不在乎哪天吃大荤&#xff0c;鸭子算是减肥食谱&#xff0c;对高血压&#xff0c;心脏病有一定的好处&#xff0c;另外&#xff0c;癌症病人不能吃鸡&#xff0c;鸭子却是可…

计算机应用能力考试ppt,计算机应用能力考试题库

计算机应用能力考试题库计算机应用能力考试在考试设计时&#xff0c;不能要求所有的应试人员考相同的内容&#xff0c;不同的应试人员应能根据自身的特点和需要选择适合自己的考试内容。以下是关于计算机应用能力考试题库&#xff0c;希望大家认真阅读!单选题1.PowerPoint2003的…