pcm数据生成wav文件
2016-03-17 10:34
507 查看
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();
}
相关文章推荐
- android.view.WindowManager$BadTokenException: Unable to add window
- android开发——跨进程通讯数据传递(一)
- [poj 1062] 昂贵的聘礼
- IOS --- OC与Swift混编(转)
- convertToNodeSpace 与 convertToWorldSpace 的使用
- div里面的margin-top失效
- iOS 界面调试利器Reveal
- Oracle Study之--Oracle 11gR2构建RAC之hosts文件故障
- Objective-C 中的 instancetype 和 id 关键字
- tomcat
- 超额认购:oversubscription
- 为什么我不倾向于录用培训机构的学生
- Android反编译与混淆技术完全解析(上)
- Linux下查找特定时间创建的文件
- react 属性与状态 学习笔记
- Winform端上传图片到服务器
- HDU2653 Waiting ten thousand years for Love (三维广搜+优先队列)
- Android UI 之 下拉刷新和上拉加载
- 玩转binlog实现灵活的MySQL数据恢复
- C语言指针