怎么从一个avi文件中提出音频数据,并存储为wav文件

zjkqxjsxb 2008-02-20 03:44:46
我的想法是:打开一个文件,提取音频流,打开另一个文件用于写入,对avi操作不太清楚,请指出我的代码怎么写才对
AVIFileInit();

LONG hr;
PAVIFILE fileAVI;
PAVIFILE fileWav;
PAVISTREAM audioData;
AVISTREAMINFO ainf;

CString s;

hr=AVIFileOpen(&fileAVI,"d:\\lian02.avi",OF_READ,NULL);
if(AVIFileOpen(&fileWav,"d:\\out.wav",OF_CREATE,NULL))
MessageBox("error write");
if(!hr){
switch(AVIFileGetStream(fileAVI,&audioData,streamtypeAUDIO,0)){
case AVIERR_NODATA:
MessageBox("没有数据");
break;
case AVIERR_MEMORY:
MessageBox("内存不够");
break;
default:
s.Format("%d",AVIStreamLength(audioData));
MessageBox(s);
AVIStreamInfo(audioData,&ainf,sizeof(ainf));
s.Format("%d",ainf.dwRate);
MessageBox(s);
if(AVIMakeFileFromStreams(&fileWav,NULL,&audioData))MessageBox("Error");
AVIFileWriteData(
AVIFileRelease(fileWav);

}
}
...全文
95 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjkqxjsxb 2008-02-20
  • 打赏
  • 举报
回复
我也想使用ds来,用render渲染20分钟的avi,等生成wav文件是不是也得20分钟啊(我不太清楚),所以考虑用avi文件处理.
zjkqxjsxb 2008-02-20
  • 打赏
  • 举报
回复
解决了,使用AVISave比较简单,虽然不太清楚具体参数什么意思
AVICOMPRESSOPTIONS options,*p;

p=&options;
memset(&options, 0, sizeof(AVICOMPRESSOPTIONS));
AVISaveOptions(m_hWnd, 0, 1,&audioData,&p);
AVISave("d:\\audiostr.avi", NULL, NULL, 1,audioData, &options);
AVISaveOptionsFree(1, &p);
rageliu 2008-02-20
  • 打赏
  • 举报
回复
可以解析avi格式
可以使用ds,这个现成filter就可以构建Graph,且兼容多种格式
asddg67 2008-02-20
  • 打赏
  • 举报
回复
avilib
相关推荐
发帖
图形处理/算法

1.9w+

社区成员

VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
帖子事件
创建了帖子
2008-02-20 03:44
社区公告
暂无公告