MFC中控制系统音量类的实现
基于MFC运用windows media player控件实现的多媒体播放器

基于MFC运用windows media player控件实现的多媒体播放器设计平台PC(windows 7 x64),Visual C++ 6.0设计框图一.工程创建本程序基于MFC的对话框模式,起名为MediaPlayer。
二. 添加Windows Media Player 控件在对话框的空白处点击右键选择“Insert ActiveX control”,在弹出的对话框中找到Windows Media Player。
(因为Win7系统中没有ActiveMovieControl控件所以就用以上控件代替了。
)三.为Windows Media Player 控件设置变量在已经添加好的控件上单击右键选择“ClassWizard”,在弹出的窗口中切换到“Member Variables”一栏,找到刚刚添加的控件的ID,选中它然后在右侧的按钮中点击“Add Variables”,然后如图所示:这样就添加成功了。
此时在源文件的对话框中,系统会自动生成必需的媒体实现文件。
四.播放器界面设计设计的界面如下图所示,其中播放控制按钮有打开文件,播放,暂停,停止,快退,快进,播放列表,全屏,退出,关于。
然后还有音量控制,播放模式,播放进度,列表选项的相关控制器件。
控件ID与变量关联如下:控件ID 变量类型变量名称WMPlayer IDC_OCX1 CWMPPlayer4 m_playerListControl IDC_LIST1 CListCtrl m_listCtrlSlider IDC_SLIDER1 CSliderCtrl m_scheduleSlider IDC_SLIDER2 CSliderCtrl m_VOLUME Radio Button IDC_ORDER int m_order 按钮控件的ID和对应的响应函数名称如下:控件名称ID 响应函数名称打开文件IDC_OPEN OnOpen()播放IDC_PLAY OnPlay()暂停IDC_PAUSE OnPause()停止IDC_STOP OnStop()快退IDC_REVERSE OnReverse()快进IDC_FORWARD OnForward()播放列表IDC_PLAYLIST OnPlayList()全屏IDC_FULLSCREEN OnFullScreen()退出IDC_EXIT OnExit()- IDC_SUB OnSub()+ IDC_ADD OnAdd()上一曲IDC_LAST OnLast()下一曲IDC_NEXT OnNext()关于IDC_ABOUT OnAbout()静音IDC_SILENCE OnSlience() 选中项上移IDC_LISTCHOOSEUP OnListchooseup()选中项下移IDC_LISTCHOOSEDOWN OnListchoosedown()删除选中项IDC_LISTCHOOSEDELETE OnListchoosedelet()删除所有项IDC_LISTDELETEALL OnListdeleteall()导入列表IDC_LISTIMPORT OnListimport()导出列表IDC_LISTEXPORT OnListexport() 五.功能实现(1)播放控制Windows Media Player 控件初始化在添加该控件的时候自动生成的多个库文件,不同的文件实现播放器各个方面的功能,所以需要我们手动将他们联系起来。
C#(源码)电脑音量大小控制器

C# 电脑音量大小控制源码备注:直接赋值代码即可用(作为资料保存不错)using System;usingSystem.Windows.Forms;usingControlTheVolume;namespace 电脑音量控制{public partial class Form1 : Form{public Form1(){ InitializeComponent(); }staticintvolumeValue = PC_VolumeControl.GetVolume();intdanqianYL;private void Form1_Load(object sender, EventArgs e){label2.Text = label1.Text = "初始系统音量为:" + PC_VolumeControl.GetVolume().ToString();//显示当前系统音量volumeValue = PC_VolumeControl.GetVolume();}private void button1_Click(object sender, EventArgs e){danqianYL = PC_VolumeControl.GetVolume();label2.Text = "当前系统音量为:" + danqianYL.ToString();PC_VolumeControl.SetVolume(danqianYL + 1000);}private void button2_Click(object sender, EventArgs e){danqianYL = PC_VolumeControl.GetVolume();label2.Text = "当前系统音量为:" + danqianYL.ToString();PC_VolumeControl.SetVolume(danqianYL - 1000);}private void button3_Click(object sender, EventArgs e){PC_VolumeControl.SetVolume(0);label2.Text = "当前系统音量为:" + PC_VolumeControl.GetVolume().ToString();}private void button4_Click(object sender, EventArgs e){try{int value = checked(int.Parse(textBox1.Text));PC_VolumeControl.SetVolume(value);}catch (Exception Ex){ MessageBox.Show(Ex.Message); }}}}//ControlTheVolume.cs类using System;usingSystem.Runtime.InteropServices;usingSystem.Windows.Forms;namespaceControlTheVolume{classPC_VolumeControl{privateconstint MMSYSERR_NOERROR = 0;privateconstint MAXPNAMELEN = 32;privateconstint MIXER_LONG_NAME_CHARS = 64;privateconstint MIXER_SHORT_NAME_CHARS = 16;privateconstint MIXER_GETLINEINFOF_COMPONENTTYPE = 0x3;privateconstint MIXER_GETCONTROLDETAILSF_VALUE = 0x0;privateconstint MIXER_GETLINECONTROLSF_ONEBYTYPE = 0x2;privateconstint MIXER_SETCONTROLDETAILSF_VALUE = 0x0;privateconstint MIXERLINE_COMPONENTTYPE_DST_FIRST = 0x0;privateconstint MIXERLINE_COMPONENTTYPE_SRC_FIRST = 0x1000;privateconstint MIXERCONTROL_CT_CLASS_FADER = 0x50000000;privateconstint MIXERCONTROL_CT_UNITS_UNSIGNED = 0x30000;privateconstint MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER | MIXERCONTROL_CT_UNITS_UNSIGNED);privateconstint MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER + 1);privateconstint MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4);privateconstint MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3);privateconstint MIXERLINE_COMPONENTTYPE_SRC_LINE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2);publicstructMixerCaps{publicintwMid; public intwPid; public intvDriverVersion;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAXPNAMELEN)]public string szPname; public intfdwSupport; public intcDestinations;}publicstruct Mixer{publicintcbStruct; public intdwControlID; public intdwControlType; publicintfdwControl; public intcMultipleItems;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MIXER_SHORT_NAME_CHARS)]public string szShortName;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MIXER_LONG_NAME_CHARS)]public string szName; public intlMinimum; public intlMaximum;[MarshalAs(UnmanagedType.U4, SizeConst = 10)]publicint reserved;}publicstructMixerDetails{publicintcbStruct; public intdwControlID; public intcChannels;publicint item; public intcbDetails; public IntPtrpaDetails;}publicstructUnsignedMixerDetails { public intdwValue; }publicstructMixerLine{publicintcbStruct; public intdwDestination; public intdwSource;publicintdwLineID; public intfdwLine; public intdwUser; publicintdwComponentType; public intcChannels; public intcConnections; publicintcControls;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MIXER_SHORT_NAME_CHARS)]public string szShortName;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MIXER_LONG_NAME_CHARS)]public string szName; public intdwType; public intdwDeviceID;publicintwMid; public intwPid; public intvDriverVersion;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAXPNAMELEN)]public string szPname;}//定义监听变量publicstructLineControls{publicintcbStruct; public intdwLineID; public intdwControl;publicintcControls; public intcbmxctrl; public IntPtrpamxctrl;}[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerClose(inthmx);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetControlDetailsA(inthmxobj, ref MixerDetailspmxcd, intfdwDetails);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetDevCapsA(intuMxId, MixerCapspmxcaps, intcbmxcaps);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetID(inthmxobj, intpumxID, intfdwId);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetLineControlsA(inthmxobj, ref LineControlspmxlc, intfdwControls);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetLineInfoA(inthmxobj, ref MixerLinepmxl, intfdwInfo);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetNumDevs();[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerMessage(inthmx, intuMsg, int dwParam1, int dwParam2); [DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerOpen(out intphmx, intuMxId, intdwCallback, intdwInstance, intfdwOpen);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerSetControlDetails(inthmxobj, ref MixerDetailspmxcd, intfdwDetails);private static boolGetMixer(inti, int type, intctrlType, out Mixer mixerControl, out intcurrVolume){int details;boolbReturn;currVolume = -1;LineControlslineControls = new LineControls();MixerLine line = new MixerLine();MixerDetailsmcDetails = new MixerDetails(); UnsignedMixerDetailsdetailsUnsigned = new UnsignedMixerDetails();mixerControl = new Mixer();//mixerline设置属性的对象line.cbStruct = Marshal.SizeOf(line);line.dwComponentType = type;details = mixerGetLineInfoA(i, ref line, MIXER_GETLINEINFOF_COMPONENTTYPE);if (MMSYSERR_NOERROR == details){intmcSize = 152;int control = Marshal.SizeOf(typeof(Mixer));lineControls.pamxctrl = Marshal.AllocCoTaskMem(mcSize);lineControls.cbStruct = Marshal.SizeOf(lineControls);lineControls.dwLineID = line.dwLineID;lineControls.dwControl = ctrlType;ontrols = 1;lineControls.cbmxctrl = mcSize;mixerControl.cbStruct = mcSize;details = mixerGetLineControlsA(i, ref lineControls, MIXER_GETLINECONTROLSF_ONEBYTYPE);if (MMSYSERR_NOERROR == details){bReturn = true;mixerControl = (Mixer)Marshal.PtrToStructure(lineControls.pamxctrl, typeof(Mixer));}else { bReturn = false; }intmcDetailsSize = Marshal.SizeOf(typeof(MixerDetails));intmcDetailsUnsigned = Marshal.SizeOf(typeof(UnsignedMixerDetails)); mcDetails.cbStruct = mcDetailsSize;mcDetails.dwControlID = mixerControl.dwControlID;mcDetails.paDetails = Marshal.AllocCoTaskMem(mcDetailsUnsigned);hannels = 1;mcDetails.item = 0;mcDetails.cbDetails = mcDetailsUnsigned;details = mixerGetControlDetailsA(i, ref mcDetails, MIXER_GETCONTROLDETAILSF_VALUE);detailsUnsigned = (UnsignedMixerDetails)Marshal.PtrToStructure(mcDetails.paDetails,typeof(UnsignedMixerDetails));currVolume = detailsUnsigned.dwValue;returnbReturn;}bReturn = false;returnbReturn;}/// <summary>///方法将该值设置为一个音量控制/// </summary>private static boolSetMixer(inti, Mixer mixerControl, intvolumeLevel){boolbReturn;int details;MixerDetailsmixerDetails = new MixerDetails();UnsignedMixerDetails volume = new UnsignedMixerDetails();mixerDetails.item = 0;mixerDetails.dwControlID = mixerControl.dwControlID;mixerDetails.cbStruct = Marshal.SizeOf(mixerDetails);mixerDetails.cbDetails = Marshal.SizeOf(volume);hannels = 1;volume.dwValue = volumeLevel;mixerDetails.paDetails = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(UnsignedMixerDetails))); Marshal.StructureToPtr(volume, mixerDetails.paDetails, false);details = mixerSetControlDetails(i, ref mixerDetails, MIXER_SETCONTROLDETAILSF_VALUE);if (MMSYSERR_NOERROR == details){ bReturn = true; }else{ bReturn = false; }returnbReturn;}/// <summary>/////获取音量/// </summary>public static intGetVolume(){intcurrVolume;intmixerControl;Mixer mixer = new Mixer();mixerOpen(out mixerControl, 0, 0, 0, 0);int type = MIXERCONTROL_CONTROLTYPE_VOLUME;GetMixer(mixerControl, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, type, out mixer, out currVolume);mixerClose(mixerControl);returncurrVolume;}/// <summary>/// 设置音量大小/// </summary>/// <param name="volumeLevel">音量大小</param>public static void SetVolume(intvolumeLevel){try{intcurrVolume;intmixerControl;Mixer volumeControl = new Mixer();mixerOpen(out mixerControl, 0, 0, 0, 0);intcontrolType = MIXERCONTROL_CONTROLTYPE_VOLUME;GetMixer(mixerControl, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, controlType, out volumeControl, out currVolume);if (volumeLevel>volumeControl.lMaximum){ volumeLevel = volumeControl.lMaximum; }else if (volumeLevel<volumeControl.lMinimum){ volumeLevel = volumeControl.lMinimum; }SetMixer(mixerControl, volumeControl, volumeLevel);GetMixer(mixerControl, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, controlType, out volumeControl, out currVolume);if (volumeLevel != currVolume){ throw new Exception("不能设置音量"); }mixerClose(mixerControl);}catch (Exception ex){ MessageBox.Show(ex.Message); }} }}。
MFC中控制系统音量类的实现

1.在vc++ 6.0新建VolumeCtrl类2.VolumeCtrl.h文件// VolumeCtrl.h: interface for the CVolumeCtrl class.////////////////////////////////////////////////////////////////////////#include "windows.h"#include <mmsystem.h>#if !defined(AFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INC LUDED_)#defineAFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000classCVolumeCtrl{public:CVolumeCtrl(CWnd *pParent);virtual ~CVolumeCtrl();public:BOOL GetVolume(DWORD &dwVol);//获取音量BOOL SetVoleme(DWORD dwVol);//设置音量BOOL amdGetVolumeControl();//得到音量控制设备句柄BOOL amdInitialize();//初始化BOOL amdUnInitialize();private:CWnd * m_hParent; //父窗口指针UINT m_nNumMixers; //混音设备个数HMIXER m_hMixer; //混音设备句柄MIXERCAPS m_mxcaps;CString m_strDsLineName,m_strVolumeControlName;DWORD m_dwMinimum,m_dwMaximum;DWORD m_dwVolumeControlID; //音量控制器ID};#endif// !defined(AFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INCLUDE D_)3.VolumeCtrl.cpp文件// VolumeCtrl.cpp: implementation of the CVolumeCtrl class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "MediaPlayer.h"#include "VolumeCtrl.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CVolumeCtrl::CVolumeCtrl(CWnd *pParent){m_hParent=pParent;}CVolumeCtrl::~CVolumeCtrl(){amdUnInitialize();}BOOL CVolumeCtrl::amdInitialize(){m_nNumMixers= ::mixerGetNumDevs();m_hMixer = NULL;::ZeroMemory(&m_mxcaps,sizeof(MIXERCAPS));if(m_nNumMixers != 0){if(::mixerOpen(&m_hMixer,0,(DWORD)m_hParent->GetSafeHwnd(),NULL,MIXER_OBJECTF_ MIXER|CALLBACK_WINDOW)!=MMSYSERR_NOERROR){return FALSE;}if(::mixerGetDevCaps((UINT)m_hMixer,&m_mxcaps,sizeof(MIXERCAPS))!=MMSYSERR_NOERROR){return FALSE;}}else{return FALSE;}return TRUE;}BOOL CVolumeCtrl::amdUnInitialize(){BOOL bResult = TRUE;if(m_hMixer != NULL){if(::mixerClose(m_hMixer)!=MMSYSERR_NOERROR){bResult=FALSE;}m_hMixer = NULL;}returnbResult;}BOOL CVolumeCtrl::SetVoleme(DWORD dwVol){if(m_hMixer == NULL||m_strDsLineName.IsEmpty()||m_strVolumeControlName.IsEmpty()) {return FALSE;}MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = {dwVol};// MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = dwVol;MIXERCONTROLDETAILS mxcd;mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);mxcd.dwControlID = m_dwVolumeControlID;hannels = 1;mxcd.cMultipleItems = 0;mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);mxcd.paDetails = &mxcdVolume;if(::mixerSetControlDetails((HMIXEROBJ)m_hMixer,&mxcd,MIXER_OBJECTF_HMIXER|M IXER_SETCONTROLDETAILSF_VALUE)!=MMSYSERR_NOERROR){return FALSE;}return TRUE;}BOOL CVolumeCtrl::GetVolume(DWORD &dwVol){if(m_hMixer == NULL ||m_strDsLineName.IsEmpty() ||m_strVolumeControlName.IsEmpty()){return FALSE;}MIXERCONTROLDETAILS_UNSIGNED mxcdVolume={dwVol};MIXERCONTROLDETAILS mxcd;mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);mxcd.dwControlID = m_dwVolumeControlID;hannels = 1;mxcd.cMultipleItems = 0;mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);mxcd.paDetails = &mxcdVolume;if(mixerSetControlDetails((HMIXEROBJ)m_hMixer,&mxcd,MIXER_OBJECTF_HMIXER|MI XER_SETCONTROLDETAILSF_VALUE)!=MMSYSERR_NOERROR){return FALSE;}dwVol = mxcdVolume.dwValue;return TRUE;}BOOL CVolumeCtrl::amdGetVolumeControl(){m_strDsLineName.Empty();m_strVolumeControlName.Empty();if(m_hMixer == NULL){return FALSE;}MIXERLINE mxl;mxl.cbStruct = sizeof(MIXERLINE);mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;if(::mixerGetLineInfo((HMIXEROBJ)m_hMixer,&mxl,MIXER_OBJECTF_HMIXER|MIXER_G ETLINEINFOF_COMPONENTTYPE)!=MMSYSERR_NOERROR){return FALSE;}MIXERCONTROL mxc;MIXERLINECONTROLS mxlc;mxlc.cbStruct = sizeof(MIXERLINECONTROLS);mxlc.dwLineID = mxl.dwLineID;mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;ontrols = 1;mxlc.cbmxctrl = sizeof(MIXERCONTROL);mxlc.pamxctrl = &mxc;if(mixerGetLineControls((HMIXEROBJ)m_hMixer,&mxlc,MIXER_OBJECTF_HMIXER|MIXE R_GETLINECONTROLSF_ONEBYTYPE)!=MMSYSERR_NOERROR){return FALSE;}m_strDsLineName = mxl.szName;m_strVolumeControlName = mxc.szName;m_dwMinimum = mxc.Bounds.dwMinimum;m_dwMaximum = mxc.Bounds.dwMaximum;m_dwVolumeControlID = mxc.dwControlID;return TRUE;}。
用C#控制Windows系统音量的实现方法

⽤C#控制Windows系统⾳量的实现⽅法1.使⽤Win Api控制2.使⽤C++ dll控制 使⽤user32.dll和winmm.dll都可以控制系统⾳量,区别是Win系统的版本。
winmm.dll Xp环境下可⽤,user32.dll Vista及以上版本。
CoreAudioApi 是C++ 第三⽅封装了⾳量控制,⽹上下载DLL后再项⽬中引⽤即可使⽤。
CoreAudioApi Vista及以上版本⽀持。
复制代码代码如下:winmm[DllImport("winmm.dll", EntryPoint = "waveOutSetVolume")]public static extern int WaveOutSetVolume(IntPtr hwo, uint dwVolume);private void SetVol(double arg){double newVolume = ushort.MaxValue * arg / 10.0;uint v = ((uint)newVolume) & 0xffff;uint vAll = v | (v << 16);int retVal = WaveOutSetVolume(IntPtr.Zero, vAll);}复制代码代码如下:user32[DllImport("user32.dll")]public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);public void SetVol(){p = Process.GetCurrentProcess();for (int i = 0; i < 5; i++) {SendMessageW(p.Handle, WM_APPCOMMAND, p.Handle, (IntPtr)APPCOMMAND_VOLUME_UP);}}private Process p;private const int APPCOMMAND_VOLUME_MUTE = 0x80000;private const int APPCOMMAND_VOLUME_UP = 0x0a0000;private const int APPCOMMAND_VOLUME_DOWN = 0x090000;private const int WM_APPCOMMAND = 0x319;复制代码代码如下:CoreAudioApiUsing CoreAudioApi;public void SetVol(double arg) {device = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);device.AudioEndpointVolume.MasterVolumeLevelScalar = (float)arg;}private MMDevice device;private MMDeviceEnumerator DevEnum = new MMDeviceEnumerator();。
c语言声音控制的函数

c语言声音控制的函数C语言提供了一系列函数来控制声音,在音频处理和媒体应用等领域中发挥着重要作用。
在本文中,我们将介绍几个常用的C语言声音控制函数,以帮助读者了解其基本原理和使用方式。
首先,让我们来研究如何播放声音。
在C语言中,我们可以使用函数`PlaySound()`来实现简单的声音播放功能。
该函数接受一个参数,即指向要播放声音文件的字符串。
通过调用该函数,我们可以播放.wav格式的声音文件。
例如,如果我们想要播放一个名为`sound.wav`的声音文件,我们可以使用以下代码:```PlaySound("sound.wav", NULL, SND_FILENAME);```此处的第二个参数为NULL,表示我们不想使用系统默认的播放方式。
而最后一个参数SND_FILENAME则为我们指定了要播放的声音文件名。
接下来,我们介绍C语言中如何控制声音的音量。
通过使用`waveOutSetVolume()`函数,我们可以调整系统的音量。
这个函数接受两个参数,第一个参数表示音频设备的句柄,我们可以通过`waveOutOpen()`函数获取到该句柄;第二个参数则是一个32位的无符号整数,表示音量大小。
该整数的高16位表示左声道的音量,低16位表示右声道的音量。
比如,如果我们想将左右声道的音量都设置为最大,我们可以使用以下代码:```waveOutSetVolume(NULL, 0xFFFFFFFF);```此处的第一个参数为NULL,表示我们调整的是系统的音量;而第二个参数0xFFFFFFFF表示将左右声道的音量都设置为最大。
除了调整音量,我们还可以使用C语言来生成特定频率的声音。
在这里,我们可以使用`beep()`函数来实现。
`beep()`函数接受两个参数,第一个参数表示频率,第二个参数表示持续时间(以毫秒为单位)。
例如,如果我们想在500Hz的频率下播放一个持续1秒的声音,我们可以使用以下代码:```beep(500, 1000);```通过不同的频率和持续时间组合,我们可以生成不同音高和音长的声音。
MP3音乐播放器软件课程设计报告(MFC)

课程设计说明书课程设计名称:软件综合课程设计课程设计题目:音频播放器程序的设计与实现学院名称:信息工程学院电子信息工程专业课程设计任务书正文:目录引言 (5)一、设计程序的目的与要求 (6)目的 (6)要求 (6)二、方案实现与调试 (6)总体设计 (6)1、实现功能 (6)2、功能模块图 (7)详细设计 (7)1、界面布局 (7)2、各模块功能设计 (8)2.1处理“打开”按钮 (9)2.2处理“播放”按钮 (9)2.3处理“暂停”按钮 (9)2.4处理“停止”按钮 (9)2.5处理“音量”按钮 (10)2.6处理“退出”按钮 (10)3 操作步骤 (10)三、课程设计分析与总结 (11)分析 (11)总结 (11)附录 (13)关键程序清单 (13)参考文献 (20)引言MP3播放器的设计是利用MFC应用程序、媒体控制接口MIC 的基本知识而设计的。
1.1 MFC简介MFC是Visual C++是核心。
MFC类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC AppWizard 向导根据继承性利用MFC派生出自己的类,并对Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互联系,实现了标准Windows应用程序的功能,这就是向导生成的所谓MFC应用程序框架。
每个MFC类都包括了一些函数,函数放到类中,符合C++编程方法。
这些函数,必须通过类定义对象才能使用[1]。
1.2 MCI简介MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。
它所支持的媒体格式包括mp3、avi、wav、mpeg等等[2]。
音频技术发展较早,几年前一些技术已经成熟并产品化,音频技术主要包括四个方面:音频数字化、语音处理、语音合成及语音识别。
MFC编程总结各种控件使用说明

MFC各种控件的使用说明把整数显示为时间格式的方法:Int minute=5; int sec=5;CString strTime;strTime.Format("%02d:%02d",minute,sec);GetDlgItem(IDC_STAT_DIS)->SetWindowText(strTime);定时器的使用方法:在函数BOOL CDingshiqiDlg::OnInitDialog(){SetTimer(1,1000,NULL);}添加语句SetTimer(1,1000,NULL);定时器1秒钟中断一次.然后添加消息WM_TIMER对应的消息函数:void CDingshiqiDlg::OnTimer(UINT nIDEvent){}播放系统声音的方法:在头文件添加这两句#include<mmsystem.h>#pragma comment (lib,"winmm.lib")然后调用函数: PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC);VC++6.0控件工具箱:2 图形控件(picture):常用于显示位图(Bitmap)和图标(Icon)3 静态文本(Static Text):MFC提供了CStatic类支持静态控件。
(1)更改该控件上字体的方法是:该控件的ID为IDC_STATIC1,IDC_STATIC2.CFont * f1;f1 = new CFont;f1 -> CreateFont( 25 , // nHeight15, // nWidth0 , // nEscapement0 , // nOrientationFW_BOLD, // nWeightFALSE , // TRUEbItalicFALSE, // bUnderline0 , // cStrikeOutDEFAULT_CHARSET, //ANSI_CHARSET nCharSetOUT_DEFAULT_PRECIS, // nOutPrecisionCLIP_DEFAULT_PRECIS, // nClipPrecisionDEFAULT_QUALITY, // nQualityDEFAULT_PITCH | FF_SWISS, // nPitchAndFamily_T( " 宋体" )); // lpszFacGetDlgItem(IDC_STATIC1)-> SetFont(f1);GetDlgItem(IDC_STATIC2)-> SetFont(f1);另一种改变字体大小的方法: 在函数外定义CStatic m_static;CFont font;m_static.SubclassDlgItem(IDC_STAT_DIS,this);LOGFONT log;GetObject(::GetStockObject(DEFAULT_GUI_FONT),sizeof(log),&log);log.lfHeight=300; //改log.lfWidth=120; //改log.lfCharSet=GB2312_CHARSET;lstrcpy(log.lfFaceName, _T("宋体"));font.CreateFontIndirect(&log);m_static.SetFont(&font);(2) 把整数显示在该控件的方法:IDC_STAT_DIS为控件IDInt minute=5,sec=5;CString strTime;strTime.Format("%02d:%02d",minute,sec);GetDlgItem(IDC_STAT_DIS)->SetWindowText(strTime);另外一种显示的方法:CStatic*pst=(CStatic *)GetDlgItem(IDC_STAT_DIS);pst->SetWindowText("00:00");4 编辑框(Edit Box):MFC提供了CEdit类支持编辑框控件。
第八部分 MFC中的声音

sndPlaySound(NULL, SND_SYNC); 停止播放程序中声音文件
MCI 播放声音
当WAVE文件较大时,系统无法将声音数据一次性 的读入内存,sndPlaySound函数就不能很好的播放 声音了。 为了解决这个问题,可用MicroSoft API提供的MCI( The Media Control Interface)方法来操作声音文件。 在使用MCI方法之前,首先需要在你开发的项目设 置Project->Setting->Link->Object/library modules中加 入winmm.lib。并在头文件中包括"mmsystem.h"头文 件。
第八部分 MFC中声音
VC中声音的使用
BEEP MCI控制WAV
DirectSound
BEEP
使用主板喇叭发声 BOOL Beep(
DWORD dwFreq //sound frequency, in hertz //频率 DWORD dwDuration // sound duration, in milliseconds //时间 );
包含头文件:#include
"windows.h"
音符频率表
音符 频率/HZ 半周期/us 音符 频率/HZ 半周期/us -----------------------------------------低1DO 262 1908 #4FA# 740 0676 #1DO# 277 1805 中5SO 784 0638 低2RE 294 1700 #5SO# 831 0602 #2RE# 311 1608 中6LA 880 0568 低3M 330 1516 #6LA# 932 0536 低4FA 349 1433 中7SI 988 0506 #4FA# 370 1350 高1DO 1046 0478 低5SO 392 1276 #DO# 1109 0451 #5SO# 415 1205 高2RE 1175 0426 低6LA 440 1136 #2RE# 1245 0402 #6LA# 466 1072 高3M 1318 0372 低7SI 494 1012 高4FA 1397 0358 中1DO 523 0956 #4FA# 1480 0338 #1DO# 554 0903 高5SO 1568 0319 中2RE 578 0842 #5S0# 1661 0292 #2RE# 622 0804 高6LA 1760 0284 中3M 659 0759 #6LA# 1865 0268 中4FA 698 0716 高7SI 1976 0253 -----------------------------------------("#"表示半音,用于上升或下降半个音)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.在vc++ 6.0新建VolumeCtrl类2.VolumeCtrl.h文件// VolumeCtrl.h: interface for the CVolumeCtrl class.////////////////////////////////////////////////////////////////////////#include "windows.h"#include <mmsystem.h>#if !defined(AFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INC LUDED_)#defineAFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000classCVolumeCtrl{public:CVolumeCtrl(CWnd *pParent);virtual ~CVolumeCtrl();public:BOOL GetVolume(DWORD &dwVol);//获取音量BOOL SetVoleme(DWORD dwVol);//设置音量BOOL amdGetVolumeControl();//得到音量控制设备句柄BOOL amdInitialize();//初始化BOOL amdUnInitialize();private:CWnd * m_hParent; //父窗口指针UINT m_nNumMixers; //混音设备个数HMIXER m_hMixer; //混音设备句柄MIXERCAPS m_mxcaps;CString m_strDsLineName,m_strVolumeControlName;DWORD m_dwMinimum,m_dwMaximum;DWORD m_dwVolumeControlID; //音量控制器ID};#endif// !defined(AFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INCLUDE D_)3.VolumeCtrl.cpp文件// VolumeCtrl.cpp: implementation of the CVolumeCtrl class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "MediaPlayer.h"#include "VolumeCtrl.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CVolumeCtrl::CVolumeCtrl(CWnd *pParent){m_hParent=pParent;}CVolumeCtrl::~CVolumeCtrl(){amdUnInitialize();}BOOL CVolumeCtrl::amdInitialize(){m_nNumMixers= ::mixerGetNumDevs();m_hMixer = NULL;::ZeroMemory(&m_mxcaps,sizeof(MIXERCAPS));if(m_nNumMixers != 0){if(::mixerOpen(&m_hMixer,0,(DWORD)m_hParent->GetSafeHwnd(),NULL,MIXER_OBJECTF_ MIXER|CALLBACK_WINDOW)!=MMSYSERR_NOERROR){return FALSE;}if(::mixerGetDevCaps((UINT)m_hMixer,&m_mxcaps,sizeof(MIXERCAPS))!=MMSYSERR_NOERROR){return FALSE;}}else{return FALSE;}return TRUE;}BOOL CVolumeCtrl::amdUnInitialize(){BOOL bResult = TRUE;if(m_hMixer != NULL){if(::mixerClose(m_hMixer)!=MMSYSERR_NOERROR){bResult=FALSE;}m_hMixer = NULL;}returnbResult;}BOOL CVolumeCtrl::SetVoleme(DWORD dwVol){if(m_hMixer == NULL||m_strDsLineName.IsEmpty()||m_strVolumeControlName.IsEmpty()) {return FALSE;}MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = {dwVol};// MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = dwVol;MIXERCONTROLDETAILS mxcd;mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);mxcd.dwControlID = m_dwVolumeControlID;hannels = 1;mxcd.cMultipleItems = 0;mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);mxcd.paDetails = &mxcdVolume;if(::mixerSetControlDetails((HMIXEROBJ)m_hMixer,&mxcd,MIXER_OBJECTF_HMIXER|M IXER_SETCONTROLDETAILSF_VALUE)!=MMSYSERR_NOERROR){return FALSE;}return TRUE;}BOOL CVolumeCtrl::GetVolume(DWORD &dwVol){if(m_hMixer == NULL ||m_strDsLineName.IsEmpty() ||m_strVolumeControlName.IsEmpty()){return FALSE;}MIXERCONTROLDETAILS_UNSIGNED mxcdVolume={dwVol};MIXERCONTROLDETAILS mxcd;mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);mxcd.dwControlID = m_dwVolumeControlID;hannels = 1;mxcd.cMultipleItems = 0;mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);mxcd.paDetails = &mxcdVolume;if(mixerSetControlDetails((HMIXEROBJ)m_hMixer,&mxcd,MIXER_OBJECTF_HMIXER|MI XER_SETCONTROLDETAILSF_VALUE)!=MMSYSERR_NOERROR){return FALSE;}dwVol = mxcdVolume.dwValue;return TRUE;}BOOL CVolumeCtrl::amdGetVolumeControl(){m_strDsLineName.Empty();m_strVolumeControlName.Empty();if(m_hMixer == NULL){return FALSE;}MIXERLINE mxl;mxl.cbStruct = sizeof(MIXERLINE);mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;if(::mixerGetLineInfo((HMIXEROBJ)m_hMixer,&mxl,MIXER_OBJECTF_HMIXER|MIXER_G ETLINEINFOF_COMPONENTTYPE)!=MMSYSERR_NOERROR){return FALSE;}MIXERCONTROL mxc;MIXERLINECONTROLS mxlc;mxlc.cbStruct = sizeof(MIXERLINECONTROLS);mxlc.dwLineID = mxl.dwLineID;mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;ontrols = 1;mxlc.cbmxctrl = sizeof(MIXERCONTROL);mxlc.pamxctrl = &mxc;if(mixerGetLineControls((HMIXEROBJ)m_hMixer,&mxlc,MIXER_OBJECTF_HMIXER|MIXE R_GETLINECONTROLSF_ONEBYTYPE)!=MMSYSERR_NOERROR){return FALSE;}m_strDsLineName = mxl.szName;m_strVolumeControlName = mxc.szName;m_dwMinimum = mxc.Bounds.dwMinimum;m_dwMaximum = mxc.Bounds.dwMaximum;m_dwVolumeControlID = mxc.dwControlID;return TRUE;}。