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

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

?? t3dlib3.cpp

?? 游戲的聲音圖像演示程序
?? 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一区二区三区免费野_久草精品视频
欧美高清性hdvideosex| 精品国产乱子伦一区| 日本欧美久久久久免费播放网| 精品毛片乱码1区2区3区| 91亚洲精品乱码久久久久久蜜桃 | 4438成人网| 99久久精品国产精品久久| 琪琪久久久久日韩精品| 亚洲免费av观看| 国产欧美日韩中文久久| 日韩午夜精品视频| 欧美视频一区二区三区四区 | 国产精品综合av一区二区国产馆| 亚洲欧美日韩系列| 久久嫩草精品久久久精品| 欧美日本国产视频| 972aa.com艺术欧美| 国产精品一二三在| 美国毛片一区二区| 亚洲成人av一区| 亚洲视频一区二区在线| 欧美国产一区视频在线观看| 日韩欧美国产综合| 日韩欧美综合在线| 91精品国产色综合久久| 欧美日韩色综合| 色一区在线观看| 91免费精品国自产拍在线不卡 | 欧美日韩不卡一区二区| 色激情天天射综合网| 国产91精品久久久久久久网曝门| 麻豆成人av在线| 日韩av中文在线观看| 亚洲一区中文在线| 一区二区三区加勒比av| 亚洲欧美一区二区三区国产精品 | 95精品视频在线| 成人午夜电影网站| 国产精品69久久久久水密桃| 国内精品国产成人| 国产尤物一区二区在线| 国产一区二区精品久久| 狠狠色狠狠色综合系列| 国产自产高清不卡| 国产福利一区二区| 成人精品国产福利| 97超碰欧美中文字幕| 91福利在线免费观看| 欧美亚洲一区二区在线| 欧美在线一区二区三区| 欧美日韩精品一区二区三区四区| 欧美午夜精品一区二区三区| 欧美日韩在线综合| 日韩亚洲欧美综合| 久久婷婷综合激情| 亚洲欧洲日韩综合一区二区| 综合久久久久久久| 亚洲自拍偷拍网站| 婷婷成人综合网| 国产毛片精品一区| 99精品视频在线观看| 欧洲一区二区av| 欧美一区二区三级| 久久久久久久综合色一本| 国产精品欧美极品| 亚洲精品视频在线看| 天天亚洲美女在线视频| 狠狠网亚洲精品| 91蜜桃网址入口| 这里是久久伊人| 国产午夜亚洲精品理论片色戒 | 中文字幕亚洲欧美在线不卡| 亚洲人成影院在线观看| 天天影视色香欲综合网老头| 国产乱码精品一区二区三区忘忧草| 国产91丝袜在线播放0| 欧美影视一区二区三区| 精品不卡在线视频| 亚洲视频一二三区| 蜜桃在线一区二区三区| av亚洲精华国产精华精| 欧美另类z0zxhd电影| 国产清纯美女被跳蛋高潮一区二区久久w | 日本网站在线观看一区二区三区| 经典一区二区三区| 91国在线观看| 久久婷婷色综合| 亚洲午夜精品在线| 国产一区二区三区美女| 欧美色视频在线观看| 国产视频一区二区三区在线观看| 亚洲夂夂婷婷色拍ww47| 国产一区二区按摩在线观看| 在线欧美一区二区| 337p日本欧洲亚洲大胆色噜噜| 亚洲日本va在线观看| 久久国产夜色精品鲁鲁99| 日本韩国精品一区二区在线观看| 精品va天堂亚洲国产| 亚洲v日本v欧美v久久精品| 国产成人综合网站| 日韩片之四级片| 夜夜操天天操亚洲| 成人午夜又粗又硬又大| 欧美电视剧在线看免费| 一区二区欧美国产| av资源网一区| 久久婷婷综合激情| 蜜乳av一区二区三区| 欧美视频精品在线| 亚洲精选视频在线| 国产成人精品免费视频网站| 在线播放日韩导航| 一区二区三区四区五区视频在线观看| 国产一区在线观看麻豆| 日韩精品一区二区三区在线| 亚洲午夜视频在线| 日本久久一区二区三区| 国产精品伦一区二区三级视频| 黄页视频在线91| 欧美日韩精品欧美日韩精品一| 自拍偷拍国产亚洲| 99久久国产综合精品麻豆| 国产亚洲欧美日韩俺去了| 老司机免费视频一区二区三区| 欧美日韩不卡在线| 亚洲国产va精品久久久不卡综合| 91免费观看在线| 亚洲女子a中天字幕| 97精品国产97久久久久久久久久久久| 日本一区二区在线不卡| 国产成a人无v码亚洲福利| 久久久精品国产免大香伊| 久久国产欧美日韩精品| 日韩无一区二区| 日韩不卡一区二区三区| 91精品国产一区二区三区香蕉| 日韩中文字幕91| 在线播放视频一区| 麻豆一区二区三| 日韩欧美在线不卡| 久久国产精品72免费观看| 欧美岛国在线观看| 国产精品自拍网站| 欧美激情一区二区三区在线| 国产不卡免费视频| 中文字幕五月欧美| 91偷拍与自偷拍精品| 一区二区三区精品| 欧美久久久久久久久久| 欧美a级理论片| 精品国产91久久久久久久妲己 | 欧美精品 国产精品| 强制捆绑调教一区二区| 2021久久国产精品不只是精品| 国产一级精品在线| 国产精品国产精品国产专区不片| 99久久777色| 亚洲综合免费观看高清完整版在线 | 日韩三级免费观看| 国产一区二区不卡老阿姨| 国产精品欧美极品| 在线免费观看日本欧美| 日韩1区2区日韩1区2区| 欧美精品一区二区蜜臀亚洲| 粉嫩嫩av羞羞动漫久久久| 亚洲精品乱码久久久久久| 51精品久久久久久久蜜臀| 国产乱子伦视频一区二区三区| 国产无遮挡一区二区三区毛片日本| 成人高清视频在线观看| 夜夜夜精品看看| 日韩视频中午一区| 波多野结衣中文一区| 亚洲高清中文字幕| 精品免费国产二区三区| 不卡欧美aaaaa| 日本网站在线观看一区二区三区| 久久免费午夜影院| 在线免费一区三区| 国产一区二区看久久| 一二三四区精品视频| 久久先锋影音av鲁色资源网| 91老师国产黑色丝袜在线| 日本成人在线视频网站| 国产精品美女www爽爽爽| 欧美男人的天堂一二区| 成人午夜碰碰视频| 青青草原综合久久大伊人精品 | 国产精品日日摸夜夜摸av| 欧美日韩一区精品| 成人国产精品免费网站| 日本不卡一区二区三区 | 亚洲欧美激情视频在线观看一区二区三区 | 亚洲精品欧美激情| www欧美成人18+| 欧美三级资源在线| 成人午夜看片网址| 久久精品72免费观看| 亚洲成人动漫精品|