⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sound.cpp

📁  ?跳舞机的源代码 自己修改一下 编译没有问题
💻 CPP
字号:
//sound.cpp
#include<windows.h>
#include<dmusici.h>
#pragma comment(lib,"dxguid")
#pragma comment(lib,"strmiids")
IDirectMusicLoader8*  pLoader=NULL;
IDirectMusicPerformance8* pPerf=NULL;
IDirectMusicSegment8*  pSeg=NULL;
HWND hWnd1;
const int MAX_FILE_LENGTH=128;
WCHAR UnicodeFile[MAX_FILE_LENGTH];
MUSIC_TIME mtime;
#define CHECKERR(x) {if(FAILED(hr)){MessageBox(NULL,x,"err",MB_OK);return false;}}


void PAUSE()
{				
	pPerf->GetTime(NULL, &mtime);//得到暂停的位置
	pPerf->Stop(NULL,//要停止的段,NULL表示全部段都停止
	NULL,//段状态
	0,//多少时间后停止,0表示立即 
	0//标志
	);
}

void PLAY()
{
	pSeg->SetStartPoint(mtime);//播放点
	pPerf->PlaySegmentEx(pSeg, 
	NULL, 
	NULL, 
	DMUS_SEGF_REFTIME, 
	0, 
	NULL, 
	NULL, 
	NULL 
	);
	pSeg->SetStartPoint(0);
}

void REPLAY()
{				
	pPerf->PlaySegmentEx(pSeg,//要播放的段
						 NULL,//保留,必须为NULL
						 NULL,//pTransiton
						 0,//播放的标志
						 0,//开始的位置
						 NULL,//用与接收段状态的指针,如果不需要,就为NULL
						 NULL,//使用默认
						 NULL//默认的AudioPath
						 );
}
		
void RELEASE()
{
	pPerf->CloseDown();
	pSeg->Release();
	pPerf->Release();
	pLoader->Release();
	CoUninitialize();
	EndDialog(hWnd1,0);
}

int INITSOUND()//HINSTANCE hInst,HINSTANCE hInstPrev,LPSTR lpCmdLine,int nCmdShow
{
	HRESULT hr=CoInitialize(NULL);
	CHECKERR("CoInitalize");
	hr=CoCreateInstance(CLSID_DirectMusicLoader,	//组件的GUID
					NULL,	//不是创建集合
					CLSCTX_INPROC,	//创建的环境
					IID_IDirectMusicLoader8,	//接口的GUID
					(void**)&pLoader);		//被创建的接口指针
	CHECKERR("CoCreate pLoader");
	hr=CoCreateInstance(CLSID_DirectMusicPerformance,	//组件的GUID
					NULL,	//不是创建集合
					CLSCTX_INPROC,	//创建的环境
					IID_IDirectMusicPerformance8,	//接口的GUID
					(void**)&pPerf);		//被创建的接口指针
	CHECKERR("CoCreate pPerf");
	hr=pPerf->InitAudio( 
					NULL,//DirectMusic对象的指针,因为不需要我们管理,所以让它自动进行
					NULL,//DirectSound对象的指针,同上
					hWnd1,//窗口句柄
					DMUS_APATH_SHARED_STEREOPLUSREVERB,//声音通道(AudioPath)类型:立体声+混响
					64, //音乐通道数
					DMUS_AUDIOF_ALL, //声卡的所有特性
					NULL // DMUS_AUDIOPARAMS对象的指针
					);
	CHECKERR("Init Audio");
	MultiByteToWideChar(
						CP_ACP,//ASCII码
					   0,// 
					    "test.mid",//要转换的ascii字符串
						-1,//要转换的字节数,-1表示以'\0'结尾的字符串
						UnicodeFile,//转换后UNICODE存放的地方
						MAX_FILE_LENGTH);
	pLoader->LoadObjectFromFile(
       							CLSID_DirectMusicSegment, //组件的GUID
   								 IID_IDirectMusicSegment8, //接口的GUID
  		 						 UnicodeFile,//文件名,注意用Unicode
  		  						(void**)&pSeg//音乐要装到的段
								 );
	int looptimes=1;
	pSeg->SetRepeats(looptimes); //重复的次数,如果是DMUS_SEG_REPEAT_INFINITE则为无限
	pSeg->Download( pPerf );//使用DLS,把MID数据转换成数字化的音乐数据
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -