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

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

?? mixout.cpp

?? 使用G.729協議來進行語音傳輸的
?? CPP
字號:

#include "stdafx.h"
#include "MixOut.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#define	WND_CLASS_NAME	"Wave Output Volume Msg Wnd Class"
#define	WND_NAME		"Wave Output Volume Msg Wnd"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

static CMixOut *g_pThis = NULL;
LRESULT CALLBACK CMixOut::MixerWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	if ( uMsg == MM_MIXM_CONTROL_CHANGE )
	{
		if ( g_pThis )
		{
			g_pThis->OnControlChanged( (DWORD)lParam );
		}	
	}
	return ::DefWindowProc( hwnd, uMsg, wParam, lParam);
}

MMRESULT CMixOut::GetLastMMError()
{
	return m_mmr;
}
CString CMixOut::GetLastErrorString()
{
	char buffer[256];
	memset(buffer,0,256);
	switch(m_mmr)
	{
	case MMSYSERR_NOERROR:
		sprintf(buffer,"No error.");
		break;
	case MIXERR_INVALCONTROL:
		sprintf(buffer,"Specified device handle is invalid.");
		break;
	case MMSYSERR_BADDEVICEID:
		sprintf(buffer,"The hmxobj parameter specifies an invalid device identifier.");
		break;
	case MMSYSERR_INVALFLAG:
		sprintf(buffer,"One or more flags are invalid.");
		break;
	case MMSYSERR_INVALHANDLE:
		sprintf(buffer,"The hmxobj parameter specifies an invalid handle.");
		break;
	case MMSYSERR_INVALPARAM:
		sprintf(buffer,"One or more parameters are invalid.");
		break;
	case MMSYSERR_NODRIVER:
		sprintf(buffer,"No mixer device is available for the object specified by hmxobj.");
		break;
	case MIXERR_INVALLINE:
		sprintf(buffer,"The audio line reference is invalid..");
		break;
	case MMSYSERR_NOTSUPPORTED:
		sprintf(buffer,"The mixer device did not process the message.");
		break;
	case MMSYSERR_ALLOCATED:
		sprintf(buffer,"The specified resource is already allocated by the maximum number of clients possible.");
		break;
	case MMSYSERR_NOMEM:
		sprintf(buffer,"Unable to allocate resources.");
		break;
	default:
		sprintf(buffer,"Unknow error,Error code %d",m_mmr);
		break;
	}
	return buffer;
}

CMixOut::CMixOut():
	m_iDevNum(0),
	m_uiMixerId(0),
	m_hMixer(0),
	m_hWnd(NULL),
	m_bIni(FALSE),
	m_dwMinimalVolume(0),
	m_dwMaximalVolume(100)
{
	g_pThis = this;
}

CMixOut::~CMixOut()
{
}

BOOL CMixOut::Ini()
{
	if (m_bIni)
	{
		TRACE("Mix in has alreadly ini.\n");		
		return FALSE;
	}
	if (!OpenMixer())
	{
		TRACE("%s.\n",GetLastErrorString());
		return FALSE;
	};

	if (!Initialize())
	{
		TRACE("%s.\n",GetLastErrorString());
		return FALSE;
	}

	m_bIni = TRUE;
	return TRUE;
}

BOOL CMixOut::UnIni()
{
	if (!m_bIni)
	{
		TRACE("Mix in hasn't ini.\n");
		return FALSE;
	}
	::DestroyWindow( m_hWnd );
	CloseMixer();

	m_iDevNum = 0;
	m_uiMixerId = 0;
	m_hMixer = 0;
	m_hWnd = NULL;
	m_bIni = FALSE;
	m_dwMinimalVolume = 0;
	m_dwMaximalVolume = 100;

	m_bIni = FALSE;
	return TRUE;
}

BOOL CMixOut::OpenMixer()
{
	m_iDevNum = mixerGetNumDevs();
	if (m_iDevNum == 0)
	{
		TRACE("There (is) are no device mixer.\n");
		return FALSE;
	}

	WAVEFORMATEX wfx;
	memset( &wfx, 0, sizeof(WAVEFORMATEX) );
	wfx.wFormatTag = WAVE_FORMAT_PCM;
	wfx.nChannels = 1;
	wfx.nSamplesPerSec = 8000;
	wfx.nAvgBytesPerSec = 1 * 8000 * 16 / 8;
	wfx.nBlockAlign = 16 * 1 / 8;
	wfx.wBitsPerSample = 16;
	wfx.cbSize = 0;

	HWAVEOUT hwaveOut;
	m_mmr = waveOutOpen( &hwaveOut, WAVE_MAPPER, &wfx, 0L, 0L, CALLBACK_NULL );
	if ( m_mmr != MMSYSERR_NOERROR )
	{
		return false;
	}
	else
	{
		m_mmr = mixerGetID( (HMIXEROBJ)hwaveOut, &m_uiMixerId, MIXER_OBJECTF_HWAVEOUT );
		waveOutClose( hwaveOut );
		if (m_mmr != MMSYSERR_NOERROR )
		{
			return false;
		}
	}

	WNDCLASSEX wcx;
	memset( &wcx, 0, sizeof(WNDCLASSEX) );	
	wcx.cbSize = sizeof(WNDCLASSEX);
	wcx.lpszClassName = WND_CLASS_NAME;
	wcx.lpfnWndProc = (WNDPROC)MixerWndProc;
	::RegisterClassEx(&wcx);
	m_hWnd = CreateWindow(	WND_CLASS_NAME,
							WND_NAME,
							WS_POPUP | WS_DISABLED,
							0, 0, 0, 0,
							NULL, NULL, NULL, NULL );
	if ( !m_hWnd )
	{
	
		return false;
	}
	::ShowWindow(m_hWnd, SW_HIDE);
	m_mmr = mixerOpen( (LPHMIXER)&m_hMixer, m_uiMixerId, (DWORD)m_hWnd, 0L, CALLBACK_WINDOW );
	if (m_mmr != MMSYSERR_NOERROR )
	{
		::DestroyWindow( m_hWnd );
		return false;
	}
	return true;
}

BOOL CMixOut::CloseMixer()
{
	if (m_hMixer)
	{
		m_mmr = mixerClose((HMIXER)m_hMixer);
		if (m_mmr != MMSYSERR_NOERROR )
		{
			return false;
		}
	}
	return TRUE;
}

void CMixOut::OnControlChanged(int iValue)
{
}

BOOL CMixOut::Initialize()
{
	if (m_hMixer)
	{
		TRACE("You haven't open the mixer.\n");
		return FALSE;
	}
	
	MIXERLINE MixerLine;
	memset( &MixerLine, 0, sizeof(MIXERLINE) );
	MixerLine.cbStruct = sizeof(MIXERLINE);
	MixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
	m_mmr = mixerGetLineInfo( (HMIXEROBJ)m_hMixer, &MixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE );
	if ( m_mmr != MMSYSERR_NOERROR )
	{
		return false;
	}

	MIXERCONTROL Control;
	memset( &Control, 0, sizeof(MIXERCONTROL) );
	Control.cbStruct = sizeof(MIXERCONTROL);

	MIXERLINECONTROLS LineControls;
	memset( &LineControls, 0, sizeof(MIXERLINECONTROLS) );
	LineControls.cbStruct = sizeof(MIXERLINECONTROLS);

	LineControls.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
	LineControls.dwLineID = MixerLine.dwLineID;
	LineControls.cControls = 1;
	LineControls.cbmxctrl = sizeof(MIXERCONTROL);
	LineControls.pamxctrl = &Control;
	m_mmr = mixerGetLineControls( (HMIXEROBJ)m_hMixer, &LineControls, MIXER_GETLINECONTROLSF_ONEBYTYPE );
	if ( m_mmr == MMSYSERR_NOERROR )
	{
		if ((Control.fdwControl & MIXERCONTROL_CONTROLF_DISABLED) )
		{
			return FALSE;
		} 
	} 
	else 
	{
		return FALSE;
	}

	m_dwMinimalVolume = Control.Bounds.dwMinimum;
	m_dwMaximalVolume = Control.Bounds.dwMaximum;

	return TRUE;
}

DWORD CMixOut::GetMinimalVolume()
{
	if (!m_bIni)
	{
		TRACE("Mix in hasn't ini.\n");
		return 0;
	}
	return this->m_dwMinimalVolume ;
}

DWORD CMixOut::GetMaximalVolume()
{
	if (!m_bIni)
	{
		TRACE("Mix in hasn't ini.\n");
		return 100;
	}
	return this->m_dwMaximalVolume ;
}

DWORD CMixOut::GetCurrentVolume()
{
	if (!m_bIni)
	{
		TRACE("Mix in hasn't ini.\n");
		return 0;
	}
	return 0;
}

void CMixOut::SetCurrentVolume(DWORD dwValue)
{
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费视频观看| 麻豆久久久久久| 日本免费新一区视频| 粉嫩一区二区三区在线看| 91黄色在线观看| 国产日韩欧美精品综合| 七七婷婷婷婷精品国产| 91视频com| 国产精品美女久久久久久久久久久 | 成人精品一区二区三区四区| 欧美人动与zoxxxx乱| 中文一区一区三区高中清不卡| 天天av天天翘天天综合网| 99精品久久免费看蜜臀剧情介绍| 久久亚洲精品国产精品紫薇| 日韩av高清在线观看| 欧美日本一道本在线视频| 亚洲色图欧洲色图| 岛国精品在线观看| 久久先锋资源网| 免费看黄色91| 欧美一区三区四区| 日本亚洲欧美天堂免费| 欧美日韩激情在线| 亚洲成a人片在线观看中文| 91女人视频在线观看| 亚洲国产成人一区二区三区| 国产成人午夜99999| 久久影音资源网| 国产综合色在线| 国产亚洲精久久久久久| 国产iv一区二区三区| 中文字幕精品—区二区四季| 国产91露脸合集magnet| 国产精品盗摄一区二区三区| 国产成人自拍在线| 国产精品久久久久久久久免费丝袜| 国产精品一区二区在线看| 国产欧美日韩麻豆91| 成人在线视频一区二区| 国产精品久久久久久久蜜臀| 91色婷婷久久久久合中文| 亚洲女人的天堂| 欧美高清精品3d| 男男成人高潮片免费网站| 欧美成人官网二区| 国产sm精品调教视频网站| 亚洲人成7777| 欧美日韩不卡在线| 国产成人综合网| 一区二区三区四区在线免费观看| 欧美在线一区二区| 激情六月婷婷综合| 国产精品久久久久久久蜜臀 | 97久久精品人人做人人爽50路| 亚洲欧美日韩在线不卡| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 久久er精品视频| 国产欧美日韩久久| 欧美午夜一区二区三区免费大片| 麻豆视频一区二区| 综合中文字幕亚洲| 91精品国产综合久久久久久久 | 在线观看国产91| 久久精品国产77777蜜臀| 中文字幕不卡在线播放| 欧美另类变人与禽xxxxx| 国产一区视频导航| 亚洲香肠在线观看| 国产夜色精品一区二区av| 色综合咪咪久久| 国产精品亚洲一区二区三区妖精| 亚洲免费色视频| ww久久中文字幕| 欧美午夜一区二区三区免费大片| 国产剧情av麻豆香蕉精品| 亚洲一区二区三区影院| 久久精子c满五个校花| 欧美性色欧美a在线播放| 国产激情一区二区三区四区| 亚洲成人一区二区在线观看| 国产精品色呦呦| 日韩欧美高清在线| 欧美色涩在线第一页| 顶级嫩模精品视频在线看| 日韩精品一卡二卡三卡四卡无卡| 亚洲欧洲av一区二区三区久久| 日韩一区二区在线看| 欧美这里有精品| 91一区二区在线| 成人做爰69片免费看网站| 精品一区中文字幕| 天天综合色天天| 亚洲成人午夜电影| 亚洲精品少妇30p| 亚洲视频免费观看| 国产精品三级在线观看| 久久综合色综合88| 日韩精品一区二区三区swag| 欧美精品自拍偷拍动漫精品| 色国产综合视频| 色综合一个色综合亚洲| 99久久精品国产网站| 99久久精品一区二区| 成人aaaa免费全部观看| 成人免费视频app| 高清不卡一二三区| 成人h精品动漫一区二区三区| 丰满少妇久久久久久久| 成人视屏免费看| 成人av网站免费| 99re这里只有精品首页| 97精品视频在线观看自产线路二| 成人国产一区二区三区精品| 国产宾馆实践打屁股91| 成人深夜视频在线观看| 99久精品国产| 欧美亚洲国产一区在线观看网站| 欧美亚洲动漫精品| 欧美日韩免费不卡视频一区二区三区| 色偷偷一区二区三区| 欧美亚洲动漫精品| 在线综合+亚洲+欧美中文字幕| 555www色欧美视频| 欧美成人精品福利| 久久久蜜桃精品| 亚洲天堂网中文字| 亚洲一二三区不卡| 麻豆国产欧美日韩综合精品二区| 麻豆91在线看| 高清shemale亚洲人妖| 97se狠狠狠综合亚洲狠狠| 欧美日韩一卡二卡三卡| 91精品国产一区二区三区蜜臀| 日韩一区二区三区电影在线观看| 精品国产污污免费网站入口| 久久九九全国免费| 一区二区三区四区五区视频在线观看 | 久久av资源网| 成人精品高清在线| 欧美三级韩国三级日本三斤| 日韩欧美亚洲另类制服综合在线| 久久精品一区二区三区不卡牛牛| 成人欧美一区二区三区黑人麻豆| 亚洲黄色小视频| 美女www一区二区| 91免费小视频| 欧美大尺度电影在线| 国产精品久久久久久久岛一牛影视 | 国产欧美精品日韩区二区麻豆天美| ㊣最新国产の精品bt伙计久久| 偷拍与自拍一区| 成人性生交大片免费看视频在线| 欧美视频在线播放| 国产欧美一区二区三区在线看蜜臀| 夜色激情一区二区| 国产福利91精品| 欧美肥胖老妇做爰| 中文字幕在线不卡一区二区三区 | 欧美酷刑日本凌虐凌虐| 国产午夜亚洲精品羞羞网站| 一二三四社区欧美黄| 国产乱人伦精品一区二区在线观看| 97超碰欧美中文字幕| 久久亚洲综合色一区二区三区| 亚洲国产精品一区二区www | 久久精品国产色蜜蜜麻豆| 一本久久综合亚洲鲁鲁五月天| 91麻豆精品国产自产在线观看一区 | 爽爽淫人综合网网站| 成人h版在线观看| 精品国产青草久久久久福利| 一区二区三区加勒比av| 国产91精品露脸国语对白| 欧美成人vr18sexvr| 天天影视网天天综合色在线播放| 色综合欧美在线视频区| 国产精品毛片久久久久久| 久久99精品国产.久久久久| 欧美日本在线一区| 亚洲图片自拍偷拍| 色综合天天视频在线观看| 国产精品乱码久久久久久| 黑人巨大精品欧美一区| 欧美一级艳片视频免费观看| 亚洲资源中文字幕| 色综合一个色综合亚洲| 自拍av一区二区三区| 成人在线视频首页| 国产精品欧美一区二区三区| 国产综合久久久久影院| 欧美www视频| 久久99精品国产麻豆不卡| 日韩欧美一级二级| 韩国女主播一区| 久久久av毛片精品| 国产成人午夜精品5599| 国产天堂亚洲国产碰碰| 高清不卡在线观看av| 中文字幕在线观看不卡视频|