求救!!!!!!!!!有wav文件的问题 怎样将两个wav文件合并成一个文件。例如:文件a.wav播放"欢迎",文件b.wav播放"光临",合并后播放“欢迎光临”最好能提供代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 两个wav格式一样还好办,要是采样率等不同可麻烦了。看看wav文件格式吧,相同格式的应该不难。 to: NowCan 能不能跟你单独谈谈 QQ:59666073 你可以看文件头,如果wav文件格式一样的话,可以直接加在后面,如果不一个的话可以通过录音的方法。 NowCan(能量、激情、雨水、彩虹——雷雨云),cat_dog(看谁都不顺眼): 两个wav文件格式是相同的,怎样去合并呢 cat_dog(看谁都不顺眼): 我没有wav文件格式的资料,能给些代码或这方面的资料吗? E-mail: [email protected] 其实wav格式文件很简单,文件头+实际数据.所以你需要将第二个Wav文件的文件头去掉,将剩下的数据合并到第一个文件中.同时还要修改第一个文件的文件头数据中的数据总长度等.文件头的结构如下:typedef struct{ char fieldlabel[4] ; //"RIFF" DWORD fieldlen; //从08H开始到文件末尾字节数 char formattype[4] ; //"WAVE" 57 41 56 45 char subfmt[4] ; // "fmt " 66 6D 74 20 DWORD fmtlen1; //A_LAW 12 00 00 00 PCM 10 00 00 00 WORD fmtlen2; //A_LAW 06 00 PCM 01 00 WORD channel; // 声道数 01 00 DWORD ration; //采样率 40 1F 00 00 DWORD rations; //每秒平均字节数 40 1F 00 00 WORD block; //块调整 01 00 WORD bits; //采样BITS数 08 00 WORD reserve; //A_LAW 00 00 char data[4]; //"data" 64 61 74 61 DWORD datalen; // 采样数据总字节数} WAVEHEAD; 考,我刚才给发的贴子竟然没有成功,搞的我还要从写一次.其实wav文件很简单,文件头+实际数据.所以你只需要将第二文件文件头去掉,将其数据合并到第一个文件中.同时需要将第一个文件文件头中关于实际数据长度的结构参数修改一下.文件头结构如下:typedef struct{ char fieldlabel[4] ; //"RIFF" DWORD fieldlen; //从08H到文件末尾的字符数 char formattype[4] ; //"WAVE" 57 41 56 45 char subfmt[4] ; // "fmt " 66 6D 74 20 DWORD fmtlen1; //A_LAW 12 00 00 00 PCM 10 00 00 00 WORD fmtlen2; //A_LAW 06 00 PCM 01 00 WORD channel; // ÉùµÀÊý¡¡¡¡01 00 DWORD ration; //²ÉÑùÂÊ¡¡¡¡40 1F 00 00 DWORD rations; //ÿÃëƽ¾ù×Ö½ÚÊý¡¡40 1F 00 00 WORD block; //¿éµ÷Õû¡¡¡¡01 00 WORD bits; //²ÉÑùBITSÊý 08 00 WORD reserve; //A_LAW 00 00 char data[4]; //"data" 64 61 74 61 DWORD datalen; // 采样数据总字节数} WAVEHEAD; cat_dog(看谁都不顺眼),birdinfly(birdinfly): 以下的程序合并没成功,不知道错在哪里?void CWaveIncorporateDlg::OnWaveIncorporate() { CFile f1,f2,f3; CFileException e; WAVEHEAD w1,w2,w3; BYTE *c1,*c2,*c3; int n1,n2,n3; f1.Open("d:/ab.wav",CFile::modeRead); f2.Open("d:/cd.wav",CFile::modeRead); f3.Open("d:/ok.wav",CFile::modeCreate|CFile::modeWrite); f1.Read(&w1,sizeof(WAVEHEAD)); f2.Read(&w2,sizeof(WAVEHEAD)); w3=w1; n1=w1.fieldlen; n2=w2.fieldlen; n3=n1+n2; w3.fieldlen=n3; c1=new BYTE[n1]; c2=new BYTE[n2]; c3=new BYTE[n3]; f1.Read(c1,n1); f2.Read(c2,n2); memcpy(c3,c1,n1); memcpy(c3+n1,c2,n2); f3.Write(&w3,sizeof(WAVEHEAD)); f3.Write(c3,n3); f1.Close(); f2.Close(); f3.Close(); delete c1; delete c2; delete c3;} cat_dog(看谁都不顺眼),birdinfly(birdinfly): 以下的程序合并没成功,不知道错在哪里?void CWaveIncorporateDlg::OnWaveIncorporate() {CFile f1,f2,f3;CFileException e;WAVEHEAD w1,w2,w3;BYTE *c1,*c2,*c3;int n1,n2,n3;f1.Open("d:/ab.wav",CFile::modeRead);f2.Open("d:/cd.wav",CFile::modeRead);f3.Open("d:/ok.wav",CFile::modeCreate¦CFile::modeWrite);f1.Read(&w1,sizeof(WAVEHEAD));f2.Read(&w2,sizeof(WAVEHEAD));w3=w1;n1=w1.fieldlen;n2=w2.fieldlen;n3=n1+n2;w3.fieldlen=n3;c1=new BYTE[n1];c2=new BYTE[n2];c3=new BYTE[n3];f1.Read(c1,n1);f2.Read(c2,n2);memcpy(c3,c1,n1);memcpy(c3+n1,c2,n2);f3.Write(&w3,sizeof(WAVEHEAD));f3.Write(c3,n3);f1.Close();f2.Close();f3.Close();delete c1;delete c2;delete c3;} 以下的程序合并没成功,不知道错在哪里?void CWaveIncorporateDlg::OnWaveIncorporate() {CFile f1,f2,f3;CFileException e;WAVEHEAD w1,w2,w3;BYTE *c1,*c2,*c3;int n1,n2,n3;f1.Open("d:/ab.wav",CFile::modeRead);f2.Open("d:/cd.wav",CFile::modeRead);f3.Open("d:/ok.wav",CFile::modeCreate¦CFile::modeWrite);f1.Read(&w1,sizeof(WAVEHEAD));f2.Read(&w2,sizeof(WAVEHEAD));w3=w1;n1=w1.fieldlen;n2=w2.fieldlen;n3=n1+n2;w3.fieldlen=n3;c1=new BYTE[n1];c2=new BYTE[n2];c3=new BYTE[n3];f1.Read(c1,n1);f2.Read(c2,n2);memcpy(c3,c1,n1);memcpy(c3+n1,c2,n2);f3.Write(&w3,sizeof(WAVEHEAD));f3.Write(c3,n3);f1.Close();f2.Close();f3.Close();delete c1;delete c2;delete c3;} 我用的好象可以呀!typedef struct{ char fieldlabel[4] ; //"RIFF" DWORD fieldlen; //从08H到文件末尾的字符数 char formattype[4] ; //"WAVE" 57 41 56 45 char subfmt[4] ; // "fmt " 66 6D 74 20 DWORD fmtlen1; //A_LAW 12 00 00 00 PCM 10 00 00 00 WORD fmtlen2; //A_LAW 06 00 PCM 01 00 WORD channel; // Éù µÀÊý¡¡¡¡01 00 DWORD ration; //²ÉÑùÂÊ¡¡¡¡40 1F 00 00 DWORD rations; //ÿÃëƽ¾ù×Ö½ÚÊý¡¡40 1F 00 00WORD block; //¿éµ÷Õû¡¡¡¡01 00 WORD bits; //²ÉÑùBITSÊý 08 00 WORD reserve; //A_LAW 00 00 char data[4]; //"data" 64 61 74 61 DWORD datalen; // 采样数据总字节数} WAVEHEAD; 有一些WAV的头文件是44个字节,有的是46个字节。在上面的结够体中fmtlen1=0x10时,reserve必须去掉,fmtlen1=0x12时,reserve不能去掉,所以你最好定义两个结构体。 cat_dog(看谁都不顺眼): 我的文件里的fmtlen1=0x12,我的代码为什么没有合并成功呢?是程序不对吗?你的程序可以E-mail给我参考一下吗? E-mail: [email protected] cat_dog(看谁都不顺眼): 我的文件里的fmtlen1=0x12,我的代码为什么没有合并成功呢?是程序不对吗?你的程序可以E-mail给我参考一下吗? E-mail: [email protected] 请教一个关于定时器延时的问题 static控件换行问题 如何响应标准键盘以外的键盘消息 怎么为下面代码块写一个 可供别人直接调用的 函数接口 关于渐进显示对话框 ********如何比较2个多边形是否相同********** 调试问题??(在线等) 类指针的简单问题 请问在那可以找到项目? 怎样知道电脑已经连上Internet? For IIS上ASP脚本调用的组件应该如何配置,如何实现? 在线的朋友看看嘛!!! 要不然今晚没得吃了。。。。。。。。
QQ:59666073
两个wav文件格式是相同的,怎样去合并呢
我没有wav文件格式的资料,能给些代码或这方面的资料吗?
E-mail: [email protected]
所以你需要将第二个Wav文件的文件头去掉,将剩下的数据合并到第一个文件中.
同时还要修改第一个文件的文件头数据中的数据总长度等.
文件头的结构如下:
typedef struct
{
char fieldlabel[4] ; //"RIFF"
DWORD fieldlen; //从08H开始到文件末尾字节数
char formattype[4] ; //"WAVE" 57 41 56 45
char subfmt[4] ; // "fmt " 66 6D 74 20
DWORD fmtlen1; //A_LAW 12 00 00 00 PCM 10 00 00 00
WORD fmtlen2; //A_LAW 06 00 PCM 01 00
WORD channel; // 声道数 01 00
DWORD ration; //采样率 40 1F 00 00
DWORD rations; //每秒平均字节数 40 1F 00 00
WORD block; //块调整 01 00
WORD bits; //采样BITS数 08 00
WORD reserve; //A_LAW 00 00
char data[4]; //"data" 64 61 74 61
DWORD datalen; // 采样数据总字节数
} WAVEHEAD;
所以你只需要将第二文件文件头去掉,将其数据合并到第一个文件中.
同时需要将第一个文件文件头中关于实际数据长度的结构参数修改一下.
文件头结构如下:typedef struct
{
char fieldlabel[4] ; //"RIFF"
DWORD fieldlen; //从08H到文件末尾的字符数
char formattype[4] ; //"WAVE" 57 41 56 45
char subfmt[4] ; // "fmt " 66 6D 74 20
DWORD fmtlen1; //A_LAW 12 00 00 00 PCM 10 00 00 00
WORD fmtlen2; //A_LAW 06 00 PCM 01 00
WORD channel; // ÉùµÀÊý¡¡¡¡01 00
DWORD ration; //²ÉÑùÂÊ¡¡¡¡40 1F 00 00
DWORD rations; //ÿÃëƽ¾ù×Ö½ÚÊý¡¡40 1F 00 00
WORD block; //¿éµ÷Õû¡¡¡¡01 00
WORD bits; //²ÉÑùBITSÊý 08 00
WORD reserve; //A_LAW 00 00
char data[4]; //"data" 64 61 74 61
DWORD datalen; // 采样数据总字节数
} WAVEHEAD;
以下的程序合并没成功,不知道错在哪里?
void CWaveIncorporateDlg::OnWaveIncorporate()
{
CFile f1,f2,f3;
CFileException e;
WAVEHEAD w1,w2,w3;
BYTE *c1,*c2,*c3;
int n1,n2,n3;
f1.Open("d:/ab.wav",CFile::modeRead);
f2.Open("d:/cd.wav",CFile::modeRead);
f3.Open("d:/ok.wav",CFile::modeCreate|CFile::modeWrite);
f1.Read(&w1,sizeof(WAVEHEAD));
f2.Read(&w2,sizeof(WAVEHEAD));
w3=w1; n1=w1.fieldlen;
n2=w2.fieldlen;
n3=n1+n2;
w3.fieldlen=n3; c1=new BYTE[n1];
c2=new BYTE[n2];
c3=new BYTE[n3]; f1.Read(c1,n1);
f2.Read(c2,n2);
memcpy(c3,c1,n1);
memcpy(c3+n1,c2,n2); f3.Write(&w3,sizeof(WAVEHEAD));
f3.Write(c3,n3); f1.Close();
f2.Close();
f3.Close(); delete c1;
delete c2;
delete c3;
}
以下的程序合并没成功,不知道错在哪里?
void CWaveIncorporateDlg::OnWaveIncorporate()
{
CFile f1,f2,f3;
CFileException e;
WAVEHEAD w1,w2,w3;
BYTE *c1,*c2,*c3;
int n1,n2,n3;f1.Open("d:/ab.wav",CFile::modeRead);
f2.Open("d:/cd.wav",CFile::modeRead);
f3.Open("d:/ok.wav",CFile::modeCreate¦CFile::modeWrite);f1.Read(&w1,sizeof(WAVEHEAD));
f2.Read(&w2,sizeof(WAVEHEAD));
w3=w1;n1=w1.fieldlen;
n2=w2.fieldlen;
n3=n1+n2;
w3.fieldlen=n3;c1=new BYTE[n1];
c2=new BYTE[n2];
c3=new BYTE[n3];f1.Read(c1,n1);
f2.Read(c2,n2);memcpy(c3,c1,n1);
memcpy(c3+n1,c2,n2);f3.Write(&w3,sizeof(WAVEHEAD));
f3.Write(c3,n3);f1.Close();
f2.Close();
f3.Close();delete c1;
delete c2;
delete c3;
}
void CWaveIncorporateDlg::OnWaveIncorporate()
{
CFile f1,f2,f3;
CFileException e;
WAVEHEAD w1,w2,w3;
BYTE *c1,*c2,*c3;
int n1,n2,n3;f1.Open("d:/ab.wav",CFile::modeRead);
f2.Open("d:/cd.wav",CFile::modeRead);
f3.Open("d:/ok.wav",CFile::modeCreate¦CFile::modeWrite);f1.Read(&w1,sizeof(WAVEHEAD));
f2.Read(&w2,sizeof(WAVEHEAD));
w3=w1;n1=w1.fieldlen;
n2=w2.fieldlen;
n3=n1+n2;
w3.fieldlen=n3;c1=new BYTE[n1];
c2=new BYTE[n2];
c3=new BYTE[n3];f1.Read(c1,n1);
f2.Read(c2,n2);memcpy(c3,c1,n1);
memcpy(c3+n1,c2,n2);f3.Write(&w3,sizeof(WAVEHEAD));
f3.Write(c3,n3);f1.Close();
f2.Close();
f3.Close();delete c1;
delete c2;
delete c3;
}
{
char fieldlabel[4] ; //"RIFF"
DWORD fieldlen; //从08H到文件末尾的字符数
char formattype[4] ; //"WAVE" 57 41 56 45
char subfmt[4] ; // "fmt " 66 6D 74 20
DWORD fmtlen1; //A_LAW 12 00 00 00 PCM 10 00 00 00
WORD fmtlen2; //A_LAW 06 00 PCM 01 00
WORD channel; // Éù µÀÊý¡¡¡¡01 00
DWORD ration; //²ÉÑùÂÊ¡¡¡¡40 1F 00 00
DWORD rations; //ÿÃëƽ¾ù×Ö½ÚÊý¡¡40 1F 00 00
WORD block; //¿éµ÷Õû¡¡¡¡01 00
WORD bits; //²ÉÑùBITSÊý 08 00
WORD reserve; //A_LAW 00 00
char data[4]; //"data" 64 61 74 61
DWORD datalen; // 采样数据总字节数
} WAVEHEAD;
有一些WAV的头文件是44个字节,有的是46个字节。在上面的结够体中fmtlen1=0x10时,reserve必须去掉,fmtlen1=0x12时,reserve不能去掉,所以你最好定义两个结构体。
我的文件里的fmtlen1=0x12,我的代码为什么没有合并成功呢?是程序不对吗?你的程序可以E-mail给我参考一下吗?
E-mail: [email protected]
我的文件里的fmtlen1=0x12,我的代码为什么没有合并成功呢?是程序不对吗?你的程序可以E-mail给我参考一下吗?
E-mail: [email protected]