zoukankan      html  css  js  c++  java
  • 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();
    }

  • 相关阅读:
    关于Monitor和lock的锁操作 笔记
    模型/数据验证(System.ComponentModel.DataAnnotations)笔记
    NSIS 打包操作
    关于IE和非IE浏览器的一些差异笔记
    Wpf 字典触发器
    关于MongoDB在C#的使用
    Apache JMeter
    关于在移动端方面的css应用
    关于csc.exe
    增量运算符+=和*=的原理与不可变序列增量运算效率低的原因
  • 原文地址:https://www.cnblogs.com/developer-ios/p/5286377.html
Copyright © 2011-2022 走看看