python - Python 有时是不是速度不够快,无法完成一项任务?
问题描述
我注意到缺乏用 Python 编写的与soundfont兼容的良好合成器。所以,大约一个月前,我自己开始了一些工作(供参考,在这里)。制作这也是我为自己设定的挑战。
我一次又一次地遇到同样的问题,总结如下:
- 要播放声音,必须将具有或多或少恒定流速的数据流发送到音频设备
- 要根据用户输入实时合成声音,可以使用几乎没有缓冲
- 因此,一个“缓冲区生成循环”可以花费的时间有一个上限
- Python 作为一门语言,根本无法在这个时间限制内运行得足够快来合成声音
问题不在于我的代码,或者至少,我试图将其优化到极端水平——在代码的时间敏感部分使用局部变量,避免使用点来访问循环中的变量,使用itertools
for 迭代,使用 pre-编译的宏,例如max
,更改线程切换参数,尽可能少地进行计算,进行近似,这个列表还在继续。
使用 Pypy 会有所帮助,但即便如此,不久之后也开始挣扎。
值得注意的是,我目前的合成器(充其量)可以同时播放大约 25 个音符。但这还不够。Fluidsynth 是一种用 C 语言编写的合成器,每个乐器的音符数量上限为 128 个音符。它还一次支持多种乐器。
我断言 Python根本不能用于编写合成器是否正确?还是我错过了一些非常重要的东西?
解决方案
推荐阅读
- react-native - 打开/关闭导航抽屉在本机反应中不起作用
- swift - 如何在 Swift 中的弹出框及其箭头上添加边框颜色?
- javascript - react native - onPress 获取 Flatlist 详细信息
- php - 关于根据文本框中的值限制复选框
- powershell - 如何在Powershell中获得最大的文件夹名称增量?
- php - Shopify API - 向商家收取付费应用程序的正确方法是什么?
- c - 为什么release模式和debug模式的执行结果差别很大?
- mysql - 无法附加 json 数据
- performance - 同一表中不同列的Linq内连接
- ruby-on-rails - 看到帖子反向关系Rails