python播放生成的声音和准确的情节

python播放生成的声音和准确的情节,python,audio,plot,Python,Audio,Plot,我正在寻找一种方法,使用python精确地绘制实时生成的声音。 基本上,我是在产生一个频率随噪声函数变化的音调。当频率达到某个阈值时,我需要输出一个视觉提示(即:打印语句) 我一直使用pyaudio输出音频,效果很好。但我还没有找到一种方法来绘制它,或者在它达到一定水平时进行监控 编辑:澄清一点:假设我生成1秒的样本。频率在0.1秒和0.7秒时达到所需水平。如何播放此音频样本,并在达到0.1秒和0.7秒时精确打印语句。我怎样才能将某种视觉线索或任何函数调用与音频播放精确同步。FFT,以及就此而言

我正在寻找一种方法,使用python精确地绘制实时生成的声音。 基本上,我是在产生一个频率随噪声函数变化的音调。当频率达到某个阈值时,我需要输出一个视觉提示(即:打印语句)

我一直使用pyaudio输出音频,效果很好。但我还没有找到一种方法来绘制它,或者在它达到一定水平时进行监控


编辑:澄清一点:假设我生成1秒的样本。频率在0.1秒和0.7秒时达到所需水平。如何播放此音频样本,并在达到0.1秒和0.7秒时精确打印语句。我怎样才能将某种视觉线索或任何函数调用与音频播放精确同步。

FFT,以及就此而言,对离散样本的任何频谱分析,将(几乎)永远无法为您提供精确的频谱图

如果您为FFT提供整个输入,它将为您提供最高分辨率的图形,但此图形将包含整个输入

你提供的样本越少,光谱分辨率就越低。这是一种权衡

然而,找到引入某个频率的精确样本是毫无意义的

您应该为样本的特定部分(一个“窗口”)提供图形。计算它所代表的播放时间很简单。根据您的需要(瞬态分辨率与光谱分辨率),找到适当数量的样本以供使用

我不知道你对信号处理有什么知识,所以我现在不想太专业,但一般的方法很简单:

  • 找到适合您需要的适当数量的样品
  • 在播放的同时或之前绘制/分析这些窗口
  • 确定与已识别窗口相对应的时间

  • 我尝试使用scipy.fft()来绘制它,效果很好。但我不知道该怎么做,就是如何在播放时准确地进行策划。这样我就可以在频率达到阈值时准确地打印消息。谢谢你的解释,它实际上解决了我的部分问题。我没好好看这个。然而,问题还有另一部分。既然我一次分析一大块样本,那么当频率达到某个水平时,我如何能够精确地计算时间呢。假设我正在分析1秒的样本,我可能在分析之前很久就已经达到了我想要的水平。我需要能够在函数达到所需频率的那一刻进行函数调用。回放和频谱分析是两个独立的过程,使用相同的数据不同。FFT的复杂度为
    O(nlogn)
    ,对某个窗口的分析不应超过其播放时间。如果窗口足够小,您可能可以在回放窗口时对其进行分析,并以不明显的延迟显示结果。还有其他方法可以做到这一点,这是我想到的最琐碎的方法,只要你能容忍一点点延迟。如果没有,就很容易避免这种延迟。