Jul*_*eña 4 python audio directshow
我想构建一个小型Python程序,可以在计算机上收听和分析当前播放的音频,例如,从任何媒体播放器.
我知道这可以在Windows上使用DirectShow,但我不确定如何在Python中使用它.但是,我理想地喜欢不使用DirectX的跨平台方式.
一般来说,要从声卡"听某事",你将不得不使用一些音频工具包/模块,通常,你最终会设置一个记录过程播放程序(当然你可以省略播放)
如果您的应用程序不是一个硬实时应用程序(即您可以从输入中错过一些样本),您可以从PyAudio的"记录几秒音频并将其保存到文件"开始,从他们的网站开始.
所以在你的情况下,你会:
但是,在这种情况下,
(您可能已经注意到)在您进行处理时,您将丢失输入中的样本,因为在此期间,您没有记录任何内容.
根据你的应用程序,你可以逃脱...对于PyAudio尤其如此,因为目前它只支持阻塞模式,所以如果你想要实时(ish)操作,你将不得不使用线程.
如果您的实时规格更严格(即您输入的几个样本都不能丢失),您仍然会使用"记录 - 处理 - [播放]"例程,但这次您需要这样做在一个线程中,让它通过LIFO堆栈(Last In First Out或Deque)与主进程通信.
它会是这样的:
录音线程:
主要流程:
通过这种方式,您的处理可以按照自己的节奏继续进行,同时记录线程不断填充缓冲区并将其推送到Deque上.
对于Python来说,好消息是Deque是线程安全的,因此当主进程和线程同时尝试访问Deque时,您不会遇到任何同步问题.
同样,根据您的应用程序,您可能还需要转向更快的硬件,例如基于ASIO协议的硬件.
最后,
您还需要稍微修改一下处理算法,以考虑到您现在正在处理帧而不是一个缓冲区...因此,为了保持平稳,您必须保存操作的状态.框架到下一个.有关更多信息,您可以看到"重叠添加"方法
祝一切顺利