• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

bin/H18-Nov-2021-190114

cmake/H18-Nov-2021-2217

config/H18-Nov-2021-3,2572,925

doc/H03-May-2022-3,1412,421

iOS/H18-Nov-2021-2,2472,094

include/H03-May-2022-16,6367,438

m4/H18-Nov-2021-952733

projects/H03-May-2022-35,57533,170

rawwaves/H03-May-2022-230163

src/H03-May-2022-37,60526,349

INSTALL.mdH A D18-Nov-20212.9 KiB5532

LICENSEH A D18-Nov-20211.3 KiB2822

Makefile.inH A D18-Nov-20211 KiB4233

README.mdH A D18-Nov-20219.4 KiB195146

STK.podspecH A D18-Nov-20211.6 KiB5654

configureH A D18-Nov-2021211.8 KiB7,8826,538

configure.acH A D03-May-20227.7 KiB245204

README.md

1# The Synthesis ToolKit in C++ (STK)
2By Perry R. Cook and Gary P. Scavone, 1995--2021.
3
4This distribution of the Synthesis ToolKit in C++ (STK) contains the following:
5
6* [`include`](include/):  STK class header files
7* [`src`](src/): STK class source files
8* [`rawwaves`](rawwaves): STK audio files (1-channel, 16-bit, big-endian)
9* [`doc`](doc): STK documentation
10* [`projects`](projects): example STK projects and programs
11
12Please read the [Legal and Ethical notes](#legal-and-ethical) near the bottom of this document and the [License](LICENSE).
13
14For compiling and installing STK, see the [INSTALL.md](INSTALL.md) file in this directory.
15
16## Contents
17
18* [Overview](#overview)
19* [System Requirements](#system-requirements)
20* [What's New (and not so new)](#whats-new-and-not-so-new)
21* [Disclaimer](#disclaimer)
22* [Legal and Ethical](#legal-and-ethical)
23* [Further Reading](#further-reading)
24* [Perry's Notes From the Original Distribution](#perrys-notes-from-the-original-distribution)
25
26# OVERVIEW
27
28The Synthesis ToolKit in C++ (STK) is a set of open source audio
29signal processing and algorithmic synthesis classes written in the C++
30programming language.  STK was designed to facilitate rapid
31development of music synthesis and audio processing software, with an
32emphasis on cross-platform functionality, realtime control, ease of
33use, and educational example code.  The Synthesis ToolKit is extremely
34portable (most classes are platform-independent C++ code), and it's
35completely user-extensible (all source included, no unusual libraries,
36and no hidden drivers).  We like to think that this increases the
37chances that our programs will still work in another 5-10 years.  STK
38currently runs with "realtime" support (audio and MIDI) on Linux,
39Macintosh OS X, and Windows computer platforms.  Generic, non-realtime
40support has been tested under NeXTStep, Sun, and other platforms and
41should work with any standard C++ compiler.
42
43The only classes of the Synthesis ToolKit that are platform-dependent
44concern sockets, threads, mutexes, and real-time audio and MIDI input
45and output.  The interface for MIDI input and the simple Tcl/Tk
46graphical user interfaces (GUIs) provided is the same, so it's easy to
47experiment in real time using either the GUIs or MIDI.  The Synthesis
48ToolKit can generate simultaneous SND (AU), WAV, AIFF, and MAT-file
49output soundfile formats (as well as realtime sound output), so you
50can view your results using one of a large variety of sound/signal
51analysis tools already available (e.g. Snd, Cool Edit, Matlab).
52
53The Synthesis Toolkit is not one particular program.  Rather, it is a
54set of C++ classes that you can use to create your own programs.  A
55few example applications are provided to demonstrate some of the ways
56to use the classes.  If you have specific needs, you will probably
57have to either modify the example programs or write a new program
58altogether. Further, the example programs don't have a fancy GUI
59wrapper. If you feel the need to have a "drag and drop" graphical
60patching GUI, you probably don't want to use the ToolKit. Spending
61hundreds of hours making platform-dependent graphics code would go
62against one of the fundamental design goals of the ToolKit - platform
63independence.
64
65For those instances where a simple GUI with sliders and buttons is
66helpful, we use Tcl/Tk (https://www.tcl.tk/) which is freely
67distributed for all the supported ToolKit platforms. A number of
68Tcl/Tk GUI scripts are distributed with the ToolKit release.  For
69control, the Synthesis Toolkit uses raw MIDI (on supported platforms),
70and SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like
71text message synthesis control format).
72
73
74# SYSTEM REQUIREMENTS
75
76See the individual README's (e.g. README-linux) in the /doc directory
77for platform specific information and system requirements.  In
78general, you will use the configure script to create Makefiles on unix
79platforms (and MinGW) or the VS2017 workspace files to compile the
80example programs.  To use the Tcl/Tk GUIs, you will need Tcl/Tk
81version 8.0 or higher.
82
83
84# WHAT'S NEW (AND NOT SO NEW)
85
86Despite being available in one form or another since 1996, we still
87consider STK to be alpha software.  We attempt to maintain backward
88compatability but changes are sometimes made in an effort to improve
89the overall design or performance of the software.  Please read the
90"Release Notes" in the /doc directory to see what has changed since
91the last release.
92
93A new StkFrames class has been created to facilitate the handling and
94passing of multichannel, vectorized audio data.  All STK classes have
95been updated to include tick() functions that accept StkFrames
96arguments.
97
98The control message handling scheme has been simplified greatly
99through the use of the Messager class.  It is now possible to have
100access to simultaneous piped, socketed, and/or MIDI input control
101messages.  In most cases, this should eliminate the use of the
102Md2Skini program.
103
104Realtime audio input capabilities were added to STK with release 3.0,
105though the behavior of such is very hardware dependent.  Under Linux
106and Macintosh OS-X, audio input and output are possible with very low
107latency.  Using the Windows DirectSound API, minimum dependable output
108sound latency seems to be around 20 milliseconds or so, while input
109sound latency is generally higher.  Performance with the ASIO audio
110API on Windows provides much better performance.
111
112As mentioned above, it is possible to record the audio ouput of an STK
113program to .snd, .wav, .raw, .aif, and .mat (Matlab MAT-file) output
114file types.  Though somewhat obsolete, the program Md2Skini can be
115used to write SKINI scorefiles from realtime MIDI input.  Finally, STK
116should compile with non-realtime functionality on any platform with a
117generic C++ compiler.
118
119For those who wish to make a library from the core STK classes, the
120configure script generates a Makefile in the src directory that will
121accomplish that.
122
123
124# DISCLAIMER
125
126You probably already guessed this, but just to be sure, we don't
127guarantee anything works.  :-) It's free ... what do you expect?  If
128you find a bug, please let us know and we'll try to correct it.  You
129can also make suggestions, but again, no guarantees.  Send email to
130the mail list.
131
132
133# LEGAL AND ETHICAL
134
135This software was designed and created to be made publicly available
136for free, primarily for academic purposes, so if you use it, pass it
137on with this documentation, and for free.
138
139If you make a million dollars with it, it would be nice if you would
140share. If you make compositions with it, put us in the program notes.
141
142Some of the concepts are covered by various patents, some known to us
143and likely others which are unknown.  Many of the ones known to us are
144administered by the Stanford Office of Technology and Licensing.
145
146The good news is that large hunks of the techniques used here are
147public domain.  To avoid subtle legal issues, we'll not state what's
148freely useable here, but we'll try to note within the various classes
149where certain things are likely to be protected by patents.
150
151
152# FURTHER READING
153
154For complete documentation on this ToolKit, the classes, etc., see the
155doc directory of the distribution or surf to
156http://ccrma.stanford.edu/software/stk/.  Also check the platform
157specific README's for specific system requirements.
158
159
160# PERRY'S NOTES FROM THE ORIGINAL DISTRIBUTION
161
162This whole world was created with no particular hardware in mind.
163These examples are intended to be tutorial in nature, as a platform
164for the continuation of my research, and as a possible starting point
165for a software synthesis system.  The basic motivation was to create
166the necessary unit generators to do the synthesis, processing, and
167control that I want to do and teach about.  Little thought for
168optimization was given and therefore improvements, especially speed
169enhancements, should be possible with these classes.  It was written
170with some basic concepts in mind about how to let compilers optimize.
171
172Your question at this point might be, "But Perry, with CMix, CMusic,
173CSound, CShells, CMonkeys, etc. already cluttering the landscape, why
174a new set of stupid C functions for music synthesis and processing?"
175The answers lie below.
176
1771) I needed to port many of the things I've done into something which is generic enough to port further to different machines.
178
1792) I really plan to document this stuff, so that you don't have to be me to figure out what's going on. (I'll probably be sorry I said this in a couple of years, when even I can't figure out what I was thinking.)
180
1813) The classic difficulties most people have in trying to implement physical models are:
182
183    A) They have trouble understanding the papers, and/or in turning the theory into practice.
184
185    B) The Physical Model instruments are a pain to get to oscillate, and coming up with stable and meaningful parameter values is required to get the models to work at all.
186
187This set of C++ unit generators and instruments might help to diminish the scores of emails I get asking what to do with those block diagrams I put in my papers.
188
1894) I wanted to try some new stuff with modal synthesis, and implement some classic FM patches as well.
190
1915) I wanted to reimplement, and newly implement more of the intelligent and physical performer models I've talked about in some of my papers. But I wanted to do it in a portable way, and in such a way that I can hook up modules quickly.  I also wanted to make these instruments connectable to such player objects, so folks like Brad Garton who really think a lot about the players can connect them to my instruments, a lot about which I think.
192
1936) More rationalizations to follow . . .
194
195