亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? t3dlib3.cpp

?? 一本外國人寫的關于3D游戲編程的書的源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
} // end DSound_Set_Freq

///////////////////////////////////////////////////////////

int DSound_Set_Pan(int id,int pan)
{
// this function sets the pan, -10,000 to 10,0000

if (sound_fx[id].dsbuffer->SetPan(pan)!=DS_OK)
	return(0);

// return success
return(1);

} // end DSound_Set_Pan

////////////////////////////////////////////////////////////

int DSound_Stop_Sound(int id)
{
// this function stops a sound from playing
if (sound_fx[id].dsbuffer)
   {
   sound_fx[id].dsbuffer->Stop();
   sound_fx[id].dsbuffer->SetCurrentPosition(0);
   } // end if

// return success
return(1);

} // end DSound_Stop_Sound

///////////////////////////////////////////////////////////

int DSound_Delete_All_Sounds(void)
{
// this function deletes all the sounds

for (int index=0; index < MAX_SOUNDS; index++)
    DSound_Delete_Sound(index);

// return success always
return(1);

} // end DSound_Delete_All_Sounds

///////////////////////////////////////////////////////////

int DSound_Delete_Sound(int id)
{
// this function deletes a single sound and puts it back onto the available list

// first stop it
if (!DSound_Stop_Sound(id))
   return(0);

// now delete it
if (sound_fx[id].dsbuffer)
   {
   // release the com object
   sound_fx[id].dsbuffer->Release();
   sound_fx[id].dsbuffer = NULL;
   
   // return success
   return(1);
   } // end if

// return success
return(1);

} // end DSound_Delete_Sound

///////////////////////////////////////////////////////////

int DSound_Stop_All_Sounds(void)
{
// this function stops all sounds

for (int index=0; index<MAX_SOUNDS; index++)
	DSound_Stop_Sound(index);	

// return success
return(1);

} // end DSound_Stop_All_Sounds

///////////////////////////////////////////////////////////

int DSound_Status_Sound(int id)
{
// this function returns the status of a sound
if (sound_fx[id].dsbuffer)
	{
	ULONG status; 

	// get the status
	sound_fx[id].dsbuffer->GetStatus(&status);

	// return the status
	return(status);

	} // end if
else // total failure
	return(-1);

} // end DSound_Status_Sound

///////////////////////////////////////////////////////////

int DMusic_Load_MIDI(char *filename)
{
// this function loads a midi segment

DMUS_OBJECTDESC ObjDesc; 
HRESULT hr;
IDirectMusicSegment* pSegment = NULL;

int index; // loop var
 
// look for open slot for midi segment
int id = -1;

for (index = 0; index < DM_NUM_SEGMENTS; index++)
    {
    // is this one open
    if (dm_midi[index].state == MIDI_NULL)
       {
       // validate id, but don't validate object until loaded
       id = index;
       break;
       } // end if

    } // end for index

// found good id?
if (id==-1)
   return(-1);

// get current working directory
char szDir[_MAX_PATH];
WCHAR wszDir[_MAX_PATH]; 

if(_getcwd( szDir, _MAX_PATH ) == NULL)
  {
  return(-1);;
  } // end if

MULTI_TO_WIDE(wszDir, szDir);

// tell the loader were to look for files
hr = dm_loader->SetSearchDirectory(GUID_DirectMusicAllTypes,wszDir, FALSE);

if (FAILED(hr)) 
   {
   return (-1);
   } // end if

// convert filename to wide string
WCHAR wfilename[_MAX_PATH]; 
MULTI_TO_WIDE(wfilename, filename);
 
// setup object description
DD_INIT_STRUCT(ObjDesc);
ObjDesc.guidClass = CLSID_DirectMusicSegment;
wcscpy(ObjDesc.wszFileName, wfilename );
ObjDesc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_FILENAME;
 
// load the object and query it for the IDirectMusicSegment interface
// This is done in a single call to IDirectMusicLoader::GetObject
// note that loading the object also initializes the tracks and does 
// everything else necessary to get the MIDI data ready for playback.

hr = dm_loader->GetObject(&ObjDesc,IID_IDirectMusicSegment, (void**) &pSegment);

if (FAILED(hr))
   return(-1);
 
// ensure that the segment plays as a standard MIDI file
// you now need to set a parameter on the band track
// Use the IDirectMusicSegment::SetParam method and let 
// DirectMusic find the trackby passing -1 (or 0xFFFFFFFF) in the dwGroupBits method parameter.

hr = pSegment->SetParam(GUID_StandardMIDIFile,-1, 0, 0, (void*)dm_perf);

if (FAILED(hr))
   return(-1);
  
// This step is necessary because DirectMusic handles program changes and 
// bank selects differently for standard MIDI files than it does for MIDI 
// content authored specifically for DirectMusic. 
// The GUID_StandardMIDIFile parameter must be set before the instruments are downloaded. 

// The next step is to download the instruments. 
// This is necessary even for playing a simple MIDI file 
// because the default software synthesizer needs the DLS data 
// for the General MIDI instrument set
// If you skip this step, the MIDI file will play silently.
// Again, you call SetParam on the segment, this time specifying the GUID_Download parameter:

hr = pSegment->SetParam(GUID_Download, -1, 0, 0, (void*)dm_perf);

if (FAILED(hr))
   return(-1);

// at this point we have MIDI loaded and a valid object

dm_midi[id].dm_segment  = pSegment;
dm_midi[id].dm_segstate = NULL;
dm_midi[id].state       = MIDI_LOADED;
 
// return id
return(id);
 
} // end DMusic_Load_MIDI

//////////////////////////////////////////////////////////

int DMusic_Play(int id)
{
// play sound based on id

if (dm_midi[id].dm_segment && dm_midi[id].state!=MIDI_NULL)
   {
   // if there is an active midi then stop it
   if (dm_active_id!=-1)
       DMusic_Stop(dm_active_id);

   // play segment and force tracking of state variable
   dm_perf->PlaySegment(dm_midi[id].dm_segment, 0, 0, &dm_midi[id].dm_segstate);
   dm_midi[id].state = MIDI_PLAYING;

   // set the active midi segment
   dm_active_id = id;
   return(1);
   }  // end if
else
    return(0);

} // end DMusic_Play

//////////////////////////////////////////////////////////

int DMusic_Stop(int id)
{
// stop a midi segment
if (dm_midi[id].dm_segment && dm_midi[id].state!=MIDI_NULL)
   {
   // play segment and force tracking of state variable
   dm_perf->Stop(dm_midi[id].dm_segment, NULL, 0, 0);
   dm_midi[id].state = MIDI_STOPPED;

   // reset active id
   dm_active_id = -1;

   return(1);
   }  // end if
else
    return(0);

} // end DMusic_Stop

///////////////////////////////////////////////////////////

int DMusic_Delete_MIDI(int id)
{
// this function deletes one MIDI segment

// Unload instruments this will cause silence.
// CloseDown unloads all instruments, so this call is also not 
// strictly necessary.
if (dm_midi[id].dm_segment)
   {
   dm_midi[id].dm_segment->SetParam(GUID_Unload, -1, 0, 0, (void*)dm_perf); 

   // Release the segment and set to null
   dm_midi[id].dm_segment->Release(); 
   dm_midi[id].dm_segment  = NULL;
   dm_midi[id].dm_segstate = NULL;
   dm_midi[id].state       = MIDI_NULL;
   } // end if

return(1);

} // end DMusic_Delete_MIDI

//////////////////////////////////////////////////////////

int DMusic_Delete_All_MIDI(void)
{
// delete all the MIDI 
int index; // loop var

// free up all the segments
for (index = 0; index < DM_NUM_SEGMENTS; index++)
    {
    // Unload instruments this will cause silence.
    // CloseDown unloads all instruments, so this call is also not 
    // strictly necessary.
    if (dm_midi[index].dm_segment)
       {
       dm_midi[index].dm_segment->SetParam(GUID_Unload, -1, 0, 0, (void*)dm_perf); 

       // Release the segment and set to null
       dm_midi[index].dm_segment->Release(); 
       dm_midi[index].dm_segment  = NULL;
       dm_midi[index].dm_segstate = NULL;
       dm_midi[index].state       = MIDI_NULL;
       } // end if

    } // end for index

return(1);

} // end DMusic_Delete_All_MIDI

//////////////////////////////////////////////////////////

int DMusic_Status_MIDI(int id)
{
// this checks the status of a midi segment

if (dm_midi[id].dm_segment && dm_midi[id].state !=MIDI_NULL )
   {
   // get the status and translate to our defines
   if (dm_perf->IsPlaying(dm_midi[id].dm_segment,NULL) == S_OK) 
      dm_midi[id].state = MIDI_PLAYING;
   else
      dm_midi[id].state = MIDI_STOPPED;

   return(dm_midi[id].state);
   } // end if
else
   return(0);

} // end DMusic_Status_MIDI

///////////////////////////////////////////////////////////

int DMusic_Init(void)
{
// this function initializes directmusic, it also checks if directsound has
// been initialized, if so it connect the wave output to directsound, otherwise
// it creates it's own directsound object, hence you must start directsound up
// first if you want to use both directsound and directmusic

int index; // looping var

// set up directmusic
// initialize COM
if (FAILED(CoInitialize(NULL)))
   {    
   // Terminate the application.
   return(0);
   }   // end if

// create the performance
if (FAILED(CoCreateInstance(CLSID_DirectMusicPerformance,
                            NULL,
                            CLSCTX_INPROC,
                            IID_IDirectMusicPerformance,
                            (void**)&dm_perf)))    
   {
   // return null        
   return(0);
   } // end if

// initialize the performance, check if directsound is on-line if so, use the
// directsound object, otherwise create a new one
if (FAILED(dm_perf->Init(NULL, lpds, main_window_handle)))
   {
   return(0);// Failure -- performance not initialized
   } // end if 

// add the port to the performance
if (FAILED(dm_perf->AddPort(NULL)))
   {    
   return(0);// Failure -- port not initialized
   } // end if

// create the loader to load object(s) such as midi file
if (FAILED(CoCreateInstance(
          CLSID_DirectMusicLoader,
          NULL,
          CLSCTX_INPROC, 
          IID_IDirectMusicLoader,
          (void**)&dm_loader)))
   {
   // error
   return(0);
   } // end if

// reset all the midi segment objects
for (index = 0; index < DM_NUM_SEGMENTS; index++)
    {
    // reset the object
    dm_midi[index].dm_segment  = NULL;  
    dm_midi[index].dm_segstate = NULL;  
    dm_midi[index].state       = MIDI_NULL;
    dm_midi[index].id          = index;
    } // end for index

// reset the active id
dm_active_id = -1;

// all good baby
return(1);

} // end DMusic_Init

////////////////////////////////////////////////////////////

int DMusic_Shutdown(void)
{
int index;

// If there is any music playing, stop it. This is 
// not really necessary, because the music will stop when
// the instruments are unloaded or the performance is    
// closed down.
if (dm_perf)
   dm_perf->Stop(NULL, NULL, 0, 0 ); 

// delete all the midis if they already haven't been
DMusic_Delete_All_MIDI();

// CloseDown and Release the performance object.    
if (dm_perf)
   {
   dm_perf->CloseDown();
   dm_perf->Release();     
   } // end if

// Release the loader object.
if (dm_loader)
   dm_loader->Release();     

// Release COM
CoUninitialize(); 

// return success
return(1);

} // end DMusic_Shutdown

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美刺激午夜性久久久久久久| 欧美一区二区三区公司| 国产麻豆一精品一av一免费 | 精品国产一区久久| 欧美一区二区三区四区高清| 欧美日韩一级视频| 欧美日韩一级黄| 欧美精品高清视频| 7777精品伊人久久久大香线蕉最新版| 欧美日韩激情一区| 欧美一区二区在线播放| 欧美一区二区三区视频免费| 日韩午夜精品视频| 日韩精品专区在线影院重磅| 精品少妇一区二区三区在线视频| 久久综合久久综合亚洲| 欧美国产一区二区在线观看| 国产精品麻豆一区二区| 亚洲日本在线天堂| 夜夜爽夜夜爽精品视频| 日本va欧美va欧美va精品| 国产一区啦啦啦在线观看| 国产不卡视频在线播放| 色老汉一区二区三区| 欧美日韩国产片| 精品久久国产字幕高潮| 日本一区二区三区视频视频| 亚洲精品ww久久久久久p站| 午夜久久电影网| 卡一卡二国产精品| 国产福利一区二区三区视频在线| 成人精品免费网站| 欧美日韩成人在线一区| 亚洲精品一区二区三区精华液 | 亚洲综合精品自拍| 精品一区二区三区在线观看| 国产成人免费视频网站 | 欧美亚洲国产怡红院影院| 欧美一区日韩一区| 国产精品美女www爽爽爽| 日韩国产在线观看一区| 风间由美一区二区三区在线观看 | 午夜欧美视频在线观看| 国产精品一区二区无线| 欧美三级中文字| 久久久久久久综合色一本| 亚洲激情自拍视频| 国产制服丝袜一区| 欧美日韩国产一级二级| 国产精品美女久久久久久| 免费高清视频精品| 在线视频国内自拍亚洲视频| 久久一区二区三区四区| 亚洲国产视频在线| 波多野结衣在线aⅴ中文字幕不卡| 欧美日韩不卡一区| 亚洲人快播电影网| 国产麻豆一精品一av一免费| 欧美一区二区视频在线观看2020 | 麻豆精品一区二区三区| 欧美性猛片aaaaaaa做受| 中国色在线观看另类| 久久99最新地址| 欧美一级片免费看| 亚洲国产你懂的| 91免费版pro下载短视频| 亚洲国产精品成人综合 | 国产精品色噜噜| 国产一区二区91| 日韩精品最新网址| 免费欧美日韩国产三级电影| 欧美性大战久久久久久久蜜臀| 国产精品第一页第二页第三页| 国产一区二区三区精品视频| 欧美成人女星排名| 激情欧美日韩一区二区| 欧美一区二区日韩一区二区| 午夜精品在线看| 欧美日韩精品一区视频| 午夜欧美电影在线观看| 欧美色综合天天久久综合精品| 亚洲三级在线观看| 色先锋资源久久综合| 一区2区3区在线看| 欧美色爱综合网| 奇米888四色在线精品| 日韩一区二区三免费高清| 美女一区二区久久| 国产丝袜欧美中文另类| 国产传媒日韩欧美成人| 1024成人网| 欧美日韩在线播| 秋霞午夜鲁丝一区二区老狼| 日韩精品在线网站| 粉嫩欧美一区二区三区高清影视| 国产精品久久久久精k8 | 日韩一区二区精品葵司在线| 蜜桃视频一区二区三区在线观看| 欧美精品一区二区高清在线观看| 国产美女在线精品| 亚洲免费在线观看视频| 欧美性生交片4| 国产一区欧美日韩| 亚洲少妇最新在线视频| 91麻豆精品91久久久久久清纯| 极品少妇xxxx精品少妇偷拍| 国产精品短视频| 欧美精选一区二区| 国产综合色产在线精品| 一区二区三区日本| 26uuu亚洲| 欧美日韩在线播放一区| 国产精品一卡二卡| 午夜不卡av免费| 国产精品久久久一区麻豆最新章节| 91行情网站电视在线观看高清版| 在线免费观看不卡av| 久久66热re国产| 综合激情成人伊人| 久久免费午夜影院| 欧美三级电影一区| 成人精品亚洲人成在线| 秋霞成人午夜伦在线观看| 日本一区二区三区dvd视频在线| 欧美三级日韩三级国产三级| 成人激情综合网站| 久久疯狂做爰流白浆xx| 亚洲精品乱码久久久久久 | 国产精品成人网| 精品国产乱码91久久久久久网站| 在线免费亚洲电影| 波多野结衣一区二区三区| 久久99久久精品| 亚洲国产va精品久久久不卡综合| 国产蜜臀97一区二区三区| 精品久久久久久久一区二区蜜臀| 欧美日韩国产天堂| 在线观看日韩高清av| 91在线观看地址| 高清不卡在线观看av| 韩国在线一区二区| 日本中文字幕不卡| 婷婷综合五月天| 亚洲综合免费观看高清在线观看| 国产精品色哟哟| 欧美激情在线免费观看| 久久久久9999亚洲精品| 久久综合av免费| 精品国产乱码久久久久久牛牛| 欧美一区二区三区思思人| 91麻豆精品国产91久久久久| 国产精品入口麻豆原神| 国产调教视频一区| 国产精品五月天| 亚洲国产精品t66y| 中文字幕一区二区5566日韩| 国产精品三级电影| 亚洲三级在线免费| 亚洲一区二区精品3399| 午夜久久电影网| 日本特黄久久久高潮| 日本不卡不码高清免费观看| 日日噜噜夜夜狠狠视频欧美人| 亚洲成av人片一区二区| 天堂va蜜桃一区二区三区| 日韩激情视频在线观看| 久久超碰97人人做人人爱| 国产一区二区主播在线| 粉嫩久久99精品久久久久久夜| 不卡一区二区中文字幕| 91亚洲国产成人精品一区二三| 91网上在线视频| 在线播放日韩导航| wwwwww.欧美系列| 亚洲国产高清不卡| 亚洲国产综合91精品麻豆| 日韩成人av影视| 国产91精品精华液一区二区三区| 91麻豆免费看| 欧美一区二区三区四区在线观看 | 色婷婷一区二区| 欧美日韩成人综合天天影院 | 国产精品久久综合| 亚洲高清视频的网址| 国产麻豆成人精品| 欧美最猛黑人xxxxx猛交| 91精品国产综合久久精品app | 欧美韩国日本一区| 亚洲va国产天堂va久久en| 韩国精品一区二区| 日本韩国欧美一区| 久久综合色综合88| 亚洲一区二区欧美| 国产成人精品一区二| 欧美日韩你懂的| 国产精品久久99| 蓝色福利精品导航| 欧美色综合网站| 中文字幕欧美一| 国产一区在线不卡|