当前位置: 首页 > news >正文

教育培训网站建站免费私人网站建设平台

教育培训网站建站,免费私人网站建设平台,江门地区网站建设公司,电竞网站方案设计在我们开发中,会遇到pcm格式的音频转为wav,下面讲解一下具体怎么实现: 第一步:pcm文件转wav文件 /*** pcm文件转wav文件** param inFilename 源文件路径* param outFilename 目标文件路径* param deleteOrg 是否删除源文件*/…

在我们开发中,会遇到pcm格式的音频转为wav,下面讲解一下具体怎么实现:

第一步:pcm文件转wav文件

/*** pcm文件转wav文件** @param inFilename  源文件路径* @param outFilename 目标文件路径* @param deleteOrg   是否删除源文件*/
public void pcmToWav(String inFilename, String outFilename, boolean deleteOrg) {FileInputStream in;FileOutputStream out;long totalAudioLen;long totalDataLen;long longSampleRate = mSampleRate;int channels = 2;long byteRate = 16 * mSampleRate * channels / 8;byte[] data = new byte[mBufferSize];try {in = new FileInputStream(inFilename);out = new FileOutputStream(outFilename);totalAudioLen = in.getChannel().size();totalDataLen = totalAudioLen + 36;writeWaveFileHeader(out, totalAudioLen, totalDataLen,longSampleRate, channels, byteRate);while (in.read(data) != -1) {out.write(data);}in.close();out.close();if (deleteOrg) {new File(inFilename).delete();}} catch (IOException e) {e.printStackTrace();}
}

第二步:加入wav文件头

/* * 加入wav文件头*/
private void writeWaveFileHeader(FileOutputStream out, long totalAudioLen,long totalDataLen, long longSampleRate, int channels, long byteRate)throws IOException {byte[] header = new byte[44];header[0] = 'R'; // RIFF/WAVE headerheader[1] = 'I';header[2] = 'F';header[3] = 'F';header[4] = (byte) (totalDataLen & 0xff);header[5] = (byte) ((totalDataLen >> 8) & 0xff);header[6] = (byte) ((totalDataLen >> 16) & 0xff);header[7] = (byte) ((totalDataLen >> 24) & 0xff);header[8] = 'W'; //WAVEheader[9] = 'A';header[10] = 'V';header[11] = 'E';header[12] = 'f'; // 'fmt ' chunkheader[13] = 'm';header[14] = 't';header[15] = ' ';header[16] = 16; // 4 bytes: size of 'fmt ' chunkheader[17] = 0;header[18] = 0;header[19] = 0;header[20] = 1; // format = 1header[21] = 0;header[22] = (byte) channels;header[23] = 0;header[24] = (byte) (longSampleRate & 0xff);header[25] = (byte) ((longSampleRate >> 8) & 0xff);header[26] = (byte) ((longSampleRate >> 16) & 0xff);header[27] = (byte) ((longSampleRate >> 24) & 0xff);header[28] = (byte) (byteRate & 0xff);header[29] = (byte) ((byteRate >> 8) & 0xff);header[30] = (byte) ((byteRate >> 16) & 0xff);header[31] = (byte) ((byteRate >> 24) & 0xff);header[32] = (byte) (2 * 16 / 8); // block alignheader[33] = 0;header[34] = 16; // bits per sampleheader[35] = 0;header[36] = 'd'; //dataheader[37] = 'a';header[38] = 't';header[39] = 'a';header[40] = (byte) (totalAudioLen & 0xff);header[41] = (byte) ((totalAudioLen >> 8) & 0xff);header[42] = (byte) ((totalAudioLen >> 16) & 0xff);header[43] = (byte) ((totalAudioLen >> 24) & 0xff);out.write(header, 0, 44);
}

下面附上全部的代码,写成相对应的工具类:

public class PcmToWavUtil {private int mBufferSize; //缓存的音频大小private int mSampleRate = 44100;// 此处的值必须与录音时的采样率一致private int mChannel = AudioFormat.CHANNEL_IN_STEREO; //立体声private int mEncoding = AudioFormat.ENCODING_PCM_16BIT;private static class SingleHolder {static PcmToWavUtil mInstance = new PcmToWavUtil();}public static PcmToWavUtil getInstance() {return SingleHolder.mInstance;}public PcmToWavUtil() {this.mBufferSize = AudioRecord.getMinBufferSize(mSampleRate, mChannel, mEncoding);}/*** @param sampleRate sample rate、采样率* @param channel    channel、声道* @param encoding   Audio data format、音频格式*/public PcmToWavUtil(int sampleRate, int channel, int encoding) {this.mSampleRate = sampleRate;this.mChannel = channel;this.mEncoding = encoding;this.mBufferSize = AudioRecord.getMinBufferSize(mSampleRate, mChannel, mEncoding);}/*** pcm文件转wav文件** @param inFilename  源文件路径* @param outFilename 目标文件路径* @param deleteOrg   是否删除源文件*/public void pcmToWav(String inFilename, String outFilename, boolean deleteOrg) {FileInputStream in;FileOutputStream out;long totalAudioLen;long totalDataLen;long longSampleRate = mSampleRate;int channels = 2;long byteRate = 16 * mSampleRate * channels / 8;byte[] data = new byte[mBufferSize];try {in = new FileInputStream(inFilename);out = new FileOutputStream(outFilename);totalAudioLen = in.getChannel().size();totalDataLen = totalAudioLen + 36;writeWaveFileHeader(out, totalAudioLen, totalDataLen,longSampleRate, channels, byteRate);while (in.read(data) != -1) {out.write(data);}in.close();out.close();if (deleteOrg) {new File(inFilename).delete();}} catch (IOException e) {e.printStackTrace();}}public void pcmToWav(String inFilename, String outFilename) {pcmToWav(inFilename, outFilename, false);}/*** 加入wav文件头*/private void writeWaveFileHeader(FileOutputStream out, long totalAudioLen,long totalDataLen, long longSampleRate, int channels, long byteRate)throws IOException {byte[] header = new byte[44];header[0] = 'R'; // RIFF/WAVE headerheader[1] = 'I';header[2] = 'F';header[3] = 'F';header[4] = (byte) (totalDataLen & 0xff);header[5] = (byte) ((totalDataLen >> 8) & 0xff);header[6] = (byte) ((totalDataLen >> 16) & 0xff);header[7] = (byte) ((totalDataLen >> 24) & 0xff);header[8] = 'W'; //WAVEheader[9] = 'A';header[10] = 'V';header[11] = 'E';header[12] = 'f'; // 'fmt ' chunkheader[13] = 'm';header[14] = 't';header[15] = ' ';header[16] = 16; // 4 bytes: size of 'fmt ' chunkheader[17] = 0;header[18] = 0;header[19] = 0;header[20] = 1; // format = 1header[21] = 0;header[22] = (byte) channels;header[23] = 0;header[24] = (byte) (longSampleRate & 0xff);header[25] = (byte) ((longSampleRate >> 8) & 0xff);header[26] = (byte) ((longSampleRate >> 16) & 0xff);header[27] = (byte) ((longSampleRate >> 24) & 0xff);header[28] = (byte) (byteRate & 0xff);header[29] = (byte) ((byteRate >> 8) & 0xff);header[30] = (byte) ((byteRate >> 16) & 0xff);header[31] = (byte) ((byteRate >> 24) & 0xff);header[32] = (byte) (2 * 16 / 8); // block alignheader[33] = 0;header[34] = 16; // bits per sampleheader[35] = 0;header[36] = 'd'; //dataheader[37] = 'a';header[38] = 't';header[39] = 'a';header[40] = (byte) (totalAudioLen & 0xff);header[41] = (byte) ((totalAudioLen >> 8) & 0xff);header[42] = (byte) ((totalAudioLen >> 16) & 0xff);header[43] = (byte) ((totalAudioLen >> 24) & 0xff);out.write(header, 0, 44);}}
http://www.mfbz.cn/news/172/

相关文章:

  • 做网站找投资人10条重大新闻
  • 做的最好的理财网站如何做网络营销?
  • 阿里云轻量服务器wordpressseo 适合哪些行业
  • 做免费网站推广开头语百度广告投放
  • wordpress免安阳seo
  • 深圳网站制作公司可以给香港网站做维护和开发吗seo营销推广平台
  • 常州市网站建设公司自己创建一个网站需要多少钱
  • 代做标书网站专业seo公司
  • 收企业做网站备案my63777免费域名查询2023年
  • 软件开发工程师和java开发工程师海外网站seo优化
  • 购物网站的搜索功能是怎么做的大泽山seo快速排名
  • 常德市 网站建设seo快速排名站外流量推广
  • 青岛做网站推广公司哪家好营销网站建设门户
  • wordpress系统介绍网站推广优化技巧
  • 做网站荣耀体验服官网百家号权重查询
  • 有哪些做问卷调查挣钱的网站优化设计三年级上册答案
  • s.w.g wordpress长沙seo咨询
  • 网站建设策略数字经济发展情况报告
  • b2b平台软件长春网站seo
  • 北京市住房和城乡建设委员会官方网站烟台网络推广
  • 苍溪规划和建设局网站云搜索神器
  • 无棣网页设计引擎优化搜索
  • 做网站哪个语言快武汉seo排名优化
  • 我想在阿里巴巴做卫生纸的网站郑州专业的网站公司
  • dedecms做电影网站商丘优化公司
  • 重庆技术支持 网站建设公司最近热点新闻事件
  • 网站开发有限公司网站seo入门基础教程书籍
  • wordpress 大型网站搜狗网站收录
  • 织梦本地安装网站千锋教育
  • 3d建模师容易找工作吗windows7系统优化工具