mirror of
https://github.com/thestk/stk
synced 2026-01-17 06:41:51 +00:00
Compare commits
232 Commits
4.4.3
...
cocoapods-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dbe725c40d | ||
|
|
f47fde31b0 | ||
|
|
5ec15d2043 | ||
|
|
33baf69d3e | ||
|
|
975c9a365f | ||
|
|
00ddf89798 | ||
|
|
a8b6affd8c | ||
|
|
444dab21fd | ||
|
|
7fc638ce32 | ||
|
|
f489451660 | ||
|
|
b6143915a9 | ||
|
|
38970124ec | ||
|
|
ae2bac1601 | ||
|
|
8de7543266 | ||
|
|
f8550110d6 | ||
|
|
e4d373b658 | ||
|
|
2fffa79174 | ||
|
|
448c12b0f4 | ||
|
|
f88fc8690b | ||
|
|
0591733bd7 | ||
|
|
7fe70c4223 | ||
|
|
3d455a4644 | ||
|
|
db79599c01 | ||
|
|
7f06bf46f3 | ||
|
|
03b4299af4 | ||
|
|
c531f68a56 | ||
|
|
0a5dbf59d2 | ||
|
|
493fb35b3f | ||
|
|
00f7424140 | ||
|
|
47822b8ce8 | ||
|
|
4a27274c0f | ||
|
|
d1f08072f9 | ||
|
|
3211b94abb | ||
|
|
5e28beb4db | ||
|
|
21d392dca7 | ||
|
|
f79d75037a | ||
|
|
3efa214fbd | ||
|
|
6acefc08a8 | ||
|
|
6ce3ac9e10 | ||
|
|
11d1dc54f3 | ||
|
|
d6c67cc479 | ||
|
|
6ed16eb806 | ||
|
|
05230b11d5 | ||
|
|
3e103671d9 | ||
|
|
071280a311 | ||
|
|
15a2c89f89 | ||
|
|
889328c3c1 | ||
|
|
62416d7e3f | ||
|
|
9627701d04 | ||
|
|
9966f06757 | ||
|
|
56bcdc32ed | ||
|
|
2ddc79e3bd | ||
|
|
96b1a72186 | ||
|
|
2a6ada02a7 | ||
|
|
488301223a | ||
|
|
08f71c8fa9 | ||
|
|
e03aa486dd | ||
|
|
5dd605ecfd | ||
|
|
77a5cfa4aa | ||
|
|
77bdb45575 | ||
|
|
ff52b9f0b0 | ||
|
|
fe0f5d7f96 | ||
|
|
e1aa259517 | ||
|
|
95fcd14213 | ||
|
|
a5bef56e76 | ||
|
|
fb50d69e08 | ||
|
|
126ff9d9e1 | ||
|
|
83b75ed339 | ||
|
|
f0f6668f25 | ||
|
|
a506acc708 | ||
|
|
3e42e3db3f | ||
|
|
852bdec0c9 | ||
|
|
9d8673a24e | ||
|
|
57344a11a9 | ||
|
|
00da5562cd | ||
|
|
b02298a9f4 | ||
|
|
d1b4dd485b | ||
|
|
6d5a779879 | ||
|
|
7ea8b10c6a | ||
|
|
0e69055579 | ||
|
|
c2833d356a | ||
|
|
0f16f683c9 | ||
|
|
f3b1f35a8c | ||
|
|
262fe5a2d1 | ||
|
|
5e79513e5a | ||
|
|
f13866e696 | ||
|
|
9533f2bc66 | ||
|
|
8c0ad97a25 | ||
|
|
87461b1471 | ||
|
|
58fc744ea4 | ||
|
|
35f66c806e | ||
|
|
0a7c541cdc | ||
|
|
0e55d2d2b1 | ||
|
|
c1c314e7d6 | ||
|
|
84d947c750 | ||
|
|
05560b102d | ||
|
|
759fc187bc | ||
|
|
46be0d56c3 | ||
|
|
032e76da70 | ||
|
|
aae7f609cf | ||
|
|
d959a1167d | ||
|
|
c9f8c017bc | ||
|
|
6094f40399 | ||
|
|
a2fb59f476 | ||
|
|
f905623d10 | ||
|
|
b196c58c75 | ||
|
|
20b9411a5a | ||
|
|
bc3cfa8fb5 | ||
|
|
d1acfb07ed | ||
|
|
b5f046871b | ||
|
|
1de1f1e63d | ||
|
|
4ce317a5a7 | ||
|
|
2e8a0cdd50 | ||
|
|
5f9f7f6f08 | ||
|
|
a2be4bc721 | ||
|
|
2437623d67 | ||
|
|
0063a57dcb | ||
|
|
cc568a58c1 | ||
|
|
1799064d6f | ||
|
|
540d45dbbd | ||
|
|
222f81c1c1 | ||
|
|
cbb2fea120 | ||
|
|
4e4e8053a5 | ||
|
|
dc2bfe01d0 | ||
|
|
ea52f1f1a8 | ||
|
|
1c5d42e64c | ||
|
|
f1c929a6c4 | ||
|
|
d6dba8859f | ||
|
|
069cc1c339 | ||
|
|
32574e97d6 | ||
|
|
a0638ad024 | ||
|
|
3ad1a59585 | ||
|
|
90c33cae06 | ||
|
|
1ce9b33ca3 | ||
|
|
3caee97842 | ||
|
|
887baf05f8 | ||
|
|
aec65bcb76 | ||
|
|
db6fc1f0df | ||
|
|
1a2509ead9 | ||
|
|
7388163b7c | ||
|
|
3d9bb4051b | ||
|
|
92ca28918f | ||
|
|
32a3b551d8 | ||
|
|
a9a654862f | ||
|
|
a239b58651 | ||
|
|
caf7d2f2eb | ||
|
|
3ee62e42d0 | ||
|
|
afa3069dea | ||
|
|
2c136e82ef | ||
|
|
17b45a1dad | ||
|
|
dbecf1f7f0 | ||
|
|
4c8e0dec43 | ||
|
|
914a76cae0 | ||
|
|
979c6877c9 | ||
|
|
fff3e0b887 | ||
|
|
a027a515af | ||
|
|
1f0cad64dd | ||
|
|
3d3ab8b86a | ||
|
|
e4146d6dae | ||
|
|
79cdf449b5 | ||
|
|
ce076784a4 | ||
|
|
0f6f1c4194 | ||
|
|
b2cefb3b53 | ||
|
|
1468ad7e12 | ||
|
|
eade52ff5c | ||
|
|
4e90d3ffd2 | ||
|
|
b2c4aa87bb | ||
|
|
85ca274a33 | ||
|
|
eccc38a093 | ||
|
|
3ebdbe6977 | ||
|
|
742cf6a202 | ||
|
|
b7cbce0ced | ||
|
|
b5e24dec52 | ||
|
|
8658acabee | ||
|
|
0e7077c0f3 | ||
|
|
e2f4193e1a | ||
|
|
f38bcceed7 | ||
|
|
9e2cad425a | ||
|
|
3e43d5e297 | ||
|
|
8055f1d040 | ||
|
|
5e145ff682 | ||
|
|
042dea6ff7 | ||
|
|
04ba9c694e | ||
|
|
40fe7dae1d | ||
|
|
cafad844ad | ||
|
|
5749dc1c55 | ||
|
|
8284487d4b | ||
|
|
193a8ebb2e | ||
|
|
84cf7c5344 | ||
|
|
11ff75339d | ||
|
|
96543e1b84 | ||
|
|
416c02c83c | ||
|
|
08af1a08b4 | ||
|
|
4c6e8aee76 | ||
|
|
b2fbc4f302 | ||
|
|
7aefe7caff | ||
|
|
00f822e00c | ||
|
|
c2ae82f200 | ||
|
|
72786d0b72 | ||
|
|
32f23f9538 | ||
|
|
b0e8953a6f | ||
|
|
586eeac02e | ||
|
|
1874c0efa9 | ||
|
|
9e6a25d046 | ||
|
|
8912a5c0af | ||
|
|
b017472cdf | ||
|
|
ed754183e3 | ||
|
|
add961c2f4 | ||
|
|
e619de2a65 | ||
|
|
5e68ce4eeb | ||
|
|
ae9e437ae8 | ||
|
|
4699f8ef59 | ||
|
|
80db57e79b | ||
|
|
4078d9309d | ||
|
|
18e210ea94 | ||
|
|
3369940892 | ||
|
|
c57c52c17e | ||
|
|
1bbd2c003a | ||
|
|
80561731fe | ||
|
|
4f0c39e7eb | ||
|
|
b089236578 | ||
|
|
deaabdd041 | ||
|
|
caeaa5778c | ||
|
|
c298839886 | ||
|
|
57e3fe7dae | ||
|
|
4c8691eb08 | ||
|
|
3d0db65b1c | ||
|
|
c8b7b67680 | ||
|
|
72095c0a3d | ||
|
|
e449ac3583 | ||
|
|
a117cd0bb1 | ||
|
|
fc877b87bf |
199
.gitignore
vendored
Normal file
199
.gitignore
vendored
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
#####
|
||||||
|
# OS X temporary files that should never be committed
|
||||||
|
#
|
||||||
|
# c.f. http://www.westwind.com/reference/os-x/invisibles.html
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# c.f. http://www.westwind.com/reference/os-x/invisibles.html
|
||||||
|
|
||||||
|
.Trashes
|
||||||
|
|
||||||
|
# c.f. http://www.westwind.com/reference/os-x/invisibles.html
|
||||||
|
|
||||||
|
*.swp
|
||||||
|
|
||||||
|
# *.lock - this is used and abused by many editors for many different things.
|
||||||
|
# For the main ones I use (e.g. Eclipse), it should be excluded
|
||||||
|
# from source-control, but YMMV
|
||||||
|
|
||||||
|
*.lock
|
||||||
|
|
||||||
|
#
|
||||||
|
# profile - REMOVED temporarily (on double-checking, this seems incorrect; I can't find it in OS X docs?)
|
||||||
|
#profile
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# Xcode temporary files that should never be committed
|
||||||
|
#
|
||||||
|
# NB: NIB/XIB files still exist even on Storyboard projects, so we want this...
|
||||||
|
|
||||||
|
*~.nib
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# Xcode build files -
|
||||||
|
#
|
||||||
|
# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "DerivedData"
|
||||||
|
|
||||||
|
DerivedData/
|
||||||
|
|
||||||
|
# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "build"
|
||||||
|
|
||||||
|
build/
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
|
# Xcode private settings (window sizes, bookmarks, breakpoints, custom executables, smart groups)
|
||||||
|
#
|
||||||
|
# This is complicated:
|
||||||
|
#
|
||||||
|
# SOMETIMES you need to put this file in version control.
|
||||||
|
# Apple designed it poorly - if you use "custom executables", they are
|
||||||
|
# saved in this file.
|
||||||
|
# 99% of projects do NOT use those, so they do NOT want to version control this file.
|
||||||
|
# ..but if you're in the 1%, comment out the line "*.pbxuser"
|
||||||
|
|
||||||
|
# .pbxuser: http://lists.apple.com/archives/xcode-users/2004/Jan/msg00193.html
|
||||||
|
|
||||||
|
*.pbxuser
|
||||||
|
|
||||||
|
# .mode1v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html
|
||||||
|
|
||||||
|
*.mode1v3
|
||||||
|
|
||||||
|
# .mode2v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html
|
||||||
|
|
||||||
|
*.mode2v3
|
||||||
|
|
||||||
|
# .perspectivev3: http://stackoverflow.com/questions/5223297/xcode-projects-what-is-a-perspectivev3-file
|
||||||
|
|
||||||
|
*.perspectivev3
|
||||||
|
|
||||||
|
# NB: also, whitelist the default ones, some projects need to use these
|
||||||
|
!default.pbxuser
|
||||||
|
!default.mode1v3
|
||||||
|
!default.mode2v3
|
||||||
|
!default.perspectivev3
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# Xcode 4 - semi-personal settings
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# OPTION 1: ---------------------------------
|
||||||
|
# throw away ALL personal settings (including custom schemes!
|
||||||
|
# - unless they are "shared")
|
||||||
|
#
|
||||||
|
# NB: this is exclusive with OPTION 2 below
|
||||||
|
xcuserdata
|
||||||
|
|
||||||
|
# OPTION 2: ---------------------------------
|
||||||
|
# get rid of ALL personal settings, but KEEP SOME OF THEM
|
||||||
|
# - NB: you must manually uncomment the bits you want to keep
|
||||||
|
#
|
||||||
|
# NB: this *requires* git v1.8.2 or above; you may need to upgrade to latest OS X,
|
||||||
|
# or manually install git over the top of the OS X version
|
||||||
|
# NB: this is exclusive with OPTION 1 above
|
||||||
|
#
|
||||||
|
#xcuserdata/**/*
|
||||||
|
|
||||||
|
# (requires option 2 above): Personal Schemes
|
||||||
|
#
|
||||||
|
#!xcuserdata/**/xcschemes/*
|
||||||
|
|
||||||
|
####
|
||||||
|
# Xcode 4 workspaces - more detailed
|
||||||
|
#
|
||||||
|
# Workspaces are important! They are a core feature of Xcode - don't exclude them :)
|
||||||
|
#
|
||||||
|
# Workspace layout is quite spammy. For reference:
|
||||||
|
#
|
||||||
|
# /(root)/
|
||||||
|
# /(project-name).xcodeproj/
|
||||||
|
# project.pbxproj
|
||||||
|
# /project.xcworkspace/
|
||||||
|
# contents.xcworkspacedata
|
||||||
|
# /xcuserdata/
|
||||||
|
# /(your name)/xcuserdatad/
|
||||||
|
# UserInterfaceState.xcuserstate
|
||||||
|
# /xcsshareddata/
|
||||||
|
# /xcschemes/
|
||||||
|
# (shared scheme name).xcscheme
|
||||||
|
# /xcuserdata/
|
||||||
|
# /(your name)/xcuserdatad/
|
||||||
|
# (private scheme).xcscheme
|
||||||
|
# xcschememanagement.plist
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
####
|
||||||
|
# Xcode 4 - Deprecated classes
|
||||||
|
#
|
||||||
|
# Allegedly, if you manually "deprecate" your classes, they get moved here.
|
||||||
|
#
|
||||||
|
# We're using source-control, so this is a "feature" that we do not want!
|
||||||
|
|
||||||
|
*.moved-aside
|
||||||
|
|
||||||
|
####
|
||||||
|
# Files generated by automake
|
||||||
|
|
||||||
|
Makefile
|
||||||
|
autom4te.cache
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
configure
|
||||||
|
projects/demo/Makefile
|
||||||
|
projects/demo/stk-demo
|
||||||
|
projects/demo/Release
|
||||||
|
projects/demo/Debug
|
||||||
|
projects/effects/Makefile
|
||||||
|
projects/effects/effects
|
||||||
|
projects/effects/Release
|
||||||
|
projects/effects/Debug
|
||||||
|
projects/eguitar/Makefile
|
||||||
|
projects/eguitar/eguitar
|
||||||
|
projects/eguitar/Release
|
||||||
|
projects/eguitar/Debug
|
||||||
|
projects/examples/Makefile
|
||||||
|
projects/examples/audioprobe
|
||||||
|
projects/examples/bethree
|
||||||
|
projects/examples/controlbee
|
||||||
|
projects/examples/crtsine
|
||||||
|
projects/examples/duplex
|
||||||
|
projects/examples/foursine
|
||||||
|
projects/examples/grains
|
||||||
|
projects/examples/inetIn
|
||||||
|
projects/examples/inetOut
|
||||||
|
projects/examples/libMakefile
|
||||||
|
projects/examples/midiprobe
|
||||||
|
projects/examples/play
|
||||||
|
projects/examples/playsmf
|
||||||
|
projects/examples/record
|
||||||
|
projects/examples/rtsine
|
||||||
|
projects/examples/sine
|
||||||
|
projects/examples/sineosc
|
||||||
|
projects/examples/threebees
|
||||||
|
projects/examples/Release
|
||||||
|
projects/examples/Debug
|
||||||
|
projects/ragamatic/Makefile
|
||||||
|
projects/ragamatic/ragamat
|
||||||
|
projects/ragamatic/Release
|
||||||
|
projects/ragamatic/Debug
|
||||||
|
src/libstk.a
|
||||||
|
src/Release
|
||||||
|
src/Debug
|
||||||
|
src/Makefile
|
||||||
|
|
||||||
|
####
|
||||||
|
# Files generated by Visual Studio
|
||||||
|
|
||||||
|
projects/*/.vs/
|
||||||
|
projects/*/*.exe
|
||||||
|
projects/*/*.ilk
|
||||||
|
projects/*/*.pdb
|
||||||
|
projects/*/*.vcxproj.user
|
||||||
|
projects/*/Release/
|
||||||
|
projects/*/Debug/
|
||||||
42
INSTALL
42
INSTALL
@@ -1,42 +0,0 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995-2011.
|
|
||||||
|
|
||||||
The Synthesis ToolKit in C++ can be used in a variety of ways, depending on your particular needs. Some people simmply choose the classes they need for a particular project and copy those to their project directory. Others like to compile and link to a library of object files. STK was not designed with one particular style of use in mind.
|
|
||||||
|
|
||||||
To configure and compile (on Unix systems and MinGW):
|
|
||||||
|
|
||||||
1. Unpack the STK distribution (tar -xzf stk-4.x.x.tar.gz).
|
|
||||||
2. From within the directory containing this file, run configure:
|
|
||||||
|
|
||||||
./configure
|
|
||||||
|
|
||||||
3. From within each project directory, type "make".
|
|
||||||
4. To compile a library of objects, type "make" from within the src directory.
|
|
||||||
|
|
||||||
Several options can be passed to configure, including:
|
|
||||||
|
|
||||||
--disable-realtime = only compile generic non-realtime classes
|
|
||||||
--enable-debug = enable various debug output
|
|
||||||
--with-alsa = choose native ALSA API support (default, linux only)
|
|
||||||
--with-oss = choose native OSS API support (linux only)
|
|
||||||
--with-jack = choose native JACK server API support (linux and macintosh OS-X)
|
|
||||||
--with-core = choose OS-X Core Audio API (macintosh OS-X only)
|
|
||||||
--with-asio = choose ASIO API support (windows only)
|
|
||||||
--with-ds = choose DirectSound API support (windows only)
|
|
||||||
|
|
||||||
It is now possible to specify more than one audio API where supported. Note, however, that the ALSA library is required in order to compile the RtMidi class in Linux, even if the "--with-oss" option is provided (only the OSS audio API will be used, not the OSS MIDI API). Typing "./configure --help" will display all the available options. In addition, it is possible to specify the RAWWAVES and INCLUDE paths to configure as (ex. to set to /home/me/rawwaves and /home/me/include):
|
|
||||||
|
|
||||||
./configure RAWWAVE_PATH='$(HOME)/rawwaves/'
|
|
||||||
./configure INCLUDE_PATH='$(HOME)/include/'
|
|
||||||
|
|
||||||
The ending "/" is required for the RAWWAVES path. The default behavior will set a relative path that works for the project files included with the distribution (assuming they are not moved). You can also change the RAWWAVE_PATH dynamically via the static Stk::setRawwavePath() function.
|
|
||||||
|
|
||||||
If you wish to use a different compiler than that selected by configure, specify that compiler in the command line (ex. to use CC):
|
|
||||||
|
|
||||||
./configure CXX=CC
|
|
||||||
|
|
||||||
|
|
||||||
For Windows Users:
|
|
||||||
|
|
||||||
MinGW support is provided in the configure script. In addition, Visual C++ project files are included for each of the example STK projects.
|
|
||||||
54
INSTALL.md
Normal file
54
INSTALL.md
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# The Synthesis ToolKit in C++ (STK)
|
||||||
|
By Perry R. Cook and Gary P. Scavone, 1995-2019.
|
||||||
|
|
||||||
|
The Synthesis ToolKit in C++ can be used in a variety of ways, depending on your particular needs. Some people simply choose the classes they need for a particular project and copy those to their project directory. Others like to compile and link to a library of object files. STK was not designed with one particular style of use in mind.
|
||||||
|
|
||||||
|
## Unix systems and MinGW
|
||||||
|
|
||||||
|
1. If you downloaded the software from the git repository, first run autoconf,
|
||||||
|
|
||||||
|
autoconf
|
||||||
|
|
||||||
|
otherwise, if you downloaded the software from the STK source distribution, unpack the tar file,
|
||||||
|
|
||||||
|
tar -xzf stk-4.x.x.tar.gz
|
||||||
|
|
||||||
|
2. From within the directory containing this file, run configure:
|
||||||
|
|
||||||
|
./configure
|
||||||
|
|
||||||
|
3. From within each project directory, type `make`.
|
||||||
|
|
||||||
|
4. To compile a library of objects, type `make` from within the `src` directory.
|
||||||
|
|
||||||
|
Several options can be passed to configure, including:
|
||||||
|
|
||||||
|
--disable-realtime = only compile generic non-realtime classes
|
||||||
|
--enable-debug = enable various debug output
|
||||||
|
--with-alsa = choose native ALSA API support (default, linux only)
|
||||||
|
--with-oss = choose native OSS API support (unixes only)
|
||||||
|
--with-jack = choose native JACK server API support (linux and macintosh OS-X)
|
||||||
|
--with-core = choose OS-X CoreAudio API (macintosh OS-X only)
|
||||||
|
--with-asio = choose ASIO API support (windows only)
|
||||||
|
--with-ds = choose DirectSound API support (windows only)
|
||||||
|
--with-wasapi = choose Windows Audio Session API support (windows only)
|
||||||
|
|
||||||
|
It is now possible to specify more than one audio and MIDI API where supported. Note, however, that the ALSA library is required in order to compile the RtMidi class in Linux if the `--with-oss` option is provided (only the OSS audio API will be used, not the OSS MIDI API). Typing `./configure --help` will display all the available options. In addition, it is possible to specify the RAWWAVES and INCLUDE paths to configure as (e.g. to set to /home/me/rawwaves and /home/me/include):
|
||||||
|
|
||||||
|
./configure RAWWAVE_PATH='$(HOME)/rawwaves/'
|
||||||
|
./configure INCLUDE_PATH='$(HOME)/include/'
|
||||||
|
|
||||||
|
The ending "/" is required for the RAWWAVES path. The default behavior will set a relative path that works for the project files included with the distribution (assuming they are not moved). You can also change the RAWWAVE_PATH dynamically via the static Stk::setRawwavePath() function.
|
||||||
|
|
||||||
|
If you wish to use a different compiler than that selected by configure, specify that compiler in the command line (e.g. to use CC):
|
||||||
|
|
||||||
|
./configure CXX=CC
|
||||||
|
|
||||||
|
|
||||||
|
## Windows
|
||||||
|
|
||||||
|
MinGW support is provided in the configure script. In addition, Visual Studio 2017 project files are included for each of the example STK projects.
|
||||||
|
|
||||||
|
##iOS
|
||||||
|
|
||||||
|
You can integrate the STK in iOS projects either by using its iOS static library or CocoaPods. See the [iOS README file](iOS/README-iOS.md) for instructions.
|
||||||
27
LICENSE
Normal file
27
LICENSE
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
|
Copyright (c) 1995-2019 Perry R. Cook and Gary P. Scavone
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
Any person wishing to distribute modifications to the Software is
|
||||||
|
asked to send the modifications to the original developer so that they
|
||||||
|
can be incorporated into the canonical version. This is, however, not
|
||||||
|
a binding provision of this license.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
||||||
|
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||||
|
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
14
Makefile.in
14
Makefile.in
@@ -2,26 +2,40 @@
|
|||||||
|
|
||||||
RM = /bin/rm
|
RM = /bin/rm
|
||||||
|
|
||||||
|
REALTIME = @realtime@
|
||||||
|
|
||||||
all :
|
all :
|
||||||
cd src && $(MAKE)
|
cd src && $(MAKE)
|
||||||
cd projects/demo && $(MAKE) libdemo
|
cd projects/demo && $(MAKE) libdemo
|
||||||
|
ifeq ($(REALTIME),yes)
|
||||||
cd projects/effects && $(MAKE) libeffects
|
cd projects/effects && $(MAKE) libeffects
|
||||||
cd projects/ragamatic && $(MAKE) libragamat
|
cd projects/ragamatic && $(MAKE) libragamat
|
||||||
|
cd projects/eguitar && $(MAKE) libeguitar
|
||||||
|
endif
|
||||||
cd projects/examples && $(MAKE) -f libMakefile
|
cd projects/examples && $(MAKE) -f libMakefile
|
||||||
|
|
||||||
clean :
|
clean :
|
||||||
$(RM) -f *~
|
$(RM) -f *~
|
||||||
cd src && $(MAKE) clean
|
cd src && $(MAKE) clean
|
||||||
cd projects/demo && $(MAKE) clean
|
cd projects/demo && $(MAKE) clean
|
||||||
|
ifeq ($(REALTIME),yes)
|
||||||
cd projects/effects && $(MAKE) clean
|
cd projects/effects && $(MAKE) clean
|
||||||
cd projects/ragamatic && $(MAKE) clean
|
cd projects/ragamatic && $(MAKE) clean
|
||||||
|
cd projects/eguitar && $(MAKE) clean
|
||||||
|
endif
|
||||||
cd projects/examples && $(MAKE) clean
|
cd projects/examples && $(MAKE) clean
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
$(RM) -rf config.log config.status autom4te.cache Makefile
|
$(RM) -rf config.log config.status autom4te.cache Makefile
|
||||||
cd src && $(MAKE) distclean
|
cd src && $(MAKE) distclean
|
||||||
cd projects/demo && $(MAKE) distclean
|
cd projects/demo && $(MAKE) distclean
|
||||||
|
ifeq ($(REALTIME),yes)
|
||||||
cd projects/effects && $(MAKE) distclean
|
cd projects/effects && $(MAKE) distclean
|
||||||
cd projects/ragamatic && $(MAKE) distclean
|
cd projects/ragamatic && $(MAKE) distclean
|
||||||
|
cd projects/eguitar && $(MAKE) distclean
|
||||||
|
endif
|
||||||
cd projects/examples && $(MAKE) distclean
|
cd projects/examples && $(MAKE) distclean
|
||||||
|
|
||||||
|
install:
|
||||||
|
$(MAKE) -C src install
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +1,29 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
# The Synthesis ToolKit in C++ (STK)
|
||||||
|
By Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995-2011.
|
|
||||||
|
|
||||||
This distribution of the Synthesis ToolKit in C++ (STK) contains the following:
|
This distribution of the Synthesis ToolKit in C++ (STK) contains the following:
|
||||||
|
|
||||||
include: STK class header files
|
* [`include`](include/): STK class header files
|
||||||
src: STK class source files
|
* [`src`](src/): STK class source files
|
||||||
rawwaves: STK audio files (1-channel, 16-bit, big-endian)
|
* [`rawwaves`](rawwaves): STK audio files (1-channel, 16-bit, big-endian)
|
||||||
doc: STK documentation
|
* [`doc`](doc): STK documentation
|
||||||
projects: example STK projects and programs
|
* [`projects`](projects): example STK projects and programs
|
||||||
|
|
||||||
Please read the Legal and Ethical notes near the bottom of this document.
|
Please read the [Legal and Ethical notes](#legal-and-ethical) near the bottom of this document and the [License](LICENSE).
|
||||||
|
|
||||||
For compiling and installing STK, see the INSTALL file in this directory.
|
For compiling and installing STK, see the [INSTALL.md](INSTALL.md) file in this directory.
|
||||||
|
|
||||||
|
## Contents
|
||||||
|
|
||||||
OVERVIEW:
|
* [Overview](#overview)
|
||||||
|
* [System Requirements](#system-requirements)
|
||||||
|
* [What's New (and not so new)](#whats-new-and-not-so-new)
|
||||||
|
* [Disclaimer](#disclaimer)
|
||||||
|
* [Legal and Ethical](#legal-and-ethical)
|
||||||
|
* [Further Reading](#further-reading)
|
||||||
|
* [Perry's Notes From the Original Distribution](#perrys-notes-from-the-original-distribution)
|
||||||
|
|
||||||
|
# OVERVIEW
|
||||||
|
|
||||||
The Synthesis ToolKit in C++ (STK) is a set of open source audio
|
The Synthesis ToolKit in C++ (STK) is a set of open source audio
|
||||||
signal processing and algorithmic synthesis classes written in the C++
|
signal processing and algorithmic synthesis classes written in the C++
|
||||||
@@ -32,11 +40,10 @@ Macintosh OS X, and Windows computer platforms. Generic, non-realtime
|
|||||||
support has been tested under NeXTStep, Sun, and other platforms and
|
support has been tested under NeXTStep, Sun, and other platforms and
|
||||||
should work with any standard C++ compiler.
|
should work with any standard C++ compiler.
|
||||||
|
|
||||||
The Synthesis ToolKit is free for non-commercial use. The only
|
The only classes of the Synthesis ToolKit that are platform-dependent
|
||||||
classes of the Synthesis ToolKit that are platform-dependent concern
|
concern sockets, threads, mutexes, and real-time audio and MIDI input
|
||||||
sockets, threads, mutexes, and real-time audio and MIDI input and
|
and output. The interface for MIDI input and the simple Tcl/Tk
|
||||||
output. The interface for MIDI input and the simple Tcl/Tk graphical
|
graphical user interfaces (GUIs) provided is the same, so it's easy to
|
||||||
user interfaces (GUIs) provided is the same, so it's easy to
|
|
||||||
experiment in real time using either the GUIs or MIDI. The Synthesis
|
experiment in real time using either the GUIs or MIDI. The Synthesis
|
||||||
ToolKit can generate simultaneous SND (AU), WAV, AIFF, and MAT-file
|
ToolKit can generate simultaneous SND (AU), WAV, AIFF, and MAT-file
|
||||||
output soundfile formats (as well as realtime sound output), so you
|
output soundfile formats (as well as realtime sound output), so you
|
||||||
@@ -56,7 +63,7 @@ against one of the fundamental design goals of the ToolKit - platform
|
|||||||
independence.
|
independence.
|
||||||
|
|
||||||
For those instances where a simple GUI with sliders and buttons is
|
For those instances where a simple GUI with sliders and buttons is
|
||||||
helpful, we use Tcl/Tk (http://dev.scriptics.com) which is freely
|
helpful, we use Tcl/Tk (https://www.tcl.tk/) which is freely
|
||||||
distributed for all the supported ToolKit platforms. A number of
|
distributed for all the supported ToolKit platforms. A number of
|
||||||
Tcl/Tk GUI scripts are distributed with the ToolKit release. For
|
Tcl/Tk GUI scripts are distributed with the ToolKit release. For
|
||||||
control, the Synthesis Toolkit uses raw MIDI (on supported platforms),
|
control, the Synthesis Toolkit uses raw MIDI (on supported platforms),
|
||||||
@@ -64,17 +71,17 @@ and SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like
|
|||||||
text message synthesis control format).
|
text message synthesis control format).
|
||||||
|
|
||||||
|
|
||||||
SYSTEM REQUIREMENTS:
|
# SYSTEM REQUIREMENTS
|
||||||
|
|
||||||
See the individual README's (eg. README-linux) in the /doc directory
|
See the individual README's (e.g. README-linux) in the /doc directory
|
||||||
for platform specific information and system requirements. In
|
for platform specific information and system requirements. In
|
||||||
general, you will use the configure script to create Makefiles on unix
|
general, you will use the configure script to create Makefiles on unix
|
||||||
platforms (and MinGW) or the VC++ workspace files to compile the
|
platforms (and MinGW) or the VS2017 workspace files to compile the
|
||||||
example programs. To use the Tcl/Tk GUIs, you will need Tcl/Tk
|
example programs. To use the Tcl/Tk GUIs, you will need Tcl/Tk
|
||||||
version 8.0 or higher.
|
version 8.0 or higher.
|
||||||
|
|
||||||
|
|
||||||
WHAT'S NEW (AND NOT SO NEW):
|
# WHAT'S NEW (AND NOT SO NEW)
|
||||||
|
|
||||||
Despite being available in one form or another since 1996, we still
|
Despite being available in one form or another since 1996, we still
|
||||||
consider STK to be alpha software. We attempt to maintain backward
|
consider STK to be alpha software. We attempt to maintain backward
|
||||||
@@ -95,11 +102,12 @@ messages. In most cases, this should eliminate the use of the
|
|||||||
Md2Skini program.
|
Md2Skini program.
|
||||||
|
|
||||||
Realtime audio input capabilities were added to STK with release 3.0,
|
Realtime audio input capabilities were added to STK with release 3.0,
|
||||||
though the behavior of such is very hardware dependent. Under Linux,
|
though the behavior of such is very hardware dependent. Under Linux
|
||||||
Macintosh OS-X, and Irix, audio input and output are possible with
|
and Macintosh OS-X, audio input and output are possible with very low
|
||||||
very low latency. Using the Windoze DirectSound API, minimum
|
latency. Using the Windows DirectSound API, minimum dependable output
|
||||||
dependable output sound latency seems to be around 20 milliseconds or
|
sound latency seems to be around 20 milliseconds or so, while input
|
||||||
so, while input sound latency is generally higher.
|
sound latency is generally higher. Performance with the ASIO audio
|
||||||
|
API on Windows provides much better performance.
|
||||||
|
|
||||||
As mentioned above, it is possible to record the audio ouput of an STK
|
As mentioned above, it is possible to record the audio ouput of an STK
|
||||||
program to .snd, .wav, .raw, .aif, and .mat (Matlab MAT-file) output
|
program to .snd, .wav, .raw, .aif, and .mat (Matlab MAT-file) output
|
||||||
@@ -110,10 +118,10 @@ generic C++ compiler.
|
|||||||
|
|
||||||
For those who wish to make a library from the core STK classes, the
|
For those who wish to make a library from the core STK classes, the
|
||||||
configure script generates a Makefile in the src directory that will
|
configure script generates a Makefile in the src directory that will
|
||||||
accomplish that (Linux, SGI, and Macintosh OS X only).
|
accomplish that.
|
||||||
|
|
||||||
|
|
||||||
DISCLAIMER:
|
# DISCLAIMER
|
||||||
|
|
||||||
You probably already guessed this, but just to be sure, we don't
|
You probably already guessed this, but just to be sure, we don't
|
||||||
guarantee anything works. :-) It's free ... what do you expect? If
|
guarantee anything works. :-) It's free ... what do you expect? If
|
||||||
@@ -122,14 +130,14 @@ can also make suggestions, but again, no guarantees. Send email to
|
|||||||
the mail list.
|
the mail list.
|
||||||
|
|
||||||
|
|
||||||
LEGAL AND ETHICAL:
|
# LEGAL AND ETHICAL
|
||||||
|
|
||||||
This software was designed and created to be made publicly available
|
This software was designed and created to be made publicly available
|
||||||
for free, primarily for academic purposes, so if you use it, pass it
|
for free, primarily for academic purposes, so if you use it, pass it
|
||||||
on with this documentation, and for free.
|
on with this documentation, and for free.
|
||||||
|
|
||||||
If you make a million dollars with it, it would be nice if you would
|
If you make a million dollars with it, it would be nice if you would
|
||||||
share. If you make compositions with it, put us in the program notes.
|
share. If you make compositions with it, put us in the program notes.
|
||||||
|
|
||||||
Some of the concepts are covered by various patents, some known to us
|
Some of the concepts are covered by various patents, some known to us
|
||||||
and likely others which are unknown. Many of the ones known to us are
|
and likely others which are unknown. Many of the ones known to us are
|
||||||
@@ -140,39 +148,8 @@ public domain. To avoid subtle legal issues, we'll not state what's
|
|||||||
freely useable here, but we'll try to note within the various classes
|
freely useable here, but we'll try to note within the various classes
|
||||||
where certain things are likely to be protected by patents.
|
where certain things are likely to be protected by patents.
|
||||||
|
|
||||||
LICENSE:
|
|
||||||
|
|
||||||
STK WWW site: http://ccrma.stanford.edu/software/stk/
|
# FURTHER READING
|
||||||
|
|
||||||
The Synthesis ToolKit in C++ (STK)
|
|
||||||
Copyright (c) 1995-2011 Perry R. Cook and Gary P. Scavone
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
Any person wishing to distribute modifications to the Software is
|
|
||||||
asked to send the modifications to the original developer so that they
|
|
||||||
can be incorporated into the canonical version. This is, however, not
|
|
||||||
a binding provision of this license.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
|
||||||
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
||||||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
|
|
||||||
FURTHER READING:
|
|
||||||
|
|
||||||
For complete documentation on this ToolKit, the classes, etc., see the
|
For complete documentation on this ToolKit, the classes, etc., see the
|
||||||
doc directory of the distribution or surf to
|
doc directory of the distribution or surf to
|
||||||
@@ -180,7 +157,7 @@ http://ccrma.stanford.edu/software/stk/. Also check the platform
|
|||||||
specific README's for specific system requirements.
|
specific README's for specific system requirements.
|
||||||
|
|
||||||
|
|
||||||
PERRY'S NOTES FROM THE ORIGINAL DISTRIBUTION:
|
# PERRY'S NOTES FROM THE ORIGINAL DISTRIBUTION
|
||||||
|
|
||||||
This whole world was created with no particular hardware in mind.
|
This whole world was created with no particular hardware in mind.
|
||||||
These examples are intended to be tutorial in nature, as a platform
|
These examples are intended to be tutorial in nature, as a platform
|
||||||
@@ -203,11 +180,11 @@ The answers lie below.
|
|||||||
|
|
||||||
3) The classic difficulties most people have in trying to implement physical models are:
|
3) The classic difficulties most people have in trying to implement physical models are:
|
||||||
|
|
||||||
A) They have trouble understanding the papers, and/or in turning the theory into practice.
|
A) They have trouble understanding the papers, and/or in turning the theory into practice.
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
This 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.
|
This 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.
|
||||||
|
|
||||||
4) I wanted to try some new stuff with modal synthesis, and implement some classic FM patches as well.
|
4) I wanted to try some new stuff with modal synthesis, and implement some classic FM patches as well.
|
||||||
|
|
||||||
55
STK.podspec
Normal file
55
STK.podspec
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# To lint the spec:
|
||||||
|
# pod spec lint --skip-import-validation --allow-warnings
|
||||||
|
# To publish:
|
||||||
|
# pod trunk push STK.podspec --skip-import-validation --allow-warnings
|
||||||
|
|
||||||
|
Pod::Spec.new do |spec|
|
||||||
|
spec.name = 'STK'
|
||||||
|
spec.version = '4.6.1'
|
||||||
|
spec.summary = 'The Synthesis ToolKit in C++ is a set of open source audio signal processing and algorithmic synthesis classes.'
|
||||||
|
spec.homepage = 'https://ccrma.stanford.edu/software/stk/'
|
||||||
|
spec.source = { :git => 'https://github.com/thestk/stk.git', :tag => spec.version }
|
||||||
|
spec.license = { :type => 'MIT' }
|
||||||
|
spec.author = { "Ariel Elkin" => "ariel@arivibes.com" }
|
||||||
|
spec.platform = :ios
|
||||||
|
spec.ios.deployment_target = "10.0"
|
||||||
|
spec.source_files = [
|
||||||
|
"src/*.cpp",
|
||||||
|
"include/*.h"
|
||||||
|
]
|
||||||
|
spec.public_header_files = [
|
||||||
|
"include/*.h",
|
||||||
|
"include/SKINImsg.h",
|
||||||
|
"include/SKINItbl.h"
|
||||||
|
]
|
||||||
|
spec.exclude_files = [
|
||||||
|
"include/Thread.h",
|
||||||
|
"src/Thread.cpp",
|
||||||
|
"include/Mutex.h",
|
||||||
|
"src/Mutex.cpp",
|
||||||
|
"include/UdpSocket.h",
|
||||||
|
"src/UdpSocket.cpp",
|
||||||
|
"include/Socket.h",
|
||||||
|
"src/Socket.cpp",
|
||||||
|
"include/TcpClient.h",
|
||||||
|
"src/TcpClient.cpp",
|
||||||
|
"include/TcpServer.h",
|
||||||
|
"src/TcpServer.cpp",
|
||||||
|
"include/InetWvIn.h",
|
||||||
|
"src/InetWvIn.cpp",
|
||||||
|
"include/InetWvOut.h",
|
||||||
|
"src/InetWvOut.cpp",
|
||||||
|
"include/RtAudio.h",
|
||||||
|
"src/RtAudio.cpp",
|
||||||
|
"include/RtMidi.h",
|
||||||
|
"src/RtMidi.cpp",
|
||||||
|
"include/RtWvIn.h",
|
||||||
|
"src/RtWvIn.cpp",
|
||||||
|
"include/RtWvOut.h",
|
||||||
|
"src/RtWvOut.cpp",
|
||||||
|
"include/RtError.h"
|
||||||
|
]
|
||||||
|
spec.preserve_paths = "README.MD"
|
||||||
|
spec.resource_bundles = { "rawwaves": "rawwaves/*.raw" }
|
||||||
|
spec.libraries = 'c++'
|
||||||
|
end
|
||||||
1592
config/config.guess
vendored
1592
config/config.guess
vendored
File diff suppressed because it is too large
Load Diff
769
config/config.sub
vendored
769
config/config.sub
vendored
File diff suppressed because it is too large
Load Diff
128
configure.ac
128
configure.ac
@@ -1,8 +1,8 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
AC_INIT(STK, 4.4, gary@music.mcgill.ca, stk)
|
AC_INIT(STK, 4.6.1, gary@music.mcgill.ca, stk)
|
||||||
AC_CONFIG_AUX_DIR(config)
|
AC_CONFIG_AUX_DIR(config)
|
||||||
AC_CONFIG_SRCDIR(src/Stk.cpp)
|
AC_CONFIG_SRCDIR(src/Stk.cpp)
|
||||||
AC_CONFIG_FILES(Makefile src/Makefile projects/demo/Makefile projects/effects/Makefile projects/ragamatic/Makefile projects/examples/Makefile projects/examples/libMakefile)
|
AC_CONFIG_FILES(Makefile src/Makefile projects/demo/Makefile projects/effects/Makefile projects/ragamatic/Makefile projects/examples/Makefile projects/examples/libMakefile projects/eguitar/Makefile)
|
||||||
|
|
||||||
# Fill GXX with something before test.
|
# Fill GXX with something before test.
|
||||||
AC_SUBST( GXX, ["no"] )
|
AC_SUBST( GXX, ["no"] )
|
||||||
@@ -50,6 +50,26 @@ else
|
|||||||
fi
|
fi
|
||||||
AC_MSG_RESULT($realtime)
|
AC_MSG_RESULT($realtime)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(whether to build the static library)
|
||||||
|
AC_ARG_ENABLE(static,
|
||||||
|
[ --disable-static = do not compile static library ],
|
||||||
|
build_static=$enableval,
|
||||||
|
build_static=yes)
|
||||||
|
AC_SUBST(build_static)
|
||||||
|
AC_MSG_RESULT($build_static)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(whether to build the shared library)
|
||||||
|
AC_ARG_ENABLE(shared,
|
||||||
|
[ --enable-shared = compile the shared library ],
|
||||||
|
build_shared=$enableval,
|
||||||
|
build_shared=no)
|
||||||
|
AC_SUBST(build_shared)
|
||||||
|
AC_MSG_RESULT($build_shared)
|
||||||
|
|
||||||
|
if test x$build_static = xno -a x$build_shared = xno ; then
|
||||||
|
AC_MSG_ERROR([ both static and shared libraries are disabled], 1)
|
||||||
|
fi
|
||||||
|
|
||||||
# Check for math library
|
# Check for math library
|
||||||
AC_CHECK_LIB(m, cos, , AC_MSG_ERROR(math library is needed!))
|
AC_CHECK_LIB(m, cos, , AC_MSG_ERROR(math library is needed!))
|
||||||
|
|
||||||
@@ -80,7 +100,6 @@ fi
|
|||||||
CPPFLAGS="$CPPFLAGS $cppflag"
|
CPPFLAGS="$CPPFLAGS $cppflag"
|
||||||
|
|
||||||
# For debugging and optimization ... overwrite default because it has both -g and -O2
|
# For debugging and optimization ... overwrite default because it has both -g and -O2
|
||||||
echo "$CXXFLAGS"
|
|
||||||
CXXFLAGS="$cxxflag"
|
CXXFLAGS="$cxxflag"
|
||||||
|
|
||||||
# Check compiler and use -Wall if gnu.
|
# Check compiler and use -Wall if gnu.
|
||||||
@@ -92,99 +111,122 @@ CXXFLAGS="$CXXFLAGS $cxxflag"
|
|||||||
|
|
||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
|
|
||||||
|
basesharedname="libstk-\$(RELEASE)"
|
||||||
|
|
||||||
AC_SUBST( sharedlib, ["libstk.so"] )
|
AC_SUBST( sharedlib, ["libstk.so"] )
|
||||||
AC_SUBST( sharedname, ["libstk.so.\$(RELEASE)"] )
|
AC_SUBST( sharedname, [${basesharedname}.so] )
|
||||||
AC_SUBST( libflags, ["-shared -Wl,-soname,\$(SHAREDLIB).\$(MAJOR) -o \$(SHAREDLIB).\$(RELEASE)"] )
|
AC_SUBST( libflags, ["-shared -Wl,-soname,${basesharedname}.so -o $sharedname"] )
|
||||||
case $host in
|
case $host in
|
||||||
*-apple*)
|
*-apple*)
|
||||||
AC_SUBST( sharedlib, ["libstk.dylib"] )
|
AC_SUBST( sharedlib, ["libstk.dylib"] )
|
||||||
AC_SUBST( sharedname, ["libstk.\$(RELEASE).dylib"] )
|
AC_SUBST( sharedname, ["${basesharedname}.dylib"] )
|
||||||
AC_SUBST( libflags, ["-dynamiclib -o libstk.\$(RELEASE).dylib"] )
|
AC_SUBST( libflags, ["-dynamiclib -o ${basesharedname}.dylib"] )
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test $realtime = yes; then
|
if test $realtime = yes; then
|
||||||
# Checks for package options and external software
|
# Checks for package options and external software
|
||||||
AC_MSG_CHECKING(for audio API)
|
AC_MSG_CHECKING(for audio API)
|
||||||
case $host in
|
|
||||||
*-*-linux*)
|
|
||||||
AC_ARG_WITH(jack, [ --with-jack = choose JACK server support (mac and linux only)], [
|
|
||||||
api="$api -D__UNIX_JACK__"
|
|
||||||
AC_MSG_RESULT(using JACK)
|
|
||||||
AC_CHECK_LIB(jack, jack_client_open, , AC_MSG_ERROR(JACK support requires the jack library!))
|
|
||||||
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(Jack support also requires the asound library!))], )
|
|
||||||
|
|
||||||
|
AC_ARG_WITH(jack, [ --with-jack = choose JACK server support (mac and linux only)])
|
||||||
|
AS_IF([test "x$with_jack" == "xyes"], [
|
||||||
|
api="$api -D__UNIX_JACK__"
|
||||||
|
AC_MSG_RESULT(using JACK)
|
||||||
|
AC_CHECK_LIB(jack, jack_client_open, , AC_MSG_ERROR(JACK support requires the jack library!))])
|
||||||
|
|
||||||
|
case $host in
|
||||||
|
*-*-netbsd*)
|
||||||
|
AS_IF([test "$api" == ""], [
|
||||||
|
AC_MSG_RESULT(using OSS)
|
||||||
|
api="$api -D__LINUX_OSS__"
|
||||||
|
LIBS="$LIBS -lossaudio"
|
||||||
|
AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR(RtAudio requires the pthread library!))])
|
||||||
|
;;
|
||||||
|
|
||||||
|
*-*-freebsd*)
|
||||||
|
AS_IF([test "$api" == ""], [
|
||||||
|
AC_MSG_RESULT(using OSS)
|
||||||
|
api="$api -D__LINUX_OSS__"
|
||||||
|
LIBS="$LIBS -lossaudio"
|
||||||
|
AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR(RtAudio requires the pthread library!))])
|
||||||
|
;;
|
||||||
|
|
||||||
|
*-*-linux*)
|
||||||
# Look for ALSA flag
|
# Look for ALSA flag
|
||||||
AC_ARG_WITH(alsa, [ --with-alsa = choose native ALSA API support (linux only)], [
|
AC_ARG_WITH(alsa, [ --with-alsa = choose native ALSA API support (linux only)])
|
||||||
|
AS_IF([test "x$with_alsa" == "xyes"], [
|
||||||
api="$api -D__LINUX_ALSA__"
|
api="$api -D__LINUX_ALSA__"
|
||||||
AC_MSG_RESULT(using ALSA)
|
AC_MSG_RESULT(using ALSA)
|
||||||
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(ALSA support requires the asound library!))], )
|
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(ALSA support requires the asound library!))])
|
||||||
|
|
||||||
# Look for OSS flag
|
# Look for OSS flag
|
||||||
AC_ARG_WITH(oss, [ --with-oss = choose OSS API support (linux only)], [
|
AC_ARG_WITH(oss, [ --with-oss = choose OSS API support (unixes only)])
|
||||||
api="$api -D__LINUX_OSS__"
|
AS_IF([test "x$with_oss" == "xyes"], [
|
||||||
AC_MSG_RESULT(using OSS)], )
|
api="$api -D__LINUX_OSS__ -D__LINUX_ALSA__"
|
||||||
|
AC_MSG_RESULT(using OSS)
|
||||||
|
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(OSS support requires ALSA for RtMidi!))])
|
||||||
|
|
||||||
# If no audio api flags specified, use ALSA
|
# If no audio api flags specified, use ALSA
|
||||||
if [test "$api" == "";] then
|
AS_IF([test "$api" == ""], [
|
||||||
AC_MSG_RESULT(using ALSA)
|
AC_MSG_RESULT(using ALSA)
|
||||||
AC_SUBST( api, [-D__LINUX_ALSA__] )
|
AC_SUBST( api, [-D__LINUX_ALSA__] )
|
||||||
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(ALSA support requires the asound library!))
|
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(ALSA support requires the asound library!))
|
||||||
fi
|
])
|
||||||
|
|
||||||
# Look for ALSA library because we need it for RtMidi
|
AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR(RtAudio requires the pthread library!))
|
||||||
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(STK in Linux requires the ALSA asound library for RtMidi!))
|
|
||||||
api="$api -D__LINUX_ALSASEQ__"
|
|
||||||
|
|
||||||
AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR(realtime support requires the pthread library!))
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*-apple*)
|
*-apple*)
|
||||||
AC_ARG_WITH(jack, [ --with-jack = choose JACK server support (unix only)], [
|
|
||||||
api="$api -D__UNIX_JACK__"
|
|
||||||
AC_MSG_RESULT(using JACK)
|
|
||||||
AC_CHECK_LIB(jack, jack_client_new, , AC_MSG_ERROR(JACK support requires the jack library!))], )
|
|
||||||
|
|
||||||
# Look for Core flag
|
# Look for Core flag
|
||||||
AC_ARG_WITH(core, [ --with-core = choose CoreAudio API support (mac only)], [
|
AC_ARG_WITH(core, [ --with-core = choose CoreAudio API support (mac only)])
|
||||||
|
AS_IF([test "x$with_core" == "xyes"], [
|
||||||
api="$api -D__MACOSX_CORE__"
|
api="$api -D__MACOSX_CORE__"
|
||||||
AC_MSG_RESULT(using CoreAudio)
|
AC_MSG_RESULT(using CoreAudio)
|
||||||
AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [], [AC_MSG_ERROR(CoreAudio header files not found!)] )
|
AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [], [AC_MSG_ERROR(CoreAudio header files not found!)] )
|
||||||
LIBS="$LIBS -framework CoreAudio -framework CoreFoundation -framework CoreMidi" ], )
|
LIBS="$LIBS -framework CoreAudio -framework CoreFoundation -framework CoreMIDI" ])
|
||||||
|
|
||||||
# If no audio api flags specified, use CoreAudio
|
# If no audio api flags specified, use CoreAudio
|
||||||
if [test "$api" == ""; ] then
|
AS_IF([test "$api" == ""], [
|
||||||
AC_SUBST( api, [-D__MACOSX_CORE__] )
|
AC_SUBST( api, [-D__MACOSX_CORE__] )
|
||||||
AC_MSG_RESULT(using CoreAudio)
|
AC_MSG_RESULT(using CoreAudio)
|
||||||
AC_CHECK_HEADER(CoreAudio/CoreAudio.h,
|
AC_CHECK_HEADER(CoreAudio/CoreAudio.h,
|
||||||
[],
|
[],
|
||||||
[AC_MSG_ERROR(CoreAudio header files not found!)] )
|
[AC_MSG_ERROR(CoreAudio header files not found!)] )
|
||||||
AC_SUBST( LIBS, ["-framework CoreAudio -framework CoreFoundation -framework CoreMidi"] )
|
AC_SUBST( LIBS, ["-framework CoreAudio -framework CoreFoundation -framework CoreMIDI"] )
|
||||||
fi
|
])
|
||||||
|
|
||||||
AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR(RtAudio requires the pthread library!))
|
AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR(RtAudio requires the pthread library!))
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*-mingw32*)
|
*-mingw32*)
|
||||||
AC_ARG_WITH(asio, [ --with-asio = choose ASIO API support (windoze only)], [
|
AC_ARG_WITH(asio, [ --with-asio = choose ASIO API support (windoze only)])
|
||||||
|
AS_IF([test "x$with_asio" == "xyes"], [
|
||||||
api="$api -D__WINDOWS_ASIO__"
|
api="$api -D__WINDOWS_ASIO__"
|
||||||
AC_MSG_RESULT(using ASIO)
|
AC_MSG_RESULT(using ASIO)
|
||||||
AC_SUBST( objects, ["asio.o asiodrivers.o asiolist.o iasiothiscallresolver.o"] ) ], )
|
AC_SUBST( objects, ["asio.o asiodrivers.o asiolist.o iasiothiscallresolver.o"] ) ])
|
||||||
|
|
||||||
# Look for DirectSound flag
|
# Look for DirectSound flag
|
||||||
AC_ARG_WITH(ds, [ --with-ds = choose DirectSound API support (windoze only)], [
|
AC_ARG_WITH(ds, [ --with-ds = choose DirectSound API support (windoze only)])
|
||||||
|
AS_IF([test "x$with_ds" == "xyes"], [
|
||||||
api="$api -D__WINDOWS_DS__"
|
api="$api -D__WINDOWS_DS__"
|
||||||
AC_MSG_RESULT(using DirectSound)
|
AC_MSG_RESULT(using DirectSound)
|
||||||
LIBS="-ldsound -lwinmm $LIBS" ], )
|
LIBS="-ldsound $LIBS" ])
|
||||||
|
|
||||||
|
# Look for WASAPI flag
|
||||||
|
AC_ARG_WITH(wasapi, [ --with-wasapi = choose Windows Audio Session API support (windoze only)])
|
||||||
|
AS_IF([test "x$with_wasapi" == "xyes"], [
|
||||||
|
api="$api -D__WINDOWS_WASAPI__"
|
||||||
|
AC_MSG_RESULT(using WASAPI)
|
||||||
|
LIBS="-luuid -lksuser $LIBS" ])
|
||||||
|
|
||||||
# If no audio api flags specified, use DirectSound
|
# If no audio api flags specified, use DirectSound
|
||||||
if [test "$api" == "";] then
|
AS_IF([test "$api" == ""], [
|
||||||
AC_SUBST( api, [-D__WINDOWS_DS__] )
|
AC_SUBST( api, [-D__WINDOWS_DS__] )
|
||||||
AC_MSG_RESULT(using DirectSound)
|
AC_MSG_RESULT(using DirectSound)
|
||||||
LIBS="-ldsound -lwinmm $LIBS"
|
LIBS="-ldsound -lwinmm $LIBS"
|
||||||
fi
|
])
|
||||||
|
|
||||||
api="$api -D__WINDOWS_MM__"
|
api="$api -D__WINDOWS_MM__"
|
||||||
LIBS="-lole32 -lwinmm -lWsock32 $LIBS"
|
LIBS="-lole32 -lwinmm -lwsock32 $LIBS"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995-2011.
|
By Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
|
|
||||||
Please read the file README and INSTALL for more general STK information.
|
Please read the file README and INSTALL for more general STK information.
|
||||||
|
|
||||||
Realtime audio support for Linux currently includes the Advanced Linux Sound Architecture (ALSA), the JACK low-latency audio server, and/or Open Sound System (OSS version 4.0 and higher only) APIs. That said, the OSS API support has not been tested in several years and is not considered a high priority. One or more APIs are selected during compilation using the __LINUX_ALSA__, __UNIX_JACK__, and/or __LINUX_OSS__ definitions. Because the ALSA library is now integrated into the standard Linux kernel, it is the default audio/MIDI API with STK versions 4.2 and higher.
|
Realtime audio support for Linux currently includes the Advanced Linux Sound Architecture (ALSA), the JACK low-latency audio server, and/or Open Sound System (OSS version 4.0 and higher only) APIs. That said, the OSS API support has not been tested in several years and is not considered a high priority. One or more APIs are selected during compilation using the __LINUX_ALSA__, __UNIX_JACK__, and/or __LINUX_OSS__ definitions. Because the ALSA library is now integrated into the standard Linux kernel, it is the default audio/MIDI API with STK versions 4.2 and higher.
|
||||||
|
|
||||||
The __LINUX_ALSASEQ__ definition is required to compile RtMidi with ALSA sequencer support. Native OSS MIDI support no longer exists in RtMidi. If the __LINUX_OSS__ preprocessor definition is specified, only OSS audio support will be compiled and RtMidi will still be compiled using the ALSA API. For this reason, STK now requires the asound library for realtime support. Realtime programs must also link with the pthread library.
|
Realtime MIDI support Linux currently includes the Jack and ALSA sequencer support. Native OSS MIDI support no longer exists in RtMidi. If the __LINUX_OSS__ preprocessor definition is specified, only OSS audio support will be compiled and RtMidi will still be compiled using the ALSA API. For this reason, STK now requires the asound library for realtime support (unless only using the Jack API). Realtime programs must also link with the pthread library.
|
||||||
|
|
||||||
STK should compile without much trouble under Linux. Since all Linux distributions typically include the GNU makefile utilities, you should be able to use the default Makefiles. Typing "make" in a project directory will initiate the compilation process (after initially running the configure script in the top-level directory).
|
STK should compile without much trouble under Linux. Since all Linux distributions typically include the GNU makefile utilities, you should be able to use the default Makefiles. Typing "make" in a project directory will initiate the compilation process (after initially running the configure script in the top-level directory).
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995-2011.
|
By Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
|
|
||||||
Please read the file README and INSTALL for more general STK information.
|
Please read the file README and INSTALL for more general STK information.
|
||||||
|
|
||||||
The default realtime support for Macintosh OS X uses the CoreAudio HAL API and is specified during compilation using the __MACOSX_CORE__ preprocessor definition. There is also support for the JACK audio server using the __UNIX_JACK__ preprocessor definition.
|
The default realtime support for Macintosh OS X uses the CoreAudio HAL API and is specified during compilation using the __MACOSX_CORE__ preprocessor definition. There is also support for the JACK audio server using the __UNIX_JACK__ preprocessor definition.
|
||||||
|
|
||||||
It is necessary to install the OS X developer kit in order to compile STK. STK was successfully tested on the latest version of OS X.
|
It is necessary to install the OS X developer kit (or the command line tools) in order to compile STK. STK was successfully tested on the latest version of OS X.
|
||||||
|
|
||||||
Tcl/Tk on OS X:
|
Tcl/Tk on OS X:
|
||||||
|
|
||||||
I think that tcl/tk interpreter is now included in the XCode package, since I haven't had to download it for several years now.
|
I think that Tcl/Tk interpreter is now included in the Xcode package, since I haven't had to download it for several years now.
|
||||||
|
|
||||||
It appears that socket support in Tcl/Tk on OS X uses the Nagle algorithm, which produces poor response between changes made in the tcl/tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script.
|
It appears that socket support in Tcl/Tk on OS X uses the Nagle algorithm, which produces poor response between changes made in the Tcl/Tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995-2011.
|
By Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
|
|
||||||
Please read the file README and INSTALL for more general STK information.
|
Please read the file README and INSTALL for more general STK information.
|
||||||
|
|
||||||
|
|||||||
@@ -1,35 +1,26 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995-2011.
|
By Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
|
|
||||||
Please read the file README for more general STK information.
|
Please read the file README.md for more general STK information.
|
||||||
|
|
||||||
The configure script supports MinGW. As well, STK is distributed with Visual C++ .NET project and workspace files. It no longer compiles with Visual C++ 6.0.
|
The configure script supports MinGW.
|
||||||
|
|
||||||
With Windows XP/7, piping works as under unix. Simply fire up the script files (ex. StkDemo.bat) by either double-clicking on them or from within a shell.
|
STK has been built and tested on Windows platforms using Visual Studio. It is assumed here that you're familiar with Visual C++ and its particular idiosyncrasies. The currently supported version is VS2017. You can download the free non-commercial community edition from the Microsoft website. The folders in the projects directory contain VS2017 solution files.
|
||||||
|
If you are creating a new stk application, it's easiest to use the supplied template:
|
||||||
|
- Copy stk\projects\stk-template.zip to C:\Users\<user>\Documents\Visual Studio 2017\Templates\ProjectTemplates\Visual C++ Project\
|
||||||
|
- Start VS2017.
|
||||||
|
- Select create new project...
|
||||||
|
- Select Visual C++.
|
||||||
|
- Select stk-template and enter your preferred project name and location. Note that if you do not put the project at the same level as stk\projects you will have to fix all paths in the project properties to match.
|
||||||
|
- The template is based on one of the projects in the examples directory. Add/remove files as needed and edit main.cpp to taste.
|
||||||
|
|
||||||
IMPORTANT VC++ NOTE: When compiling "release" versions of STK programs, link to the release multithreaded library. When compiling "debug" versions, link to the debug multithreaded library. Compiler errors will result otherwise.
|
To use the Tcl/Tk GUIs, you will have to install Tcl/Tk and build using MinGW.
|
||||||
|
|
||||||
Both the DirectSound and Steinberg ASIO audio APIs are supported for realtime audio input/output. The Visual C++ project files included with this distribution are configured to use the DirectSound API. In order to use the ASIO API, it is necessary to change the preprocessor definition from __WINDOWS_DS__ to __WINDOWS_ASIO__, as well as include all the files in the /src/include/ directory (i.e. asio.h, asio.cpp, ...). If you have a good quality soundcard and a native ASIO driver (not emulated), you are likely to get much better input/output response using that.
|
With Windows XP and later, piping works as under unix. Simply fire up the script files (e.g. StkDemo.bat) by either double-clicking on them or from within a shell.
|
||||||
|
|
||||||
|
The DirectSound, WASAPI and Steinberg ASIO audio APIs are supported for realtime audio input/output. The VS2017 project files included with this distribution are configured to use all supported APIs. The default (as in stk-template) is the DirectSound API (preprocessor definition __WINDOWS_DS__). In order to use the ASIO API, it is necessary to use the preprocessor definition __WINDOWS_ASIO__, as well as include most of the files in the /src/include/ directory (i.e. asio.h, asio.cpp, ...). If you have a good quality soundcard and a native ASIO driver (not emulated), you are likely to get much better input/output response using that.
|
||||||
|
|
||||||
When using the DirectSound API for audio input, latency can be high. If you experience realtime audio "stuttering", you should experiment with different "buffer size" and "number of buffers" values.
|
When using the DirectSound API for audio input, latency can be high. If you experience realtime audio "stuttering", you should experiment with different "buffer size" and "number of buffers" values.
|
||||||
|
|
||||||
Realtime MIDI input/output is supported by RtMidi using the winmm.lib API and requires the __WINDOWS_MM__ preprocessor definition.
|
Realtime MIDI input/output is supported by RtMidi using the winmm.lib API and requires the __WINDOWS_MM__ preprocessor definition.
|
||||||
|
|
||||||
Visual C++ workspaces have been created for the various STK projects. Everything has already been configured for you. The intermediate .obj files will be written to either the "Release" or "Debug" directories, but the executable files will be written to the main project directories (where they need to be for proper execution). If you should somehow lose or hose the VC++ workspace file for a project, then you will have to do a LOT of configuring to recreate it ... it's probably easier just to download the distribution again from our WWW sites. Anyway, for your benefit and mine, here is a list of things that need to be added to the various "Project Settings" (this was for VC 6.0 ... things have changed with the newer versions of the VC compiler):
|
|
||||||
|
|
||||||
1. Under General: Set "Output files:" to <blank> (this will put the executable in the main project directory.
|
|
||||||
|
|
||||||
2. Under C/C++ > Code Generation: Set "Use run-time library:" to Multithreaded (use "debug" versions for the debug configuration).
|
|
||||||
|
|
||||||
3. Under Link > General: Add winmm.lib, dsound.lib, and Wsock32.lib to the end of the Object/library modules list.
|
|
||||||
|
|
||||||
4. Under C/C++ > Preprocessor: Add "../../include" directory to the "extra include" field.
|
|
||||||
|
|
||||||
5. Under C/C++ > Preprocessor: Add "__WINDOWS_DS__", "__WINDOWS_MM__", and "__LITTLE_ENDIAN__ to the definitions field.
|
|
||||||
|
|
||||||
6. Add all the necessary files to the project.
|
|
||||||
|
|
||||||
Remember that items 1-5 above need to be done for each project and for each configuration. There might be an easy way to make global changes, but I couldn't figure it out.
|
|
||||||
|
|
||||||
To use the Tcl/Tk GUIs, you will have to install Tcl/Tk.
|
|
||||||
|
|||||||
@@ -1,6 +1,49 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995-2011.
|
By Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
|
|
||||||
|
v.4.6.1 (18 April 2019)
|
||||||
|
- see github site for complete details (github.com/thestk/stk)
|
||||||
|
- various documentation updates
|
||||||
|
- new Recorder (flute a la Verge) class (thanks to Mathias Bredholt)
|
||||||
|
- updated Modulate class to allow noise rate control
|
||||||
|
- new VS2017 project files
|
||||||
|
- fix in FileLoop::getSize() to return file size (not chunk size)
|
||||||
|
|
||||||
|
v.4.6.0 (31 August 2017)
|
||||||
|
- see github site for complete details
|
||||||
|
- various build system updates
|
||||||
|
- fixes in FileWvIn / FileLoop for normalisation and scaling, as well as file opening
|
||||||
|
- bug fix for MAT-files in FileWrite
|
||||||
|
- bug fix in MidiFileIn.cpp for timing and time-code formats
|
||||||
|
- updated versions of RtAudio and RtMidi
|
||||||
|
|
||||||
|
v4.5.1 (22 February 2017)
|
||||||
|
- fix for FileWvIn / FileLoop classes to avoid keeping files open if not necessary
|
||||||
|
- miscellaneous bug fixes, documented on GitHub site (github.com/thestk/stk)
|
||||||
|
- update to play.cpp example to play mono files as stereo
|
||||||
|
- bug fix in DelayL::setDelay() function
|
||||||
|
- miscellanous build bug fixes
|
||||||
|
|
||||||
|
v4.5.0: (26 April 2014)
|
||||||
|
- updated versions of RtAudio and RtMidi, with associated renaming of RtError class to either RtAudioError or RtMidiError and addition of WASAPI support in Windows
|
||||||
|
- added support in FileRead for little-endian AIFC file format
|
||||||
|
- new iOS project files (thanks to Ariel Elkin)
|
||||||
|
- bug fix in FreeVerb that could cause crackling for stereo input
|
||||||
|
- various bug fixes and updates to minimize compiler warnings
|
||||||
|
- ADSR fix for decay/release time calculations
|
||||||
|
- various updates to build system
|
||||||
|
|
||||||
|
v4.4.4: (24 August 2012)
|
||||||
|
- new FreeVerb class (thanks to Greg Burlet)
|
||||||
|
- new Guitar class
|
||||||
|
- new electric guitar project
|
||||||
|
- cleaned / revised Shakers class
|
||||||
|
- updated versions of RtAudio and RtMidi
|
||||||
|
- bug fix in LentPitShift
|
||||||
|
- bug fix in Echo constructor
|
||||||
|
- bug fix in FileWvIn (file size when chunking)
|
||||||
|
- bug fix in StkFrames copy constructor
|
||||||
|
|
||||||
v4.4.3: (30 August 2011)
|
v4.4.3: (30 August 2011)
|
||||||
- changed SINT24 to be lower 3 bytes of 32-bit word
|
- changed SINT24 to be lower 3 bytes of 32-bit word
|
||||||
@@ -13,7 +56,7 @@ v4.4.3: (30 August 2011)
|
|||||||
- added WAVE_FORMAT_EXTENSIBLE support in FileWrite
|
- added WAVE_FORMAT_EXTENSIBLE support in FileWrite
|
||||||
- added sample rate variable reading and writing for MAT-files in FileRead and FileWrite
|
- added sample rate variable reading and writing for MAT-files in FileRead and FileWrite
|
||||||
|
|
||||||
v4.4.2: (4 February 2010)
|
v4.4.2: (4 February 2011)
|
||||||
- added various header file includes for newer compilers
|
- added various header file includes for newer compilers
|
||||||
- new LentPitShift class (thanks to Francois Germain)
|
- new LentPitShift class (thanks to Francois Germain)
|
||||||
- added "addTo" function to Delay class
|
- added "addTo" function to Delay class
|
||||||
@@ -120,7 +163,7 @@ v4.1.3: (22 March 2004)
|
|||||||
v4.1.2: (15 March 2004)
|
v4.1.2: (15 March 2004)
|
||||||
- added Linux JACK support to RtAudio
|
- added Linux JACK support to RtAudio
|
||||||
- added optional doNormalize argument to WvIn to allow specification of data normalization or not
|
- added optional doNormalize argument to WvIn to allow specification of data normalization or not
|
||||||
- added volume control to demo program and various tcl scripts
|
- added volume control to demo program and various Tcl scripts
|
||||||
- added support for dynamic rawwavePath() setting
|
- added support for dynamic rawwavePath() setting
|
||||||
- WaveLoop bug fix
|
- WaveLoop bug fix
|
||||||
- fixed bug in ADSR::setReleaseTime() method
|
- fixed bug in ADSR::setReleaseTime() method
|
||||||
@@ -144,7 +187,7 @@ v4.1: (8 October 2002)
|
|||||||
- added Voicer, SingWave, and VoicForm classes
|
- added Voicer, SingWave, and VoicForm classes
|
||||||
- improvements/fixes to the banded waveguide instruments
|
- improvements/fixes to the banded waveguide instruments
|
||||||
- demo program now uses Voicer, allowing polyphony
|
- demo program now uses Voicer, allowing polyphony
|
||||||
- demo tcl/tk scripts changed to use SKINI PitchChange instead of PitchBend
|
- demo Tcl/Tk scripts changed to use SKINI PitchChange instead of PitchBend
|
||||||
- demo program response to PitchBend modified to octave up/down
|
- demo program response to PitchBend modified to octave up/down
|
||||||
- several RtAudio fixes and improvements (OS X and Windows ASIO support added)
|
- several RtAudio fixes and improvements (OS X and Windows ASIO support added)
|
||||||
- added nextOut() method to Delay classes
|
- added nextOut() method to Delay classes
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ upon/from which to build and depart.
|
|||||||
the channel number is scanned as a long int. Channels could be socket
|
the channel number is scanned as a long int. Channels could be socket
|
||||||
numbers, machine IDs, serial numbers, or even unique tags for each
|
numbers, machine IDs, serial numbers, or even unique tags for each
|
||||||
event in a synthesis. Other fields might be used, as specified in the
|
event in a synthesis. Other fields might be used, as specified in the
|
||||||
SKINI.tbl file. This is described in more detail later.
|
SKINItbl.h file. This is described in more detail later.
|
||||||
|
|
||||||
Fields in a SKINI line are delimited by spaces, commas, or
|
Fields in a SKINI line are delimited by spaces, commas, or
|
||||||
tabs. The SKINI parser only operates on a line at a time,
|
tabs. The SKINI parser only operates on a line at a time,
|
||||||
@@ -109,9 +109,9 @@ upon/from which to build and depart.
|
|||||||
|
|
||||||
All fields other than type, time, and channel are optional, and the
|
All fields other than type, time, and channel are optional, and the
|
||||||
types and useage of the additional fields is defined in the file
|
types and useage of the additional fields is defined in the file
|
||||||
SKINI.tbl.
|
SKINItbl.h.
|
||||||
|
|
||||||
The other important file used by SKINI is SKINI.msg, which is a
|
The other important file used by SKINI is SKINImsg.h, which is a
|
||||||
set of #defines to make C code more readable, and to allow reasonably
|
set of #defines to make C code more readable, and to allow reasonably
|
||||||
quick re-mapping of control numbers, etc.. All of these defined
|
quick re-mapping of control numbers, etc.. All of these defined
|
||||||
symbols are assigned integer values. For JAVA, the #defines could
|
symbols are assigned integer values. For JAVA, the #defines could
|
||||||
@@ -127,13 +127,13 @@ upon/from which to build and depart.
|
|||||||
receiving SKINI messages a line at a time, usually in real time,
|
receiving SKINI messages a line at a time, usually in real time,
|
||||||
but not restricted to real time.
|
but not restricted to real time.
|
||||||
|
|
||||||
SKINI.msg should be included by anything wanting to use the
|
SKINImsg.h should be included by anything wanting to use the
|
||||||
Skini.cpp object. This is not mandatory, but use of the __SK_blah_
|
Skini.cpp object. This is not mandatory, but use of the __SK_blah_
|
||||||
symbols which are defined in the .msg file will help to ensure
|
symbols which are defined in the .msg file will help to ensure
|
||||||
clarity and consistency when messages are added and changed.
|
clarity and consistency when messages are added and changed.
|
||||||
|
|
||||||
SKINI.tbl is used only by the SKINI parser object (Skini.cpp).
|
SKINItbl.h is used only by the SKINI parser object (Skini.cpp).
|
||||||
In the file SKINI.tbl, an array of structures is declared and
|
In the file SKINItbl.h, an array of structures is declared and
|
||||||
assigned values which instruct the parser as to what the message
|
assigned values which instruct the parser as to what the message
|
||||||
types are, and what the fields mean for those message types.
|
types are, and what the fields mean for those message types.
|
||||||
This table is compiled and linked into applications using SKINI, but
|
This table is compiled and linked into applications using SKINI, but
|
||||||
@@ -195,7 +195,7 @@ upon/from which to build and depart.
|
|||||||
A -1 channel can be used as don't care, omni, or other functions
|
A -1 channel can be used as don't care, omni, or other functions
|
||||||
depending on your needs and taste.
|
depending on your needs and taste.
|
||||||
|
|
||||||
g) All remaining fields are specified in the SKINI.tbl file.
|
g) All remaining fields are specified in the SKINItbl.h file.
|
||||||
In general, there are maximum two more fields, which are either
|
In general, there are maximum two more fields, which are either
|
||||||
SK_INT (long), SK_DBL (double float), or SK_STR (string). The
|
SK_INT (long), SK_DBL (double float), or SK_STR (string). The
|
||||||
latter is the mechanism by which more arguments can be specified
|
latter is the mechanism by which more arguments can be specified
|
||||||
@@ -237,9 +237,9 @@ upon/from which to build and depart.
|
|||||||
NoteOff 0.000000 2 71 82
|
NoteOff 0.000000 2 71 82
|
||||||
NoteOff 0.000000 2 79 82
|
NoteOff 0.000000 2 79 82
|
||||||
|
|
||||||
7) The SKINI.tbl File, How Messages are Parsed:
|
7) The SKINItbl.h File, How Messages are Parsed:
|
||||||
|
|
||||||
The SKINI.tbl file contains an array of structures which
|
The SKINItbl.h file contains an array of structures which
|
||||||
are accessed by the parser object Skini.cpp. The struct is:
|
are accessed by the parser object Skini.cpp. The struct is:
|
||||||
|
|
||||||
struct SKINISpec { char messageString[32];
|
struct SKINISpec { char messageString[32];
|
||||||
@@ -276,7 +276,7 @@ upon/from which to build and depart.
|
|||||||
something else stored in the SK_STR field, or
|
something else stored in the SK_STR field, or
|
||||||
as a new type of multi-line message.
|
as a new type of multi-line message.
|
||||||
|
|
||||||
Here's a couple of lines from the SKINI.tbl file
|
Here's a couple of lines from the SKINItbl.h file
|
||||||
|
|
||||||
{"NoteOff" , __SK_NoteOff_, SK_DBL, SK_DBL},
|
{"NoteOff" , __SK_NoteOff_, SK_DBL, SK_DBL},
|
||||||
{"NoteOn" , __SK_NoteOn_, SK_DBL, SK_DBL},
|
{"NoteOn" , __SK_NoteOn_, SK_DBL, SK_DBL},
|
||||||
@@ -290,7 +290,7 @@ upon/from which to build and depart.
|
|||||||
The first three are basic MIDI messages. The first two would cause the
|
The first three are basic MIDI messages. The first two would cause the
|
||||||
parser, after recognizing a match of the string "NoteOff" or "NoteOn",
|
parser, after recognizing a match of the string "NoteOff" or "NoteOn",
|
||||||
to set the message type to 128 or 144 (__SK_NoteOff_ and __SK_NoteOn_
|
to set the message type to 128 or 144 (__SK_NoteOff_ and __SK_NoteOn_
|
||||||
are #defined in the file SKINI.msg to be the MIDI byte value, without
|
are #defined in the file SKINImsg.h to be the MIDI byte value, without
|
||||||
channel, of the actual MIDI messages for NoteOn and NoteOff). The parser
|
channel, of the actual MIDI messages for NoteOn and NoteOff). The parser
|
||||||
would then set the time or delta time (this is always done and is
|
would then set the time or delta time (this is always done and is
|
||||||
therefore not described in the SKINI Message Struct). The next two
|
therefore not described in the SKINI Message Struct). The next two
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Doxyfile 1.6.2
|
# Doxyfile 1.8.3.1
|
||||||
|
|
||||||
# This file describes the settings to be used by the documentation system
|
# This file describes the settings to be used by the documentation system
|
||||||
# doxygen (www.doxygen.org) for a project
|
# doxygen (www.doxygen.org) for a project
|
||||||
@@ -22,8 +22,9 @@
|
|||||||
|
|
||||||
DOXYFILE_ENCODING = UTF-8
|
DOXYFILE_ENCODING = UTF-8
|
||||||
|
|
||||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
|
# The PROJECT_NAME tag is a single word (or sequence of words) that should
|
||||||
# by quotes) that should identify the project.
|
# identify the project. Note that if you do not use Doxywizard you need
|
||||||
|
# to put quotes around the project name if it contains spaces.
|
||||||
|
|
||||||
PROJECT_NAME = STK
|
PROJECT_NAME = STK
|
||||||
|
|
||||||
@@ -31,7 +32,20 @@ PROJECT_NAME = STK
|
|||||||
# This could be handy for archiving the generated documentation or
|
# This could be handy for archiving the generated documentation or
|
||||||
# if some version control system is used.
|
# if some version control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = 4.4.3
|
PROJECT_NUMBER = 4.6.1
|
||||||
|
|
||||||
|
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||||
|
# for a project that appears at the top of each page and should give viewer
|
||||||
|
# a quick idea about the purpose of the project. Keep the description short.
|
||||||
|
|
||||||
|
PROJECT_BRIEF =
|
||||||
|
|
||||||
|
# With the PROJECT_LOGO tag one can specify an logo or icon that is
|
||||||
|
# included in the documentation. The maximum height of the logo should not
|
||||||
|
# exceed 55 pixels and the maximum width should not exceed 200 pixels.
|
||||||
|
# Doxygen will copy the logo to the output directory.
|
||||||
|
|
||||||
|
PROJECT_LOGO =
|
||||||
|
|
||||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
||||||
# base path where the generated documentation will be put.
|
# base path where the generated documentation will be put.
|
||||||
@@ -57,7 +71,7 @@ CREATE_SUBDIRS = NO
|
|||||||
# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
|
# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
|
||||||
# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
|
# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
|
||||||
# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
|
# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
|
||||||
# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
|
# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
|
||||||
# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
|
# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
|
||||||
|
|
||||||
OUTPUT_LANGUAGE = English
|
OUTPUT_LANGUAGE = English
|
||||||
@@ -112,7 +126,9 @@ FULL_PATH_NAMES = NO
|
|||||||
# only done if one of the specified strings matches the left-hand part of
|
# only done if one of the specified strings matches the left-hand part of
|
||||||
# the path. The tag can be used to show relative paths in the file list.
|
# the path. The tag can be used to show relative paths in the file list.
|
||||||
# If left blank the directory from which doxygen is run is used as the
|
# If left blank the directory from which doxygen is run is used as the
|
||||||
# path to strip.
|
# path to strip. Note that you specify absolute paths here, but also
|
||||||
|
# relative paths, which will be relative from the directory where doxygen is
|
||||||
|
# started.
|
||||||
|
|
||||||
STRIP_FROM_PATH =
|
STRIP_FROM_PATH =
|
||||||
|
|
||||||
@@ -126,7 +142,7 @@ STRIP_FROM_PATH =
|
|||||||
STRIP_FROM_INC_PATH =
|
STRIP_FROM_INC_PATH =
|
||||||
|
|
||||||
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
|
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
|
||||||
# (but less readable) file names. This can be useful is your file systems
|
# (but less readable) file names. This can be useful if your file system
|
||||||
# doesn't support long names like on DOS, Mac, or CD-ROM.
|
# doesn't support long names like on DOS, Mac, or CD-ROM.
|
||||||
|
|
||||||
SHORT_NAMES = NO
|
SHORT_NAMES = NO
|
||||||
@@ -181,6 +197,13 @@ TAB_SIZE = 9
|
|||||||
|
|
||||||
ALIASES =
|
ALIASES =
|
||||||
|
|
||||||
|
# This tag can be used to specify a number of word-keyword mappings (TCL only).
|
||||||
|
# A mapping has the form "name=value". For example adding
|
||||||
|
# "class=itcl::class" will allow you to use the command class in the
|
||||||
|
# itcl::class meaning.
|
||||||
|
|
||||||
|
TCL_SUBST =
|
||||||
|
|
||||||
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
|
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
|
||||||
# sources only. Doxygen will then generate output that is more tailored for C.
|
# sources only. Doxygen will then generate output that is more tailored for C.
|
||||||
# For instance, some of the names that are used will be different. The list
|
# For instance, some of the names that are used will be different. The list
|
||||||
@@ -207,23 +230,40 @@ OPTIMIZE_FOR_FORTRAN = NO
|
|||||||
|
|
||||||
OPTIMIZE_OUTPUT_VHDL = NO
|
OPTIMIZE_OUTPUT_VHDL = NO
|
||||||
|
|
||||||
# Doxygen selects the parser to use depending on the extension of the files it parses.
|
# Doxygen selects the parser to use depending on the extension of the files it
|
||||||
# With this tag you can assign which parser to use for a given extension.
|
# parses. With this tag you can assign which parser to use for a given
|
||||||
# Doxygen has a built-in mapping, but you can override or extend it using this tag.
|
# extension. Doxygen has a built-in mapping, but you can override or extend it
|
||||||
# The format is ext=language, where ext is a file extension, and language is one of
|
# using this tag. The format is ext=language, where ext is a file extension,
|
||||||
# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
|
# and language is one of the parsers supported by doxygen: IDL, Java,
|
||||||
# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
|
# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
|
||||||
# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
|
# C++. For instance to make doxygen treat .inc files as Fortran files (default
|
||||||
# use: inc=Fortran f=C. Note that for custom extensions you also need to set
|
# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
|
||||||
# FILE_PATTERNS otherwise the files are not read by doxygen.
|
# that for custom extensions you also need to set FILE_PATTERNS otherwise the
|
||||||
|
# files are not read by doxygen.
|
||||||
|
|
||||||
EXTENSION_MAPPING =
|
EXTENSION_MAPPING =
|
||||||
|
|
||||||
|
# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
|
||||||
|
# comments according to the Markdown format, which allows for more readable
|
||||||
|
# documentation. See http://daringfireball.net/projects/markdown/ for details.
|
||||||
|
# The output of markdown processing is further processed by doxygen, so you
|
||||||
|
# can mix doxygen, HTML, and XML commands with Markdown formatting.
|
||||||
|
# Disable only in case of backward compatibilities issues.
|
||||||
|
|
||||||
|
MARKDOWN_SUPPORT = YES
|
||||||
|
|
||||||
|
# When enabled doxygen tries to link words that correspond to documented classes,
|
||||||
|
# or namespaces to their corresponding documentation. Such a link can be
|
||||||
|
# prevented in individual cases by by putting a % sign in front of the word or
|
||||||
|
# globally by setting AUTOLINK_SUPPORT to NO.
|
||||||
|
|
||||||
|
AUTOLINK_SUPPORT = YES
|
||||||
|
|
||||||
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
|
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
|
||||||
# to include (a tag file for) the STL sources as input, then you should
|
# to include (a tag file for) the STL sources as input, then you should
|
||||||
# set this tag to YES in order to let doxygen match functions declarations and
|
# set this tag to YES in order to let doxygen match functions declarations and
|
||||||
# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
|
# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
|
||||||
# func(std::string) {}). This also make the inheritance and collaboration
|
# func(std::string) {}). This also makes the inheritance and collaboration
|
||||||
# diagrams that involve STL classes more complete and accurate.
|
# diagrams that involve STL classes more complete and accurate.
|
||||||
|
|
||||||
BUILTIN_STL_SUPPORT = YES
|
BUILTIN_STL_SUPPORT = YES
|
||||||
@@ -239,10 +279,10 @@ CPP_CLI_SUPPORT = NO
|
|||||||
|
|
||||||
SIP_SUPPORT = NO
|
SIP_SUPPORT = NO
|
||||||
|
|
||||||
# For Microsoft's IDL there are propget and propput attributes to indicate getter
|
# For Microsoft's IDL there are propget and propput attributes to indicate
|
||||||
# and setter methods for a property. Setting this option to YES (the default)
|
# getter and setter methods for a property. Setting this option to YES (the
|
||||||
# will make doxygen to replace the get and set methods by a property in the
|
# default) will make doxygen replace the get and set methods by a property in
|
||||||
# documentation. This will only work if the methods are indeed getting or
|
# the documentation. This will only work if the methods are indeed getting or
|
||||||
# setting a simple type. If this is not the case, or you want to show the
|
# setting a simple type. If this is not the case, or you want to show the
|
||||||
# methods anyway, you should set this option to NO.
|
# methods anyway, you should set this option to NO.
|
||||||
|
|
||||||
@@ -263,6 +303,22 @@ DISTRIBUTE_GROUP_DOC = NO
|
|||||||
|
|
||||||
SUBGROUPING = YES
|
SUBGROUPING = YES
|
||||||
|
|
||||||
|
# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
|
||||||
|
# unions are shown inside the group in which they are included (e.g. using
|
||||||
|
# @ingroup) instead of on a separate page (for HTML and Man pages) or
|
||||||
|
# section (for LaTeX and RTF).
|
||||||
|
|
||||||
|
INLINE_GROUPED_CLASSES = NO
|
||||||
|
|
||||||
|
# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
|
||||||
|
# unions with only public data fields will be shown inline in the documentation
|
||||||
|
# of the scope in which they are defined (i.e. file, namespace, or group
|
||||||
|
# documentation), provided this scope is documented. If set to NO (the default),
|
||||||
|
# structs, classes, and unions are shown on a separate page (for HTML and Man
|
||||||
|
# pages) or section (for LaTeX and RTF).
|
||||||
|
|
||||||
|
INLINE_SIMPLE_STRUCTS = NO
|
||||||
|
|
||||||
# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
|
# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
|
||||||
# is documented as struct, union, or enum with the name of the typedef. So
|
# is documented as struct, union, or enum with the name of the typedef. So
|
||||||
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
|
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
|
||||||
@@ -279,16 +335,27 @@ TYPEDEF_HIDES_STRUCT = NO
|
|||||||
# For small to medium size projects (<1000 input files) the default value is
|
# For small to medium size projects (<1000 input files) the default value is
|
||||||
# probably good enough. For larger projects a too small cache size can cause
|
# probably good enough. For larger projects a too small cache size can cause
|
||||||
# doxygen to be busy swapping symbols to and from disk most of the time
|
# doxygen to be busy swapping symbols to and from disk most of the time
|
||||||
# causing a significant performance penality.
|
# causing a significant performance penalty.
|
||||||
# If the system has enough physical memory increasing the cache will improve the
|
# If the system has enough physical memory increasing the cache will improve the
|
||||||
# performance by keeping more symbols in memory. Note that the value works on
|
# performance by keeping more symbols in memory. Note that the value works on
|
||||||
# a logarithmic scale so increasing the size by one will rougly double the
|
# a logarithmic scale so increasing the size by one will roughly double the
|
||||||
# memory usage. The cache size is given by this formula:
|
# memory usage. The cache size is given by this formula:
|
||||||
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
|
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
|
||||||
# corresponding to a cache size of 2^16 = 65536 symbols
|
# corresponding to a cache size of 2^16 = 65536 symbols.
|
||||||
|
|
||||||
SYMBOL_CACHE_SIZE = 0
|
SYMBOL_CACHE_SIZE = 0
|
||||||
|
|
||||||
|
# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
|
||||||
|
# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
|
||||||
|
# their name and scope. Since this can be an expensive process and often the
|
||||||
|
# same symbol appear multiple times in the code, doxygen keeps a cache of
|
||||||
|
# pre-resolved symbols. If the cache is too small doxygen will become slower.
|
||||||
|
# If the cache is too large, memory is wasted. The cache size is given by this
|
||||||
|
# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
|
||||||
|
# corresponding to a cache size of 2^16 = 65536 symbols.
|
||||||
|
|
||||||
|
LOOKUP_CACHE_SIZE = 0
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Build related configuration options
|
# Build related configuration options
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
@@ -305,6 +372,11 @@ EXTRACT_ALL = NO
|
|||||||
|
|
||||||
EXTRACT_PRIVATE = NO
|
EXTRACT_PRIVATE = NO
|
||||||
|
|
||||||
|
# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
|
||||||
|
# scope will be included in the documentation.
|
||||||
|
|
||||||
|
EXTRACT_PACKAGE = NO
|
||||||
|
|
||||||
# If the EXTRACT_STATIC tag is set to YES all static members of a file
|
# If the EXTRACT_STATIC tag is set to YES all static members of a file
|
||||||
# will be included in the documentation.
|
# will be included in the documentation.
|
||||||
|
|
||||||
@@ -327,7 +399,7 @@ EXTRACT_LOCAL_METHODS = NO
|
|||||||
# extracted and appear in the documentation as a namespace called
|
# extracted and appear in the documentation as a namespace called
|
||||||
# 'anonymous_namespace{file}', where file will be replaced with the base
|
# 'anonymous_namespace{file}', where file will be replaced with the base
|
||||||
# name of the file that contains the anonymous namespace. By default
|
# name of the file that contains the anonymous namespace. By default
|
||||||
# anonymous namespace are hidden.
|
# anonymous namespaces are hidden.
|
||||||
|
|
||||||
EXTRACT_ANON_NSPACES = NO
|
EXTRACT_ANON_NSPACES = NO
|
||||||
|
|
||||||
@@ -412,12 +484,12 @@ SORT_MEMBER_DOCS = NO
|
|||||||
|
|
||||||
SORT_BRIEF_DOCS = NO
|
SORT_BRIEF_DOCS = NO
|
||||||
|
|
||||||
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
|
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
|
||||||
# will sort the (brief and detailed) documentation of class members so that
|
# will sort the (brief and detailed) documentation of class members so that
|
||||||
# constructors and destructors are listed first. If set to NO (the default)
|
# constructors and destructors are listed first. If set to NO (the default)
|
||||||
# the constructors will appear in the respective orders defined by
|
# the constructors will appear in the respective orders defined by
|
||||||
# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
|
# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
|
||||||
# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
|
# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
|
||||||
# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
|
# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
|
||||||
|
|
||||||
SORT_MEMBERS_CTORS_1ST = NO
|
SORT_MEMBERS_CTORS_1ST = NO
|
||||||
@@ -438,6 +510,15 @@ SORT_GROUP_NAMES = NO
|
|||||||
|
|
||||||
SORT_BY_SCOPE_NAME = NO
|
SORT_BY_SCOPE_NAME = NO
|
||||||
|
|
||||||
|
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
|
||||||
|
# do proper type resolution of all parameters of a function it will reject a
|
||||||
|
# match between the prototype and the implementation of a member function even
|
||||||
|
# if there is only one candidate or it is obvious which candidate to choose
|
||||||
|
# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
|
||||||
|
# will still accept a match between prototype and implementation in such cases.
|
||||||
|
|
||||||
|
STRICT_PROTO_MATCHING = NO
|
||||||
|
|
||||||
# The GENERATE_TODOLIST tag can be used to enable (YES) or
|
# The GENERATE_TODOLIST tag can be used to enable (YES) or
|
||||||
# disable (NO) the todo list. This list is created by putting \todo
|
# disable (NO) the todo list. This list is created by putting \todo
|
||||||
# commands in the documentation.
|
# commands in the documentation.
|
||||||
@@ -463,15 +544,16 @@ GENERATE_BUGLIST = YES
|
|||||||
GENERATE_DEPRECATEDLIST= YES
|
GENERATE_DEPRECATEDLIST= YES
|
||||||
|
|
||||||
# The ENABLED_SECTIONS tag can be used to enable conditional
|
# The ENABLED_SECTIONS tag can be used to enable conditional
|
||||||
# documentation sections, marked by \if sectionname ... \endif.
|
# documentation sections, marked by \if section-label ... \endif
|
||||||
|
# and \cond section-label ... \endcond blocks.
|
||||||
|
|
||||||
ENABLED_SECTIONS =
|
ENABLED_SECTIONS =
|
||||||
|
|
||||||
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
|
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
|
||||||
# the initial value of a variable or define consists of for it to appear in
|
# the initial value of a variable or macro consists of for it to appear in
|
||||||
# the documentation. If the initializer consists of more lines than specified
|
# the documentation. If the initializer consists of more lines than specified
|
||||||
# here it will be hidden. Use a value of 0 to hide initializers completely.
|
# here it will be hidden. Use a value of 0 to hide initializers completely.
|
||||||
# The appearance of the initializer of individual variables and defines in the
|
# The appearance of the initializer of individual variables and macros in the
|
||||||
# documentation can be controlled using \showinitializer or \hideinitializer
|
# documentation can be controlled using \showinitializer or \hideinitializer
|
||||||
# command in the documentation regardless of this setting.
|
# command in the documentation regardless of this setting.
|
||||||
|
|
||||||
@@ -483,12 +565,6 @@ MAX_INITIALIZER_LINES = 30
|
|||||||
|
|
||||||
SHOW_USED_FILES = YES
|
SHOW_USED_FILES = YES
|
||||||
|
|
||||||
# If the sources in your project are distributed over multiple directories
|
|
||||||
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
|
|
||||||
# in the documentation. The default is NO.
|
|
||||||
|
|
||||||
SHOW_DIRECTORIES = YES
|
|
||||||
|
|
||||||
# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
|
# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
|
||||||
# This will remove the Files entry from the Quick Index and from the
|
# This will remove the Files entry from the Quick Index and from the
|
||||||
# Folder Tree View (if specified). The default is YES.
|
# Folder Tree View (if specified). The default is YES.
|
||||||
@@ -511,15 +587,26 @@ SHOW_NAMESPACES = YES
|
|||||||
|
|
||||||
FILE_VERSION_FILTER =
|
FILE_VERSION_FILTER =
|
||||||
|
|
||||||
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
|
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
|
||||||
# doxygen. The layout file controls the global structure of the generated output files
|
# by doxygen. The layout file controls the global structure of the generated
|
||||||
# in an output format independent way. The create the layout file that represents
|
# output files in an output format independent way. To create the layout file
|
||||||
# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
|
# that represents doxygen's defaults, run doxygen with the -l option.
|
||||||
# file name after the option, if omitted DoxygenLayout.xml will be used as the name
|
# You can optionally specify a file name after the option, if omitted
|
||||||
# of the layout file.
|
# DoxygenLayout.xml will be used as the name of the layout file.
|
||||||
|
|
||||||
LAYOUT_FILE =
|
LAYOUT_FILE =
|
||||||
|
|
||||||
|
# The CITE_BIB_FILES tag can be used to specify one or more bib files
|
||||||
|
# containing the references data. This must be a list of .bib files. The
|
||||||
|
# .bib extension is automatically appended if omitted. Using this command
|
||||||
|
# requires the bibtex tool to be installed. See also
|
||||||
|
# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
|
||||||
|
# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
|
||||||
|
# feature you need bibtex and perl available in the search path. Do not use
|
||||||
|
# file names with spaces, bibtex cannot handle them.
|
||||||
|
|
||||||
|
CITE_BIB_FILES =
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# configuration options related to warning and progress messages
|
# configuration options related to warning and progress messages
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
@@ -548,7 +635,7 @@ WARN_IF_UNDOCUMENTED = YES
|
|||||||
|
|
||||||
WARN_IF_DOC_ERROR = YES
|
WARN_IF_DOC_ERROR = YES
|
||||||
|
|
||||||
# This WARN_NO_PARAMDOC option can be abled to get warnings for
|
# The WARN_NO_PARAMDOC option can be enabled to get warnings for
|
||||||
# functions that are documented, but have no documentation for their parameters
|
# functions that are documented, but have no documentation for their parameters
|
||||||
# or return value. If set to NO (the default) doxygen will only warn about
|
# or return value. If set to NO (the default) doxygen will only warn about
|
||||||
# wrong or incomplete parameter documentation, but not about the absence of
|
# wrong or incomplete parameter documentation, but not about the absence of
|
||||||
@@ -595,8 +682,9 @@ INPUT_ENCODING = UTF-8
|
|||||||
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
|
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
|
||||||
# and *.h) to filter out the source-files in the directories. If left
|
# and *.h) to filter out the source-files in the directories. If left
|
||||||
# blank the following patterns are tested:
|
# blank the following patterns are tested:
|
||||||
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
|
# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
|
||||||
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
|
# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
|
||||||
|
# *.f90 *.f *.for *.vhd *.vhdl
|
||||||
|
|
||||||
FILE_PATTERNS = *.txt \
|
FILE_PATTERNS = *.txt \
|
||||||
*.msg \
|
*.msg \
|
||||||
@@ -608,14 +696,16 @@ FILE_PATTERNS = *.txt \
|
|||||||
|
|
||||||
RECURSIVE = NO
|
RECURSIVE = NO
|
||||||
|
|
||||||
# The EXCLUDE tag can be used to specify files and/or directories that should
|
# The EXCLUDE tag can be used to specify files and/or directories that should be
|
||||||
# excluded from the INPUT source files. This way you can easily exclude a
|
# excluded from the INPUT source files. This way you can easily exclude a
|
||||||
# subdirectory from a directory tree whose root is specified with the INPUT tag.
|
# subdirectory from a directory tree whose root is specified with the INPUT tag.
|
||||||
|
# Note that relative paths are relative to the directory from which doxygen is
|
||||||
|
# run.
|
||||||
|
|
||||||
EXCLUDE = ../../src/asio
|
EXCLUDE = ../../src/asio
|
||||||
|
|
||||||
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
|
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
||||||
# directories that are symbolic links (a Unix filesystem feature) are excluded
|
# directories that are symbolic links (a Unix file system feature) are excluded
|
||||||
# from the input.
|
# from the input.
|
||||||
|
|
||||||
EXCLUDE_SYMLINKS = NO
|
EXCLUDE_SYMLINKS = NO
|
||||||
@@ -676,8 +766,8 @@ INPUT_FILTER =
|
|||||||
# basis. Doxygen will compare the file name with each pattern and apply the
|
# basis. Doxygen will compare the file name with each pattern and apply the
|
||||||
# filter if there is a match. The filters are a list of the form:
|
# filter if there is a match. The filters are a list of the form:
|
||||||
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
|
# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
|
||||||
# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
|
# info on how filters are used. If FILTER_PATTERNS is empty or if
|
||||||
# is applied to all files.
|
# non of the patterns match the file name, INPUT_FILTER is applied.
|
||||||
|
|
||||||
FILTER_PATTERNS =
|
FILTER_PATTERNS =
|
||||||
|
|
||||||
@@ -687,6 +777,21 @@ FILTER_PATTERNS =
|
|||||||
|
|
||||||
FILTER_SOURCE_FILES = NO
|
FILTER_SOURCE_FILES = NO
|
||||||
|
|
||||||
|
# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
|
||||||
|
# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
|
||||||
|
# and it is also possible to disable source filtering for a specific pattern
|
||||||
|
# using *.ext= (so without naming a filter). This option only has effect when
|
||||||
|
# FILTER_SOURCE_FILES is enabled.
|
||||||
|
|
||||||
|
FILTER_SOURCE_PATTERNS =
|
||||||
|
|
||||||
|
# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that
|
||||||
|
# is part of the input, its contents will be placed on the main page (index.html).
|
||||||
|
# This can be useful if you have a project on for instance GitHub and want reuse
|
||||||
|
# the introduction page also for the doxygen output.
|
||||||
|
|
||||||
|
USE_MDFILE_AS_MAINPAGE =
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# configuration options related to source browsing
|
# configuration options related to source browsing
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
@@ -705,7 +810,7 @@ INLINE_SOURCES = YES
|
|||||||
|
|
||||||
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
|
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
|
||||||
# doxygen to hide any special comment blocks from generated source code
|
# doxygen to hide any special comment blocks from generated source code
|
||||||
# fragments. Normal C and C++ comments will always remain visible.
|
# fragments. Normal C, C++ and Fortran comments will always remain visible.
|
||||||
|
|
||||||
STRIP_CODE_COMMENTS = YES
|
STRIP_CODE_COMMENTS = YES
|
||||||
|
|
||||||
@@ -788,7 +893,14 @@ HTML_FILE_EXTENSION = .html
|
|||||||
|
|
||||||
# The HTML_HEADER tag can be used to specify a personal HTML header for
|
# The HTML_HEADER tag can be used to specify a personal HTML header for
|
||||||
# each generated HTML page. If it is left blank doxygen will generate a
|
# each generated HTML page. If it is left blank doxygen will generate a
|
||||||
# standard header.
|
# standard header. Note that when using a custom header you are responsible
|
||||||
|
# for the proper inclusion of any scripts and style sheets that doxygen
|
||||||
|
# needs, which is dependent on the configuration options used.
|
||||||
|
# It is advised to generate a default header using "doxygen -w html
|
||||||
|
# header.html footer.html stylesheet.css YourConfigFile" and then modify
|
||||||
|
# that header. Note that the header is subject to change so you typically
|
||||||
|
# have to redo this when upgrading to a newer version of doxygen or when
|
||||||
|
# changing the value of configuration settings such as GENERATE_TREEVIEW!
|
||||||
|
|
||||||
HTML_HEADER = header.html
|
HTML_HEADER = header.html
|
||||||
|
|
||||||
@@ -800,33 +912,80 @@ HTML_FOOTER = footer.html
|
|||||||
|
|
||||||
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
|
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
|
||||||
# style sheet that is used by each HTML page. It can be used to
|
# style sheet that is used by each HTML page. It can be used to
|
||||||
# fine-tune the look of the HTML output. If the tag is left blank doxygen
|
# fine-tune the look of the HTML output. If left blank doxygen will
|
||||||
# will generate a default style sheet. Note that doxygen will try to copy
|
# generate a default style sheet. Note that it is recommended to use
|
||||||
# the style sheet file to the HTML output directory, so don't put your own
|
# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
|
||||||
# stylesheet in the HTML output directory as well, or it will be erased!
|
# tag will in the future become obsolete.
|
||||||
|
|
||||||
HTML_STYLESHEET =
|
HTML_STYLESHEET =
|
||||||
|
|
||||||
|
# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
|
||||||
|
# user-defined cascading style sheet that is included after the standard
|
||||||
|
# style sheets created by doxygen. Using this option one can overrule
|
||||||
|
# certain style aspects. This is preferred over using HTML_STYLESHEET
|
||||||
|
# since it does not replace the standard style sheet and is therefor more
|
||||||
|
# robust against future updates. Doxygen will copy the style sheet file to
|
||||||
|
# the output directory.
|
||||||
|
|
||||||
|
HTML_EXTRA_STYLESHEET =
|
||||||
|
|
||||||
|
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
||||||
|
# other source files which should be copied to the HTML output directory. Note
|
||||||
|
# that these files will be copied to the base HTML output directory. Use the
|
||||||
|
# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
|
||||||
|
# files. In the HTML_STYLESHEET file, use the file name only. Also note that
|
||||||
|
# the files will be copied as-is; there are no commands or markers available.
|
||||||
|
|
||||||
|
HTML_EXTRA_FILES =
|
||||||
|
|
||||||
|
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
|
||||||
|
# Doxygen will adjust the colors in the style sheet and background images
|
||||||
|
# according to this color. Hue is specified as an angle on a colorwheel,
|
||||||
|
# see http://en.wikipedia.org/wiki/Hue for more information.
|
||||||
|
# For instance the value 0 represents red, 60 is yellow, 120 is green,
|
||||||
|
# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
|
||||||
|
# The allowed range is 0 to 359.
|
||||||
|
|
||||||
|
HTML_COLORSTYLE_HUE = 220
|
||||||
|
|
||||||
|
# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
|
||||||
|
# the colors in the HTML output. For a value of 0 the output will use
|
||||||
|
# grayscales only. A value of 255 will produce the most vivid colors.
|
||||||
|
|
||||||
|
HTML_COLORSTYLE_SAT = 100
|
||||||
|
|
||||||
|
# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
|
||||||
|
# the luminance component of the colors in the HTML output. Values below
|
||||||
|
# 100 gradually make the output lighter, whereas values above 100 make
|
||||||
|
# the output darker. The value divided by 100 is the actual gamma applied,
|
||||||
|
# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
|
||||||
|
# and 100 does not change the gamma.
|
||||||
|
|
||||||
|
HTML_COLORSTYLE_GAMMA = 80
|
||||||
|
|
||||||
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
|
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
|
||||||
# page will contain the date and time when the page was generated. Setting
|
# page will contain the date and time when the page was generated. Setting
|
||||||
# this to NO can help when comparing the output of multiple runs.
|
# this to NO can help when comparing the output of multiple runs.
|
||||||
|
|
||||||
HTML_TIMESTAMP = NO
|
HTML_TIMESTAMP = NO
|
||||||
|
|
||||||
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
|
|
||||||
# files or namespaces will be aligned in HTML using tables. If set to
|
|
||||||
# NO a bullet list will be used.
|
|
||||||
|
|
||||||
HTML_ALIGN_MEMBERS = YES
|
|
||||||
|
|
||||||
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
|
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
|
||||||
# documentation will contain sections that can be hidden and shown after the
|
# documentation will contain sections that can be hidden and shown after the
|
||||||
# page has loaded. For this to work a browser that supports
|
# page has loaded.
|
||||||
# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
|
|
||||||
# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
|
|
||||||
|
|
||||||
HTML_DYNAMIC_SECTIONS = NO
|
HTML_DYNAMIC_SECTIONS = NO
|
||||||
|
|
||||||
|
# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
|
||||||
|
# entries shown in the various tree structured indices initially; the user
|
||||||
|
# can expand and collapse entries dynamically later on. Doxygen will expand
|
||||||
|
# the tree to such a level that at most the specified number of entries are
|
||||||
|
# visible (unless a fully collapsed tree already exceeds this amount).
|
||||||
|
# So setting the number of entries 1 will produce a full collapsed tree by
|
||||||
|
# default. 0 is a special value representing an infinite number of entries
|
||||||
|
# and will result in a full expanded tree by default.
|
||||||
|
|
||||||
|
HTML_INDEX_NUM_ENTRIES = 100
|
||||||
|
|
||||||
# If the GENERATE_DOCSET tag is set to YES, additional index files
|
# If the GENERATE_DOCSET tag is set to YES, additional index files
|
||||||
# will be generated that can be used as input for Apple's Xcode 3
|
# will be generated that can be used as input for Apple's Xcode 3
|
||||||
# integrated development environment, introduced with OSX 10.5 (Leopard).
|
# integrated development environment, introduced with OSX 10.5 (Leopard).
|
||||||
@@ -835,7 +994,8 @@ HTML_DYNAMIC_SECTIONS = NO
|
|||||||
# directory and running "make install" will install the docset in
|
# directory and running "make install" will install the docset in
|
||||||
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
|
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
|
||||||
# it at startup.
|
# it at startup.
|
||||||
# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
|
# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
|
||||||
|
# for more information.
|
||||||
|
|
||||||
GENERATE_DOCSET = NO
|
GENERATE_DOCSET = NO
|
||||||
|
|
||||||
@@ -853,6 +1013,16 @@ DOCSET_FEEDNAME = "Doxygen generated docs"
|
|||||||
|
|
||||||
DOCSET_BUNDLE_ID = org.doxygen.Project
|
DOCSET_BUNDLE_ID = org.doxygen.Project
|
||||||
|
|
||||||
|
# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
|
||||||
|
# identify the documentation publisher. This should be a reverse domain-name
|
||||||
|
# style string, e.g. com.mycompany.MyDocSet.documentation.
|
||||||
|
|
||||||
|
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
|
||||||
|
|
||||||
|
# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
|
||||||
|
|
||||||
|
DOCSET_PUBLISHER_NAME = Publisher
|
||||||
|
|
||||||
# If the GENERATE_HTMLHELP tag is set to YES, additional index files
|
# If the GENERATE_HTMLHELP tag is set to YES, additional index files
|
||||||
# will be generated that can be used as input for tools like the
|
# will be generated that can be used as input for tools like the
|
||||||
# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
|
# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
|
||||||
@@ -897,10 +1067,10 @@ BINARY_TOC = NO
|
|||||||
|
|
||||||
TOC_EXPAND = NO
|
TOC_EXPAND = NO
|
||||||
|
|
||||||
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
|
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
|
||||||
# are set, an additional index file will be generated that can be used as input for
|
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
|
||||||
# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
|
# that can be used as input for Qt's qhelpgenerator to generate a
|
||||||
# HTML documentation.
|
# Qt Compressed Help (.qch) of the generated HTML documentation.
|
||||||
|
|
||||||
GENERATE_QHP = NO
|
GENERATE_QHP = NO
|
||||||
|
|
||||||
@@ -922,20 +1092,24 @@ QHP_NAMESPACE = org.doxygen.Project
|
|||||||
|
|
||||||
QHP_VIRTUAL_FOLDER = doc
|
QHP_VIRTUAL_FOLDER = doc
|
||||||
|
|
||||||
# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
|
# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
|
||||||
# For more information please see
|
# add. For more information please see
|
||||||
# http://doc.trolltech.com/qthelpproject.html#custom-filters
|
# http://doc.trolltech.com/qthelpproject.html#custom-filters
|
||||||
|
|
||||||
QHP_CUST_FILTER_NAME =
|
QHP_CUST_FILTER_NAME =
|
||||||
|
|
||||||
# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
|
# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
|
||||||
# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
|
# custom filter to add. For more information please see
|
||||||
|
# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
|
||||||
|
# Qt Help Project / Custom Filters</a>.
|
||||||
|
|
||||||
QHP_CUST_FILTER_ATTRS =
|
QHP_CUST_FILTER_ATTRS =
|
||||||
|
|
||||||
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
|
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
|
||||||
|
# project's
|
||||||
# filter section matches.
|
# filter section matches.
|
||||||
# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
|
# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
|
||||||
|
# Qt Help Project / Filter Attributes</a>.
|
||||||
|
|
||||||
QHP_SECT_FILTER_ATTRS =
|
QHP_SECT_FILTER_ATTRS =
|
||||||
|
|
||||||
@@ -947,12 +1121,12 @@ QHP_SECT_FILTER_ATTRS =
|
|||||||
QHG_LOCATION =
|
QHG_LOCATION =
|
||||||
|
|
||||||
# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
|
# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
|
||||||
# will be generated, which together with the HTML files, form an Eclipse help
|
# will be generated, which together with the HTML files, form an Eclipse help
|
||||||
# plugin. To install this plugin and make it available under the help contents
|
# plugin. To install this plugin and make it available under the help contents
|
||||||
# menu in Eclipse, the contents of the directory containing the HTML and XML
|
# menu in Eclipse, the contents of the directory containing the HTML and XML
|
||||||
# files needs to be copied into the plugins directory of eclipse. The name of
|
# files needs to be copied into the plugins directory of eclipse. The name of
|
||||||
# the directory within the plugins directory should be the same as
|
# the directory within the plugins directory should be the same as
|
||||||
# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
|
# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
|
||||||
# the help appears.
|
# the help appears.
|
||||||
|
|
||||||
GENERATE_ECLIPSEHELP = NO
|
GENERATE_ECLIPSEHELP = NO
|
||||||
@@ -963,31 +1137,32 @@ GENERATE_ECLIPSEHELP = NO
|
|||||||
|
|
||||||
ECLIPSE_DOC_ID = org.doxygen.Project
|
ECLIPSE_DOC_ID = org.doxygen.Project
|
||||||
|
|
||||||
# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
|
# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
|
||||||
# top of each HTML page. The value NO (the default) enables the index and
|
# at top of each HTML page. The value NO (the default) enables the index and
|
||||||
# the value YES disables it.
|
# the value YES disables it. Since the tabs have the same information as the
|
||||||
|
# navigation tree you can set this option to NO if you already set
|
||||||
|
# GENERATE_TREEVIEW to YES.
|
||||||
|
|
||||||
DISABLE_INDEX = YES
|
DISABLE_INDEX = YES
|
||||||
|
|
||||||
# This tag can be used to set the number of enum values (range [1..20])
|
|
||||||
# that doxygen will group on one line in the generated HTML documentation.
|
|
||||||
|
|
||||||
ENUM_VALUES_PER_LINE = 4
|
|
||||||
|
|
||||||
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
|
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
|
||||||
# structure should be generated to display hierarchical information.
|
# structure should be generated to display hierarchical information.
|
||||||
# If the tag value is set to YES, a side panel will be generated
|
# If the tag value is set to YES, a side panel will be generated
|
||||||
# containing a tree-like index structure (just like the one that
|
# containing a tree-like index structure (just like the one that
|
||||||
# is generated for HTML Help). For this to work a browser that supports
|
# is generated for HTML Help). For this to work a browser that supports
|
||||||
# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
|
# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
|
||||||
# Windows users are probably better off using the HTML help feature.
|
# Windows users are probably better off using the HTML help feature.
|
||||||
|
# Since the tree basically has the same information as the tab index you
|
||||||
|
# could consider to set DISABLE_INDEX to NO when enabling this option.
|
||||||
|
|
||||||
GENERATE_TREEVIEW = NO
|
GENERATE_TREEVIEW = NO
|
||||||
|
|
||||||
# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
|
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
|
||||||
# and Class Hierarchy pages using a tree view instead of an ordered list.
|
# (range [0,1..20]) that doxygen will group on one line in the generated HTML
|
||||||
|
# documentation. Note that a value of 0 will completely suppress the enum
|
||||||
|
# values from appearing in the overview section.
|
||||||
|
|
||||||
USE_INLINE_TREES = NO
|
ENUM_VALUES_PER_LINE = 4
|
||||||
|
|
||||||
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
|
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
|
||||||
# used to set the initial width (in pixels) of the frame in which the tree
|
# used to set the initial width (in pixels) of the frame in which the tree
|
||||||
@@ -995,6 +1170,11 @@ USE_INLINE_TREES = NO
|
|||||||
|
|
||||||
TREEVIEW_WIDTH = 250
|
TREEVIEW_WIDTH = 250
|
||||||
|
|
||||||
|
# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
|
||||||
|
# links to external symbols imported via tag files in a separate window.
|
||||||
|
|
||||||
|
EXT_LINKS_IN_WINDOW = NO
|
||||||
|
|
||||||
# Use this tag to change the font size of Latex formulas included
|
# Use this tag to change the font size of Latex formulas included
|
||||||
# as images in the HTML documentation. The default is 10. Note that
|
# as images in the HTML documentation. The default is 10. Note that
|
||||||
# when you change the font size after a successful doxygen run you need
|
# when you change the font size after a successful doxygen run you need
|
||||||
@@ -1003,26 +1183,106 @@ TREEVIEW_WIDTH = 250
|
|||||||
|
|
||||||
FORMULA_FONTSIZE = 10
|
FORMULA_FONTSIZE = 10
|
||||||
|
|
||||||
# When the SEARCHENGINE tag is enabled doxygen will generate a search box
|
# Use the FORMULA_TRANPARENT tag to determine whether or not the images
|
||||||
|
# generated for formulas are transparent PNGs. Transparent PNGs are
|
||||||
|
# not supported properly for IE 6.0, but are supported on all modern browsers.
|
||||||
|
# Note that when changing this option you need to delete any form_*.png files
|
||||||
|
# in the HTML output before the changes have effect.
|
||||||
|
|
||||||
|
FORMULA_TRANSPARENT = YES
|
||||||
|
|
||||||
|
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
|
||||||
|
# (see http://www.mathjax.org) which uses client side Javascript for the
|
||||||
|
# rendering instead of using prerendered bitmaps. Use this if you do not
|
||||||
|
# have LaTeX installed or if you want to formulas look prettier in the HTML
|
||||||
|
# output. When enabled you may also need to install MathJax separately and
|
||||||
|
# configure the path to it using the MATHJAX_RELPATH option.
|
||||||
|
|
||||||
|
USE_MATHJAX = NO
|
||||||
|
|
||||||
|
# When MathJax is enabled you can set the default output format to be used for
|
||||||
|
# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
|
||||||
|
# SVG. The default value is HTML-CSS, which is slower, but has the best
|
||||||
|
# compatibility.
|
||||||
|
|
||||||
|
MATHJAX_FORMAT = HTML-CSS
|
||||||
|
|
||||||
|
# When MathJax is enabled you need to specify the location relative to the
|
||||||
|
# HTML output directory using the MATHJAX_RELPATH option. The destination
|
||||||
|
# directory should contain the MathJax.js script. For instance, if the mathjax
|
||||||
|
# directory is located at the same level as the HTML output directory, then
|
||||||
|
# MATHJAX_RELPATH should be ../mathjax. The default value points to
|
||||||
|
# the MathJax Content Delivery Network so you can quickly see the result without
|
||||||
|
# installing MathJax. However, it is strongly recommended to install a local
|
||||||
|
# copy of MathJax from http://www.mathjax.org before deployment.
|
||||||
|
|
||||||
|
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
|
||||||
|
|
||||||
|
# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
|
||||||
|
# names that should be enabled during MathJax rendering.
|
||||||
|
|
||||||
|
MATHJAX_EXTENSIONS =
|
||||||
|
|
||||||
|
# When the SEARCHENGINE tag is enabled doxygen will generate a search box
|
||||||
# for the HTML output. The underlying search engine uses javascript
|
# for the HTML output. The underlying search engine uses javascript
|
||||||
# and DHTML and should work on any modern browser. Note that when using
|
# and DHTML and should work on any modern browser. Note that when using
|
||||||
# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
|
# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
|
||||||
# (GENERATE_DOCSET) there is already a search function so this one should
|
# (GENERATE_DOCSET) there is already a search function so this one should
|
||||||
# typically be disabled. For large projects the javascript based search engine
|
# typically be disabled. For large projects the javascript based search engine
|
||||||
# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
|
# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
|
||||||
|
|
||||||
SEARCHENGINE = NO
|
SEARCHENGINE = NO
|
||||||
|
|
||||||
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
|
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
|
||||||
# implemented using a PHP enabled web server instead of at the web client
|
# implemented using a web server instead of a web client using Javascript.
|
||||||
# using Javascript. Doxygen will generate the search PHP script and index
|
# There are two flavours of web server based search depending on the
|
||||||
# file to put on the web server. The advantage of the server
|
# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
|
||||||
# based approach is that it scales better to large projects and allows
|
# searching and an index file used by the script. When EXTERNAL_SEARCH is
|
||||||
# full text search. The disadvances is that it is more difficult to setup
|
# enabled the indexing and searching needs to be provided by external tools.
|
||||||
# and does not have live searching capabilities.
|
# See the manual for details.
|
||||||
|
|
||||||
SERVER_BASED_SEARCH = NO
|
SERVER_BASED_SEARCH = NO
|
||||||
|
|
||||||
|
# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP
|
||||||
|
# script for searching. Instead the search results are written to an XML file
|
||||||
|
# which needs to be processed by an external indexer. Doxygen will invoke an
|
||||||
|
# external search engine pointed to by the SEARCHENGINE_URL option to obtain
|
||||||
|
# the search results. Doxygen ships with an example indexer (doxyindexer) and
|
||||||
|
# search engine (doxysearch.cgi) which are based on the open source search engine
|
||||||
|
# library Xapian. See the manual for configuration details.
|
||||||
|
|
||||||
|
EXTERNAL_SEARCH = NO
|
||||||
|
|
||||||
|
# The SEARCHENGINE_URL should point to a search engine hosted by a web server
|
||||||
|
# which will returned the search results when EXTERNAL_SEARCH is enabled.
|
||||||
|
# Doxygen ships with an example search engine (doxysearch) which is based on
|
||||||
|
# the open source search engine library Xapian. See the manual for configuration
|
||||||
|
# details.
|
||||||
|
|
||||||
|
SEARCHENGINE_URL =
|
||||||
|
|
||||||
|
# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
|
||||||
|
# search data is written to a file for indexing by an external tool. With the
|
||||||
|
# SEARCHDATA_FILE tag the name of this file can be specified.
|
||||||
|
|
||||||
|
SEARCHDATA_FILE = searchdata.xml
|
||||||
|
|
||||||
|
# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the
|
||||||
|
# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
|
||||||
|
# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
|
||||||
|
# projects and redirect the results back to the right project.
|
||||||
|
|
||||||
|
EXTERNAL_SEARCH_ID =
|
||||||
|
|
||||||
|
# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
|
||||||
|
# projects other than the one defined by this configuration file, but that are
|
||||||
|
# all added to the same external search index. Each project needs to have a
|
||||||
|
# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
|
||||||
|
# of to a relative location where the documentation can be found.
|
||||||
|
# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
|
||||||
|
|
||||||
|
EXTRA_SEARCH_MAPPINGS =
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# configuration options related to the LaTeX output
|
# configuration options related to the LaTeX output
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
@@ -1059,7 +1319,7 @@ MAKEINDEX_CMD_NAME = makeindex
|
|||||||
COMPACT_LATEX = NO
|
COMPACT_LATEX = NO
|
||||||
|
|
||||||
# The PAPER_TYPE tag can be used to set the paper type that is used
|
# The PAPER_TYPE tag can be used to set the paper type that is used
|
||||||
# by the printer. Possible values are: a4, a4wide, letter, legal and
|
# by the printer. Possible values are: a4, letter, legal and
|
||||||
# executive. If left blank a4wide will be used.
|
# executive. If left blank a4wide will be used.
|
||||||
|
|
||||||
PAPER_TYPE = letter
|
PAPER_TYPE = letter
|
||||||
@@ -1076,6 +1336,13 @@ EXTRA_PACKAGES =
|
|||||||
|
|
||||||
LATEX_HEADER = header.tex
|
LATEX_HEADER = header.tex
|
||||||
|
|
||||||
|
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
|
||||||
|
# the generated latex document. The footer should contain everything after
|
||||||
|
# the last chapter. If it is left blank doxygen will generate a
|
||||||
|
# standard footer. Notice: only use this tag if you know what you are doing!
|
||||||
|
|
||||||
|
LATEX_FOOTER =
|
||||||
|
|
||||||
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
|
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
|
||||||
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
|
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
|
||||||
# contain links (just like the HTML output) instead of page references
|
# contain links (just like the HTML output) instead of page references
|
||||||
@@ -1102,13 +1369,19 @@ LATEX_BATCHMODE = NO
|
|||||||
|
|
||||||
LATEX_HIDE_INDICES = NO
|
LATEX_HIDE_INDICES = NO
|
||||||
|
|
||||||
# If LATEX_SOURCE_CODE is set to YES then doxygen will include
|
# If LATEX_SOURCE_CODE is set to YES then doxygen will include
|
||||||
# source code with syntax highlighting in the LaTeX output.
|
# source code with syntax highlighting in the LaTeX output.
|
||||||
# Note that which sources are shown also depends on other settings
|
# Note that which sources are shown also depends on other settings
|
||||||
# such as SOURCE_BROWSER.
|
# such as SOURCE_BROWSER.
|
||||||
|
|
||||||
LATEX_SOURCE_CODE = NO
|
LATEX_SOURCE_CODE = NO
|
||||||
|
|
||||||
|
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
|
||||||
|
# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
|
||||||
|
# http://en.wikipedia.org/wiki/BibTeX for more info.
|
||||||
|
|
||||||
|
LATEX_BIB_STYLE = plain
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# configuration options related to the RTF output
|
# configuration options related to the RTF output
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
@@ -1140,7 +1413,7 @@ COMPACT_RTF = NO
|
|||||||
|
|
||||||
RTF_HYPERLINKS = NO
|
RTF_HYPERLINKS = NO
|
||||||
|
|
||||||
# Load stylesheet definitions from file. Syntax is similar to doxygen's
|
# Load style sheet definitions from file. Syntax is similar to doxygen's
|
||||||
# config file, i.e. a series of assignments. You only have to provide
|
# config file, i.e. a series of assignments. You only have to provide
|
||||||
# replacements, missing definitions are set to their default value.
|
# replacements, missing definitions are set to their default value.
|
||||||
|
|
||||||
@@ -1283,7 +1556,7 @@ MACRO_EXPANSION = NO
|
|||||||
EXPAND_ONLY_PREDEF = NO
|
EXPAND_ONLY_PREDEF = NO
|
||||||
|
|
||||||
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
|
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
|
||||||
# in the INCLUDE_PATH (see below) will be search if a #include is found.
|
# pointed to by INCLUDE_PATH will be searched when a #include is found.
|
||||||
|
|
||||||
SEARCH_INCLUDES = YES
|
SEARCH_INCLUDES = YES
|
||||||
|
|
||||||
@@ -1313,15 +1586,15 @@ PREDEFINED =
|
|||||||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
|
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
|
||||||
# this tag can be used to specify a list of macro names that should be expanded.
|
# this tag can be used to specify a list of macro names that should be expanded.
|
||||||
# The macro definition that is found in the sources will be used.
|
# The macro definition that is found in the sources will be used.
|
||||||
# Use the PREDEFINED tag if you want to use a different macro definition.
|
# Use the PREDEFINED tag if you want to use a different macro definition that
|
||||||
|
# overrules the definition found in the source code.
|
||||||
|
|
||||||
EXPAND_AS_DEFINED =
|
EXPAND_AS_DEFINED =
|
||||||
|
|
||||||
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
|
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
|
||||||
# doxygen's preprocessor will remove all function-like macros that are alone
|
# doxygen's preprocessor will remove all references to function-like macros
|
||||||
# on a line, have an all uppercase name, and do not end with a semicolon. Such
|
# that are alone on a line, have an all uppercase name, and do not end with a
|
||||||
# function macros are typically used for boiler-plate code, and will confuse
|
# semicolon, because these will confuse the parser if not removed.
|
||||||
# the parser if not removed.
|
|
||||||
|
|
||||||
SKIP_FUNCTION_MACROS = YES
|
SKIP_FUNCTION_MACROS = YES
|
||||||
|
|
||||||
@@ -1329,20 +1602,16 @@ SKIP_FUNCTION_MACROS = YES
|
|||||||
# Configuration::additions related to external references
|
# Configuration::additions related to external references
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
# The TAGFILES option can be used to specify one or more tagfiles.
|
# The TAGFILES option can be used to specify one or more tagfiles. For each
|
||||||
# Optionally an initial location of the external documentation
|
# tag file the location of the external documentation should be added. The
|
||||||
# can be added for each tagfile. The format of a tag file without
|
# format of a tag file without this location is as follows:
|
||||||
# this location is as follows:
|
|
||||||
# TAGFILES = file1 file2 ...
|
# TAGFILES = file1 file2 ...
|
||||||
# Adding location for the tag files is done as follows:
|
# Adding location for the tag files is done as follows:
|
||||||
# TAGFILES = file1=loc1 "file2 = loc2" ...
|
# TAGFILES = file1=loc1 "file2 = loc2" ...
|
||||||
# where "loc1" and "loc2" can be relative or absolute paths or
|
# where "loc1" and "loc2" can be relative or absolute paths
|
||||||
# URLs. If a location is present for each tag, the installdox tool
|
# or URLs. Note that each tag file must have a unique name (where the name does
|
||||||
# does not have to be run to correct the links.
|
# NOT include the path). If a tag file is not located in the directory in which
|
||||||
# Note that each tag file must have a unique name
|
# doxygen is run, you must also specify the path to the tagfile here.
|
||||||
# (where the name does NOT include the path)
|
|
||||||
# If a tag file is not located in the directory in which doxygen
|
|
||||||
# is run, you must also specify the path to the tagfile here.
|
|
||||||
|
|
||||||
TAGFILES =
|
TAGFILES =
|
||||||
|
|
||||||
@@ -1375,9 +1644,8 @@ PERL_PATH = /usr/bin/perl
|
|||||||
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
|
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
|
||||||
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
|
# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
|
||||||
# or super classes. Setting the tag to NO turns the diagrams off. Note that
|
# or super classes. Setting the tag to NO turns the diagrams off. Note that
|
||||||
# this option is superseded by the HAVE_DOT option below. This is only a
|
# this option also works with HAVE_DOT disabled, but it is recommended to
|
||||||
# fallback. It is recommended to install and use dot, since it yields more
|
# install and use dot, since it yields more powerful graphs.
|
||||||
# powerful graphs.
|
|
||||||
|
|
||||||
CLASS_DIAGRAMS = YES
|
CLASS_DIAGRAMS = YES
|
||||||
|
|
||||||
@@ -1403,14 +1671,20 @@ HIDE_UNDOC_RELATIONS = YES
|
|||||||
|
|
||||||
HAVE_DOT = NO
|
HAVE_DOT = NO
|
||||||
|
|
||||||
# By default doxygen will write a font called FreeSans.ttf to the output
|
# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
|
||||||
# directory and reference it in all dot files that doxygen generates. This
|
# allowed to run in parallel. When set to 0 (the default) doxygen will
|
||||||
# font does not include all possible unicode characters however, so when you need
|
# base this on the number of processors available in the system. You can set it
|
||||||
# these (or just want a differently looking font) you can specify the font name
|
# explicitly to a value larger than 0 to get control over the balance
|
||||||
# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
|
# between CPU load and processing speed.
|
||||||
# which can be done by putting it in a standard location or by setting the
|
|
||||||
# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
|
DOT_NUM_THREADS = 0
|
||||||
# containing the font.
|
|
||||||
|
# By default doxygen will use the Helvetica font for all dot files that
|
||||||
|
# doxygen generates. When you want a differently looking font you can specify
|
||||||
|
# the font name using DOT_FONTNAME. You need to make sure dot is able to find
|
||||||
|
# the font, which can be done by putting it in a standard location or by setting
|
||||||
|
# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
|
||||||
|
# directory containing the font.
|
||||||
|
|
||||||
DOT_FONTNAME = FreeSans
|
DOT_FONTNAME = FreeSans
|
||||||
|
|
||||||
@@ -1419,17 +1693,16 @@ DOT_FONTNAME = FreeSans
|
|||||||
|
|
||||||
DOT_FONTSIZE = 10
|
DOT_FONTSIZE = 10
|
||||||
|
|
||||||
# By default doxygen will tell dot to use the output directory to look for the
|
# By default doxygen will tell dot to use the Helvetica font.
|
||||||
# FreeSans.ttf font (which doxygen will put there itself). If you specify a
|
# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
|
||||||
# different font using DOT_FONTNAME you can set the path where dot
|
# set the path where dot can find it.
|
||||||
# can find it using this tag.
|
|
||||||
|
|
||||||
DOT_FONTPATH =
|
DOT_FONTPATH =
|
||||||
|
|
||||||
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
|
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
|
||||||
# will generate a graph for each documented class showing the direct and
|
# will generate a graph for each documented class showing the direct and
|
||||||
# indirect inheritance relations. Setting this tag to YES will force the
|
# indirect inheritance relations. Setting this tag to YES will force the
|
||||||
# the CLASS_DIAGRAMS tag to NO.
|
# CLASS_DIAGRAMS tag to NO.
|
||||||
|
|
||||||
CLASS_GRAPH = YES
|
CLASS_GRAPH = YES
|
||||||
|
|
||||||
@@ -1451,6 +1724,15 @@ GROUP_GRAPHS = YES
|
|||||||
|
|
||||||
UML_LOOK = NO
|
UML_LOOK = NO
|
||||||
|
|
||||||
|
# If the UML_LOOK tag is enabled, the fields and methods are shown inside
|
||||||
|
# the class node. If there are many fields or methods and many nodes the
|
||||||
|
# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
|
||||||
|
# threshold limits the number of items for each type to make the size more
|
||||||
|
# managable. Set this to 0 for no limit. Note that the threshold may be
|
||||||
|
# exceeded by 50% before the limit is enforced.
|
||||||
|
|
||||||
|
UML_LIMIT_NUM_FIELDS = 10
|
||||||
|
|
||||||
# If set to YES, the inheritance and collaboration graphs will show the
|
# If set to YES, the inheritance and collaboration graphs will show the
|
||||||
# relations between templates and their instances.
|
# relations between templates and their instances.
|
||||||
|
|
||||||
@@ -1487,11 +1769,11 @@ CALL_GRAPH = NO
|
|||||||
CALLER_GRAPH = NO
|
CALLER_GRAPH = NO
|
||||||
|
|
||||||
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
|
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
|
||||||
# will graphical hierarchy of all classes instead of a textual one.
|
# will generate a graphical hierarchy of all classes instead of a textual one.
|
||||||
|
|
||||||
GRAPHICAL_HIERARCHY = YES
|
GRAPHICAL_HIERARCHY = YES
|
||||||
|
|
||||||
# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
|
# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
|
||||||
# then doxygen will show the dependencies a directory has on other directories
|
# then doxygen will show the dependencies a directory has on other directories
|
||||||
# in a graphical way. The dependency relations are determined by the #include
|
# in a graphical way. The dependency relations are determined by the #include
|
||||||
# relations between the files in the directories.
|
# relations between the files in the directories.
|
||||||
@@ -1499,11 +1781,22 @@ GRAPHICAL_HIERARCHY = YES
|
|||||||
DIRECTORY_GRAPH = YES
|
DIRECTORY_GRAPH = YES
|
||||||
|
|
||||||
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
|
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
|
||||||
# generated by dot. Possible values are png, jpg, or gif
|
# generated by dot. Possible values are svg, png, jpg, or gif.
|
||||||
# If left blank png will be used.
|
# If left blank png will be used. If you choose svg you need to set
|
||||||
|
# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
|
||||||
|
# visible in IE 9+ (other browsers do not have this requirement).
|
||||||
|
|
||||||
DOT_IMAGE_FORMAT = png
|
DOT_IMAGE_FORMAT = png
|
||||||
|
|
||||||
|
# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
|
||||||
|
# enable generation of interactive SVG images that allow zooming and panning.
|
||||||
|
# Note that this requires a modern browser other than Internet Explorer.
|
||||||
|
# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
|
||||||
|
# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
|
||||||
|
# visible. Older versions of IE do not have SVG support.
|
||||||
|
|
||||||
|
INTERACTIVE_SVG = NO
|
||||||
|
|
||||||
# The tag DOT_PATH can be used to specify the path where the dot tool can be
|
# The tag DOT_PATH can be used to specify the path where the dot tool can be
|
||||||
# found. If left blank, it is assumed the dot tool can be found in the path.
|
# found. If left blank, it is assumed the dot tool can be found in the path.
|
||||||
|
|
||||||
@@ -1515,6 +1808,12 @@ DOT_PATH = /sw/bin
|
|||||||
|
|
||||||
DOTFILE_DIRS =
|
DOTFILE_DIRS =
|
||||||
|
|
||||||
|
# The MSCFILE_DIRS tag can be used to specify one or more directories that
|
||||||
|
# contain msc files that are included in the documentation (see the
|
||||||
|
# \mscfile command).
|
||||||
|
|
||||||
|
MSCFILE_DIRS =
|
||||||
|
|
||||||
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
|
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
|
||||||
# nodes that will be shown in the graph. If the number of nodes in a graph
|
# nodes that will be shown in the graph. If the number of nodes in a graph
|
||||||
# becomes larger than this value, doxygen will truncate the graph, which is
|
# becomes larger than this value, doxygen will truncate the graph, which is
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
The Synthesis ToolKit can be used in a variety of ways, depending on your particular needs. Some people choose the classes they need for a particular project and copy those to their working directory. Others create <TT>Makefiles</TT> that compile project-specific class objects from common <TT>src</TT> and <TT>include</TT> directories. And still others like to compile and link to a common library of object files. STK was not designed with one particular style of use in mind.
|
The Synthesis ToolKit can be used in a variety of ways, depending on your particular needs. Some people choose the classes they need for a particular project and copy those to their working directory. Others create <TT>Makefiles</TT> that compile project-specific class objects from common <TT>src</TT> and <TT>include</TT> directories. And still others like to compile and link to a common library of object files. STK was not designed with one particular style of use in mind.
|
||||||
|
|
||||||
|
For specifics on creating Windows applications, see README-Win.txt.
|
||||||
|
|
||||||
\section rtvsnonrt "Realtime" vs. "Non-Realtime"
|
\section rtvsnonrt "Realtime" vs. "Non-Realtime"
|
||||||
|
|
||||||
@@ -37,26 +38,26 @@ STK compiles with realtime support on the following flavors of the Unix operatin
|
|||||||
<TR>
|
<TR>
|
||||||
<TD>Linux</TD>
|
<TD>Linux</TD>
|
||||||
<TD>ALSA</TD>
|
<TD>ALSA</TD>
|
||||||
<TD>__LINUX_ALSA__, __LINUX_ALSASEQ__, __LITTLE_ENDIAN__</TD>
|
<TD>__LINUX_ALSA__, __LITTLE_ENDIAN__</TD>
|
||||||
<TD><TT>asound, pthread</TT></TD>
|
<TD><TT>asound, pthread</TT></TD>
|
||||||
</TR>
|
</TR>
|
||||||
<TR>
|
<TR>
|
||||||
<TD>Linux</TD>
|
<TD>Linux</TD>
|
||||||
<TD>OSS (version 4.0 only, use ALSA for MIDI support)</TD>
|
<TD>OSS (version 4.0 only, use ALSA for MIDI support)</TD>
|
||||||
<TD>__LINUX_OSS__, __LINUX_ALSASEQ__, __LITTLE_ENDIAN__</TD>
|
<TD>__LINUX_OSS__, __LINUX_ALSA__, __LITTLE_ENDIAN__</TD>
|
||||||
<TD><TT>asound, pthread</TT></TD>
|
<TD><TT>asound, pthread</TT></TD>
|
||||||
</TR>
|
</TR>
|
||||||
<TR>
|
<TR>
|
||||||
<TD>Linux and Macintosh OS-X</TD>
|
<TD>Linux and Macintosh OS-X</TD>
|
||||||
<TD>Jack (audio only, use ALSA for MIDI support)</TD>
|
<TD>Jack</TD>
|
||||||
<TD>__UNIX_JACK__, __LINUX_ALSASEQ__, __LITTLE_ENDIAN__</TD>
|
<TD>__UNIX_JACK__, __LITTLE_ENDIAN__</TD>
|
||||||
<TD><TT>asound, pthread, jack</TT></TD>
|
<TD><TT>asound, pthread, jack</TT></TD>
|
||||||
</TR>
|
</TR>
|
||||||
<TR>
|
<TR>
|
||||||
<TD>Macintosh OS X</TD>
|
<TD>Macintosh OS X</TD>
|
||||||
<TD>CoreAudio</TD>
|
<TD>CoreAudio</TD>
|
||||||
<TD>__MACOSX_CORE__</TD>
|
<TD>__MACOSX_CORE__</TD>
|
||||||
<TD><TT>pthread, CoreAudio, CoreMidi, CoreFoundation</TT></TD>
|
<TD><TT>pthread, CoreAudio, CoreMIDI, CoreFoundation</TT></TD>
|
||||||
</TR>
|
</TR>
|
||||||
</TABLE>
|
</TABLE>
|
||||||
</CENTER>
|
</CENTER>
|
||||||
@@ -104,24 +105,5 @@ g++ -Wall -D__LITTLE_ENDIAN__ -o sineosc sineosc.cpp -lstk
|
|||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
|
|
||||||
\section compileWin Windows:
|
|
||||||
|
|
||||||
STK has been tested on Windows platforms using the Visual .NET compiler
|
|
||||||
only. It is assumed here that you're familiar with Visual C++ and its
|
|
||||||
particular idiosyncrasies. STK won't compile in Visual C++ 6.0 any more.
|
|
||||||
|
|
||||||
The approach when using Visual C++ is to build a project that
|
|
||||||
includes the necessary ToolKit files from the distribution
|
|
||||||
<TT>src</TT> and <TT>include</TT> directories. For the example
|
|
||||||
program from the previous tutorial chapter, create a VC++ console
|
|
||||||
application project, add the Stk, FileRead, FileWrite, WvIn, FileWvIn,
|
|
||||||
FileLoop, WvOut, and FileWvOut class files, as well as
|
|
||||||
<TT>sineosc.cpp</TT>, and make sure the <TT>sinewave.raw</TT> file is
|
|
||||||
in the subdirectory <TT>rawwaves</TT>.
|
|
||||||
|
|
||||||
For programs using any of the STK realtime classes mentioned above, it is necessary to link with the DirectSound (<TT>dsound.lib</TT>), <TT>winmm.lib</TT>, and <TT>Wsock32.lib</TT> libraries, select the multithreaded library, and provide the <TT>__LITTLE_ENDIAN__</TT>, <TT>__WINDOWS_DS__</TT>, and <TT>__WINDOWS_MM__</TT> preprocessor definitions.
|
|
||||||
|
|
||||||
For Steinberg ASIO support, use the <TT>__WINDOWS_ASIO__</TT> preprocessor definition (and the <TT>__WINDOWS_MM__</TT> definition for RtMidi support), include all the files in the <TT>src/asio/</TT> directory (i.e., <TT>asio.h,cpp</TT>, <TT>asiodrivers.h,cpp</TT>, ...), and link with the <TT>winmm.lib</TT>, and <TT>Wsock32.lib</TT> libraries.
|
|
||||||
|
|
||||||
[<A HREF="tutorial.html">Main tutorial page</A>] [<A HREF="filtering.html">Next tutorial</A>]
|
[<A HREF="tutorial.html">Main tutorial page</A>] [<A HREF="filtering.html">Next tutorial</A>]
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ then uses the stk::Messager:popMessage() function to retrieve incoming
|
|||||||
control messages. This function does not block, instead returning a
|
control messages. This function does not block, instead returning a
|
||||||
message type of zero when no more messages are in the queue. Many of
|
message type of zero when no more messages are in the queue. Many of
|
||||||
the example programs included with the ToolKit distribution use a
|
the example programs included with the ToolKit distribution use a
|
||||||
stk::Messager instance to accept control input from the accompanying tcl/tk
|
stk::Messager instance to accept control input from the accompanying Tcl/Tk
|
||||||
graphical user interfaces, from external MIDI devices, or from SKINI
|
graphical user interfaces, from external MIDI devices, or from SKINI
|
||||||
scorefiles.
|
scorefiles.
|
||||||
|
|
||||||
|
|||||||
@@ -1,297 +1,282 @@
|
|||||||
/*! \page download Download, Release Notes, and Bug Fixes
|
/*! \page download Download and Release Notes
|
||||||
|
|
||||||
\section down Download Version 4.4.3 (30 August 2011):
|
\section down Download Version 4.6.1 (18 April 2019):
|
||||||
|
|
||||||
<UL>
|
|
||||||
<LI><A HREF="http://ccrma.stanford.edu/software/stk/release/stk-4.4.3.tar.gz">Source distribution</A></LI>
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
|
- <A HREF="http://ccrma.stanford.edu/software/stk/release/stk-4.6.1.tar.gz">Source distribution</A>
|
||||||
|
|
||||||
\section notes Release Notes:
|
\section notes Release Notes:
|
||||||
|
\subsection v4dot6dot1 Version 4.6.1
|
||||||
|
- see github site for complete details (github.com/thestk/stk)
|
||||||
|
- various documentation updates
|
||||||
|
- new Recorder (flute a la Verge) class (thanks to Mathias Bredholt)
|
||||||
|
- updated Modulate class to allow noise rate control
|
||||||
|
- new VS2017 project files
|
||||||
|
- fix in FileLoop::getSize() to return file size (not chunk size)
|
||||||
|
|
||||||
|
\subsection v4dot6dot0 Version 4.6.0
|
||||||
|
- see github site for complete details (github.com/thestk/stk)
|
||||||
|
- various build system updates
|
||||||
|
- fixes in FileWvIn / FileLoop for normalisation and scaling, as well as file opening
|
||||||
|
- bug fix for MAT-files in FileWrite
|
||||||
|
- bug fix in MidiFileIn.cpp for timing and time-code formats
|
||||||
|
- updated versions of RtAudio and RtMidi
|
||||||
|
|
||||||
|
\subsection v4dot5dot1 Version 4.5.1
|
||||||
|
- fix for FileWvIn / FileLoop classes to avoid keeping files open if not necessary
|
||||||
|
- miscellaneous bug fixes, documented on GitHub site (github.com/thestk/stk)
|
||||||
|
- update to play.cpp example to play mono files as stereo
|
||||||
|
- bug fix in DelayL::setDelay() function
|
||||||
|
- miscellanous build bug fixes
|
||||||
|
|
||||||
|
\subsection v4dot5dot0 Version 4.5.0
|
||||||
|
- Updated versions of RtAudio and RtMidi, with associated renaming of RtError class to either RtAudioError or RtMidiError
|
||||||
|
- New iOS project files (thanks to Ariel Elkin)
|
||||||
|
- Bug fix in FreeVerb that could cause crackling for stereo input
|
||||||
|
- Various bug fixes and updates to minimize compiler warnings
|
||||||
|
- ADSR fix for decay/release time calculations
|
||||||
|
- Various updates to build system
|
||||||
|
|
||||||
|
\subsection v4dot4dot4 Version 4.4.4
|
||||||
|
- New FreeVerb class (thanks to Greg Burlet)
|
||||||
|
- New Guitar class
|
||||||
|
- New electric guitar project
|
||||||
|
- Updated versions of RtAudio and RtMidi
|
||||||
|
- Cleaned / revised Shakers class
|
||||||
|
- Bug fix in LentPitShift
|
||||||
|
- Bug fix in Echo constructor
|
||||||
|
- Bug fix in FileWvIn (file size when chunking)
|
||||||
|
- Bug fix in StkFrames copy constructor
|
||||||
|
|
||||||
\subsection v4dot4dot3 Version 4.4.3
|
\subsection v4dot4dot3 Version 4.4.3
|
||||||
|
- Changed SINT24 to be lower 3 bytes of 32-bit word.
|
||||||
<ul>
|
- Bug fixes to vectorized tick functions in Effects classes.
|
||||||
<li>Changed SINT24 to be lower 3 bytes of 32-bit word.</li>
|
- Updated versions of RtAudio and RtMidi.
|
||||||
<li>Bug fixes to vectorized tick functions in Effects classes.</li>
|
- Bug fixes in ADSR and Envelope classes.
|
||||||
<li>Updated versions of RtAudio and RtMidi.</li>
|
- Updates to the internal argument checking and reporting scheme.
|
||||||
<li>Bug fixes in ADSR and Envelope classes.</li>
|
- Updates to Bowed class (thanks to Esteban Maestre!).
|
||||||
<li>Updates to the internal argument checking and reporting scheme.</li>
|
- Fixes for 24-bit support in FileRead and FileWrite.
|
||||||
<li>Updates to Bowed class (thanks to Esteban Maestre!).</li>
|
- Added WAVE_FORMAT_EXTENSIBLE support in FileWrite.
|
||||||
<li>Fixes for 24-bit support in FileRead and FileWrite.</li>
|
- Added sample rate variable reading and writing for MAT-files in FileRead and FileWrite.
|
||||||
<li>Added WAVE_FORMAT_EXTENSIBLE support in FileWrite.</li>
|
|
||||||
<li>Added sample rate variable reading and writing for MAT-files in FileRead and FileWrite.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
\subsection v4dot4dot2 Version 4.4.2
|
\subsection v4dot4dot2 Version 4.4.2
|
||||||
|
- Added various header file includes for newer compilers.
|
||||||
<ul>
|
- Updates to RtAudio and RtMidi.
|
||||||
<li>Added various header file includes for newer compilers.</li>
|
- New LentPitShift class (thanks to Francois Germain).
|
||||||
<li>Updates to RtAudio and RtMidi.</li>
|
- Bug fixes in Voicer class (thanks Richard Dobson!).
|
||||||
<li>New LentPitShift class (thanks to Francois Germain).</li>
|
- Added Makefile.in to compile library and all projects, as well as clean and distclean.
|
||||||
<li>Bug fixes in Voicer class (thanks Richard Dobson!).</li>
|
|
||||||
<li>Added Makefile.in to compile library and all projects, as well as clean and distclean.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
\subsection v4dot4dot1 Version 4.4.1
|
\subsection v4dot4dot1 Version 4.4.1
|
||||||
|
- Added multi-channel/frame tick() virtual function to WvIn and WvOut abstract base classes (required update to RtWvOut class).
|
||||||
<ul>
|
- Updated configure script to select g++ compiler by default.
|
||||||
<li>Added multi-channel/frame tick() virtual function to WvIn and WvOut abstract base classes (required update to RtWvOut class).</li>
|
- In demo.cpp: removed voicer grouping for messages, fixing polyphony when messages are on the same MIDI/SKINI channel.
|
||||||
<li>Updated configure script to select g++ compiler by default.</li>
|
- Updates to RtAudio and RtMidi.
|
||||||
<li>In demo.cpp: removed voicer grouping for messages, fixing polyphony when messages are on the same MIDI/SKINI channel.</li>
|
|
||||||
<li>Updates to RtAudio and RtMidi.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
\subsection v4dot4dot0 Version 4.4.0
|
\subsection v4dot4dot0 Version 4.4.0
|
||||||
|
- All classes embedded in the "stk" namespace (except RtAudio, RtMidi, and RtError).
|
||||||
<ul>
|
- Class WaveLoop renamed FileLoop.
|
||||||
<li>All classes embedded in the "stk" namespace (except RtAudio, RtMidi, and RtError).</li>
|
- Significant efficiency improvements via code restructuring and inlining.
|
||||||
<li>Class WaveLoop renamed FileLoop.</li>
|
- Some class source (.cpp) files deleted as part of inlining (Generator, Filter, Function, WvIn, WvOut, Effect, Instrmnt, BowTable, ReedTable, JetTable, Vector3D).
|
||||||
<li>Significant efficiency improvements via code restructuring and inlining.</li>
|
- Updates to RtAudio and RtMidi.
|
||||||
<li>Some class source (.cpp) files deleted as part of inlining (Generator, Filter, Function, WvIn, WvOut, Effect, Instrmnt, BowTable, ReedTable, JetTable, Vector3D).</li>
|
- Previous "tickFrame()" functions renamed "tick" for more consistent API.
|
||||||
<li>Updates to RtAudio and RtMidi.</li>
|
- More consistent and scalable approach to multichannel data and computations.
|
||||||
<li>Previous "tickFrame()" functions renamed "tick" for more consistent API.</li>
|
- Multichannel support added to Granulate class.
|
||||||
<li>More consistent and scalable approach to multichannel data and computations.</li>
|
- Filter class made abstract. New Iir and Fir classes made for non-order-specific filtering.
|
||||||
<li>Multichannel support added to Granulate class.</li>
|
- New TapDelay class.
|
||||||
<li>Filter class made abstract. New Iir and Fir classes made for non-order-specific filtering.</li>
|
- SubNoise class deleted (same as sub-sampled "ticking" of Noise class).
|
||||||
<li>New TapDelay class.</li>
|
|
||||||
<li>SubNoise class deleted (same as sub-sampled "ticking" of Noise class).</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
\subsection v4dot3dot1 Version 4.3.1
|
\subsection v4dot3dot1 Version 4.3.1
|
||||||
|
- Further headerless file support in FileRead.
|
||||||
<ul>
|
- Bug fix in RtWvOut.cpp.
|
||||||
<li>Further headerless file support in FileRead.</li>
|
- Added configure support for MinGW.
|
||||||
<li>Bug fix in RtWvOut.cpp.</li>
|
- Updates to RtAudio and RtMidi for MinGW.
|
||||||
<li>Added configure support for MinGW.</li>
|
- Changes to channel assignment in demo.cpp.
|
||||||
<li>Updates to RtAudio and RtMidi for MinGW.</li>
|
|
||||||
<li>Changes to channel assignment in demo.cpp.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
\subsection v4dot3dot0 Version 4.3.0
|
\subsection v4dot3dot0 Version 4.3.0
|
||||||
|
- An official MIT-like license.
|
||||||
<ul>
|
- New functionality to automatically update class data when the STK sample rate changes (partly implemented).
|
||||||
<li>An official MIT-like license.</li>
|
- Updates for new RtAudio version 4.0.
|
||||||
<li>New functionality to automatically update class data when the STK sample rate changes (partly implemented).</li>
|
- Removed RtDuplex class, users should use RtAudio directly with a callback function.
|
||||||
<li>Updates for new RtAudio version 4.0.</li>
|
- Bug fix in interpolate() function in Stk.h for non-interleaved data.
|
||||||
<li>Removed RtDuplex class, users should use RtAudio directly with a callback function.</li>
|
- Fixes / improvements to the Granulate class.
|
||||||
<li>Bug fix in interpolate() function in Stk.h for non-interleaved data.</li>
|
- Fix in Whistle when doing animation.
|
||||||
<li>Fixes / improvements to the Granulate class.</li>
|
- Fixes in BlitSquare for frequency, harmonics, and dc offset.
|
||||||
<li>Fix in Whistle when doing animation.</li>
|
- Updates to Makefiles for non-realtime compile.
|
||||||
<li>Fixes in BlitSquare for frequency, harmonics, and dc offset.</li>
|
- Fix in demo.cpp for voice channel assignment.
|
||||||
<li>Updates to Makefiles for non-realtime compile.</li>
|
- Updated versions of RtMidi and RtAudio.
|
||||||
<li>Fix in demo.cpp for voice channel assignment.</li>
|
- Updated ASIO files for MinGW compiler.
|
||||||
<li>Updated versions of RtMidi and RtAudio.</li>
|
- New FAQ in documentation.
|
||||||
<li>Updated ASIO files for MinGW compiler.</li>
|
- MAT-file bug fix in FileRead class.
|
||||||
<li>New FAQ in documentation.</li>
|
|
||||||
<li>MAT-file bug fix in FileRead class.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
\subsection v4dot2dot1 Version 4.2.1
|
\subsection v4dot2dot1 Version 4.2.1
|
||||||
|
- Greatly expanded StkFrames functionality (including interpolation and indexing by channel/frame).
|
||||||
<ul>
|
- New Blit, BlitSaw, and BlitSquare bandlimited waveform classes (thanks to Robin Davies!).
|
||||||
<li>Greatly expanded StkFrames functionality (including interpolation and indexing by channel/frame).</li>
|
- New Granulate granular synthesis class.
|
||||||
<li>New Blit, BlitSaw, and BlitSquare bandlimited waveform classes (thanks to Robin Davies!).</li>
|
- Removed Table class ... all functionality (including interpolation) now in StkFrames and FileRead classes.
|
||||||
<li>New Granulate granular synthesis class.</li>
|
- Revised Socket class (now abstract) and added TcpServer, TcpClient, and UdpSocket subclasses.
|
||||||
<li>Removed Table class ... all functionality (including interpolation) now in StkFrames and FileRead classes.</li>
|
- Added Stk::showWarnings() and Stk::printErrors() functions to dis/enable warning and error printouts.
|
||||||
<li>Revised Socket class (now abstract) and added TcpServer, TcpClient, and UdpSocket subclasses.</li>
|
- Extracted file I/O functionality to FileRead and FileWrite classes.
|
||||||
<li>Added Stk::showWarnings() and Stk::printErrors() functions to dis/enable warning and error printouts.</li>
|
- Revised WvIn / WvOut class structure (WvIn / WvOut now abstract and file I/O functionality in new FileWvIn / FileWvOut subclasses).
|
||||||
<li>Extracted file I/O functionality to FileRead and FileWrite classes.</li>
|
- New SineWave class which calculates its own static table of variable length (no rawwave dependency).
|
||||||
<li>Revised WvIn / WvOut class structure (WvIn / WvOut now abstract and file I/O functionality in new FileWvIn / FileWvOut subclasses).</li>
|
- New sinewave.raw file of length 1024 samples (used to be 256).
|
||||||
<li>New SineWave class which calculates its own static table of variable length (no rawwave dependency).</li>
|
- TcpWvIn and TcpWvOut renamed InetWvIn and InetWvOut, with added support for UDP sockets.
|
||||||
<li>New sinewave.raw file of length 1024 samples (used to be 256).</li>
|
- Fixed bug in WvOut tickFrame( const StkFrames &frames ) function.
|
||||||
<li>TcpWvIn and TcpWvOut renamed InetWvIn and InetWvOut, with added support for UDP sockets.</li>
|
- Fixed bug in demo.cpp when writing output soundfiles without realtime output.
|
||||||
<li>Fixed bug in WvOut tickFrame( const StkFrames &frames ) function.</li>
|
- Added "binary" open flag to MidiFileIn class for Windows.
|
||||||
<li>Fixed bug in demo.cpp when writing output soundfiles without realtime output.</li>
|
- Fixed oversized MAT-file header in WvOut.cpp
|
||||||
<li>Added "binary" open flag to MidiFileIn class for Windows.</li>
|
- Fixed case statement bug in MidiFileIn.cpp for sysex.
|
||||||
<li>Fixed oversized MAT-file header in WvOut.cpp</li>
|
- Added missing getDelay() function to DelayA.cpp.
|
||||||
<li>Fixed case statement bug in MidiFileIn.cpp for sysex.</li>
|
- Fixed modDepth omission in Chorus.cpp.
|
||||||
<li>Added missing getDelay() function to DelayA.cpp.</li>
|
- Fixed DC blocker initialization bug in Flute.cpp.
|
||||||
<li>Fixed modDepth omission in Chorus.cpp.</li>
|
- Changed Filter class behavior so no default clearing of state when changing coefficients.
|
||||||
<li>Fixed DC blocker initialization bug in Flute.cpp.</li>
|
- Fixes to RtAudio, especially for Windows DirectSound and ASIO (thanks to Robin Davies).
|
||||||
<li>Changed Filter class behavior so no default clearing of state when changing coefficients.</li>
|
|
||||||
<li>Fixes to RtAudio, especially for Windows DirectSound and ASIO (thanks to Robin Davies).</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
\subsection v4dot2dot0 Version 4.2.0
|
\subsection v4dot2dot0 Version 4.2.0
|
||||||
|
- Simultaneous multiple audio APIs supported at compile time.
|
||||||
<ul>
|
- Various changes to better conform to standard C++ programming practices.
|
||||||
<li>Simultaneous multiple audio APIs supported at compile time.</li>
|
- Fixed hidden overloaded virtual functions.
|
||||||
<li>Various changes to better conform to standard C++ programming practices.</li>
|
- New Asymp exponential envelope class.
|
||||||
<li>Fixed hidden overloaded virtual functions.</li>
|
- <tt>MY_FLOAT</tt> type converted to <tt>StkFloat</tt> and changed throughout (use \c treesed utility to search/replace in old files).
|
||||||
<li>New Asymp exponential envelope class.</li>
|
- Most example programs rewritten to use an audio callback paradigm (which works better in OS-X).
|
||||||
<li><tt>MY_FLOAT</tt> type converted to <tt>StkFloat</tt> and changed throughout (use \c treesed utility to search/replace in old files).</li>
|
- New StkFrames class for vectorized multichannel data and associated new tick() functions making use of StkFrames.
|
||||||
<li>Most example programs rewritten to use an audio callback paradigm (which works better in OS-X).</li>
|
- New RtMidi class with MIDI output capabilities (API changes).
|
||||||
<li>New StkFrames class for vectorized multichannel data and associated new tick() functions making use of StkFrames.</li>
|
- New MidiFileIn class for reading MIDI files.
|
||||||
<li>New RtMidi class with MIDI output capabilities (API changes).</li>
|
- Revised Filter classes to use std::vectors for coefficients (API changes).
|
||||||
<li>New MidiFileIn class for reading MIDI files.</li>
|
- Revised Messager class (API changes).
|
||||||
<li>Revised Filter classes to use std::vectors for coefficients (API changes).</li>
|
- New abstract parent Effect class for various effects.
|
||||||
<li>Revised Messager class (API changes).</li>
|
- New abstract parent Generator class for various signal sources.
|
||||||
<li>New abstract parent Effect class for various effects.</li>
|
- New abstract parent Function class for tables and various non-linear functions.
|
||||||
<li>New abstract parent Generator class for various signal sources.</li>
|
- Skini class completely rewritten (simplified) using the C++ STL (API changes).
|
||||||
<li>New abstract parent Function class for tables and various non-linear functions.</li>
|
- WvOut classes now clip to -1.0 to +1.0 and report out of range.
|
||||||
<li>Skini class completely rewritten (simplified) using the C++ STL (API changes).</li>
|
- New Mutex class.
|
||||||
<li>WvOut classes now clip to -1.0 to +1.0 and report out of range.</li>
|
- Turned Nagle algorithm off by default in Socket class.
|
||||||
<li>New Mutex class.</li>
|
- Error reporting standardized in all classes.
|
||||||
<li>Turned Nagle algorithm off by default in Socket class.</li>
|
|
||||||
<li>Error reporting standardized in all classes.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
\subsection v4dot1dot3 Version 4.1.3
|
\subsection v4dot1dot3 Version 4.1.3
|
||||||
|
- Bug fix in RtAudio for Windows DirectSound output only support
|
||||||
<ul>
|
|
||||||
<li>Bug fix in RtAudio for Windows DirectSound output only support</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
\subsection v4dot1dot2 Version 4.1.2
|
\subsection v4dot1dot2 Version 4.1.2
|
||||||
|
- Added Linux JACK support to RtAudio.
|
||||||
<UL>
|
- Added optional doNormalize argument to WvIn to allow specification of data normalization or not.
|
||||||
<li>Added Linux JACK support to RtAudio.</li>
|
- Added volume control to demo program and various Tcl scripts.
|
||||||
<li>Added optional doNormalize argument to WvIn to allow specification of data normalization or not.</li>
|
- Added support for dynamic rawwavePath() setting.
|
||||||
<li>Added volume control to demo program and various tcl scripts.</li>
|
- WaveLoop bug fix.
|
||||||
<li>Added support for dynamic rawwavePath() setting.</li>
|
- Fixed bug in ADSR::setReleaseTime() method.
|
||||||
<li>WaveLoop bug fix.</li>
|
- Fixed missing initialization of apInput in non-default constructor of DelayA class.
|
||||||
<li>Fixed bug in ADSR::setReleaseTime() method.</li>
|
- Added time seeding of random number generator to Noise constructor.
|
||||||
<li>Fixed missing initialization of apInput in non-default constructor of DelayA class.</li>
|
- Update to the contentsAt() method of Delay class.
|
||||||
<li>Added time seeding of random number generator to Noise constructor.</li>
|
- WAV file fixes (8-bit) in WvIn and WvOut classes.
|
||||||
<li>Update to the contentsAt() method of Delay class.</li>
|
- Configure script changes.
|
||||||
<li>WAV file fixes (8-bit) in WvIn and WvOut classes.</li>
|
- Updated \<iostream\> include statements and appended "std::" as necessary throughout for compatibility with gcc 3.
|
||||||
<li>Configure script changes.</li>
|
|
||||||
<li>Updated \<iostream\> include statements and appended "std::" as necessary throughout for compatibility with gcc 3.</li>
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
\subsection v4dot1dot1 Version 4.1.1
|
\subsection v4dot1dot1 Version 4.1.1
|
||||||
<ul>
|
- Bug fix in RtAudio for Macintosh OS X and Windows ASIO duplex operation.
|
||||||
<li>Bug fix in RtAudio for Macintosh OS X and Windows ASIO duplex operation.</li>
|
- Windows ASIO fix in Stk.h.
|
||||||
<li>Windows ASIO fix in Stk.h.</li>
|
- Documentation updates.
|
||||||
<li>Documentation updates.</li>
|
- Expanded tutorial.
|
||||||
<li>Expanded tutorial.</li>
|
- Fixed RtDuplex omission in src Makefile.
|
||||||
<li>Fixed RtDuplex omission in src Makefile.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
\subsection v4dot1 Version 4.1
|
\subsection v4dot1 Version 4.1
|
||||||
|
- Macintosh OS X support added.
|
||||||
<UL>
|
- New Whistle class.
|
||||||
<LI>Macintosh OS X support added.</LI>
|
- Added Voicer, SingWave, and VoicForm classes.
|
||||||
<LI>New Whistle class.</LI>
|
- Improvements/fixes to the banded waveguide instruments.
|
||||||
<LI>Added Voicer, SingWave, and VoicForm classes.</LI>
|
- Demo program now uses Voicer, allowing polyphony.
|
||||||
<LI>Improvements/fixes to the banded waveguide instruments.</LI>
|
- Demo Tcl/Tk scripts changed to use SKINI PitchChange instead of PitchBend.
|
||||||
<LI>Demo program now uses Voicer, allowing polyphony.</LI>
|
- Demo program response to PitchBend modified to octave up/down.
|
||||||
<LI>Demo tcl/tk scripts changed to use SKINI PitchChange instead of PitchBend.</LI>
|
- Several RtAudio fixes and improvements (OS X and Windows ASIO support added).
|
||||||
<LI>Demo program response to PitchBend modified to octave up/down.</LI>
|
- Added nextOut() method to Delay classes.
|
||||||
<LI>Several RtAudio fixes and improvements (OS X and Windows ASIO support added).</LI>
|
- Documentation fixes for Reverb classes.
|
||||||
<LI>Added nextOut() method to Delay classes.</LI>
|
- RAWWAVE_PATH changed to include the "rawwave" directory.
|
||||||
<LI>Documentation fixes for Reverb classes.</LI>
|
- "configure" support added for unix systems.
|
||||||
<LI>RAWWAVE_PATH changed to include the "rawwave" directory.</LI>
|
- Multivoice flag (-n NUMBER) added as command line option to demo program.
|
||||||
<LI>"configure" support added for unix systems.</LI>
|
- Sample rate flag added as command line option to example programs.
|
||||||
<LI>Multivoice flag (-n NUMBER) added as command line option to demo program.</LI>
|
- Socket port number added as command line option to example programs.
|
||||||
<LI>Sample rate flag added as command line option to example programs.</LI>
|
|
||||||
<LI>Socket port number added as command line option to example programs.</LI>
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
\subsection v4 Version 4.0
|
\subsection v4 Version 4.0
|
||||||
|
- New documentation and tutorial.
|
||||||
<UL>
|
- Several new instruments, including Saxofony, BlowBotl, and StifKarp.
|
||||||
<LI>New documentation and tutorial.</LI>
|
- New Stk base class, replacing Object class.
|
||||||
<LI>Several new instruments, including Saxofony, BlowBotl, and StifKarp.</LI>
|
- New Filter class structure and methods.
|
||||||
<LI>New Stk base class, replacing Object class.</LI>
|
- Extensive modifications to WvIn and WvOut class structures and methods.
|
||||||
<LI>New Filter class structure and methods.</LI>
|
- Looping functionality moved to WaveLoop (subclass of WvIn).
|
||||||
<LI>Extensive modifications to WvIn and WvOut class structures and methods.</LI>
|
- Automatic file type detection in WvIn ... hosed WavWvIn, AifWvIn, RawWavIn, SndWavIn, and MatWvIn subclasses.
|
||||||
<LI>Looping functionality moved to WaveLoop (subclass of WvIn).</LI>
|
- New file type specifier argument in WvOut ... hosed WavWvOut, AifWvOut, RawWavOut, SndWavOut, and MatWvOut subclasses.
|
||||||
<LI>Automatic file type detection in WvIn ... hosed WavWvIn, AifWvIn, RawWavIn, SndWavIn, and MatWvIn subclasses.</LI>
|
- Some simplifications of Messager class (was Controller).
|
||||||
<LI>New file type specifier argument in WvOut ... hosed WavWvOut, AifWvOut, RawWavOut, SndWavOut, and MatWvOut subclasses.</LI>
|
- New independent RtAudio class.
|
||||||
<LI>Some simplifications of Messager class (was Controller).</LI>
|
- Extensive revisions in code and a significant number of API changes.
|
||||||
<LI>New independent RtAudio class.</LI>
|
|
||||||
<LI>Extensive revisions in code and a significant number of API changes.</LI>
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
\subsection v3dot2 Version 3.2
|
\subsection v3dot2 Version 3.2
|
||||||
|
- New input control handling class (Controller)
|
||||||
<UL>
|
- Added AIFF file input/output support.
|
||||||
<LI>New input control handling class (Controller)</LI>
|
- New C++ error handling capabilities.
|
||||||
<LI>Added AIFF file input/output support.</LI>
|
- New input/output internet streaming support (StrmWvIn/StrmWvOut).
|
||||||
<LI>New C++ error handling capabilities.</LI>
|
- Added native ALSA support for linux.
|
||||||
<LI>New input/output internet streaming support (StrmWvIn/StrmWvOut).</LI>
|
- Added optional "device" argument to all "Rt" classes (audio and MIDI) and printout of devices when argument is invalid.
|
||||||
<LI>Added native ALSA support for linux.</LI>
|
- WvIn classes rewritten to support very big files (incremental load from disk).
|
||||||
<LI>Added optional "device" argument to all "Rt" classes (audio and MIDI) and printout of devices when argument is invalid.</LI>
|
- Changed WvIn/WvOut classes to work with sample frame buffers.
|
||||||
<LI>WvIn classes rewritten to support very big files (incremental load from disk).</LI>
|
- Fixed looping and negative rate calculations in WvIn classes.
|
||||||
<LI>Changed WvIn/WvOut classes to work with sample frame buffers.</LI>
|
- Fixed interpolation bug in RtWvIn.
|
||||||
<LI>Fixed looping and negative rate calculations in WvIn classes.</LI>
|
- Windoze RtAudio code rewritten (thank Dave!).
|
||||||
<LI>Fixed interpolation bug in RtWvIn.</LI>
|
- Simplified byte-swapping functions (in-place swapping).
|
||||||
<LI>Windoze RtAudio code rewritten (thank Dave!).</LI>
|
- "Stereo-ized" RagaMatic.
|
||||||
<LI>Simplified byte-swapping functions (in-place swapping).</LI>
|
- Miscellaneous renamings.
|
||||||
<LI>"Stereo-ized" RagaMatic.</LI>
|
- Probably a bunch more fixes that I've long since forgotten about.
|
||||||
<LI>Miscellaneous renamings.</LI>
|
|
||||||
<LI>Probably a bunch more fixes that I've long since forgotten about.</LI>
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
\subsection v3dot1 Version 3.1
|
\subsection v3dot1 Version 3.1
|
||||||
|
- New RagaMatic project ... very cool!!!
|
||||||
<UL>
|
- Less clipping in the Shakers class.
|
||||||
<LI>New RagaMatic project ... very cool!!!</LI>
|
- Added "microphone position" to Mandolin in STKdemo.
|
||||||
<LI>Less clipping in the Shakers class.</LI>
|
- Fixed MIDI system message exclusion under Irix.
|
||||||
<LI>Added "microphone position" to Mandolin in STKdemo.</LI>
|
- Added a few bitmaps for the Shaker instruments.
|
||||||
<LI>Fixed MIDI system message exclusion under Irix.</LI>
|
- Made destructors virtual for Reverb.h, WvIn.h and Simple.h.
|
||||||
<LI>Added a few bitmaps for the Shaker instruments.</LI>
|
- Fixed bug setting delay length in DLineA when value too big.
|
||||||
<LI>Made destructors virtual for Reverb.h, WvIn.h and Simple.h.</LI>
|
- Fixed bug in WinMM realtime code (RTSoundIO).
|
||||||
<LI>Fixed bug setting delay length in DLineA when value too big.</LI>
|
- Added tick() method to BowTabl, JetTabl, and ReedTabl (same as lookup).
|
||||||
<LI>Fixed bug in WinMM realtime code (RTSoundIO).</LI>
|
- Switched to pthread API on SGI platforms.
|
||||||
<LI>Added tick() method to BowTabl, JetTabl, and ReedTabl (same as lookup).</LI>
|
- Added some defines to Object.h for random number generation, FPU overflow checking, etc....
|
||||||
<LI>Switched to pthread API on SGI platforms.</LI>
|
- A few minor changes, some bug fixes ... can't remember all of them.
|
||||||
<LI>Added some defines to Object.h for random number generation, FPU overflow checking, etc....</LI>
|
|
||||||
<LI>A few minor changes, some bug fixes ... can't remember all of them.</LI>
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
\subsection v3 Version 3.0
|
\subsection v3 Version 3.0
|
||||||
|
- New #define flags for OS and realtime dependencies (this will probably cause problems for old personal STK code, but it was necessary to make future ports easier).
|
||||||
<UL>
|
- Expanded and cleaned the Shakers class.
|
||||||
<LI>New #define flags for OS and realtime dependencies (this will probably cause problems for old personal STK code, but it was necessary to make future ports easier).</LI>
|
- New BowedBar algorithm/class.
|
||||||
<LI>Expanded and cleaned the Shakers class.</LI>
|
- Fixed Linux MIDI input bug.
|
||||||
<LI>New BowedBar algorithm/class.</LI>
|
- Fixed MIDI status masking problem in Windows.
|
||||||
<LI>Fixed Linux MIDI input bug.</LI>
|
- OS type defines now in Makefile.
|
||||||
<LI>Fixed MIDI status masking problem in Windows.</LI>
|
- New RAWWAVE_PATH define in Object.h.
|
||||||
<LI>OS type defines now in Makefile.</LI>
|
- Syntmono project pulled out to separate directory and cleaned up.
|
||||||
<LI>New RAWWAVE_PATH define in Object.h.</LI>
|
- Socketing capabilities under Unix, as well as Windoze.
|
||||||
<LI>Syntmono project pulled out to separate directory and cleaned up.</LI>
|
- Multiple simultaneous socket client connections to STK servers now possible.
|
||||||
<LI>Socketing capabilities under Unix, as well as Windoze.</LI>
|
- MD2SKINI now can merge MIDI and piped messages under Irix and Linux (for TCL->MD2SKINI->syntmono control).
|
||||||
<LI>Multiple simultaneous socket client connections to STK servers now possible.</LI>
|
- Defined INT16 and INT32 types and fixed various WvIn and WvOut classes.
|
||||||
<LI>MD2SKINI now can merge MIDI and piped messages under Irix and Linux (for TCL->MD2SKINI->syntmono control).</LI>
|
- Updated MatWvIn and MatWvOut for new MAT-file documentation from Matlab.
|
||||||
<LI>Defined INT16 and INT32 types and fixed various WvIn and WvOut classes.</LI>
|
- New demo Tcl/Tk GUI (TclDemo.tcl).
|
||||||
<LI>Updated MatWvIn and MatWvOut for new MAT-file documentation from Matlab.</LI>
|
- Minor fixes to FM behavior.
|
||||||
<LI>New demo Tcl/Tk GUI (TclDemo.tcl).</LI>
|
- Added record/duplex capabilities to RTSoundIO (Linux, SGI, and Windoze).
|
||||||
<LI>Minor fixes to FM behavior.</LI>
|
- Fixed bugs in WavWvOut and MatWvOut header specifications.
|
||||||
<LI>Added record/duplex capabilities to RTSoundIO (Linux, SGI, and Windoze).</LI>
|
- Added RawWvOut class.
|
||||||
<LI>Fixed bugs in WavWvOut and MatWvOut header specifications.</LI>
|
- New WvIn class with RawWvIn, SndWvIn, WavWvIn, MatWvIn, and RTWvIn subclasses.
|
||||||
<LI>Added RawWvOut class.</LI>
|
- Removed RawWave, RawShot, RawInterp, and RawLoop classes (supplanted by RawWvIn).
|
||||||
<LI>New WvIn class with RawWvIn, SndWvIn, WavWvIn, MatWvIn, and RTWvIn subclasses.</LI>
|
- Multi-channel data support in WvIn and WvOut classes using MY_MULTI data type (pointer to StkFloat) and the methods mtick() and mlastOutput().
|
||||||
<LI>Removed RawWave, RawShot, RawInterp, and RawLoop classes (supplanted by RawWvIn).</LI>
|
- Now writing to primary buffer under Windoze when allowed by hardware.
|
||||||
<LI>Multi-channel data support in WvIn and WvOut classes using MY_MULTI data type (pointer to StkFloat) and the methods mtick() and mlastOutput().</LI>
|
- Cleaned up Object.h a bit.
|
||||||
<LI>Now writing to primary buffer under Windoze when allowed by hardware.</LI>
|
- Pulled various utility and thread functions out of syntmono.cpp (to aid readability of the code).
|
||||||
<LI>Cleaned up Object.h a bit.</LI>
|
|
||||||
<LI>Pulled various utility and thread functions out of syntmono.cpp (to aid readability of the code).</LI>
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
\subsection v2dot02 Version 2.02
|
\subsection v2dot02 Version 2.02
|
||||||
|
- Created RawWave abstract class, with subclasses of RawLoop (looping rawwave oscillator), RawShot (non-looping, non-interpolating rawwave player ... used to be RawWvIn), and RawInterp (looping or non-looping, interpolating rawwave player ... used to be RawWave).
|
||||||
<UL>
|
- Modified DrumSynt to correctly handle sample rates different than 22050 Hz.
|
||||||
<LI>Created RawWave abstract class, with subclasses of RawLoop (looping rawwave oscillator), RawShot (non-looping, non-interpolating rawwave player ... used to be RawWvIn), and RawInterp (looping or non-looping, interpolating rawwave player ... used to be RawWave).</LI>
|
- Modified syntmono parsing vs. tick routine so that some ticking occurs between each message. When multiple messages are waiting to be processed, the time between message updates is inversely proportional to the number of messages in the buffer.
|
||||||
<LI>Modified DrumSynt to correctly handle sample rates different than 22050 Hz.</LI>
|
- Fixed DirectSound playback bug in WinXX distribution. Sound was being played at 8-bit, 22 kHz in all cases. Playback is now 16-bit and dependent on SRATE.
|
||||||
<LI>Modified syntmono parsing vs. tick routine so that some ticking occurs between each message. When multiple messages are waiting to be processed, the time between message updates is inversely proportional to the number of messages in the buffer.</LI>
|
- Fixed bug in MD2SKINI which prevented some NoteOff statements from being output.
|
||||||
<LI>Fixed DirectSound playback bug in WinXX distribution. Sound was being played at 8-bit, 22 kHz in all cases. Playback is now 16-bit and dependent on SRATE.</LI>
|
- This distribution includes an example STK project, mus151, which demonstrates a means for keeping a user's personal projects separate from the main distribution. This is highly recommended, in order to simplify upgrades to future STK releases.
|
||||||
<LI>Fixed bug in MD2SKINI which prevented some NoteOff statements from being output.</LI>
|
|
||||||
<LI>This distribution includes an example STK project, mus151, which demonstrates a means for keeping a user's personal projects separate from the main distribution. This is highly recommended, in order to simplify upgrades to future STK releases.</LI>
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
\subsection v2 Version 2
|
\subsection v2 Version 2
|
||||||
|
- Unification of the capabilities of STK across the various platforms. All of the previous SGI functionality has been ported to Linux and Windows, including realtime sound output and MIDI input.
|
||||||
<UL>
|
- MIDI input (with optional time-stamping) supported on SGI, Linux (OSS device drivers only), and Windows operating systems. Time stamping under IRIX and Windows is quantized to milliseconds and under Linux to hundredths of a second.
|
||||||
<LI>Unification of the capabilities of STK across the various platforms. All of the previous SGI functionality has been ported to Linux and Windows, including realtime sound output and MIDI input.</LI>
|
- Various Sound Output Options - .wav, .snd, and .mat (Matlab MAT-file) soundfile outputs are supported on all operating systems. I hacked out the MAT-file structure, so you don't have to include any platform-specific libraries. Realtime sound output is provided as well, except under NeXTStep.
|
||||||
<LI>MIDI input (with optional time-stamping) supported on SGI, Linux (OSS device drivers only), and Windows operating systems. Time stamping under IRIX and Windows is quantized to milliseconds and under Linux to hundredths of a second.</LI>
|
- Multiple Reverberator Implementations - Reverb subclasses of JCRev and NRev (popular reverberator implementations from CCRMA) have been written. Perry's original reverb implementation still exists as PRCRev. All reverberators now take a T60 initializer argument.
|
||||||
<LI>Various Sound Output Options - .wav, .snd, and .mat (Matlab MAT-file) soundfile outputs are supported on all operating systems. I hacked out the MAT-file structure, so you don't have to include any platform-specific libraries. Realtime sound output is provided as well, except under NeXTStep.</LI>
|
- MD2SKINI - A program which parses a MIDI input stream and spits out SKINI code. The output of MD2SKINI is typically piped into an STK instrument executable (e.g. <tt>MD2SKINI | syntmono Clarinet -r -i</tt>). In addition, you can supply a filename argument to MD2SKINI and have it simultaneously record a SKINI score file for future reuse.
|
||||||
<LI>Multiple Reverberator Implementations - Reverb subclasses of JCRev and NRev (popular reverberator implementations from CCRMA) have been written. Perry's original reverb implementation still exists as PRCRev. All reverberators now take a T60 initializer argument.</LI>
|
- Modifications to <I>Object.h</I> for OS_TYPE compilation dependencies. <I>Makefile</I> automatically determines OS_TYPE when invoked (if you have the GNU makefile utilities installed on your system).
|
||||||
<LI>MD2SKINI - A program which parses a MIDI input stream and spits out SKINI code. The output of MD2SKINI is typically piped into an STK instrument executable (eg. <tt>MD2SKINI | syntmono Clarinet -r -i</tt>). In addition, you can supply a filename argument to MD2SKINI and have it simultaneously record a SKINI score file for future reuse.</LI>
|
- A single distribution for all platforms. The Unix and Windows versions have been merged into a single set of classes. Makefiles and Visual C++ workspace/project files are provided for compiling.
|
||||||
<LI>Modifications to <I>Object.h</I> for OS_TYPE compilation dependencies. <I>Makefile</I> automatically determines OS_TYPE when invoked (if you have the GNU makefile utilities installed on your system).</LI>
|
|
||||||
<LI>A single distribution for all platforms. The Unix and Windows versions have been merged into a single set of classes. Makefiles and Visual C++ workspace/project files are provided for compiling.</LI>
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -21,10 +21,11 @@ and Windows computer platforms. Generic, non-realtime support has
|
|||||||
been tested under NeXTStep, Sun, and other platforms and should
|
been tested under NeXTStep, Sun, and other platforms and should
|
||||||
work with any standard C++ compiler.
|
work with any standard C++ compiler.
|
||||||
|
|
||||||
|
STK GitHub site: https://github.com/thestk/stk
|
||||||
STK WWW site: http://ccrma.stanford.edu/software/stk/
|
STK WWW site: http://ccrma.stanford.edu/software/stk/
|
||||||
|
|
||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
Copyright (c) 1995-2011 Perry R. Cook and Gary P. Scavone
|
Copyright (c) 1995--2019 Perry R. Cook and Gary P. Scavone
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
@@ -69,7 +70,7 @@ If the resultant sound generated by an STK program sounds like noise (and you're
|
|||||||
|
|
||||||
\section xwindows Why do I get a Tk display error message?
|
\section xwindows Why do I get a Tk display error message?
|
||||||
|
|
||||||
The following error may be printed to your terminal window (depending on the version of the tcl/tk interpreter you are running) if you attempt to start an STK tcl/tk interface without the X Server first running:
|
The following error may be printed to your terminal window (depending on the version of the Tcl/Tk interpreter you are running) if you attempt to start an STK Tcl/Tk interface without the X Server first running:
|
||||||
|
|
||||||
\code
|
\code
|
||||||
Application initialization failed: this isn't a Tk applicationcouldn't connect to display ":0.0"
|
Application initialization failed: this isn't a Tk applicationcouldn't connect to display ":0.0"
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ The stk::Iir class implements the standard difference equation
|
|||||||
a[0]*y[n] = b[0]*x[n] + ... + b[nb]*x[n-nb] - a[1]*y[n-1] - ... - a[na]*y[n-na],
|
a[0]*y[n] = b[0]*x[n] + ... + b[nb]*x[n-nb] - a[1]*y[n-1] - ... - a[na]*y[n-na],
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
where "b" values are numerator coefficients and "a" values are denominator coefficients. Note that if the first denominator coefficient is not 1.0, the Iir class automatically normalizes all filter coefficients by that value. The coefficient values are passed to the Iir class via a C++ <a href="http://www.roguewave.com/support/docs/sourcepro/stdlibref/vector.html">vector</a>, a container object provided by the C++ Standard Library.
|
where "b" values are numerator coefficients and "a" values are denominator coefficients. Note that if the first denominator coefficient is not 1.0, the Iir class automatically normalizes all filter coefficients by that value. The coefficient values are passed to the Iir class via a C++ <a href="http://www.cplusplus.com/reference/vector/vector/">vector</a>, a container object provided by the C++ Standard Library.
|
||||||
|
|
||||||
Most STK classes use more specific types of digital filters, such as the stk::OneZero, stk::OnePole, stk::TwoPole, or stk::BiQuad varieties. These classes inherit from the stk::Filter abstract base class and provide specific functionality particular to their use, as well as functions to independently control individual coefficient values.
|
Most STK classes use more specific types of digital filters, such as the stk::OneZero, stk::OnePole, stk::TwoPole, or stk::BiQuad varieties. These classes inherit from the stk::Filter abstract base class and provide specific functionality particular to their use, as well as functions to independently control individual coefficient values.
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
|
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
|
||||||
<tr><td>©1995-2011 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
|
<tr><td>©1995--2019 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
</BODY>
|
</BODY>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*! \page fundamentals STK Fundamentals
|
/*! \page fundamentals STK Fundamentals
|
||||||
|
|
||||||
The Synthesis ToolKit is implemented in the C++ programming language. STK does not attempt to provide a new programming environment or paradigm but rather provides a set of objects that can be used within a normal C++ programming framework. Therefore, it is expected that users of STK will have some familiarity with C/C++ programming concepts. That said, the STK classes do have some particular idiosyncrasies that we will mention here. Starting with STK version 4.4, all STK classes except RtAudio, RtMidi, and RtError are defined within the stk namespace.
|
The Synthesis ToolKit is implemented in the C++ programming language. STK does not attempt to provide a new programming environment or paradigm but rather provides a set of objects that can be used within a normal C++ programming framework. Therefore, it is expected that users of STK will have some familiarity with C/C++ programming concepts. That said, the STK classes do have some particular idiosyncrasies that we will mention here. Starting with STK version 4.4, all STK classes except RtAudio and RtMidi are defined within the stk namespace.
|
||||||
|
|
||||||
\section Signal Computations:
|
\section Signal Computations:
|
||||||
|
|
||||||
|
|||||||
BIN
doc/doxygen/images/mcgill.gif
Normal file
BIN
doc/doxygen/images/mcgill.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.7 KiB |
@@ -15,7 +15,7 @@ portable (it's mostly platform-independent C and C++ code), and it's
|
|||||||
completely user-extensible (all source included, no unusual libraries,
|
completely user-extensible (all source included, no unusual libraries,
|
||||||
and no hidden drivers). We like to think that this increases the
|
and no hidden drivers). We like to think that this increases the
|
||||||
chances that our programs will still work in another 5-10 years. In
|
chances that our programs will still work in another 5-10 years. In
|
||||||
fact, the ToolKit has been working continuously for nearly 15 years
|
fact, the ToolKit has been working continuously for nearly 20 years
|
||||||
now. STK currently runs with realtime support (audio and MIDI) on
|
now. STK currently runs with realtime support (audio and MIDI) on
|
||||||
Linux, Macintosh OS X, and Windows computer platforms. Generic,
|
Linux, Macintosh OS X, and Windows computer platforms. Generic,
|
||||||
non-realtime support has been tested under NeXTStep, Sun, and other
|
non-realtime support has been tested under NeXTStep, Sun, and other
|
||||||
|
|||||||
@@ -18,16 +18,16 @@ Here's a link to a book that includes an chapter on STK.
|
|||||||
|
|
||||||
<H4>What is the <I>Synthesis ToolKit</I>?</H4>
|
<H4>What is the <I>Synthesis ToolKit</I>?</H4>
|
||||||
|
|
||||||
The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. The Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (all source included, no unusual libraries, and no hidden drivers). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 15 years now. STK currently runs with realtime support (audio and MIDI) on Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler.
|
The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. The Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (all source included, no unusual libraries, and no hidden drivers). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 20 years now. STK currently runs with realtime support (audio and MIDI) on Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler.
|
||||||
|
|
||||||
The Synthesis ToolKit is free. The only parts of the Synthesis ToolKit that are platform-dependent concern real-time audio and MIDI input and output, and that is taken care of with a few special classes. The interface for MIDI input and the simple <A HREF="http://dev.scriptics.com">Tcl/Tk</A> graphical user interfaces (GUIs) provided is the same, so it's easy to experiment in real time using either the GUIs or MIDI. The Synthesis ToolKit can generate simultaneous SND (AU), WAV, AIFF, and MAT-file output soundfile formats (as well as realtime sound output), so you can view your results using one of a large variety of sound/signal analysis tools already available (e.g. <A HREF="http://www-ccrma.stanford.edu/software/snd/">Snd</A>, Cool Edit, Matlab).
|
The Synthesis ToolKit is free. The only parts of the Synthesis ToolKit that are platform-dependent concern real-time audio and MIDI input and output, and that is taken care of with a few special classes. The interface for MIDI input and the simple <A HREF="https://www.tcl.tk/">Tcl/Tk</A> graphical user interfaces (GUIs) provided is the same, so it's easy to experiment in real time using either the GUIs or MIDI. The Synthesis ToolKit can generate simultaneous SND (AU), WAV, AIFF, and MAT-file output soundfile formats (as well as realtime sound output), so you can view your results using one of a large variety of sound/signal analysis tools already available (e.g. <A HREF="http://www-ccrma.stanford.edu/software/snd/">Snd</A>, Cool Edit, Matlab).
|
||||||
|
|
||||||
|
|
||||||
<H4>What the <I>Synthesis ToolKit</I> is not.</H4>
|
<H4>What the <I>Synthesis ToolKit</I> is not.</H4>
|
||||||
|
|
||||||
The Synthesis Toolkit is not one particular program. Rather, it is a set of C++ classes that you can use to create your own programs. A few example applications are provided to demonstrate some of the ways to use the classes. If you have specific needs, you will probably have to either modify the example programs or write a new program altogether. Further, the example programs don't have a fancy GUI wrapper. It is easy to embed STK classes inside a GUI environment but we have chosen to focus our energy on the audio signal processing issues. Spending hundreds of hours making platform-dependent graphical user interfaces would go against one of the fundamental design goals of the ToolKit - platform independence.
|
The Synthesis Toolkit is not one particular program. Rather, it is a set of C++ classes that you can use to create your own programs. A few example applications are provided to demonstrate some of the ways to use the classes. If you have specific needs, you will probably have to either modify the example programs or write a new program altogether. Further, the example programs don't have a fancy GUI wrapper. It is easy to embed STK classes inside a GUI environment but we have chosen to focus our energy on the audio signal processing issues. Spending hundreds of hours making platform-dependent graphical user interfaces would go against one of the fundamental design goals of the ToolKit - platform independence.
|
||||||
|
|
||||||
For those instances where a simple GUI with sliders and buttons is helpful, we use <A HREF="http://dev.scriptics.com">Tcl/Tk</A> (that is freely distributed for all the supported ToolKit platforms). A number of Tcl/Tk GUI scripts are distributed with the ToolKit release. For control, the Synthesis Toolkit uses raw MIDI (on supported platforms), and SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like text message synthesis control format).
|
For those instances where a simple GUI with sliders and buttons is helpful, we use <A HREF="https://www.tcl.tk/">Tcl/Tk</A> (that is freely distributed for all the supported ToolKit platforms). A number of Tcl/Tk GUI scripts are distributed with the ToolKit release. For control, the Synthesis Toolkit uses raw MIDI (on supported platforms), and SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like text message synthesis control format).
|
||||||
|
|
||||||
<H4>A brief history of the <I>Synthesis ToolKit in C++.</I></H4>
|
<H4>A brief history of the <I>Synthesis ToolKit in C++.</I></H4>
|
||||||
|
|
||||||
@@ -39,8 +39,8 @@ everything to C++ on SGI hardware, added real-time capabilities, and
|
|||||||
greatly expanded the synthesis techniques available. With the help of
|
greatly expanded the synthesis techniques available. With the help of
|
||||||
Bill Putnam, Perry also made a port of STK to Windows95. Gary Scavone
|
Bill Putnam, Perry also made a port of STK to Windows95. Gary Scavone
|
||||||
began using STK extensively in the summer of 1997 and completed a full
|
began using STK extensively in the summer of 1997 and completed a full
|
||||||
port of STK to Linux early in 1998. He finished the fully compatable
|
port of STK to Linux early in 1998. He finished the fully compatible
|
||||||
Windows port (using Direct Sound API) in June 1998. Numerous
|
Windows port (using DirectSound API) in June 1998. Numerous
|
||||||
improvements and extensions have been made since then.
|
improvements and extensions have been made since then.
|
||||||
|
|
||||||
The Toolkit has been distributed continuously since 1996 via the <A
|
The Toolkit has been distributed continuously since 1996 via the <A
|
||||||
|
|||||||
@@ -4,26 +4,22 @@
|
|||||||
|
|
||||||
- <A HREF="http://www.music.mcgill.ca/~gary/rtmidi/">The %RtMidi WWW site</A>
|
- <A HREF="http://www.music.mcgill.ca/~gary/rtmidi/">The %RtMidi WWW site</A>
|
||||||
|
|
||||||
|
- <A HREF="http://momu.stanford.edu/stk/">MoMu-Stk: A lightly modified version of STK that supports the iPhone platform (iPhone, iPad, iPod Touches)</A>
|
||||||
|
|
||||||
- <A HREF="http://ccrma.stanford.edu/~woony/software/stkx/">StkX: A Cocoa STK Framework for Mac OS X by Woon Seung Yeo</A>
|
- <A HREF="http://ccrma.stanford.edu/~woony/software/stkx/">StkX: A Cocoa STK Framework for Mac OS X by Woon Seung Yeo</A>
|
||||||
|
|
||||||
- <A HREF="http://sourceforge.net/projects/mobilestk">Mobile STK: A port of STK for mobile devices by Georg Essl and Michael Rohs</A>
|
- <A HREF="http://sourceforge.net/projects/mobilestk">Mobile STK: A port of STK for mobile devices by Georg Essl and Michael Rohs</A>
|
||||||
|
|
||||||
- <A HREF="http://chuck.cs.princeton.edu/">ChucK: Concurrent, On-the-fly Audio Programming Language</A> using STK unit generators
|
- <A HREF="http://chuck.cs.princeton.edu/">ChucK: Concurrent, On-the-fly Audio Programming Language</A> using STK unit generators
|
||||||
|
|
||||||
- <A HREF="http://www.music.princeton.edu/paul/stkugens.tar.gz">Paul Lansky's port of STK to SuperCollider</A>
|
- <A HREF="http://kern.ccarh.org">Kern Scores: A Library of Electronic Musical Scores</A> (with automatic conversion to SKINI format)
|
||||||
|
|
||||||
- <A HREF="http://kern.humdrum.net/">Kern Scores: A Library of Electronic Musical Scores</A> (with automatic conversion to SKINI format)
|
|
||||||
|
|
||||||
- <A HREF="http://stk.sapp.org/midi2skini">MIDI to SKINI file converter</A> by Craig Sapp
|
- <A HREF="http://stk.sapp.org/midi2skini">MIDI to SKINI file converter</A> by Craig Sapp
|
||||||
|
|
||||||
- <A HREF="http://stk.sapp.org/kern2skini">Kern Score to SKINI file converter</A> by Craig Sapp
|
- <A HREF="http://extra.humdrum.org/example/kern2skini/">Kern Score to SKINI file converter</A> by Craig Sapp
|
||||||
|
|
||||||
- <A HREF="http://www.artassault.org/software/software.html">Calico - A Polyphonic Score File Parser for STK</A> by Greg Kellum
|
|
||||||
|
|
||||||
- <A HREF="http://www.music.columbia.edu/PeRColate/">PeRColate: A Port of STK for Max/MSP</A>
|
- <A HREF="http://www.music.columbia.edu/PeRColate/">PeRColate: A Port of STK for Max/MSP</A>
|
||||||
|
|
||||||
- <A HREF="http://mathmorphs.swiki.net/32/">A Partial Port of STK to Squeak</A>
|
|
||||||
|
|
||||||
- <a href="http://airy.andre.online.fr/AU/index.html">AUStk: a demo of integration of STK instruments into an AudioUnit</a> by Airy Andre
|
- <a href="http://airy.andre.online.fr/AU/index.html">AUStk: a demo of integration of STK instruments into an AudioUnit</a> by Airy Andre
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ We have written this program to accept control messages from \c STDIN. Assuming
|
|||||||
threebees < scores/bachfugue.ski
|
threebees < scores/bachfugue.ski
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
For more fun, surf to <A HREF="http://kern.humdrum.net/">Kern Scores</A> for a huge assortment of other scorefiles that can be downloaded in the SKINI format.
|
For more fun, surf to <A HREF="http://kern.ccarh.org/">Kern Scores</A> for a huge assortment of other scorefiles that can be downloaded in the SKINI format.
|
||||||
|
|
||||||
Another easy extension would be to add the \c stk::Messager::startMidiInput() function to the program and then play the instruments via a MIDI keyboard.
|
Another easy extension would be to add the \c stk::Messager::startMidiInput() function to the program and then play the instruments via a MIDI keyboard.
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<B>General:</B>
|
<B>General:</B>
|
||||||
<UL>
|
<UL>
|
||||||
<LI>A MIDI interface to use MIDI input/output controls. (NOTE: This may be built into the soundcard on your computer.)</LI>
|
<LI>A MIDI interface to use MIDI input/output controls. (NOTE: This may be built into the soundcard on your computer.)</LI>
|
||||||
<LI><A HREF="http://dev.scriptics.com">Tcl/Tk</A> version 8.0 or higher to use the simple Tcl/Tk GUIs provided with the STK distribution (available free over the WWW for all supported realtime platforms).</LI>
|
<LI><A HREF="https://www.tcl.tk/">Tcl/Tk</A> version 8.0 or higher to use the simple Tcl/Tk GUIs provided with the STK distribution (available free over the WWW for all supported realtime platforms).</LI>
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<B>Linux (specific):</B>
|
<B>Linux (specific):</B>
|
||||||
@@ -17,17 +17,16 @@
|
|||||||
<UL>
|
<UL>
|
||||||
<LI>A C++ compiler is not installed by default with OS X. It is necessary to download the Developer Kit from the Apple WWW site in order to compile STK or load it from the installation CD-ROM.</LI>
|
<LI>A C++ compiler is not installed by default with OS X. It is necessary to download the Developer Kit from the Apple WWW site in order to compile STK or load it from the installation CD-ROM.</LI>
|
||||||
<LI>If you experience frequent audio input/output "glitches", try increasing the RT_BUFFER_SIZE specified in Stk.h.</LI>
|
<LI>If you experience frequent audio input/output "glitches", try increasing the RT_BUFFER_SIZE specified in Stk.h.</LI>
|
||||||
<LI>The tcl/tk interpreter does not ship by default with OS X and must be downloaded from the internet. The latest Tcl/Tk Aqua distribution (http://www.apple.com/downloads/macosx/unix_open_source/tcltk.html) has been successfully tested on 10.2 and 10.3 systems. The default installation will place a link to the wish interpretor at /usr/bin/wish.
|
<LI>The Tcl/Tk interpreter does not ship by default with OS X and must be downloaded from the internet. The latest Tcl/Tk Aqua distribution (http://www.apple.com/downloads/macosx/unix_open_source/tcltk.html) has been successfully tested on 10.2 and 10.3 systems. The default installation will place a link to the wish interpretor at /usr/bin/wish.
|
||||||
|
|
||||||
It appears that socket support in Tcl/Tk uses the Nagle algorithm, which produces poor response between changes made in the tcl/tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script.</LI>
|
It appears that socket support in Tcl/Tk uses the Nagle algorithm, which produces poor response between changes made in the Tcl/Tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script.</LI>
|
||||||
|
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<B>Windows95/98/2000/XP/7 (specific):</B>
|
<B>Windows95 and later (specific):</B>
|
||||||
<UL>
|
<UL>
|
||||||
<LI>A soundcard to use realtime audio input/output capabilities. In order to use the <I><B>effects</B></I> project, the soundcard and drivers must support full duplex mode.</LI>
|
<LI>A soundcard to use realtime audio input/output capabilities. In order to use the <I><B>effects</B></I> project, the soundcard and drivers must support full duplex mode.</LI>
|
||||||
<LI><A HREF="http://www.microsoft.com/directx/">DirectX</A> 5.0 (or higher) runtime libraries.</LI>
|
<LI><A HREF="http://www.microsoft.com/directx/">DirectX</A> 5.0 (or higher) runtime libraries.</LI>
|
||||||
<LI>Visual C++ .NET or MinGW for compiling.</LI>
|
|
||||||
<LI>For compiling the source (if not already in your system): <UL><LI><A HREF="Misc/dsound.h">dsound.h</A> header file (DirectX 6.1) - put somewhere in your header search path</LI><LI><A HREF="Misc/dsound.lib">dsound.lib</A> library file (DirectX 6.1) - put somewhere in your library search path</LI></UL></LI>
|
<LI>For compiling the source (if not already in your system): <UL><LI><A HREF="Misc/dsound.h">dsound.h</A> header file (DirectX 6.1) - put somewhere in your header search path</LI><LI><A HREF="Misc/dsound.lib">dsound.lib</A> library file (DirectX 6.1) - put somewhere in your library search path</LI></UL></LI>
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
/*! \page tutorial Tutorial
|
/*! \page tutorial Tutorial
|
||||||
|
|
||||||
The Synthesis ToolKit is a set of C++ classes. In order to go beyond the simple example programs we provide, it is necessary to know some basics about programming in C and C++. STK's "target audience" includes people who:
|
The Synthesis ToolKit is a set of C++ classes. In order to go beyond the simple example programs we provide, it is necessary to know some basics about programming in C and C++. STK's "target audience" includes people who:
|
||||||
<UL>
|
- want to create audio DSP and/or synthesis programs
|
||||||
<LI>want to create audio DSP and/or synthesis programs</LI>
|
- want to use our unit generators and input/output routines rather than code their own
|
||||||
<LI>want to use our unit generators and input/output routines rather than code their own</LI>
|
- want to learn about synthesis and processing algorithms
|
||||||
<LI>want to learn about synthesis and processing algorithms</LI>
|
- wish to teach real-time synthesis and processing and wish to use some of our classes and examples
|
||||||
<LI>wish to teach real-time synthesis and processing and wish to use some of our classes and examples</LI>
|
|
||||||
</UL>
|
|
||||||
|
|
||||||
Most ToolKit programmers will likely end up writing a class or two for their own particular needs, but this task is typically simplified by making use of pre-existing STK classes (filters, oscillators, etc.).
|
Most ToolKit programmers will likely end up writing a class or two for their own particular needs, but this task is typically simplified by making use of pre-existing STK classes (filters, oscillators, etc.).
|
||||||
|
|
||||||
|
|||||||
@@ -32,19 +32,21 @@ The top level distribution contains the following directories:
|
|||||||
This release of STK comes with four separate "project" directories:
|
This release of STK comes with four separate "project" directories:
|
||||||
|
|
||||||
<OL>
|
<OL>
|
||||||
<LI> The <I><B>demo</B></I> project is used to demonstrate nearly all of the STK instruments. The <I><B>demo</B></I> program has been written to allow a variety of control input and sound data output options. Simple graphical user interfaces (GUIs) are also provided.<P></LI>
|
<LI> The <I><B>demo</B></I> project is used to demonstrate nearly all of the STK instruments. The <I><B>stk-demo</B></I> program has been written to allow a variety of control input and sound data output options. Simple graphical user interfaces (GUIs) are also provided.<P></LI>
|
||||||
|
|
||||||
<LI> The <I><B>effects</B></I> project demonstrates realtime duplex mode (simultaneous audio input and output) operation, when available, as well as various delay-line based effects algorithms.<P></LI>
|
<LI> The <I><B>effects</B></I> project demonstrates realtime duplex mode (simultaneous audio input and output) operation, when available, as well as various delay-line based effects algorithms.<P></LI>
|
||||||
|
|
||||||
<LI> The <I><B>ragamatic</B></I> project is just cool. Fire it up and be enlightened.<P></LI>
|
<LI> The <I><B>ragamatic</B></I> project is just cool. Fire it up and be enlightened.<P></LI>
|
||||||
|
|
||||||
|
<LI> The <I><B>eguitar</B></I> project demonstrates how to make an electric guitar with feedback and distortion.<P></LI>
|
||||||
|
|
||||||
<LI> The <I><B>examples</B></I> project contains several simple programs that demonstrate audio input/output, including the audio internet streaming classes, as well as most of the tutorial programs.</LI>
|
<LI> The <I><B>examples</B></I> project contains several simple programs that demonstrate audio input/output, including the audio internet streaming classes, as well as most of the tutorial programs.</LI>
|
||||||
</OL>
|
</OL>
|
||||||
|
|
||||||
\section compiling Compiling:
|
\section compiling Compiling:
|
||||||
|
|
||||||
<UL>
|
<UL>
|
||||||
<LI><B>Windows95/98/2000/XP/7:</B> Realtime support is available using either DirectSound or ASIO audio drivers. For DirectSound support, use the <TT>__WINDOWS_DS__</TT> preprocessor definition and link with the <TT>dsound.lib</TT>, <TT>winmm.lib</TT>, and <TT>Wsock32.lib</TT> libraries. For ASIO support, use the <TT>__WINDOWS_ASIO__</TT> preprocessor definition, include all the files in the <TT>src/asio/</TT> directory (i.e. <TT>asio.h,cpp</TT>, <TT>asiodrivers.h,cpp</TT>, ...), and link with the <TT>winmm.lib</TT>, and <TT>Wsock32.lib</TT> libraries. In addition, the <TT>__LITTLE_ENDIAN__</TT> and <TT>__WINDOWS_MM__</TT> preprocessor definitions are necessary for all Windows systems (RtMidi uses the Windows MultiMedia MIDI API). Visual C++ .NET project files are provided in each project directory. As well, the MinGW compiler is supported (see below). It is important to link with the non-debug libraries when compiling "release" program versions and debug libraries when compiling "debug" program versions.</LI>
|
<LI><B>Windows95 and later:</B> For specifics on creating Windows applications using Visual Studio, see README-Win.txt.</LI>
|
||||||
|
|
||||||
<LI><B>Unix (and MinGW) Systems:</B> A GNU <TT>configure</TT> shell script is included in the distribution for unix-based systems. From the top-level distribution directory, type <TT>'./configure'</TT> and the script will create <TT>Makefiles</TT> in each project directory specific to the characteristics of the host computer. Then from within any given project directory (example <TT>demo</TT>), type <TT>'make'</TT> to compile the project. In addition, an STK library can be compiled from within the <TT>src</TT> directory.
|
<LI><B>Unix (and MinGW) Systems:</B> A GNU <TT>configure</TT> shell script is included in the distribution for unix-based systems. From the top-level distribution directory, type <TT>'./configure'</TT> and the script will create <TT>Makefiles</TT> in each project directory specific to the characteristics of the host computer. Then from within any given project directory (example <TT>demo</TT>), type <TT>'make'</TT> to compile the project. In addition, an STK library can be compiled from within the <TT>src</TT> directory.
|
||||||
|
|
||||||
@@ -55,7 +57,9 @@ Several options can be supplied to the <TT>configure</TT> script to customize th
|
|||||||
<LI><TT>--with-alsa</TT> to choose native ALSA API support (default, linux only)</LI>
|
<LI><TT>--with-alsa</TT> to choose native ALSA API support (default, linux only)</LI>
|
||||||
<LI><TT>--with-oss</TT> to choose native OSS audio API support (linux only, no native OSS MIDI support)</LI>
|
<LI><TT>--with-oss</TT> to choose native OSS audio API support (linux only, no native OSS MIDI support)</LI>
|
||||||
<LI><TT>--with-jack</TT> to choose native JACK API support (linux and Macintosh OS-X)</LI>
|
<LI><TT>--with-jack</TT> to choose native JACK API support (linux and Macintosh OS-X)</LI>
|
||||||
<LI><TT>--with-core</TT> to choose Core Audio API support (Macintosh OS-X)</LI>
|
<LI><TT>--with-core</TT> to choose CoreAudio API support (Macintosh OS-X)</LI>
|
||||||
|
<LI><TT>--with-asio</TT> to choose ASIO Audio API support (Windows)</LI>
|
||||||
|
<LI><TT>--with-ds</TT> to choose Windows DirectSound Audio API support (Windows)</LI>
|
||||||
</UL>
|
</UL>
|
||||||
<P>
|
<P>
|
||||||
Note that it is possible to specify as many of the "--with-" options as desired to compile multi-API support. In addition, it is possible to specify the location of the STK rawwaves and the STK include path as follows:
|
Note that it is possible to specify as many of the "--with-" options as desired to compile multi-API support. In addition, it is possible to specify the location of the STK rawwaves and the STK include path as follows:
|
||||||
@@ -71,7 +75,7 @@ For those who wish to create their own system-specific <TT>Makefiles</TT>:
|
|||||||
<UL>
|
<UL>
|
||||||
<LI><B>Linux:</B> Realtime audio support is enabled with either the <TT>__LINUX_ALSA__</TT>, <TT>__UNIX_JACK__</TT>, and/or <TT>__LINUX_OSS__</TT> preprocessor definitions, which are used to select the underlying audio system API(s). Because the ALSA library is now integrated into the standard Linux kernel, it is the default audio/MIDI API with STK versions 4.2 and higher. The <TT>__LINUX_ALSASEQ__</TT> preprocessor definition must be included for MIDI support. Note that native OSS MIDI support no longer exists in RtMidi. If the <TT>__LINUX_OSS__</TT> preprocessor definition is specified, only OSS (version 4.0) audio support will be compiled and RtMidi will still be compiled using the ALSA API (assuming the <TT>__LINUX_ALSASEQ__</TT> definition is defined). For this reason, STK now requires the <TT>asound</TT> library for realtime support. Realtime programs must also link with the <TT>pthread</TT> library. In addition, the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition is necessary if compiling on a little-endian system. See the README-Linux file for further system configuration information.</LI>
|
<LI><B>Linux:</B> Realtime audio support is enabled with either the <TT>__LINUX_ALSA__</TT>, <TT>__UNIX_JACK__</TT>, and/or <TT>__LINUX_OSS__</TT> preprocessor definitions, which are used to select the underlying audio system API(s). Because the ALSA library is now integrated into the standard Linux kernel, it is the default audio/MIDI API with STK versions 4.2 and higher. The <TT>__LINUX_ALSASEQ__</TT> preprocessor definition must be included for MIDI support. Note that native OSS MIDI support no longer exists in RtMidi. If the <TT>__LINUX_OSS__</TT> preprocessor definition is specified, only OSS (version 4.0) audio support will be compiled and RtMidi will still be compiled using the ALSA API (assuming the <TT>__LINUX_ALSASEQ__</TT> definition is defined). For this reason, STK now requires the <TT>asound</TT> library for realtime support. Realtime programs must also link with the <TT>pthread</TT> library. In addition, the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition is necessary if compiling on a little-endian system. See the README-Linux file for further system configuration information.</LI>
|
||||||
|
|
||||||
<LI><B>Macintosh OS X:</B> Realtime support is enabled with the <TT>__MACOSX_CORE__</TT> and <TT>__UNIX_JACK__</TT> preprocessor definitions, which incorporate the CoreAudio audio/MIDI API and/or the JACK API. Realtime programs must also link with the <TT>pthread</TT> library and the <TT>CoreAudio</TT>, <TT>CoreMIDI</TT>, and <TT>CoreFoundation</TT> frameworks (for Core Audio support) and/or the JACK library. See the README-MacOSX file for further system configuration information.</LI>
|
<LI><B>Macintosh OS X:</B> Realtime support is enabled with the <TT>__MACOSX_CORE__</TT> and <TT>__UNIX_JACK__</TT> preprocessor definitions, which incorporate the CoreAudio audio/MIDI API and/or the JACK API. Realtime programs must also link with the <TT>pthread</TT> library and the <TT>CoreAudio</TT>, <TT>CoreMIDI</TT>, and <TT>CoreFoundation</TT> frameworks (for CoreAudio support) and/or the JACK library. See the README-MacOSX file for further system configuration information.</LI>
|
||||||
|
|
||||||
<LI><B>Generic (non-realtime):</B> Most STK classes are operating system <I>independent</I> and can be compiled using any current C++ compiler. STK assumes big-endian host byte order by default, so if your system is little-endian (i.e. Intel processor), you must provide the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition to your compiler. The <I><B>demo</B></I> project will compile without realtime support, allowing the use of SKINI scorefiles for input control and output to a variety of soundfile formats. The following classes <I>cannot</I> be used without realtime support: RtAudio, RtWvIn, RtWvOut, RtDuplex, RtMidi, Socket, Thread, Mutex, TcpWvIn, TcpWvOut. Because of this, it is not possible to compile the <I><B>effects</B></I>, <I><B>ragamatic</B></I>, and most of the <I><B>examples</B></I> projects for non-realtime use.</LI>
|
<LI><B>Generic (non-realtime):</B> Most STK classes are operating system <I>independent</I> and can be compiled using any current C++ compiler. STK assumes big-endian host byte order by default, so if your system is little-endian (i.e. Intel processor), you must provide the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition to your compiler. The <I><B>demo</B></I> project will compile without realtime support, allowing the use of SKINI scorefiles for input control and output to a variety of soundfile formats. The following classes <I>cannot</I> be used without realtime support: RtAudio, RtWvIn, RtWvOut, RtDuplex, RtMidi, Socket, Thread, Mutex, TcpWvIn, TcpWvOut. Because of this, it is not possible to compile the <I><B>effects</B></I>, <I><B>ragamatic</B></I>, and most of the <I><B>examples</B></I> projects for non-realtime use.</LI>
|
||||||
</UL>
|
</UL>
|
||||||
@@ -87,11 +91,10 @@ All STK programs in this distribution take input control data in the form of <A
|
|||||||
<OL>
|
<OL>
|
||||||
<LI>Redirect or pipe SKINI scorefiles to an executable.</LI>
|
<LI>Redirect or pipe SKINI scorefiles to an executable.</LI>
|
||||||
<LI>Pipe realtime SKINI input messages to an executable (not possible under Windows95/98).</LI>
|
<LI>Pipe realtime SKINI input messages to an executable (not possible under Windows95/98).</LI>
|
||||||
<LI>Socket realtime SKINI input messages to an executable.</LI>
|
|
||||||
<LI>Acquire realtime MIDI messages from a MIDI port on your computer.</LI>
|
<LI>Acquire realtime MIDI messages from a MIDI port on your computer.</LI>
|
||||||
</OL>
|
</OL>
|
||||||
|
|
||||||
<A HREF="http://dev.scriptics.com">Tcl/Tk</A> graphical user interfaces (GUI) are provided with this distribution that can generate realtime SKINI messages. Note that the Messager class allows multiple simultaneous socket client connections, together with MIDI and/or piped input. The <I><B>Md2Skini</B></I> program (in the <I><B>demo</B></I> directory) is mostly obsolete but can be used to create SKINI scorefiles from realtime MIDI input.
|
<A HREF="https://www.tcl.tk/">Tcl/Tk</A> graphical user interfaces (GUI) are provided with this distribution that can generate realtime SKINI messages. Note that the Messager class allows multiple simultaneous socket client connections, together with MIDI and/or piped input. The <I><B>Md2Skini</B></I> program (in the <I><B>demo</B></I> directory) is mostly obsolete but can be used to create SKINI scorefiles from realtime MIDI input.
|
||||||
|
|
||||||
|
|
||||||
\section voices Demo: STK Instruments
|
\section voices Demo: STK Instruments
|
||||||
@@ -131,23 +134,23 @@ The <I><B>demo</B></I> project demonstrates the behavior of all the distributed
|
|||||||
|
|
||||||
See the information above with respect to compiling STK for non-realtime use.
|
See the information above with respect to compiling STK for non-realtime use.
|
||||||
|
|
||||||
In non-realtime mode, it is assumed that input control messages are provided from a SKINI scorefile and that audio output is written to a soundfile (.snd, .wav, .aif, .mat, .raw). A number of SKINI scorefiles are provided in the <I>scores</I> directory of the <I><B>demo</B></I> project. Assuming a successful compilation of the <I><B>demo</B></I> program, typing:
|
In non-realtime mode, it is assumed that input control messages are provided from a SKINI scorefile and that audio output is written to a soundfile (.snd, .wav, .aif, .mat, .raw). A number of SKINI scorefiles are provided in the <I>scores</I> directory of the <I><B>demo</B></I> project. Assuming a successful compilation of the <I><B>stk-demo</B></I> program, typing:
|
||||||
|
|
||||||
\code
|
\code
|
||||||
demo BeeThree -ow myfile.wav -if scores/bookert.ski
|
stk-demo BeeThree -ow myfile.wav -if scores/bookert.ski
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
from the <I><B>demo</B></I> directory will play the scorefile <I>bookert.ski</I> using the STK BeeThree instrument and write the resulting audio data to a WAV formatted soundfile called "myfile.wav" (note that you may need to append <TT>./</TT> to the program name if your default shell setup is not set to look in the current directory). Typing <TT>demo</TT> without any arguments will provide a full program usage description.
|
from the <I><B>demo</B></I> directory will play the scorefile <I>bookert.ski</I> using the STK BeeThree instrument and write the resulting audio data to a WAV formatted soundfile called "myfile.wav" (note that you may need to append <TT>./</TT> to the program name if your default shell setup is not set to look in the current directory). Typing <TT>stk-demo</TT> without any arguments will provide a full program usage description.
|
||||||
|
|
||||||
|
|
||||||
\section rt Demo: Realtime Use
|
\section rt Demo: Realtime Use
|
||||||
|
|
||||||
STK realtime audio and MIDI input/output and realtime SKINI control input via socketing support is provided for Linux, Mac OS-X, and Windows95/98/2000/XP operating systems. STK realtime SKINI control input via piping is possible under Linux, Mac OS X, and Windows2000/XP only.
|
STK realtime audio and MIDI input/output and realtime SKINI control input via socketing support is provided for Linux, Mac OS-X, and Windows95 and later operating systems. STK realtime SKINI control input via piping is possible under Linux, Mac OS X, and Windows2000 and later only.
|
||||||
<P>
|
<P>
|
||||||
Control input and audio output options are typically specified as command-line arguments to STK programs. For example, the <I><B>demo</B></I> program is invoked as:
|
Control input and audio output options are typically specified as command-line arguments to STK programs. For example, the <I><B>stk-demo</B></I> program is invoked as:
|
||||||
|
|
||||||
\code
|
\code
|
||||||
demo instrument flags
|
stk-demo instrument flags
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
where instruments include those described above and flags can be any or all of:
|
where instruments include those described above and flags can be any or all of:
|
||||||
@@ -158,56 +161,45 @@ where instruments include those described above and flags can be any or all of:
|
|||||||
<LI><I>-om \<file name\></I> for MAT-file output,</LI>
|
<LI><I>-om \<file name\></I> for MAT-file output,</LI>
|
||||||
<LI><I>-if \<file name\></I> for a SKINI formatted control file,</LI>
|
<LI><I>-if \<file name\></I> for a SKINI formatted control file,</LI>
|
||||||
<LI><I>-ip</I> for realtime SKINI control input via piping,</LI>
|
<LI><I>-ip</I> for realtime SKINI control input via piping,</LI>
|
||||||
<LI><I>-is \<port\></I> for realtime SKINI control input via socketing (with an optional port number),</LI>
|
|
||||||
<LI><I>-im \<port\></I> for MIDI control input (with optional port, -1 = virtual port where possible),</LI>
|
<LI><I>-im \<port\></I> for MIDI control input (with optional port, -1 = virtual port where possible),</LI>
|
||||||
<LI><I>-s RATE</I> to specify a sample rate,</LI>
|
<LI><I>-s RATE</I> to specify a sample rate,</LI>
|
||||||
<LI><I>-n NUMBER</I> to specify multivoice polyphony</LI>
|
<LI><I>-n NUMBER</I> to specify multivoice polyphony</LI>
|
||||||
</UL>
|
</UL>
|
||||||
The <i>-ip</i> and <i>-is</i> flags must be used when piping or socketing realtime SKINI control data to an STK program. The <i>-im</i> flag must be used to read MIDI control input from your MIDI port. Note that you can use all three input types simultaneously.
|
The <i>-ip</i> flag must be used when piping realtime SKINI control data to an STK program. The <i>-im</i> flag must be used to read MIDI control input from your MIDI port. Note that you can use both input types simultaneously.
|
||||||
|
|
||||||
Assuming a successful compilation of the <I><B>demo</B></I> program, typing:
|
Assuming a successful compilation of the <I><B>stk-demo</B></I> program, typing:
|
||||||
|
|
||||||
\code
|
\code
|
||||||
demo BeeThree -or -if scores/bookert.ski
|
stk-demo BeeThree -or -if scores/bookert.ski
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
from the <I><B>demo</B></I> directory will play the scorefile <I>bookert.ski</I> using the STK BeeThree instrument and stream the resulting audio data in realtime to the audio output channel of your computer. Typing <TT>demo</TT> without any arguments will provide a full program usage description.
|
from the <I><B>demo</B></I> directory will play the scorefile <I>bookert.ski</I> using the STK BeeThree instrument and stream the resulting audio data in realtime to the audio output channel of your computer. Typing <TT>stk-demo</TT> without any arguments will provide a full program usage description.
|
||||||
|
|
||||||
|
|
||||||
\section tcl Realtime Control Input using Tcl/Tk Graphical User Interfaces:
|
\section tcl Realtime Control Input using Tcl/Tk Graphical User Interfaces:
|
||||||
|
|
||||||
There are a number of <A HREF="http://dev.scriptics.com">Tcl/Tk</A> GUIs supplied with the STK projects. These scripts require Tcl/Tk version 8.0 or later, which can be downloaded for free over the WWW. On Unix and Windows2000/XP platforms, you can run the various executable scripts (e.g. StkDemo.bat) provided with each project to start everything up (you may need to symbolically link the wishXX executable to the name <I>wish</I>). The Physical.bat script just implements the following command-line sequence:
|
There are a number of <A HREF="https://www.tcl.tk/">Tcl/Tk</A> GUIs supplied with the STK projects. These scripts require Tcl/Tk version 8.0 or later, which can be downloaded for free over the WWW. On Unix and Windows2000 and later platforms, you can run the various executable scripts (e.g. StkDemo.bat) provided with each project to start everything up (you may need to symbolically link the wishXX executable to the name <I>wish</I>). The Physical.bat script just implements the following command-line sequence:
|
||||||
|
|
||||||
\code
|
\code
|
||||||
wish < tcl/Physical.tcl | demo Clarinet -or -ip
|
wish < tcl/Physical.tcl | stk-demo Clarinet -or -ip
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
On WindowsXX and Unix platforms, the following operations are necessary to establish a socket connection between the Tcl/Tk GUI and the STK program:
|
|
||||||
<OL>
|
|
||||||
<LI>Open a DOS shell and start the STK program with the <I>-is</I> flag (ex. <I><B>demo Clarinet -or -is</B></I>).</LI>
|
|
||||||
<LI>Open the Tcl/Tk GUI (e.g. tcl/Physical.tcl) by double-clicking on it, or type <TT>wish < tcl/Physical.tcl</TT> in another DOS shell.</LI>
|
|
||||||
<LI>Establish the socket connection by selecting <I>Socket</I> under the Communications menu item in the Tcl/Tk GUI.</LI>
|
|
||||||
</OL>
|
|
||||||
|
|
||||||
Note that it is possible to specify a hostname when establishing the socket connection from the socket client. Thus, the STK socket server program and the Tcl/Tk GUI need not necessarily reside on the same computer.
|
|
||||||
|
|
||||||
|
|
||||||
\section midi Realtime MIDI Control Input:
|
\section midi Realtime MIDI Control Input:
|
||||||
|
|
||||||
On all supported realtime platforms, you can direct realtime MIDI input to the STK Clarinet by typing:
|
On all supported realtime platforms, you can direct realtime MIDI input to the STK Clarinet by typing:
|
||||||
|
|
||||||
\code
|
\code
|
||||||
demo Clarinet -or -im
|
stk-demo Clarinet -or -im
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
This will attempt to use the default MIDI port for input. An optional MIDI port number can be specified after the <TT>-im</TT> flag. Valid MIDI ports are numbered from 0 (default) and higher. On Linux and Macintosh OS-X systems, it is possible to open a virtual MIDI input port (that other software applications can connect to) by specifying a port identifier of -1.
|
This will attempt to use the default MIDI port for input. An optional MIDI port number can be specified after the <TT>-im</TT> flag. Valid MIDI ports are numbered from 0 (default) and higher. On Linux and Macintosh OS-X systems, it is possible to open a virtual MIDI input port (that other software applications can connect to) by specifying a port identifier of -1.
|
||||||
|
|
||||||
\section polyphony Polyphony:
|
\section polyphony Polyphony:
|
||||||
|
|
||||||
The <I><B>demo</B></I> program supports an arbitrary number of voices via the <TT>-n NUMBER</TT> command-line flag and argument. For example, you can play eight BeeThree instruments with realtime output and control them from a MIDI device by typing:
|
The <I><B>stk-demo</B></I> program supports an arbitrary number of voices via the <TT>-n NUMBER</TT> command-line flag and argument. For example, you can play eight BeeThree instruments with realtime output and control them from a MIDI device by typing:
|
||||||
|
|
||||||
\code
|
\code
|
||||||
demo BeeThree -n 8 -or -im
|
stk-demo BeeThree -n 8 -or -im
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
STK: A ToolKit of Audio Synthesis Classes and Instruments in C++
|
STK: A ToolKit of Audio Synthesis Classes and Instruments in C++
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995-2011.
|
By Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
|
|
||||||
STK Classes - See the HTML documentation in the html directory for complete information.
|
STK Classes - See the HTML documentation in the html directory for complete information.
|
||||||
|
|
||||||
@@ -27,12 +27,14 @@ Stk -| UdpSocket
|
|||||||
|
|
|
|
||||||
|- StkFrames
|
|- StkFrames
|
||||||
|
|
|
|
||||||
|- Effect - (Echo, Chorus, PitShift, PRCRev, JCRev, NRev)
|
|- Effect - (Echo, Chorus, PitShift, LentPitShift, PRCRev, JCRev, NRev, FreeVerb)
|
||||||
|
|
|
|
||||||
|- Voicer, Message, Skini, MidiFileIn, Phonemes, Sphere, Vector3D
|
|- Voicer, Message, Skini, MidiFileIn, Phonemes, Sphere, Vector3D
|
||||||
|
|
|
|
||||||
|- Messager
|
|- Messager
|
||||||
|
|
|
|
||||||
|
|- Twang, Guitar
|
||||||
|
|
|
||||||
| .- FM - (HevyMetl, PercFlut, Rhodey, Wurley, TubeBell, BeeThree, FMVoices)
|
| .- FM - (HevyMetl, PercFlut, Rhodey, Wurley, TubeBell, BeeThree, FMVoices)
|
||||||
| |
|
| |
|
||||||
| |- Modal - ModalBar
|
| |- Modal - ModalBar
|
||||||
@@ -43,11 +45,11 @@ Stk -| UdpSocket
|
|||||||
| |
|
| |
|
||||||
| |- Resonate
|
| |- Resonate
|
||||||
| |
|
| |
|
||||||
| |- PluckedTwo - Mandolin
|
| |- Mandolin
|
||||||
.- Instrmnt -|
|
.- Instrmnt -|
|
||||||
|- Drummer
|
|- Drummer
|
||||||
|
|
|
|
||||||
|- Clarinet, BlowHole, Saxofony, Flute, Brass, BlowBotl, Bowed, Plucked, StifKarp, Sitar
|
|- Clarinet, BlowHole, Saxofony, Flute, Brass, BlowBotl, Bowed, Plucked, StifKarp, Sitar, Recorder
|
||||||
|
|
|
|
||||||
|- Shakers
|
|- Shakers
|
||||||
|
|
|
|
||||||
@@ -115,45 +117,49 @@ Each class is listed either with some of the unit generators it uses,
|
|||||||
or in terms of the algorithm it implements. All inherit from Instrmnt,
|
or in terms of the algorithm it implements. All inherit from Instrmnt,
|
||||||
which inherits from Stk.
|
which inherits from Stk.
|
||||||
|
|
||||||
Simple.cpp Simple Instrument Pulse oscillator + resonant filtered noise
|
Simple.cpp Simple Instrument Pulse oscillator + resonant filtered noise
|
||||||
Plucked.cpp Basic Plucked String DelayA, OneZero, OnePole, Noise
|
Plucked.cpp Basic Plucked String DelayA, OneZero, OnePole, Noise
|
||||||
StifKarp.cpp Plucked String with Stiffness DelayA, DelayL, OneZero, BiQuad, Noise
|
Twang.cpp Not So Basic Pluck DelayL, DlineA, Fir, allows commuted synthesis
|
||||||
PluckTwo.cpp Not So Basic Pluck DelayL, DlineA, OneZero
|
Mandolin.cpp Commuted Mandolin 2 Twangs
|
||||||
Mandolin.cpp Commuted Mandolin <<flavor of PluckTwo>>
|
Guitar.cpp N-String Guitar N Twangs, bridge coupling, allows feedback and body filter
|
||||||
Bowed.cpp So So Bowed String DelayL, BowTabl, OnePole, BiQuad, WaveLoop, ADSR
|
StifKarp.cpp Plucked String with Stiffness DelayA, DelayL, OneZero, BiQuad, Noise
|
||||||
Brass.cpp Not So Bad Brass Instrument DelayA, BiQuad, PoleZero, ADSR, WaveLoop
|
Bowed.cpp So So Bowed String DelayL, BowTabl, OnePole, BiQuad, WaveLoop, ADSR
|
||||||
Clarinet.cpp Pretty Good Clarinet DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop
|
Brass.cpp Not So Bad Brass Instrument DelayA, BiQuad, PoleZero, ADSR, WaveLoop
|
||||||
BlowHole.cpp Clarinet w/ Tone & Vent Holes DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop, PoleZero
|
Clarinet.cpp Pretty Good Clarinet DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop
|
||||||
Saxofony.cpp A Faux Saxophone DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop
|
BlowHole.cpp Clarinet w/ Tone & Vent Holes DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop, PoleZero
|
||||||
Flute.cpp Pretty Good Flute JetTabl, DelayL, OnePole, PoleZero, Noise, ADSR, WaveLoop
|
Saxofony.cpp A Faux Saxophone DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop
|
||||||
BlowBotl.cpp Blown Bottle JetTabl, BiQuad, PoleZero, Noise, ADSR, WaveLoop
|
Flute.cpp Pretty Good Flute JetTabl, DelayL, OnePole, PoleZero, Noise, ADSR, WaveLoop
|
||||||
BandedWG.cpp Banded Waveguide Meta-Object Delay, BowTabl, ADSR, BiQuad
|
Recorder.cpp A More Physical Flute DelayL, IIR, Noise, ADSR, SineWave
|
||||||
Modal.cpp N Resonances Envelope, WaveLoop, BiQuad, OnePole
|
BlowBotl.cpp Blown Bottle JetTabl, BiQuad, PoleZero, Noise, ADSR, WaveLoop
|
||||||
ModalBar.cpp Various presets 4 Resonance Models
|
BandedWG.cpp Banded Waveguide Meta-Object Delay, BowTabl, ADSR, BiQuad
|
||||||
FM.cpp N Operator FM Master ADSR, WaveLoop, TwoZero
|
Modal.cpp N Resonances Envelope, WaveLoop, BiQuad, OnePole
|
||||||
HevyMetl.cpp Distorted FM Synthesizer 3 Cascade with FB Modulator
|
ModalBar.cpp Various presets 4 Resonance Models
|
||||||
PercFlut.cpp Percussive Flute 3 Cascade Operators
|
FM.cpp N Operator FM Master ADSR, WaveLoop, TwoZero
|
||||||
Rhodey.cpp Rhodes-Like Electric Piano 2 Parallel Simple FMs
|
HevyMetl.cpp Distorted FM Synthesizer 3 Cascade with FB Modulator
|
||||||
Wurley.cpp Wurlitzer Electric Piano 2 Parallel Simple FMs
|
PercFlut.cpp Percussive Flute 3 Cascade Operators
|
||||||
TubeBell.cpp Classic FM Bell 2 Parallel Simple FMs
|
Rhodey.cpp Rhodes-Like Electric Piano 2 Parallel Simple FMs
|
||||||
FMVoices.cpp 3 Formant FM Voice 3 Carriers Share 1 Modulator
|
Wurley.cpp Wurlitzer Electric Piano 2 Parallel Simple FMs
|
||||||
VoicForm.cpp 4 Formant Voice Synthesis FormSwep, SingWave, OnePole, OneZero, Envelope, Noise
|
TubeBell.cpp Classic FM Bell 2 Parallel Simple FMs
|
||||||
BeeThree.cpp Cheezy Additive Organ 4 Oscillators Additive
|
FMVoices.cpp 3 Formant FM Voice 3 Carriers Share 1 Modulator
|
||||||
Sampler.cpp Sampling Synthesizer 5 each ADSR, WvIn, WaveLoop, OnePole
|
VoicForm.cpp 4 Formant Voice Synthesis FormSwep, SingWave, OnePole, OneZero, Envelope, Noise
|
||||||
Moog.cpp Swept Filter Sampler with Swept Filter
|
BeeThree.cpp Cheezy Additive Organ 4 Oscillators Additive
|
||||||
Resonate.cpp Filtered Noise ADSR, BiQuad, Noise
|
Sampler.cpp Sampling Synthesizer 5 each ADSR, WvIn, WaveLoop, OnePole
|
||||||
Drummer.cpp Drum Synthesizer Bunch of WvIns, and OnePole
|
Moog.cpp Swept Filter Sampler with Swept Filter
|
||||||
Shakers.cpp PhISM statistical model for shakers and real-world sound effects
|
Resonate.cpp Filtered Noise ADSR, BiQuad, Noise
|
||||||
Mesh2D.cpp Two-dimensional, rectilinear digital waveguide mesh.
|
Drummer.cpp Drum Synthesizer Bunch of WvIns, and OnePole
|
||||||
Whistle.cpp Hybrid physical/spectral model of a police whistle.
|
Shakers.cpp PhISM statistical model for shakers and real-world sound effects
|
||||||
|
Mesh2D.cpp Two-dimensional, rectilinear digital waveguide mesh.
|
||||||
|
Whistle.cpp Hybrid physical/spectral model of a police whistle.
|
||||||
|
|
||||||
Effect.h Effects Processor Base Class
|
Effect.h Effects Processor Base Class
|
||||||
JCRev.cpp Chowning Reverberator 3 series allpass units, 4 parallel combs, 2 stereo delays
|
JCRev.cpp Chowning Reverberator 3 series allpass units, 4 parallel combs, 2 stereo delays
|
||||||
NRev.cpp Another famous CCRMA Reverb 8 allpass, 6 parallel comb filters
|
NRev.cpp Another famous CCRMA Reverb 8 allpass, 6 parallel comb filters
|
||||||
PRCRev.cpp Dirt Cheap Reverb by Cook 2 allpass, 2 comb filters
|
PRCRev.cpp Dirt Cheap Reverb by Cook 2 allpass, 2 comb filters
|
||||||
Flanger.cpp Flanger Effects Processor DelayL, WaveLoop
|
FreeVerb.cpp Jezar at Dreampoint's FreeVerb 4 allpass, 8 lowpass comb filters
|
||||||
Chorus.cpp Chorus Effects Processor DelayL, WaveLoop
|
Flanger.cpp Flanger Effects Processor DelayL, WaveLoop
|
||||||
PitShift.cpp Cheap Pitch Shifter DelayL
|
Chorus.cpp Chorus Effects Processor DelayL, WaveLoop
|
||||||
|
PitShift.cpp Cheap Pitch Shifter DelayL
|
||||||
|
LentPitShift.cpp Pitch Shifter based Lent Algorithm
|
||||||
|
|
||||||
|
|
||||||
*********** OTHER SUPPORT CLASSES AND FILES **************
|
*********** OTHER SUPPORT CLASSES AND FILES **************
|
||||||
@@ -168,7 +174,7 @@ effects.cpp Effects demonstration program
|
|||||||
ragamatic.cpp Nirvana just waiting to happen
|
ragamatic.cpp Nirvana just waiting to happen
|
||||||
|
|
||||||
Skini.cpp SKINI file/message parser object
|
Skini.cpp SKINI file/message parser object
|
||||||
SKINI.msg #defines for often used and universal MIDI/SKINI symbols
|
SKINImsg.h #defines for often used and universal MIDI/SKINI symbols
|
||||||
SKINI.tbl Table of SKINI messages
|
SKINItbl.h Table of SKINI messages
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
91
iOS/README-iOS.md
Normal file
91
iOS/README-iOS.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# Readme
|
||||||
|
|
||||||
|
* [Setup](#setup)
|
||||||
|
* [Usage](#usage)
|
||||||
|
* [Troubleshooting](#troubleshooting)
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
### [CocoaPods](https://cocoapods.org) (Recommended)
|
||||||
|
|
||||||
|
1. Add `pod 'STK', '~> 4.6'` to your Podfile.
|
||||||
|
|
||||||
|
1. Run `pod install`
|
||||||
|
|
||||||
|
### Manual
|
||||||
|
|
||||||
|
1. Clone or [download][download_link] the STK into your project's directory.
|
||||||
|
|
||||||
|
1. Open the **STK for iOS** folder, and drag and drop **STK.xcodeproj** into your Xcode project.
|
||||||
|
|
||||||
|
1. Open your project's settings, open the *Build Phases* tab. In the *Link Binary with Libraries* section, add **libSTK.a**.
|
||||||
|
![][linking_libSTK_screenshot]
|
||||||
|
|
||||||
|
1. In the *Dependencies* section, add "rawwaves"
|
||||||
|
|
||||||
|
1. In your project's settings, open the *Build Settings* tab. In the *Search Paths* section, double click on the field to the right of *Header Search Paths*, and add the path to the STK's **include** directory relative to your Xcode project's directory.
|
||||||
|
![][header_search_paths_screenshot]
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. Import the STK classes you require in your Objective-C source files (Swift does not yet support importing C++ code)
|
||||||
|
* E.g. `#import "SineWave.h"`
|
||||||
|
|
||||||
|
1. Change the extension of any Objective-C files that import STK files to **.mm**.
|
||||||
|
* E.g. **ViewController.m** —> **ViewController.mm**
|
||||||
|
|
||||||
|
1. If you use a class that makes use of raw wave files (such as `Mandolin`), make sure you call `Stk::setRawwavePath` beforehand in your code.
|
||||||
|
|
||||||
|
See the [iOS Demo project](..projects/demo/iOS%20Demo) for a sample usage.
|
||||||
|
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### 'FileName.h' file not found
|
||||||
|
|
||||||
|
If you get this error when `#import`ing an STK header, you have added the wrong header search path for the STK in your project's settings (see Step 4 in Setup)
|
||||||
|
|
||||||
|
The STK's header search path you need to add is the path to the STK's **include** directory relative to your project's directory (as if you were `cd`ing into it). For example, it is `stk/include/` if the stk directory is inside your project's directory, but it is `../stk/include/` if both share the same directory.
|
||||||
|
|
||||||
|
If this problem doesn't go away:
|
||||||
|
|
||||||
|
1. Delete **STK.xcodeproj** from your Xcode project
|
||||||
|
1. Move the STK directory within your project's directory.
|
||||||
|
1. Follow step 1 from **Setup**, add `stk/include` to the *Header Search Paths*.
|
||||||
|
|
||||||
|
If that doesn't solve it:
|
||||||
|
Install CocoaPods and use it to install the STK. It takes one minute and will make your life easier. Visit the [CocoaPods website](https://cocoapods.org) for installation instructions.
|
||||||
|
|
||||||
|
### FileRead::open: could not open or find file (../../rawwaves/filename.raw)!
|
||||||
|
|
||||||
|
If you use a class that makes use of raw waves (such as `Mandolin`, `Wurley`, or `Rhodey`) you need to make sure that the STK's raw wave files are copied into your bundle and that the STK knows where they are. You'll know you need to if you get this runtime error:
|
||||||
|
`FileRead::open: could not open or find file (../../rawwaves/filename.raw)!`
|
||||||
|
|
||||||
|
#### If you're using CocoaPods
|
||||||
|
|
||||||
|
Add this code before using a class that needs the raw waves:
|
||||||
|
```objective-c
|
||||||
|
stk::Stk::setRawwavePath([[[NSBundle mainBundle] pathForResource:@"rawwaves" ofType:@"bundle"] UTF8String]);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### If you're not using CocoaPods
|
||||||
|
|
||||||
|
1. Open your project's settings, open the *Build Phases* tab.
|
||||||
|
1. In the *Copy Bundle Resources*, drag and drop **rawwaves.bundle** (it's located in **STK.xcodeproj**'s **Helpers** folder).
|
||||||
|
1. Then add this code before using a class that needs the raw waves:
|
||||||
|
|
||||||
|
```objective-c
|
||||||
|
NSBundle *rawwaveBundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"rawwaves" withExtension:@"bundle"]];
|
||||||
|
stk::Stk::setRawwavePath([[rawwaveBundle resourcePath] UTF8String]);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Apple Mach-O Linker Error
|
||||||
|
|
||||||
|
This means that **STKLib.a** isn't being linked to your binary. Follow step 2 above in [Setup](#setup).
|
||||||
|
|
||||||
|
|
||||||
|
[download_link]: https://github.com/thestk/stk/archive/master.zip
|
||||||
|
[linking_libSTK_screenshot]: http://i.imgur.com/cLbGrtq.png
|
||||||
|
[header_search_paths_screenshot]: http://i.imgur.com/iBTC06h.png
|
||||||
|
[rawwaves_scheme_screenshot]: http://i.imgur.com/PKd7epf.png
|
||||||
1165
iOS/STK.xcodeproj/project.pbxproj
Normal file
1165
iOS/STK.xcodeproj/project.pbxproj
Normal file
File diff suppressed because it is too large
Load Diff
7
iOS/STK.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
iOS/STK.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "self:STK for iOS.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
||||||
10
iOS/demo/README.md
Normal file
10
iOS/demo/README.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
##iOS Demo Xcode project
|
||||||
|
|
||||||
|
This project briefly shows how to manually integrate the STK static library into an Xcode project. See the **README** file in the STK's `iOS` directory for precise instructions.
|
||||||
|
|
||||||
|
Currently, this project does not output sound, it only shows how to generate audio samples from the STK classes within an iOS project, and how to control STK objects via UI controls. These samples need to be fed into an audio engine for them to be heard.
|
||||||
|
|
||||||
|
Note the following:
|
||||||
|
|
||||||
|
* ViewController needs to be renamed with the **.mm** extension as it's importing STK files, which are C++.
|
||||||
|
* The header search paths in the *Build Settings* of **iOS Demo.xcodeproj** point to `../../include/` because the STK's `include` directory is two directories up relative to it.
|
||||||
571
iOS/demo/iOS Demo.xcodeproj/project.pbxproj
Normal file
571
iOS/demo/iOS Demo.xcodeproj/project.pbxproj
Normal file
@@ -0,0 +1,571 @@
|
|||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 46;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
B02FD53618C520D60009ECA9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B02FD53518C520D60009ECA9 /* Foundation.framework */; };
|
||||||
|
B02FD53818C520D60009ECA9 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B02FD53718C520D60009ECA9 /* CoreGraphics.framework */; };
|
||||||
|
B02FD53A18C520D60009ECA9 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B02FD53918C520D60009ECA9 /* UIKit.framework */; };
|
||||||
|
B02FD54018C520D60009ECA9 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = B02FD53E18C520D60009ECA9 /* InfoPlist.strings */; };
|
||||||
|
B02FD54218C520D60009ECA9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B02FD54118C520D60009ECA9 /* main.m */; };
|
||||||
|
B02FD54618C520D60009ECA9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B02FD54518C520D60009ECA9 /* AppDelegate.m */; };
|
||||||
|
B02FD54818C520D60009ECA9 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B02FD54718C520D60009ECA9 /* Images.xcassets */; };
|
||||||
|
B02FD54F18C520D70009ECA9 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B02FD54E18C520D70009ECA9 /* XCTest.framework */; };
|
||||||
|
B02FD55018C520D70009ECA9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B02FD53518C520D60009ECA9 /* Foundation.framework */; };
|
||||||
|
B02FD55118C520D70009ECA9 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B02FD53918C520D60009ECA9 /* UIKit.framework */; };
|
||||||
|
B02FD55918C520D70009ECA9 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = B02FD55718C520D70009ECA9 /* InfoPlist.strings */; };
|
||||||
|
B02FD55B18C520D70009ECA9 /* iOS_DemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B02FD55A18C520D70009ECA9 /* iOS_DemoTests.m */; };
|
||||||
|
B02FD57018C521560009ECA9 /* ViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = B02FD56F18C521560009ECA9 /* ViewController.mm */; };
|
||||||
|
B0779A8718D376F5004DA9B7 /* libSTK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B0779A8418D376A6004DA9B7 /* libSTK.a */; };
|
||||||
|
B0779A8B18D37C13004DA9B7 /* rawwaves.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B0779A8618D376A6004DA9B7 /* rawwaves.bundle */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXContainerItemProxy section */
|
||||||
|
834A47CB24435D350028575A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = B0779A7E18D376A5004DA9B7 /* STK.xcodeproj */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = B0EC337B18CB73480005787B;
|
||||||
|
remoteInfo = rawwaves;
|
||||||
|
};
|
||||||
|
B02FD55218C520D70009ECA9 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = B02FD52A18C520D60009ECA9 /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = B02FD53118C520D60009ECA9;
|
||||||
|
remoteInfo = "iOS Demo";
|
||||||
|
};
|
||||||
|
B0779A8318D376A6004DA9B7 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = B0779A7E18D376A5004DA9B7 /* STK.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B0AC5BEE18CB31DE00D860C0;
|
||||||
|
remoteInfo = STK;
|
||||||
|
};
|
||||||
|
B0779A8518D376A6004DA9B7 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = B0779A7E18D376A5004DA9B7 /* STK.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = B0EC33B718CB73A70005787B;
|
||||||
|
remoteInfo = rawwaves;
|
||||||
|
};
|
||||||
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
B02FD53218C520D60009ECA9 /* iOS Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
B02FD53518C520D60009ECA9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||||
|
B02FD53718C520D60009ECA9 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
||||||
|
B02FD53918C520D60009ECA9 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||||
|
B02FD53D18C520D60009ECA9 /* iOS Demo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iOS Demo-Info.plist"; sourceTree = "<group>"; };
|
||||||
|
B02FD53F18C520D60009ECA9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
B02FD54118C520D60009ECA9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||||
|
B02FD54318C520D60009ECA9 /* iOS Demo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS Demo-Prefix.pch"; sourceTree = "<group>"; };
|
||||||
|
B02FD54418C520D60009ECA9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
||||||
|
B02FD54518C520D60009ECA9 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
|
||||||
|
B02FD54718C520D60009ECA9 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||||
|
B02FD54D18C520D70009ECA9 /* iOS DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "iOS DemoTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
B02FD54E18C520D70009ECA9 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
|
||||||
|
B02FD55618C520D70009ECA9 /* iOS DemoTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iOS DemoTests-Info.plist"; sourceTree = "<group>"; };
|
||||||
|
B02FD55818C520D70009ECA9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
B02FD55A18C520D70009ECA9 /* iOS_DemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iOS_DemoTests.m; sourceTree = "<group>"; };
|
||||||
|
B02FD56E18C521560009ECA9 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
|
||||||
|
B02FD56F18C521560009ECA9 /* ViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ViewController.mm; sourceTree = "<group>"; };
|
||||||
|
B0779A7E18D376A5004DA9B7 /* STK.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = STK.xcodeproj; path = ../STK.xcodeproj; sourceTree = "<group>"; };
|
||||||
|
B0779A8918D37977004DA9B7 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = "<group>"; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
B02FD52F18C520D60009ECA9 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
B0779A8718D376F5004DA9B7 /* libSTK.a in Frameworks */,
|
||||||
|
B02FD53818C520D60009ECA9 /* CoreGraphics.framework in Frameworks */,
|
||||||
|
B02FD53A18C520D60009ECA9 /* UIKit.framework in Frameworks */,
|
||||||
|
B02FD53618C520D60009ECA9 /* Foundation.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
B02FD54A18C520D70009ECA9 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
B02FD54F18C520D70009ECA9 /* XCTest.framework in Frameworks */,
|
||||||
|
B02FD55118C520D70009ECA9 /* UIKit.framework in Frameworks */,
|
||||||
|
B02FD55018C520D70009ECA9 /* Foundation.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
B02FD52918C520D60009ECA9 = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B0779A8918D37977004DA9B7 /* README.md */,
|
||||||
|
B0779A7E18D376A5004DA9B7 /* STK.xcodeproj */,
|
||||||
|
B02FD53B18C520D60009ECA9 /* iOS Demo */,
|
||||||
|
B02FD55418C520D70009ECA9 /* iOS DemoTests */,
|
||||||
|
B02FD53418C520D60009ECA9 /* Frameworks */,
|
||||||
|
B02FD53318C520D60009ECA9 /* Products */,
|
||||||
|
);
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B02FD53318C520D60009ECA9 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B02FD53218C520D60009ECA9 /* iOS Demo.app */,
|
||||||
|
B02FD54D18C520D70009ECA9 /* iOS DemoTests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B02FD53418C520D60009ECA9 /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B02FD53518C520D60009ECA9 /* Foundation.framework */,
|
||||||
|
B02FD53718C520D60009ECA9 /* CoreGraphics.framework */,
|
||||||
|
B02FD53918C520D60009ECA9 /* UIKit.framework */,
|
||||||
|
B02FD54E18C520D70009ECA9 /* XCTest.framework */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B02FD53B18C520D60009ECA9 /* iOS Demo */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B02FD54418C520D60009ECA9 /* AppDelegate.h */,
|
||||||
|
B02FD54518C520D60009ECA9 /* AppDelegate.m */,
|
||||||
|
B02FD56E18C521560009ECA9 /* ViewController.h */,
|
||||||
|
B02FD56F18C521560009ECA9 /* ViewController.mm */,
|
||||||
|
B02FD54718C520D60009ECA9 /* Images.xcassets */,
|
||||||
|
B02FD53C18C520D60009ECA9 /* Supporting Files */,
|
||||||
|
);
|
||||||
|
path = "iOS Demo";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B02FD53C18C520D60009ECA9 /* Supporting Files */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B02FD53D18C520D60009ECA9 /* iOS Demo-Info.plist */,
|
||||||
|
B02FD53E18C520D60009ECA9 /* InfoPlist.strings */,
|
||||||
|
B02FD54118C520D60009ECA9 /* main.m */,
|
||||||
|
B02FD54318C520D60009ECA9 /* iOS Demo-Prefix.pch */,
|
||||||
|
);
|
||||||
|
name = "Supporting Files";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B02FD55418C520D70009ECA9 /* iOS DemoTests */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B02FD55A18C520D70009ECA9 /* iOS_DemoTests.m */,
|
||||||
|
B02FD55518C520D70009ECA9 /* Supporting Files */,
|
||||||
|
);
|
||||||
|
path = "iOS DemoTests";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B02FD55518C520D70009ECA9 /* Supporting Files */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B02FD55618C520D70009ECA9 /* iOS DemoTests-Info.plist */,
|
||||||
|
B02FD55718C520D70009ECA9 /* InfoPlist.strings */,
|
||||||
|
);
|
||||||
|
name = "Supporting Files";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B0779A7F18D376A5004DA9B7 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B0779A8418D376A6004DA9B7 /* libSTK.a */,
|
||||||
|
B0779A8618D376A6004DA9B7 /* rawwaves.bundle */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
B02FD53118C520D60009ECA9 /* iOS Demo */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = B02FD55E18C520D70009ECA9 /* Build configuration list for PBXNativeTarget "iOS Demo" */;
|
||||||
|
buildPhases = (
|
||||||
|
B02FD52E18C520D60009ECA9 /* Sources */,
|
||||||
|
B02FD52F18C520D60009ECA9 /* Frameworks */,
|
||||||
|
B02FD53018C520D60009ECA9 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
834A47CC24435D350028575A /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = "iOS Demo";
|
||||||
|
productName = "iOS Demo";
|
||||||
|
productReference = B02FD53218C520D60009ECA9 /* iOS Demo.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
B02FD54C18C520D70009ECA9 /* iOS DemoTests */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = B02FD56118C520D70009ECA9 /* Build configuration list for PBXNativeTarget "iOS DemoTests" */;
|
||||||
|
buildPhases = (
|
||||||
|
B02FD54918C520D70009ECA9 /* Sources */,
|
||||||
|
B02FD54A18C520D70009ECA9 /* Frameworks */,
|
||||||
|
B02FD54B18C520D70009ECA9 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
B02FD55318C520D70009ECA9 /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = "iOS DemoTests";
|
||||||
|
productName = "iOS DemoTests";
|
||||||
|
productReference = B02FD54D18C520D70009ECA9 /* iOS DemoTests.xctest */;
|
||||||
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
B02FD52A18C520D60009ECA9 /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
LastUpgradeCheck = 1140;
|
||||||
|
ORGANIZATIONNAME = "Ariel Elkin";
|
||||||
|
TargetAttributes = {
|
||||||
|
B02FD54C18C520D70009ECA9 = {
|
||||||
|
TestTargetID = B02FD53118C520D60009ECA9;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
buildConfigurationList = B02FD52D18C520D60009ECA9 /* Build configuration list for PBXProject "iOS Demo" */;
|
||||||
|
compatibilityVersion = "Xcode 3.2";
|
||||||
|
developmentRegion = en;
|
||||||
|
hasScannedForEncodings = 0;
|
||||||
|
knownRegions = (
|
||||||
|
en,
|
||||||
|
Base,
|
||||||
|
);
|
||||||
|
mainGroup = B02FD52918C520D60009ECA9;
|
||||||
|
productRefGroup = B02FD53318C520D60009ECA9 /* Products */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectReferences = (
|
||||||
|
{
|
||||||
|
ProductGroup = B0779A7F18D376A5004DA9B7 /* Products */;
|
||||||
|
ProjectRef = B0779A7E18D376A5004DA9B7 /* STK.xcodeproj */;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
B02FD53118C520D60009ECA9 /* iOS Demo */,
|
||||||
|
B02FD54C18C520D70009ECA9 /* iOS DemoTests */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXReferenceProxy section */
|
||||||
|
B0779A8418D376A6004DA9B7 /* libSTK.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libSTK.a;
|
||||||
|
remoteRef = B0779A8318D376A6004DA9B7 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
B0779A8618D376A6004DA9B7 /* rawwaves.bundle */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = wrapper.cfbundle;
|
||||||
|
path = rawwaves.bundle;
|
||||||
|
remoteRef = B0779A8518D376A6004DA9B7 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
/* End PBXReferenceProxy section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
B02FD53018C520D60009ECA9 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
B0779A8B18D37C13004DA9B7 /* rawwaves.bundle in Resources */,
|
||||||
|
B02FD54018C520D60009ECA9 /* InfoPlist.strings in Resources */,
|
||||||
|
B02FD54818C520D60009ECA9 /* Images.xcassets in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
B02FD54B18C520D70009ECA9 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
B02FD55918C520D70009ECA9 /* InfoPlist.strings in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
B02FD52E18C520D60009ECA9 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
B02FD57018C521560009ECA9 /* ViewController.mm in Sources */,
|
||||||
|
B02FD54618C520D60009ECA9 /* AppDelegate.m in Sources */,
|
||||||
|
B02FD54218C520D60009ECA9 /* main.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
B02FD54918C520D70009ECA9 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
B02FD55B18C520D70009ECA9 /* iOS_DemoTests.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXTargetDependency section */
|
||||||
|
834A47CC24435D350028575A /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
name = rawwaves;
|
||||||
|
targetProxy = 834A47CB24435D350028575A /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
|
B02FD55318C520D70009ECA9 /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
target = B02FD53118C520D60009ECA9 /* iOS Demo */;
|
||||||
|
targetProxy = B02FD55218C520D70009ECA9 /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
|
/* End PBXTargetDependency section */
|
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */
|
||||||
|
B02FD53E18C520D60009ECA9 /* InfoPlist.strings */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
B02FD53F18C520D60009ECA9 /* en */,
|
||||||
|
);
|
||||||
|
name = InfoPlist.strings;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B02FD55718C520D70009ECA9 /* InfoPlist.strings */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
B02FD55818C520D70009ECA9 /* en */,
|
||||||
|
);
|
||||||
|
name = InfoPlist.strings;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
B02FD55C18C520D70009ECA9 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
B02FD55D18C520D70009ECA9 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
|
COPY_PHASE_STRIP = YES;
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
B02FD55F18C520D70009ECA9 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "iOS Demo/iOS Demo-Prefix.pch";
|
||||||
|
HEADER_SEARCH_PATHS = (
|
||||||
|
../../include/,
|
||||||
|
"$(inherited)",
|
||||||
|
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
||||||
|
);
|
||||||
|
INFOPLIST_FILE = "iOS Demo/iOS Demo-Info.plist";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "stk.${PRODUCT_NAME:rfc1034identifier}";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
WRAPPER_EXTENSION = app;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
B02FD56018C520D70009ECA9 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "iOS Demo/iOS Demo-Prefix.pch";
|
||||||
|
HEADER_SEARCH_PATHS = (
|
||||||
|
../../include/,
|
||||||
|
"$(inherited)",
|
||||||
|
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
||||||
|
);
|
||||||
|
INFOPLIST_FILE = "iOS Demo/iOS Demo-Info.plist";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "stk.${PRODUCT_NAME:rfc1034identifier}";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
WRAPPER_EXTENSION = app;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
B02FD56218C520D70009ECA9 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/iOS Demo.app/iOS Demo";
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(SDKROOT)/Developer/Library/Frameworks",
|
||||||
|
"$(inherited)",
|
||||||
|
"$(DEVELOPER_FRAMEWORKS_DIR)",
|
||||||
|
);
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "iOS Demo/iOS Demo-Prefix.pch";
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
INFOPLIST_FILE = "iOS DemoTests/iOS DemoTests-Info.plist";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "stk.${PRODUCT_NAME:rfc1034identifier}";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||||
|
WRAPPER_EXTENSION = xctest;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
B02FD56318C520D70009ECA9 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/iOS Demo.app/iOS Demo";
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(SDKROOT)/Developer/Library/Frameworks",
|
||||||
|
"$(inherited)",
|
||||||
|
"$(DEVELOPER_FRAMEWORKS_DIR)",
|
||||||
|
);
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "iOS Demo/iOS Demo-Prefix.pch";
|
||||||
|
INFOPLIST_FILE = "iOS DemoTests/iOS DemoTests-Info.plist";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "stk.${PRODUCT_NAME:rfc1034identifier}";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||||
|
WRAPPER_EXTENSION = xctest;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
B02FD52D18C520D60009ECA9 /* Build configuration list for PBXProject "iOS Demo" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
B02FD55C18C520D70009ECA9 /* Debug */,
|
||||||
|
B02FD55D18C520D70009ECA9 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
B02FD55E18C520D70009ECA9 /* Build configuration list for PBXNativeTarget "iOS Demo" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
B02FD55F18C520D70009ECA9 /* Debug */,
|
||||||
|
B02FD56018C520D70009ECA9 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
B02FD56118C520D70009ECA9 /* Build configuration list for PBXNativeTarget "iOS DemoTests" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
B02FD56218C520D70009ECA9 /* Debug */,
|
||||||
|
B02FD56318C520D70009ECA9 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = B02FD52A18C520D60009ECA9 /* Project object */;
|
||||||
|
}
|
||||||
7
iOS/demo/iOS Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
iOS/demo/iOS Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "self:iOS Demo.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDESourceControlProjectFavoriteDictionaryKey</key>
|
||||||
|
<false/>
|
||||||
|
<key>IDESourceControlProjectIdentifier</key>
|
||||||
|
<string>4E1BA790-84C0-4F40-AECE-98269B537CE6</string>
|
||||||
|
<key>IDESourceControlProjectName</key>
|
||||||
|
<string>iOS Demo</string>
|
||||||
|
<key>IDESourceControlProjectOriginsDictionary</key>
|
||||||
|
<dict>
|
||||||
|
<key>CB047168-D1C4-40BC-85A3-6EB0A20AD217</key>
|
||||||
|
<string>ssh://github.com/arielelkin/stk.git</string>
|
||||||
|
</dict>
|
||||||
|
<key>IDESourceControlProjectPath</key>
|
||||||
|
<string>iOS/Demo/iOS Demo.xcodeproj/project.xcworkspace</string>
|
||||||
|
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
|
||||||
|
<dict>
|
||||||
|
<key>CB047168-D1C4-40BC-85A3-6EB0A20AD217</key>
|
||||||
|
<string>../../../..</string>
|
||||||
|
</dict>
|
||||||
|
<key>IDESourceControlProjectURL</key>
|
||||||
|
<string>ssh://github.com/arielelkin/stk.git</string>
|
||||||
|
<key>IDESourceControlProjectVersion</key>
|
||||||
|
<integer>110</integer>
|
||||||
|
<key>IDESourceControlProjectWCCIdentifier</key>
|
||||||
|
<string>CB047168-D1C4-40BC-85A3-6EB0A20AD217</string>
|
||||||
|
<key>IDESourceControlProjectWCConfigurations</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
|
||||||
|
<string>public.vcs.git</string>
|
||||||
|
<key>IDESourceControlWCCIdentifierKey</key>
|
||||||
|
<string>CB047168-D1C4-40BC-85A3-6EB0A20AD217</string>
|
||||||
|
<key>IDESourceControlWCCName</key>
|
||||||
|
<string>stk</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
14
iOS/demo/iOS Demo/AppDelegate.h
Normal file
14
iOS/demo/iOS Demo/AppDelegate.h
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
//
|
||||||
|
// AppDelegate.h
|
||||||
|
// iOS Demo
|
||||||
|
//
|
||||||
|
// Created by Ariel Elkin on 03/03/2014.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||||
|
|
||||||
|
@property (strong, nonatomic) UIWindow *window;
|
||||||
|
|
||||||
|
@end
|
||||||
25
iOS/demo/iOS Demo/AppDelegate.m
Normal file
25
iOS/demo/iOS Demo/AppDelegate.m
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// AppDelegate.m
|
||||||
|
// iOS Demo
|
||||||
|
//
|
||||||
|
// Created by Ariel Elkin on 03/03/2014.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "AppDelegate.h"
|
||||||
|
#import "ViewController.h"
|
||||||
|
|
||||||
|
@implementation AppDelegate
|
||||||
|
|
||||||
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||||
|
{
|
||||||
|
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
||||||
|
|
||||||
|
ViewController *vc = [[ViewController alloc] initWithNibName:nil bundle:nil];
|
||||||
|
[self.window setRootViewController:vc];
|
||||||
|
|
||||||
|
[self.window makeKeyAndVisible];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "29x29",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "40x40",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"size" : "60x60",
|
||||||
|
"scale" : "2x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"orientation" : "portrait",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"minimum-system-version" : "7.0",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"orientation" : "portrait",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"subtype" : "retina4",
|
||||||
|
"extent" : "full-screen",
|
||||||
|
"minimum-system-version" : "7.0",
|
||||||
|
"scale" : "2x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
||||||
12
iOS/demo/iOS Demo/ViewController.h
Normal file
12
iOS/demo/iOS Demo/ViewController.h
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// ViewController.h
|
||||||
|
// iOS Demo
|
||||||
|
//
|
||||||
|
// Created by Ariel Elkin on 03/03/2014.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface ViewController : UIViewController
|
||||||
|
|
||||||
|
@end
|
||||||
108
iOS/demo/iOS Demo/ViewController.mm
Normal file
108
iOS/demo/iOS Demo/ViewController.mm
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
//
|
||||||
|
// ViewController.m
|
||||||
|
// iOS Demo
|
||||||
|
//
|
||||||
|
// Created by Ariel Elkin on 03/03/2014.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "ViewController.h"
|
||||||
|
|
||||||
|
#import "SineWave.h"
|
||||||
|
#import "Brass.h"
|
||||||
|
#import "Mandolin.h"
|
||||||
|
|
||||||
|
@implementation ViewController {
|
||||||
|
stk::SineWave *sineWave;
|
||||||
|
stk::Brass *brass;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)loadView {
|
||||||
|
self.view = [UIView new];
|
||||||
|
[self.view setBackgroundColor:[UIColor whiteColor]];
|
||||||
|
[self setupUI];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewDidAppear:(BOOL)animated {
|
||||||
|
[super viewDidAppear:animated];
|
||||||
|
|
||||||
|
NSUInteger samplesToGenerate = 1000;
|
||||||
|
|
||||||
|
//Test SineWave:
|
||||||
|
sineWave = new stk::SineWave();
|
||||||
|
|
||||||
|
for (NSUInteger i = 0; i < samplesToGenerate; i ++) {
|
||||||
|
float sample = sineWave->tick();
|
||||||
|
NSLog(@"SineWave sample: %f", sample);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Test Brass:
|
||||||
|
brass = new stk::Brass();
|
||||||
|
|
||||||
|
brass->noteOn(400, 1);
|
||||||
|
|
||||||
|
for (NSUInteger i = 0; i < samplesToGenerate; i ++) {
|
||||||
|
float sample = brass->tick();
|
||||||
|
NSLog(@"Brass sample: %f", sample);
|
||||||
|
}
|
||||||
|
|
||||||
|
//We're going to be making use of a class that needs
|
||||||
|
//raw wave files, we need to tell the STK where
|
||||||
|
//the files are:
|
||||||
|
stk::Stk::setRawwavePath([[[NSBundle mainBundle] pathForResource:@"rawwaves" ofType:@"bundle"] UTF8String]);
|
||||||
|
|
||||||
|
|
||||||
|
//Test Mandolin:
|
||||||
|
stk::Mandolin *mandolin = new stk::Mandolin(400);
|
||||||
|
|
||||||
|
mandolin->pluck(1);
|
||||||
|
|
||||||
|
for (NSUInteger i = 0; i < samplesToGenerate; i ++) {
|
||||||
|
float sample = mandolin->tick();
|
||||||
|
NSLog(@"Mandolin sample: %f", sample);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma mark TODO - Audio playback
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)sineSliderMoved:(UISlider *)slider {
|
||||||
|
sineWave->setFrequency(slider.value);
|
||||||
|
NSLog(@"Setting SineWave frequency to %.2f", slider.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)brassSliderMoved:(UISlider *)slider {
|
||||||
|
brass->setFrequency(slider.value);
|
||||||
|
NSLog(@"Setting Brass frequency to %.2f", slider.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setupUI {
|
||||||
|
|
||||||
|
//Add slider to control sine wave frequency:
|
||||||
|
UISlider *sineSlider = [[UISlider alloc] init];
|
||||||
|
[sineSlider addTarget:self action:@selector(sineSliderMoved:) forControlEvents:UIControlEventValueChanged];
|
||||||
|
[sineSlider setMinimumValue:0];
|
||||||
|
[sineSlider setMaximumValue:800];
|
||||||
|
[sineSlider setTranslatesAutoresizingMaskIntoConstraints:NO];
|
||||||
|
[self.view addSubview:sineSlider];
|
||||||
|
|
||||||
|
NSDictionary *metrics = @{@"sliderWidth": @200};
|
||||||
|
|
||||||
|
NSArray *sliderConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-40-[sineSlider(sliderWidth)]" options:0 metrics:metrics views:@{@"sineSlider": sineSlider}];
|
||||||
|
[self.view addConstraints:sliderConstraints];
|
||||||
|
|
||||||
|
//Add slider to control brass's frequency:
|
||||||
|
UISlider *brassSlider = [[UISlider alloc] init];
|
||||||
|
[brassSlider addTarget:self action:@selector(brassSliderMoved:) forControlEvents:UIControlEventValueChanged];
|
||||||
|
[brassSlider setMinimumValue:0];
|
||||||
|
[brassSlider setMaximumValue:800];
|
||||||
|
[brassSlider setTranslatesAutoresizingMaskIntoConstraints:NO];
|
||||||
|
[self.view addSubview:brassSlider];
|
||||||
|
|
||||||
|
sliderConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-40-[brassSlider(sliderWidth)]" options:0 metrics:metrics views:@{@"brassSlider": brassSlider}];
|
||||||
|
[self.view addConstraints:sliderConstraints];
|
||||||
|
sliderConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[sineSlider]-[brassSlider]" options:0 metrics:nil views:@{@"sineSlider": sineSlider, @"brassSlider": brassSlider}];
|
||||||
|
[self.view addConstraints:sliderConstraints];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
2
iOS/demo/iOS Demo/en.lproj/InfoPlist.strings
Normal file
2
iOS/demo/iOS Demo/en.lproj/InfoPlist.strings
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/* Localized versions of Info.plist keys */
|
||||||
|
|
||||||
38
iOS/demo/iOS Demo/iOS Demo-Info.plist
Normal file
38
iOS/demo/iOS Demo/iOS Demo-Info.plist
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>${PRODUCT_NAME}</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>${EXECUTABLE_NAME}</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>${PRODUCT_NAME}</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
<true/>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>armv7</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
16
iOS/demo/iOS Demo/iOS Demo-Prefix.pch
Normal file
16
iOS/demo/iOS Demo/iOS Demo-Prefix.pch
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// Prefix header
|
||||||
|
//
|
||||||
|
// The contents of this file are implicitly included at the beginning of every source file.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Availability.h>
|
||||||
|
|
||||||
|
#ifndef __IPHONE_3_0
|
||||||
|
#warning "This project uses features only available in iOS SDK 3.0 and later."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#endif
|
||||||
18
iOS/demo/iOS Demo/main.m
Normal file
18
iOS/demo/iOS Demo/main.m
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
//
|
||||||
|
// main.m
|
||||||
|
// iOS Demo
|
||||||
|
//
|
||||||
|
// Created by Ariel Elkin on 03/03/2014.
|
||||||
|
// Copyright (c) 2014 Ariel Elkin. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#import "AppDelegate.h"
|
||||||
|
|
||||||
|
int main(int argc, char * argv[])
|
||||||
|
{
|
||||||
|
@autoreleasepool {
|
||||||
|
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
||||||
|
}
|
||||||
|
}
|
||||||
2
iOS/demo/iOS DemoTests/en.lproj/InfoPlist.strings
Normal file
2
iOS/demo/iOS DemoTests/en.lproj/InfoPlist.strings
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/* Localized versions of Info.plist keys */
|
||||||
|
|
||||||
22
iOS/demo/iOS DemoTests/iOS DemoTests-Info.plist
Normal file
22
iOS/demo/iOS DemoTests/iOS DemoTests-Info.plist
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>${EXECUTABLE_NAME}</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>BNDL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
34
iOS/demo/iOS DemoTests/iOS_DemoTests.m
Normal file
34
iOS/demo/iOS DemoTests/iOS_DemoTests.m
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
//
|
||||||
|
// iOS_DemoTests.m
|
||||||
|
// iOS DemoTests
|
||||||
|
//
|
||||||
|
// Created by Ariel Elkin on 03/03/2014.
|
||||||
|
// Copyright (c) 2014 Ariel Elkin. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <XCTest/XCTest.h>
|
||||||
|
|
||||||
|
@interface iOS_DemoTests : XCTestCase
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation iOS_DemoTests
|
||||||
|
|
||||||
|
- (void)setUp
|
||||||
|
{
|
||||||
|
[super setUp];
|
||||||
|
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)tearDown
|
||||||
|
{
|
||||||
|
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||||
|
[super tearDown];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testExample
|
||||||
|
{
|
||||||
|
XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -14,9 +14,10 @@ namespace stk {
|
|||||||
messages, keeping track of its state. The \e state = ADSR::IDLE
|
messages, keeping track of its state. The \e state = ADSR::IDLE
|
||||||
before being triggered and after the envelope value reaches 0.0 in
|
before being triggered and after the envelope value reaches 0.0 in
|
||||||
the ADSR::RELEASE state. All rate, target and level settings must
|
the ADSR::RELEASE state. All rate, target and level settings must
|
||||||
be non-negative. All time settings must be positive.
|
be non-negative. All time settings are in seconds and must be
|
||||||
|
positive.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -45,22 +46,22 @@ class ADSR : public Generator
|
|||||||
//! Set target = 0, state = \e ADSR::RELEASE.
|
//! Set target = 0, state = \e ADSR::RELEASE.
|
||||||
void keyOff( void );
|
void keyOff( void );
|
||||||
|
|
||||||
//! Set the attack rate.
|
//! Set the attack rate (gain / sample).
|
||||||
void setAttackRate( StkFloat rate );
|
void setAttackRate( StkFloat rate );
|
||||||
|
|
||||||
//! Set the target value for the attack (default = 1.0).
|
//! Set the target value for the attack (default = 1.0).
|
||||||
void setAttackTarget( StkFloat target );
|
void setAttackTarget( StkFloat target );
|
||||||
|
|
||||||
//! Set the decay rate.
|
//! Set the decay rate (gain / sample).
|
||||||
void setDecayRate( StkFloat rate );
|
void setDecayRate( StkFloat rate );
|
||||||
|
|
||||||
//! Set the sustain level.
|
//! Set the sustain level.
|
||||||
void setSustainLevel( StkFloat level );
|
void setSustainLevel( StkFloat level );
|
||||||
|
|
||||||
//! Set the release rate.
|
//! Set the release rate (gain / sample).
|
||||||
void setReleaseRate( StkFloat rate );
|
void setReleaseRate( StkFloat rate );
|
||||||
|
|
||||||
//! Set the attack rate based on a time duration.
|
//! Set the attack rate based on a time duration (seconds).
|
||||||
void setAttackTime( StkFloat time );
|
void setAttackTime( StkFloat time );
|
||||||
|
|
||||||
//! Set the decay rate based on a time duration (seconds).
|
//! Set the decay rate based on a time duration (seconds).
|
||||||
@@ -69,7 +70,7 @@ class ADSR : public Generator
|
|||||||
//! Set the release rate based on a time duration (seconds).
|
//! Set the release rate based on a time duration (seconds).
|
||||||
void setReleaseTime( StkFloat time );
|
void setReleaseTime( StkFloat time );
|
||||||
|
|
||||||
//! Set sustain level and attack, decay, and release time durations.
|
//! Set sustain level and attack, decay, and release time durations (seconds).
|
||||||
void setAllTimes( StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime );
|
void setAllTimes( StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime );
|
||||||
|
|
||||||
//! Set a sustain target value and attack or decay from current value to target.
|
//! Set a sustain target value and attack or decay from current value to target.
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace stk {
|
|||||||
to \e keyOn and \e keyOff messages by ramping to
|
to \e keyOn and \e keyOff messages by ramping to
|
||||||
1.0 on keyOn and to 0.0 on keyOff.
|
1.0 on keyOn and to 0.0 on keyOff.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace stk {
|
|||||||
- Glass Harmonica = 2
|
- Glass Harmonica = 2
|
||||||
- Tibetan Bowl = 3
|
- Tibetan Bowl = 3
|
||||||
|
|
||||||
by Georg Essl, 1999 - 2004.
|
by Georg Essl, 1999--2004.
|
||||||
Modified for STK 4.0 by Gary Scavone.
|
Modified for STK 4.0 by Gary Scavone.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace stk {
|
|||||||
type who should worry about this (making
|
type who should worry about this (making
|
||||||
money) worry away.
|
money) worry away.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ class BeeThree : public FM
|
|||||||
|
|
||||||
inline StkFloat BeeThree :: tick( unsigned int )
|
inline StkFloat BeeThree :: tick( unsigned int )
|
||||||
{
|
{
|
||||||
register StkFloat temp;
|
StkFloat temp;
|
||||||
|
|
||||||
if ( modDepth_ > 0.0 ) {
|
if ( modDepth_ > 0.0 ) {
|
||||||
temp = 1.0 + ( modDepth_ * vibrato_.tick() * 0.1 );
|
temp = 1.0 + ( modDepth_ * vibrato_.tick() * 0.1 );
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
Methods are provided for creating a resonance or notch in the
|
Methods are provided for creating a resonance or notch in the
|
||||||
frequency response while maintaining a constant filter gain.
|
frequency response while maintaining a constant filter gain.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace stk {
|
|||||||
in the presence of significant aliasing.
|
in the presence of significant aliasing.
|
||||||
|
|
||||||
Based on initial code of Robin Davies, 2005.
|
Based on initial code of Robin Davies, 2005.
|
||||||
Modified algorithm code by Gary Scavone, 2005 - 2006.
|
Modified algorithm code by Gary Scavone, 2005--2006.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace stk {
|
|||||||
- Vibrato Gain = 1
|
- Vibrato Gain = 1
|
||||||
- Volume = 128
|
- Volume = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ namespace stk {
|
|||||||
- Register State = 1
|
- Register State = 1
|
||||||
- Breath Pressure = 128
|
- Breath Pressure = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace stk {
|
|||||||
(1986). The output is an instantaneous
|
(1986). The output is an instantaneous
|
||||||
reflection coefficient value.
|
reflection coefficient value.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace stk {
|
|||||||
- Frequency = 101
|
- Frequency = 101
|
||||||
- Volume = 128
|
- Volume = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
Contributions by Esteban Maestre, 2011.
|
Contributions by Esteban Maestre, 2011.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace stk {
|
|||||||
- Vibrato Gain = 1
|
- Vibrato Gain = 1
|
||||||
- Volume = 128
|
- Volume = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace stk {
|
|||||||
This class implements a chorus effect. It takes a monophonic
|
This class implements a chorus effect. It takes a monophonic
|
||||||
input signal and produces a stereo output signal.
|
input signal and produces a stereo output signal.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
- Vibrato Gain = 1
|
- Vibrato Gain = 1
|
||||||
- Breath Pressure = 128
|
- Breath Pressure = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace stk {
|
|||||||
A non-interpolating delay line is typically used in fixed
|
A non-interpolating delay line is typically used in fixed
|
||||||
delay-length applications, such as for reverberation.
|
delay-length applications, such as for reverberation.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace stk {
|
|||||||
minimum delay possible in this implementation is limited to a
|
minimum delay possible in this implementation is limited to a
|
||||||
value of 0.5.
|
value of 0.5.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#ifndef STK_DELAYL_H
|
#ifndef STK_DELAYL_H
|
||||||
#define STK_DELAYL_H
|
#define STK_DELAYL_H
|
||||||
|
|
||||||
#include "Delay.h"
|
#include "Filter.h"
|
||||||
|
|
||||||
namespace stk {
|
namespace stk {
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ namespace stk {
|
|||||||
delay setting. The use of higher order Lagrange interpolators can
|
delay setting. The use of higher order Lagrange interpolators can
|
||||||
typically improve (minimize) this attenuation characteristic.
|
typically improve (minimize) this attenuation characteristic.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -133,6 +133,33 @@ inline StkFloat DelayL :: nextOut( void )
|
|||||||
return nextOutput_;
|
return nextOutput_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void DelayL :: setDelay( StkFloat delay )
|
||||||
|
{
|
||||||
|
if ( delay + 1 > inputs_.size() ) { // The value is too big.
|
||||||
|
oStream_ << "DelayL::setDelay: argument (" << delay << ") greater than maximum!";
|
||||||
|
handleError( StkError::WARNING ); return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delay < 0 ) {
|
||||||
|
oStream_ << "DelayL::setDelay: argument (" << delay << ") less than zero!";
|
||||||
|
handleError( StkError::WARNING ); return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StkFloat outPointer = inPoint_ - delay; // read chases write
|
||||||
|
delay_ = delay;
|
||||||
|
|
||||||
|
while ( outPointer < 0 )
|
||||||
|
outPointer += inputs_.size(); // modulo maximum length
|
||||||
|
|
||||||
|
outPoint_ = (long) outPointer; // integer part
|
||||||
|
|
||||||
|
alpha_ = outPointer - outPoint_; // fractional part
|
||||||
|
omAlpha_ = (StkFloat) 1.0 - alpha_;
|
||||||
|
|
||||||
|
if ( outPoint_ == inputs_.size() ) outPoint_ = 0;
|
||||||
|
doNextOut_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
inline StkFloat DelayL :: tick( StkFloat input )
|
inline StkFloat DelayL :: tick( StkFloat input )
|
||||||
{
|
{
|
||||||
inputs_[inPoint_++] = input * gain_;
|
inputs_[inPoint_++] = input * gain_;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace stk {
|
|||||||
of simultaneous voices) via a #define in the
|
of simultaneous voices) via a #define in the
|
||||||
Drummer.h.
|
Drummer.h.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace stk {
|
|||||||
|
|
||||||
This class implements an echo effect.
|
This class implements an echo effect.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace stk {
|
|||||||
subclasses. It is general enough to support both monophonic and
|
subclasses. It is general enough to support both monophonic and
|
||||||
polyphonic input/output classes.
|
polyphonic input/output classes.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ class Effect : public Stk
|
|||||||
virtual void clear() = 0;
|
virtual void clear() = 0;
|
||||||
|
|
||||||
//! Set the mixture of input and "effected" levels in the output (0.0 = input only, 1.0 = effect only).
|
//! Set the mixture of input and "effected" levels in the output (0.0 = input only, 1.0 = effect only).
|
||||||
void setEffectMix( StkFloat mix );
|
virtual void setEffectMix( StkFloat mix );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,10 @@ namespace stk {
|
|||||||
This class implements a simple linear line envelope generator
|
This class implements a simple linear line envelope generator
|
||||||
which is capable of ramping to an arbitrary target value by a
|
which is capable of ramping to an arbitrary target value by a
|
||||||
specified \e rate. It also responds to simple \e keyOn and \e
|
specified \e rate. It also responds to simple \e keyOn and \e
|
||||||
keyOff messages, ramping to 1.0 on keyOn and to 0.0 on keyOff.
|
keyOff messages, ramping to a specified target (default = 1.0) on
|
||||||
|
keyOn and to a specified target (default = 0.0) on keyOff.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -31,11 +32,11 @@ class Envelope : public Generator
|
|||||||
//! Assignment operator.
|
//! Assignment operator.
|
||||||
Envelope& operator= ( const Envelope& e );
|
Envelope& operator= ( const Envelope& e );
|
||||||
|
|
||||||
//! Set target = 1.
|
//! Start ramping to specified target (default = 1).
|
||||||
void keyOn( void ) { this->setTarget( 1.0 ); };
|
void keyOn( StkFloat target = 1.0 ) { this->setTarget( target ); };
|
||||||
|
|
||||||
//! Set target = 0.
|
//! Start ramping to specified target (default = 0).
|
||||||
void keyOff( void ) { this->setTarget( 0.0 ); };
|
void keyOff( StkFloat target = 0.0 ) { this->setTarget( target ); };
|
||||||
|
|
||||||
//! Set the \e rate.
|
//! Set the \e rate.
|
||||||
/*!
|
/*!
|
||||||
@@ -46,7 +47,7 @@ class Envelope : public Generator
|
|||||||
//! Set the \e rate based on a positive time duration (seconds).
|
//! Set the \e rate based on a positive time duration (seconds).
|
||||||
/*!
|
/*!
|
||||||
The \e rate is calculated such that the envelope will ramp from
|
The \e rate is calculated such that the envelope will ramp from
|
||||||
a value of 0.0 to 1.0 in the specified time duration.
|
the current value to the current target in the specified time duration.
|
||||||
*/
|
*/
|
||||||
void setTime( StkFloat time );
|
void setTime( StkFloat time );
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ namespace stk {
|
|||||||
type who should worry about this (making
|
type who should worry about this (making
|
||||||
money) worry away.
|
money) worry away.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -46,9 +46,6 @@ class FM : public Instrmnt
|
|||||||
//! Class destructor.
|
//! Class destructor.
|
||||||
virtual ~FM( void );
|
virtual ~FM( void );
|
||||||
|
|
||||||
//! Reset and clear all wave and envelope states.
|
|
||||||
void clear( void );
|
|
||||||
|
|
||||||
//! Load the rawwave filenames in waves.
|
//! Load the rawwave filenames in waves.
|
||||||
void loadWaves( const char **filenames );
|
void loadWaves( const char **filenames );
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace stk {
|
|||||||
type who should worry about this (making
|
type who should worry about this (making
|
||||||
money) worry away.
|
money) worry away.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ class FMVoices : public FM
|
|||||||
|
|
||||||
inline StkFloat FMVoices :: tick( unsigned int )
|
inline StkFloat FMVoices :: tick( unsigned int )
|
||||||
{
|
{
|
||||||
register StkFloat temp, temp2;
|
StkFloat temp, temp2;
|
||||||
|
|
||||||
temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick();
|
temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick();
|
||||||
temp2 = vibrato_.tick() * modDepth_ * 0.1;
|
temp2 = vibrato_.tick() * modDepth_ * 0.1;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace stk {
|
|||||||
the overloaded one that takes an StkFrames object for
|
the overloaded one that takes an StkFrames object for
|
||||||
multi-channel and/or multi-frame data.
|
multi-channel and/or multi-frame data.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -31,7 +31,8 @@ class FileLoop : protected FileWvIn
|
|||||||
|
|
||||||
//! Class constructor that opens a specified file.
|
//! Class constructor that opens a specified file.
|
||||||
FileLoop( std::string fileName, bool raw = false, bool doNormalize = true,
|
FileLoop( std::string fileName, bool raw = false, bool doNormalize = true,
|
||||||
unsigned long chunkThreshold = 1000000, unsigned long chunkSize = 1024 );
|
unsigned long chunkThreshold = 1000000, unsigned long chunkSize = 1024,
|
||||||
|
bool doInt2FloatScaling = true );
|
||||||
|
|
||||||
//! Class destructor.
|
//! Class destructor.
|
||||||
~FileLoop( void );
|
~FileLoop( void );
|
||||||
@@ -40,13 +41,14 @@ class FileLoop : protected FileWvIn
|
|||||||
/*!
|
/*!
|
||||||
Data from a previously opened file will be overwritten by this
|
Data from a previously opened file will be overwritten by this
|
||||||
function. An StkError will be thrown if the file is not found,
|
function. An StkError will be thrown if the file is not found,
|
||||||
its format is unknown, or a read error occurs. If the file data
|
its format is unknown, or a read error occurs. If the file length
|
||||||
is to be loaded incrementally from disk and normalization is
|
is less than the chunkThreshold limit and \e doNormalize is true,
|
||||||
specified, a scaling will be applied with respect to fixed-point
|
the file data will be normalized with respect to the maximum absolute
|
||||||
limits. If the data format is floating-point, no scaling is
|
value of the data. If the \e doInt2FloatScaling flag is true and the
|
||||||
performed.
|
input data is fixed-point, a scaling will be applied with respect to
|
||||||
|
the fixed-point limits.
|
||||||
*/
|
*/
|
||||||
void openFile( std::string fileName, bool raw = false, bool doNormalize = true );
|
void openFile( std::string fileName, bool raw = false, bool doNormalize = true, bool doInt2FloatScaling = true );
|
||||||
|
|
||||||
//! Close a file if one is open.
|
//! Close a file if one is open.
|
||||||
void closeFile( void ) { FileWvIn::closeFile(); };
|
void closeFile( void ) { FileWvIn::closeFile(); };
|
||||||
@@ -72,7 +74,8 @@ class FileLoop : protected FileWvIn
|
|||||||
void normalize( StkFloat peak ) { FileWvIn::normalize( peak ); };
|
void normalize( StkFloat peak ) { FileWvIn::normalize( peak ); };
|
||||||
|
|
||||||
//! Return the file size in sample frames.
|
//! Return the file size in sample frames.
|
||||||
unsigned long getSize( void ) const { return data_.frames(); };
|
//unsigned long getSize( void ) const { return data_.frames(); };
|
||||||
|
unsigned long getSize( void ) const { return fileSize_; };
|
||||||
|
|
||||||
//! Return the input file sample rate in Hz (not the data read rate).
|
//! Return the input file sample rate in Hz (not the data read rate).
|
||||||
/*!
|
/*!
|
||||||
@@ -95,7 +98,7 @@ class FileLoop : protected FileWvIn
|
|||||||
corresponds to file cycles per second. The frequency can be
|
corresponds to file cycles per second. The frequency can be
|
||||||
negative, in which case the loop is read in reverse order.
|
negative, in which case the loop is read in reverse order.
|
||||||
*/
|
*/
|
||||||
void setFrequency( StkFloat frequency ) { this->setRate( file_.fileSize() * frequency / Stk::sampleRate() ); };
|
void setFrequency( StkFloat frequency ) { this->setRate( fileSize_ * frequency / Stk::sampleRate() ); };
|
||||||
|
|
||||||
//! Increment the read pointer by \e time samples, modulo file size.
|
//! Increment the read pointer by \e time samples, modulo file size.
|
||||||
void addTime( StkFloat time );
|
void addTime( StkFloat time );
|
||||||
@@ -140,17 +143,15 @@ class FileLoop : protected FileWvIn
|
|||||||
*/
|
*/
|
||||||
StkFloat tick( unsigned int channel = 0 );
|
StkFloat tick( unsigned int channel = 0 );
|
||||||
|
|
||||||
//! Fill the StkFrames argument with computed frames and return the same reference.
|
//! Fill the StkFrames object with computed sample frames, starting at the specified channel and return the same reference.
|
||||||
/*!
|
/*!
|
||||||
The number of channels in the StkFrames argument should equal
|
The \c channel argument plus the number of output channels must
|
||||||
the number of channels in the file data. However, this is only
|
be less than the number of channels in the StkFrames argument (the
|
||||||
checked if _STK_DEBUG_ is defined during compilation, in which
|
first channel is specified by 0). However, range checking is only
|
||||||
case an incompatibility will trigger an StkError exception. If no
|
performed if _STK_DEBUG_ is defined during compilation, in which
|
||||||
file data is loaded, the function does nothing (a warning will be
|
case an out-of-range value will trigger an StkError exception.
|
||||||
issued if _STK_DEBUG_ is defined during compilation and
|
|
||||||
Stk::showWarnings() has been set to \e true).
|
|
||||||
*/
|
*/
|
||||||
StkFrames& tick( StkFrames& frames );
|
virtual StkFrames& tick( StkFrames& frames,unsigned int channel = 0 );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ namespace stk {
|
|||||||
such variable is found, the sample rate is
|
such variable is found, the sample rate is
|
||||||
assumed to be 44100 Hz.
|
assumed to be 44100 Hz.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace stk {
|
|||||||
type, the data type will automatically be modified. Compressed
|
type, the data type will automatically be modified. Compressed
|
||||||
data types are not supported.
|
data types are not supported.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -29,13 +29,23 @@ namespace stk {
|
|||||||
chunkThreshold (in sample frames) will be read incrementally in
|
chunkThreshold (in sample frames) will be read incrementally in
|
||||||
chunks of \e chunkSize each (also in sample frames).
|
chunks of \e chunkSize each (also in sample frames).
|
||||||
|
|
||||||
|
For file data read completely into local memory, the \e doNormalize
|
||||||
|
flag can be used to normalize all values with respect to the maximum
|
||||||
|
absolute value of the data.
|
||||||
|
|
||||||
|
If the file data format is fixed point, the flag \e doInt2FloatScaling
|
||||||
|
can be used to control whether the values are scaled with respect to
|
||||||
|
the corresponding fixed-point maximum. For example, if reading 16-bit
|
||||||
|
signed integers, the input values will be scaled by 1 / 32768.0. This
|
||||||
|
scaling will not happen for floating-point file data formats.
|
||||||
|
|
||||||
When the file end is reached, subsequent calls to the tick()
|
When the file end is reached, subsequent calls to the tick()
|
||||||
functions return zeros and isFinished() returns \e true.
|
functions return zeros and isFinished() returns \e true.
|
||||||
|
|
||||||
See the FileRead class for a description of the supported audio
|
See the FileRead class for a description of the supported audio
|
||||||
file formats.
|
file formats.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -51,7 +61,8 @@ public:
|
|||||||
unknown, or a read error occurs.
|
unknown, or a read error occurs.
|
||||||
*/
|
*/
|
||||||
FileWvIn( std::string fileName, bool raw = false, bool doNormalize = true,
|
FileWvIn( std::string fileName, bool raw = false, bool doNormalize = true,
|
||||||
unsigned long chunkThreshold = 1000000, unsigned long chunkSize = 1024 );
|
unsigned long chunkThreshold = 1000000, unsigned long chunkSize = 1024,
|
||||||
|
bool doInt2FloatScaling = true );
|
||||||
|
|
||||||
//! Class destructor.
|
//! Class destructor.
|
||||||
~FileWvIn( void );
|
~FileWvIn( void );
|
||||||
@@ -60,13 +71,14 @@ public:
|
|||||||
/*!
|
/*!
|
||||||
Data from a previously opened file will be overwritten by this
|
Data from a previously opened file will be overwritten by this
|
||||||
function. An StkError will be thrown if the file is not found,
|
function. An StkError will be thrown if the file is not found,
|
||||||
its format is unknown, or a read error occurs. If the file data
|
its format is unknown, or a read error occurs. If the file length
|
||||||
is to be loaded incrementally from disk and normalization is
|
is less than the chunkThreshold limit and \e doNormalize is true,
|
||||||
specified, a scaling will be applied with respect to fixed-point
|
the file data will be normalized with respect to the maximum absolute
|
||||||
limits. If the data format is floating-point, no scaling is
|
value of the data. If the \e doInt2FloatScaling flag is true and the
|
||||||
performed.
|
input data is fixed-point, a scaling will be applied with respect to
|
||||||
|
the fixed-point limits.
|
||||||
*/
|
*/
|
||||||
virtual void openFile( std::string fileName, bool raw = false, bool doNormalize = true );
|
virtual void openFile( std::string fileName, bool raw = false, bool doNormalize = true, bool doInt2FloatScaling = true );
|
||||||
|
|
||||||
//! Close a file if one is open.
|
//! Close a file if one is open.
|
||||||
virtual void closeFile( void );
|
virtual void closeFile( void );
|
||||||
@@ -89,7 +101,7 @@ public:
|
|||||||
virtual void normalize( StkFloat peak );
|
virtual void normalize( StkFloat peak );
|
||||||
|
|
||||||
//! Return the file size in sample frames.
|
//! Return the file size in sample frames.
|
||||||
virtual unsigned long getSize( void ) const { return data_.frames(); };
|
virtual unsigned long getSize( void ) const { return fileSize_; };
|
||||||
|
|
||||||
//! Return the input file sample rate in Hz (not the data read rate).
|
//! Return the input file sample rate in Hz (not the data read rate).
|
||||||
/*!
|
/*!
|
||||||
@@ -150,16 +162,15 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual StkFloat tick( unsigned int channel = 0 );
|
virtual StkFloat tick( unsigned int channel = 0 );
|
||||||
|
|
||||||
//! Fill the StkFrames argument with computed frames and return the same reference.
|
//! Fill the StkFrames object with computed sample frames, starting at the specified channel and return the same reference.
|
||||||
/*!
|
/*!
|
||||||
The number of channels in the StkFrames argument must equal
|
The \c channel argument plus the number of input channels must
|
||||||
the number of channels in the file data. However, this is only
|
be less than the number of channels in the StkFrames argument (the
|
||||||
checked if _STK_DEBUG_ is defined during compilation, in which
|
first channel is specified by 0). However, range checking is only
|
||||||
case an incompatibility will trigger an StkError exception. If no
|
performed if _STK_DEBUG_ is defined during compilation, in which
|
||||||
file data is loaded, the function does nothing (a warning will be
|
case an out-of-range value will trigger an StkError exception.
|
||||||
issued if _STK_DEBUG_ is defined during compilation).
|
|
||||||
*/
|
*/
|
||||||
virtual StkFrames& tick( StkFrames& frames );
|
virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@@ -168,10 +179,11 @@ protected:
|
|||||||
FileRead file_;
|
FileRead file_;
|
||||||
bool finished_;
|
bool finished_;
|
||||||
bool interpolate_;
|
bool interpolate_;
|
||||||
bool normalizing_;
|
bool int2floatscaling_;
|
||||||
bool chunking_;
|
bool chunking_;
|
||||||
StkFloat time_;
|
StkFloat time_;
|
||||||
StkFloat rate_;
|
StkFloat rate_;
|
||||||
|
unsigned long fileSize_;
|
||||||
unsigned long chunkThreshold_;
|
unsigned long chunkThreshold_;
|
||||||
unsigned long chunkSize_;
|
unsigned long chunkSize_;
|
||||||
long chunkPointer_;
|
long chunkPointer_;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace stk {
|
|||||||
Currently, FileWvOut is non-interpolating and the output rate is
|
Currently, FileWvOut is non-interpolating and the output rate is
|
||||||
always Stk::sampleRate().
|
always Stk::sampleRate().
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace stk {
|
|||||||
filter subclasses. It is general enough to support both
|
filter subclasses. It is general enough to support both
|
||||||
monophonic and polyphonic input/output classes.
|
monophonic and polyphonic input/output classes.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ inline StkFloat Filter :: phaseDelay( StkFloat frequency )
|
|||||||
handleError( StkError::WARNING ); return 0.0;
|
handleError( StkError::WARNING ); return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
StkFloat omegaT = 2 * M_PI * frequency / Stk::sampleRate();
|
StkFloat omegaT = 2 * PI * frequency / Stk::sampleRate();
|
||||||
StkFloat real = 0.0, imag = 0.0;
|
StkFloat real = 0.0, imag = 0.0;
|
||||||
for ( unsigned int i=0; i<b_.size(); i++ ) {
|
for ( unsigned int i=0; i<b_.size(); i++ ) {
|
||||||
real += b_[i] * std::cos( i * omegaT );
|
real += b_[i] * std::cos( i * omegaT );
|
||||||
@@ -115,7 +115,7 @@ inline StkFloat Filter :: phaseDelay( StkFloat frequency )
|
|||||||
}
|
}
|
||||||
|
|
||||||
phase -= std::atan2( imag, real );
|
phase -= std::atan2( imag, real );
|
||||||
phase = std::fmod( -phase, 2 * M_PI );
|
phase = std::fmod( -phase, 2 * PI );
|
||||||
return phase / omegaT;
|
return phase / omegaT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace stk {
|
|||||||
This structure results in one extra multiply per computed sample,
|
This structure results in one extra multiply per computed sample,
|
||||||
but allows easy control of the overall filter gain.
|
but allows easy control of the overall filter gain.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ inline StkFloat Fir :: tick( StkFloat input )
|
|||||||
lastFrame_[0] = 0.0;
|
lastFrame_[0] = 0.0;
|
||||||
inputs_[0] = gain_ * input;
|
inputs_[0] = gain_ * input;
|
||||||
|
|
||||||
for ( unsigned int i=b_.size()-1; i>0; i-- ) {
|
for ( unsigned int i=(unsigned int)(b_.size())-1; i>0; i-- ) {
|
||||||
lastFrame_[0] += b_[i] * inputs_[i];
|
lastFrame_[0] += b_[i] * inputs_[i];
|
||||||
inputs_[i] = inputs_[i-1];
|
inputs_[i] = inputs_[i-1];
|
||||||
}
|
}
|
||||||
@@ -112,7 +112,7 @@ inline StkFrames& Fir :: tick( StkFrames& frames, unsigned int channel )
|
|||||||
inputs_[0] = gain_ * *samples;
|
inputs_[0] = gain_ * *samples;
|
||||||
*samples = 0.0;
|
*samples = 0.0;
|
||||||
|
|
||||||
for ( i=b_.size()-1; i>0; i-- ) {
|
for ( i=(unsigned int)b_.size()-1; i>0; i-- ) {
|
||||||
*samples += b_[i] * inputs_[i];
|
*samples += b_[i] * inputs_[i];
|
||||||
inputs_[i] = inputs_[i-1];
|
inputs_[i] = inputs_[i-1];
|
||||||
}
|
}
|
||||||
@@ -139,7 +139,7 @@ inline StkFrames& Fir :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned
|
|||||||
inputs_[0] = gain_ * *iSamples;
|
inputs_[0] = gain_ * *iSamples;
|
||||||
*oSamples = 0.0;
|
*oSamples = 0.0;
|
||||||
|
|
||||||
for ( i=b_.size()-1; i>0; i-- ) {
|
for ( i=(unsigned int)b_.size()-1; i>0; i-- ) {
|
||||||
*oSamples += b_[i] * inputs_[i];
|
*oSamples += b_[i] * inputs_[i];
|
||||||
inputs_[i] = inputs_[i-1];
|
inputs_[i] = inputs_[i-1];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace stk {
|
|||||||
- Vibrato Gain = 1
|
- Vibrato Gain = 1
|
||||||
- Breath Pressure = 128
|
- Breath Pressure = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -123,11 +123,12 @@ inline StkFloat Flute :: tick( unsigned int )
|
|||||||
breathPressure += breathPressure * ( noiseGain_ * noise_.tick() + vibratoGain_ * vibrato_.tick() );
|
breathPressure += breathPressure * ( noiseGain_ * noise_.tick() + vibratoGain_ * vibrato_.tick() );
|
||||||
|
|
||||||
StkFloat temp = -filter_.tick( boreDelay_.lastOut() );
|
StkFloat temp = -filter_.tick( boreDelay_.lastOut() );
|
||||||
temp = dcBlock_.tick( temp ); // Block DC on reflection.
|
//temp = dcBlock_.tick( temp ); // Block DC on reflection.
|
||||||
|
|
||||||
pressureDiff = breathPressure - (jetReflection_ * temp);
|
pressureDiff = breathPressure - (jetReflection_ * temp);
|
||||||
pressureDiff = jetDelay_.tick( pressureDiff );
|
pressureDiff = jetDelay_.tick( pressureDiff );
|
||||||
pressureDiff = jetTable_.tick( pressureDiff ) + (endReflection_ * temp);
|
//pressureDiff = jetTable_.tick( pressureDiff ) + (endReflection_ * temp);
|
||||||
|
pressureDiff = dcBlock_.tick(jetTable_.tick( pressureDiff )) + (endReflection_ * temp); // moved the DC blocker to after the jet non-linearity (GPS, 29 Jan. 2020)
|
||||||
lastFrame_[0] = (StkFloat) 0.3 * boreDelay_.tick( pressureDiff );
|
lastFrame_[0] = (StkFloat) 0.3 * boreDelay_.tick( pressureDiff );
|
||||||
|
|
||||||
lastFrame_[0] *= outputGain_;
|
lastFrame_[0] *= outputGain_;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
over time from one frequency setting to another. It provides
|
over time from one frequency setting to another. It provides
|
||||||
methods for controlling the sweep rate and target frequency.
|
methods for controlling the sweep rate and target frequency.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
251
include/FreeVerb.h
Normal file
251
include/FreeVerb.h
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
#ifndef STK_FREEVERB_H
|
||||||
|
#define STK_FREEVERB_H
|
||||||
|
|
||||||
|
#include "Effect.h"
|
||||||
|
#include "Delay.h"
|
||||||
|
#include "OnePole.h"
|
||||||
|
|
||||||
|
namespace stk {
|
||||||
|
|
||||||
|
/***********************************************************************/
|
||||||
|
/*! \class FreeVerb
|
||||||
|
\brief Jezar at Dreampoint's FreeVerb, implemented in STK.
|
||||||
|
|
||||||
|
Freeverb is a free and open-source Schroeder reverberator
|
||||||
|
originally implemented in C++. The parameters of the reverberation
|
||||||
|
model are exceptionally well tuned. FreeVerb uses 8
|
||||||
|
lowpass-feedback-comb-filters in parallel, followed by 4 Schroeder
|
||||||
|
allpass filters in series. The input signal can be either mono or
|
||||||
|
stereo, and the output signal is stereo. The delay lengths are
|
||||||
|
optimized for a sample rate of 44100 Hz.
|
||||||
|
|
||||||
|
Ported to STK by Gregory Burlet, 2012.
|
||||||
|
*/
|
||||||
|
/***********************************************************************/
|
||||||
|
|
||||||
|
class FreeVerb : public Effect
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//! FreeVerb Constructor
|
||||||
|
/*!
|
||||||
|
Initializes the effect with default parameters. Note that these defaults
|
||||||
|
are slightly different than those in the original implementation of
|
||||||
|
FreeVerb [Effect Mix: 0.75; Room Size: 0.75; Damping: 0.25; Width: 1.0;
|
||||||
|
Mode: freeze mode off].
|
||||||
|
*/
|
||||||
|
FreeVerb();
|
||||||
|
|
||||||
|
//! Destructor
|
||||||
|
~FreeVerb();
|
||||||
|
|
||||||
|
//! Set the effect mix [0 = mostly dry, 1 = mostly wet].
|
||||||
|
void setEffectMix( StkFloat mix );
|
||||||
|
|
||||||
|
//! Set the room size (comb filter feedback gain) parameter [0,1].
|
||||||
|
void setRoomSize( StkFloat value );
|
||||||
|
|
||||||
|
//! Get the room size (comb filter feedback gain) parameter.
|
||||||
|
StkFloat getRoomSize( void );
|
||||||
|
|
||||||
|
//! Set the damping parameter [0=low damping, 1=higher damping].
|
||||||
|
void setDamping( StkFloat value );
|
||||||
|
|
||||||
|
//! Get the damping parameter.
|
||||||
|
StkFloat getDamping( void );
|
||||||
|
|
||||||
|
//! Set the width (left-right mixing) parameter [0,1].
|
||||||
|
void setWidth( StkFloat value );
|
||||||
|
|
||||||
|
//! Get the width (left-right mixing) parameter.
|
||||||
|
StkFloat getWidth( void );
|
||||||
|
|
||||||
|
//! Set the mode [frozen = 1, unfrozen = 0].
|
||||||
|
void setMode( bool isFrozen );
|
||||||
|
|
||||||
|
//! Get the current freeze mode [frozen = 1, unfrozen = 0].
|
||||||
|
StkFloat getMode( void );
|
||||||
|
|
||||||
|
//! Clears delay lines, etc.
|
||||||
|
void clear( void );
|
||||||
|
|
||||||
|
//! Return the specified channel value of the last computed stereo frame.
|
||||||
|
/*!
|
||||||
|
Use the lastFrame() function to get both values of the last
|
||||||
|
computed stereo frame. The \c channel argument must be 0 or 1
|
||||||
|
(the first channel is specified by 0). However, range checking is
|
||||||
|
only performed if _STK_DEBUG_ is defined during compilation, in
|
||||||
|
which case an out-of-range value will trigger an StkError
|
||||||
|
exception.
|
||||||
|
*/
|
||||||
|
StkFloat lastOut( unsigned int channel = 0 );
|
||||||
|
|
||||||
|
//! Input one or two samples to the effect and return the specified \c channel value of the computed stereo frame.
|
||||||
|
/*!
|
||||||
|
Use the lastFrame() function to get both values of the computed
|
||||||
|
stereo output frame. The \c channel argument must be 0 or 1 (the
|
||||||
|
first channel is specified by 0). However, range checking is only
|
||||||
|
performed if _STK_DEBUG_ is defined during compilation, in which
|
||||||
|
case an out-of-range value will trigger an StkError exception.
|
||||||
|
*/
|
||||||
|
StkFloat tick( StkFloat inputL, StkFloat inputR = 0.0, unsigned int channel = 0 );
|
||||||
|
|
||||||
|
//! Take two channels of the StkFrames object as inputs to the effect and replace with stereo outputs.
|
||||||
|
/*!
|
||||||
|
The StkFrames argument reference is returned. The stereo
|
||||||
|
inputs are taken from (and written back to) the StkFrames argument
|
||||||
|
starting at the specified \c channel. Therefore, the \c channel
|
||||||
|
argument must be less than ( channels() - 1 ) of the StkFrames
|
||||||
|
argument (the first channel is specified by 0). However, range
|
||||||
|
checking is only performed if _STK_DEBUG_ is defined during
|
||||||
|
compilation, in which case an out-of-range value will trigger an
|
||||||
|
StkError exception.
|
||||||
|
*/
|
||||||
|
StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
|
||||||
|
|
||||||
|
//! Take one or two channels of the \c iFrames object as inputs to the effect and write stereo outputs to the \c oFrames object.
|
||||||
|
/*!
|
||||||
|
The \c iFrames object reference is returned. The \c iChannel
|
||||||
|
argument must be less than the number of channels in the \c
|
||||||
|
iFrames argument (the first channel is specified by 0). If more
|
||||||
|
than one channel of data exists in \c iFrames starting from \c
|
||||||
|
iChannel, stereo data is input to the effect. The \c oChannel
|
||||||
|
argument must be less than ( channels() - 1 ) of the \c oFrames
|
||||||
|
argument. However, range checking is only performed if
|
||||||
|
_STK_DEBUG_ is defined during compilation, in which case an
|
||||||
|
out-of-range value will trigger an StkError exception.
|
||||||
|
*/
|
||||||
|
StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//! Update interdependent parameters.
|
||||||
|
void update( void );
|
||||||
|
|
||||||
|
// Clamp very small floats to zero, version from
|
||||||
|
// http://music.columbia.edu/pipermail/linux-audio-user/2004-July/013489.html .
|
||||||
|
// However, this is for 32-bit floats only.
|
||||||
|
//static inline StkFloat undenormalize( volatile StkFloat s ) {
|
||||||
|
// s += 9.8607615E-32f;
|
||||||
|
// return s - 9.8607615E-32f;
|
||||||
|
//}
|
||||||
|
|
||||||
|
static const int nCombs = 8;
|
||||||
|
static const int nAllpasses = 4;
|
||||||
|
static const int stereoSpread = 23;
|
||||||
|
static const StkFloat fixedGain;
|
||||||
|
static const StkFloat scaleWet;
|
||||||
|
static const StkFloat scaleDry;
|
||||||
|
static const StkFloat scaleDamp;
|
||||||
|
static const StkFloat scaleRoom;
|
||||||
|
static const StkFloat offsetRoom;
|
||||||
|
|
||||||
|
// Delay line lengths for 44100Hz sampling rate.
|
||||||
|
static int cDelayLengths[nCombs];
|
||||||
|
static int aDelayLengths[nAllpasses];
|
||||||
|
|
||||||
|
StkFloat g_; // allpass coefficient
|
||||||
|
StkFloat gain_;
|
||||||
|
StkFloat roomSizeMem_, roomSize_;
|
||||||
|
StkFloat dampMem_, damp_;
|
||||||
|
StkFloat wet1_, wet2_;
|
||||||
|
StkFloat dry_;
|
||||||
|
StkFloat width_;
|
||||||
|
bool frozenMode_;
|
||||||
|
|
||||||
|
// LBFC: Lowpass Feedback Comb Filters
|
||||||
|
Delay combDelayL_[nCombs];
|
||||||
|
Delay combDelayR_[nCombs];
|
||||||
|
OnePole combLPL_[nCombs];
|
||||||
|
OnePole combLPR_[nCombs];
|
||||||
|
|
||||||
|
// AP: Allpass Filters
|
||||||
|
Delay allPassDelayL_[nAllpasses];
|
||||||
|
Delay allPassDelayR_[nAllpasses];
|
||||||
|
};
|
||||||
|
|
||||||
|
inline StkFloat FreeVerb :: lastOut( unsigned int channel )
|
||||||
|
{
|
||||||
|
#if defined(_STK_DEBUG_)
|
||||||
|
if ( channel > 1 ) {
|
||||||
|
oStream_ << "FreeVerb::lastOut(): channel argument must be less than 2!";
|
||||||
|
handleError( StkError::FUNCTION_ARGUMENT );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return lastFrame_[channel];
|
||||||
|
}
|
||||||
|
|
||||||
|
inline StkFloat FreeVerb::tick( StkFloat inputL, StkFloat inputR, unsigned int channel )
|
||||||
|
{
|
||||||
|
#if defined(_STK_DEBUG_)
|
||||||
|
if ( channel > 1 ) {
|
||||||
|
oStream_ << "FreeVerb::tick(): channel argument must be less than 2!";
|
||||||
|
handleError(StkError::FUNCTION_ARGUMENT);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
StkFloat fInput = (inputL + inputR) * gain_;
|
||||||
|
StkFloat outL = 0.0;
|
||||||
|
StkFloat outR = 0.0;
|
||||||
|
|
||||||
|
// Parallel LBCF filters
|
||||||
|
for ( int i = 0; i < nCombs; i++ ) {
|
||||||
|
// Left channel
|
||||||
|
//StkFloat yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPL_[i].tick(FreeVerb::undenormalize(combDelayL_[i].nextOut()))));
|
||||||
|
StkFloat yn = fInput + (roomSize_ * combLPL_[i].tick( combDelayL_[i].nextOut() ) );
|
||||||
|
combDelayL_[i].tick(yn);
|
||||||
|
outL += yn;
|
||||||
|
|
||||||
|
// Right channel
|
||||||
|
//yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPR_[i].tick(FreeVerb::undenormalize(combDelayR_[i].nextOut()))));
|
||||||
|
yn = fInput + (roomSize_ * combLPR_[i].tick( combDelayR_[i].nextOut() ) );
|
||||||
|
combDelayR_[i].tick(yn);
|
||||||
|
outR += yn;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Series allpass filters
|
||||||
|
for ( int i = 0; i < nAllpasses; i++ ) {
|
||||||
|
// Left channel
|
||||||
|
//StkFloat vn_m = FreeVerb::undenormalize(allPassDelayL_[i].nextOut());
|
||||||
|
StkFloat vn_m = allPassDelayL_[i].nextOut();
|
||||||
|
StkFloat vn = outL + (g_ * vn_m);
|
||||||
|
allPassDelayL_[i].tick(vn);
|
||||||
|
|
||||||
|
// calculate output
|
||||||
|
outL = -vn + (1.0 + g_)*vn_m;
|
||||||
|
|
||||||
|
// Right channel
|
||||||
|
//vn_m = FreeVerb::undenormalize(allPassDelayR_[i].nextOut());
|
||||||
|
vn_m = allPassDelayR_[i].nextOut();
|
||||||
|
vn = outR + (g_ * vn_m);
|
||||||
|
allPassDelayR_[i].tick(vn);
|
||||||
|
|
||||||
|
// calculate output
|
||||||
|
outR = -vn + (1.0 + g_)*vn_m;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mix output
|
||||||
|
lastFrame_[0] = outL*wet1_ + outR*wet2_ + inputL*dry_;
|
||||||
|
lastFrame_[1] = outR*wet1_ + outL*wet2_ + inputR*dry_;
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Hard limiter ... there's not much else we can do at this point
|
||||||
|
if ( lastFrame_[0] >= 1.0 ) {
|
||||||
|
lastFrame_[0] = 0.9999;
|
||||||
|
}
|
||||||
|
if ( lastFrame_[0] <= -1.0 ) {
|
||||||
|
lastFrame_[0] = -0.9999;
|
||||||
|
}
|
||||||
|
if ( lastFrame_[1] >= 1.0 ) {
|
||||||
|
lastFrame_[1] = 0.9999;
|
||||||
|
}
|
||||||
|
if ( lastFrame_[1] <= -1.0 ) {
|
||||||
|
lastFrame_[1] = -0.9999;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return lastFrame_[channel];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
implement tables or other types of input to output function
|
implement tables or other types of input to output function
|
||||||
mappings.
|
mappings.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
generator sample-source subclasses. It is general enough to
|
generator sample-source subclasses. It is general enough to
|
||||||
support both monophonic and polyphonic output classes.
|
support both monophonic and polyphonic output classes.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace stk {
|
|||||||
Chris Rolfe and Damian Keller, though there are likely to be a
|
Chris Rolfe and Damian Keller, though there are likely to be a
|
||||||
number of differences in the actual implementation.
|
number of differences in the actual implementation.
|
||||||
|
|
||||||
by Gary Scavone, 2005 - 2010.
|
by Gary Scavone, 2005--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
202
include/Guitar.h
Normal file
202
include/Guitar.h
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
#ifndef STK_GUITAR_H
|
||||||
|
#define STK_GUITAR_H
|
||||||
|
|
||||||
|
#include "Stk.h"
|
||||||
|
#include "Twang.h"
|
||||||
|
#include "OnePole.h"
|
||||||
|
#include "OneZero.h"
|
||||||
|
|
||||||
|
namespace stk {
|
||||||
|
|
||||||
|
/***************************************************/
|
||||||
|
/*! \class Guitar
|
||||||
|
\brief STK guitar model class.
|
||||||
|
|
||||||
|
This class implements a guitar model with an arbitrary number of
|
||||||
|
strings (specified during instantiation). Each string is
|
||||||
|
represented by an stk::Twang object. The model supports commuted
|
||||||
|
synthesis, as discussed by Smith and Karjalainen. It also includes
|
||||||
|
a basic body coupling model and supports feedback.
|
||||||
|
|
||||||
|
This class does not attempt voice management. Rather, most
|
||||||
|
functions support a parameter to specify a particular string
|
||||||
|
number and string (voice) management is assumed to occur
|
||||||
|
externally. Note that this class does not inherit from
|
||||||
|
stk::Instrmnt because of API inconsistencies.
|
||||||
|
|
||||||
|
This is a digital waveguide model, making its use possibly subject
|
||||||
|
to patents held by Stanford University, Yamaha, and others.
|
||||||
|
|
||||||
|
Control Change Numbers:
|
||||||
|
- Bridge Coupling Gain = 2
|
||||||
|
- Pluck Position = 4
|
||||||
|
- Loop Gain = 11
|
||||||
|
- Coupling Filter Pole = 1
|
||||||
|
- Pick Filter Pole = 128
|
||||||
|
|
||||||
|
by Gary P. Scavone, 2012.
|
||||||
|
*/
|
||||||
|
/***************************************************/
|
||||||
|
|
||||||
|
class Guitar : public Stk
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//! Class constructor, specifying an arbitrary number of strings (default = 6).
|
||||||
|
Guitar( unsigned int nStrings = 6, std::string bodyfile = "" );
|
||||||
|
|
||||||
|
//! Reset and clear all internal state.
|
||||||
|
void clear( void );
|
||||||
|
|
||||||
|
//! Set the string excitation, using either a soundfile or computed noise.
|
||||||
|
/*!
|
||||||
|
If no argument is provided, the std::string is empty, or an error
|
||||||
|
occurs reading the file data, an enveloped noise signal will be
|
||||||
|
generated for use as the pluck excitation.
|
||||||
|
*/
|
||||||
|
void setBodyFile( std::string bodyfile = "" );
|
||||||
|
|
||||||
|
//! Set the pluck position for one or all strings.
|
||||||
|
/*!
|
||||||
|
If the \c string argument is < 0, the pluck position is set
|
||||||
|
for all strings.
|
||||||
|
*/
|
||||||
|
void setPluckPosition( StkFloat position, int string = -1 );
|
||||||
|
|
||||||
|
//! Set the loop gain for one or all strings.
|
||||||
|
/*!
|
||||||
|
If the \c string argument is < 0, the loop gain is set for all
|
||||||
|
strings.
|
||||||
|
*/
|
||||||
|
void setLoopGain( StkFloat gain, int string = -1 );
|
||||||
|
|
||||||
|
//! Set instrument parameters for a particular frequency.
|
||||||
|
void setFrequency( StkFloat frequency, unsigned int string = 0 );
|
||||||
|
|
||||||
|
//! Start a note with the given frequency and amplitude.
|
||||||
|
/*!
|
||||||
|
If the \c amplitude parameter is less than 0.2, the string will
|
||||||
|
be undamped but it will not be "plucked."
|
||||||
|
*/
|
||||||
|
void noteOn( StkFloat frequency, StkFloat amplitude, unsigned int string = 0 );
|
||||||
|
|
||||||
|
//! Stop a note with the given amplitude (speed of decay).
|
||||||
|
void noteOff( StkFloat amplitude, unsigned int string = 0 );
|
||||||
|
|
||||||
|
//! Perform the control change specified by \e number and \e value (0.0 - 128.0).
|
||||||
|
/*!
|
||||||
|
If the \c string argument is < 0, then the control change is
|
||||||
|
applied to all strings (if appropriate).
|
||||||
|
*/
|
||||||
|
void controlChange( int number, StkFloat value, int string = -1 );
|
||||||
|
|
||||||
|
//! Return the last computed output value.
|
||||||
|
StkFloat lastOut( void ) { return lastFrame_[0]; };
|
||||||
|
|
||||||
|
//! Take an optional input sample and compute one output sample.
|
||||||
|
StkFloat tick( StkFloat input = 0.0 );
|
||||||
|
|
||||||
|
//! Take a channel of the \c iFrames object as inputs to the class and write outputs to the \c oFrames object.
|
||||||
|
/*!
|
||||||
|
The \c iFrames object reference is returned. Each channel
|
||||||
|
argument must be less than the number of channels in the
|
||||||
|
corresponding StkFrames argument (the first channel is specified
|
||||||
|
by 0). However, range checking is only performed if _STK_DEBUG_
|
||||||
|
is defined during compilation, in which case an out-of-range value
|
||||||
|
will trigger an StkError exception.
|
||||||
|
*/
|
||||||
|
StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
|
||||||
|
|
||||||
|
//! Take a channel of the \c iFrames object as inputs to the effect and write outputs to the \c oFrames object.
|
||||||
|
/*!
|
||||||
|
The \c iFrames object reference is returned. Each channel
|
||||||
|
argument must be less than the number of channels in the
|
||||||
|
corresponding StkFrames argument (the first channel is specified
|
||||||
|
by 0). However, range checking is only performed if _STK_DEBUG_
|
||||||
|
is defined during compilation, in which case an out-of-range value
|
||||||
|
will trigger an StkError exception.
|
||||||
|
*/
|
||||||
|
StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
std::vector< stk::Twang > strings_;
|
||||||
|
std::vector< int > stringState_; // 0 = off, 1 = decaying, 2 = on
|
||||||
|
std::vector< unsigned int > decayCounter_;
|
||||||
|
std::vector< unsigned int > filePointer_;
|
||||||
|
std::vector< StkFloat > pluckGains_;
|
||||||
|
|
||||||
|
OnePole pickFilter_;
|
||||||
|
OnePole couplingFilter_;
|
||||||
|
StkFloat couplingGain_;
|
||||||
|
StkFrames excitation_;
|
||||||
|
StkFrames lastFrame_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// NOTE: It is not possible to implement the Smith coupled string model here because the Twang class does
|
||||||
|
// not currently offer the chance to have access to a traveling-wave component. Thus, the coupling
|
||||||
|
// implemented here is approximate.
|
||||||
|
inline StkFloat Guitar :: tick( StkFloat input )
|
||||||
|
{
|
||||||
|
StkFloat temp, output = 0.0;
|
||||||
|
lastFrame_[0] = couplingGain_ * couplingFilter_.tick( lastFrame_[0] ) / strings_.size();
|
||||||
|
for ( unsigned int i=0; i<strings_.size(); i++ ) {
|
||||||
|
if ( stringState_[i] ) {
|
||||||
|
temp = input;
|
||||||
|
// If pluckGain < 0.2, let string ring but don't pluck it.
|
||||||
|
if ( filePointer_[i] < excitation_.frames() && pluckGains_[i] > 0.2 )
|
||||||
|
temp += pluckGains_[i] * excitation_[filePointer_[i]++];
|
||||||
|
temp += lastFrame_[0]; // bridge coupling
|
||||||
|
output += strings_[i].tick( temp );
|
||||||
|
// Check if string energy has decayed sufficiently to turn it off.
|
||||||
|
if ( stringState_[i] == 1 ) {
|
||||||
|
if ( fabs( strings_[i].lastOut() ) < 0.001 ) decayCounter_[i]++;
|
||||||
|
else decayCounter_[i] = 0;
|
||||||
|
if ( decayCounter_[i] > (unsigned int) floor( 0.1 * Stk::sampleRate() ) ) {
|
||||||
|
stringState_[i] = 0;
|
||||||
|
decayCounter_[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return lastFrame_[0] = output;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline StkFrames& Guitar :: tick( StkFrames& frames, unsigned int channel )
|
||||||
|
{
|
||||||
|
#if defined(_STK_DEBUG_)
|
||||||
|
if ( channel >= frames.channels() ) {
|
||||||
|
oStream_ << "Guitar::tick(): channel and StkFrames arguments are incompatible!";
|
||||||
|
handleError( StkError::FUNCTION_ARGUMENT );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
StkFloat *samples = &frames[channel];
|
||||||
|
unsigned int hop = frames.channels();
|
||||||
|
for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
|
||||||
|
*samples = tick( *samples );
|
||||||
|
|
||||||
|
return frames;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline StkFrames& Guitar :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
|
||||||
|
{
|
||||||
|
#if defined(_STK_DEBUG_)
|
||||||
|
if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
|
||||||
|
oStream_ << "Guitar::tick(): channel and StkFrames arguments are incompatible!";
|
||||||
|
handleError( StkError::FUNCTION_ARGUMENT );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
StkFloat *iSamples = &iFrames[iChannel];
|
||||||
|
StkFloat *oSamples = &oFrames[oChannel];
|
||||||
|
unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
|
||||||
|
for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop )
|
||||||
|
*oSamples = tick( *iSamples );
|
||||||
|
|
||||||
|
return iFrames;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // stk namespace
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
type who should worry about this (making
|
type who should worry about this (making
|
||||||
money) worry away.
|
money) worry away.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ class HevyMetl : public FM
|
|||||||
|
|
||||||
inline StkFloat HevyMetl :: tick( unsigned int )
|
inline StkFloat HevyMetl :: tick( unsigned int )
|
||||||
{
|
{
|
||||||
register StkFloat temp;
|
StkFloat temp;
|
||||||
|
|
||||||
temp = vibrato_.tick() * modDepth_ * 0.2;
|
temp = vibrato_.tick() * modDepth_ * 0.2;
|
||||||
waves_[0]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[0]);
|
waves_[0]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[0]);
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace stk {
|
|||||||
This structure results in one extra multiply per computed sample,
|
This structure results in one extra multiply per computed sample,
|
||||||
but allows easy control of the overall filter gain.
|
but allows easy control of the overall filter gain.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ protected:
|
|||||||
|
|
||||||
inline StkFloat Iir :: tick( StkFloat input )
|
inline StkFloat Iir :: tick( StkFloat input )
|
||||||
{
|
{
|
||||||
unsigned int i;
|
size_t i;
|
||||||
|
|
||||||
outputs_[0] = 0.0;
|
outputs_[0] = 0.0;
|
||||||
inputs_[0] = gain_ * input;
|
inputs_[0] = gain_ * input;
|
||||||
@@ -142,7 +142,8 @@ inline StkFrames& Iir :: tick( StkFrames& frames, unsigned int channel )
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
StkFloat *samples = &frames[channel];
|
StkFloat *samples = &frames[channel];
|
||||||
unsigned int i, hop = frames.channels();
|
size_t i;
|
||||||
|
unsigned int hop = frames.channels();
|
||||||
for ( unsigned int j=0; j<frames.frames(); j++, samples += hop ) {
|
for ( unsigned int j=0; j<frames.frames(); j++, samples += hop ) {
|
||||||
outputs_[0] = 0.0;
|
outputs_[0] = 0.0;
|
||||||
inputs_[0] = gain_ * *samples;
|
inputs_[0] = gain_ * *samples;
|
||||||
@@ -175,7 +176,8 @@ inline StkFrames& Iir :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned
|
|||||||
|
|
||||||
StkFloat *iSamples = &iFrames[iChannel];
|
StkFloat *iSamples = &iFrames[iChannel];
|
||||||
StkFloat *oSamples = &oFrames[oChannel];
|
StkFloat *oSamples = &oFrames[oChannel];
|
||||||
unsigned int i, iHop = iFrames.channels(), oHop = oFrames.channels();
|
size_t i;
|
||||||
|
unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
|
||||||
for ( unsigned int j=0; j<iFrames.frames(); j++, iSamples += iHop, oSamples += oHop ) {
|
for ( unsigned int j=0; j<iFrames.frames(); j++, iSamples += iHop, oSamples += oHop ) {
|
||||||
outputs_[0] = 0.0;
|
outputs_[0] = 0.0;
|
||||||
inputs_[0] = gain_ * *iSamples;
|
inputs_[0] = gain_ * *iSamples;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
data type for the incoming stream is signed 16-bit integers,
|
data type for the incoming stream is signed 16-bit integers,
|
||||||
though any of the defined StkFormats are permissible.
|
though any of the defined StkFormats are permissible.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -96,17 +96,18 @@ public:
|
|||||||
*/
|
*/
|
||||||
StkFloat tick( unsigned int channel = 0 );
|
StkFloat tick( unsigned int channel = 0 );
|
||||||
|
|
||||||
//! Fill the StkFrames argument with computed frames and return the same reference.
|
//! Fill the StkFrames object with computed sample frames, starting at the specified channel and return the same reference.
|
||||||
/*!
|
/*!
|
||||||
The number of channels in the StkFrames argument must equal the
|
The \c channel argument plus the number of channels specified
|
||||||
number of channels specified in the listen() function. However,
|
in the listen() function must be less than the number of channels
|
||||||
this is only checked if _STK_DEBUG_ is defined during compilation,
|
in the StkFrames argument (the first channel is specified by 0).
|
||||||
in which case an incompatibility will trigger an StkError
|
However, this is only checked if _STK_DEBUG_ is defined during
|
||||||
exception. If no connection exists, the function does
|
compilation, in which case an incompatibility will trigger an
|
||||||
|
StkError exception. If no connection exists, the function does
|
||||||
nothing (a warning will be issued if _STK_DEBUG_ is defined during
|
nothing (a warning will be issued if _STK_DEBUG_ is defined during
|
||||||
compilation).
|
compilation).
|
||||||
*/
|
*/
|
||||||
StkFrames& tick( StkFrames& frames );
|
StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
|
||||||
|
|
||||||
// Called by the thread routine to receive data via the socket connection
|
// Called by the thread routine to receive data via the socket connection
|
||||||
// and fill the socket buffer. This is not intended for general use but
|
// and fill the socket buffer. This is not intended for general use but
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace stk {
|
|||||||
data type is signed 16-bit integers but any of the defined
|
data type is signed 16-bit integers but any of the defined
|
||||||
StkFormats are permissible.
|
StkFormats are permissible.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace stk {
|
|||||||
This class provides a common interface for
|
This class provides a common interface for
|
||||||
all STK instruments.
|
all STK instruments.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -22,6 +22,12 @@ class Instrmnt : public Stk
|
|||||||
//! Class constructor.
|
//! Class constructor.
|
||||||
Instrmnt( void ) { lastFrame_.resize( 1, 1, 0.0 ); };
|
Instrmnt( void ) { lastFrame_.resize( 1, 1, 0.0 ); };
|
||||||
|
|
||||||
|
//! Reset and clear all internal state (for subclasses).
|
||||||
|
/*!
|
||||||
|
Not all subclasses implement a clear() function.
|
||||||
|
*/
|
||||||
|
virtual void clear( void ) {};
|
||||||
|
|
||||||
//! Start a note with the given frequency and amplitude.
|
//! Start a note with the given frequency and amplitude.
|
||||||
virtual void noteOn( StkFloat frequency, StkFloat amplitude ) = 0;
|
virtual void noteOn( StkFloat frequency, StkFloat amplitude ) = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace stk {
|
|||||||
one-pole lowpass filters have been added inside
|
one-pole lowpass filters have been added inside
|
||||||
the feedback comb filters.
|
the feedback comb filters.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace stk {
|
|||||||
Consult Fletcher and Rossing, Karjalainen,
|
Consult Fletcher and Rossing, Karjalainen,
|
||||||
Cook, and others for more information.
|
Cook, and others for more information.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#ifndef STK_LENLentPitShift_H
|
#ifndef STK_LENTPITSHIFT_H
|
||||||
#define STK_LENLentPitShift_H
|
#define STK_LENTPITSHIFT_H
|
||||||
|
|
||||||
#include "Effect.h"
|
#include "Effect.h"
|
||||||
#include "Delay.h"
|
#include "Delay.h"
|
||||||
@@ -25,13 +25,9 @@ class LentPitShift : public Effect
|
|||||||
|
|
||||||
~LentPitShift( void ) {
|
~LentPitShift( void ) {
|
||||||
delete window;
|
delete window;
|
||||||
window = NULL;
|
|
||||||
delete dt;
|
delete dt;
|
||||||
dt = NULL;
|
|
||||||
delete dpt;
|
delete dpt;
|
||||||
dpt = NULL;
|
|
||||||
delete cumDt;
|
delete cumDt;
|
||||||
cumDt = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Reset and clear all internal state.
|
//! Reset and clear all internal state.
|
||||||
@@ -70,7 +66,7 @@ class LentPitShift : public Effect
|
|||||||
//! Apply the effect on the input samples and store it.
|
//! Apply the effect on the input samples and store it.
|
||||||
/*!
|
/*!
|
||||||
The samples stored in the input frame vector are processed
|
The samples stored in the input frame vector are processed
|
||||||
and the delayed result are stored in the output frame vector
|
and the delayed result are stored in the output frame vector.
|
||||||
*/
|
*/
|
||||||
void process( );
|
void process( );
|
||||||
|
|
||||||
@@ -116,7 +112,7 @@ inline void LentPitShift::process()
|
|||||||
StkFloat x_t_T; // previous input coefficient at T samples
|
StkFloat x_t_T; // previous input coefficient at T samples
|
||||||
StkFloat coeff; // new coefficient for the difference function
|
StkFloat coeff; // new coefficient for the difference function
|
||||||
|
|
||||||
int alternativePitch = tMax_; // Global minimum storage
|
unsigned long alternativePitch = tMax_; // Global minimum storage
|
||||||
lastPeriod_ = tMax_+1; // Storage of the lowest local minimum under the threshold
|
lastPeriod_ = tMax_+1; // Storage of the lowest local minimum under the threshold
|
||||||
|
|
||||||
// Loop variables
|
// Loop variables
|
||||||
@@ -179,8 +175,8 @@ inline void LentPitShift::process()
|
|||||||
for ( int n=-(int)lastPeriod_; n<(int)lastPeriod_; n++ )
|
for ( int n=-(int)lastPeriod_; n<(int)lastPeriod_; n++ )
|
||||||
window[n+lastPeriod_] = (1 + cos(PI*n/lastPeriod_)) / 2 ;
|
window[n+lastPeriod_] = (1 + cos(PI*n/lastPeriod_)) / 2 ;
|
||||||
|
|
||||||
int M; // Index of reading in the input delay line
|
long M; // Index of reading in the input delay line
|
||||||
int N; // Index of writing in the output delay line
|
long N; // Index of writing in the output delay line
|
||||||
double sample; // Temporary storage for the new coefficient
|
double sample; // Temporary storage for the new coefficient
|
||||||
|
|
||||||
// We loop for all the frames of length lastPeriod_ presents between inputPtr and tMax_
|
// We loop for all the frames of length lastPeriod_ presents between inputPtr and tMax_
|
||||||
@@ -195,8 +191,8 @@ inline void LentPitShift::process()
|
|||||||
for ( unsigned int j=0; j<2*lastPeriod_; j++,M--,N-- ) {
|
for ( unsigned int j=0; j<2*lastPeriod_; j++,M--,N-- ) {
|
||||||
sample = inputLine_.tapOut(M) * window[j] / 2.;
|
sample = inputLine_.tapOut(M) * window[j] / 2.;
|
||||||
// Linear interpolation
|
// Linear interpolation
|
||||||
outputLine_.addTo(N, env[0] * sample);
|
outputLine_.addTo(env[0] * sample, N);
|
||||||
outputLine_.addTo(N-1, env[1] * sample);
|
outputLine_.addTo(env[1] * sample, N-1);
|
||||||
}
|
}
|
||||||
outputPtr = outputPtr + lastPeriod_ * periodRatio_; // new output pointer
|
outputPtr = outputPtr + lastPeriod_ * periodRatio_; // new output pointer
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
- String Detuning = 1
|
- String Detuning = 1
|
||||||
- Microphone Position = 128
|
- Microphone Position = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace stk {
|
|||||||
- Mesh Decay = 11
|
- Mesh Decay = 11
|
||||||
- X-Y Input Position = 1
|
- X-Y Input Position = 1
|
||||||
|
|
||||||
by Julius Smith, 2000 - 2002.
|
by Julius Smith, 2000--2002.
|
||||||
Revised by Gary Scavone for STK, 2002.
|
Revised by Gary Scavone for STK, 2002.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ namespace stk {
|
|||||||
This class is primarily for use in STK example programs but it is
|
This class is primarily for use in STK example programs but it is
|
||||||
generic enough to work in many other contexts.
|
generic enough to work in many other contexts.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
by Perry R. Cook and Gary P. Scavone, 1995--2019.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user