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

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

?? volumeinxxx.cpp

?? nettalk
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//NetTalk
/*------------------------------------------------------------------------------*\
 =============================
   模塊名稱: AudioPlay.cpp
 =============================
 //Download by http://www.codefans.net
 [版權]
 
   Alex Chmut
                                              
\*------------------------------------------------------------------------------*/

#include <Windows.h>

#include "VolumeInXXX.h"

/////////////////////////////////////////////////////////////////////////////
// 		Defines
#define	BAD_DWORD	(DWORD)-1
#define	WND_CLASS_NAME	"Input Volume Msg Wnd Class"
#define	WND_NAME		"Input Volume Msg Wnd"

/////////////////////////////////////////////////////////////////////////////
// 		Globals
PCVolumeInXXX g_pThis = NULL;

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

//{{{ Audio specific functions
#define AUDFREQ			22050	// Frequency
#define AUDCHANNELS		1		// Number of channels
#define AUDBITSMPL		16		// Number of bits per sample
inline
void SetDeviceType( WAVEFORMATEX* pwfe )
{
	memset( pwfe, 0, sizeof(WAVEFORMATEX) );
	WORD  nBlockAlign = (AUDCHANNELS*AUDBITSMPL)/8;
	DWORD nSamplesPerSec = AUDFREQ;
	pwfe->wFormatTag = WAVE_FORMAT_PCM;
	pwfe->nChannels = AUDCHANNELS;
	pwfe->nBlockAlign = nBlockAlign;
	pwfe->nSamplesPerSec = nSamplesPerSec;
	pwfe->wBitsPerSample = AUDBITSMPL;
	pwfe->nAvgBytesPerSec = nSamplesPerSec*nBlockAlign;
}
//}}} Audio specific functions

/////////////////////////////////////////////////////////////////////////////
// 		Implementation
//////////////
bool CALLBACK EnumInputLineProc( UINT uLineIndex, MIXERLINE* pLineInfo, DWORD dwUserValue )
{
	if ( pLineInfo->dwComponentType == MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE )
	{
		*((UINT*)dwUserValue) = uLineIndex;
		return false;
	}
	return true;
}
/*------------------------------------------------------------------------------*/
CVolumeInXXX::CVolumeInXXX()
:	m_bOK(false),
		m_bInitialized(false),
		m_bAvailable(false),

		m_uMixerID(0L),
		m_dwMixerHandle(0L),
		m_hWnd(NULL),

		m_uMicrophoneSourceLineIndex(BAD_DWORD),

		m_dwMinimalVolume(BAD_DWORD),
		m_dwMaximalVolume(BAD_DWORD),

		m_pfUserSink(NULL),
		m_dwUserValue(0L)
{
	if ( m_bOK = Init() )
	{
		g_pThis = this;
		UINT i=-1;
		EnumerateInputLines(EnumInputLineProc,(DWORD)&i);
		if(i!=(UINT)-1)
		{
			if ( !Initialize( i ) )
			{
				Done();
				g_pThis = NULL;
			}
		}
	}
}
/*------------------------------------------------------------------------------*/
CVolumeInXXX::CVolumeInXXX( UINT uLineIndex )
	:	m_bOK(false),
		m_bInitialized(false),
		m_bAvailable(false),

		m_uMixerID(0L),
		m_dwMixerHandle(0L),
		m_hWnd(NULL),

		m_uMicrophoneSourceLineIndex(BAD_DWORD),

		m_dwMinimalVolume(BAD_DWORD),
		m_dwMaximalVolume(BAD_DWORD),

		m_pfUserSink(NULL),
		m_dwUserValue(0L)
{
	if ( m_bOK = Init() )
	{
		g_pThis = this;
		if ( !Initialize( uLineIndex ) )
		{
			Done();
			g_pThis = NULL;
		}
	}
}
/*------------------------------------------------------------------------------*/
//////////////
CVolumeInXXX::~CVolumeInXXX()
{
	if ( m_bOK )
		Done();
	g_pThis = NULL;
}
/*------------------------------------------------------------------------------*/
//////////////
bool CVolumeInXXX::Init()
{
	if ( !mixerGetNumDevs() )
		return false;
	// Getting Mixer ID
	HWAVEIN hwaveIn;
	MMRESULT mmResult;
	WAVEFORMATEX WaveFmt;
	SetDeviceType( &WaveFmt );
	mmResult = waveInOpen( &hwaveIn, WAVE_MAPPER, &WaveFmt, 0L, 0L, CALLBACK_NULL );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		
		return false;
	} else {
		mmResult = mixerGetID( (HMIXEROBJ)hwaveIn, &m_uMixerID, MIXER_OBJECTF_HWAVEIN );
		waveInClose( hwaveIn );
		if ( mmResult != 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);
	mmResult = mixerOpen( (LPHMIXER)&m_dwMixerHandle, m_uMixerID, (DWORD)m_hWnd, 0L, CALLBACK_WINDOW );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		
		::DestroyWindow( m_hWnd );
		return false;
	}
	return true;
}
/*------------------------------------------------------------------------------*/
//////////////
void CVolumeInXXX::Done()
{
	if ( mixerClose( (HMIXER)m_dwMixerHandle ) != MMSYSERR_NOERROR )
	{
	
	}
	::DestroyWindow( m_hWnd );
	m_bInitialized = false;
	m_bOK = false;
}
/*------------------------------------------------------------------------------*/
//////////////
void CVolumeInXXX::OnControlChanged( DWORD dwControlID )
{
	if ( m_dwVolumeControlID == dwControlID )
	{
		DWORD dwVolume = GetCurrentVolume();
		if ( (dwVolume!=BAD_DWORD) && (m_pfUserSink) )
		{
			(*m_pfUserSink)( dwVolume, m_dwUserValue );
		}
	}
}
/*------------------------------------------------------------------------------*/
//////////////
bool CVolumeInXXX::Initialize( UINT uLineIndex )
{
	MMRESULT mmResult;
	if ( !m_bOK )
		return false;

	MIXERLINE MixerLine;
	memset( &MixerLine, 0, sizeof(MIXERLINE) );
	MixerLine.cbStruct = sizeof(MIXERLINE);
	MixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
	mmResult = mixerGetLineInfo( (HMIXEROBJ)m_dwMixerHandle, &MixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE );
	if ( mmResult != 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;
		mmResult = mixerGetLineInfo( (HMIXEROBJ)m_dwMixerHandle, &Line, MIXER_GETLINEINFOF_SOURCE );
		if ( mmResult != MMSYSERR_NOERROR )
		{
		
			return false;
		}
	
		LineControls.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
		LineControls.dwLineID = Line.dwLineID;
		LineControls.cControls = 1;
		LineControls.cbmxctrl = sizeof(MIXERCONTROL);
		LineControls.pamxctrl = &Control;
		mmResult = mixerGetLineControls( (HMIXEROBJ)m_dwMixerHandle, &LineControls, MIXER_GETLINECONTROLSF_ONEBYTYPE );
		if ( mmResult == MMSYSERR_NOERROR )
		{
			if ( !(Control.fdwControl & MIXERCONTROL_CONTROLF_DISABLED) )
			{
				m_bAvailable = true;
				
			} else {
			}
		} else {
		}		
	} else {
		return false;
	}

	// Retrieving Microphone Source Line
	for ( UINT uLine = 0; uLine < MixerLine.cConnections; uLine++ )
	{
		MIXERLINE MicrophoneLine;
		memset( &MicrophoneLine, 0, sizeof(MIXERLINE) );
		MicrophoneLine.cbStruct = sizeof(MIXERLINE);
		MicrophoneLine.dwDestination = MixerLine.dwDestination;
		MicrophoneLine.dwSource = uLine;
		mmResult = mixerGetLineInfo( (HMIXEROBJ)m_dwMixerHandle, &MicrophoneLine, MIXER_GETLINEINFOF_SOURCE );
		if ( mmResult == MMSYSERR_NOERROR )
		{
			if ( MicrophoneLine.dwComponentType == MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE )
			{
				m_uMicrophoneSourceLineIndex = MicrophoneLine.dwSource;
				break;
			}
		}
	}
	if ( m_uMicrophoneSourceLineIndex == BAD_DWORD )
	{
	}

	m_uSourceLineIndex = uLineIndex;
	m_nChannelCount = Line.cChannels;
	m_dwLineID = LineControls.dwLineID;
	m_dwVolumeControlID = Control.dwControlID;
	m_dwMinimalVolume = Control.Bounds.dwMinimum;
	m_dwMaximalVolume = Control.Bounds.dwMaximum;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一二三| 青青草国产精品亚洲专区无| 国产麻豆91精品| 欧美一级日韩不卡播放免费| 午夜欧美视频在线观看| 欧美日韩国产精品成人| 午夜av一区二区三区| 欧美日韩高清一区二区三区| 日韩中文字幕麻豆| 欧美电视剧在线观看完整版| 经典三级视频一区| 中文在线免费一区三区高中清不卡| 国产成人综合网站| 国产精品国产三级国产普通话三级| 成人免费观看视频| 亚洲激情六月丁香| 91精品国产黑色紧身裤美女| 久久电影网电视剧免费观看| 精品第一国产综合精品aⅴ| 成人综合在线观看| 一区二区在线看| 日韩欧美国产综合| 不卡在线视频中文字幕| 亚洲午夜激情av| 亚洲精品一线二线三线无人区| 岛国一区二区在线观看| 亚洲综合一区二区精品导航| 欧美理论片在线| 国产精品99久久久久久久女警| 亚洲欧美视频一区| 日韩欧美黄色影院| 99久精品国产| 麻豆精品视频在线观看| 国产精品色一区二区三区| 一本久久精品一区二区| 人人超碰91尤物精品国产| 日本一区二区三区高清不卡| 在线精品视频一区二区| 激情欧美一区二区| 亚洲六月丁香色婷婷综合久久| 欧美一级黄色大片| 色激情天天射综合网| 看电视剧不卡顿的网站| 中文字幕在线不卡视频| 91精品免费观看| 99精品黄色片免费大全| 久久se精品一区精品二区| 最好看的中文字幕久久| 日韩西西人体444www| 不卡一区中文字幕| 国产麻豆9l精品三级站| 视频在线观看91| 亚洲欧美偷拍卡通变态| 久久久久久99精品| 欧美一区二区三区在线观看| av资源网一区| 国产酒店精品激情| 日韩成人伦理电影在线观看| 亚洲欧洲精品成人久久奇米网| 欧美xxxxxxxxx| 欧美日韩精品一区二区三区四区 | 国产成+人+日韩+欧美+亚洲| 天天色综合天天| 一区二区三区中文免费| 国产丝袜欧美中文另类| 日韩视频免费观看高清完整版 | 欧美三级视频在线| 94-欧美-setu| 风间由美中文字幕在线看视频国产欧美| 日本欧美一区二区三区乱码| 一区二区三区成人在线视频| 中文字幕av一区二区三区免费看| 精品福利一区二区三区 | 精品国产伦一区二区三区免费| 欧美美女一区二区三区| 欧美日韩在线直播| 欧美图区在线视频| 欧美丝袜丝交足nylons图片| 色先锋资源久久综合| 色久综合一二码| 欧洲一区在线观看| 欧美系列在线观看| 欧美日韩欧美一区二区| 欧美日韩综合在线| 亚洲精品一线二线三线无人区| 粉嫩一区二区三区性色av| 日韩成人一区二区| 亚洲三级在线播放| 欧美午夜视频网站| 欧美影院一区二区三区| 欧美视频在线一区二区三区| 91丨九色丨蝌蚪富婆spa| 波多野结衣精品在线| 成人丝袜高跟foot| 91日韩精品一区| 日本高清免费不卡视频| 欧美色综合网站| 欧美精品乱码久久久久久按摩| 7777精品伊人久久久大香线蕉最新版 | 欧美一区在线视频| 欧美tickling网站挠脚心| 精品日韩av一区二区| 26uuu国产一区二区三区| 久久久久久久久久久电影| 国产精品全国免费观看高清| 成人免费视频在线观看| 艳妇臀荡乳欲伦亚洲一区| 午夜天堂影视香蕉久久| 裸体一区二区三区| 国产成人亚洲综合a∨婷婷| 成人免费看视频| 91黄色免费观看| 日韩丝袜美女视频| 国产精品私人影院| 亚洲第一会所有码转帖| 久久草av在线| 91传媒视频在线播放| 日韩欧美一区二区在线视频| 国产女人aaa级久久久级 | 国产精品一区久久久久| 波多野结衣中文字幕一区| 奇米色一区二区| 日韩欧美国产高清| 五月激情综合网| 成人国产亚洲欧美成人综合网| 欧美综合一区二区三区| 日本福利一区二区| 制服丝袜日韩国产| 亚洲欧美日韩国产综合| 91在线视频在线| 国产精品青草久久| 奇米精品一区二区三区在线观看一| 99久久国产综合精品女不卡| 久久久99久久| 日韩精品成人一区二区在线| 丁香一区二区三区| 日韩一区二区视频在线观看| 一片黄亚洲嫩模| 99久久精品情趣| 欧美mv和日韩mv的网站| 亚洲人成精品久久久久久| 久久精品国产一区二区三| www.日韩av| 一区二区三区日韩| 国产一级精品在线| 日韩欧美国产一区二区在线播放 | 精品一区二区三区免费视频| 91亚洲国产成人精品一区二区三| 日韩午夜中文字幕| 麻豆一区二区在线| 日韩欧美电影在线| 狠狠色综合日日| 欧美一区二区福利视频| 婷婷成人激情在线网| 欧美亚洲一区三区| 亚洲综合久久av| 久久久久久亚洲综合影院红桃 | 亚洲欧美怡红院| 国内精品国产三级国产a久久| 综合婷婷亚洲小说| 亚洲精品久久久蜜桃| 久久蜜桃av一区精品变态类天堂| 欧美亚洲国产怡红院影院| 国产色产综合产在线视频 | 一区二区三区在线观看视频| 国产麻豆精品theporn| 精品少妇一区二区三区视频免付费| 亚洲成人激情综合网| 色悠悠久久综合| 亚洲欧美另类综合偷拍| 粉嫩嫩av羞羞动漫久久久 | 日本一区二区三级电影在线观看| 国产成人精品www牛牛影视| 日韩免费电影网站| 成人app网站| 日日摸夜夜添夜夜添精品视频 | www.av亚洲| 国产成人欧美日韩在线电影| 国产精品久久久久久久蜜臀| 久久精品一区二区三区不卡| 美女在线视频一区| 欧美一级高清片| 日本在线不卡一区| 精品88久久久久88久久久| 日本v片在线高清不卡在线观看| 在线播放日韩导航| 蜜桃av一区二区| 91精品国产手机| 激情成人综合网| 国产精品三级久久久久三级| 成人自拍视频在线观看| 中文字幕日韩av资源站| 成人在线视频一区| 亚洲三级电影网站| 欧美专区亚洲专区| 天天爽夜夜爽夜夜爽精品视频| 日韩片之四级片| 成人免费视频app| 亚洲一区在线观看网站| 欧美男同性恋视频网站|