小编Eti*_*oux的帖子

NAudio 的 BufferedWaveProvider 在录制和混合音频时变满

我遇到了来自 NAudio 库的 BufferedWaveProvider 的问题。我正在录制 2 个音频设备(一个麦克风和一个扬声器),将它们合并为 1 个流并将其发送到编码器(用于视频)。

为此,我执行以下操作:

  1. 创建一个线程,我将使用WasapiCapture.
  2. 创建一个线程,我将在其中使用WasapiLookbackCapture. (我也使用 aSilenceProvider所以我记录的内容没有空白)。
  3. 我想混合这两个音频,所以我必须确保它们具有相同的格式,所以我检测所有这些音频设备中最好的 WaveFormat 是什么。在我的场景中,它是扬声器。所以我决定麦克风音频将通过 aMediaFoundationResampler来调整其格式,使其与扬声器中的音频相同。
  4. Wasapi(Lookback)Capture 中的每个音频块都发送到BufferedWaveProvider.
  5. 然后,我还制作了一个MixingSampleProviderISampleProvider从每个录制线程传递的地方。所以我通过MediaFoundationResampler麦克风和BufferedWaveProvider扬声器。
  6. 在第三个线程的循环中,我从 读取数据MixingSampleProvider,它应该BufferedWaveProvider在填充时异步清空(s)。
  7. 因为每个缓冲区可能不会完全同时填充,所以我正在查看这两个缓冲区之间的最小共同持续时间是多少,并且我正在从混合样本提供程序中读取这个数量。
  8. 然后我将阅读的内容排入队列,以便我的编码器在第 4 个线程中也将并行处理它。

请参阅下面的流程图,它说明了我上面的描述。

在此处输入图片说明

我的问题如下:

  • 在玩也使用麦克风的视频游戏(用于在线多人游戏)时,录制麦克风和扬声器超过 1 小时时,它的效果非常好。没有崩溃。缓冲区一直很空。这很棒。
  • 但出于某种原因,每次我尝试使用我的应用during进行 Discord、Skype 或 Teams 音频对话时,我都会立即(在 5 秒内)崩溃,BufferedWaveProvider.AppSamples因为缓冲区已满。

在调试模式下查看它,我可以看到:

  • 扬声器对应的缓冲区几乎是空的。它的平均音频最长为 100 毫秒。
  • 与麦克风(我重新采样的那个)对应的缓冲区已满(5 秒)。

从我在 NAudio 的作者博客、文档和 StackOverflow 上阅读的内容来看,我认为我正在做最佳实践(但我可能是错的),即从一个线程写入缓冲区,并从另一个线程并行读取它. 当然有一种风险,它比我阅读它的速度更快,这基本上就是现在正在发生的事情。但我不明白为什么。

需要帮助

我需要一些帮助来理解我在这里遗漏了什么,请。以下几点让我感到困惑:

  1. 为什么这个问题只发生在 …

c# audio audio-streaming naudio wasapi

6
推荐指数
1
解决办法
240
查看次数

使用Visual Studio 2013 RC在Windows 8.1 RTM上安装Windows Phone 7.1 SDK

有没有人知道如何使用Visual Studio 2013(因此无需安装Visual Studio 2010)在Windows 8.1 RTM上开发Windows Phone 7?我在安装Visual Studio 2013时检查了WP8.0,但它没有提供我的解决方案所需的7.1 SDK.

如果我可以在不安装Visual Studio 2010的情况下完成它将会很棒.:D

先感谢您 :-)

visual-studio windows-phone-7 visual-studio-2013 windows-8.1

5
推荐指数
1
解决办法
5809
查看次数

手动创建临时证书

我想通过命令提示符创建临时证书(构建metro应用程序所需).我曾尝试用CMD做到这一点:

makecert.exe -n "CN=MY_DOMAIN" -r -a sha1 -sv MY_DOMAIN.pvk MY_DOMAIN.cer –ss root

pvk2pfx -pvk MY_DOMAIN.pvk -spc MY_DOMAIN.cer -pfx MY_DOMAIN.pfx
Run Code Online (Sandbox Code Playgroud)

但是当我在我的项目中的这个pfx文件时,我有以下错误:

C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v11.0\AppxPackage\Microsoft.AppXPackage.Targets(1142,9):错误:APPX0107:指定的证书对签名无效.

.net certificate microsoft-metro windows-8

4
推荐指数
1
解决办法
1941
查看次数