输入问题?请问我使用AVI函数获得了一个AVI文件的音频流以后,怎么将其转换为声音??急急~~谢谢!

一分之千 2006-08-29 02:50:13
如题,使用AVI函数获得了一个AVI文件的音频流以后,怎么将其转换为声音?? avi函数只能获取了AVI文件的文件流,如果事视频流可以通过提取每一帧图像贴图重现,但是声音如何实现?多谢指点!
...全文
143 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一分之千 2006-08-29
  • 打赏
  • 举报
回复
怎么没人指教啊?大侠们帮我解决一下啊,着急用!
一分之千 2006-08-29
  • 打赏
  • 举报
回复
loomman(一剑) 你的这个代码是不是针对wav格式的文件的读取的?我从AVI文件中提取出音频流以后是一个PAVISTREAM格式的变量,如何转化?
一剑 2006-08-29
  • 打赏
  • 举报
回复
// Global variables.

HANDLE hData = NULL; // handle of waveform data memory
HPSTR lpData = NULL; // pointer to waveform data memory

void WriteWaveData(void)
{
HWAVEOUT hWaveOut;
HGLOBAL hWaveHdr;
LPWAVEHDR lpWaveHdr;
HMMIO hmmio;
UINT wResult;
HANDLE hFormat;
WAVEFORMAT *pFormat;
DWORD dwDataSize;

// Open a waveform device for output using window callback.

if (waveOutOpen((LPHWAVEOUT)&hWaveOut, WAVE_MAPPER,
(LPWAVEFORMAT)pFormat,
(LONG)hwndApp, 0L, CALLBACK_WINDOW))
{
MessageBox(hwndApp,
"Failed to open waveform output device.",
NULL, MB_OK | MB_ICONEXCLAMATION);
LocalUnlock(hFormat);
LocalFree(hFormat);
mmioClose(hmmio, 0);
return;
}

// Allocate and lock memory for the waveform data.

hData = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, dwDataSize );
if (!hData)
{
MessageBox(hwndApp, "Out of memory.",
NULL, MB_OK | MB_ICONEXCLAMATION);
mmioClose(hmmio, 0);
return;
}
if ((lpData = GlobalLock(hData)) == NULL)
{
MessageBox(hwndApp, "Failed to lock memory for data chunk.",
NULL, MB_OK | MB_ICONEXCLAMATION);
GlobalFree(hData);
mmioClose(hmmio, 0);
return;
}

// Read the waveform data subchunk.

if(mmioRead(hmmio, (HPSTR) lpData, dwDataSize) != (LRESULT)dwDataSize)
{
MessageBox(hwndApp, "Failed to read data chunk.",
NULL, MB_OK | MB_ICONEXCLAMATION);
GlobalUnlock(hData);
GlobalFree(hData);
mmioClose(hmmio, 0);
return;
}

// Allocate and lock memory for the header.

hWaveHdr = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE,
(DWORD) sizeof(WAVEHDR));
if (hWaveHdr == NULL)
{
GlobalUnlock(hData);
GlobalFree(hData);
MessageBox(hwndApp, "Not enough memory for header.",
NULL, MB_OK | MB_ICONEXCLAMATION);
return;
}

lpWaveHdr = (LPWAVEHDR) GlobalLock(hWaveHdr);
if (lpWaveHdr == NULL)
{
GlobalUnlock(hData);
GlobalFree(hData);
MessageBox(hwndApp,
"Failed to lock memory for header.",
NULL, MB_OK | MB_ICONEXCLAMATION);
return;
}

// After allocation, set up and prepare header.

lpWaveHdr->lpData = lpData;
lpWaveHdr->dwBufferLength = dwDataSize;
lpWaveHdr->dwFlags = 0L;
lpWaveHdr->dwLoops = 0L;
waveOutPrepareHeader(hWaveOut, lpWaveHdr, sizeof(WAVEHDR));

// Now the data block can be sent to the output device. The
// waveOutWrite function returns immediately and waveform
// data is sent to the output device in the background.

wResult = waveOutWrite(hWaveOut, lpWaveHdr, sizeof(WAVEHDR));
if (wResult != 0)
{
waveOutUnprepareHeader(hWaveOut, lpWaveHdr,
sizeof(WAVEHDR));
GlobalUnlock( hData);
GlobalFree(hData);
MessageBox(hwndApp, "Failed to write block to device",
NULL, MB_OK | MB_ICONEXCLAMATION);
return;
}
}
关于Matlab处理avi视频视频转换软件-traffic.rar 近一段时间matalb处理视频的挺多的……很多会员反映matlab对一些视频利用函数aviread(或者mmreader)可以,别的不可以。 这是因为matalb中函数aviread对读取avi的视频比较苛刻…… 你利用函数aviinfo就可以得到你的视频的压缩格式,据我所见到的视频来说, aviread支持无压缩格式的avi和 'Cinepak'格式的avi文件和'Indeo5'压缩格式的avi函数mmreader支持的格式更加广泛一些,但是仍然不是很全…… math在帖子里讲过解决办法:首先利用函数aviinfo查看你的视频的压缩格式,然后下载相应的解压缩编码即可…… 根据前人的指引:下载一个视频转换器即可…… 如果你的视频格式不是aviread或者mmreader所支持的……就可以利用视频转换器进行设置…… WinAVI 9.0就是一个不错的软件……由于附件很大,值给出一个链接……绝对可以用的…… http://www.hldsjxx.com/Soft/ShowSoft.asp?SoftID=9 下面给出一个例子……例子中的视频时matalb自带的视频文件……我的matlab为2010a…… 例如我的viptraffic不能够被aviread所读取,提示错误: mov=aviread; Warning: AVIREAD will be removed in a future release. Use MMREADER instead. > In aviread at 29 ??? Error using ==> aviread at 84 Unable to locate decompressor to decompress video stream 此时即可利用此软件进行转换,转为'Cinepak'压缩格式的avi视频…… 转化完成后,利用aviinfo即可看到转化后avi视频的压缩格式…… 然后就可以利用aviread函数进行avi的读取和进一步处理了……
关于Matlab处理avi视频视频转换软件-XviD-1.2.2-07062009.rar 近一段时间matalb处理视频的挺多的……很多会员反映matlab对一些视频利用函数aviread(或者mmreader)可以,别的不可以。 这是因为matalb中函数aviread对读取avi的视频比较苛刻…… 你利用函数aviinfo就可以得到你的视频的压缩格式,据我所见到的视频来说, aviread支持无压缩格式的avi和 'Cinepak'格式的avi文件和'Indeo5'压缩格式的avi函数mmreader支持的格式更加广泛一些,但是仍然不是很全…… math在帖子里讲过解决办法:首先利用函数aviinfo查看你的视频的压缩格式,然后下载相应的解压缩编码即可…… 根据前人的指引:下载一个视频转换器即可…… 如果你的视频格式不是aviread或者mmreader所支持的……就可以利用视频转换器进行设置…… WinAVI 9.0就是一个不错的软件……由于附件很大,值给出一个链接……绝对可以用的…… http://www.hldsjxx.com/Soft/ShowSoft.asp?SoftID=9 下面给出一个例子……例子中的视频时matalb自带的视频文件……我的matlab为2010a…… 例如我的viptraffic不能够被aviread所读取,提示错误: mov=aviread; Warning: AVIREAD will be removed in a future release. Use MMREADER instead. > In aviread at 29 ??? Error using ==> aviread at 84 Unable to locate decompressor to decompress video stream 此时即可利用此软件进行转换,转为'Cinepak'压缩格式的avi视频…… 转化完成后,利用aviinfo即可看到转化后avi视频的压缩格式…… 然后就可以利用aviread函数进行avi的读取和进一步处理了……

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧