56 Commits
4.5.0 ... 4.5.1

Author SHA1 Message Date
Gary Scavone
fb50d69e08 Lots of documentation updates in advance of new release (4.5.1). 2016-02-22 20:51:07 -05:00
Gary Scavone
126ff9d9e1 Updated RtMidi and RtAudio files after new releases. 2016-02-22 20:05:28 -05:00
Gary Scavone
83b75ed339 Fix for FileWvIn and FileLoop classes so that files are closed unless chunking. 2016-02-03 16:37:51 -05:00
Gary Scavone
f0f6668f25 Fixed typo in documentation. 2016-02-03 14:03:00 -05:00
garyscavone
a506acc708 Merge pull request #53 from arielelkin/master
set ENABLE_TESTABILITY = YES on project.pbxproj
2015-12-13 12:13:29 -05:00
garyscavone
3e42e3db3f Merge pull request #54 from arielelkin/setRawWavePathForDemoProject
set raw wave path for demo project
2015-12-13 12:12:52 -05:00
Ariel Elkin
852bdec0c9 set raw wave path for demo project 2015-12-13 16:55:45 +01:00
Ariel Elkin
9d8673a24e set ENABLE_TESTABILITY = YES on project.pbxproj 2015-12-13 16:42:52 +01:00
garyscavone
57344a11a9 Merge pull request #52 from fsateler/update-config-files
Update config.{sub,guess}
2015-12-13 09:45:33 -05:00
Felipe Sateler
00da5562cd Update config.{sub,guess}
This is needed to build on newer architectures
2015-12-10 22:57:17 -03:00
garyscavone
b02298a9f4 Merge pull request #51 from sonoro1234/clear_alertList_brnch
add Stk::clear_alertList method
2015-12-04 07:54:51 -05:00
Victor Bombi
d1b4dd485b add Stk::clear_alertList method 2015-12-04 09:24:31 +01:00
garyscavone
6d5a779879 Merge pull request #49 from sonoro1234/removealert_branch
add removeSampleRateAlert to ADSR and Asymp
2015-12-02 19:47:51 -05:00
garyscavone
7ea8b10c6a Merge pull request #48 from fsateler/master
Fix install target for new soname scheme
2015-12-02 19:46:50 -05:00
Victor Bombi
0e69055579 VoicForm: change message Clarinet to Voicform 2015-12-01 18:53:14 +01:00
Victor Bombi
c2833d356a add removeSampleRateAlert to ADSR and Asymp to pair with addSampleRateAlert 2015-12-01 18:23:09 +01:00
Felipe Sateler
0f16f683c9 Fix install target for new soname scheme 2015-11-27 20:36:28 -03:00
garyscavone
f3b1f35a8c Merge pull request #47 from fsateler/patch-1
Makefile.in: Reuse version from configure.ac
2015-11-22 19:14:49 -05:00
Felipe Sateler
262fe5a2d1 Makefile.in: Reuse version from configure.ac
Otherwise they get out of sync
2015-11-19 23:49:50 -03:00
Gary Scavone
5e79513e5a Update to play.cpp to play mono files out as stereo. 2015-11-03 16:35:46 -05:00
garyscavone
f13866e696 Merge pull request #44 from arielelkin/StkFrames_cast
StkFrames::operator+:  cast nFrames to unsigned int
2015-04-08 07:59:33 -04:00
Ariel Elkin
9533f2bc66 StkFrames::operator+: cast nFrames to unsigned int given we add it to a value of type unsigned int 2015-04-08 02:48:46 +02:00
Gary Scavone
8c0ad97a25 Update to demo project Makefile.in and Demo.tcl to fix problems due to previous updates. 2015-03-25 16:09:03 -04:00
garyscavone
87461b1471 Merge pull request #42 from Ahbee/fixTypo
fixed typos in `getChannel`  `setChannel()`
2015-03-25 15:53:17 -04:00
Abhi
58fc744ea4 fixed typos in getChannel setChannel() 2015-03-23 23:00:49 -04:00
Gary Scavone
35f66c806e Bugfix in DelayL::setDelay(); Updated tick() functions in RtWvIn and InetWvIn to support channel offset 2014-11-03 15:33:44 -05:00
garyscavone
0a7c541cdc Merge pull request #38 from Ahbee/rename
Renamed StkFrames::copyChannel to StkFrames::getChannel
2014-11-03 14:11:17 -05:00
garyscavone
0e55d2d2b1 Merge pull request #37 from Ahbee/feature-operator+
add StkFrames::operator+
2014-11-03 14:10:09 -05:00
garyscavone
c1c314e7d6 Merge pull request #36 from Ahbee/feature-setChannel
added StkFrames::setChannel
2014-11-03 14:09:40 -05:00
garyscavone
84d947c750 Merge pull request #39 from danlin/master
correct placement of #endif
2014-09-30 07:52:06 -04:00
Daniel Lindenfelser
05560b102d correct placement of #endif 2014-09-30 05:54:50 +02:00
Abhi
759fc187bc Renamed StkFrames::copyChannel
Renamed StkFrames::copyChannel to StkFrames::getChannel.
2014-09-21 21:28:39 -04:00
Abhi
46be0d56c3 added StkFrames::setChannel 2014-09-21 20:43:41 -04:00
Abhi
032e76da70 add StkFrames::operator+ 2014-09-21 18:06:47 -04:00
garyscavone
aae7f609cf Merge pull request #35 from Ahbee/copychannel
adds function StkFrames::copyChannel
2014-09-19 08:21:56 -04:00
garyscavone
d959a1167d Merge pull request #34 from Ahbee/FileWv_tick
add channel arg to WvIn::tick
2014-09-19 08:20:13 -04:00
garyscavone
c9f8c017bc Merge pull request #33 from Ahbee/BugFix_DelayL
Bug fix in delayL and delayA
2014-09-19 08:17:51 -04:00
Abhi
6094f40399 renamed argument sourceChannel to channel 2014-09-16 19:24:29 -04:00
Abhi
a2fb59f476 Fixed spelling 2014-09-16 17:57:30 -04:00
Abhi
f905623d10 added StkFrames::copyChannel 2014-09-16 17:53:18 -04:00
Abhi
b196c58c75 add channel arg to WvIn::tick
StkFrames& tick( StkFrames& frames ) ` is now StkFrames& tick(
StkFrames& frames, unsigned int channel = 0 )` . same applies to
FIleLoop and FileWvIn
2014-09-16 12:50:58 -04:00
Abhi
20b9411a5a fixed bug in DelayA :: setMaximumDelay
inputs_ needs to be set to all zeros
2014-09-13 19:25:08 -04:00
Abhi
bc3cfa8fb5 fixed bug in DelayL :: setMaximumDelay
need to initialize values to zero
2014-09-13 18:01:26 -04:00
Gary Scavone
d1acfb07ed Merge branch 'master' of https://github.com/thestk/stk with local. 2014-09-11 09:49:37 -04:00
Gary Scavone
b5f046871b Memory leak fix in StkFrames::operator= function 2014-09-11 09:46:25 -04:00
garyscavone
1de1f1e63d Merge pull request #30 from Karbonforms/master
fix Twang.cpp: not sure why this bug never was identified earlier (GS)
2014-09-06 21:10:50 -04:00
klf
4ce317a5a7 fix Twang.cpp
Was producing noise (values far in excess of +/- 1.0)
reverted line removed since 4.4.4
2014-08-21 10:01:57 +01:00
garyscavone
2e8a0cdd50 Merge pull request #27 from fsateler/stk-soname
Bump soname with each release
2014-08-11 14:23:42 -04:00
garyscavone
5f9f7f6f08 Merge pull request #29 from radarsat1/master
Finish renaming SKINI.msg and SKINI.tbl to SKINImsg.h and SKINItbl.h, re...
2014-08-11 14:21:59 -04:00
Stephen Sinclair
a2be4bc721 Finish renaming SKINI.msg and SKINI.tbl to SKINImsg.h and SKINItbl.h, respectively. 2014-08-07 11:53:21 +02:00
garyscavone
2437623d67 Merge pull request #26 from fsateler/rename-demo
Rename demo program to stk-demo
2014-06-10 20:25:17 -04:00
Felipe Sateler
0063a57dcb Bump soname with each release
Imitate the libtool -release style of versioning, as long as the ABI is not stable
2014-06-09 21:01:56 -04:00
Felipe Sateler
cc568a58c1 Rename demo program to stk-demo
This allows distributors to ship the program, because demo is too generic a name
2014-06-09 12:17:02 -04:00
Ariel Elkin
1799064d6f Update README-iOS.md 2014-05-12 15:22:07 -04:00
garyscavone
540d45dbbd Merge pull request #25 from arielelkin/rename-skini.msg
Rename SKINI.msg to SKINImsg.h and SKINI.tbl to SKINItbl.h
2014-05-06 09:19:00 -04:00
Ariel Elkin
222f81c1c1 Rename SKINI.msg to SKINImsg.h and SKINI.tbl to SKINItbl.h 2014-05-02 14:02:00 -04:00
228 changed files with 2581 additions and 1848 deletions

2
.gitignore vendored
View File

@@ -146,7 +146,7 @@ config.log
config.status config.status
configure configure
projects/demo/Makefile projects/demo/Makefile
projects/demo/demo projects/demo/stk-demo
projects/demo/Release projects/demo/Release
projects/demo/Debug projects/demo/Debug
projects/effects/Makefile projects/effects/Makefile

View File

@@ -1,9 +1,9 @@
% The Synthesis ToolKit in C++ (STK) % The Synthesis ToolKit in C++ (STK)
% Perry R. Cook and Gary P. Scavone % Perry R. Cook and Gary P. Scavone
% 1995--2014 % 1995--2016
# The Synthesis ToolKit in C++ (STK) # The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995--2014. By Perry R. Cook and Gary P. Scavone, 1995--2016.
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. 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.

View File

@@ -1,6 +1,6 @@
The Synthesis ToolKit in C++ (STK) The Synthesis ToolKit in C++ (STK)
Copyright (c) 1995--2014 Perry R. Cook and Gary P. Scavone Copyright (c) 1995--2016 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

View File

@@ -1,5 +1,5 @@
# The Synthesis ToolKit in C++ (STK) # The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995--2014. By Perry R. Cook and Gary P. Scavone, 1995--2016.
This distribution of the Synthesis ToolKit in C++ (STK) contains the following: This distribution of the Synthesis ToolKit in C++ (STK) contains the following:

1592
config/config.guess vendored

File diff suppressed because it is too large Load Diff

769
config/config.sub vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_INIT(STK, 4.5.0, gary@music.mcgill.ca, stk) AC_INIT(STK, 4.5.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 projects/eguitar/Makefile) AC_CONFIG_FILES(Makefile src/Makefile projects/demo/Makefile projects/effects/Makefile projects/ragamatic/Makefile projects/examples/Makefile projects/examples/libMakefile projects/eguitar/Makefile)
@@ -111,14 +111,16 @@ 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

View File

@@ -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--2014. By Perry R. Cook and Gary P. Scavone, 1995--2016.
Please read the file README and INSTALL for more general STK information. Please read the file README and INSTALL for more general STK information.

View File

@@ -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--2014. By Perry R. Cook and Gary P. Scavone, 1995--2016.
Please read the file README and INSTALL for more general STK information. Please read the file README and INSTALL for more general STK information.

View File

@@ -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--2014. By Perry R. Cook and Gary P. Scavone, 1995--2016.
Please read the file README and INSTALL for more general STK information. Please read the file README and INSTALL for more general STK information.

View File

@@ -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--2014. By Perry R. Cook and Gary P. Scavone, 1995--2016.
Please read the file README for more general STK information. Please read the file README for more general STK information.

View File

@@ -1,6 +1,13 @@
The Synthesis ToolKit in C++ (STK) The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995--2014. By Perry R. Cook and Gary P. Scavone, 1995--2016.
v4.5.1 (22 February 2016)
- 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) 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 - updated versions of RtAudio and RtMidi, with associated renaming of RtError class to either RtAudioError or RtMidiError and addition of WASAPI support in Windows

View File

@@ -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

View File

@@ -31,7 +31,7 @@ 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.5.0 PROJECT_NUMBER = 4.5.1
# 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.

View File

@@ -1,322 +1,266 @@
/*! \page download Download, Release Notes, and Bug Fixes /*! \page download Download, Release Notes, and Bug Fixes
\section down Download Version 4.5.0 (26 April 2014): \section down Download Version 4.5.1 (22 February 2016):
<UL>
<LI><A HREF="http://ccrma.stanford.edu/software/stk/release/stk-4.5.0.tar.gz">Source distribution</A></LI>
</UL>
- <A HREF="http://ccrma.stanford.edu/software/stk/release/stk-4.5.1.tar.gz">Source distribution</A>
\section notes Release Notes: \section notes Release Notes:
\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 \subsection v4dot5dot0 Version 4.5.0
- Updated versions of RtAudio and RtMidi, with associated renaming of RtError class to either RtAudioError or RtMidiError
<ul> - New iOS project files (thanks to Ariel Elkin)
<li>Updated versions of RtAudio and RtMidi, with associated renaming of RtError class to either RtAudioError or RtMidiError</li> - Bug fix in FreeVerb that could cause crackling for stereo input
<li>New iOS project files (thanks to Ariel Elkin)</li> - Various bug fixes and updates to minimize compiler warnings
<li>Bug fix in FreeVerb that could cause crackling for stereo input</li> - ADSR fix for decay/release time calculations
<li>Various bug fixes and updates to minimize compiler warnings</li> - Various updates to build system
<li>ADSR fix for decay/release time calculations</li>
<li>Various updates to build system</li>
</ul>
\subsection v4dot4dot4 Version 4.4.4 \subsection v4dot4dot4 Version 4.4.4
- New FreeVerb class (thanks to Greg Burlet)
<ul> - New Guitar class
<li>New FreeVerb class (thanks to Greg Burlet)</li> - New electric guitar project
<li>New Guitar class</li> - Updated versions of RtAudio and RtMidi
<li>New electric guitar project</li> - Cleaned / revised Shakers class
<li>Updated versions of RtAudio and RtMidi</li> - Bug fix in LentPitShift
<li>Cleaned / revised Shakers class</li> - Bug fix in Echo constructor
<li>Bug fix in LentPitShift</li> - Bug fix in FileWvIn (file size when chunking)
<li>Bug fix in Echo constructor</li> - Bug fix in StkFrames copy constructor
<li>Bug fix in FileWvIn (file size when chunking)</li>
<li>Bug fix in StkFrames copy constructor</li>
</ul>
\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 (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>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>
*/ */

View File

@@ -24,7 +24,7 @@ work with any standard C++ compiler.
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--2014 Perry R. Cook and Gary P. Scavone Copyright (c) 1995--2016 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

View File

@@ -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>&copy;1995--2014 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> <tr><td>&copy;1995--2016 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table> </table>
</BODY> </BODY>

View File

@@ -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.).

View File

@@ -32,7 +32,7 @@ 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>
@@ -134,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/98/2000/XP operating systems. STK realtime SKINI control input via piping is possible under Linux, Mac OS X, and Windows2000/XP 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:
@@ -167,13 +167,13 @@ where instruments include those described above and flags can be any or all of:
</UL> </UL>
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. 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:
@@ -181,7 +181,7 @@ from the <I><B>demo</B></I> directory will play the scorefile <I>bookert.ski</I>
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="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:
\code \code
wish < tcl/Physical.tcl | demo Clarinet -or -ip wish < tcl/Physical.tcl | stk-demo Clarinet -or -ip
\endcode \endcode
\section midi Realtime MIDI Control Input: \section midi Realtime MIDI Control Input:
@@ -189,17 +189,17 @@ wish < tcl/Physical.tcl | demo Clarinet -or -ip
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
*/ */

View File

@@ -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--2014. By Perry R. Cook and Gary P. Scavone, 1995--2016.
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.
@@ -173,7 +173,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

View File

@@ -1,5 +1,15 @@
This file contains instructions for integrating the STK in Xcode projects and solutions to common integration issues.
##Setup ##Setup
###If you have [Cocoapods](http://cocoapods.org/)
1. Add `pod 'STK', '~> 4.5'` to your Podfile.
1. Run `pod install`
###If you don't have Cocoapods
1. Clone or [download][download_link] the STK into your project's directory. 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 the **STK for iOS** folder, and drag and drop **STK.xcodeproj** into your Xcode project.
@@ -36,11 +46,23 @@ If this problem doesn't go away:
1. Move the STK directory within your project's directory. 1. Move the STK directory within your project's directory.
1. Follow step 1 from **Setup**, add `stk/include` to the *Header Search Paths*. 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](http://cocoapods.org/) for installation instructions.
###FileRead::open: could not open or find file (../../rawwaves/filename.raw)! ###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 copy the STK's raw wave files into your bundle. You'll know you need to if you get this runtime error: 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)!` `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. 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. 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: 1. Then add this code before using a class that needs the raw waves:

View File

@@ -202,8 +202,8 @@
B08F60DE18BA9B1800C14A90 /* SingWave.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SingWave.h; path = ../include/SingWave.h; sourceTree = "<group>"; }; B08F60DE18BA9B1800C14A90 /* SingWave.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SingWave.h; path = ../include/SingWave.h; sourceTree = "<group>"; };
B08F60DF18BA9B1800C14A90 /* Sitar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Sitar.h; sourceTree = "<group>"; }; B08F60DF18BA9B1800C14A90 /* Sitar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Sitar.h; sourceTree = "<group>"; };
B08F60E018BA9B1800C14A90 /* Skini.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Skini.h; path = ../include/Skini.h; sourceTree = "<group>"; }; B08F60E018BA9B1800C14A90 /* Skini.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Skini.h; path = ../include/Skini.h; sourceTree = "<group>"; };
B08F60E118BA9B1800C14A90 /* SKINI.msg */ = {isa = PBXFileReference; lastKnownFileType = text; name = SKINI.msg; path = ../include/SKINI.msg; sourceTree = "<group>"; }; B08F60E118BA9B1800C14A90 /* SKINImsg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SKINImsg.h; path = ../include/SKINImsg.h; sourceTree = "<group>"; };
B08F60E218BA9B1800C14A90 /* SKINI.tbl */ = {isa = PBXFileReference; lastKnownFileType = text; name = SKINI.tbl; path = ../include/SKINI.tbl; sourceTree = "<group>"; }; B08F60E218BA9B1800C14A90 /* SKINItbl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SKINItbl.h; path = ../include/SKINItbl.h; sourceTree = "<group>"; };
B08F60E418BA9B1800C14A90 /* Sphere.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Sphere.h; path = ../include/Sphere.h; sourceTree = "<group>"; }; B08F60E418BA9B1800C14A90 /* Sphere.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Sphere.h; path = ../include/Sphere.h; sourceTree = "<group>"; };
B08F60E518BA9B1800C14A90 /* StifKarp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StifKarp.h; sourceTree = "<group>"; }; B08F60E518BA9B1800C14A90 /* StifKarp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StifKarp.h; sourceTree = "<group>"; };
B08F60E618BA9B1800C14A90 /* Stk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Stk.h; path = ../include/Stk.h; sourceTree = "<group>"; }; B08F60E618BA9B1800C14A90 /* Stk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Stk.h; path = ../include/Stk.h; sourceTree = "<group>"; };
@@ -666,8 +666,8 @@
children = ( children = (
B08F60E018BA9B1800C14A90 /* Skini.h */, B08F60E018BA9B1800C14A90 /* Skini.h */,
B08F617D18BA9B1800C14A90 /* Skini.cpp */, B08F617D18BA9B1800C14A90 /* Skini.cpp */,
B08F60E118BA9B1800C14A90 /* SKINI.msg */, B08F60E118BA9B1800C14A90 /* SKINImsg.h */,
B08F60E218BA9B1800C14A90 /* SKINI.tbl */, B08F60E218BA9B1800C14A90 /* SKINItbl.h */,
); );
name = SKINI; name = SKINI;
path = ../src; path = ../src;
@@ -726,7 +726,7 @@
B08F608818BA9B0600C14A90 /* Project object */ = { B08F608818BA9B0600C14A90 /* Project object */ = {
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastUpgradeCheck = 0510; LastUpgradeCheck = 0720;
}; };
buildConfigurationList = B08F608B18BA9B0600C14A90 /* Build configuration list for PBXProject "STK" */; buildConfigurationList = B08F608B18BA9B0600C14A90 /* Build configuration list for PBXProject "STK" */;
compatibilityVersion = "Xcode 3.2"; compatibilityVersion = "Xcode 3.2";
@@ -895,6 +895,7 @@
B08F608C18BA9B0600C14A90 /* Debug */ = { B08F608C18BA9B0600C14A90 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ENABLE_TESTABILITY = YES;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
}; };
name = Debug; name = Debug;

View File

@@ -44,7 +44,13 @@
float sample = brass->tick(); float sample = brass->tick();
NSLog(@"Brass sample: %f", sample); 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: //Test Mandolin:
stk::Mandolin *mandolin = new stk::Mandolin(400); stk::Mandolin *mandolin = new stk::Mandolin(400);

View File

@@ -17,7 +17,7 @@ namespace stk {
be non-negative. All time settings are in seconds and must be be non-negative. All time settings are in seconds and must be
positive. positive.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -32,7 +32,7 @@ namespace stk {
- Frequency = 101 - Frequency = 101
- Volume = 128 - Volume = 128
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
Contributions by Esteban Maestre, 2011. Contributions by Esteban Maestre, 2011.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/
@@ -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_;

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -14,7 +14,7 @@ namespace stk {
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 1.0 on keyOn and to 0.0 on keyOff.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/
@@ -95,7 +95,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 +140,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:

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -35,7 +35,7 @@ namespace stk {
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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/
@@ -89,7 +89,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 file_.fileSize(); }; 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 +150,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:
@@ -172,6 +171,7 @@ protected:
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_;

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/
@@ -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

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -19,7 +19,7 @@ namespace stk {
(non-sweeping BiQuad filters), where N is set (non-sweeping BiQuad filters), where N is set
during instantiation. during instantiation.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -31,7 +31,7 @@ namespace stk {
- Two Fixed = 7 - Two Fixed = 7
- Clump = 8 - Clump = 8
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -16,7 +16,7 @@ namespace stk {
modulations to give a nice, natural human modulations to give a nice, natural human
modulation function. modulation function.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -22,7 +22,7 @@ namespace stk {
- Vibrato Gain = 1 - Vibrato Gain = 1
- Gain = 128 - Gain = 128
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -29,7 +29,7 @@ namespace stk {
systems, the pthread library is used. Under systems, the pthread library is used. Under
Windows, critical sections are used. Windows, critical sections are used.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -18,7 +18,7 @@ namespace stk {
another allpass in series, followed by two allpass filters in another allpass in series, followed by two allpass filters in
parallel with corresponding right and left outputs. parallel with corresponding right and left outputs.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -14,7 +14,7 @@ namespace stk {
C rand() function. The quality of the rand() C rand() function. The quality of the rand()
function varies from one OS to another. function varies from one OS to another.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -13,7 +13,7 @@ namespace stk {
provided for setting the pole position along the real axis of the provided for setting the pole position along the real axis of the
z-plane while maintaining a constant peak filter gain. z-plane while maintaining a constant peak filter gain.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -13,7 +13,7 @@ namespace stk {
provided for setting the zero position along the real axis of the provided for setting the zero position along the real axis of the
z-plane while maintaining a constant filter gain. z-plane while maintaining a constant filter gain.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -17,7 +17,7 @@ namespace stk {
allpass and comb delay filters. This class implements two series allpass and comb delay filters. This class implements two series
allpass units and two parallel comb filters. allpass units and two parallel comb filters.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -29,7 +29,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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -13,7 +13,7 @@ namespace stk {
set of 32 static phoneme formant parameters set of 32 static phoneme formant parameters
and provide access to those values. and provide access to those values.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -13,7 +13,7 @@ namespace stk {
This class implements a simple pitch shifter This class implements a simple pitch shifter
using delay lines. using delay lines.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -27,7 +27,7 @@ namespace stk {
Stanford, bearing the names of Karplus and/or Stanford, bearing the names of Karplus and/or
Strong. Strong.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -14,7 +14,7 @@ namespace stk {
coefficient. Another method is provided to create a DC blocking coefficient. Another method is provided to create a DC blocking
filter. filter.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -20,7 +20,7 @@ namespace stk {
Smith (1986), Hirschman, Cook, Scavone, and Smith (1986), Hirschman, Cook, Scavone, and
others for more information. others for more information.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -23,7 +23,7 @@ namespace stk {
- Zero Radii = 1 - Zero Radii = 1
- Envelope Gain = 128 - Envelope Gain = 128
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -10,7 +10,7 @@
RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/ RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
RtAudio: realtime audio i/o C++ classes RtAudio: realtime audio i/o C++ classes
Copyright (c) 2001-2014 Gary P. Scavone Copyright (c) 2001-2016 Gary P. Scavone
Permission is hereby granted, free of charge, to any person Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files obtaining a copy of this software and associated documentation files
@@ -45,7 +45,7 @@
#ifndef __RTAUDIO_H #ifndef __RTAUDIO_H
#define __RTAUDIO_H #define __RTAUDIO_H
#define RTAUDIO_VERSION "4.1.1" #define RTAUDIO_VERSION "4.1.2"
#include <string> #include <string>
#include <vector> #include <vector>
@@ -286,12 +286,13 @@ class RtAudio
bool isDefaultOutput; /*!< true if this is the default output device. */ bool isDefaultOutput; /*!< true if this is the default output device. */
bool isDefaultInput; /*!< true if this is the default input device. */ bool isDefaultInput; /*!< true if this is the default input device. */
std::vector<unsigned int> sampleRates; /*!< Supported sample rates (queried from list of standard rates). */ std::vector<unsigned int> sampleRates; /*!< Supported sample rates (queried from list of standard rates). */
unsigned int preferredSampleRate; /*!< Preferred sample rate, eg. for WASAPI the system sample rate. */
RtAudioFormat nativeFormats; /*!< Bit mask of supported data formats. */ RtAudioFormat nativeFormats; /*!< Bit mask of supported data formats. */
// Default constructor. // Default constructor.
DeviceInfo() DeviceInfo()
:probed(false), outputChannels(0), inputChannels(0), duplexChannels(0), :probed(false), outputChannels(0), inputChannels(0), duplexChannels(0),
isDefaultOutput(false), isDefaultInput(false), nativeFormats(0) {} isDefaultOutput(false), isDefaultInput(false), preferredSampleRate(0), nativeFormats(0) {}
}; };
//! The structure for specifying input or ouput stream parameters. //! The structure for specifying input or ouput stream parameters.

View File

@@ -8,7 +8,7 @@
RtMidi WWW site: http://music.mcgill.ca/~gary/rtmidi/ RtMidi WWW site: http://music.mcgill.ca/~gary/rtmidi/
RtMidi: realtime MIDI i/o C++ classes RtMidi: realtime MIDI i/o C++ classes
Copyright (c) 2003-2014 Gary P. Scavone Copyright (c) 2003-2016 Gary P. Scavone
Permission is hereby granted, free of charge, to any person Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files obtaining a copy of this software and associated documentation files
@@ -43,7 +43,7 @@
#ifndef RTMIDI_H #ifndef RTMIDI_H
#define RTMIDI_H #define RTMIDI_H
#define RTMIDI_VERSION "2.1.0" #define RTMIDI_VERSION "2.1.1"
#include <exception> #include <exception>
#include <iostream> #include <iostream>
@@ -109,7 +109,7 @@ class RtMidiError : public std::exception
Note that class behaviour is undefined after a critical error (not Note that class behaviour is undefined after a critical error (not
a warning) is reported. a warning) is reported.
*/ */
typedef void (*RtMidiErrorCallback)( RtMidiError::Type type, const std::string &errorText ); typedef void (*RtMidiErrorCallback)( RtMidiError::Type type, const std::string &errorText, void *userData );
class MidiApi; class MidiApi;
@@ -161,7 +161,7 @@ class RtMidi
The callback function will be called whenever an error has occured. It is best The callback function will be called whenever an error has occured. It is best
to set the error callback function before opening a port. to set the error callback function before opening a port.
*/ */
virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL ) = 0; virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 ) = 0;
protected: protected:
@@ -322,7 +322,7 @@ class RtMidiIn : public RtMidi
The callback function will be called whenever an error has occured. It is best The callback function will be called whenever an error has occured. It is best
to set the error callback function before opening a port. to set the error callback function before opening a port.
*/ */
virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL ); virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 );
protected: protected:
void openMidiApi( RtMidi::Api api, const std::string clientName, unsigned int queueSizeLimit ); void openMidiApi( RtMidi::Api api, const std::string clientName, unsigned int queueSizeLimit );
@@ -413,7 +413,7 @@ class RtMidiOut : public RtMidi
The callback function will be called whenever an error has occured. It is best The callback function will be called whenever an error has occured. It is best
to set the error callback function before opening a port. to set the error callback function before opening a port.
*/ */
virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL ); virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 );
protected: protected:
void openMidiApi( RtMidi::Api api, const std::string clientName ); void openMidiApi( RtMidi::Api api, const std::string clientName );
@@ -448,7 +448,7 @@ class MidiApi
virtual std::string getPortName( unsigned int portNumber ) = 0; virtual std::string getPortName( unsigned int portNumber ) = 0;
inline bool isPortOpen() const { return connected_; } inline bool isPortOpen() const { return connected_; }
void setErrorCallback( RtMidiErrorCallback errorCallback ); void setErrorCallback( RtMidiErrorCallback errorCallback, void *userData );
//! A basic error reporting function for RtMidi classes. //! A basic error reporting function for RtMidi classes.
void error( RtMidiError::Type type, std::string errorString ); void error( RtMidiError::Type type, std::string errorString );
@@ -460,6 +460,8 @@ protected:
bool connected_; bool connected_;
std::string errorString_; std::string errorString_;
RtMidiErrorCallback errorCallback_; RtMidiErrorCallback errorCallback_;
bool firstErrorOccurred_;
void *errorCallbackUserData_;
}; };
class MidiInApi : public MidiApi class MidiInApi : public MidiApi
@@ -547,7 +549,7 @@ inline unsigned int RtMidiIn :: getPortCount( void ) { return rtapi_->getPortCou
inline std::string RtMidiIn :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); } inline std::string RtMidiIn :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); }
inline void RtMidiIn :: ignoreTypes( bool midiSysex, bool midiTime, bool midiSense ) { ((MidiInApi *)rtapi_)->ignoreTypes( midiSysex, midiTime, midiSense ); } inline void RtMidiIn :: ignoreTypes( bool midiSysex, bool midiTime, bool midiSense ) { ((MidiInApi *)rtapi_)->ignoreTypes( midiSysex, midiTime, midiSense ); }
inline double RtMidiIn :: getMessage( std::vector<unsigned char> *message ) { return ((MidiInApi *)rtapi_)->getMessage( message ); } inline double RtMidiIn :: getMessage( std::vector<unsigned char> *message ) { return ((MidiInApi *)rtapi_)->getMessage( message ); }
inline void RtMidiIn :: setErrorCallback( RtMidiErrorCallback errorCallback ) { rtapi_->setErrorCallback(errorCallback); } inline void RtMidiIn :: setErrorCallback( RtMidiErrorCallback errorCallback, void *userData ) { rtapi_->setErrorCallback(errorCallback, userData); }
inline RtMidi::Api RtMidiOut :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); } inline RtMidi::Api RtMidiOut :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); }
inline void RtMidiOut :: openPort( unsigned int portNumber, const std::string portName ) { rtapi_->openPort( portNumber, portName ); } inline void RtMidiOut :: openPort( unsigned int portNumber, const std::string portName ) { rtapi_->openPort( portNumber, portName ); }
@@ -557,7 +559,7 @@ inline bool RtMidiOut :: isPortOpen() const { return rtapi_->isPortOpen(); }
inline unsigned int RtMidiOut :: getPortCount( void ) { return rtapi_->getPortCount(); } inline unsigned int RtMidiOut :: getPortCount( void ) { return rtapi_->getPortCount(); }
inline std::string RtMidiOut :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); } inline std::string RtMidiOut :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); }
inline void RtMidiOut :: sendMessage( std::vector<unsigned char> *message ) { ((MidiOutApi *)rtapi_)->sendMessage( message ); } inline void RtMidiOut :: sendMessage( std::vector<unsigned char> *message ) { ((MidiOutApi *)rtapi_)->sendMessage( message ); }
inline void RtMidiOut :: setErrorCallback( RtMidiErrorCallback errorCallback ) { rtapi_->setErrorCallback(errorCallback); } inline void RtMidiOut :: setErrorCallback( RtMidiErrorCallback errorCallback, void *userData ) { rtapi_->setErrorCallback(errorCallback, userData); }
// **************************************************************** // // **************************************************************** //
// //

View File

@@ -24,7 +24,7 @@ namespace stk {
that takes an StkFrames object for multi-channel and/or that takes an StkFrames object for multi-channel and/or
multi-frame data. multi-frame data.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/
@@ -83,15 +83,16 @@ 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.
/*! /*!
If the device is "stopped", it is "started". The number of If the device is "stopped", it is "started". The \c channel
channels in the StkFrames argument must equal the number of argument plus the number of input channels must be less than the
channels specified during instantiation. However, this is only number of channels in the StkFrames argument (the first channel is
checked if _STK_DEBUG_ is defined during compilation, in which specified by 0). However, range checking is only performed if
case an incompatibility will trigger an StkError exception. _STK_DEBUG_ is defined during compilation, in which case an
out-of-range value will trigger an StkError exception.
*/ */
StkFrames& tick( StkFrames& frames ); StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
// This function is not intended for general use but must be // This function is not intended for general use but must be
// public for access from the audio callback function. // public for access from the audio callback function.

View File

@@ -23,7 +23,7 @@ namespace stk {
that takes a reference to an StkFrames object for multi-channel that takes a reference to an StkFrames object for multi-channel
and/or multi-frame data. and/or multi-frame data.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -9,7 +9,7 @@
where <name> is the string used in the SKINI stream. where <name> is the string used in the SKINI stream.
by Perry R. Cook, 1995--2014. by Perry R. Cook, 1995--2016.
*/ */
/*********************************************************/ /*********************************************************/

View File

@@ -1,5 +1,5 @@
#include "SKINI.msg" #include "SKINImsg.h"
namespace stk { namespace stk {

View File

@@ -15,7 +15,7 @@ namespace stk {
This instrument provides an ADSR envelope, a one-pole filter, and This instrument provides an ADSR envelope, a one-pole filter, and
structures for an arbitrary number of attack and looped files. structures for an arbitrary number of attack and looped files.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -44,7 +44,7 @@ namespace stk {
- Vibrato Gain = 1 - Vibrato Gain = 1
- Breath Pressure = 128 - Breath Pressure = 128
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -53,7 +53,7 @@ namespace stk {
- Water Drops = 21 - Water Drops = 21
- Tuned Bamboo Chimes = 22 - Tuned Bamboo Chimes = 22
by Perry R. Cook with updates by Gary Scavone, 1995--2014. by Perry R. Cook with updates by Gary Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -25,7 +25,7 @@ namespace stk {
- Envelope Rate = 11 - Envelope Rate = 11
- Gain = 128 - Gain = 128
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -18,7 +18,7 @@ namespace stk {
The "table" length, set in SineWave.h, is 2048 samples by default. The "table" length, set in SineWave.h, is 2048 samples by default.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -18,7 +18,7 @@ namespace stk {
Within STK, it is used as an excitation source for other Within STK, it is used as an excitation source for other
instruments. instruments.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -25,7 +25,7 @@ namespace stk {
Stanford, bearing the names of Karplus and/or Stanford, bearing the names of Karplus and/or
Strong. Strong.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -31,7 +31,7 @@ namespace stk {
\sa \ref skini \sa \ref skini
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/
@@ -41,7 +41,7 @@ class Skini : public Stk
//! A message structure to store and pass parsed SKINI messages. //! A message structure to store and pass parsed SKINI messages.
struct Message { struct Message {
long type; /*!< The message type, as defined in SKINI.msg. */ long type; /*!< The message type, as defined in SKINImsg.h. */
long channel; /*!< The message channel (not limited to 16!). */ long channel; /*!< The message channel (not limited to 16!). */
StkFloat time; /*!< The message time stamp in seconds (delta or absolute). */ StkFloat time; /*!< The message time stamp in seconds (delta or absolute). */
std::vector<StkFloat> floatValues; /*!< The message values read as floats (values are type-specific). */ std::vector<StkFloat> floatValues; /*!< The message values read as floats (values are type-specific). */

View File

@@ -31,7 +31,7 @@ namespace stk {
number of static functions for use with external socket number of static functions for use with external socket
descriptors. descriptors.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -13,7 +13,7 @@ namespace stk {
This class implements a spherical ball with This class implements a spherical ball with
radius, mass, position, and velocity parameters. radius, mass, position, and velocity parameters.
by Perry R. Cook, 1995--2014. by Perry R. Cook, 1995--2016.
*/ */
/***************************************************/ /***************************************************/
@@ -41,7 +41,7 @@ public:
//! Get the relative position of the given point to the sphere as a 3D vector. //! Get the relative position of the given point to the sphere as a 3D vector.
Vector3D* getRelativePosition( Vector3D *position ); Vector3D* getRelativePosition( Vector3D *position );
//! Set the velcoity of the sphere as a 3D vector. //! Set the velocity of the sphere as a 3D vector.
StkFloat getVelocity( Vector3D* velocity ); StkFloat getVelocity( Vector3D* velocity );
//! Returns the distance from the sphere boundary to the given position (< 0 if inside). //! Returns the distance from the sphere boundary to the given position (< 0 if inside).

View File

@@ -29,7 +29,7 @@ namespace stk {
- String Sustain = 11 - String Sustain = 11
- String Stretch = 1 - String Stretch = 1
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/

View File

@@ -40,7 +40,7 @@ namespace 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--2014 Perry R. Cook and Gary P. Scavone Copyright (c) 1995--2016 Perry R. Cook and Gary P. Scavone
Permission is hereby granted, free of charge, to any person Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files obtaining a copy of this software and associated documentation files
@@ -171,7 +171,10 @@ public:
class basis. class basis.
*/ */
void ignoreSampleRateChange( bool ignore = true ) { ignoreSampleRateChange_ = ignore; }; void ignoreSampleRateChange( bool ignore = true ) { ignoreSampleRateChange_ = ignore; };
//! Static method that frees memory from alertList_.
static void clear_alertList(){std::vector<Stk *>().swap(alertList_);};
//! Static method that returns the current rawwave path. //! Static method that returns the current rawwave path.
static std::string rawwavePath(void) { return rawwavepath_; } static std::string rawwavePath(void) { return rawwavepath_; }
@@ -265,7 +268,7 @@ protected:
Possible future improvements in this class could include functions Possible future improvements in this class could include functions
to convert to and return other data types. to convert to and return other data types.
by Perry R. Cook and Gary P. Scavone, 1995--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/
@@ -303,6 +306,14 @@ public:
checking is performed unless _STK_DEBUG_ is defined. checking is performed unless _STK_DEBUG_ is defined.
*/ */
StkFloat operator[] ( size_t n ) const; StkFloat operator[] ( size_t n ) const;
//! Sum operator
/*!
The dimensions of the argument are expected to be the same as
self. No range checking is performed unless _STK_DEBUG_ is
defined.
*/
StkFrames operator+(const StkFrames &frames) const;
//! Assignment by sum operator into self. //! Assignment by sum operator into self.
/*! /*!
@@ -373,6 +384,22 @@ public:
*/ */
void resize( size_t nFrames, unsigned int nChannels, StkFloat value ); void resize( size_t nFrames, unsigned int nChannels, StkFloat value );
//! Retrieves a single channel
/*!
Copies the specified \c channel into \c destinationFrames's \c destinationChannel. \c destinationChannel must be between 0 and destination.channels() - 1 and
\c channel must be between 0 and channels() - 1. destination.frames() must be >= frames().
No range checking is performed unless _STK_DEBUG_ is defined.
*/
StkFrames& getChannel(unsigned int channel,StkFrames& destinationFrames, unsigned int destinationChannel) const;
//! Sets a single channel
/*!
Copies the \c sourceChannel of \c sourceFrames into the \c channel of self.
SourceFrames.frames() must be equal to frames().
No range checking is performed unless _STK_DEBUG_ is defined.
*/
void setChannel(unsigned int channel,const StkFrames &sourceFrames,unsigned int sourceChannel);
//! Return the number of channels represented by the data. //! Return the number of channels represented by the data.
unsigned int channels( void ) const { return nChannels_; }; unsigned int channels( void ) const { return nChannels_; };
@@ -461,6 +488,25 @@ inline StkFloat StkFrames :: operator() ( size_t frame, unsigned int channel ) c
return data_[ frame * nChannels_ + channel ]; return data_[ frame * nChannels_ + channel ];
} }
inline StkFrames StkFrames::operator+(const StkFrames &f) const
{
#if defined(_STK_DEBUG_)
if ( f.frames() != nFrames_ || f.channels() != nChannels_ ) {
std::ostringstream error;
error << "StkFrames::operator+: frames argument must be of equal dimensions!";
Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
}
#endif
StkFrames sum((unsigned int)nFrames_,nChannels_);
StkFloat *sumPtr = &sum[0];
const StkFloat *fptr = f.data_;
const StkFloat *dPtr = data_;
for (unsigned int i = 0; i < size_; i++) {
*sumPtr++ = *fptr++ + *dPtr++;
}
return sum;
}
inline void StkFrames :: operator+= ( StkFrames& f ) inline void StkFrames :: operator+= ( StkFrames& f )
{ {

View File

@@ -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--2014. by Perry R. Cook and Gary P. Scavone, 1995--2016.
*/ */
/***************************************************/ /***************************************************/
@@ -215,6 +215,6 @@ inline StkFrames& TapDelay :: tick( StkFrames& iFrames, StkFrames& oFrames, unsi
return iFrames; return iFrames;
} }
#endif
} // stk namespace } // stk namespace
#endif

Some files were not shown because too many files have changed in this diff Show More