• 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();
    }

  • 相关阅读:
    模板
    待补 http://acm.hdu.edu.cn/showproblem.php?pid=6602
    待补 http://acm.hdu.edu.cn/showproblem.php?pid=6583
    2019 Multi-University Training Contest 1
    洛谷
    2019 Multi-University Training Contest 2
    模板
    2019牛客暑期多校训练营(第三场)
    2019牛客暑期多校训练营(第三场)
    模板
  • 原文地址:https://www.cnblogs.com/developer-ios/p/5286377.html
Copyright © 2020-2023  润新知