服务主机:能力访问管理器干扰音频处理脚本

问题描述 投票:0回答:1

我有一个用 Python 编写的 DSP 脚本,它将几个不同的双二阶滤波器应用于传入的音频流,然后在将其馈送到输出之前分析输出。该脚本被设计为以伪实时方式运行,目前使用较小的缓冲区(仍在调整时序以确保稳定性,20 毫秒或更小)。它使用 pyaudio 库读取和写入传入/传出音频流缓冲区。

每次运行脚本时,它都会无缝运行 30-35 秒,然后 Windows 服务主机:功能访问管理器或负责 Windows 音频的服务主机:本地服务(网络受限)出现故障。此时,这 2 个进程占用了系统处理能力的很大一部分(之前 1-2 个核心达到 80%,之后所有核心都保持在 100% 利用率)。 CPU 利用率的峰值导致脚本开始丢失缓冲区并不断卡顿。

已尝试禁用负责的进程,但无法运行与禁用它们相关的任何音频。

尝试了脚本的最小计算单线程版本,除了输入原始音频之外不执行任何操作,并且运行正常。让我困惑的是,计算脚本可靠地失败了,并且在 Windows 进程限制它之前,甚至没有最大化单个线程。

我可以做些什么来阻止这些 Windows 进程在设置等中锁定我的代码?我可能需要设置任何权限标志吗?我正在考虑将其翻译成 C++ 或 C# 以提高效率,这会解决这个问题吗?或者它是否可能会持续存在?我还在设置 Linux 开发环境以绕过此问题以进行进一步测试,但最终需要它一次在 Windows 中无缝运行超过 30 秒。

python python-3.x windows audio pyaudio
1个回答
0
投票

我也有同样的问题,遗憾的是,我只能确认唯一的解决方法是如果可能的话在单线程中运行您的程序,或者以负责从麦克风获取音频的代码执行的方式对其进行编程另一个进程,并且可能通过服务器-客户端或 p2p 方法与其进行通信。看来只要程序中有多个线程从你的麦克风读取音频,Windows就会启动服务主机:能力访问管理器并使用尽可能多的处理能力

我的回答基于虚拟相机软件代码中的多项测试,该软件通过与麦克风对话来制作图像动画。我的程序中使用的主要模块是 pyaudio 和 pyvirtualcam。

© www.soinside.com 2019 - 2024. All rights reserved.