首页 > 解决方案 > Python 有时是不是速度不够快,无法完成一项任务?

问题描述

我注意到缺乏用 Python 编写的与soundfont兼容的良好合成器。所以,大约一个月前,我自己开始了一些工作(供参考,在这里)。制作这也是我为自己设定的挑战。

我一次又一次地遇到同样的问题,总结如下:

  1. 要播放声音,必须将具有或多或少恒定流速的数据流发送到音频设备
  2. 要根据用户输入实时合成声音,可以使用几乎没有缓冲
  3. 因此,一个“缓冲区生成循环”可以花费的时间有一个上限
  4. Python 作为一门语言,根本无法在这个时间限制内运行得足够快来合成声音

问题不在于我的代码,或者至少,我试图将其优化到极端水平——在代码的时间敏感部分使用局部变量,避免使用点来访问循环中的变量,使用itertoolsfor 迭代,使用 pre-编译的宏,例如max,更改线程切换参数,尽可能少地进行计算,进行近似,这个列表还在继续。

使用 Pypy 会有所帮助,但即便如此,不久之后也开始挣扎。

值得注意的是,我目前的合成器(充其量)可以同时播放大约 25 个音符。但这还不够。Fluidsynth 是一种用 C 语言编写的合成器,每个乐器的音符数量上限为 128 个音符。它还一次支持多种乐器。

我断言 Python根本不能用于编写合成器是否正确?还是我错过了一些非常重要的东西?

标签: pythonoptimizationaudiosynthesizer

解决方案


推荐阅读