tutorial1.cpp
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:3k
- //-----------------------------------------------------------------------------
- // 文件名: play.cpp
- //
- // 描述: DirectMusic实例:显示如何在一个缺省的音频路径上播放一个片段。
- //
- //-----------------------------------------------------------------------------
- #define INITGUID
- #include <windows.h>
- #include <dmusicc.h>
- #include <dmusici.h>
- //-----------------------------------------------------------------------------
- // 定义,常量和全局变量
- //-----------------------------------------------------------------------------
- IDirectMusicLoader8* g_pLoader = NULL;
- IDirectMusicPerformance8* g_pPerformance = NULL;
- IDirectMusicSegment8* g_pSegment = NULL;
- //-----------------------------------------------------------------------------
- // 函数名: WinMain()
- // 描 述: 在一个缺省的路径上使用DirectMusic播放一个单独的WAV文件。
- //-----------------------------------------------------------------------------
- INT APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine,
- INT nCmdShow )
- {
- // 初始化COM
- CoInitialize(NULL);
-
- // 创建装载器对象
- CoCreateInstance( CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC,
- IID_IDirectMusicLoader8, (void**)&g_pLoader );
- // 创建演奏器对象
- CoCreateInstance( CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,
- IID_IDirectMusicPerformance8, (void**)&g_pPerformance );
- // 用标准的音频路径初始化演奏器。
- // 这里对DirectMusic和DirectSound进行初始化,
- // 并且创建合成器。
- g_pPerformance->InitAudio( NULL, NULL, NULL,
- DMUS_APATH_SHARED_STEREOPLUSREVERB, 64,
- DMUS_AUDIOF_ALL, NULL );
- CHAR strPath[512];
- if( GetWindowsDirectory( strPath, MAX_PATH+1 ) == 0 )
- return 0;
- strcat( strPath, "\media" );
- // 告诉DirectMusic缺省的搜索路径
- WCHAR wstrSearchPath[MAX_PATH+1];
- MultiByteToWideChar( CP_ACP, 0, strPath, -1,
- wstrSearchPath, MAX_PATH );
- wstrSearchPath[MAX_PATH] = 0;
- g_pLoader->SetSearchDirectory( GUID_DirectMusicAllTypes,
- wstrSearchPath, FALSE );
-
- // 从文件中装载片段
- WCHAR wstrFileName[MAX_PATH] = L"ding.wav";
- if( FAILED( g_pLoader->LoadObjectFromFile( CLSID_DirectMusicSegment,
- IID_IDirectMusicSegment8,
- wstrFileName,
- (LPVOID*) &g_pSegment ) ) )
- {
- MessageBox( NULL, "没有发现媒体,退出采样。",
- "DirectMusic实例", MB_OK );
- g_pPerformance->CloseDown();
- g_pLoader->Release();
- g_pPerformance->Release();
- CoUninitialize();
- return 0;
- }
- // 传送片段的乐器给合成器
- g_pSegment->Download( g_pPerformance );
- // 播放缺省音频路径上的片段
- g_pPerformance->PlaySegmentEx( g_pSegment, NULL, NULL, 0,
- 0, NULL, NULL, NULL );
- // 现在DirectMusic将在背景中播放,
- // 所有继续我们的任务
- MessageBox( NULL, "点击“确定”按钮退出。", "DirectMusic实例", MB_OK );
- // 停止音乐,并关闭
- g_pPerformance->Stop( NULL, NULL, 0, 0 );
- g_pPerformance->CloseDown();
- // 清除所有接口
- g_pLoader->Release();
- g_pPerformance->Release();
- g_pSegment->Release();
- // 关闭COM
- CoUninitialize();
-
- return 0;
- }