воспроизводящее устройство используется как средство связи.
! [введите описание изображения](https://foruda. gitee. com/images/1718243030837098023/15f02eb4_74504. png "Скриншот экрана")
Когда вы воспроизводите звук с помощью NAudio в приложении на C# и замечаете, что громкость других программ автоматически снижается, это поведение обычно вызвано настройками Windows "Коммуникации". Windows имеет функцию, которая предназначена для автоматического снижения громкости других звуков при обнаружении активности коммуникации, например, при совершении телефонного звонка или использовании VoIP-приложения.
Решение
Вы можете настроить параметры Windows, чтобы предотвратить автоматическое снижение громкости.
Класс WaveOutEvent в NAudio не предоставляет прямого способа установки роли устройства (например, Multimedia, Console или Communications). Это более продвинутое функциональное использование, которое обычно обрабатывается с помощью Windows Core Audio API, в частности, WASAPI (Windows Audio Session API). Если вам нужно контролировать роль устройства явно, вам потребуется использовать WasapiOut вместо WaveOutEvent.
using System;
using NAudio. CoreAudioApi;
using NAudio. Wave;
class Program
{
static void Main()
{
string audioFilePath = @"C:\путь\к\вашему\аудиофайлу\file. wav";
// Создайте перечислитель устройств
var deviceEnumerator = new MMDeviceEnumerator();
// Получите стандартное аудио-конечное устройство с ролью Multimedia
var defaultDevice = deviceEnumerator. GetDefaultAudioEndpoint(DataFlow. Render, Role. Multimedia);
// Создайте экземпляр WasapiOut с стандартным устройством
using (var audioFileReader = new AudioFileReader(audioFilePath))
using (var outputDevice = new WasapiOut(defaultDevice, AudioClientShareMode.Shared, false, 0))
{
// Инициализируйте устройство вывода с помощью объекта чтения аудиофайла
outputDevice.Init(audioFileReader);
outputDevice.Play();
// Ждите завершения воспроизведения
while (outputDevice.PlaybackState == PlaybackState.Playing)
{
System.Threading.Thread.Sleep(100);
}
}
}
}
Установка роли устройства косвенным образом
Хотя вы не можете установить роль устройства напрямую с помощью WaveOutEvent, вы можете более точно контролировать выбор аудиоустройства с помощью MMDeviceEnumerator и WasapiOut. Роль (Multimedia, Console или Communications) определяется способом получения стандартного аудио-конечного устройства. Убедитесь, что вы используете правильное устройство для воспроизведения (например, роль многомедийного устройства), чтобы помочь смягчить проблему, связанную с тем, что Windows рассматривает ваше приложение как коммуникационную активность и уменьшает громкость других приложений.
Вход Перед тем как оставить комментарий