通过 NAudio 控制电脑操作系统音量

根据您的需求,以下是通过 NAudio 获取和控制电脑操作系统音量的方法:

一、获取和控制系统音量

(一)获取系统音量和静音状态

您可以使用 NAudio.CoreAudioApi.MMDeviceEnumerator 来获取系统默认音频设备的音量和静音状态:

csharp复制

using NAudio.CoreAudioApi;public void GetSystemVolume()
{using (var enumerator = new MMDeviceEnumerator()){using (var device = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console)){var audioEndpointVolume = device.AudioEndpointVolume;float masterVolumeLevel = audioEndpointVolume.MasterVolumeLevelScalar; // 获取主音量(范围0.0到1.0)bool isMuted = audioEndpointVolume.Mute; // 获取是否静音Console.WriteLine($"系统音量: {masterVolumeLevel * 100}%, 是否静音: {isMuted}");}}
}
(二)设置系统音量

同样使用 MMDeviceEnumerator,您可以设置系统音量:

csharp复制

public void SetSystemVolume(float volumeLevel)
{using (var enumerator = new MMDeviceEnumerator()){using (var device = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console)){device.AudioEndpointVolume.MasterVolumeLevelScalar = volumeLevel; // 设置音量(范围0.0到1.0)}}
}
(三)示例:将音量设置为60%

csharp复制

SetSystemVolume(0.6f); // 设置音量为60%

二、获取和控制麦克风音量

(一)获取麦克风音量

使用 MMDeviceEnumerator 获取默认麦克风设备的音量:

csharp复制

public int GetCurrentMicVolume()
{int volume = 0;var enumerator = new MMDeviceEnumerator();var captureDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active).ToArray();if (captureDevices.Length > 0){var mMDevice = captureDevices[0];volume = (int)(mMDevice.AudioEndpointVolume.MasterVolumeLevelScalar * 100);}return volume;
}
(二)设置麦克风音量

设置默认麦克风设备的音量:

csharp复制

public void SetCurrentMicVolume(int volume)
{var enumerator = new MMDeviceEnumerator();var captureDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active).ToArray();if (captureDevices.Length > 0){var mMDevice = captureDevices[0];mMDevice.AudioEndpointVolume.MasterVolumeLevelScalar = volume / 100.0f;}
}

三、NAudio更改wav资源的音量 

要使用 NAudio 修改 WAV 文件的音量,可以通过以下步骤实现。以下是一个完整的示例,展示如何在播放时调整 WAV 文件的音量。

1. 引入 NAudio 库

首先,确保你的项目中已经安装了 NAudio 库。可以通过 NuGet 包管理器安装:

bash复制

Install-Package NAudio
2. 使用 SampleChannel 调整音量

NAudio 提供了 SampleChannel 类,可以用来调整音频流的音量。以下是一个示例代码,展示如何在播放时调整音量:

csharp复制

using System;
using NAudio.Wave;public class AudioPlayer
{private IWavePlayer waveOut;private WaveStream waveStream;public void Play(string filePath, float volume){// 创建 WaveOutEvent 实例waveOut = new WaveOutEvent();// 打开 WAV 文件waveStream = new WaveFileReader(filePath);// 创建 SampleChannel 用于调整音量var sampleChannel = new SampleChannel(waveStream);sampleChannel.Volume = volume; // 设置音量(范围 0.0 到 1.0)// 将 SampleChannel 传递给 WaveOutwaveOut.Init(sampleChannel);waveOut.Play();}public void Stop(){// 停止播放waveOut?.Stop();waveOut?.Dispose();waveStream?.Dispose();}
}
3. 使用示例

以下是如何使用上述 AudioPlayer 类来播放 WAV 文件并调整音量的示例:

csharp复制

public class Program
{public static void Main(){var player = new AudioPlayer();// 播放 WAV 文件并设置音量为 0.5(50%)player.Play("path/to/your/file.wav", 0.5f);// 播放完成后停止播放Console.WriteLine("Press any key to stop playback...");Console.ReadKey();player.Stop();}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习 Pytorch 单层神经网络

神经网络是模仿人类大脑结构所构建的算法,在人脑里,我们有轴突连接神经元,在算法中,我们用圆表示神经元,用线表示神经元之间的连接,数据从神经网络的左侧输入,让神经元处理之后,从右…

Arduino大师练成手册 --控制 OLED

要在 Arduino 上使用 U8glib 库控制带有 7 个引脚的 SPI OLED 显示屏,你可以按照以下步骤进行: 7pin OLED硬件连接 GND:连接到 Arduino 的 GND 引脚。 VCC:连接到 Arduino 的 5V 引脚。 D0(或 SCK/CLK)…

水果实体店品牌数字化:RWA + 智能体落地方案

一、方案背景 随着数字化技术的迅猛发展,实体零售行业正面临前所未有的挑战与机遇。传统的零售模式难以满足消费者对个性化、便捷化、智能化的需求,尤其是在水果等生鲜商品领域,如何通过技术手段提升运营效率、增强顾客体验、拓宽盈利模式&a…

业务对象和对象的区别

"业务对象"和"对象"这两个术语在日常编程和软件工程中经常被使用,但它们之间存在一些区别,主要体现在它们的目的、范围和抽象层次上。 ### 对象(Object) 1. **定义**: - 对象是面向对象编程&#…

三高“高性能、高并发、高可靠”系统架构设计系列文章

目录 高并发系统的艺术:如何在流量洪峰中游刃有余 《数据密集型应用系统设计》读后感与高并发高性能实践案例 系统稳定性与高可用保障的几种思路 软件系统限流的底层原理解析 技术解决方案调研 延迟队列调研 重试调研 异步回调调研 分库分表调研 分布式事…

ray.rllib-入门实践-12:自定义policy

在本博客开始之前,先厘清一下几个概念之间的区别与联系:env, agent, model, algorithm, policy. 强化学习由两部分组成: 环境(env)和智能体(agent)。环境(env)提供观测值和奖励; agent读取观测值&#x…

CVE-2024-23897-Jenkins任意文件读取漏洞复现

content Jenkins是什么CVE-2024-23897总结修复建议 Jenkins是什么 Jenkins是一人基于Java开发的、可扩展的持续集成引擎,用于持续、自动地构建/测试软件项目,可以监控一些定时执行的任务。 官网文档: Jenkins是一款开源 CI&CD 软件&…

Lua 环境的安装

1.安装Lua运行环境 本人采用的是在windows系统中使用cmd指令方式进行安装,安装指令如下: winget install "lua for windows" 也曾使用可执行程序安装过,但由于电脑是加密电脑,最后都已失败告终。使用此方式安装可以安…

基于微信小程序的网上订餐管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

【矩阵二分】力扣378. 有序矩阵中第 K 小的元素

给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。 你必须找到一个内存复杂度优于 O(n2) 的解决方案。 示例 1&#xff1…

基于微信小程序的助农扶贫系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Effective C++ 规则47: 请使用 Traits Class 表现类型信息

1、背景 C 是一种静态类型语言,类型的特性在编译期就可以被识别和操作。为了更好地利用编译期信息来编写高效、灵活、可维护的代码,C 提供了一些技术来“萃取”或“提取”类型的相关信息。即利用 traits 类来封装和提取类型信息,以便在编译期…

Linux Futex学习笔记

Futex 简介 概述: Futex(Fast Userspace Mutex)是linux的一种特有机制,设计目标是避免传统的线程同步原语(如mutex、条件变量等)在用户空间和内核空间之间频繁的上下文切换。Futex允许在用户空间处理锁定和等待的操作&#xff0…

小柯剧场训练营第一期音乐剧演员与第二期报名拉开帷幕!

在当下社会文化浪潮中,小柯剧场凭借其独特的培养模式和“先看戏后买票”的良心举措,已然成为艺术界的一股清流。1月12日,由“第一期免费训练营”优秀学员们所带来的新一代《稳稳的幸福》成功落幕,引起了社会的广泛关注。该活动不仅…

基于迁移学习的ResNet50模型实现石榴病害数据集多分类图片预测

完整源码项目包获取→点击文章末尾名片! 番石榴病害数据集 背景描述 番石榴 (Psidium guajava) 是南亚的主要作物,尤其是在孟加拉国。它富含维生素 C 和纤维,支持区域经济和营养。不幸的是,番石榴生产受到降…

【论文阅读】HumanPlus: Humanoid Shadowing and Imitation from Humans

作者:Zipeng Fu、Qingqing Zhao、Qi Wu、Gordon Wetstein、Chelsea Finn 项目共同负责人,斯坦福大学 项目网址:https://humanoid-ai.github.io 摘要 制造外形与人类相似的机器人的一个关键理由是,我们可以利用大量的人类数据进行…

2025牛客寒假算法基础集训营2

H 一起画很大的圆&#xff01; 看起来像是一道计算几何的题&#xff0c;实际上通过分析和猜想&#xff0c;是有O1复杂度的结论的。具体证明略&#xff0c;结论是三点越接近共线&#xff0c;得出的半径越大。 #include <bits/stdc.h> using namespace std; #define endl \…

PVE 虚拟机安装 Debian 无图形化界面服务器

Debian 安装 Debian 镜像下载 找一个Debian镜像服务器&#xff0c;根据需要的版本和自己硬件选择。 iso-cd/&#xff1a;较小&#xff0c;仅包含安装所需的基础组件&#xff0c;可能需要网络访问来完成安装。有镜像 debian-12.9.0-amd64-netinst.isoiso-dvd/&#xff1a;较…

硬件学习笔记--35 AD23的使用常规操作

原理图设计 1&#xff09;新建原理图&#xff0c;File-new-Schematic。相关设置参考&#xff0c;主要包含图纸设置以及常规的工具栏。 PCB的设计 新建PCB&#xff0c;设置相应的规则&#xff08;与原理图中相对应&#xff09;&#xff0c;放到同一个工程中。如果有上一版本的…

解读2025年生物医药创新技术:展览会与论坛的重要性

2025生物医药创新技术与应用发展展览会暨论坛&#xff0c;由天津市生物医药行业协会、BIO CHINA生物发酵展组委会携手主办&#xff0c;山东信世会展服务有限公司承办&#xff0c;定于2025年3月3日至5日在济南黄河国际会展中心盛大开幕。展会规模60000平方米、800参展商、35场会…