在VC ++ 2010中使用Direct3D9和FMOD进行免费音频和视频播放

时间:2014-04-12 11:12:02

标签: c++ audio video textures directx-9

我想在我的免费游戏中使用Direct3D9纹理实现过场动画播放,并同步播放声音。

我正在使用面向Windows XP或更高版本的Visual C ++ 2010 Express,DirectX9,FMOD。

我对视频或音频没有任何经验。

我尝试过DirectShow,但无法将其编译而且Bink超出了我的预算。

2 个答案:

答案 0 :(得分:0)

您可以将其转换为:http://nehe.gamedev.net/tutorial/playing_avi_files_in_opengl/23001/

也许可以使用FMOD将声音播放为MP3。

答案 1 :(得分:0)

使用直接演示,你应该能够播放视频和播放音频。如果没有,则可以使用直接显示视频,然后使用FMOD播放声音。以编程方式,您必须创建声音以及要播放的视频,然后设置音频在视频播放状态下播放的触发器,然后在视频状态退出时结束。对于直接演示,您需要从这些开始创建comobjects //////////////////////////////////////////////////////////////////////// // DirectShow COM Object Creation //////////////////////////////////////////////////////////////////////// IGraphBuilder *videoGraph; IMediaControl *videoControl; IMediaEvent *videoEvent; IVideoWindow *videoWindow; //HRESULT *isVideoDone; long evCode; LONG_PTR eventParam1, eventParam2; HWND hwnd;

然后在你的cpp文件中用这样的方法启动它:

void InitVideo(LPCWSTR vidName)

{     CoInitialize的(NULL);

CoCreateInstance( CLSID_FilterGraph, NULL,
    CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
    (void**)&videoGraph);

videoGraph->QueryInterface(IID_IMediaControl,
    (void**)&videoControl);

videoGraph->QueryInterface(IID_IMediaEvent,
    (void**)&videoEvent);

// building a filter graph for our video
videoGraph->RenderFile(vidName, NULL);

//video window
videoControl->QueryInterface(IID_IVideoWindow,
    (void**)&videoWindow);

// setup the window
videoWindow->put_Owner((OAHWND)hwnd);

// Set the style
videoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE);

// Obtain the size of the window
RECT WinRect;
GetClientRect(hwnd, &WinRect);
//GetWindowRect(hwnd, &WinRect);

// Set the video size to the size of the window

videoWindow->SetWindowPosition(WinRect.left, WinRect.top, 
    WinRect.right, WinRect.bottom);

videoWindow->put_Visible(OATRUE);

}