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

news/2025/1/31 22:19:11/

根据您的需求,以下是通过 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.ppmy.cn/news/1568252.html

相关文章

DeepSeek-R1:通过强化学习激励大型语言模型(LLMs)的推理能力

摘要 我们推出了第一代推理模型:DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero是一个未经监督微调(SFT)作为初步步骤,而是通过大规模强化学习(RL)训练的模型,展现出卓越的推理能力。通过强…

组合模式 - 组合模式的实现

引言 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端可以统一地处理单个对象和组合对象,从而简化了代码的复杂性。本文将详细介绍如何在C中实…

Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)

redis实现查询缓存的业务逻辑 service层实现 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 现查询redis内有没有数据String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的数…

十大主流联邦学习框架:技术特性、架构分析与对比研究

联邦学习(Federated Learning,FL)作为机器学习领域的关键技术范式,实现了在保障数据隐私的前提下进行分布式模型训练。 为推进联邦学习模型的研发与部署,业界开发了多种开源及商业框架工具。这些基础库为联邦学习的技…

【设计测试用例自动化测试性能测试 实战篇】

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 设计测试用例…

C#面试常考随笔6:ArrayList和 List的主要区别?

在 C# 中&#xff0c;ArrayList和List<T>&#xff08;泛型列表&#xff09;都可用于存储一组对象。推荐优先使用List<T>&#xff0c;因为它具有更好的类型安全性、性能和语法简洁性&#xff0c;并且提供了更丰富的功能。只有在需要与旧代码兼容或存储不同类型对象的…

【2025年数学建模美赛C题】第1-5问F奖解题思路+高级绘图+可运行代码

基于多模型分析的奥运会奖牌预测与影响因素研究 解题思路一、问题重述二、问题分析三、模型假设与符号说明四、数据预处理五、奖牌榜预测5.1 基于LSTM长短期记忆循环神经网络的预测模型的建立5.2 模型预测结果 六、首枚奖牌预测6.1 BP神经网络的建立6.2 模型预测结果 七、各国奖…

如何安装 CUDA Toolkits

安装 CUDA Toolkit 的步骤如下&#xff0c;具体步骤根据你的操作系统&#xff08;Windows/Linux/Mac&#xff09;有所不同。以下是 Windows 和 Linux 系统的安装步骤&#xff1a; Windows 系统安装 CUDA Toolkit 前提条件 确保你的计算机上已经安装了 NVIDIA 显卡&#xff0c;并…