如何将Pcm格式的音频文件转换成Wave格式的文件
最近在做一款变声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格式的文件相关推荐
- 怎样把其他格式的音频文件转换成MP3格式的
这个问题就比较简单了,如今科技这么发达,使用专业的音频格式转换器来转换就好了.比如我之前也从朋友那得知到一款音频转换器比较简单好用,后来一直在使用发现功能还比较全面且操作简单.所以跟着小编一起来看看吧 ...
- 音频转换器评估:将音乐文件转换成MP3格式的最佳工具
音频转换器是一种非常有用的工具,可以将音乐文件转换为不同的格式,例如MP3.有许多音频转换器可供选择,但是要选择最佳的工具需要考虑多个因素,例如易用性.音质.速度.功能等.在本文中,我们将对一些最佳的 ...
- 3m格式的文件怎么转换成mp3_怎么将电脑上的mp4文件转换成mp3格式
mp4的视频文件格式固然很方便,但是也有一些缺陷,比如就有很多用户就在为怎么把mv视频转换为mp3音频格式而烦恼 ,在mv中谈到好听的歌,但是由于文件太大不能随时收听,如果转换为mp3格式就更加方便了 ...
- 怎么把录音文件转换成mp3格式,3个高效方法
在工作中,我们可能会选择录音来记录会议内容,以便之后整理会议纪要.但是我们知道录音文件的格式千差万别.比如在手机上录制的音频文件通常以M4A.WAV等多种格式存储,然而这些格式可能会存在不兼容的问题, ...
- 音频如何转换成mp3格式?详细步骤解析
音频如何转换成mp3格式?我以为对音频转mp3这个小小的技巧,大家肯定都有方法自己转换的,就是没想到最近几天接连不断的有人咨询我音频怎么转mp3格式, 因为这样的东西对我而言真的信手拈来,所以在我的思 ...
- 怎么将电脑上的mp4文件转换成mp3格式
mp4的视频文件格式固然很方便,但是也有一些缺陷,比如就有很多用户就在为怎么把mv视频转换为mp3音频格式而烦恼 ,在mv中谈到好听的歌,但是由于文件太大不能随时收听,如果转换为mp3格式就更加方便了 ...
- netbeans html 格式化,在NetBeans IDE8.0中怎么把html的文件转换成jsp格式
满意答案 在NetBeans IDE8.0中把html的文件转换成jsp格式的方法: 将html页改成jsp有两种方法,第一种是直接修改html文件,另一种是新建jsp文件. 1.原始html文件内容 ...
- 如何将.crt的ssl证书文件转换成.pem格式
如何将.crt的ssl证书文件转换成.pem格式 摘自:https://www.landui.com/help/show-8127 2018-07-04 14:55:41 2158次 准备:有一台安装 ...
- pythonutf8转gbk,Python实现把utf-8格式的文件转换成gbk格式的文件
需求:将utf-8格式的文件转换成gbk格式的文件 实现代码如下: 代码如下: def ReadFile(filePath,encoding="utf-8″): with codecs.op ...
最新文章
- 【黑客浅析】像黑客一样思考
- EDM营销中HTML邮件设计方法和技巧
- 工厂方法注入(静态和非静态)
- python closure闭包 lambda表达式
- 笔记(2015-07-24)
- linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现
- 哪种语言 连接 oracle,Go语言连接Oracle(就我这个最全)
- MVC Tutorial Movie DIY
- 读书记录(持续更新...)
- Win11怎么查看设备管理器?Win11设备管理器在哪里打开?
- PHP学习笔记二(面向对象和表单)
- JSP技术的优缺点介绍
- 什么是请求报文和响应报文?
- 如何手动启动消防广播_消防广播使用操作流程
- 江北机场停车费多少钱一天,重庆江北机场附近停车场哪里最便宜
- dparsf是什么_回顾:第五届DPABI/DPARSF特训营暨DPABISurf加强营
- 记一次js逆向详细过程
- 关于DOS-BOX的使用方法
- 在vue中使用canvas实现简单特效(下雨天)
- 关于vs2010(C++ 工程)的异常问题(this is not a valid c/c++ file .CPP)的解决(C++ 初学者)