⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 optionaudio.cpp

📁 一个简单的视频会议VC++MFC工程文件
💻 CPP
字号:
// OptionAudio.cpp : implementation file
//

#include "stdafx.h"
#include "VISEP.h"
#include "OptionAudio.h"
#include "VISEPDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// COptionAudio dialog


COptionAudio::COptionAudio(CWnd* pParent /*=NULL*/)
	: CDialog(COptionAudio::IDD, pParent)
{
	//{{AFX_DATA_INIT(COptionAudio)
	m_inputDevice = -1;
	m_jitter = 0;
	m_micVolume = 0;
	m_outputDevice = -1;
	m_preferredCodec = -1;
	m_silenceDetection = -1;
	m_spkVolume = 0;
	m_threshold = 0;
	//}}AFX_DATA_INIT
}


void COptionAudio::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(COptionAudio)
	DDX_Control(pDX, IDC_PREFERRED_CODEC, m_ctlPreferredCodec);
	DDX_Control(pDX, IDC_SILENCE_DETECTION, m_ctlSilenceDetection);
	DDX_Control(pDX, IDC_OUTPUT_DEVICE, m_ctlOutputDevice);
	DDX_Control(pDX, IDC_INPUT_DEVICE, m_ctlInputDevice);
	DDX_CBIndex(pDX, IDC_INPUT_DEVICE, m_inputDevice);
	DDX_Text(pDX, IDC_JITTER, m_jitter);
	DDV_MinMaxDWord(pDX, m_jitter, 30, 1000);
	DDX_Slider(pDX, IDC_MIC_VOLUME, m_micVolume);
	DDX_CBIndex(pDX, IDC_OUTPUT_DEVICE, m_outputDevice);
	DDX_CBIndex(pDX, IDC_PREFERRED_CODEC, m_preferredCodec);
	DDX_CBIndex(pDX, IDC_SILENCE_DETECTION, m_silenceDetection);
	DDX_Slider(pDX, IDC_SPK_VOLUME, m_spkVolume);
	DDX_Text(pDX, IDC_THRESHOLD, m_threshold);
	DDV_MinMaxDWord(pDX, m_threshold, 0, 100);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(COptionAudio, CDialog)
	//{{AFX_MSG_MAP(COptionAudio)
	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_MIC_VOLUME, OnReleasedcaptureMicVolume)
	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SPK_VOLUME, OnReleasedcaptureSpkVolume)
	ON_CBN_SELCHANGE(IDC_INPUT_DEVICE, OnSelchangeInputDevice)
	ON_CBN_SELCHANGE(IDC_OUTPUT_DEVICE, OnSelchangeOutputDevice)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COptionAudio message handlers

BOOL COptionAudio::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	
	DWORD i;
	char name[256]="";
	//枚举录音设备
	for(i=0;i<CAudioRecorder::GetDeviceCount();i++)
	{
		CAudioRecorder::GetDeviceName(i,name,256);
		m_ctlInputDevice.AddString(name);
	}
	//枚举播放设备
	for(i=0;i<CAudioPlayer::GetDeviceCount();i++)
	{
		CAudioPlayer::GetDeviceName(i,name,256);
		m_ctlOutputDevice.AddString(name);
	}

	m_ctlSilenceDetection.AddString("不使用");
	m_ctlSilenceDetection.AddString("手动");
	m_ctlSilenceDetection.AddString("自动");
	
	CVISEPDlg *dlg=(CVISEPDlg*)AfxGetMainWnd();
	//枚举可用的音频codec
	for(i=0;i<dlg->m_pep->GetAudioCodecCount();i++)
	{
		dlg->m_pep->GetAudioCodecName(i,name,256);
		m_ctlPreferredCodec.AddString(name);
	}
	//打开音量控制
	m_volumeIn.Open(m_inputDevice,VOL_IN);
	m_micVolume=m_volumeIn.GetVolume();

	m_volumeOut.Open(m_outputDevice,VOL_OUT);
	m_spkVolume=m_volumeOut.GetVolume();
	

	UpdateData(FALSE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void COptionAudio::OnReleasedcaptureMicVolume(NMHDR* pNMHDR, LRESULT* pResult) 
{
	UpdateData();
	m_volumeIn.SetVolume(m_micVolume);
	*pResult = 0;
}

void COptionAudio::OnReleasedcaptureSpkVolume(NMHDR* pNMHDR, LRESULT* pResult) 
{
	UpdateData();
	m_volumeOut.SetVolume(m_spkVolume);
	*pResult = 0;
}

void COptionAudio::OnSelchangeInputDevice() 
{
	UpdateData();
	m_volumeIn.Open(m_inputDevice,VOL_IN);
	m_micVolume=m_volumeIn.GetVolume();
	UpdateData(FALSE);
}

void COptionAudio::OnSelchangeOutputDevice() 
{
	UpdateData();
	m_volumeOut.Open(m_outputDevice,VOL_OUT);
	m_spkVolume=m_volumeOut.GetVolume();
	UpdateData(FALSE);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -