https://github.com/naudio/NAudio

NAudio 是一个开源的 .NET 音频库,由 Mark Heath 开发,开源地址:https://github.com/naudio/NAudio 支持多种音频操作,可实现多种API播放与录制、多种不同音频格式、音频格式转换(重采样、位深、声道等)、音频编码、多通道播放、音频效果处理等等。

比如,把系统禁音了,系统预警声音发不出,这时候通过 NAudio 可以控制,将声音启用,而且可以调整音量的大小,这样,软件的预警就不受人为改变系统音量而受影响

NAudio安装

注意程序的版本号

手动安装

我的程序是 .Net Framework 4.6 的,NuGET 没安装成功。所以下了 NAudio-

1.10.0 的代码进行了编辑:DLL 下载地址:https://files.cnblogs.com/files/vipsoft/NAudio-1.10.0.zip?t=1737014955&download=true

Nuget安装

常用类:

  • WaveIn 表示波形输入, 继承了 IWaveIn, 例如麦克风输入, 或者计算机正在播放的音频流。
  • WaveOut 表示波形输出, 继承了 IWavePlayer, 用来播放音频, 以 IWaveProvider 作为播放源播放音频, 通过拓展方法也支持以 - ISampleProvider 作为播放源播放音频。
  • WaveStream 表示波形流, 它继承了 IWaveProvider, 可以用来作为播放源。
  • WaveFileReader 继承了 WaveStream, 用来读取波形文件。
  • WaveFileWriter 继承了Stream, 用来写入文件, 常用于保存音频录制的数据。
  • AudioFileReader 通用的音频文件读取器, 可以读取波形文件, 也可以读取其他类型的音频文件例如 Aiff, MP3

常用接口:

  • IWaveProvider 波形提供者, 上面已经提到, 是音频播放的提供者, 通过拓展方法可以转换为 ISampleProvider。
  • ISampleProvider 采样提供者, 上面已经提到, 通过拓展方法可以作为 WaveOut 的播放源。

代码示例

获取系统是否禁音、当前的系统音量、设置新的音量

using NAudio.CoreAudioApi;

private void CheckSystemMuteState()
{
using (var enumerator = new MMDeviceEnumerator())
{
using (var device = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console))
{
var audioEndpointVolume = device.AudioEndpointVolume;
// 获取当前主音量级别(范围0.0到1.0)
float masterVolumeLevel = audioEndpointVolume.MasterVolumeLevelScalar;
bool isMuted = audioEndpointVolume.Mute;
string msg=$"系统音频是否静音: {isMuted} 当前系统音量{(masterVolumeLevel * 100).ToString("F2")}%";
MessageBox.Show(msg); //设置音量为 60%
float newVolumeLevel = 0.6f;
audioEndpointVolume.MasterVolumeLevelScalar = newVolumeLevel;
string msg= = $"系统音频是否静音: {isMuted} 当前系统音量{(masterVolumeLevel * 100).ToString("F2")}%";
MessageBox.Show(msg);
}
}
}

C# Winform 通过 NAudio 获取控制电脑操作系统音量的更多相关文章

  1. Andy - 又一款速度流畅的免费安卓 Android 模拟器 (支持手机无线控制电脑模拟器)

    随着 Genymotion.BlueStacks 等电脑上的 Android 模拟器流行起来之后,似乎很多人都发现在电脑上运行使用安卓APP软件.畅玩手机游戏确实很有乐趣. 今天我们又发现了一款全新免 ...

  2. WinForm(VB.NET)获取当前登录的用户名

    运行Windows Task Manager,查看Users标签,可以看到所有登录电脑的用户,现在Insus.NET想命名用VB.NET的WinForm程序去获取当前的用户名. 获取程序简单,可以参考 ...

  3. C#操作防火墙控制电脑某些软件联网

    问题: 目前公司软件刚由单机软件更改为联网软件,许多客户反映希望能够有一个功能来控制电脑上某些必用软件,如qq,公司软件联网,而其他不必要的如网页,游戏等软件不允许联网,于是向公司反映希望可以有一个功 ...

  4. 学习记录---C# Web程序获取客户端电脑信息

    问题描述:由于最近项目需要使用Mac地址与注册码进行加密处理,但是又因为Web程序的局限性不能获取客户端电脑系统信息,当然IE浏览器有一个activex控件他是可以通过Js在前端代码中直接获取的,局限 ...

  5. .NET 获取客户端的操作系统版本、浏览器版本和IP地址

    我们在使用.NET做网站的时候,很多情况下需要需要知道客户端的操作系统版本和浏览器版本,怎样获取客户端的操作系统和浏览器版本呢?我们可以通过分析UserAgent来获取. .NET 获取客户端的操作系 ...

  6. 手机控制电脑,在WIFI局域网下(关机,重启,遥控)

    这个软件叫百变遥控:http://blog.sina.com.cn/s/blog_9abc7dbc0101hmut.html 今天周末,在家里看电影,家里用的是台式电脑,我自己买了一个投影仪来专门看视 ...

  7. .NET获取客户端的操作系统、IP地址、浏览器版本

    获取客户端的操作系统: #region 获取操作系统版本号 /// <summary> /// 获取操作系统版本号 /// </summary> /// <returns ...

  8. asp.net获取浏览器端操作系统名称

    /// <summary>/// 获取浏览器端操作系统名称/// </summary>/// <returns></returns>public sta ...

  9. China Operating System 电脑操作系统 2016全球互联网排名

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 电脑操作系统 China Operating System 2016全球互联网排名 == ...

  10. 获取ip,获取客户端浏览器,获取客户端访问操作系统,获取客户端访问设备

    /** * 获取ip */ public static function getIp() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CL ...

随机推荐

  1. 0.4 Nomenclature and notation

  2. dotnet core微服务框架Jimu ~ 浏览和发布新闻微服务

    提供新闻浏览和发布服务 有 3 个需要授权公开的 api: GetAllNews 获取所有新闻 PostNews 发布新闻, 具有 admin 角色的会员才能发布新闻 GetNews 根据 id 获取 ...

  3. .NET 创建动态方法方案及 Natasha V9

    前言 本篇文章前面客观评估了 .NET 创建动态方方案多个方面的优劣,后半部分是 Natasha V9 的新版特性. .NET 中创建动态方法的方案 创建动态方法的不同选择 以下陈列了几种创建动态方法 ...

  4. CAD Plus 移动端使用帮助

    Mac端使用帮助 English help 如果您有疑问或需要帮助请发送邮件至 3167292926@qq.com 1. 权限要求 1.1 获取位置信息 使用文件管理功能时显示网络信息需要获取位置信息 ...

  5. Edge(Chrome)浏览器插件WordSaver的演示,可以查英语生词并记录生词及所在句子,导出为anki格式

    Edge(Chrome)浏览器插件WordSaver的演示,可以查英语生词并记录生词及所在句子,导出为anki格式 Bilibili哔哩哔哩视频

  6. 基本数据结构-双端队列(Deque)

    6.基本数据结构-双端队列(Deque) 一.双端队列(Deque) - 概念:deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. - 特性:d ...

  7. context之WithTimeout的使用

    1. context包的WithTimeout()函数接受一个 Context 和超时时间作为参数,返回其子Context和取消函数cancel2. 新创建协程中传入子Context做参数,且需监控子 ...

  8. Java Cache系列之Cache概述和Simple Cache

    前记:最近公司在做的项目完全基于Cache(Gemfire)构建了一个类数据库的系统,自己做的一个小项目里用过Guava的Cache,以前做过的项目中使用过EHCache,既然和Cache那么有缘,那 ...

  9. Java并发显式锁和显式条件队列

    一 显式锁 在类中利用synchronized修饰的方法或者this代码块,均使用的是类的实例锁或者类的锁.这些锁都称为内置锁. 可以利用显式锁进行协调对象的访问.即ReentrantLock.这是一 ...

  10. 调度系统之Airflow

    一.Airflow简介 Airflow 是一个使用 Python 语言编写的 Data Pipeline 调度和监控工作流的平台. Airflow 是通过 DAG(Directed acyclic g ...