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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? chmplay.cpp

?? Windows上的MUD客戶端程序
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*----------------------------------------------------------------------------
                        _                              _ _       
        /\             | |                            | (_)      
       /  \   _ __   __| |_ __ ___  _ __ ___   ___  __| |_  __ _ 
      / /\ \ | '_ \ / _` | '__/ _ \| '_ ` _ \ / _ \/ _` | |/ _` |
     / ____ \| | | | (_| | | | (_) | | | | | |  __/ (_| | | (_| |
    /_/    \_\_| |_|\__,_|_|  \___/|_| |_| |_|\___|\__,_|_|\__,_|

    The contents of this file are subject to the Andromedia Public
	License Version 1.0 (the "License"); you may not use this file
	except in compliance with the License. You may obtain a copy of
	the License at http://www.andromedia.com/APL/

    Software distributed under the License is distributed on an
	"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
	implied. See the License for the specific language governing
	rights and limitations under the License.

    The Original Code is Pueblo client code, released November 4, 1998.

    The Initial Developer of the Original Code is Andromedia Incorporated.
	Portions created by Andromedia are Copyright (C) 1998 Andromedia
	Incorporated.  All Rights Reserved.

	Andromedia Incorporated                         415.365.6700
	818 Mission Street - 2nd Floor                  415.365.6701 fax
	San Francisco, CA 94103

    Contributor(s):
	--------------------------------------------------------------------------
	   Chaco team:  Dan Greening, Glenn Crocker, Jim Doubek,
	                Coyote Lussier, Pritham Shetty.

					Wrote and designed original codebase.

------------------------------------------------------------------------------

	Implementation of the ChMediaPlayer class.  This class knows how to
	load and play MIDI music files as well as Wave audio files.

----------------------------------------------------------------------------*/

// $Header: /home/cvs/chaco/modules/client/msw/ChSound/ChMPlay.cpp,v 1.29 1996/10/04 21:50:05 coyote Exp $

#include "headers.h"
											// Set Toolvox target...
#if defined( CH_MSW )
	#if defined( WIN32 )
		#define VOXWARE_WIN32
	#else	// defined( WIN32 )
		#define VOXWARE_WIN16
	#endif	// defined( WIN32 )
#else	// defined( CH_MSW )
	#error Voxware platform not defined!
#endif	// defined( CH_MSW )

#if defined( CH_USE_VOXWARE )

	#include <tnt.h>						// Toolvox (Voxware) includes

#endif	// defined( CH_USE_VOXWARE )

#include <ChCore.h>

#include "ChMPlay.h"
#include "ChSoundInfo.h"


/*----------------------------------------------------------------------------
	Constants
----------------------------------------------------------------------------*/

#define WAVE_BUFFER_SECS		2

//#define WAVE_DEV_NAME			"mciwave"
//#define MIDI_DEV_NAME			"mciseq"

#define WAVE_DEV_NAME			"audiowave"
#define MIDI_DEV_NAME			"seqencer"


/*----------------------------------------------------------------------------
	Forward declarations
----------------------------------------------------------------------------*/

#if 0

VOXAPI_CALLBACK VoxwareCallbackFunc( unsigned short wVox,
										unsigned short wMessage,
										LPVOXWARE_DATA lpVoxwareData );

#endif	// defined( CH_USE_VOXWARE )


/*----------------------------------------------------------------------------
	ChMediaPlayer public methods
----------------------------------------------------------------------------*/

ChMediaPlayer::ChMediaPlayer( DeviceType deviceType,
								bool* pboolDeviceInUseFlag ) :
					m_pMainInfo( 0 ),
					m_pboolDeviceInUseFlag( pboolDeviceInUseFlag ),
					m_boolExists( true ),
					m_deviceType( deviceType ),
					m_pMCIObject( 0 ),
					m_boolLoopVolume( false ),
					m_suVolume( 0xffff ),
					m_pInfo( 0 )
{
	ASSERT( pboolDeviceInUseFlag );

	GetNotifyWnd()->Create();
	GetNotifyWnd()->SetPlayer( this );

	m_pInfo = new ChSoundInfo;
	ASSERT( GetSoundInfo() );

	m_pMixer = new ChMixer( deviceType );
	m_boolExists = DeviceExists( deviceType );
}


ChMediaPlayer::~ChMediaPlayer()
{
	if (IsDeviceOpen())
	{
		CloseDevice();
	}

	if (m_pMixer)
	{
		delete m_pMixer;
	}

	if (GetSoundInfo())
	{
		delete m_pInfo;
		m_pInfo = 0;
	}

	GetNotifyWnd()->DestroyWindow();
}


bool ChMediaPlayer::Play( const ChSoundInfo* pInfo )
{
	bool	boolSuccess;

	if (IsDeviceOpen())
	{
		CloseDevice();
	}

	OpenDevice();

	boolSuccess = GetDevice()->OpenFile( pInfo->GetFilename() );
	if (!boolSuccess)
	{
		CloseDevice();
	}
	else
	{
		PrepAndPlay( pInfo );
	}

	return boolSuccess;
}


void ChMediaPlayer::Stop()
{
	if (!IsDeviceOpen())
	{
		return;
	}
											/* Set the event flags to zero
												so that no notification
												occurs (since this object
												is being explicitly stopped) */
	SetEventInfo( 0 );
											// Turn off looping!
	SetLooping( false );
											// Stop the device
	GetDevice()->Stop();
	SetPlaying( false );
}


void ChMediaPlayer::SetVolume( chuint16 suVolume )
{
	m_suVolume = suVolume;

	if (IsPlaying())
	{
		GetMixer()->SetVolume( m_suVolume );
	}
}


/*----------------------------------------------------------------------------
	ChMediaPlayer protected methods
----------------------------------------------------------------------------*/

bool ChMediaPlayer::PrepAndPlay( const ChSoundInfo* pInfo )
{
	ASSERT( pInfo );

	*m_pInfo = *pInfo;
	ASSERT( 0 != GetSoundInfo() );

	SetEventInfo( GetSoundInfo()->GetEvents(), GetSoundInfo()->GetAction(),
					GetSoundInfo()->GetMD5() );

	if (GetSoundInfo()->IsVolumeValid())
	{
		SetLooping( GetSoundInfo()->IsLooping(), GetSoundInfo()->GetVolume() );
		GetMixer()->SetVolume( GetSoundInfo()->GetVolume() );
	}
	else
	{
		SetLooping( GetSoundInfo()->IsLooping() );
		GetMixer()->SetVolume( m_suVolume );
	}

	SetPlaying( true );
	return DoPlay();
}


bool ChMediaPlayer::DoPlay()
{
	GetDevice()->Play();

	return true;
}


bool ChMediaPlayer::DeviceExists( DeviceType deviceType )
{
	bool		boolExists;

	switch( deviceType )
	{
		case devMidi:
		{
			boolExists = 0 < midiOutGetNumDevs();
			break;
		}

		case devWave:
		case devSpeech:
		{
			boolExists = 0 < waveOutGetNumDevs();
			break;
		}

		default:
		{
			TRACE( "ChMediaPlayer::DeviceExists:  Unknown device.\n" );
			boolExists = false;
			break;
		}
	}

	return boolExists;
}


void ChMediaPlayer::OpenDevice()
{
	m_pMCIObject = new ChMCIObject( GetDeviceType(), GetNotifyWnd() );
	ASSERT( 0 != m_pMCIObject );
}


void ChMediaPlayer::CloseDevice()
{
	if (m_pMCIObject)
	{
		m_pMCIObject->Close();

		delete m_pMCIObject;
		m_pMCIObject = 0;
	}
}


void ChMediaPlayer::OnPlayComplete()
{
	if (IsLooping())
	{
		Play( GetSoundInfo() );
	}
	else
	{
		CloseDevice();
		SetPlaying( false );

		if (GetEvents() & soundEvtComplete)
		{									// Send completion notification
			
			GetMainInfo()->SendWorldCommand( GetMD5(), GetAction(),
												PUEBLO_SOUND_COMPLETE );
		}

		GetMainInfo()->OnPlayComplete( GetDeviceType() );
	}
}


/*----------------------------------------------------------------------------
	ChMCIObject public methods
----------------------------------------------------------------------------*/

ChMCIObject::ChMCIObject( DeviceType deviceType, CWnd* pwndNotify ) :
				m_deviceType( deviceType ),
				m_pwndNotify( pwndNotify )
{
	ClearDevice();
}


ChMCIObject::~ChMCIObject()
{
    if (IsOpen())
    {
        Close();
    }

    ASSERT( !IsOpen() );
}


bool ChMCIObject::OpenFile( const string& strFilename )
{
    chuint32		luResult;
	DWORD			dwOpenOptions = MCI_WAIT |
									MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID |
									MCI_OPEN_ELEMENT;
    if (IsOpen())
    {
        Close();
    }
    ASSERT( !IsOpen() );

	ClearDevice();							// Zero out the open structure

	switch( GetDeviceType() )
	{
		case devMidi:
		{
			SetDeviceType( (const char*)MCI_DEVTYPE_SEQUENCER );
			break;
		}

		case devWave:
		{
			SetDeviceType( (const char*)MCI_DEVTYPE_WAVEFORM_AUDIO );

			dwOpenOptions |= MCI_WAVE_OPEN_BUFFER;
			break;
		}

		default:
		{
			TRACE( "ChMCIObject::OpenFile:  Unknown device.  "
					"Trying to make do.\n" );

			SetDeviceType( 0 );
			dwOpenOptions &= ~((DWORD)MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID );
			break;
		}
	}

	m_openParams.lpstrElementName = strFilename;
	m_openParams.dwBufferSeconds = WAVE_BUFFER_SECS;

    luResult = mciSendCommand( 0, MCI_OPEN, dwOpenOptions,
                              	(chparam)(void*)&m_openParams );
    if (luResult != 0)
    {
        MCIError( luResult );
		ClearDevice();						// Zero out the open structure
        return false;
    }
    										/* Set the time format to
    											milliseconds */
    MCI_SET_PARMS		set;

    set.dwTimeFormat = MCI_FORMAT_MILLISECONDS;
	luResult = mciSendCommand( GetDeviceID(), MCI_SET,
                              	MCI_WAIT | MCI_SET_TIME_FORMAT,
                              	(chparam)(void*)&set );
	if (luResult != 0)
	{
		MCIError( luResult );
		ClearDevice();						// Zero out the open structure
		return false;
	}
											/* Attempt to cue the file so it
												will play with no delay */
	MCI_GENERIC_PARMS	generic;

	ChMemClearStruct( &generic );
	luResult = mciSendCommand( GetDeviceID(), MCI_CUE, MCI_WAIT,
								(chparam)(void*)&generic );
	return true;
}


void ChMCIObject::Close()
{
    MCI_GENERIC_PARMS	generic;
    chuint32			luResult;

    if (!IsOpen())
    {
    	return;								// Already closed.
	}

    Stop();									// Just in case.

    luResult = mciSendCommand( GetDeviceID(), MCI_CLOSE, MCI_WAIT,
								(chparam)(void*)&generic );
    if (luResult != 0)
    {
        MCIError( luResult );
    }

	ClearDevice();							// Zero out the open structure
}


void ChMCIObject::Play()
{
    MCI_PLAY_PARMS	play;
    chuint32		luResult;

    if (!IsOpen())
    {
    	return;								// Not open
	}

    mciSendCommand( GetDeviceID(), MCI_SEEK,
                   	MCI_WAIT | MCI_SEEK_TO_START, 0 );

											// Play music

	play.dwCallback = (DWORD)m_pwndNotify->m_hWnd;
    luResult = mciSendCommand( GetDeviceID(), MCI_PLAY, MCI_NOTIFY,
								(chparam)(void*)&play );
    if (luResult != 0)
    {
        MCIError( luResult );
    }
}


void ChMCIObject::Stop()
{
    chuint32		luResult;

    if (!IsOpen())
	{
    	return;								// Not open
	}

	luResult = mciSendCommand( GetDeviceID(), MCI_STOP, MCI_WAIT, 0 );
    if (luResult != 0)
    {
        MCIError( luResult );
    }
}


chuint32 ChMCIObject::GetPosition()
{
    if (!IsOpen())
	{
    	return 0;							// Not open
	}

    MCI_STATUS_PARMS	status;

    status.dwItem = MCI_STATUS_POSITION;
    if (mciSendCommand( GetDeviceID(), MCI_STATUS,
						MCI_WAIT | MCI_STATUS_ITEM,
                       	(chparam)(void*)&status) != 0)
	{
		return 0;							// Some error
    }

    return status.dwReturn;
}


/*----------------------------------------------------------------------------
	ChMCIObject private methods
----------------------------------------------------------------------------*/

void ChMCIObject::MCIError( chuint32 luError )
{
    char	strBuffer[256];

    strBuffer[0] = 0;
    mciGetErrorString( luError, strBuffer, sizeof( strBuffer ) );
    if (!strlen( strBuffer ))
    {
        strcpy( strBuffer, "Unknown error" );
    }

    TRACE( strBuffer );
    TRACE( "\n" );
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产黄人亚洲片| 在线看不卡av| 色综合久久久久久久| 欧美一级高清片在线观看| 久久综合色天天久久综合图片| 1024成人网色www| 老司机免费视频一区二区| 日本韩国精品一区二区在线观看| 日韩美女在线视频 | 日韩欧美激情四射| 亚洲欧美偷拍三级| 国产乱理伦片在线观看夜一区| 欧美日韩午夜在线视频| 国产精品对白交换视频| 国产尤物一区二区| 欧美一区二区黄色| 亚洲福利一区二区| 在线视频国产一区| 亚洲日本va午夜在线影院| 顶级嫩模精品视频在线看| 91精品国产免费| 日韩电影在线一区| 欧美精选午夜久久久乱码6080| 一级特黄大欧美久久久| 91丨九色丨国产丨porny| 欧美国产丝袜视频| 成人亚洲精品久久久久软件| 久久影院视频免费| 国产在线精品视频| 久久久www成人免费毛片麻豆| 久久99精品久久久久久| 日韩女同互慰一区二区| 久久疯狂做爰流白浆xx| 精品少妇一区二区三区视频免付费| 日本大胆欧美人术艺术动态 | 亚洲一区电影777| 日本黄色一区二区| 亚洲一二三级电影| 欧美精品v国产精品v日韩精品| 亚洲成人一二三| 日韩欧美色电影| 久久国产精品第一页| 国产欧美日韩三级| www.亚洲人| 亚洲一区在线免费观看| 欧美高清hd18日本| 久久丁香综合五月国产三级网站| 欧美精品一区二区三区蜜桃| 国产精品一区二区你懂的| 国产精品美女久久久久aⅴ国产馆| 成人美女在线视频| 亚洲综合无码一区二区| 欧美老女人第四色| 国内精品伊人久久久久av一坑| 欧美国产一区二区| 欧美性大战久久久久久久 | 亚洲成人高清在线| 日韩午夜激情av| 国产成人av一区二区三区在线观看| 国产精品免费观看视频| 欧美性猛片aaaaaaa做受| 精品一区二区三区在线观看国产 | 亚洲在线视频网站| 欧美大尺度电影在线| 成人福利在线看| 香蕉久久夜色精品国产使用方法| 日韩视频一区在线观看| 成人午夜免费电影| 午夜视频一区在线观看| 国产色产综合产在线视频| 在线影视一区二区三区| 精品一区二区在线视频| 一区二区三区四区在线| 欧美大片在线观看一区二区| 91丨九色丨尤物| 国产一区二区三区观看| 亚洲综合视频在线观看| 久久亚洲一区二区三区明星换脸| 色婷婷精品久久二区二区蜜臂av| 青青草国产成人av片免费| 欧美国产亚洲另类动漫| 日韩欧美一区二区免费| 91麻豆精品视频| 国产美女精品在线| 亚洲不卡av一区二区三区| 欧美国产在线观看| 精品美女一区二区| 欧美精品第一页| 一本大道av一区二区在线播放| 国产一区不卡在线| 视频一区视频二区中文| 亚洲免费电影在线| 国产精品久久久久久久午夜片 | 国产日韩精品视频一区| 欧美日韩一区二区三区在线| av电影在线观看不卡| 国产东北露脸精品视频| 久久国产婷婷国产香蕉| 天天综合色天天综合| 亚洲综合久久久| 亚洲欧美日韩国产成人精品影院 | 国产激情一区二区三区四区| 日本亚洲免费观看| 亚洲高清视频的网址| 一区二区三区不卡视频| 成人欧美一区二区三区小说| 欧美国产精品一区二区| 国产日韩v精品一区二区| 欧美v日韩v国产v| 欧美大尺度电影在线| 精品少妇一区二区三区日产乱码 | 成人小视频免费观看| 国产一区二区三区在线观看精品| 久久99在线观看| 精品一区二区三区的国产在线播放| 蜜臀久久久99精品久久久久久| 三级在线观看一区二区| 日韩制服丝袜av| 日本美女一区二区三区视频| 免费成人av资源网| 蜜桃一区二区三区在线| 麻豆国产欧美日韩综合精品二区| 免费av成人在线| 国内不卡的二区三区中文字幕| 久久99国产精品久久| 国产一区二区三区四区五区入口| 国产xxx精品视频大全| 成人av在线一区二区三区| 99久久99久久免费精品蜜臀| 色激情天天射综合网| 欧美日韩国产首页在线观看| 欧美一区二区网站| 久久这里都是精品| 亚洲日本乱码在线观看| 亚洲国产成人精品视频| 免费成人小视频| 成人伦理片在线| 欧美在线一二三| 日韩精品中文字幕在线一区| 国产女人aaa级久久久级 | 琪琪久久久久日韩精品| 久久电影网电视剧免费观看| 国产成人欧美日韩在线电影| 国产999精品久久| 91福利精品第一导航| 欧美电影免费观看高清完整版在线 | 蜜臀精品一区二区三区在线观看| 精油按摩中文字幕久久| 99国产精品久久久| 在线电影院国产精品| 国产天堂亚洲国产碰碰| 亚洲精品中文在线影院| 久热成人在线视频| 本田岬高潮一区二区三区| 91精品国产一区二区人妖| 欧美国产精品v| 日韩精品五月天| aaa亚洲精品| 欧美成人免费网站| **网站欧美大片在线观看| 五月天丁香久久| 99麻豆久久久国产精品免费| 欧美福利电影网| 亚洲欧美综合另类在线卡通| 免费观看一级特黄欧美大片| 91色porny在线视频| 精品免费国产一区二区三区四区| 亚洲蜜臀av乱码久久精品 | 99久久精品国产毛片| 欧美一卡二卡三卡| 一二三区精品视频| 国产精品一区二区你懂的| 337p亚洲精品色噜噜狠狠| 国产精品国模大尺度视频| 久久久久久久久久久久久女国产乱| 午夜日韩在线观看| 精品入口麻豆88视频| 欧美精品国产精品| 亚洲天堂精品在线观看| 国产一区二区在线视频| 欧美精选一区二区| 一二三四区精品视频| 91在线视频播放地址| 久久综合给合久久狠狠狠97色69| 日韩精品久久理论片| 欧美在线观看你懂的| 亚洲视频一区二区免费在线观看| 国产精品456| 26uuu国产日韩综合| 理论电影国产精品| 777a∨成人精品桃花网| 亚洲一区日韩精品中文字幕| www.成人网.com| 国产精品久久久久aaaa| 大尺度一区二区| 色婷婷av一区二区三区gif| 欧美肥大bbwbbw高潮| 亚洲图片欧美视频| 欧美性色aⅴ视频一区日韩精品| 亚洲欧美日韩一区二区|