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

  • 相关阅读:
    Java并发之Thread类的使用
    剑指Offer
    总结下2017之前的几年
    解决一个特定的负载均衡下定时任务执行多次的问题
    《MYSQL》----字符串的复杂函数,检索的七-天-排-重
    科学计数法的转换
    小伙伴自言自语发给我的聊天记录,一句都看不懂
    记录下一个让我调了一天的失误
    记录一个从没见过的bug
    吐槽下
  • 原文地址:https://www.cnblogs.com/danju/p/3716194.html
Copyright © 2011-2022 走看看