因为自己写的小程序需要在工作时间把本本静音、切换IP的操作,查了win API切换静音是调用同一个函数,无法判断系统是否处在静音的状态。而且旧的API代码对Vista/win7支持不好,这里提供两种解决方案(至于判断系统是否静音尚缺中文资料,故撰写此文以供需要的朋友参考),一种是旧的,下面先贴的代码是大家基本上都能找到的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
//CoreAudioApi支持最新的Vista/Win7作業系統,下麵的代碼可能是較早的API版本,不推薦使用
namespace SwitchIP
{
class VolumeControl
{
//调用该函数的窗体
public Form myForm;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
const uint WM_APPCOMMAND = 0x319;
const uint APPCOMMAND_VOLUME_UP = 0x0a;
const uint APPCOMMAND_VOLUME_DOWN = 0x09;
const uint APPCOMMAND_VOLUME_MUTE = 0x08;
//增大音量
public void VolumeUp(){
SendMessage(myForm.Handle, WM_APPCOMMAND, 0x30292, APPCOMMAND_VOLUME_UP * 0x10000);
}
//降低音量
public void VolumeDown() {
SendMessage(myForm.Handle, WM_APPCOMMAND, 0x30292, APPCOMMAND_VOLUME_DOWN * 0x10000);
}
//该函数会自动在静音和非静音状态下切换
public void VolumeMute() {
SendMessage(myForm.Handle, WM_APPCOMMAND, 0x200eb0, APPCOMMAND_VOLUME_MUTE * 0x10000);
}
}
}
第二种也是推荐的方法,仅在win7上测试过:
这里引用了国外友人封装好的Audio类(包含更多的音频操作),具体代码下载可以参考如下链接
using CoreAudioApi;
/*QFord@QQ.COM
需要引用CoreAudioApi.dll
可在下面的链接中找到
*/
......
private MMDevice defaultDevice = null;
......
/*參考資料
http://www.codeproject.com/KB/vista/CoreAudio.aspx?msg=2747721
*/
//判斷當前系統揚聲器狀態
private bool isMuted()
{
return defaultDevice.AudioEndpointVolume.Mute;
}
//靜音
private void setMute()
{
defaultDevice.AudioEndpointVolume.Mute = true;
}
//解除靜音
private void setUnMute()
{
defaultDevice.AudioEndpointVolume.Mute = false;
}
//初始化MMDevice
private void muteInit()
{
MMDeviceEnumerator devEnum = new MMDeviceEnumerator();
defaultDevice =
devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
}
分享到:
相关推荐
外国比较全的系统音频操作实例,注要类SoundControl 附小片代码: //判断是否静音 public void IsMute() { MixerInfo mi = GetMixerControls(); MuteIt(mi, false, false); }
内容索引:C#源码,系统相关,多媒体,声卡 VisualStudio 2008环境开发的一个C#应用程序实例,功能是实现声卡的检测及声音、音频设备属性的设置,调用的是Windows系统的音频属性面板,适合C#初级用户参考。
一 、编译环境: windows:VS2017; linux:cenos7.0; android、ios、arm平台也可...二、基于webrtc_vad抽取的静音检测算法,已经编写测试用例和测试音频文件,简单通俗易懂,大家可以直接拿到项目中使用,比较稳定。
在Windows 7操作系统环境下,C#开发者经常需要处理声音输出的控制,包括静音和扬声功能。在本文中,我们将深入探讨如何使用`CoreAudioApi.dll`库来实现这些功能,这对于创建多媒体应用程序或者系统工具是至关重要的...
在C#编程中,控制系统的音量和静音功能通常涉及到与操作系统底层的交互,这可以通过调用系统API函数来实现。在这个例子中,我们使用的是`user32.dll`动态链接库,它包含了用于控制音量的函数。下面将详细讲解如何...
在C#编程环境中,开发一个录音程序涉及到多个关键知识点,主要涵盖了音频处理、系统音频输入源选择、文件I/O操作以及可能的自定义规则实现。下面将详细解释这些概念。 首先,C#录音程序的核心是利用.NET Framework...
3. **静音判断**:在C#中,通过调用Windows API的音量控制函数,可以获取当前系统的音量状态,判断是否处于静音模式。这可能涉及到`waveOutGetVolume`或`waveInGetVolume`函数,它们用于获取音频设备的输出或输入...
在C#编程中,涉及到音频处理和声卡检测的功能,主要涵盖了Windows API调用、音频设备管理和音频属性设置等知识点。下面将详细讲解这些领域的相关内容。 1. **C#语言基础**: C#(读作"C Sharp")是微软公司开发的...
- **`Audio`**:通过这个类可以获取视频文件中的音频部分,进一步控制音频播放,如音量调整、静音等。 - **`Video`**:该类是视频播放的核心,提供了丰富的属性和方法来控制视频的播放状态、位置、尺寸、全屏模式等...
为了处理重复闹钟,我们需要理解日期和时间的操作,例如判断某一天是否为工作日,或者根据用户设定的周期性规则(如每小时、每天、每周等)来确定下一次闹钟触发的时间。 最后,考虑到用户体验,闹钟应用还可能包含...
语音端点检测(Voice Activity Detection,VAD)是语音处理领域的一个关键技术,它主要用于识别音频流中的语音段和非语音段,例如静音、噪声或背景音乐。在语音通信、语音识别、语音压缩等应用中,VAD起着至关重要的...
WebRTC的VAD算法是基于概率模型的,它分析音频信号的频谱特性,通过比较不同帧之间的能量和熵来判断当前帧是否包含语音。VAD的目标是在保持语音质量的同时,尽可能准确地剔除背景噪声和非语音部分。它通常包括三个...
总的来说,这个Unity3D的声音控制脚本展示了如何使用C#脚本操作`AudioSource`组件来控制音频的播放、停止和音量调节。这样的脚本对于任何需要声音交互的游戏或应用都是十分有用的,可以提供给玩家更好的用户体验。...
接下来,我们需要编写一个控制音乐播放的C#脚本来实现对Audio Source的操作。以下是一个简单的示例脚本: ```csharp using UnityEngine; public class MusicController : MonoBehaviour { private AudioSource ...