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

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

?? mixin.cpp

?? 使用G.729協議來進行語音傳輸的
?? CPP
字號:
// MixIn.cpp: implementation of the CMixIn class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MixIn.h"

#define	WND_CLASS_NAME	"Input Volume Msg Wnd Class"
#define	WND_NAME		"Input Volume Msg Wnd"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
static CMixIn *g_pThis = NULL;
LRESULT CALLBACK CMixIn::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);
}

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

CMixIn::~CMixIn()
{

}
MMRESULT CMixIn::GetLastMMError()
{
	return m_mmr;
}
CString CMixIn::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;
}

BOOL CMixIn::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;

	HWAVEIN hwaveIn;
	m_mmr = waveInOpen( &hwaveIn, WAVE_MAPPER, &wfx, 0L, 0L, CALLBACK_NULL );

	if ( m_mmr != MMSYSERR_NOERROR )
	{
		return false;
	}
	m_mmr = mixerGetID((HMIXEROBJ)hwaveIn, &m_uiMixerId, MIXER_OBJECTF_HWAVEIN );
	waveInClose( hwaveIn );
	if ( m_mmr != MMSYSERR_NOERROR )
	{
		return false;
	}

	// Exposing Window to Mixer
	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(&m_hMixer, m_uiMixerId, (DWORD)m_hWnd, 0L, CALLBACK_WINDOW );
	if (m_mmr != MMSYSERR_NOERROR )
	{
		return false;
	}
	return TRUE;
}

BOOL CMixIn::Initialize(UINT uLineIndex)
{
	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_DST_WAVEIN;
	MixerLine.dwSource = 1;

	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);

	MIXERLINE Line;
	memset( &Line, 0, sizeof(MIXERLINE) );
	Line.cbStruct = sizeof(MIXERLINE);

	if ((uLineIndex < MixerLine.cConnections))
	{
		Line.dwDestination = MixerLine.dwDestination;
		Line.dwSource = uLineIndex;
		m_mmr = mixerGetLineInfo((HMIXEROBJ)m_hMixer, &Line, MIXER_GETLINEINFOF_SOURCE );
		if ( m_mmr != MMSYSERR_NOERROR )
		{
			return false;
		}

		LineControls.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
		LineControls.dwLineID = Line.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;
		}		
	} 
	else
	{
		return false;
	}
	m_dwMinimalVolume = Control.Bounds.dwMinimum;
	m_dwMaximalVolume = Control.Bounds.dwMaximum;

	return TRUE;
}

BOOL CMixIn::EnumerateInputLines(int &dwUserValue)
{
	if (!m_hMixer)
	{
		TRACE("Handle of mix hasn't been get.\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;
	}

	MIXERLINE Line;
	for (UINT uLineIndex = 0; uLineIndex < MixerLine.cConnections; uLineIndex++ )
	{
		memset( &Line, 0, sizeof(MIXERLINE));
		Line.cbStruct = sizeof(MIXERLINE);
		Line.dwDestination = MixerLine.dwDestination;
		Line.dwSource = uLineIndex;
		m_mmr = mixerGetLineInfo((HMIXEROBJ)m_hMixer, &Line, MIXER_GETLINEINFOF_SOURCE );
		if (m_mmr != MMSYSERR_NOERROR )
		{
			return false;
		}

		if ( Line.dwComponentType == MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE )
		{
			dwUserValue = uLineIndex;
			break;
		}
	}
	return true;
}

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

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

	int i=-1;
	EnumerateInputLines(i);
	if(i != -1)
	{
		if (!Initialize(i))
		{
			TRACE("%s.\n",GetLastErrorString());
		};
	}
	m_bIni = TRUE;
	return TRUE;
}

BOOL CMixIn::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;
	return TRUE;
}

void CMixIn::OnControlChanged(int iValue)
{

}

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

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

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

void CMixIn::SetCurrentVolume(DWORD dwValue)
{
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区综合亚洲| 国产精品久久久久久久午夜片| 免费人成精品欧美精品 | 欧美精品久久99久久在免费线| 看片的网站亚洲| 亚洲色图在线看| 久久久精品一品道一区| 欧美日韩一区二区在线视频| 成人永久免费视频| 久88久久88久久久| 亚洲综合视频网| 中文字幕日韩精品一区| 欧美第一区第二区| 在线观看91av| 在线观看日产精品| 91色综合久久久久婷婷| 国产精品正在播放| 蜜桃精品视频在线| 午夜成人免费电影| 亚洲精品乱码久久久久久久久| 久久奇米777| 精品剧情v国产在线观看在线| 欧美色图片你懂的| 欧美又粗又大又爽| jlzzjlzz欧美大全| 成av人片一区二区| 国产精品一区二区视频| 久久狠狠亚洲综合| 免费成人小视频| 日韩av一区二区在线影视| 亚洲亚洲精品在线观看| 亚洲一级二级三级在线免费观看| 亚洲欧洲综合另类| 中文字幕在线一区免费| 中文字幕不卡在线观看| 国产精品欧美一级免费| 国产欧美日本一区二区三区| 久久久www免费人成精品| 国产午夜精品一区二区三区视频 | 在线成人av影院| 国产精品久久久久7777按摩 | 亚洲午夜精品网| 一区二区三区.www| 亚洲线精品一区二区三区| 亚洲精品免费看| 亚洲激情中文1区| 夜夜精品视频一区二区| 亚洲一区二区三区爽爽爽爽爽| 亚洲一线二线三线久久久| 亚洲一区二区在线免费观看视频| 一区二区三区欧美激情| 亚洲成人动漫在线免费观看| 亚洲成av人片一区二区梦乃 | 亚洲午夜一区二区三区| 一区二区三区中文字幕精品精品 | 成人免费一区二区三区在线观看| 国产精品久久久久久久久免费桃花 | 亚洲欧美区自拍先锋| 国产精品青草综合久久久久99| 日韩毛片在线免费观看| 一区二区三区中文在线| 亚洲va欧美va人人爽| 美女视频黄 久久| 成人午夜伦理影院| 在线亚洲免费视频| 日韩精品一区二区三区中文不卡| 久久久国产精品麻豆| 国产精品成人免费在线| 亚洲成av人片一区二区| 国产综合一区二区| 91网站视频在线观看| 欧美日韩视频在线第一区| 欧美大片免费久久精品三p| 国产色婷婷亚洲99精品小说| 亚洲欧美一区二区不卡| 日韩avvvv在线播放| 国产馆精品极品| 欧美视频中文一区二区三区在线观看| 7777女厕盗摄久久久| 欧美激情在线观看视频免费| 亚洲影院免费观看| 国产高清亚洲一区| 欧美色视频一区| 久久色.com| 亚洲一区二区三区四区在线免费观看 | 午夜影院久久久| 国内精品免费**视频| 91色在线porny| 日韩精品专区在线| 亚洲一二三区视频在线观看| 国产精品亚洲一区二区三区在线| 欧美主播一区二区三区美女| 久久免费的精品国产v∧| 一区二区三区欧美日| 国产大陆亚洲精品国产| 欧美电影在哪看比较好| 成人欧美一区二区三区白人| 蜜桃视频在线一区| 欧洲精品一区二区三区在线观看| xnxx国产精品| 日韩av在线发布| 在线看国产日韩| 国产欧美日韩在线| 精品制服美女丁香| 欧美日韩一区二区三区免费看| 中文字幕第一区| 激情综合五月婷婷| 9191成人精品久久| 亚洲午夜在线视频| 9久草视频在线视频精品| 精品人伦一区二区色婷婷| 亚洲成人久久影院| 欧美亚洲图片小说| 亚洲免费观看高清完整版在线观看| 国产尤物一区二区在线| 日韩欧美一级在线播放| 午夜精品久久久久久久久久| 97超碰欧美中文字幕| 欧美国产日本韩| 国产不卡免费视频| 亚洲精品一区二区三区99| 午夜伦欧美伦电影理论片| 在线欧美一区二区| 一区二区三区国产| 欧美综合天天夜夜久久| 亚洲欧美日韩系列| 91网站在线播放| 亚洲人吸女人奶水| 94色蜜桃网一区二区三区| 国产精品久久三区| 成人精品一区二区三区四区| 国产欧美日韩精品在线| 福利一区二区在线| 国产精品情趣视频| 91在线porny国产在线看| 最新国产精品久久精品| 99麻豆久久久国产精品免费| 国产精品久久久久影院亚瑟| 成人精品国产一区二区4080| 国产欧美一区二区精品性| 成人v精品蜜桃久久一区| 国产精品美女久久久久aⅴ| 成人高清av在线| 亚洲美女电影在线| 欧洲精品一区二区三区在线观看| 亚洲成人精品在线观看| 欧美一区二区在线播放| 精品一区二区三区香蕉蜜桃| 久久久久久久久蜜桃| 成人午夜激情影院| 亚洲欧美一区二区不卡| 欧美视频你懂的| 青草av.久久免费一区| 日韩精品一区二区三区视频播放 | 三级欧美在线一区| 欧美videos大乳护士334| 狠狠狠色丁香婷婷综合激情| 久久蜜桃一区二区| 91蜜桃婷婷狠狠久久综合9色| 亚洲一区二区三区自拍| 日韩视频不卡中文| 成人国产视频在线观看| 亚洲欧美视频在线观看| 欧美日韩视频在线观看一区二区三区| 日日欢夜夜爽一区| 久久久噜噜噜久久人人看| 成人午夜又粗又硬又大| 亚洲一区二区三区四区不卡| 精品日韩av一区二区| 不卡区在线中文字幕| 亚洲黄色免费网站| 日韩欧美aaaaaa| hitomi一区二区三区精品| 亚洲成人免费视| 国产欧美一区二区精品久导航| 91搞黄在线观看| 精品一区二区影视| 国产精品久久久久影院| 欧美久久久久久久久久| 国产精品夜夜嗨| 午夜激情久久久| 国产拍欧美日韩视频二区| 欧美日本韩国一区| 国产91清纯白嫩初高中在线观看| 亚洲第一在线综合网站| 欧美激情综合在线| 69精品人人人人| 波多野结衣亚洲| 麻豆91在线播放| 一区二区三区精品在线| 国产视频一区不卡| 欧美一区二区三区公司| 色先锋资源久久综合| 国产麻豆欧美日韩一区| 婷婷国产在线综合| 最新不卡av在线| 久久久久久久电影| 欧美一区二区三区的| 欧美性欧美巨大黑白大战| 成人h动漫精品|