合并2个wav文件后生成的波的采样率

时间:2012-02-13 20:31:32

标签: c++ audio wav sample-rate

我手动在VS2010中执行以下操作。 1.读入2个波形文件,说“1.wav”和“2.wav”。 2.将2.wav插入1.wav的中间。 3.将结果波形流写入输出文件“out.wav”。

我现在可以使用以下结构成功读入wave文件

typedef struct {
    char ChunkID[4];        /* RIFF Header      */ //Magic header
    unsigned long ChunkSize;      /* RIFF Chunk Size  */
    char Format[4];        /* WAVE Header      */
    char Subchunk1ID[4];         /* FMT header       */
    unsigned long Subchunk1Size;  /* Size of the fmt chunk                                */
    unsigned short AudioFormat;    /* Audio format 1=PCM,6=mulaw,7=alaw, 257=IBM Mu-Law, 258=IBM A-Law, 259=ADPCM */
    unsigned short NumChannels;      /* Number of channels 1=Mono 2=Sterio                   */
    unsigned long SampleRate;  /* Sampling Frequency in Hz                             */
    unsigned long ByteRate;    /* bytes per second */
    unsigned short BlockAlign;     /* 2=16-bit mono, 4=16-bit stereo */
    unsigned short BitsPerSample;  /* Number of bits per sample      */
    char Subchunk2ID[4]; /* "data"  string   */
    unsigned long Subchunk2Size;  /* Sampled data length    */
    BYTE Data[18000];
} WavFile;

但是2波文件的一些参数并不相同。例如,如果1.wav的SampleRate为8000,则2.wav的SampleRate为44100,那么out.wav的SampleRate是什么?

1 个答案:

答案 0 :(得分:1)

out.wav的采样率是您必须明确定义的。在您的示例中,您可以选择out.wav为44100,两者中的较好者,但您需要通过插值或在两者之间添加零来上采样1.wav。或者,您可以通过低通滤波器将其保持在8000和下采样2.wav,以滤除超过奈奎斯特(新采样率的一半)的频率,然后将样本放在中间。无论如何,你必须明确决定你想做什么。

更多信息 - https://ccrma.stanford.edu/~jos/resample/