最近在做一款变声App,其中就用到了将pcm格式转wave格式,下面贴出源代码,希望带有需求的童鞋有帮助!!!这里是c++语言写的,也可以用java实现。当然java调用native函数要用到jni技术。具体jni技术自己到网路上找找资料。

Cpp文件Pcm2Wave.cpp

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "wave.h"
#include "constant.h"class Pcm2Wave
{
private: WAVE_HEAD wave_head;FILE* src_pcm_file;FILE* dest_wave_file;
public:Pcm2Wave(){ memcpy(&wave_head.riff_char, "RIFF", 4);memcpy(&wave_head.wave, "WAVE", 4);memcpy(&wave_head.fmt, "fmt ", 4);memcpy(&wave_head.fccID, "fact", 4);memcpy(&wave_head.data_field, "data", 4);wave_head.package_len = 0;wave_head.format_len = 16;wave_head.fixed =  1;wave_head.channel_number = 1;//  采样率 long int samplespersecwave_head.sample_rate = 8000 ;// 量化数 int bitpersamples=8或16wave_head.bits_per_sample = 16;//  采样一次占字节数 int blockaligwave_head.byte_per_sample = wave_head.channel_number *  wave_head.bits_per_sample / 8; //NumChannels * BitsPerSample/8//  每秒播放字节数 long int bytepersecwave_head.byte_rate =     wave_head.sample_rate * wave_head.channel_number * wave_head.bits_per_sample / 8; //SampleRate * NumChannels * BitsPerSample /8
        wave_head.id = 4;wave_head.dwSize = 0;wave_head.data_len = 0;}Pcm2Wave(WAVE_HEAD* pwave_head){if(pwave_head != NULL){memcpy(&wave_head, pwave_head, sizeof(*pwave_head));}}~Pcm2Wave(){}void set_channel(short pchannel_number){wave_head.channel_number = pchannel_number;wave_head.byte_per_sample = wave_head.channel_number *  wave_head.bits_per_sample / 8;wave_head.byte_rate =     wave_head.sample_rate * wave_head.channel_number * wave_head.bits_per_sample / 8;}void set_sample_rate(int  psample_rate){wave_head.sample_rate = psample_rate;wave_head.byte_rate =     wave_head.sample_rate * wave_head.channel_number * wave_head.bits_per_sample / 8;}void set_bits_per_sample(short pbits_per_sample){wave_head.bits_per_sample =   pbits_per_sample;wave_head.byte_per_sample = wave_head.channel_number *  wave_head.bits_per_sample / 8;wave_head.byte_rate =     wave_head.sample_rate * wave_head.channel_number * wave_head.bits_per_sample / 8;}int change(const char *srcfile, const char *dsetfile){int nFileLen = 0;int nSize = sizeof(wave_head);printf("wave的头的大小: %d\n", nSize);src_pcm_file = NULL;dest_wave_file = NULL;src_pcm_file = fopen(srcfile, "rb");if (src_pcm_file == NULL)return -1;dest_wave_file = fopen(dsetfile, "wb+");if (dest_wave_file == NULL)return -2;int nWrite = fwrite(&wave_head, 1, nSize, dest_wave_file);if (nWrite != nSize){fclose(src_pcm_file);fclose(dest_wave_file);return -3;}while( !feof(src_pcm_file)){char readBuf[4096];int nRead = fread(readBuf, 1, 4096, src_pcm_file);if (nRead > 0){fwrite(readBuf, 1, nRead, dest_wave_file); }nFileLen += nRead;}printf("文件指针位置: %d\n", ftell(dest_wave_file));//将目的文件的游标指针指向文件的开头printf("nFileLen的大小: %d\n nSize的大小:%d\n", nFileLen, nSize);fseek(dest_wave_file, 0, SEEK_SET);wave_head.package_len = nFileLen - 8 + nSize;wave_head.data_len = nFileLen;nWrite = fwrite(&wave_head, 1, nSize, dest_wave_file);if (nWrite != nSize){fclose(src_pcm_file);fclose(dest_wave_file);return -4;}fclose(src_pcm_file);fclose(dest_wave_file);return 0;        }};int main(char args [])
{Pcm2Wave pp;pp.set_sample_rate(11025);pp.change("jj.pcm", "jj.wav");return 0 ;
}

wave.h头文件

typedef struct WAVE_HEAD
{char riff_char[4];   // "RIFF" char riff_id[4]="RIFF"int package_len ;    //文件总长-8 long int size0=文总长-8char wave[4];char fmt[4];int format_len;   short fixed;      //  fmttag=0x01short channel_number;  //  channel=1 或2int   sample_rate;   //  采样率 long int samplespersecint   byte_rate;   //  每秒播放字节数 long int bytepersecshort byte_per_sample;   //  采样一次占字节数 int blockalign=声道数*量化数/8short bits_per_sample;   // 量化数 int bitpersamples=8或16char fccID[4]; // must be "fact"int  id; // must be 0x4int dwSize; // 暂时没发现有啥用char  data_field[4];   //  data_id="data"int  data_len;  //  采样数据字节数 long int size2=文长-44

} WAVE_HEAD;

转载于:https://www.cnblogs.com/wxishang1991/p/5586830.html

如何将Pcm格式的音频文件转换成Wave格式的文件相关推荐

  1. 怎样把其他格式的音频文件转换成MP3格式的

    这个问题就比较简单了,如今科技这么发达,使用专业的音频格式转换器来转换就好了.比如我之前也从朋友那得知到一款音频转换器比较简单好用,后来一直在使用发现功能还比较全面且操作简单.所以跟着小编一起来看看吧 ...

  2. 音频转换器评估:将音乐文件转换成MP3格式的最佳工具

    音频转换器是一种非常有用的工具,可以将音乐文件转换为不同的格式,例如MP3.有许多音频转换器可供选择,但是要选择最佳的工具需要考虑多个因素,例如易用性.音质.速度.功能等.在本文中,我们将对一些最佳的 ...

  3. 3m格式的文件怎么转换成mp3_怎么将电脑上的mp4文件转换成mp3格式

    mp4的视频文件格式固然很方便,但是也有一些缺陷,比如就有很多用户就在为怎么把mv视频转换为mp3音频格式而烦恼 ,在mv中谈到好听的歌,但是由于文件太大不能随时收听,如果转换为mp3格式就更加方便了 ...

  4. 怎么把录音文件转换成mp3格式,3个高效方法

    在工作中,我们可能会选择录音来记录会议内容,以便之后整理会议纪要.但是我们知道录音文件的格式千差万别.比如在手机上录制的音频文件通常以M4A.WAV等多种格式存储,然而这些格式可能会存在不兼容的问题, ...

  5. 音频如何转换成mp3格式?详细步骤解析

    音频如何转换成mp3格式?我以为对音频转mp3这个小小的技巧,大家肯定都有方法自己转换的,就是没想到最近几天接连不断的有人咨询我音频怎么转mp3格式, 因为这样的东西对我而言真的信手拈来,所以在我的思 ...

  6. 怎么将电脑上的mp4文件转换成mp3格式

    mp4的视频文件格式固然很方便,但是也有一些缺陷,比如就有很多用户就在为怎么把mv视频转换为mp3音频格式而烦恼 ,在mv中谈到好听的歌,但是由于文件太大不能随时收听,如果转换为mp3格式就更加方便了 ...

  7. netbeans html 格式化,在NetBeans IDE8.0中怎么把html的文件转换成jsp格式

    满意答案 在NetBeans IDE8.0中把html的文件转换成jsp格式的方法: 将html页改成jsp有两种方法,第一种是直接修改html文件,另一种是新建jsp文件. 1.原始html文件内容 ...

  8. 如何将.crt的ssl证书文件转换成.pem格式

    如何将.crt的ssl证书文件转换成.pem格式 摘自:https://www.landui.com/help/show-8127 2018-07-04 14:55:41 2158次 准备:有一台安装 ...

  9. pythonutf8转gbk,Python实现把utf-8格式的文件转换成gbk格式的文件

    需求:将utf-8格式的文件转换成gbk格式的文件 实现代码如下: 代码如下: def ReadFile(filePath,encoding="utf-8″): with codecs.op ...

最新文章

  1. 【黑客浅析】像黑客一样思考
  2. EDM营销中HTML邮件设计方法和技巧
  3. 工厂方法注入(静态和非静态)
  4. python closure闭包 lambda表达式
  5. 笔记(2015-07-24)
  6. linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现
  7. 哪种语言 连接 oracle,Go语言连接Oracle(就我这个最全)
  8. MVC Tutorial Movie DIY
  9. 读书记录(持续更新...)
  10. Win11怎么查看设备管理器?Win11设备管理器在哪里打开?
  11. PHP学习笔记二(面向对象和表单)
  12. JSP技术的优缺点介绍
  13. 什么是请求报文和响应报文?
  14. 如何手动启动消防广播_消防广播使用操作流程
  15. 江北机场停车费多少钱一天,重庆江北机场附近停车场哪里最便宜
  16. dparsf是什么_回顾:第五届DPABI/DPARSF特训营暨DPABISurf加强营
  17. 记一次js逆向详细过程
  18. 关于DOS-BOX的使用方法
  19. 在vue中使用canvas实现简单特效(下雨天)
  20. 关于vs2010(C++ 工程)的异常问题(this is not a valid c/c++ file .CPP)的解决(C++ 初学者)

热门文章

  1. C语言高级编程:深入理解const
  2. 看徐坤的话剧《性情男女》
  3. Javascript获取文件自身URL路径
  4. FIFO IP设计说明
  5. stright 在mysql_MySQL优化的奇技淫巧之STRAIGHT_JOIN
  6. swoolephp加密_PHP中给源代码加密的几种方法
  7. springboot主线程_Springboot对多线程的支持详解
  8. ant构建项目迁移到gradle_Gradle构建工具
  9. 图像色调,饱和度,对比度等相关定义
  10. oracle替代变量输出,【Oracle】替代变量