Audio 将音调发生器配管至aplay()

Audio 将音调发生器配管至aplay(),audio,pipe,Audio,Pipe,我认为这将是一项简单的任务… -平台:笔记本电脑上的linux -语言:python -对象:生成可在扬声器或耳机上听到的音调。音调将被实时修改,每秒多次(想想金属探测器) 最初的设计是在python中生成一个音调,并将其传送到aplay()。 由于aplay以已知的速率(采样速率)消耗数据,我认为我的音调生成器不必关心以正常采样速率(零振幅)生成的静音(音调之间)的定时 第一个结果显示了一个重要的时滞(许多秒)。我发现默认情况下管道相当长(64KB)。这是8秒的采样(8Khz)。 我找到了一种

我认为这将是一项简单的任务…
-平台:笔记本电脑上的linux
-语言:python
-对象:生成可在扬声器或耳机上听到的音调。音调将被实时修改,每秒多次(想想金属探测器)

最初的设计是在python中生成一个音调,并将其传送到aplay()。 由于aplay以已知的速率(采样速率)消耗数据,我认为我的音调生成器不必关心以正常采样速率(零振幅)生成的静音(音调之间)的定时

第一个结果显示了一个重要的时滞(许多秒)。我发现默认情况下管道相当长(64KB)。这是8秒的采样(8Khz)。
我找到了一种将管道大小减小到4KB的方法,但它仍然太长(0.5s延迟)

以非常高的频率采样可以减少延迟,但我不喜欢这种解决方案

第二种方法是在静默期间生成真正的静默(无样本),生成器将在静默期间休眠() 结果是aplay抱怨运行不足,并且由于某些原因,音调被截断和处理不当(渲染不良)

所以,我的问题是:

在没有管道的情况下,向音频堆栈发送音调的最佳方法是什么?

我编写了一个音频服务器,它接收一个流,然后放在那里将其送入OpenAL事件循环,以呈现音频。。。工作很好,但不平凡。。。项目的一部分,我更换了苹果的固件,该固件位于所有应用程序下面,用于播放来自任意HLS源的流式音频。。。不适合胆小的人。。。您需要的部分是不到两页的OpenAL代码来充当我为Python找到的sndObj服务器,它似乎可以完成这项工作。但Python3并不存在这种情况。很遗憾,Python3没有一个像样的音频库。如果你发布你的sndObj解决方案作为这个问题的答案,也许有人会给它一个Python3工作的替代方案。我写了一个音频服务器,它接收一个流,然后放在那里,将它送入一个开放的事件循环来呈现音频。。。工作很好,但不平凡。。。项目的一部分,我更换了苹果的固件,该固件位于所有应用程序下面,用于播放来自任意HLS源的流式音频。。。不适合胆小的人。。。您需要的部分是不到两页的OpenAL代码来充当我为Python找到的sndObj服务器,它似乎可以完成这项工作。但Python3并不存在这种情况。很遗憾,Python3没有一个像样的音频库。如果你发布你的sndObj解决方案作为这个问题的答案,也许有人会给它一个Python3工作的替代方案