我正在使用NAudio和WPF开发C#中的混音软件.

但我遇到了一个不常见的行为:输出正常播放,但当我调整主窗口时,输出音频开始分裂.如果保持窗口大小,缓冲区已满,将引发异常.看起来resize事件阻塞了主线程.

有人有什么建议吗?

_wavein = new WaveIn();
_wavein.DeviceNumber = 0;
_wavein.WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(0).Channels);
    
waveInProvider = new WaveInProvider(_wavein);
    
volumeSampleProvider = new VolumeSampleProvider(waveInProvider.ToSampleProvider());
volumeSampleProvider.Volume = (float)slider.Value;
    
MeteringSampleProvider meteringSampleProvider = new MeteringSampleProvider(volumeSampleProvider, 1000);
meteringSampleProvider.StreamVolume += meteringSampleProviderStreamVolume;
    
_waveOut = new WaveOut();
_waveOut.DesiredLatency = 50;
_waveOut.Init(meteringSampleProvider.ToWaveProvider());

_wavein.StartRecording();
_waveOut.Play();

推荐答案

如果使用WaveOutEventWaveOutEvent,音频处理将在后台线程上进行,这将非常有帮助

Csharp相关问答推荐

如何模拟耐久任务客户端在统一测试和获取错误在调度NewsListationInstanceAsync模拟设置

如何在C#中从正则表达式中匹配一些数字但排除一些常量(也是数字)

静态对象构造顺序

C#-从基类更新子类

C#使用TextFieldParser读取.csv,但无法使用";0";替换创建的列表空条目

当使用Dapper映射DBNull时,我可以抛出异常吗?

同一组件的多个实例触发相同的事件处理程序

在Windows Plesk上发布ASP.NET Core 7 Web API-错误:无法加载文件或程序集';Microsoft.Data.SqlClient';

为什么Docker中没有转发该端口?

如何正确处置所有动态控件?

将J数组转换为列表,只保留一个嵌套的JToken

try 访问字典中的模拟对象时引发KeyNotFoundException

使用postman 测试配置了身份的.NET 6应用程序

在.Net 8 Visual Studio 2022中启用本机AOT发布时发布失败

为什么INTEGER在通过反射调用时对空对象返回TRUE,而在INTEGER上调用时返回FALSE?

C#If条件格式

在素数排序数组中,arr找到arr中最小数的索引i,使得arr[i]除以给定的数

仅在ListView的选定项上显示按钮

用C#以编程方式扩展Azure应用服务Web应用

SingleLogOut请求中的非HTTP POST方法