Qt由pcm数据生成wav文件

void AudioGrabber::saveWave(const QString &fileName, const QByteArray
&raw, const QAudioFormat &format)
{
    typedef
struct{
        char
riff_fileid[4];//"RIFF"
        DWORD
riff_fileLen;
        char
waveid[4];//"WAVE"

        char
fmt_chkid[4];//"fmt"
        DWORD
fmt_chkLen;

       
WORD    wFormatTag;        /*
format type */
       
WORD   
nChannels;         /* number of channels
(i.e. mono, stereo, etc.) */
       
DWORD   nSamplesPerSec;    /* sample rate
*/
        DWORD  
nAvgBytesPerSec;   /* for buffer estimation
*/
        WORD   
nBlockAlign;       /* block size of data
*/
        WORD   
wBitsPerSample;

        char
data_chkid[4];//"DATA"
        WORD
data_chkLen;
    }WaveHeader;

   
WaveHeader wh={0};
    strcpy(wh.riff_fileid,
"RIFF");
    wh.riff_fileLen = raw.length() +
32;
    strcpy(wh.waveid, "WAVE");

   
strcpy(wh.fmt_chkid, "fmt ");
    wh.fmt_chkLen =
16;

    wh.wFormatTag =
WAVE_FORMAT_PCM;
    wh.nChannels =
format.channels();
    wh.nSamplesPerSec =
format.frequency();
    wh.wBitsPerSample =
format.sampleSize();
    wh.nBlockAlign
=wh.nChannels*wh.wBitsPerSample/8;
    wh.nAvgBytesPerSec
=   wh.nBlockAlign*wh.nSamplesPerSec;

   
strcpy(wh.data_chkid, "data");
    wh.data_chkLen =
raw.length();

    QFile f(fileName);
   
f.open(QFile::WriteOnly);
    f.write((char *)&wh,
sizeof(wh));
    f.write(raw);
   
f.close();
}

时间: 2024-10-12 02:31:00

Qt由pcm数据生成wav文件的相关文章

解码aac,并生成wav文件

小程在讲多媒体的编码格式时,详细介绍过pcm跟aac等概念.简单来说,pcm是没有压缩的数字信号,可以直接用于音频输出,而aac则是一种音频编码格式,需要解码后才能用于音频输出. aac编码格式,已经是一种很常见的音频编码格式,硬件设备(比如电脑芯片.手机.其它终端设备)都集成了aac的解码功能,而且有些系统还提供了调用硬件解码的接口,比如iOS上的AudioConverterRef接口.Android上的MediaCodec接口等. 从性能的角度,使用硬件解码是最佳选择,但如果从通用的角度,使

matlab结构体形式保存数据生成.mat文件< 转>

2015年 参加天池大数据竞赛 为了建立模型,打算基于matlab使用Random Forest Algorithm的工具包 该工具包我在此分享给大家,http://yunpan.cn/cVXsjQvh8ARcx  访问密码 30a3 该工具包导入的数据格式就是我如下所说的封装方式,因此,在使用该算法包时,需要把自己的数据进行封装一下. 通过matlab打开,可以知道twonorm.mat里面还封装了两个.mat文件. 我们看看工具包的作者给的tutorial 部分源码如下: 的源码如下: 说明

使用IO流将数据库中数据生成一个文件,结果使用Notepad++打开部分数据结尾出现NUL

场景描述: 项目中通过java代码中从数据库中查询一系列数据,对数据做相应处理,然后通过字符流将数据写如一个新生成的文件中,将该项目部署在linux服务器上,最后生成的文件拿到本地使用notepad++打开会在部分数据末尾出现NUL 排查原因: NUL在C语言中是一个特殊字符常量'\0',空字符 在linux中处理字符串写入,每行字符串结尾如果是空字符,linux就会用'\0'表示 解决方案: 使用该文件时将NUL替换为“ ”空字符 public static String trimnull(S

java将数据生成csv文件

1,httpRequest接口触发进程[或者可以换成其他方式触发] /** * 出入库生成CSV文件 * @param req * @param params * @return */@RequestMapping(value = "explanCsvFileToOrder")ResponseMessage explanCsvFileToOrder(HttpServletRequest req, @RequestParam Map<String, String> param

C++生成简单WAV文件(二)

既然生成声音已经没问题了,现在简单生成一下一个类似蜂鸣器的随机音乐文件.(注:可能书写有格式不正式之类问题,反正思路应该没问题,测试可以运行) 因为是随机,那么先弄个产生随机数的类 R.H和R.CPP R.H: #ifndef R_H_ #define R_H_ class R{ public: R(); int suiji(int i); int suiji(); private: int shuchu(int number); }; #endif /* R_H_ */ R.cpp: #inc

批量生成sqlldr文件,高速卸载数据

SQL*Loader 是用于将外部数据进行批量高速加载的数据库的最高效工具,可用于将多种平面格式文件加载到Oracle数据库.SQL*Loader支持传统路径模式以及直接路径这两种加载模式.关于SQL*Loader的具体用法可以参考Oracle Utilities 手册或者SQL*Loader使用方法.那么如何以SQL*Loader能识别的方式高效的卸载数据呢? Tom大师为我们提供了一个近乎完美的解决方案,是基于exp/imp,Datapump方式迁移数据的有力补充.本文基于此给出描述,并通过

实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多都是以json数据填充的.在导入excel填充json数据到页面时,真的让我差点吐血了.在做这个导入导出的时候,那一个礼拜都是黑暗的. 好了,废话不多说了,我今天就给大家展示这个两个功能的核心点,excel生成json数据和json数据生成excel文件. 一:从上传文件到服务器,后台java解析,

Java千万级别数据生成文件思路和优化

一年前写过一个百万级别数据库数据生成配置xml文件的程序,程序目的是用来把数据库里面的数据生成xml文件.程序可以配置多少文件生成到一个文件中去. 程序刚开始设计的时候说的是最多百万级别数据,最多50W数据生成到一个xml文件里面去,所以在做测试的时候自己也只是造了100W的数据并没有做过多数据量的测试,然后问题就来了....由于程序使用的局点数据量巨大,需要生成xml文件的客户资料接近千万级别的程度,而现场对程序的配置大约是100W条数据生成一个xml文件里面去,程序在这样的大数据量下面偶尔会

【U1结业机试题】新闻内容管理系统:解析XML文件读取Html模版生成网页文件

一.作业要求: 1.在xml文件中创建新闻节点news,包含标题.作者.日期.正文等信息 2.创建HTML模板文件 3.读取xml中所有新闻信息,并使用新闻信息替换模板文件中占位符,从而为每一条新闻生成一个HTML静态页面 二.参考思路: 阶段1:创建xml 添加测试记录不少于三条 阶段2:创建HTML模板文件 阶段3:从xml读取新闻信息,保存在泛型集合中 阶段4:读取模板文件 训练要点: Reader类 需求说明: 读取HTML模板文件news.template,为使用新闻信息替换其中的占位