0

VS2010では手動で次のことを行っています。1.「1.wav」と「2.wav」の2つのWaveファイルを読み込みます。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つのwaveファイルのパラメーターの一部は同じではありません。たとえば、1.wavのSampleRateが8000、2.wavのSampleRateが44100の場合、out.wavのSampleRateはどうなりますか?

4

1 に答える 1

1

out.wavのサンプリングレートは、明示的に定義する必要があるものです。あなたの例では、out.wavを44100に選択することができますが、2つのうちの良い方ですが、補間または間にゼロを追加して1.wavをアップサンプリングする必要があります。または、ローパスフィルターを通過させてナイキスト(新しいサンプリングレートの半分)を超える周波数をフィルターで除去し、サンプルを中央にドロップすることで、8000に維持して2.wavをダウンサンプリングすることもできます。いずれにせよ、あなたはあなたが何をしたいのかを明確に決定しなければならないでしょう。

詳細-https ://ccrma.stanford.edu/~jos/resample/

于 2012-02-13T20:42:32.677 に答える