C++综合工具包(STK)
作者:Perry R. Cook和Gary P. Scavone,1995-2019。
C++综合工具包(STK)的此版包含以下内容
有关编译和安装STK,请参阅此目录中的INSTALL.md文件。
##内容
概览
C++ 合成工具包(STK)是一个用 C++ 编程语言编写的开源音频信号处理和算法合成类库。STK 的设计目的是加快音乐合成和音频处理软件的开发,强调跨平台功能、实时控制、易用性和教育性示例代码。合成工具包具有极高的可移植性(大多数类都是平台无关的 C++ 代码),并且完全可由用户扩展(包含所有源代码,没有非正常库,没有隐藏驱动器)。我们希望这可以增加我们的程序在未来 5-10 年内仍然可以正常工作的可能性。STK 目前可以在 Linux、Mac OS X 和 Windows 计算机平台上运行,具有“实时”支持(音频和 MIDI)。在 NeXTStep、Sun 和其他平台上已测试过通用的非实时支持,应该可以使用任何标准的 C++ 编译器。
合成工具包唯一依赖于平台的类涉及到套接字、线程、互斥锁,以及实时音频和 MIDI 输入输出。MIDI 输入的接口和提供的简单 Tcl/Tk 图形用户界面(GUI)是一致的,因此可以使用 GUI 或 MIDI 在实时环境下进行实验。合成工具包可以生成同时的 SND (AU)、WAV、AIFF 和 MAT 文件输出音频文件格式(以及实时音频输出),因此可以使用大量现有的声音/信号分析工具来查看您的结果(例如 Snd、Cool Edit、Matlab)。
合成工具包不是某个特定的程序,而是一组您可以使用来自定义程序的 C++ 类。提供了一些示例应用来演示使用这些类的一些方法。如果您有特定的需求,您可能需要修改示例程序或者完全编写一个新的程序。此外,示例程序没有复杂的 GUI 包装器。如果您觉得需要一个“拖放”图形修补 GUI,可能不想使用工具包。花费数百小时创建平台相关的图形代码将违反工具包的基本设计目标之一——平台无关性。
对于需要简单 GUI(带有滑块和按钮)的场合,我们使用 Tcl/Tk(https://www.tcl.tk/),它是为支持的所有工具包平台免费分发的。工具包发布版附带了一些 Tcl/Tk GUI 脚本。对于控制,合成工具包使用原始 MIDI(在支持的平台),以及 SKINI(合成工具包乐器网络接口,一种类似于 MIDI 的文本消息合成控制格式)。
系统需求
请参阅 /doc 目录中的各个 README(例如 README-linux)以获取特定平台信息和系统需求。一般来说,您将使用 configure 脚本来在 Unix 平台(和 MinGW)上创建 Makefile,或使用 VS2017 工作区文件来编译示例程序。要使用 Tcl/Tk GUI,您需要版本 8.0 或更高版本的 Tcl/Tk。
新功能(以及不那么新的功能)
尽管自1996年以来一直以某种形式存在,我们仍然将STK视为受试软件。我们试图保持向后兼容,但有时为了改进软件的整体设计或性能,仍会对软件进行更改。请阅读/doc目录中的“发布说明”,了解自上次发布以来有哪些变化。
已创建一个新的StkFrames类,以便利处理和传递多通道、矢量化音频数据。所有STK类都已更新,包括接受StkFrames参数的tick()函数。
通过使用Messager类,控制信息处理方案已被大大简化。现在可以访问同时的管道、套接字和/或MIDI输入控制信息。在大多数情况下,这应该会消除对Md2Skini程序的使用。
在3.0版中添加了STK的实时音频输入功能,尽管这种行为非常依赖于硬件。在Linux和Macintosh OS-X上,音频输入和输出具有极低的延迟。使用Windows DirectSound API,最低可靠的输出声音延迟似乎约为20毫秒,而输入声音延迟通常更高。在Windows上的ASIO音频API中,性能要好得多。
如上所述,可以将STK程序的实际音频输出录制到.snd、.wav、.raw、.aif和.mat(Matlab MAT文件)输出文件类型。尽管有些过时,但可以从实时MIDI输入编写SKINI乐谱文件的程序Md2Skini可以继续使用。最后,STK应该可以在任何具有通用的C++编译器的平台上编译,不具有实时功能。
对于那些希望从核心STK类中创建库的人来说,configure脚本在src目录中生成一个Makefile,以实现这一点。
免责声明
你可能已经猜到了,但为了保险起见,我们不做任何保证。:-)它是免费的...你有什么期望?如果你发现一个错误,请告诉我们,我们会尽力纠正它。你也可以提出建议,但同样,没有保证。请发送电子邮件到邮件列表。
法律和道德
此软件设计和创建的主要目的是免费向公众提供,主要用于学术目的,因此如果您使用它,请与该文档一起分发,并免费使用。
如果您通过它赚了一百万美元,如果您愿意分享也很好。如果您用它创作音乐,请在节目单中提及我们。
一些概念受到各种专利的覆盖,其中一些我们知道,并且可能还有一些我们不知道的。我们知道的大多数都由斯坦福大学技术许可办公室管理。
好消息是,这里使用的大块技术是公共领域的。为了避免微妙的法律问题,我们不会说明这里可以自由使用的,但我们会在各个类别中尽量指出一些东西可能受到专利保护。
更多阅读
要获取该工具包的完整文档,请参阅发行版的doc目录或访问http://ccrma.stanford.edu/software/stk/。同时,为获取特定的系统要求,请检查特定平台的README文件。
来自原始发行版本的PERRY笔记
这个整个世界是没有任何特定的硬件概念而创建的。这些示例的目的是作为教程性质,是我进一步研究的平台,以及作为软件合成系统的可能起点。基本动力是创建进行合成、处理和控制的必要单元发生器,并教授这些内容。对优化几乎没有考虑,因此,通过这些类可以实现改进,尤其是速度提升。
现在你可能会问,“Perry,CMix、CMusic、CSound、CShells、CMonkeys等等已经充斥了市场,为什么还需要一套新的笨拙的C语言音乐合成和处理的函数?”答案在下面。
-
我需要将我所做的许多内容移植到一个足够通用来移植到不同机器上的东西中。
-
我真正打算为此编写文档,这样你不必像我一样就能弄清楚什么是怎么回事。(我可能几年后会后悔说了这句话,那时我甚至自己都弄不清楚我在想什么。)
-
在尝试实现物理模型时,大多数人都会遇到经典困难:
A) 他们难以理解论文,或理论无法转化为实践。
B) 物理模型乐器难以启动振荡,并需要稳定的且有意义的参数值才能让模型正常工作。
这组C++单元发生器和乐器可能有助于减少我收到的那些询问如何处理我论文中的框图电子邮件的数量。
-
我想尝试一些关于模态合成的新东西,并实现一些经典的FM补丁。
-
我打算重新实现,在新实现中添加更多我在一些论文中提到的智能和物理表演模型。但我希望以可移植的方式完成,这样我就可以快速连接模块。我还希望让这些乐器能够连接到这类播放对象,以便像布拉德·加顿这样真正思考大量关于播放器的人可以将它们连接到我的乐器,这是我认为非常重要的事情。
-
接下来会有更多说明......