`
coolszy
  • 浏览: 1413320 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

c# 判断系统是否静音等音频操作

阅读更多

因为自己写的小程序需要在工作时间把本本静音、切换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);
        }

 

分享到:
评论
2 楼 雨季醉清风 2010-10-06  
看看~~~~~~~
1 楼 ylc2010 2010-09-07  
请问CoreAudioApi.dll怎么使用,与代码怎么结合?

相关推荐

    C# 操作 音频 包括静音状态 静音控制

    外国比较全的系统音频操作实例,注要类SoundControl 附小片代码: //判断是否静音 public void IsMute() { MixerInfo mi = GetMixerControls(); MuteIt(mi, false, false); }

    C#实现声卡检测及音频设备属性的设置

    内容索引:C#源码,系统相关,多媒体,声卡 VisualStudio 2008环境开发的一个C#应用程序实例,功能是实现声卡的检测及声音、音频设备属性的设置,调用的是Windows系统的音频属性面板,适合C#初级用户参考。

    音频静音检测算法-VAD

    一 、编译环境: windows:VS2017; linux:cenos7.0; android、ios、arm平台也可...二、基于webrtc_vad抽取的静音检测算法,已经编写测试用例和测试音频文件,简单通俗易懂,大家可以直接拿到项目中使用,比较稳定。

    静音与扬声控制_win7

    在Windows 7操作系统环境下,C#开发者经常需要处理声音输出的控制,包括静音和扬声功能。在本文中,我们将深入探讨如何使用`CoreAudioApi.dll`库来实现这些功能,这对于创建多媒体应用程序或者系统工具是至关重要的...

    C#实现基于加减按钮形式控制系统音量及静音的方法

    在C#编程中,控制系统的音量和静音功能通常涉及到与操作系统底层的交互,这可以通过调用系统API函数来实现。在这个例子中,我们使用的是`user32.dll`动态链接库,它包含了用于控制音量的函数。下面将详细讲解如何...

    c#录音程序

    在C#编程环境中,开发一个录音程序涉及到多个关键知识点,主要涵盖了音频处理、系统音频输入源选择、文件I/O操作以及可能的自定义规则实现。下面将详细解释这些概念。 首先,C#录音程序的核心是利用.NET Framework...

    静音音量控制xp

    3. **静音判断**:在C#中,通过调用Windows API的音量控制函数,可以获取当前系统的音量状态,判断是否处于静音模式。这可能涉及到`waveOutGetVolume`或`waveInGetVolume`函数,它们用于获取音频设备的输出或输入...

    CSharp_AUDIO.zip_C#编程_C#_

    在C#编程中,涉及到音频处理和声卡检测的功能,主要涵盖了Windows API调用、音频设备管理和音频属性设置等知识点。下面将详细讲解这些领域的相关内容。 1. **C#语言基础**: C#(读作"C Sharp")是微软公司开发的...

    Visual C#使用DirectX实现视频播放

    - **`Audio`**:通过这个类可以获取视频文件中的音频部分,进一步控制音频播放,如音量调整、静音等。 - **`Video`**:该类是视频播放的核心,提供了丰富的属性和方法来控制视频的播放状态、位置、尺寸、全屏模式等...

    闹钟

    为了处理重复闹钟,我们需要理解日期和时间的操作,例如判断某一天是否为工作日,或者根据用户设定的周期性规则(如每小时、每天、每周等)来确定下一次闹钟触发的时间。 最后,考虑到用户体验,闹钟应用还可能包含...

    语音端点检测,语音激活检测,VAD

    语音端点检测(Voice Activity Detection,VAD)是语音处理领域的一个关键技术,它主要用于识别音频流中的语音段和非语音段,例如静音、噪声或背景音乐。在语音通信、语音识别、语音压缩等应用中,VAD起着至关重要的...

    vad-master_c语言编写的基于webrtc的vad算法_webrtc的vad_语音端点检测_端点检测_uphde_

    WebRTC的VAD算法是基于概率模型的,它分析音频信号的频谱特性,通过比较不同帧之间的能量和熵来判断当前帧是否包含语音。VAD的目标是在保持语音质量的同时,尽可能准确地剔除背景噪声和非语音部分。它通常包括三个...

    Unity3D的声音控制脚本2

    总的来说,这个Unity3D的声音控制脚本展示了如何使用C#脚本操作`AudioSource`组件来控制音频的播放、停止和音量调节。这样的脚本对于任何需要声音交互的游戏或应用都是十分有用的,可以提供给玩家更好的用户体验。...

    Unity3D 实现音乐播放2

    接下来,我们需要编写一个控制音乐播放的C#脚本来实现对Audio Source的操作。以下是一个简单的示例脚本: ```csharp using UnityEngine; public class MusicController : MonoBehaviour { private AudioSource ...

Global site tag (gtag.js) - Google Analytics