我在VS2010中手动执行以下操作。1.读入2个wave文件,分别为"1.wav“和"2.wav”。2.在1.wav中间插入2.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;但两个wave文件的某些参数并不相同。例如1.wav的SampleRate是8000,2.wav的SampleRate是44100,那么out.wav的SampleRate是多少?
发布于 2012-02-14 04:42:33
out.wav的采样率是您必须明确定义的。在您的示例中,您可以选择out.wav为44100,这是两个值中较好的一个,但您需要通过插值或在其间添加零来对1.wav进行上采样。或者,您可以将其保持在8000,并通过低通滤波器对其进行下采样2.wav,以过滤出比奈奎斯特更高的频率(新采样率的一半),然后将样本放在中间。无论哪种方式,你都必须明确决定你想要做什么。
https://stackoverflow.com/questions/9267568
复制相似问题