15 Commits
4.0 ... 4.2.0

Author SHA1 Message Date
Gary Scavone
de344668dd Release 4.2.0 tarball 2013-09-29 23:39:37 +02:00
Stephen Sinclair
fe20fe92a2 Merge 4.2.0 into releases 2013-09-29 23:38:59 +02:00
Gary Scavone
e11bff2fe8 Release 4.1.3 tarball 2013-09-29 23:38:16 +02:00
Stephen Sinclair
503ed3cc9f Merge 4.1.3 into releases 2013-09-29 23:37:48 +02:00
Gary Scavone
5d63b50e85 Release 4.1.2 tarball 2013-09-29 23:37:27 +02:00
Stephen Sinclair
d12ef806ac Merge 4.1.2 into releases 2013-09-29 23:37:02 +02:00
Gary Scavone
ffce5357c6 Release 4.1.1 tarball 2013-09-29 23:36:33 +02:00
Stephen Sinclair
b39c0bb101 Merge 4.1.1 into releases 2013-09-29 23:35:55 +02:00
Gary Scavone
f25eb5c3d7 Release 4.1 tarball 2013-09-29 23:35:44 +02:00
Stephen Sinclair
71e5c027fb Merge 4.1 into releases 2013-09-29 23:34:55 +02:00
Gary Scavone
a6381b9d38 Version 4.2.0 2013-09-29 23:06:14 +02:00
Gary Scavone
cf06b7598b Version 4.1.3 2013-09-29 23:06:05 +02:00
Gary Scavone
586b0add5f Version 4.1.2 2013-09-29 23:05:20 +02:00
Gary Scavone
6e0d1955a8 Version 4.1.1 2013-09-29 23:05:09 +02:00
Gary Scavone
2f09fcd019 Version 4.1 2013-09-29 23:04:59 +02:00
882 changed files with 88573 additions and 85554 deletions

41
INSTALL Normal file
View File

@@ -0,0 +1,41 @@
The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995-2004.
The Synthesis ToolKit in C++ can be used in a variety of ways, depending on your particular needs. Some people just choose the classes they need for a particular project and copy those to their project directory. Others like to compile and link to a library of object files. STK was not designed with one particular style of use in mind.
To configure and compile (on Unix systems):
1. Unpack the STK distribution (tar -xzf stk-4.x.x.tar.gz).
2. From within the directory containing this file, run configure:
./configure
3. From within each project directory, type "make".
4. To compile a library of objects, type "make" from within the src directory.
Several options can be passed to configure, including:
--disable-realtime = only compile generic non-realtime classes
--enable-debug = enable various debug output
--with-alsa = choose native ALSA API support (default, linux only)
--with-jack = choose native JACK server API support (linux only)
--with-oss = choose native OSS API support (linux only)
It is now possible to specify more than one Linux audio API. Note however that the ALSA library is required in order to compile the RtMidi class, even if the "--with-oss" option is provided (only the OSS audio API will be used, not the OSS MIDI API). Typing "./configure --help" will display all the available options. In addition, it is possible to specify the RAWWAVES and INCLUDE paths to configure as (ex. to set to /home/gary/rawwaves and /home/gary/include):
./configure RAWWAVE_PATH="/home/gary/rawwaves/"
./configure INCLUDE_PATH="/home/gary/include/"
The ending "/" is required for the RAWWAVES path. The default behavior will set a relative path that works for the project files included with the distribution (assuming they are not moved). You can also change the RAWWAVE_PATH dynamically via the static Stk::setRawwavePath() function.
If you wish to use a different compiler than that selected by configure, specify that compiler in the command line (ex. to use CC):
./configure CXX=CC
In addition, a linux RPM is available from the Planet CCRMA WWW site (http://ccrma.stanford.edu/planetccrma/software/).
For Windows Users:
An STK distribution is available which contains precompiled executables. In addition, Visual C++ project files are included for each of the example STK projects.

211
README
View File

@@ -1,115 +1,96 @@
The Synthesis ToolKit in C++ (STK) The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995-2002. By Perry R. Cook and Gary P. Scavone, 1995-2004.
This distribution of the Synthesis ToolKit in C++ (STK) contains the following: This distribution of the Synthesis ToolKit in C++ (STK) contains the following:
include: STK class header files include: STK class header files
src: STK class source files src: STK class source files
rawwaves: STK audio files (1-channel, 16-bit, big-endian) rawwaves: STK audio files (1-channel, 16-bit, big-endian)
doc: STK documentation doc: STK documentation
projects: example STK programs projects: example STK projects and programs
Please read the Legal and Ethical notes near the bottom of this document. Please read the Legal and Ethical notes near the bottom of this document.
For compiling and installing STK, see the INSTALL file in this directory.
OVERVIEW:
The Synthesis ToolKit in C++ (STK) is a set of audio signal processing and synthesis classes and algorithms written in C++. You can use these classes to create programs that make sounds with a variety of synthesis techniques. This is not a terribly novel concept, except that the Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (no libraries, no hidden drivers, and all source code is included). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 8 years now. STK currently runs with "realtime" support (audio and MIDI) on SGI (Irix), Linux, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler. OVERVIEW:
The Synthesis ToolKit is free for non-commercial use. The only parts of the Synthesis ToolKit that are platform-dependent concern real-time audio and MIDI input and output, and that is taken care of with a few special classes. The interface for MIDI input and the simple <A HREF="http://dev.scriptics.com">Tcl/Tk</A> graphical user interfaces (GUIs) provided is the same, so it's easy to experiment in real time using either the GUIs or MIDI. The Synthesis ToolKit can generate simultaneous SND (AU), WAV, AIFF, and MAT-file output soundfile formats (as well as realtime sound output), so you can view your results using one of a large variety of sound/signal analysis tools already available (e.g. <A HREF="http://www-ccrma.stanford.edu/software/snd/">Snd</A>, Cool Edit, Matlab). The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. The Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (all source included, no unusual libraries, and no hidden drivers). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 10 years now. STK currently runs with "realtime" support (audio and MIDI) on SGI (Irix), Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler.
The Synthesis Toolkit is not one particular program. Rather, it is a set of C++ classes that you can use to create your own programs. A few example applications are provided to demonstrate some of the ways to use the classes. If you have specific needs, you will probably have to either modify the example programs or write a new program altogether. Further, the example programs don't have a fancy GUI wrapper. If you feel the need to have a "drag and drop" graphical patching GUI, you probably don't want to use the ToolKit. Spending hundreds of hours making platform-dependent graphics code would go against one of the fundamental design goals of the ToolKit - platform independence. The Synthesis ToolKit is free for non-commercial use. The only parts of the Synthesis ToolKit that are platform-dependent concern real-time audio and MIDI input and output, and that is taken care of with a few special classes. The interface for MIDI input and the simple Tcl/Tk graphical user interfaces (GUIs) provided is the same, so it's easy to experiment in real time using either the GUIs or MIDI. The Synthesis ToolKit can generate simultaneous SND (AU), WAV, AIFF, and MAT-file output soundfile formats (as well as realtime sound output), so you can view your results using one of a large variety of sound/signal analysis tools already available (e.g. Snd, Cool Edit, Matlab).
For those instances where a simple GUI with sliders and buttons is helpful, we use <A HREF="http://dev.scriptics.com">Tcl/Tk</A> (which is freely distributed for all the supported ToolKit platforms). A number of Tcl/Tk GUI scripts are distributed with the ToolKit release. For control, the Synthesis Toolkit uses raw MIDI (on supported platforms), and SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like text message synthesis control format). The Synthesis Toolkit is not one particular program. Rather, it is a set of C++ classes that you can use to create your own programs. A few example applications are provided to demonstrate some of the ways to use the classes. If you have specific needs, you will probably have to either modify the example programs or write a new program altogether. Further, the example programs don't have a fancy GUI wrapper. If you feel the need to have a "drag and drop" graphical patching GUI, you probably don't want to use the ToolKit. Spending hundreds of hours making platform-dependent graphics code would go against one of the fundamental design goals of the ToolKit - platform independence.
For those instances where a simple GUI with sliders and buttons is helpful, we use Tcl/Tk (http://dev.scriptics.com) which is freely distributed for all the supported ToolKit platforms. A number of Tcl/Tk GUI scripts are distributed with the ToolKit release. For control, the Synthesis Toolkit uses raw MIDI (on supported platforms), and SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like text message synthesis control format).
SYSTEM REQUIREMENTS:
See the individual README's (eg. README-linux) for platform specific information and system requirements. In general, you will use either the provided Makefiles (Unix platforms) or the VC++ workspace files to compile the example programs. To use the Tcl/Tk GUIs, you will need Tcl/Tk version 8.0 or higher. SYSTEM REQUIREMENTS:
See the individual README's (eg. README-linux) in the /doc directory for platform specific information and system requirements. In general, you will use the configure script to create Makefiles on unix platforms or the VC++ workspace files to compile the example programs. To use the Tcl/Tk GUIs, you will need Tcl/Tk version 8.0 or higher.
WHAT'S NEW:
STK has undergone several key revisions, changes, and additions since its last release. Despite being available in one form or another since 1996, we still consider STK to be alpha software. Thus, backward compatability has not been a priority. Please read the Release Notes to see what has changed since the last release. WHAT'S NEW (AND NOT SO NEW):
The control message handling scheme has been simplified greatly through the use of the Messager class. It is now possible to have access to simultaneous piped, socketed, and/or MIDI input control messages. In most cases, this should eliminate the use of the Md2Skini program. Despite being available in one form or another since 1996, we still consider STK to be alpha software. We attempt to maintain backward compatability but changes are sometimes made in an effort to improve the overall design or performance of the software. Please read the Release Notes to see what has changed since the last release.
Realtime audio input capabilities were added to STK with release 3.0, though the behavior of such is very hardware dependent. Under Linux and Irix, audio input and output are possible with very low latency. Using the Windoze DirectSound API, minimum dependable output sound latency seems to be around 20 milliseconds or so, while input sound latency is on the order of a hundred milliseconds or more! A new StkFrames class has been created to facilitate the handling and passing of multichannel, vectorized audio data. All STK classes have been updated to include tick() functions which accept StkFrames arguments.
As mentioned above, it is possible to record the audio ouput of an STK program to .snd, .wav, .raw, .aif, and .mat (Matlab MAT-file) output file types. Though somewhat obsolete, the program Md2Skini can be used to write SKINI scorefiles from realtime MIDI input. Finally, STK should compile with non-realtime functionality on any platform with a generic C++ compiler. The control message handling scheme has been simplified greatly through the use of the Messager class. It is now possible to have access to simultaneous piped, socketed, and/or MIDI input control messages. In most cases, this should eliminate the use of the Md2Skini program.
For those who wish to make a library from the core STK classes, there is a Makefile in the src directory that will accomplish that (Linux and SGI only). Realtime audio input capabilities were added to STK with release 3.0, though the behavior of such is very hardware dependent. Under Linux, Macintosh OS-X, and Irix, audio input and output are possible with very low latency. Using the Windoze DirectSound API, minimum dependable output sound latency seems to be around 20 milliseconds or so, while input sound latency is on the order of a hundred milliseconds or more!
As mentioned above, it is possible to record the audio ouput of an STK program to .snd, .wav, .raw, .aif, and .mat (Matlab MAT-file) output file types. Though somewhat obsolete, the program Md2Skini can be used to write SKINI scorefiles from realtime MIDI input. Finally, STK should compile with non-realtime functionality on any platform with a generic C++ compiler.
DISCLAIMER:
For those who wish to make a library from the core STK classes, the configure script generates a Makefile in the src directory that will accomplish that (Linux, SGI, and Macintosh OS X only).
You probably already guessed this, but just to be sure, we don't guarantee anything works. :-) It's free ... what do you expect? If you find a bug, please let us know and we'll try to correct it. You can also make suggestions, but again, no guarantees. Send email to prc@cs.princeton.edu and gary@ccrma.stanford.edu.
DISCLAIMER:
LEGAL AND ETHICAL:
You probably already guessed this, but just to be sure, we don't guarantee anything works. :-) It's free ... what do you expect? If you find a bug, please let us know and we'll try to correct it. You can also make suggestions, but again, no guarantees. Send email to the mail list.
This software was designed and created to be made publicly available for free, primarily for academic purposes, so if you use it, pass it on with this documentation, and for free.
If you make a million dollars with it, give us some. If you make compositions with it, put us in the program notes. LEGAL AND ETHICAL:
Some of the concepts are covered by various patents, some known to us and likely others which are unknown. Many of the ones known to us are administered by the Stanford Office of Technology and Licensing. This software was designed and created to be made publicly available for free, primarily for academic purposes, so if you use it, pass it on with this documentation, and for free.
The good news is that large hunks of the techniques used here are public domain. To avoid subtle legal issues, we'll not state what's freely useable here, but we'll try to note within the various classes where certain things are likely to be protected by patents. If you make a million dollars with it, give us some. If you make compositions with it, put us in the program notes.
Some of the concepts are covered by various patents, some known to us and likely others which are unknown. Many of the ones known to us are administered by the Stanford Office of Technology and Licensing.
FURTHER READING:
The good news is that large hunks of the techniques used here are public domain. To avoid subtle legal issues, we'll not state what's freely useable here, but we'll try to note within the various classes where certain things are likely to be protected by patents.
For complete documentation on this ToolKit, the classes, etc., see the doc directory of the distribution or surf to http://www-ccrma.stanford.edu/software/stk/. Also check the platform specific README's for specific system requirements.
FURTHER READING:
PERRY'S NOTES FROM THE ORIGINAL DISTRIBUTION:
For complete documentation on this ToolKit, the classes, etc., see the doc directory of the distribution or surf to http://ccrma.stanford.edu/software/stk/. Also check the platform specific README's for specific system requirements.
This whole world was created with no particular hardware in mind. These examples are intended to be tutorial in nature, as a platform for the continuation of my research, and as a possible starting point for a software synthesis system. The basic motivation was to create the necessary unit generators to do the synthesis, processing, and control that I want to do and teach about. Little thought for optimization was given (see Object.cpp), and therefore improvements, especially speed enhancements, should be possible with these classes. It was written with some basic concepts in mind about how to let compilers optimize.
Your question at this point might be, "But Perry, with CMix, CMusic, CSound, CShells, CMonkeys, etc. already cluttering the landscape, why a new set of stupid C functions for music synthesis and processing?" The answers lie below. PERRY'S NOTES FROM THE ORIGINAL DISTRIBUTION:
1) I needed to port many of the things I've done This whole world was created with no particular hardware in mind. These examples are intended to be tutorial in nature, as a platform for the continuation of my research, and as a possible starting point for a software synthesis system. The basic motivation was to create the necessary unit generators to do the synthesis, processing, and control that I want to do and teach about. Little thought for optimization was given and therefore improvements, especially speed enhancements, should be possible with these classes. It was written with some basic concepts in mind about how to let compilers optimize.
into something which is generic enough to port
further to different machines. Your question at this point might be, "But Perry, with CMix, CMusic, CSound, CShells, CMonkeys, etc. already cluttering the landscape, why a new set of stupid C functions for music synthesis and processing?" The answers lie below.
2) I really plan to document this stuff, so that 1) I needed to port many of the things I've done into something which is generic enough to port further to different machines.
you don't have to be me to figure out what's
going on. (I'll probably be sorry I said this 2) I really plan to document this stuff, so that you don't have to be me to figure out what's going on. (I'll probably be sorry I said this in a couple of years, when even I can't figure out what I was thinking.)
in a couple of years, when even I can't figure
out what I was thinking.) 3) The classic difficulties most people have in trying to implement physical models are:
3) The classic difficulties most people have in A) They have trouble understanding the papers, and/or in turning the theory into practice.
trying to implement physical models are:
B) The Physical Model instruments are a pain to get to oscillate, and coming up with stable and meaningful parameter values is required to get the models to work at all.
A) They have trouble understanding the papers,
and/or in turning the theory into practice. This set of C++ unit generators and instruments might help to diminish the scores of emails I get asking what to do with those block diagrams I put in my papers.
B) The Physical Model instruments are a pain to get 4) I wanted to try some new stuff with modal synthesis, and implement some classic FM patches as well.
to oscillate, and coming up with stable and
meaningful parameter values is required to 5) I wanted to reimplement, and newly implement more of the intelligent and physical performer models I've talked about in some of my papers. But I wanted to do it in a portable way, and in such a way that I can hook up modules quickly. I also wanted to make these instruments connectable to such player objects, so folks like Brad Garton who really think a lot about the players can connect them to my instruments, a lot about which I think.
get the models to work at all.
6) More rationalizations to follow . . .
This set of C++ unit generators and instruments
might help to diminish the scores of emails I
get asking what to do with those block diagrams
I put in my papers.
4) I wanted to try some new stuff with modal synthesis,
and implement some classic FM patches as well.
5) I wanted to reimplement, and newly implement
more of the intelligent and physical performer
models I've talked about in some of my papers.
But I wanted to do it in a portable way, and in
such a way that I can hook up modules quickly.
I also wanted to make these instruments connectable
to such player objects, so folks like Brad Garton
who really think a lot about the players can connect
them to my instruments, a lot about which I think.
6) More rationalizations to follow . . .

189
bin/treesed Executable file
View File

@@ -0,0 +1,189 @@
#!/usr/bin/perl
# treesed
# Written January 1996 by Rick Jansen (rick@sara.nl)
# URL: http://www.sara.nl/rick
# usage: treesed pattern1 pattern2 -tree
# treesed pattern1 pattern2 -files file1 file2 ...
# example: treesed href HREF -files *.html
# Treesed searches for pattern1 and replaces pattern1 by pattern2
# if pattern2 supplied. If only pattern1 given treesed just searches.
# Treesed will search in all files and subdirectories of the current
# directory
#--------------------------------------------------------
# Parameters
$DoEdit=0;
$search_pattern = $ARGV[0];
$search_pattern =~ s/(\W)/\\$1/g; # escape regexp chars
shift;
while ($#ARGV >= 0) {
if ($ARGV[0] eq '-files') {
@temp_ls = @ARGV[1 .. $#ARGV];
# Get list of files, skip dirs
foreach $file (@ARGV[1 .. $#ARGV]) {
if (-f $file) {
push(@ls, $file);
}
}
last;
}
elsif ($ARGV[0] eq '-tree') {
&Get_LS;
last;
}
if (! -f $ARGV[0]) {
if (defined($replacement_pattern)) {
print "usage: treesed pattern1 <pattern2> -tree/-files <files>\n";
exit(1);
}
$replacement_pattern = $ARGV[0];
#$replacement_pattern =~ s/(\W)/\\$1/g; # escape regexp chars
$DoEdit=1;
shift;
}
}
# No files?
if ($#ls < 0) {
print "xx No input files\n";
exit(1);
}
print "search_pattern: $search_pattern\n";
print "replacement_pattern: $replacement_pattern\n";
if ($DoEdit) {
print "\n** EDIT MODE!\n\n"; }
else {
print "\n** Search mode\n\n";
}
#foreach $file (@ls) {
# print "$file \n";
#}
#--------------------------------------------------------
# Search list of files for pattern
$linepos=0;
$| = 1; # Force flush after every write
foreach $file (@ls) {
#print "$file\n";
print '.';
$linepos++;
if ($linepos > 50) {
$linepos=0;
print "\n";
}
if (!open(FILE, $file)) {
print "\nCould not open $file\n";
next;
}
$Found = 0;
$Count = 0;
$lineno = 0;
@lines = ();
while (<FILE>) {
$lineno++;
if (/$search_pattern/i) {
#print;
$Count++;
$Found = 1;
push(@lines, $lineno);
}
}
close(FILE);
if ($Found) {
print "\n$file: $Count lines on: @lines\n";
}
if ($Found && $DoEdit) { &Edit($file); }
}
$| = 0;
print "\n";
exit(0);
#--------------------------------------------------------
# Edit file
sub Edit {
# Replace $ARGV[0] with $ARGV[1] in $file
local($file) = @_;
local($bakfile) = $file.'.'.$$;
# First create backup
open(FILE, $file) || die "Could not open $file for read\n";
open(BAKFILE, ">$bakfile") || die "Could not open $bakfile for backup\n";
while (<FILE>) {
print BAKFILE;
}
close(BAKFILE);
close(FILE);
# Now replace $ARGV[0] by $ARGV[1] in the backupfile,
# result into $file
open(BAKFILE, $bakfile) || die "Could not open $bakfile for read\n";
open(FILE,">$file") || die "Could not open $file for write\n";
$Count=0;
while (<BAKFILE>) {
if (/$search_pattern/i) { $Count++; }
s/$search_pattern/$replacement_pattern/gi;
print FILE;
}
close(BAKFILE);
close(FILE);
print
"\nReplaced $search_pattern by $replacement_pattern on $Count lines in $file\n";
} #sub Edit
#--------------------------------------------------------
sub Get_LS {
# Get a list of full path names into array @ls
local(@localls)=`ls -R1`;
local($item,$Dir);
#print "localls: @localls\n";
$Dir='';
foreach $item (@localls) {
#print "$item\n";
if ($item =~ /:$/) {
$Dir=$item;
chop($Dir);
$Dir =~ s/:$/\//;
}
else {
chop($item);
$item = $Dir.$item;
if ($item !~ /^\s*$/) { push(@ls, $item); }
}
}
@localls=();
} # sub Get_LS

1371
config.guess vendored Executable file

File diff suppressed because it is too large Load Diff

1362
config.sub vendored Normal file

File diff suppressed because it is too large Load Diff

5770
configure vendored Executable file

File diff suppressed because it is too large Load Diff

125
configure.ac Normal file
View File

@@ -0,0 +1,125 @@
# Process this file with autoconf to produce a configure script.
AC_INIT(STK, 4.2.0, gary@music.mcgill.ca, stk)
AC_CONFIG_SRCDIR(src/Stk.cpp)
AC_CONFIG_FILES(src/Makefile projects/demo/Makefile projects/effects/Makefile projects/ragamatic/Makefile projects/examples/Makefile)
# Checks for programs.
AC_PROG_CC
AC_PROG_CXX(g++ CC c++ cxx)
AC_PROG_CXX
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h termio.h unistd.h)
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_C_BIGENDIAN
AC_EGREP_CPP(yes,
[#ifndef WORDS_BIGENDIAN
yes
#endif
], [AC_SUBST( byte_order, [-D__LITTLE_ENDIAN__] )] )
AC_MSG_CHECKING(for RAWWAVE_PATH argument)
AC_SUBST( rawwaves, $RAWWAVE_PATH )
AC_MSG_RESULT($RAWWAVE_PATH)
AC_MSG_CHECKING(for INCLUDE_PATH argument)
AC_SUBST( include, $INCLUDE_PATH )
AC_MSG_RESULT($INCLUDE_PATH)
# Check for realtime support disable
AC_MSG_CHECKING(whether to compile realtime support)
AC_ARG_ENABLE(realtime, [ --disable-realtime = only compile generic non-realtime classes], [AC_SUBST( realtime, [no] ) AC_SUBST( sound_api, [] )], [AC_SUBST( realtime, [yes] ) ] )
AC_MSG_RESULT($realtime)
# Check for math library
AC_CHECK_LIB(m, cos, , AC_MSG_ERROR(math library is needed!))
if test $realtime = yes; then
AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR(realtime support requires the pthread library!))
AC_CHECK_FUNCS(gettimeofday select socket)
fi
# Check for debug
AC_MSG_CHECKING(whether to compile debug version)
AC_ARG_ENABLE(debug,
[ --enable-debug = enable various debug output],
[AC_SUBST( debug, ["-D_STK_DEBUG_ -D__RTAUDIO_DEBUG__"] ) AC_SUBST( cflags, ["-g -O2"] ) AC_SUBST( object_path, [Debug] ) AC_MSG_RESULT(yes)],
[AC_SUBST( debug, [] ) AC_SUBST( cflags, [-O3] ) AC_SUBST( object_path, [Release] ) AC_MSG_RESULT(no)])
# Check compiler and use -Wall if gnu.
if test $GXX = "yes" ; then
AC_SUBST( warn, ["-Wall -g -Woverloaded-virtual -D__GXX__"] )
fi
if test $realtime = yes; then
# Checks for package options and external software
AC_CANONICAL_HOST
AC_MSG_CHECKING(for audio API)
case $host in
*-*-linux*)
AC_SUBST( sound_api, [_NO_API_] )
# Look for ALSA library because we need it for RtMidi
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(STK in Linux requires the ALSA asound library for RtMidi!))
audio_apis="-D__LINUX_ALSASEQ__"
# Look for Jack flag
AC_ARG_WITH(jack, [ --with-jack = choose JACK server support (linux only)], [AC_SUBST( sound_api, [-D__LINUX_JACK__] ) AC_MSG_RESULT(using JACK)] , )
if [test $sound_api = -D__LINUX_JACK__;] then
TEMP_LIBS=$LIBS
AC_CHECK_LIB(jack, jack_client_new, , AC_MSG_ERROR(JACK support requires the jack library!))
LIBS="`pkg-config --cflags --libs jack` $TEMP_LIBS -lasound"
audio_apis="-D__LINUX_JACK__ $audio_apis"
fi
# Look for Alsa flag
AC_ARG_WITH(alsa, [ --with-alsa = choose native ALSA API support (linux only)], [AC_SUBST( sound_api, [-D__LINUX_ALSA__] ) AC_MSG_RESULT(using ALSA)], )
if test $sound_api = -D__LINUX_ALSA__; then
audio_apis="-D__LINUX_ALSA__ $audio_apis"
fi
# Look for OSS flag
AC_ARG_WITH(oss, [ --with-oss = choose OSS API support (linux only)], [AC_SUBST( sound_api, [-D__LINUX_OSS__] ) AC_MSG_RESULT(using OSS)], )
if test $sound_api = -D__LINUX_OSS__; then
audio_apis="-D__LINUX_OSS__ $audio_apis"
fi
# If no audio api flags specified, use ALSA
if [test $sound_api = _NO_API_;] then
AC_MSG_RESULT(using ALSA)
audio_apis="-D__LINUX_ALSA__ $audio_apis"
fi
;;
*-sgi*)
AC_SUBST( audio_apis, ["-D__IRIX_AL__ -D__IRIX_MD__ -LANG:std -w"] )
AC_MSG_RESULT(using IRIX AL)
AC_CHECK_LIB(audio, alOpenPort, , AC_MSG_ERROR(IRIX audio support requires the audio library!) )
AC_CHECK_LIB(md, mdOpenInPort, , AC_MSG_ERROR(IRIX MIDI support requires the md library!) )
;;
*-apple*)
# Check for CoreAudio and CoreMIDI framework
AC_CHECK_HEADERS(CoreAudio/CoreAudio.h CoreMIDI/CoreMIDI.h CoreServices/CoreServices.h,
[AC_SUBST( audio_apis, [-D__MACOSX_CORE__] )],
[AC_MSG_ERROR(CoreAudio and/or CoreMIDI header files not found!)] )
AC_SUBST( frameworks, ["-framework CoreAudio -framework CoreMIDI -framework CoreFoundation"] )
;;
*)
# Default case for unknown realtime systems.
AC_MSG_ERROR(Unknown system type for realtime support ... try --disable-realtime argument!)
;;
esac
fi
# Checks for library functions.
AC_PROG_GCC_TRADITIONAL
AC_CHECK_FUNCS(strstr)
AC_OUTPUT

View File

@@ -1,155 +1,162 @@
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-2002. By Perry R. Cook and Gary P. Scavone, 1995-2004.
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.
.- Envelope - ADSR
| .- Generator - (Modulate, Noise, SingWave, Envelope)
|- Noise - SubNoise | | |
| | SubNoise ADSR
|- Table | Asymp
| |
|- WvIn - (WaveLoop, RtWvIn, TcpWvIn) |- Function - (Table, BowTable, JetTable, ReedTable)
| |
|- WvOut - (RtWvOut, TcpWvOut) |- WvIn - (WaveLoop, RtWvIn, TcpWvIn)
| |
|- Filter - (OnePole, OneZero, Delay, TwoPole, TwoZero, PoleZero, Biquad) |- WvOut - (RtWvOut, TcpWvOut)
| | | |
| DelayL FormSwep |- Filter - (OnePole, OneZero, Delay, TwoPole, TwoZero, PoleZero, Biquad)
| DelayA | | |
| | DelayL FormSwep
|- Echo, Chorus, PitShift | DelayA
| |
|- RtAudio, RtMidi, Socket, Thread |- RtAudio, RtMidi, RtDuplex, Socket, Thread, Mutex
Stk -| Stk -|
|- Reverb - (PRCRev, JCRev, NRev) |- Effect - (Echo, Chorus, PitShift, PRCRev, JCRev, NRev)
| |
|- Modulate |- Voicer, Message, Skini, MidiFileIn, Phonemes, Sphere, Vector3D
| |
|- Messager |- Messager
| |
|- SKINI | .- FM - (HevyMetl, PercFlut, Rhodey, Wurley, TubeBell, BeeThree, FMVoices)
| | |
|- ReedTabl, JetTabl, BowTabl | |- Modal - ModalBar
| | |
| .- FM - (HevyMetl, PercFlut, Rhodey, Wurley, TubeBell, BeeThree, FMVoices) | |- VoicForm
| | | |
| |- Modal - ModalBar | |- Sampler - Moog
| | | |
| |- Sampler - Moog | |- Resonate
| | | |
| |- Resonate | |- PluckedTwo - Mandolin
| | .- Instrmnt -|
| |- PluckedTwo - Mandolin |- Drummer
.- Instrmnt -| |
|- Drummer |- Clarinet, BlowHole, Saxofony, Flute, Brass, BlowBotl, Bowed, Plucked, StifKarp, Sitar
| |
|- Clarinet, BlowHole, Saxofony, Flute, Brass, BlowBotl, Bowed, Plucked, StifKarp, Sitar |- Shakers
| |
|- Shakers |- BandedWG
| |
|- BandedWG |- Mesh2D
| |
.- Mesh2D .- Whistle
*********** UNIT GENERATORS ************** *********** UNIT GENERATORS **************
Master Class: Stk.cpp Sample rate, byte-swapping, error handling functionality Master Class: Stk.cpp Sample rate, byte-swapping, error handling functionality
Sources: Envelope.cpp Linearly Goes to Target by Rate Sources: Generator.cpp Abstract Base Class for Various Source Signal Classes
ADSR.cpp ADSR Flavor of Envelope Function.cpp Abstract Base Class for Various Input/Output Mapping Classes
Noise.cpp Random Number Generator Envelope.cpp Linearly Goes to Target by Rate
SubNoise.cpp Random Numbers each N samples ADSR.cpp ADSR Flavor of Envelope
Table.cpp Lookup Table (assumes given data in big-endian format) Asymp.cpp Exponentially Approaches Target
WvIn.cpp Data Input Class (interpolating) for RAW, WAV, SND (AU), AIFF, MAT-file files Noise.cpp Random Number Generator
WaveLoop.cpp Wavetable looping (subclass of WvIn) SubNoise.cpp Random Numbers each N samples
RtWvIn.cpp Realtime Audio Input Class (subclass of WvIn) Table.cpp Lookup Table (assumes given data in big-endian format)
TcpWvIn.cpp Audio Streaming (socket server) Input Class (subclass of WvIn) WvIn.cpp Data Input Class (interpolating) for RAW, WAV, SND (AU), AIFF, MAT-file files
WaveLoop.cpp Wavetable looping (subclass of WvIn)
Sinks: WvOut.cpp Output Master Class for RAW, WAV, SND (AU), AIFF, MAT-file files RtWvIn.cpp Realtime Audio Input Class (subclass of WvIn)
RtWvOut.cpp Realtime Output Class (subclass of WvOut) TcpWvIn.cpp Audio Streaming (socket server) Input Class (subclass of WvIn)
TcpWvOut.cpp Audio Streaming (socket client) Output Class (subclass of WvOut)
Sinks: WvOut.cpp Output Master Class for RAW, WAV, SND (AU), AIFF, MAT-file files
Duplex: RtDuplex.cpp Synchronous Realtime Audio Input/Output Class RtWvOut.cpp Realtime Audio Output Class (subclass of WvOut)
TcpWvOut.cpp Audio Streaming (socket client) Output Class (subclass of WvOut)
Filters: Filter.cpp Filter Master Class
OneZero.cpp One Zero Filter Duplex: RtDuplex.cpp Synchronous Realtime Audio Input/Output Class
OnePole.cpp One Pole Filter
PoleZero.cpp One Pole/One Zero Filter Filters: Filter.cpp Filter Master Class
TwoZero.cpp Two Zero Filter OneZero.cpp One Zero Filter
TwoPole.cpp Two Pole Filter OnePole.cpp One Pole Filter
BiQuad.cpp Two Pole/Two Zero Filter PoleZero.cpp One Pole/One Zero Filter
FormSwep.cpp Sweepable BiQuad Filter (goes to target by rate) TwoZero.cpp Two Zero Filter
Delay.cpp Non-Interpolating Delay Line Class TwoPole.cpp Two Pole Filter
DelayL.cpp Linearly Interpolating Delay Line (subclass of Delay) BiQuad.cpp Two Pole/Two Zero Filter
DelayA.cpp Allpass Interpolating Delay Line (subclass of Delay) FormSwep.cpp Sweepable BiQuad Filter (goes to target by rate)
Delay.cpp Non-Interpolating Delay Line Class
Non-Linear: JetTabl.cpp Cubic Jet Non-Linearity DelayL.cpp Linearly Interpolating Delay Line (subclass of Delay)
BowTabl.cpp x^(-3) Bow Non-Linearity DelayA.cpp Allpass Interpolating Delay Line (subclass of Delay)
ReedTabl.cpp One Breakpoint Saturating Reed Non-Linearity
Non-Linear: JetTabl.cpp Cubic Jet Non-Linearity
Derived: Modulate.cpp Periodic and Random Vibrato: RawWvIn, SubNoise, OnePole BowTabl.cpp x^(-3) Bow Non-Linearity
ReedTabl.cpp One Breakpoint Saturating Reed Non-Linearity
********** INSTRUMENTS AND ALGORITHMS ************** Derived: Modulate.cpp Periodic and Random Vibrato: WvIn, SubNoise, OnePole
SingWave.cpp Looping wave table with randomness: Modulate, WaveLoop, Envelope
Each Class will be listed either with all the unit generators it uses,
or the <<Algorithm>> of which it is a flavor. All inherit from Instrmnt,
which inherits from Stk. ********** INSTRUMENTS AND ALGORITHMS **************
Simple.cpp Simple Instrument Pulse oscillator + resonant filtered noise Each class is listed either with some of the unit generators it uses,
Plucked.cpp Basic Plucked String DelayA, OneZero, OnePole, Noise or in terms of the algorithm it implements. All inherit from Instrmnt,
StifKarp.cpp Plucked String with Stiffness DelayA, DelayL, OneZero, BiQuad, Noise which inherits from Stk.
PluckTwo.cpp Not So Basic Pluck DelayL, DlineA, OneZero
Mandolin.cpp Commuted Mandolin <<flavor of PluckTwo>> Simple.cpp Simple Instrument Pulse oscillator + resonant filtered noise
Bowed.cpp So So Bowed String DelayL, BowTabl, OnePole, BiQuad, WaveLoop, ADSR Plucked.cpp Basic Plucked String DelayA, OneZero, OnePole, Noise
Brass.cpp Not So Bad Brass Instrument DelayA, BiQuad, PoleZero, ADSR, WaveLoop StifKarp.cpp Plucked String with Stiffness DelayA, DelayL, OneZero, BiQuad, Noise
Clarinet.cpp Pretty Good Clarinet DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop PluckTwo.cpp Not So Basic Pluck DelayL, DlineA, OneZero
BlowHole.cpp Clarinet w/ Tone & Vent Holes DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop, PoleZero Mandolin.cpp Commuted Mandolin <<flavor of PluckTwo>>
Saxofony.cpp A Faux Saxophone DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop Bowed.cpp So So Bowed String DelayL, BowTabl, OnePole, BiQuad, WaveLoop, ADSR
Flute.cpp Pretty Good Flute JetTabl, DelayL, OnePole, PoleZero, Noise, ADSR, WaveLoop Brass.cpp Not So Bad Brass Instrument DelayA, BiQuad, PoleZero, ADSR, WaveLoop
BlowBotl.cpp Blown Bottle JetTabl, BiQuad, PoleZero, Noise, ADSR, WaveLoop Clarinet.cpp Pretty Good Clarinet DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop
BandedWG.cpp Banded Waveguide Meta-Object Delay, BowTabl, ADSR, BiQuad BlowHole.cpp Clarinet w/ Tone & Vent Holes DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop, PoleZero
Modal.cpp N Resonances Envelope, WaveLoop, BiQuad, OnePole Saxofony.cpp A Faux Saxophone DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop
ModalBar.cpp Various presets 4 Resonance Models Flute.cpp Pretty Good Flute JetTabl, DelayL, OnePole, PoleZero, Noise, ADSR, WaveLoop
FM.cpp N Operator FM Master ADSR, WaveLoop, TwoZero BlowBotl.cpp Blown Bottle JetTabl, BiQuad, PoleZero, Noise, ADSR, WaveLoop
HevyMetl.cpp Distorted FM Synthesizer 3 Cascade with FB Modulator BandedWG.cpp Banded Waveguide Meta-Object Delay, BowTabl, ADSR, BiQuad
PercFlut.cpp Percussive Flute 3 Cascade Operators Modal.cpp N Resonances Envelope, WaveLoop, BiQuad, OnePole
Rhodey.cpp Rhodes-Like Electric Piano 2 Parallel Simple FMs ModalBar.cpp Various presets 4 Resonance Models
Wurley.cpp Wurlitzer Electric Piano 2 Parallel Simple FMs FM.cpp N Operator FM Master ADSR, WaveLoop, TwoZero
TubeBell.cpp Classic FM Bell 2 Parallel Simple FMs HevyMetl.cpp Distorted FM Synthesizer 3 Cascade with FB Modulator
FMVoices.cpp 3 Formant FM Voice 3 Carriers Share 1 Modulator PercFlut.cpp Percussive Flute 3 Cascade Operators
BeeThree.cpp Cheezy Additive Organ 4 Oscillators Additive Rhodey.cpp Rhodes-Like Electric Piano 2 Parallel Simple FMs
Sampler.cpp Sampling Synthesizer 5 each ADSR, WvIn, WaveLoop, OnePole Wurley.cpp Wurlitzer Electric Piano 2 Parallel Simple FMs
Moog.cpp Swept Filter Sampler with Swept Filter TubeBell.cpp Classic FM Bell 2 Parallel Simple FMs
Resonate.cpp Filtered Noise ADSR, BiQuad, Noise FMVoices.cpp 3 Formant FM Voice 3 Carriers Share 1 Modulator
Drummer.cpp Drum Synthesizer Bunch of WvIns, and OnePole VoicForm.cpp 4 Formant Voice Synthesis FormSwep, SingWave, OnePole, OneZero, Envelope, Noise
Shakers.cpp PhISM statistical model for shakers and real-world sound effects BeeThree.cpp Cheezy Additive Organ 4 Oscillators Additive
Mesh2D.cpp Two-dimensional, rectilinear digital waveguide mesh. Sampler.cpp Sampling Synthesizer 5 each ADSR, WvIn, WaveLoop, OnePole
Moog.cpp Swept Filter Sampler with Swept Filter
Reverb.cpp Reverberator Effects Processor Master Class for reverberators Resonate.cpp Filtered Noise ADSR, BiQuad, Noise
JCRev.cpp Chowning Reverberator 3 series allpass units, 4 parallel combs, 2 stereo delays Drummer.cpp Drum Synthesizer Bunch of WvIns, and OnePole
NRev.cpp Another famous CCRMA Reverb 8 allpass, 6 parallel comb filters Shakers.cpp PhISM statistical model for shakers and real-world sound effects
PRCRev.cpp Dirt Cheap Reverb by Cook 2 allpass, 2 comb filters Mesh2D.cpp Two-dimensional, rectilinear digital waveguide mesh.
Flanger.cpp Flanger Effects Processor DelayL, WaveLoop Whistle.cpp Hybrid physical/spectral model of a police whistle.
Chorus.cpp Chorus Effects Processor DelayL, WaveLoop
PitShift.cpp Cheap Pitch Shifter DelayL Effect.cpp Effects Processor Base Class
JCRev.cpp Chowning Reverberator 3 series allpass units, 4 parallel combs, 2 stereo delays
NRev.cpp Another famous CCRMA Reverb 8 allpass, 6 parallel comb filters
*********** OTHER SUPPORT CLASSES AND FILES ************** PRCRev.cpp Dirt Cheap Reverb by Cook 2 allpass, 2 comb filters
Flanger.cpp Flanger Effects Processor DelayL, WaveLoop
RtAudio.cpp Multi-OS/API audio I/O routines Chorus.cpp Chorus Effects Processor DelayL, WaveLoop
RtMidi.cpp Multi-OS/API MIDI I/O routines PitShift.cpp Cheap Pitch Shifter DelayL
Messager.cpp Pipe, socket, and MIDI control message handling
demo.cpp Demonstration program for most synthesis algorithms *********** OTHER SUPPORT CLASSES AND FILES **************
effects.cpp Effects demonstration program
ragamatic.cpp Nirvana just waiting to happen RtAudio.cpp Multi-OS/API audio I/O routines
RtMidi.cpp Multi-OS/API MIDI I/O routines
SKINI.cpp SKINI file/message parser object Messager.cpp Pipe, socket, and MIDI control message handling
SKINI.msg #defines for often used and universal MIDI/SKINI symbols Voicer.cpp Multi-instrument voice manager
SKINI.tbl Table of SKINI messages
demo.cpp Demonstration program for most synthesis algorithms
effects.cpp Effects demonstration program
ragamatic.cpp Nirvana just waiting to happen
Skini.cpp SKINI file/message parser object
SKINI.msg #defines for often used and universal MIDI/SKINI symbols
SKINI.tbl Table of SKINI messages

View File

@@ -1,26 +1,21 @@
The Synthesis ToolKit in C++ (STK) The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995-2002. By Perry R. Cook and Gary P. Scavone, 1995-2004.
Please read the file README for more general STK information. Please read the file README and INSTALL for more general STK information.
Realtime support for Linux is currently using either the Open Sound System (OSS) or the Advanced Linux Sound Architecture (ALSA) sound and MIDI APIs. The free version of OSS works as well (and in some cases better than the commercial OSS version ... such as with my Maestro 2e chipset). In general, the ALSA drivers also seem to perform well. You can read more about ALSA at http://www.alsa-project.org/. ALSA is open source and holds great promise for audio under Linux. The API is selected during compilation using either the __LINUX_ALSA__ or __LINUX_OSS__ definitions. Realtime audio support for Linux currently includes the Advanced Linux Sound Architecture (ALSA), the JACK low-latency audio server, and/or Open Sound System (OSS) APIs. One or more APIs are selected during compilation using the __LINUX_ALSA__, __LINUX_JACK__, and/or __LINUX_OSS__ definitions. Because the ALSA library is now integrated into the standard Linux kernel, it is the default audio/MIDI API with STK versions 4.2 and higher. The __LINUX_ALSASEQ__ definition is required to compile RtMidi with ALSA sequencer support. Native OSS MIDI support no longer exists in RtMidi. If the __LINUX_OSS__ preprocessor definition is specified, only OSS audio support will be compiled and RtMidi will still be compiled using the ALSA API. For this reason, STK now requires the asound library for realtime support. Realtime programs must also link with the <TT>pthread</TT> library. The OSS audio API can be selected by passing the "--with-oss" option to configure.
STK should compile without much trouble under Linux ... afterall, it is primarily developed on Linux platforms. Since all Linux distributions typically include the GNU makefile utilities, you should be able to use the default Makefile. Typing "make" will initiate the compilation process. The free version of OSS generally works as well (and in some cases better than the commercial OSS version ... such as with my Maestro 2e chipset). In general, the ALSA drivers also seem to perform well. You can read more about ALSA at http://www.alsa-project.org/. ALSA is open source and holds great promise for audio under Linux.
MIDIATOR SERIAL PORT MIDI SUPPORT: STK should compile without much trouble under Linux. Since all Linux distributions typically include the GNU makefile utilities, you should be able to use the default Makefile. Typing "make" will initiate the compilation process.
STK now has special support for the MIDIator serial port MIDI interface. This is of primary interest to us laptop users, whose computers usually don't have a gameport. If you want to buy one of these devices, make sure you get the MS-124w model (www.midiator.com). For it to work in STK, you must provide the __MIDIATOR__ definition during compilation (in addition to either __LINUX_ALSA__ or __LINUX_OSS__). MIDIATOR SERIAL PORT MIDI SUPPORT:
There are a few things that need to be done on your system to get the MIDIator working. Assuming you wish to attach the MIDIator to serial port 0, add the following lines to your bootup sequence in /etc/rc.d/rc.local: MIDIator support has been removed from RtMidi with STK versions 4.2 and higher. If you really need it, you can contact us to get an old distribution.
setserial /dev/ttyS0 baud_base 57600 NOTE REGARDING PTHREADS:
setserial /dev/ttyS0 divisor 1
There haven't been any problems with threads since the old days of RedHat Linux 5.0. STK uses the MIT pthreads API.
You may need to specify the full path to the setserial function, depending on how your PATH variable is set up. Also, you may need to modify the permissions of /dev/ttyS0 (chmod a+rwx). And finally, the MIDIator should be set for "single addresssed" mode (the S/A switch on S and the A/B switch on A), which puts identical output on all 4 MIDI output ports. It is possible to use the MIDIator in a "multi-port" mode, though I'm not currently supporting that in STK.
NOTE REGARDING PTHREADS:
There haven't been any problems with threads since the old days of RedHat Linux 5.0. STK uses the MIT pthreads API.

21
doc/README-MacOSX.txt Normal file
View File

@@ -0,0 +1,21 @@
The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995-2004.
Please read the file README and INSTALL for more general STK information.
Realtime support for Macintosh OS X uses the CoreAudio HAL API and is specified during compilation using the __MACOSX_CORE__ preprocessor definition.
It is necessary to install the OS X developer kit in order to compile STK. STK was successfully tested on OS X versions 10.2 and 10.3.
The internal Macintosh audio hardware typically supports a sample rate of 44100 Hz only. The default STK sample rate is now 44100 Hz and all current example programs use this rate. However, it is possible to manually override this value in some programs from the command-line. The default sample rate is set in Stk.h. In addition, the RT_BUFFER_SIZE, specified in Stk.h, could be increased (to a higher power of two) for more robust performance.
There is a potential conflict between the STK Delay class and a Delay() function declared in OSUtils.h (which is included via <CoreServices/CoreServices.h>). In general, this conflict can be avoided via the use of a namespace (an explicit Delay::Delay declaration), though this made the Windows Visual C++ compiler barf. If you use STK classes within a project that includes the OSUtils.h file, you will likely need to make changes in STK classes that use the Delay class.
Tcl/Tk on OS X:
The tcl/tk interpreter does not ship by default with OS X, but must be downloaded from the internet. The latest Tcl/Tk Aqua distribution (http://www.apple.com/downloads/macosx/unix_open_source/tcltk.html) has been successfully tested on 10.2 and 10.3 systems. The default installation will place a link to the wish interpretor at /usr/bin/wish.
It appears that socket support in Tcl/Tk on OS X uses the Nagle algorithm, which produces poor response between changes made in the tcl/tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script.

View File

@@ -1,9 +1,7 @@
The Synthesis ToolKit in C++ (STK) The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995-2002. By Perry R. Cook and Gary P. Scavone, 1995-2004.
Please read the file README for more general STK information. Please read the file README and INSTALL for more general STK information.
Please read the file README.txt for more general STK information. STK has always worked under NeXTStep without realtime audio or MIDI support. In general, STK should compile in this way using any generic C++ compiler. C++ exception handling was added to STK with release 3.2. We managed to get a version of gcc compiled for NeXTStep that can deal with C++ exceptions.
STK has always worked under NeXTStep without realtime audio or MIDI support. In general, STK should compile in this way using any generic C++ compiler. C++ exception handling was added to STK with release 3.2. We managed to get a version of gcc compiled for NeXTStep that can deal with C++ exceptions.

View File

@@ -1,13 +1,15 @@
The Synthesis ToolKit in C++ (STK) The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995-2002. By Perry R. Cook and Gary P. Scavone, 1995-2004.
Please read the file README for more general STK information. Please read the file README and INSTALL for more general STK information.
When using the Makefiles provided, first try invoking "gmake" (for GNU make). If that doesn't work, try to download the GNU Makefile utilities from the Internet and use STK's default Makefile. If this is not possible, try using Makefile.sgi (make -f Makefile.sgi). The project Makefiles are created by configure. If you have trouble running "make", try invoking "gmake" (for GNU make). If that doesn't work, try to download the GNU Makefile utilities from the Internet.
Another issue that has crept up with this release is proper compiler support for C++ error handling. If you experience problems, you probably don't have a recent version of the C++ compiler. Otherwise, STK should compile and run on SGI platforms without any problems. Release 4.0 of STK is confirmed to compile without difficulty using CC version 7.30. Another issue that has crept up with this release is proper compiler support for C++ error handling. If you experience problems, you probably don't have a recent version of the C++ compiler. Otherwise, STK should compile and run on SGI platforms without any problems. Release 4.0 of STK is confirmed to compile (with various warnings) using CC version 7.30.
NOTE REGARDING PTHREADS: The __IRIX_AL__ and __IRIX_MD__ preprocessor definitions are required for realtime audio and MIDI support.
Since release 3.1, STK has used the pthread API under Irix. It appears that pthread functionality is standard on SGI, so this change shouldn't cause any problems. If I'm wrong, let me know! NOTE REGARDING PTHREADS:
Since release 3.1, STK has used the pthread API under Irix. It appears that pthread functionality is standard on SGI, so this change shouldn't cause any problems. If I'm wrong, let me know!

View File

@@ -1,73 +1,74 @@
The Synthesis ToolKit in C++ (STK) The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995-2002. By Perry R. Cook and Gary P. Scavone, 1995-2004.
Please read the file README for more general STK information. Please read the file README for more general STK information.
DirectX and WindowsNT Issues: DirectX and WindowsNT Issues:
----------------------------- -----------------------------
STK is currently distributed with Visual C++ 6.0 project and workspace files. It has been tested using both Visual C++ 6.0 and Visual C++ .NET. STK is currently distributed with Visual C++ 6.0 project and workspace files. It has been tested using both Visual C++ 6.0 and Visual C++ .NET.
IMPORTANT VC++ NOTE: When compiling "release" versions of STK programs, link to the release multithreaded library. When compiling "debug" versions, link to the debug multithreaded library. Compiler errors will result otherwise. Also, the Microsoft folk are up to their old habits of trying to change standards. The .NET compiler will complain about cerr for some reason. IMPORTANT VC++ NOTE: When compiling "release" versions of STK programs, link to the release multithreaded library. When compiling "debug" versions, link to the debug multithreaded library. Compiler errors will result otherwise. Also, the Microsoft folk are up to their old habits of trying to change standards. The .NET compiler will complain about cerr for some reason.
The STK realtime sound input capabilities under Windoze are only supported using the DirectSoundCapture API. The latency is pretty horrendous, but what do you expect? Also, there is a chance you don't have DirectSoundCapture support on your computer. If not, you should download the DirectX 6.0 (or higher) runtime libraries from Microsoft's WWW site (http://www.microsoft.com/directx/download.asp) in order to run the pre-compiled STK executables for Windoze. The last time I checked, there was no DirectSoundCapture support for WindowsNT ... you'll have to switch to Windows 2000 or XP. I stopped supporting the WinMM audio output code with release 3.2. Both the DirectSound and Steinberg ASIO audio APIs are supported for realtime audio input/output. The Visual C++ project files included with this distribution are configured to use the DirectSound API. In order to use the ASIO API, it is necessary to change the preprocessor definition from __WINDOWS_DS__ to __WINDOWS_ASIO__, as well as include all the files in the /src/asio/ directory (i.e. asio.h, asio.cpp, ...). If you have a good quality soundcard and a native ASIO driver (not emulated), you are likely to get much better input/output response using that.
Realtime sound output under Windoze is supported using the DirectSound (dsound.lib) API. All new versions of WindowsXX come with the DirectSound library, but early versions did not. If you have trouble running the distributed executables, then you probably don't have DirectSound installed on your system. You can download the necessary DirectSound stuff from Microsoft's WWW pages (http://www.microsoft.com/directx/download.asp). When using the DirectSound API for audio input, latency is typically pretty horrendous (should we be surprised?). Also, there is a slight chance you don't have DirectSoundCapture support on your computer. If not, you should download the DirectX 6.0 (or higher) runtime libraries from Microsoft's WWW site (http://www.microsoft.com/directx/download.asp) in order to run the pre-compiled STK executables for Windoze. The last time I checked, there was no DirectSoundCapture support for WindowsNT ... you'll have to switch to Windows 2000 or XP or use an ASIO driver. I stopped supporting the WinMM audio output code with release 3.2.
Realtime MIDI input is supported using the winmm.lib API. Realtime MIDI input/output is supported by RtMidi using the winmm.lib API and requires the __WINDOWS_MM__ preprocessor definition.
Visual C++ 6.0 workspaces have been created for the various STK projects. Everything has already been configured for you. The intermediate .obj files will be written to either the "release" or "debug" directories, but the executable files will be written to the main project directories (where they need to be for proper execution). If you should somehow lose or hose the VC++ workspace file for a project, then you will have to do a LOT of configuring to recreate it ... it's probably easier just to download the distribution again from our WWW sites. Anyway, for your benefit and mine, here is a list of things that need to be added to the various "Project Settings": Visual C++ 6.0 workspaces have been created for the various STK projects. Everything has already been configured for you. The intermediate .obj files will be written to either the "Release" or "Debug" directories, but the executable files will be written to the main project directories (where they need to be for proper execution). If you should somehow lose or hose the VC++ workspace file for a project, then you will have to do a LOT of configuring to recreate it ... it's probably easier just to download the distribution again from our WWW sites. Anyway, for your benefit and mine, here is a list of things that need to be added to the various "Project Settings":
1. Under General: Set "Output files:" to <blank> (this will put the executable in the main project directory. 1. Under General: Set "Output files:" to <blank> (this will put the executable in the main project directory.
2. Under C/C++ > Code Generation: Set "Use run-time library:" to Multithreaded (use "debug" versions for the debug configuration). 2. Under C/C++ > Code Generation: Set "Use run-time library:" to Multithreaded (use "debug" versions for the debug configuration).
3. Under Link > General: Add winmm.lib, dsound.lib, and Wsock32.lib to the end of the Object/library modules list. 3. Under Link > General: Add winmm.lib, dsound.lib, and Wsock32.lib to the end of the Object/library modules list.
4. Under C/C++ > Preprocessor: Add "../../include" directory to the "extra include" field. 4. Under C/C++ > Preprocessor: Add "../../include" directory to the "extra include" field.
5. Under C/C++ > Preprocessor: Add "__WINDOWS_DS__" to the definitions field. 5. Under C/C++ > Preprocessor: Add "__WINDOWS_DS__", "__WINDOWS_MM__", and "__LITTLE_ENDIAN__ to the definitions field.
6. Add all the necessary files to the project. 6. Add all the necessary files to the project.
Remember that items 1-5 above need to be done for each project and for each configuration. There might be an easy way to make global changes, but I couldn't figure it out. Remember that items 1-5 above need to be done for each project and for each configuration. There might be an easy way to make global changes, but I couldn't figure it out.
To use the Tcl/Tk GUIs, you will have to install Tcl/Tk. I got version 8.0 and it works very well (and installed easily). The distribution is available on the WWW and is free. To use the Tcl/Tk GUIs, you will have to install Tcl/Tk. I got version 8.0 and it works very well (and installed easily). The distribution is available on the WWW and is free.
In order for socketing to work, it is necessary to have the TCP protocol installed on your computer. This can be done from the "Network" control panel. In order for socketing to work, it is necessary to have the TCP protocol installed on your computer. This can be done from the "Network" control panel.
Finally, to use it all - Finally, to use it all -
PLAY SKINI SCOREFILES IN REALTIME: WINDOWS XP/2000:
demo Clarinet -or < scores/streetsf.ski There is a big advantage in using Windows XP/2000 over 95/98 with STK in that piping works, just as under unix. Also, the scheduler in 2000/XP seems to be much better, so socketed messages don't get clumped together like they do in Windows 95/98. Simply fire up a script file (ex. StkDemo.bat) by either double-clicking on it or typing it within a shell.
USE TCL/TK GUIs FOR REALTIME CONTROL: WINDOWS 95/98:
1. Open a DOS console window and start syntmono (eg. demo Clarinet -or -is). PLAY SKINI SCOREFILES IN REALTIME:
2. Double click on a Tcl/Tk file in TCLSpecs (eg. TCLPhys.tcl) from the Windows Explorer to start the GUI. Select the "communications" menu item and "Socket" and make the connection. demo Clarinet -or -if scores/streetsf.ski
3. Start moving the sliders to control the instrument. USE TCL/TK GUIs FOR REALTIME CONTROL:
1. Open a DOS console window and start syntmono (eg. demo Clarinet -or -is).
USE REALTIME MIDI INPUT FOR CONTROL:
2. Double click on a Tcl/Tk file in the tcl/ subdirectory of the demo directory (eg. Demo.tcl) from the Windows Explorer to start the GUI. Select the "communications" menu item and "Socket" and make the connection.
1. Open a DOS console window and start syntmono with MIDI input (eg. demo Clarinet -or -im).
3. Start moving the sliders to control the instrument.
This assumes you already have MIDI setup correctly for your computer.
USE REALTIME MIDI INPUT FOR CONTROL:
WINDOWS 2000/XP:
1. Open a DOS console window and start syntmono with MIDI input (eg. demo Clarinet -or -im).
There is a big advantage in using Windows 2000/XP over 95/98 with STK in that piping works, just as under unix. Also, the scheduler in 2000/XP seems to be much better, so socketed messages don't get clumped together like they do in Windows 95/98. The script files (ex. Demo) can be renamed with .bat extensions, allowing them to work in the same way as in unix systems.
This assumes you already have MIDI setup correctly for your computer.
WINDOWS NT ONLY:
WINDOWS NT ONLY:
Realtime piping seems to work under WindowsNT in much the same way as on Unix platforms. Thus, it is possible to pipe realtime control data to syntmono under WindowsNT as well.
Realtime piping seems to work under WindowsNT in much the same way as on Unix platforms. Thus, it is possible to pipe realtime control data to syntmono under WindowsNT as well. Note, however, that the DirectSoundCapture API does not exist for WindowsNT, so it is necessary to use an ASIO audio driver and the STK ASIO support.

View File

@@ -1,101 +1,164 @@
The Synthesis ToolKit in C++ (STK) The Synthesis ToolKit in C++ (STK)
By Perry R. Cook and Gary P. Scavone, 1995-2002. By Perry R. Cook and Gary P. Scavone, 1995-2004.
v4.0: (April 2002) v4.2.0: (4 October 2004)
- new documentation and tutorial - simultaneous multiple audio APIs supported at compile time
- several new instruments, including Saxofony, BlowBotl, and StifKarp - fixed hidden overloaded virtual functions
- new Stk base class, replacing Object class - new Asymp exponential envelope class
- new Filter class structure and methods - various changes to better conform to standard C++ programming practices
- extensive modifications to WvIn and WvOut class structures and methods - MY_FLOAT type converted to StkFloat and changed throughout (use treesed utility to search/replace in old files)
- looping functionality moved to WaveLoop (subclass of WvIn) - most example programs rewritten to use an audio callback paradigm (which works better in OS-X)
- automatic file type detection in WvIn ... hosed WavWvIn, AifWvIn, RawWavIn, SndWavIn, and MatWvIn subclasses - new StkFrames class for vectorized multichannel data and associated new tick() functions making use of StkFrames
- new file type specifier argument in WvOut ... hosed WavWvOut, AifWvOut, RawWavOut, SndWavOut, and MatWvOut subclasses - new RtMidi class with MIDI output capabilities (API changes)
- some simplifications of Messager class (was Controller) - new MidiFileIn class for reading MIDI files
- new independent RtAudio class - revised Filter classes to use std::vectors for coefficients (API changes)
- extensive revisions in code and a significant number of API changes - revised Messager class (now queues messages for retrieval) (API changes)
- new abstract parent Effect class for various effects
v3.2: (13 November 2000) - added setT60 function to all reverbs
- new control handling class (Controller) - new abstract parent Generator class for various signal sources
- added AIFF file input/output support - new abstract parent Function class for tables and various non-linear functions
- stklib.a Makefile in src directory - Skini class completely rewritten (simplified) using the C++ STL (API changes)
- added C++ error handling capabilities - WvOut classes now clip to -1.0 to +1.0 and report out of range
- added input/output internet streaming support (StrmWvIn/StrmWvOut) - new Mutex class
- added native ALSA support for linux - turned Nagle algorithm off by default in Socket class
- added optional "device" argument to all "Rt" classes (audio and MIDI) and printout of devices when argument is invalid - error reporting standardized in all classes
- WvIn classes rewritten to support very big files (incremental load from disk)
- changed WvIn/WvOut classes to work with sample frame buffers v4.1.3: (22 March 2004)
- fixed looping and negative rate calculations in WvIn classes - bug fix in RtAudio for Windows DirectSound output only support
- fixed interpolation bug in RtWvIn
- windoze RtAudio code rewritten (thanks Dave!) v4.1.2: (15 March 2004)
- simplified byte-swapping functions (in-place swapping) - added Linux JACK support to RtAudio
- new FIR filter class (thanks Julius!) - added optional doNormalize argument to WvIn to allow specification of data normalization or not
- "stereo-ized" RagaMatic - added volume control to demo program and various tcl scripts
- probably a bunch more fixes that I've long since forgotten about - added support for dynamic rawwavePath() setting
- WaveLoop bug fix
- fixed bug in ADSR::setReleaseTime() method
v3.1: (13 March 2000) - fixed missing initialization of apInput in non-default constructor of DelayA class
- new RagaMatic project!!! - added time seeding of random number generator to Noise constructor
- added "microphone position" to Mandolin in STKdemo - update to the contentsAt() method of Delay class
- fixed MIDI system message exclusion under Irix - WAV file fixes (8-bit) in WvIn and WvOut classes
- added a few bitmaps for the Shaker instruments - configure changes
- made destructors virtual for Reverb.h, WvIn.h and Simple.h - updated <iostream> include statements and appended "std::" as necessary throughout for compatibility with gcc 3
- fixed bug setting delay length in DLineA when value too big
- fixed bug in WinMM realtime code (RTSoundIO) v4.1.1: (24 October 2002)
- added tick() method to BowTabl, JetTabl, and ReedTabl (same as lookup) - bug fix in RtAudio for Macintosh OS X and Windows ASIO duplex operation
- switched to pthread API on SGI platforms - windows ASIO fix in Stk.h
- added some defines to Object.h for random number generation, FPU overflow checking, etc... - documentation updates
- a lot of minor changes, some bug fixes ... can't remember all of them - expanded tutorial
- fixed RtDuplex omission in src Makefile
v3.0: (10 October 1999) v4.1: (8 October 2002)
- new #define flags for OS and realtime dependencies (this will probably cause problems for most everyone, but it was necessary to make future ports easier) - Macintosh OS X support added
- fixed Linux MIDI input bug - new Whistle class
- fixed MIDI status masking problem in Windows - added Voicer, SingWave, and VoicForm classes
- OS type defines now in Makefile - improvements/fixes to the banded waveguide instruments
- new RAWWAVE_PATH define in Object.h - demo program now uses Voicer, allowing polyphony
- syntmono pulled out to separate directory and cleaned up - demo tcl/tk scripts changed to use SKINI PitchChange instead of PitchBend
- socketing capabilities under Unix, as well as Windoze - demo program response to PitchBend modified to octave up/down
- multiple simultaneous socket client connections to STK servers now possible - several RtAudio fixes and improvements (OS X and Windows ASIO support added)
- MD2SKINI now can merge MIDI and piped messages under Irix and Linux (for TCL->MD2SKINI->syntmono control) - added nextOut() method to Delay classes
- defined INT16 and INT32 types and fixed various WvIn and WvOut classes - documentation fixes for Reverb classes
- updated MatWvIn and MatWvOut for new MAT-file documentation from Matlab - RAWWAVE_PATH changed to include the "rawwave" directory
- new demo GUI - "configure" support added for unix systems
- minor fixes to FM behavior - multivoice flag (-n NUMBER) added as command line option to demo program
- added record/duplex capabilities to RTSoundIO (Linux, SGI, and Windoze) - sample rate flag added as command line option to all example programs
- fixed bugs in WavWvOut and MatWvOut header specifications - socket port number added as command line option to all example programs
- added RawWvOut class
- new WvIn class with RawWvIn, SndWvIn, WavWvIn, MatWvIn, and RTWvIn subclasses v4.0: (April 2002)
- removed RawWave, RawShot, RawInterp, and RawLoop classes (supplanted by RawWvIn) - new documentation and tutorial
- multi-channel data support in WvIn and WvOut classes using MY_MULTI data type (pointer to MY_FLOAT) and the methods mtick() and mlastOutput() - several new instruments, including Saxofony, BlowBotl, and StifKarp
- now writing to primary buffer under Windoze when allowed by hardware - new Stk base class, replacing Object class
- cleaned up Object.h a bit - new Filter class structure and methods
- pulled various utility and thread functions out of syntmono.cpp (to aid readability of the code) - extensive modifications to WvIn and WvOut class structures and methods
- looping functionality moved to WaveLoop (subclass of WvIn)
- automatic file type detection in WvIn ... hosed WavWvIn, AifWvIn, RawWavIn, SndWavIn, and MatWvIn subclasses
v2.02: (16 November 1998) - new file type specifier argument in WvOut ... hosed WavWvOut, AifWvOut, RawWavOut, SndWavOut, and MatWvOut subclasses
- 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). - some simplifications of Messager class (was Controller)
- modified DrumSynt to correctly handle sample rates different than 22050 Hz. - new independent RtAudio class
- 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. - extensive revisions in code and a significant number of API changes
- fixed DirectSound playback bug in Win distribution. Sound was being played at 8-bit, 22 kHz in all cases. Playback is now 16-bit and dependent on SRATE.
- fixed bug in MD2SKINI which prevented some NoteOff statements from being output. v3.2: (13 November 2000)
- new control handling class (Controller)
- added AIFF file input/output support
v2.01: (27 July 1998) - stklib.a Makefile in src directory
- Corrected extraneous ^M line return characters that were incompatible with SGI. - added C++ error handling capabilities
- added input/output internet streaming support (StrmWvIn/StrmWvOut)
- added native ALSA support for linux
v2.0: (20 July 1998) - added optional "device" argument to all "Rt" classes (audio and MIDI) and printout of devices when argument is invalid
- The first true release by Gary, with unified capabilities across SGI, Linux, and Win platforms. See WWW pages (http://www-ccrma.stanford.edu/CCRMA/Software/STK/) for more info. - WvIn classes rewritten to support very big files (incremental load from disk)
- changed WvIn/WvOut classes to work with sample frame buffers
- fixed looping and negative rate calculations in WvIn classes
v1.1: - fixed interpolation bug in RtWvIn
- More linux support and other changes that happened so long ago that I can't remember anymore. Never officially released. - windoze RtAudio code rewritten (thanks Dave!)
- simplified byte-swapping functions (in-place swapping)
- new FIR filter class (thanks Julius!)
v1.0: - "stereo-ized" RagaMatic
- Linux support added with the help of Tim Stilson. Never officially released. - probably a bunch more fixes that I've long since forgotten about
v0.8: v3.1: (13 March 2000)
- One of (if not THE) original distributions for SGI, NeXTStep, and basic Win support. I think this came out in 1996. - new RagaMatic project!!!
- added "microphone position" to Mandolin in STKdemo
- fixed MIDI system message exclusion under Irix
- added a few bitmaps for the Shaker instruments
- made destructors virtual for Reverb.h, WvIn.h and Simple.h
- fixed bug setting delay length in DLineA when value too big
- fixed bug in WinMM realtime code (RTSoundIO)
- added tick() method to BowTabl, JetTabl, and ReedTabl (same as lookup)
- switched to pthread API on SGI platforms
- added some defines to Object.h for random number generation, FPU overflow checking, etc...
- a lot of minor changes, some bug fixes ... can't remember all of them
v3.0: (10 October 1999)
- new #define flags for OS and realtime dependencies (this will probably cause problems for most everyone, but it was necessary to make future ports easier)
- fixed Linux MIDI input bug
- fixed MIDI status masking problem in Windows
- OS type defines now in Makefile
- new RAWWAVE_PATH define in Object.h
- syntmono pulled out to separate directory and cleaned up
- socketing capabilities under Unix, as well as Windoze
- multiple simultaneous socket client connections to STK servers now possible
- MD2SKINI now can merge MIDI and piped messages under Irix and Linux (for TCL->MD2SKINI->syntmono control)
- defined INT16 and INT32 types and fixed various WvIn and WvOut classes
- updated MatWvIn and MatWvOut for new MAT-file documentation from Matlab
- new demo GUI
- minor fixes to FM behavior
- added record/duplex capabilities to RTSoundIO (Linux, SGI, and Windoze)
- fixed bugs in WavWvOut and MatWvOut header specifications
- added RawWvOut class
- new WvIn class with RawWvIn, SndWvIn, WavWvIn, MatWvIn, and RTWvIn subclasses
- removed RawWave, RawShot, RawInterp, and RawLoop classes (supplanted by RawWvIn)
- multi-channel data support in WvIn and WvOut classes using MY_MULTI data type (pointer to StkFloat) and the methods mtick() and mlastOutput()
- now writing to primary buffer under Windoze when allowed by hardware
- cleaned up Object.h a bit
- pulled various utility and thread functions out of syntmono.cpp (to aid readability of the code)
v2.02: (16 November 1998)
- 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).
- modified DrumSynt to correctly handle sample rates different than 22050 Hz.
- 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.
- fixed DirectSound playback bug in Win distribution. Sound was being played at 8-bit, 22 kHz in all cases. Playback is now 16-bit and dependent on SRATE.
- fixed bug in MD2SKINI which prevented some NoteOff statements from being output.
v2.01: (27 July 1998)
- Corrected extraneous ^M line return characters that were incompatible with SGI.
v2.0: (20 July 1998)
- The first true release by Gary, with unified capabilities across SGI, Linux, and Win platforms. See WWW pages (http://www-ccrma.stanford.edu/CCRMA/Software/STK/) for more info.
v1.1:
- More linux support and other changes that happened so long ago that I can't remember anymore. Never officially released.
v1.0:
- Linux support added with the help of Tim Stilson. Never officially released.
v0.8:
- One of (if not THE) original distributions for SGI, NeXTStep, and basic Win support. I think this came out in 1996.

View File

@@ -1,391 +1,388 @@
This describes the latest (version 1.1) implementation of SKINI. This describes the latest (version 1.1) implementation of SKINI.
Synthesis toolKit Instrument Network Interface Synthesis toolKit Instrument Network Interface
for the Synthesis Toolkit in C++ by Perry R. Cook. for the Synthesis Toolkit in C++ by Perry R. Cook.
********************************* *********************************
* Too good to be true? * * Too good to be true? *
* Have control and read it too? * * Have control and read it too? *
* A SKINI Haiku. * * A SKINI Haiku. *
********************************* *********************************
Profound thanks to Dan Trueman, Brad Garton, and Profound thanks to Dan trueman, Brad Garton, and
Gary Scavone for input on this revision. Thanks Gary Scavone for input on this revision. Thanks
also to MIDI, the NeXT MusicKit, ZIPI and all also to MIDI, the NeXT MusicKit, ZIPI and all
the creators and modifiers of these for good bases the creators and modifiers of these for good bases
upon/from which to build and depart. upon/from which to build and depart.
1) MIDI Compatibility 1) MIDI Compatibility
SKINI was designed to be MIDI compatible wherever possible, SKINI was designed to be MIDI compatible wherever possible,
and extend MIDI in incremental, then maybe profound ways. and extend MIDI in incremental, then maybe profound ways.
Differences from MIDI, and motivations, include: Differences from MIDI, and motivations, include:
Text-based messages are used, with meaningful names Text-based messages are used, with meaningful names
wherever possible. This allows any language or system wherever possible. This allows any language or system
capable of formatted printing to generate SKINI. capable of formatted printing to generate SKINI.
Similarly, any system capable of reading in a string Similarly, any system capable of reading in a string
and turning delimited fields into strings, floats, and turning delimited fields into strings, floats,
and ints can consume SKINI for control. More importantly, and ints can consume SKINI for control. More importantly,
humans can actually read, and even write if they want, humans can actually read, and even write if they want,
SKINI files and streams. Use an editor and search/ SKINI files and streams. Use an editor and search/
replace or macros to change a channel or control number. replace or macros to change a channel or control number.
Load a SKINI score into a spread sheet to apply Load a SKINI score into a spread sheet to apply
transformations to time, control parameters, MIDI transformations to time, control parameters, MIDI
velocities, etc. Put a monkey on a special typewriter velocities, etc. Put a monkey on a special typewriter
and get your next great work. Life's too short to debug and get your next great work. Life's too short to debug
bit/nybble packed variable length mumble messages. Disk bit/nybble packed variable length mumble messages. Disk
space gets cheaper, available bandwidth increases, music space gets cheaper, available bandwidth increases, music
takes up so little space and bandwidth compared to video takes up so little space and bandwidth compared to video
and grapics. Live a little. and grapics. Live a little.
Floating point numbers are used wherever possible. Floating point numbers are used wherever possible.
Note Numbers, Velocities, Controller Values, and Note Numbers, Velocities, Controller Values, and
Delta and Absolute Times are all represented and Delta and Absolute Times are all represented and
scanned as ASCII double-precision floats. MIDI byte scanned as ASCII double-precision floats. MIDI byte
values are preserved, so that incoming MIDI bytes values are preserved, so that incoming MIDI bytes
from an interface can be put directly into SKINI from an interface can be put directly into SKINI
messages. 60.0 or 60 is middle C, 127.0 or 127 is messages. 60.0 or 60 is middle C, 127.0 or 127 is
maximum velocity etc. But, unlike MIDI, 60.5 can maximum velocity etc. But, unlike MIDI, 60.5 can
cause a 50cent sharp middle C to be played. As with cause a 50cent sharp middle C to be played. As with
MIDI byte values like velocity, use of the integer and MIDI byte values like velocity, use of the integer and
SKINI-added fractional parts is up to the implementor SKINI-added fractional parts is up to the implementor
of the algorithm being controlled by SKINI messages. of the algorithm being controlled by SKINI messages.
But the extra precision is there to be used or ignored. But the extra precision is there to be used or ignored.
2) WHY SKINI? 2) WHY SKINI?
SKINI was designed to be extensable and hackable for a number SKINI was designed to be extensable and hackable for a number
of applications: imbedded synthesis in a game or VR simulation, of applications: imbedded synthesis in a game or VR simulation,
scoring and mixing tasks, real-time and non-real time applications scoring and mixing tasks, real-time and non-real time applications
which could benefit from controllable sound synthesis, which could benefit from controllable sound synthesis,
JAVA controlled synthesis, or eventually maybe JAVA synthesis, JAVA controlled synthesis, or eventually maybe JAVA synthesis,
etc. SKINI is not intended to be "the mother of scorefiles," etc. SKINI is not intended to be "the mother of scorefiles,"
but since the entire system is based on text representations but since the entire system is based on text representations
of names, floats, and ints, converters from one scorefile of names, floats, and ints, converters from one scorefile
language to SKINI, or back, should be easily created. language to SKINI, or back, should be easily created.
I am basically a bottom-up designer with an awareness of top- I am basically a bottom-up designer with an awareness of top-
down design ideas, so SKINI above all reflects the needs of my down design ideas, so SKINI above all reflects the needs of my
particular research and creative projects as they have arisen and particular research and creative projects as they have arisen and
developed. SKINI 1.1 represents a profound advance beyond developed. SKINI 1.1 represents a profound advance beyond
versions 0.8 and 0.9 (the first versions), future SKINI's might versions 0.8 and 0.9 (the first versions), future SKINI's might
reflect some changes. Compatibility with prior scorefiles reflect some changes. Compatibility with prior scorefiles
will be attempted, but there aren't that many scorefiles out will be attempted, but there aren't that many scorefiles out
there yet. there yet.
3) SKINI MESSAGES 3) SKINI MESSAGES
A basic SKINI message is a line of text. There are only three A basic SKINI message is a line of text. There are only three
required fields, the message type (an ASCII name), the time (either required fields, the message type (an ASCII name), the time (either
delta or absolute), and the channel number. Don't freak out and delta or absolute), and the channel number. Don't freak out and
think that this is MIDI channel 0-15 (which is supported), because think that this is MIDI channel 0-15 (which is supported), because
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. SKINI.tbl 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,
so a newline means the message is over. Multiple messages are so a newline means the message is over. Multiple messages are
NOT allowed directly on a single line (by use of the ; for NOT allowed directly on a single line (by use of the ; for
example in C). This could be supported, but it isn't in example in C). This could be supported, but it isn't in
version 1.1. version 1.1.
Message types include standard MIDI types like NoteOn, NoteOff, Message types include standard MIDI types like NoteOn, NoteOff,
ControlChange, etc. MIDI extension message types (messages ControlChange, etc. MIDI extension message types (messages
which look better than MIDI but actually get turned into which look better than MIDI but actually get turned into
MIDI-like messages) include LipTension, StringDamping, etc. MIDI-like messages) include LipTension, StringDamping, etc.
NonMIDI message types include SetPath (sets a path for file NonMIDI message types include SetPath (sets a path for file
use later), and OpenReadFile (for streaming, mixing, and applying use later), and OpenReadFile (for streaming, mixing, and applying
effects to soundfiles along with synthesis, for example). effects to soundfiles along with synthesis, for example).
Other non-MIDI message types include Trilling, HammerOn, etc. (these Other non-MIDI message types include Trilling, HammerOn, etc. (these
translate to gestures, behaviors, and contexts for use by translate to gestures, behaviors, and contexts for use by
intellegent players and instruments using SKINI). Where possible intellegent players and instruments using SKINI). Where possible
I will still use these as MIDI extension messages, so foot I will still use these as MIDI extension messages, so foot
switches, etc. can be used to control them in real time. switches, etc. can be used to control them in real time.
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. SKINI.tbl.
The other important file used by SKINI is SKINI.msg, which is a The other important file used by SKINI is SKINI.msg, 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
be replaced by declaration and assignment statements, preserving be replaced by declaration and assignment statements, preserving
the look and behavior of the rest of the code. the look and behavior of the rest of the code.
4) C Files Used To Implement SKINI 4) C Files Used To Implement SKINI
SKINI.cpp is an object which can either open a SKINI file, and Skini.cpp is an object which can either open a SKINI file, and
successively read and parse lines of text as SKINI strings, or successively read and parse lines of text as SKINI strings, or
accept strings from another object and parse them. The latter accept strings from another object and parse them. The latter
functionality would be used by a socket, pipe, or other connection functionality would be used by a socket, pipe, or other connection
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 SKINI.msg 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). SKINI.tbl 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 SKINI.tbl, 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
could be dynamically loaded and changed in a future version of could be dynamically loaded and changed in a future version of
SKINI. SKINI.
5) SKINI Messages and the SKINI Parser: 5) SKINI Messages and the SKINI Parser:
The parser isn't all that smart, but neither am I. Here are the The parser isn't all that smart, but neither am I. Here are the
basic rules governing a valid SKINI message: basic rules governing a valid SKINI message:
a) If the first (non-delimiter (see c)) character in a SKINI a) If the first (non-delimiter (see c)) character in a SKINI
string is '/' that line is treated as a comment and echoed string is '/' that line is treated as a comment and echoed
to stdout. to stdout.
b) If there are no characters on a line, that line is treated b) If there are no characters on a line, that line is treated
as blank and echoed to stdout. Tabs and spaces are treated as blank and echoed to stdout. Tabs and spaces are treated
as non-characters. as non-characters.
c) Spaces, commas, and tabs delimit the fields in a SKINI c) Spaces, commas, and tabs delimit the fields in a SKINI
message line. (We might allow for multiple messages per message line. (We might allow for multiple messages per
line later using the semicolon, but probably not. A series line later using the semicolon, but probably not. A series
of lines with deltaTimes of 0.0 denotes simultaneous events. of lines with deltaTimes of 0.0 denotes simultaneous events.
For read-ability, multiple messages per line doesn't help much, For read-ability, multiple messages per line doesn't help much,
so it's unlikely to be supported later). so it's unlikely to be supported later).
d) The first field must be a SKINI message name. (like NoteOn). d) The first field must be a SKINI message name. (like NoteOn).
These might become case-insensitive in future versions, so don't These might become case-insensitive in future versions, so don't
plan on exciting clever overloading of names (like noTeOn being plan on exciting clever overloading of names (like noTeOn being
different from NoTeON). There can be a number of leading different from NoTeON). There can be a number of leading
spaces or tabs, but don't exceed 32 or so. spaces or tabs, but don't exceed 32 or so.
e) The second field must be a time specification in seconds. e) The second field must be a time specification in seconds.
A time field can be either delta-time (most common and the only one A time field can be either delta-time (most common and the only one
supported in version 0.8), or absolute time. Absolute time supported in version 0.8), or absolute time. Absolute time
messages have an '=' appended to the beginning of the floating messages have an '=' appended to the beginning of the floating
point number with no space. So 0.10000 means delta time of point number with no space. So 0.10000 means delta time of
100 ms, while =0.10000 means absolute time of 100 ms. Absolute 100 ms, while =0.10000 means absolute time of 100 ms. Absolute
time messages make most sense in score files, but could also be time messages make most sense in score files, but could also be
used for (loose) synchronization in a real-time context. Real used for (loose) synchronization in a real-time context. Real
time messages should be time-ordered AND time-correct. That is, time messages should be time-ordered AND time-correct. That is,
if you've sent 100 total delta-time messages of 1.0 seconds, and if you've sent 100 total delta-time messages of 1.0 seconds, and
then send an absolute time message of =90.0 seconds, or if you then send an absolute time message of =90.0 seconds, or if you
send two absolute time messages of =100.0 and =90.0 in that send two absolute time messages of =100.0 and =90.0 in that
order, things will get really fouled up. The SKINI parser order, things will get really fouled up. The SKINI parser
doesn't know about time, however. The WvOut device is the doesn't know about time, however. The WvOut device is the
master time keeper in the Synthesis Toolkit, so it should be master time keeper in the Synthesis Toolkit, so it should be
queried to see if absolute time messages are making sense. queried to see if absolute time messages are making sense.
There's an example of how to do that later in this document. There's an example of how to do that later in this document.
Absolute times are returned by the parser as negative numbers Absolute times are returned by the parser as negative numbers
(since negative deltaTimes are not allowed). (since negative deltaTimes are not allowed).
f) The third field must be an integer channel number. Don't go f) The third field must be an integer channel number. Don't go
crazy and think that this is just MIDI channel 0-15 (which is crazy and think that this is just MIDI channel 0-15 (which is
supported). The channel number is scanned as a long int. Channels supported). The channel number is scanned as a long int. Channels
0-15 are in general to be treated as MIDI channels. After that 0-15 are in general to be treated as MIDI channels. After that
it's wide open. Channels could be socket numbers, machine IDs, it's wide open. Channels could be socket numbers, machine IDs,
serial numbers, or even unique tags for each event in a synthesis. serial numbers, or even unique tags for each event in a synthesis.
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 SKINI.tbl 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
on the line, but the object using SKINI must take that string on the line, but the object using SKINI must take that string
apart (retrived by using getRemainderString()) and scan it. apart (retrived by using getRemainderString()) and scan it.
Any excess fields are stashed in remainderString. Any excess fields are stashed in remainderString.
6) A Short SKINI File: 6) A Short SKINI File:
/* Howdy!!! Welcome to SKINI, by P. Cook 1999 /* Howdy!!! Welcome to SKINI, by P. Cook 1999
NoteOn 0.000082 2 55 82 NoteOn 0.000082 2 55 82
NoteOff 1.000000 2 55 0 NoteOff 1.000000 2 55 0
NoteOn 0.000082 2 69 82 NoteOn 0.000082 2 69 82
StringDetune 0.100000 2 10 StringDetune 0.100000 2 10
StringDetune 0.100000 2 30 StringDetune 0.100000 2 30
StringDetune 0.100000 2 50 StringDetune 0.100000 2 50
NoteOn 0.000000 2 69 82 NoteOn 0.000000 2 69 82
StringDetune 0.100000 2 40 StringDetune 0.100000 2 40
StringDetune 0.100000 2 22 StringDetune 0.100000 2 22
StringDetune 0.100000 2 12 StringDetune 0.100000 2 12
// //
StringDamping 0.000100 2 0.0 StringDamping 0.000100 2 0.0
NoteOn 0.000082 2 55 82 NoteOn 0.000082 2 55 82
NoteOn 0.200000 2 62 82 NoteOn 0.200000 2 62 82
NoteOn 0.100000 2 71 82 NoteOn 0.100000 2 71 82
NoteOn 0.200000 2 79 82 NoteOn 0.200000 2 79 82
NoteOff 1.000000 2 55 82 NoteOff 1.000000 2 55 82
NoteOff 0.000000 2 62 82 NoteOff 0.000000 2 62 82
NoteOff 0.000000 2 71 82 NoteOff 0.000000 2 71 82
NoteOff 0.000000 2 79 82 NoteOff 0.000000 2 79 82
StringDamping =4.000000 2 0.0 StringDamping =4.000000 2 0.0
NoteOn 0.000082 2 55 82 NoteOn 0.000082 2 55 82
NoteOn 0.200000 2 62 82 NoteOn 0.200000 2 62 82
NoteOn 0.100000 2 71 82 NoteOn 0.100000 2 71 82
NoteOn 0.200000 2 79 82 NoteOn 0.200000 2 79 82
NoteOff 1.000000 2 55 82 NoteOff 1.000000 2 55 82
NoteOff 0.000000 2 62 82 NoteOff 0.000000 2 62 82
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 SKINI.tbl File, How Messages are Parsed:
The SKINI.tbl file contains an array of structures which The SKINI.tbl 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];
long type; long type;
long data2; long data2;
long data3; long data3;
}; };
so an assignment of one of these structs looks like: so an assignment of one of these structs looks like:
MessageStr$ ,type, data2, data3, MessageStr$ ,type, data2, data3,
type is the message type sent back from the SKINI line parser. type is the message type sent back from the SKINI line parser.
data<n> is either data<n> is either
NOPE : field not used, specifically, there aren't going NOPE : field not used, specifically, there aren't going
to be any more fields on this line. So if there to be any more fields on this line. So if there
is is NOPE in data2, data3 won't even be checked is is NOPE in data2, data3 won't even be checked
SK_INT : byte (actually scanned as 32 bit signed long int) SK_INT : byte (actually scanned as 32 bit signed long int)
If it's a MIDI data field which is required to If it's a MIDI data field which is required to
be an integer, like a controller number, it's be an integer, like a controller number, it's
0-127. Otherwise) get creative with SK_INTs 0-127. Otherwise) get creative with SK_INTs
SK_DBL : double precision floating point. SKINI uses these SK_DBL : double precision floating point. SKINI uses these
in the MIDI context for note numbers with micro in the MIDI context for note numbers with micro
tuning, velocities, controller values, etc. tuning, velocities, controller values, etc.
SK_STR : only valid in final field. This allows (nearly) SK_STR : only valid in final field. This allows (nearly)
arbitrary message types to be supported by simply arbitrary message types to be supported by simply
scanning the string to EndOfLine and then passing scanning the string to EndOfLine and then passing
it to a more intellegent handler. For example, it to a more intellegent handler. For example,
MIDI SYSEX (system exclusive) messages of up to MIDI SYSEX (system exclusive) messages of up to
256 bytes can be read as space-delimited integers 256 bytes can be read as space-delimited integers
into the 1K SK_STR buffer. Longer bulk dumps, into the 1K SK_STR buffer. Longer bulk dumps,
soundfiles, etc. should be handled as a new soundfiles, etc. should be handled as a new
message type pointing to a FileName, Socket, or message type pointing to a FileName, Socket, or
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 SKINI.tbl 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},
{"ControlChange" , __SK_ControlChange_, SK_INT, SK_DBL}, {"ControlChange" , __SK_ControlChange_, SK_INT, SK_DBL},
{"Volume" , __SK_ControlChange_, __SK_Volume_ , SK_DBL}, {"Volume" , __SK_ControlChange_, __SK_Volume_ , SK_DBL},
{"StringDamping" , __SK_ControlChange_, __SK_StringDamping_, SK_DBL}, {"StringDamping" , __SK_ControlChange_, __SK_StringDamping_, SK_DBL},
{"StringDetune" , __SK_ControlChange_, __SK_StringDetune_, SK_DBL}, {"StringDetune" , __SK_ControlChange_, __SK_StringDetune_, SK_DBL},
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 SKINI.msg 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
fields would be scanned as double-precision floats and assigned to fields would be scanned as double-precision floats and assigned to
the byteTwo and byteThree variables of the SKINI parser. The remainder the byteTwo and byteThree variables of the SKINI parser. The remainder
of the line is stashed in the remainderString variable. of the line is stashed in the remainderString variable.
The ControlChange spec is basically the same as NoteOn and NoteOff, but The ControlChange spec is basically the same as NoteOn and NoteOff, but
the second data byte is set to an integer (for checking later as to the second data byte is set to an integer (for checking later as to
what MIDI control is being changed). what MIDI control is being changed).
The Volume spec is a MIDI Extension message, which behaves like a The Volume spec is a MIDI Extension message, which behaves like a
ControlChange message with the controller number set explicitly to ControlChange message with the controller number set explicitly to
the value for MIDI Volume (7). Thus the following two lines would the value for MIDI Volume (7). Thus the following two lines would
accomplish the same changing of MIDI volume on channel 2: accomplish the same changing of MIDI volume on channel 2:
ControlChange 0.000000 2 7 64.1 ControlChange 0.000000 2 7 64.1
Volume 0.000000 2 64.1 Volume 0.000000 2 64.1
I like the 2nd line better, thus my motivation for SKINI in the first I like the 2nd line better, thus my motivation for SKINI in the first
place. place.
The StringDamping and StringDetune messages behave the same as The StringDamping and StringDetune messages behave the same as
the Volume message, but use Control Numbers which aren't specifically the Volume message, but use Control Numbers which aren't specifically
nailed-down in MIDI. Note that these Control Numbers are carried nailed-down in MIDI. Note that these Control Numbers are carried
around as long ints, so we're not limited to 0-127. If, however, around as long ints, so we're not limited to 0-127. If, however,
you want to use a MIDI controller to play an instrument, using you want to use a MIDI controller to play an instrument, using
controller numbers in the 0-127 range might make sense. controller numbers in the 0-127 range might make sense.
8) Objects using SKINI 8) Objects using SKINI
Here's a simple example of code which uses the SKINI object Here's a simple example of code which uses the Skini object
to read a SKINI file and control a single instrument. to read a SKINI file and control a single instrument.
instrument = new Mandolin(50.0); Skini score;
score = new SKINI(argv[1]); Skini::Message message;
while(score->getType() > 0) { instrument = new Mandolin(50.0);
tempDouble = score->getDelta(); score.setFile( argv[1] );
if (tempDouble < 0) { while ( score.nextMessage( message ) != 0 ) {
tempDouble = - tempDouble; tempDouble = message.time;
tempDouble = tempDouble - output.getTime(); if (tempDouble < 0) {
if (tempDouble < 0) { tempDouble = - tempDouble;
printf("Bad News Here!!! Backward Absolute Time Required.\n"); tempDouble = tempDouble - output.getTime();
tempDouble = 0.0; if (tempDouble < 0) {
} printf("Bad News Here!!! Backward Absolute Time Required.\n");
} tempDouble = 0.0;
tempLong = (long) (tempDouble * Stk::sampleRate()); }
for (i=0;i<tempLong;i++) { }
output.tick(instrument->tick()); tempLong = (long) ( tempDouble * Stk::sampleRate() );
} for ( i=0; i<tempLong; i++ ) {
tempDouble3 = score->getByteThree(); output.tick( instrument->tick() );
if (score->getType()== __SK_NoteOn_ ) { }
tempDouble3 *= NORM_MIDI;
if (score->getByteThree() == 0) { tempDouble3 = message.floatValues[1] * NORM_MIDI;
tempDouble3 = 0.5; if ( message.type == __SK_NoteOn_ ) {
instrument->noteOff(tempDouble3); if ( tempDouble3 == 0.0 ) {
} tempDouble3 = 0.5;
else { instrument->noteOff( tempDouble3 );
tempLong = (int) score->getByteTwo(); }
tempDouble2 = Midi2Pitch[tempLong]; else {
instrument->noteOn(tempDouble2,tempDouble3); tempLong = message.intValues[0];
} tempDouble2 = Midi2Pitch[tempLong];
} instrument->noteOn( tempDouble2, tempDouble3 );
else if (score->getType() == __SK_NoteOff_) { }
tempDouble3 *= NORM_MIDI; }
instrument->noteOff(tempDouble3); else if ( message.type == __SK_NoteOff_ ) {
} instrument->noteOff( tempDouble3 );
else if (score->getType() == __SK_ControlChange_) { }
tempLong = score->getByteTwoInt(); else if ( message.type == __SK_ControlChange_ ) {
instrument->controlChange(tempLong,temp3.0); tempLong = message.intValues[0];
} instrument->controlChange( tempLong, tempDouble3 );
score->nextMessage(); }
} }
When the score (SKINI object) object is created from the When a SKINI score is passed to a Skini object using the
filename in argv[1], the first valid command line is read Skini::setFile() function, valid messages are read from
from the file and parsed. the file and returned using the Skini::nextMessage() function.
The score->getType() retrieves the messageType. If this is A Skini::Message structure contains all the information parsed
-1, there are no more valid messages in the file and the from a single SKINI message. A returned message type of zero
synthesis loop terminates. Otherwise, the message type is indicates either an invalid message or the end of a scorefile.
returned.
The "time" member of a Skini::Message is the deltaTime until the
getDelta() retrieves the deltaTime until the current message current message should occur. If this is greater than 0,
should occur. If this is greater than 0, synthesis occurs synthesis occurs until the deltaTime has elapsed. If deltaTime is
until the deltaTime has elapsed. If deltaTime is less than less than zero, the time is interpreted as absolute time and the
zero, the time is interpreted as absolute time and the output output device is queried as to what time it is now. That is used
device is queried as to what time it is now. That is used to to form a deltaTime, and if it's positive we synthesize. If it's
form a deltaTime, and if it's positive we synthesize. If negative, we print an error, pretend this never happened and we
it's negative, we print an error and pretend this never hang around hoping to eventually catch up.
happened and we hang around hoping to eventually catch up.
The rest of the code sorts out message types NoteOn, NoteOff
The rest of the code sorts out message types NoteOn, NoteOff (including NoteOn with velocity 0), and ControlChange. The
(including NoteOn with velocity 0), and ControlChange. The code implicitly takes into account the integer type of the
code implicitly takes into account the integer type of the control number, but all other data is treated as double float.
control number, but all other data is treated as double float.
The last line reads and parses the next message in the file.

View File

@@ -1,155 +1,212 @@
# Doxyfile 1.2.6 # Doxyfile 1.3.6
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# General configuration options # Project related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
PROJECT_NAME = STK PROJECT_NAME = STK
PROJECT_NUMBER = PROJECT_NUMBER = 4.2.0
OUTPUT_DIRECTORY = . OUTPUT_DIRECTORY = .
OUTPUT_LANGUAGE = English OUTPUT_LANGUAGE = English
EXTRACT_ALL = NO USE_WINDOWS_ENCODING = NO
EXTRACT_PRIVATE = NO BRIEF_MEMBER_DESC = YES
EXTRACT_STATIC = YES REPEAT_BRIEF = YES
HIDE_UNDOC_MEMBERS = YES ABBREVIATE_BRIEF =
HIDE_UNDOC_CLASSES = YES ALWAYS_DETAILED_SEC = NO
BRIEF_MEMBER_DESC = YES INLINE_INHERITED_MEMB = NO
REPEAT_BRIEF = YES FULL_PATH_NAMES = NO
ALWAYS_DETAILED_SEC = NO STRIP_FROM_PATH =
FULL_PATH_NAMES = NO SHORT_NAMES = NO
STRIP_FROM_PATH = JAVADOC_AUTOBRIEF = NO
INTERNAL_DOCS = NO MULTILINE_CPP_IS_BRIEF = NO
CLASS_DIAGRAMS = YES DETAILS_AT_TOP = YES
SOURCE_BROWSER = NO INHERIT_DOCS = YES
INLINE_SOURCES = NO DISTRIBUTE_GROUP_DOC = NO
STRIP_CODE_COMMENTS = YES TAB_SIZE = 9
CASE_SENSE_NAMES = YES ALIASES =
HIDE_SCOPE_NAMES = NO OPTIMIZE_OUTPUT_FOR_C = NO
VERBATIM_HEADERS = YES OPTIMIZE_OUTPUT_JAVA = NO
SHOW_INCLUDE_FILES = YES SUBGROUPING = YES
JAVADOC_AUTOBRIEF = NO #---------------------------------------------------------------------------
INHERIT_DOCS = YES # Build related configuration options
INLINE_INFO = YES #---------------------------------------------------------------------------
SORT_MEMBER_DOCS = NO EXTRACT_ALL = NO
DISTRIBUTE_GROUP_DOC = NO EXTRACT_PRIVATE = NO
TAB_SIZE = 8 EXTRACT_STATIC = YES
ENABLED_SECTIONS = EXTRACT_LOCAL_CLASSES = YES
GENERATE_TODOLIST = YES HIDE_UNDOC_MEMBERS = YES
GENERATE_TESTLIST = YES HIDE_UNDOC_CLASSES = YES
GENERATE_BUGLIST = YES HIDE_FRIEND_COMPOUNDS = NO
ALIASES = HIDE_IN_BODY_DOCS = NO
MAX_INITIALIZER_LINES = 30 INTERNAL_DOCS = NO
OPTIMIZE_OUTPUT_FOR_C = NO CASE_SENSE_NAMES = YES
SHOW_USED_FILES = YES HIDE_SCOPE_NAMES = NO
#--------------------------------------------------------------------------- SHOW_INCLUDE_FILES = YES
# configuration options related to warning and progress messages INLINE_INFO = YES
#--------------------------------------------------------------------------- SORT_MEMBER_DOCS = NO
QUIET = NO SORT_BRIEF_DOCS = NO
WARNINGS = YES SORT_BY_SCOPE_NAME = NO
WARN_IF_UNDOCUMENTED = YES GENERATE_TODOLIST = YES
WARN_FORMAT = "$file:$line: $text" GENERATE_TESTLIST = YES
WARN_LOGFILE = GENERATE_BUGLIST = YES
#--------------------------------------------------------------------------- GENERATE_DEPRECATEDLIST= YES
# configuration options related to the input files ENABLED_SECTIONS =
#--------------------------------------------------------------------------- MAX_INITIALIZER_LINES = 30
INPUT = index.txt information.txt classes.txt download.txt usage.txt maillist.txt system.txt tutorial.txt skini.txt ../../include/ SHOW_USED_FILES = YES
FILE_PATTERNS = *.h #---------------------------------------------------------------------------
RECURSIVE = NO # configuration options related to warning and progress messages
EXCLUDE = #---------------------------------------------------------------------------
EXCLUDE_PATTERNS = QUIET = NO
EXAMPLE_PATH = WARNINGS = YES
EXAMPLE_PATTERNS = WARN_IF_UNDOCUMENTED = YES
IMAGE_PATH = WARN_IF_DOC_ERROR = YES
INPUT_FILTER = WARN_FORMAT = "$file:$line: $text"
FILTER_SOURCE_FILES = NO WARN_LOGFILE =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the alphabetical class index # configuration options related to the input files
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO INPUT = . \
COLS_IN_ALPHA_INDEX = 5 ../../include
IGNORE_PREFIX = FILE_PATTERNS = *.txt \
#--------------------------------------------------------------------------- *.msg \
# configuration options related to the HTML output *.h
#--------------------------------------------------------------------------- RECURSIVE = YES
GENERATE_HTML = YES EXCLUDE = ../../src/asio
HTML_OUTPUT = ../html EXCLUDE_SYMLINKS = NO
HTML_HEADER = header.html EXCLUDE_PATTERNS =
HTML_FOOTER = footer.html EXAMPLE_PATH = ../../projects/examples
HTML_STYLESHEET = EXAMPLE_PATTERNS =
HTML_ALIGN_MEMBERS = YES EXAMPLE_RECURSIVE = NO
GENERATE_HTMLHELP = NO IMAGE_PATH =
GENERATE_CHI = NO INPUT_FILTER =
BINARY_TOC = NO FILTER_SOURCE_FILES = NO
TOC_EXPAND = NO #---------------------------------------------------------------------------
DISABLE_INDEX = YES # configuration options related to source browsing
ENUM_VALUES_PER_LINE = 4 #---------------------------------------------------------------------------
GENERATE_TREEVIEW = NO SOURCE_BROWSER = YES
TREEVIEW_WIDTH = 250 INLINE_SOURCES = YES
#--------------------------------------------------------------------------- STRIP_CODE_COMMENTS = YES
# configuration options related to the LaTeX output REFERENCED_BY_RELATION = YES
#--------------------------------------------------------------------------- REFERENCES_RELATION = YES
GENERATE_LATEX = YES VERBATIM_HEADERS = YES
LATEX_OUTPUT = latex #---------------------------------------------------------------------------
COMPACT_LATEX = NO # configuration options related to the alphabetical class index
PAPER_TYPE = letter #---------------------------------------------------------------------------
EXTRA_PACKAGES = ALPHABETICAL_INDEX = NO
LATEX_HEADER = header.tex COLS_IN_ALPHA_INDEX = 5
PDF_HYPERLINKS = YES IGNORE_PREFIX =
USE_PDFLATEX = YES #---------------------------------------------------------------------------
LATEX_BATCHMODE = NO # configuration options related to the HTML output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the RTF output GENERATE_HTML = YES
#--------------------------------------------------------------------------- HTML_OUTPUT = ../html
GENERATE_RTF = NO HTML_FILE_EXTENSION = .html
RTF_OUTPUT = rtf HTML_HEADER = header.html
COMPACT_RTF = NO HTML_FOOTER = footer.html
RTF_HYPERLINKS = NO HTML_STYLESHEET =
RTF_STYLESHEET_FILE = HTML_ALIGN_MEMBERS = YES
#--------------------------------------------------------------------------- GENERATE_HTMLHELP = NO
# configuration options related to the man page output CHM_FILE =
#--------------------------------------------------------------------------- HHC_LOCATION =
GENERATE_MAN = NO GENERATE_CHI = NO
MAN_OUTPUT = man BINARY_TOC = NO
MAN_EXTENSION = .3 TOC_EXPAND = NO
#--------------------------------------------------------------------------- DISABLE_INDEX = YES
# Configuration options related to the preprocessor ENUM_VALUES_PER_LINE = 4
#--------------------------------------------------------------------------- GENERATE_TREEVIEW = NO
ENABLE_PREPROCESSING = YES TREEVIEW_WIDTH = 250
MACRO_EXPANSION = NO #---------------------------------------------------------------------------
EXPAND_ONLY_PREDEF = NO # configuration options related to the LaTeX output
SEARCH_INCLUDES = YES #---------------------------------------------------------------------------
INCLUDE_PATH = GENERATE_LATEX = NO
INCLUDE_FILE_PATTERNS = LATEX_OUTPUT = latex
PREDEFINED = LATEX_CMD_NAME = latex
EXPAND_AS_DEFINED = MAKEINDEX_CMD_NAME = makeindex
#--------------------------------------------------------------------------- COMPACT_LATEX = NO
# Configuration::addtions related to external references PAPER_TYPE = letter
#--------------------------------------------------------------------------- EXTRA_PACKAGES =
TAGFILES = LATEX_HEADER = header.tex
GENERATE_TAGFILE = PDF_HYPERLINKS = YES
ALLEXTERNALS = NO USE_PDFLATEX = YES
PERL_PATH = /usr/bin/perl LATEX_BATCHMODE = NO
#--------------------------------------------------------------------------- LATEX_HIDE_INDICES = NO
# Configuration options related to the dot tool #---------------------------------------------------------------------------
#--------------------------------------------------------------------------- # configuration options related to the RTF output
HAVE_DOT = NO #---------------------------------------------------------------------------
CLASS_GRAPH = YES GENERATE_RTF = NO
COLLABORATION_GRAPH = YES RTF_OUTPUT = rtf
INCLUDE_GRAPH = YES COMPACT_RTF = NO
INCLUDED_BY_GRAPH = YES RTF_HYPERLINKS = NO
GRAPHICAL_HIERARCHY = YES RTF_STYLESHEET_FILE =
DOT_PATH = RTF_EXTENSIONS_FILE =
MAX_DOT_GRAPH_WIDTH = 1024 #---------------------------------------------------------------------------
MAX_DOT_GRAPH_HEIGHT = 1024 # configuration options related to the man page output
GENERATE_LEGEND = YES #---------------------------------------------------------------------------
DOT_CLEANUP = YES GENERATE_MAN = NO
#--------------------------------------------------------------------------- MAN_OUTPUT = man
# Configuration::addtions related to the search engine MAN_EXTENSION = .3
#--------------------------------------------------------------------------- MAN_LINKS = NO
SEARCHENGINE = NO #---------------------------------------------------------------------------
CGI_NAME = search.cgi # configuration options related to the XML output
CGI_URL = #---------------------------------------------------------------------------
DOC_URL = GENERATE_XML = NO
DOC_ABSPATH = XML_OUTPUT = xml
BIN_ABSPATH = /usr/local/bin/ XML_SCHEMA =
EXT_DOC_PATHS = XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 1024
MAX_DOT_GRAPH_DEPTH = 0
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO

View File

@@ -1,10 +1,10 @@
/*! \page classes Class Documentation /*! \page classes Class Documentation
<UL> <UL>
<LI><a class="qindex" href="hierarchy.html">Class Hierarchy</a></LI> <LI><a class="qindex" href="hierarchy.html">Class Hierarchy</a></LI>
<LI><a class="qindex" href="annotated.html">Class/Enum List</a></LI> <LI><a class="qindex" href="annotated.html">Class/Enum List</a></LI>
<LI><a class="qindex" href="files.html">File List</a></LI> <LI><a class="qindex" href="files.html">File List</a></LI>
<LI><a class="qindex" href="functions.html">Compound Members</a></LI> <LI><a class="qindex" href="functions.html">Compound Members</a></LI>
</UL> </UL>
*/ */

99
doc/doxygen/compile.txt Normal file
View File

@@ -0,0 +1,99 @@
/*! \page compile Compiling
The Synthesis ToolKit can be used in a variety of ways, depending on your particular needs. Some people choose the classes they need for a particular project and copy those to their working directory. Others create <TT>Makefiles</TT> which compile project-specific class objects from common <TT>src</TT> and <TT>include</TT> directories. And still others like to compile and link to a common library of object files. STK was not designed with one particular style of use in mind.
\section rtvsnonrt "Realtime" vs. "Non-Realtime"
Most of the Synthesis ToolKit classes are platform independent. That means that they should compile on any reasonably current C++ compiler. The functionality needed for realtime audio and MIDI input/output, as well as realtime control message acquistion, is inherently platform and operating-system (OS) <I>dependent</I>. STK classes which require specific platform/OS support include RtAudio, RtWvOut, RtWvIn, RtDuplex, RtMidi, TcpWvIn, TcpWvOut, Socket, Thread, and Mutex. These classes currently can only be compiled on Linux, Irix, Macintosh OS X, and Windows systems.
Without the "realtime" classes, it is still possible to read SKINI scorefiles for control input and to read and write to/from a variety of audio file formats (WAV, SND, AIFF, MAT-file, and RAW). If compiling for a "little-endian" host processor, the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition should be provided.
\section unix Unix Systems:
STK compiles with realtime support on the following flavors of the Unix operating system: Linux, Irix, and Macintosh OS X. Aside from differences in compilers, audio/MIDI APIs, and host endianness, the steps necessary to compile STK programs and classes on these platforms are the same. The following table summarizes these differences.
<CENTER>
<TABLE BORDER=2 COLS=5 WIDTH="100%">
<TR BGCOLOR="beige">
<TD WIDTH="5%"><B>OS:</B></TD>
<TD WIDTH="5%"><B>Realtime Audio/MIDI API:</B></TD>
<TD WIDTH="5%"><B>Preprocessor Definition:</B></TD>
<TD WIDTH="5%"><B>Library or Framework:</B></TD>
</TR>
<TR>
<TD>Linux</TD>
<TD>ALSA</TD>
<TD>__LINUX_ALSA__, __LINUX_ALSASEQ__, __LITTLE_ENDIAN__</TD>
<TD><TT>asound, pthread</TT></TD>
</TR>
<TR>
<TD>Linux</TD>
<TD>OSS (audio only, use ALSA for MIDI support)</TD>
<TD>__LINUX_OSS__, __LINUX_ALSASEQ__, __LITTLE_ENDIAN__</TD>
<TD><TT>asound, pthread</TT></TD>
</TR>
<TR>
<TD>Macintosh OS X</TD>
<TD>CoreAudio</TD>
<TD>__MACOSX_CORE__</TD>
<TD><TT>pthread, CoreAudio, CoreMIDI, CoreFoundation</TT></TD>
</TR>
<TR>
<TD>Irix</TD>
<TD>AL</TD>
<TD>__IRIX_AL__, __IRIX_MD__</TD>
<TD><TT>audio, pthread</TT></TD>
</TR>
</TABLE>
</CENTER>
The available C++ compilers on any of these systems can vary.
One approach in using STK is to simply copy the class files needed for a particular program into a project directory. Taking the <TT>sineosc.cpp</TT> example from the previous tutorial chapter, it would be necessary to set up a directory that includes the files <TT>sineosc.cpp</TT>, the rawwave file <TT>sinewave.raw</TT> in a subdirectory called <TT>rawwaves</TT>, and the header and source files for the classes Stk, WvIn, WaveLoop, and WvOut. The program could then be compiled on a little-endian system, such as a PC running Linux, using the GNU g++ compiler as follows:
\code
g++ -Wall -D__LITTLE_ENDIAN__ -o sineosc Stk.cpp WvIn.cpp WaveLoop.cpp WvOut.cpp sineosc.cpp
\endcode
Note that the <TT>sineosc.cpp</TT> example does not make use of realtime audio or MIDI input/output classes. For programs using any of the STK realtime classes mentioned above, it is necessary to specify an audio/MIDI API preprocessor definition and link with the appropriate libraries or frameworks.
When working with a number of different projects that make use of ToolKit classes, the above approach can become cumbersome (especially when trying to synchronize with new STK releases). Most of the STK projects (e.g., demo, effects, ...) contain <TT>Makefiles</TT> (built by the configure script) which compile project-specific class objects from the distribution <TT>src</TT> and <TT>include</TT> directories. This approach makes it relatively easy when upgrading to a new STK release (by making path substitutions in the <TT>Makefile</TT> or by moving the projects to a similar relative path within the new STK source tree). A <TT>Makefile</TT> is provided in the <TT>projects/examples</TT> directory for compiling all the tutorial programs, as well as other example programs. To compile the <TT>sineosc.cpp</TT> program, for example, one need only type <TT>make sineosc</TT> from within the <TT>projects/examples</TT> directory.
\subsection library Library Use:
The STK distribution provides a <TT>Makefile</TT> that can be used on Unix systems to build a static library. After unpacking the distribution (<TT>tar -xzf stk-4.x.x.tar.gz</TT>), run the configure script by typing <TT>./configure</TT> from the top level distribution directory (see the INSTALL file in the same directory for more information). Then from within the <TT>src</TT> directory, type <TT>make</TT>. After a successful build, you may wish to move the library (<TT>libstk.a</TT>) and the contents of the <TT>include</TT> directory to standard library and include search paths on your system. For example, the linux RPM distribution of STK puts the library in <TT>/usr/lib/</TT> and the STK header files in <TT>/usr/include/stk/</TT>.
Assuming the library is located in a standard search path and the header files are located in <TT>/usr/include/stk/</TT>, the <TT>sineosc.cpp</TT> example from the previous tutorial chapter can be compiled on a little-endian system using the GNU g++ compiler as follows:
\code
g++ -Wall -D__LITTLE_ENDIAN__ -I/usr/include/stk -o sineosc sineosc.cpp -lstk
\endcode
With the header files in a standard search path, it is possible to modify the <TT>\#include</TT> statements in the <TT>sineosc.cpp</TT> program as follows:
\code
#include "stk/WaveLoop.h"
#include "stk/WvOut.h"
\endcode
and then compile without an explicit include path argument to the compiler:
\code
g++ -Wall -D__LITTLE_ENDIAN__ -o sineosc sineosc.cpp -lstk
\endcode
\section compileWin Windows:
STK has been tested on Windows platforms using the Visual C++ compiler only. It is assumed here that you're familiar with Visual C++ and its particular idiosyncrasies.
The approach when using Visual C++ is to build a project which includes the necessary ToolKit files from the distribution <TT>src</TT> and <TT>include</TT> directories. For the example program from the previous tutorial chapter, create a VC++ console application project, add the Stk, WvIn, WaveLoop, and WvOut class files, as well as <TT>sineosc.cpp</TT>, and make sure the <TT>sinewave.raw</TT> file is in the subdirectory <TT>rawwaves</TT>.
For programs using any of the STK realtime classes mentioned above, it is necessary to link with the DirectSound (<TT>dsound.lib</TT>), <TT>winmm.lib</TT>, and <TT>Wsock32.lib</TT> libraries, select the multithreaded library, and provide the <TT>__LITTLE_ENDIAN__</TT>, <TT>__WINDOWS_DS__</TT>, and <TT>__WINDOWS_MM__</TT> preprocessor definitions.
For Steinberg ASIO support, use the <TT>__WINDOWS_ASIO__</TT> preprocessor definition (and the <TT>__WINDOWS_MM__</TT> definition for RtMidi support), include all the files in the <TT>src/asio/</TT> directory (i.e., <TT>asio.h,cpp</TT>, <TT>asiodrivers.h,cpp</TT>, ...), and link with the <TT>winmm.lib</TT>, and <TT>Wsock32.lib</TT> libraries.
[<A HREF="filtering.html">Next tutorial</A>] &nbsp; [<A HREF="tutorial.html">Main tutorial page</A>]
*/

43
doc/doxygen/control.txt Normal file
View File

@@ -0,0 +1,43 @@
/*! \page controlin Control Input
Each Synthesis ToolKit instrument exposes its relevant control parameters via public functions such as setFrequency() and controlChange(). Programmers are free to implement the control scheme of their choice in exposing those parameters to the user.
A text-based control protocol called <A HREF="skini.html">SKINI</A> is provided with the Synthesis ToolKit. SKINI extends the MIDI protocol in incremental ways, providing a text-based messaging scheme in human-readable format and making use of floating-point numbers wherever possible. Each SKINI message consists of a message type (e.g., NoteOn, PitchBend), a time specification (absolute or delta), a channel number (scanned as a long integer), and a maximum of two subsequent message-specific field values. Knowing this, it should be relatively clear what the following SKINI "scorefile" specifies:
\code
NoteOn 0.000082 2 55.0 82.3
NoteOff 1.000000 2 55.0 64.0
NoteOn 0.000082 2 69.0 82.8
StringDetune 0.100000 2 10.0
StringDetune 0.100000 2 30.0
StringDetune 0.100000 2 50.0
StringDetune 0.100000 2 40.0
StringDetune 0.100000 2 22.0
StringDetune 0.100000 2 12.0
NoteOff 1.000000 2 69.0 64.0
\endcode
MIDI messages are easily represented within the SKINI protocol.
The class Messager can be used to acquire and parse MIDI messages from a MIDI device and SKINI messages from STDIN and socket connections. Incoming messages are acquired asynchronously and saved to an internal message queue of Skini::Message types (MIDI messages are converted to the Skini:Message format). The user then uses the Messager:popMessage() function to retrieve incoming control messages. This function does not block, instead returning a message type of zero when no more messages are in the queue. Many of the example programs included with the ToolKit distribution use a Messager instance to accept control input from the accompanying tcl/tk graphical user interfaces, from external MIDI devices, or from SKINI scorefiles.
In the following example, we'll modify the <TT>bethree.cpp</TT> program from the previous tutorial chapter and incorporate a Messager class to allow control via SKINI messages read from a SKINI file.
\include controlbee.cpp
A realtime control message will usually have a delta time of zero, in which case it is processed as soon as possible. Non-realtime messages, normally from a scorefile, will usually have non-zero delta times. The scheme used in this example is designed to work for both scorefile and realtime input types. When no message is available from the queue, the instrument is "ticked" for DELTA_CONTROL_TICKS and then the queue is checked again. The value of DELTA_CONTROL_TICKS roughly defines the program "control rate" in a realtime context, though multiple available messages in the queue are processed in immediate succession when their delta time values are zero.
The \c processMessage() function centralizes the handling of control messages. Other control update schemes can be implemented, perhaps using a separate thread or in the \c main() function, and this function should work in any context.
Assuming the program is compiled as <TT>controlbee</TT> and the SKINI scorefile <A HREF="tutorial/bookert.ski"><TT>bookert.ski</TT></A> is in the <TT>scores</TT> directory, the program can be run as:
\code
controlbee scores/bookert.ski
\endcode
Only a few basic SKINI message type case statements are included in this example. It is easy to extend the program to support a much more elaborate set of instrument control parameters.
This example could also be easily extended to accept "realtime" control input messages via pipe, socket or MIDI connections. The Messager class provides Messager::startStdInput(), Messager::startSocketInput(), and Messager::startMidiInput() functions for this purpose.
[<A HREF="multichannel.html">Next tutorial</A>] &nbsp; [<A HREF="tutorial.html">Main tutorial page</A>]
*/

26
doc/doxygen/crealtime.txt Normal file
View File

@@ -0,0 +1,26 @@
/*! \page crealtime Realtime Audio (callback)
The previous section described the use of the RtWvOut class for realtime audio output. The RtWvOut::tick() function periodically pauses program execution in order to send a buffer of audio data to the computer's audio hardware (referred to as blocking functionality). These pauses will effectively limit a program's computations to the correct number of samples per second, which is defined by the sample rate of the hardware.
An alternative scheme for audio input/output is to define a specific function in which audio computations are performed and to let the audio system call this function when more input/output data can be accepted by the hardware (referred to as a callback scheme). In this section, we show how the previous <TT>rtsine.cpp</TT> program can be modified to work in a callback scenario. There is no "single-sample" interface for this functionality. The callback function will be invoked automatically by the audio system controller (RtAudio) when new data is needed and it is necessary to compute a full audio buffer of samples at that time (see \ref callback for further information).
\include crtsine.cpp
The sinusoidal oscillator is created as before. The instantiation of RtAudio requires quite a few more parameters, including output/input device and channel specifiers, the data format, and the desired buffer length (in frames). In this example, we request a single output channel using the default output device, zero channels of input, the RtAudio data format which corresponds to an <tt>StkFloat</tt>, and the RT_BUFFER_SIZE defined in Stk.h. The last argument is an API-dependent buffering parameter (see RtAudio for further information).
After the digital-to-analog converter (dac) and oscillator are successfully created, it is necessary to provide the audio system controller with a pointer to our callback function. The RtAudio::setStreamCallback() function takes a pointer to the callback function and an optional pointer to data that will be made available in the callback. In this example, we need to pass only the pointer to the oscillator. In more complex programs, it is typically necessary to put all shared data in a <tt>struct</tt> (see the next tutorial program for an example) or make use of global variables.
Our callback routine is the \c tick() function. %Function arguments include a pointer to the audio data buffer, the buffer size (in frames), and the data pointer passed to the RtAudio::setStreamCallback() function (if it exists). It is necessary to cast these pointers to their corresponding data types before use. Our tick() routine simply "ticks" the oscillator for \c bufferSize counts and writes the result into the audio data buffer before returning.
The \c main() function blocks at the std::cin.get() call until the user hits the "enter" key, after which the audio controller is shut down and program execution ends.
\section callback Blocking vs. Callbacks
Prior to version 4.2.0, all STK example projects and programs used blocking audio input/output functionality (typically with the RtWvIn, RtWvOut, or RtDuplex classes). In many instances, a blocking scheme results in a clearer and more straight forward program structure. Within a graphical user interface (GUI) programming context, however, callback routines are often more natural.
The RtAudio class provides both blocking and callback routines for all supported audio APIs. It should be noted that it is easy to embed blocking calls within a thread to create "callback-like" functionality. In fact, this is what RtAudio does for those audio APIs which are naturally based on blocking routines (Linux ALSA and OSS, SGI Irix, and Windows DirectSound). It is much more difficult to make an inherently callback-based system work like a blocking scheme. RtAudio attempts to do this with the Linux JACK, Macintosh OS-X CoreAudio, and Windows ASIO APIs, but the result is not fully robust (audio over/underruns are more likely to occur).
In order to allow all STK programs to function with equal proficiency on all supported computer platforms, a decision was made to modify the example projects to use audio callback routines. The result is a more complicated code structure, which is unfortunate given that we generally strive to make STK code as clear as possible for educational purposes. This was especially an issue with the demo program because it is designed to function in both realtime and non-realtime contexts. The use of global variables has been avoided by defining data structures to hold all variables which must be accessible to the callback routine and other functions. Alternative schemes for making control updates could be designed depending on particular program needs and constraints.
[<A HREF="instruments.html">Next tutorial</A>] &nbsp; [<A HREF="tutorial.html">Main tutorial page</A>]
*/

View File

@@ -1,115 +1,194 @@
/*! \page download Download and Release Notes /*! \page download Download and Release Notes
<B>Version 4.0, 30 April 2002</B><P> <B>Version 4.2.0, 4 October 2004</B><P>
<A HREF="Release/stk-4.0.tar.gz">STK Version 4.0: Source distribution</A> (1.64 MB tar/gzipped)<BR> <UL>
<A HREF="Release/stk-4.0.binaries.tar.gz">STK Version 4.0: Source distribution with precompiled windows binaries</A> (2.26 MB tar/gzipped)<BR> <LI><A HREF="http://www-ccrma.stanford.edu/software/stk/release/stk-4.2.0.tar.gz">Source distribution</A></LI>
<P> <LI><A HREF="http://www-ccrma.stanford.edu/software/stk/release/stk-4.2.0.binaries.tar.gz">Source with precompiled Windows binaries</A></LI>
<LI><A HREF="http://www-ccrma.stanford.edu/planetccrma/software/">Linux RPMs from Planet CCRMA</A></LI>
\section notes Release Notes: </UL>
\subsection v4 Version 4.0
\section notes Release Notes:
<UL>
<LI>New documentation and tutorial.</LI> \subsection v4dot2dot0 Version 4.2.0
<LI>Several new instruments, including Saxofony, BlowBotl, and StifKarp.</LI>
<LI>New Stk base class, replacing Object class.</LI> <ul>
<LI>New Filter class structure and methods.</LI> <li>Simultaneous multiple audio APIs supported at compile time.</li>
<LI>Extensive modifications to WvIn and WvOut class structures and methods.</LI> <li>Various changes to better conform to standard C++ programming practices.</li>
<LI>Looping functionality moved to WaveLoop (subclass of WvIn).</LI> <li>Fixed hidden overloaded virtual functions.</li>
<LI>Automatic file type detection in WvIn ... hosed WavWvIn, AifWvIn, RawWavIn, SndWavIn, and MatWvIn subclasses.</LI> <li>New Asymp exponential envelope class.</li>
<LI>New file type specifier argument in WvOut ... hosed WavWvOut, AifWvOut, RawWavOut, SndWavOut, and MatWvOut subclasses.</LI> <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>
<LI>Some simplifications of Messager class (was Controller).</LI> <li>Most example programs rewritten to use an audio callback paradigm (which works better in OS-X).</li>
<LI>New independent RtAudio class.</LI> <li>New StkFrames class for vectorized multichannel data and associated new tick() functions making use of StkFrames.</li>
<LI>Extensive revisions in code and a significant number of API changes.</LI> <li>New RtMidi class with MIDI output capabilities (API changes).</li>
</UL> <li>New MidiFileIn class for reading MIDI files.</li>
<li>Revised Filter classes to use std::vectors for coefficients (API changes).</li>
\subsection v3dot2 Version 3.2 <li>Revised Messager class (API changes).</li>
<li>New abstract parent Effect class for various effects.</li>
<UL> <li>New abstract parent Generator class for various signal sources.</li>
<LI>New input control handling class (Controller)</LI> <li>New abstract parent Function class for tables and various non-linear functions.</li>
<LI>Added AIFF file input/output support.</LI> <li>Skini class completely rewritten (simplified) using the C++ STL (API changes).</li>
<LI>New C++ error handling capabilities.</LI> <li>WvOut classes now clip to -1.0 to +1.0 and report out of range.</li>
<LI>New input/output internet streaming support (StrmWvIn/StrmWvOut).</LI> <li>New Mutex class.</li>
<LI>Added native ALSA support for linux.</LI> <li>Turned Nagle algorithm off by default in Socket class.</li>
<LI>Added optional "device" argument to all "Rt" classes (audio and MIDI) and printout of devices when argument is invalid.</LI> <li>Error reporting standardized in all classes.</li>
<LI>WvIn classes rewritten to support very big files (incremental load from disk).</LI> </ul>
<LI>Changed WvIn/WvOut classes to work with sample frame buffers.</LI>
<LI>Fixed looping and negative rate calculations in WvIn classes.</LI> \subsection v4dot1dot3 Version 4.1.3
<LI>Fixed interpolation bug in RtWvIn.</LI>
<LI>Windoze RtAudio code rewritten (thank Dave!).</LI> <ul>
<LI>Simplified byte-swapping functions (in-place swapping).</LI> <li>Bug fix in RtAudio for Windows DirectSound output only support</li>
<LI>"Stereo-ized" RagaMatic.</LI> </ul>
<LI>Miscellaneous renamings.</LI>
<LI>Probably a bunch more fixes that I've long since forgotten about.</LI> \subsection v4dot1dot2 Version 4.1.2
</UL>
<UL>
\subsection v3dot1 Version 3.1 <li>Added Linux JACK support to RtAudio.</li>
<li>Added optional doNormalize argument to WvIn to allow specification of data normalization or not.</li>
<UL> <li>Added volume control to demo program and various tcl scripts.</li>
<LI>New RagaMatic project ... very cool!!!</LI> <li>Added support for dynamic rawwavePath() setting.</li>
<LI>Less clipping in the Shakers class.</LI> <li>WaveLoop bug fix.</li>
<LI>Added "microphone position" to Mandolin in STKdemo.</LI> <li>Fixed bug in ADSR::setReleaseTime() method.</li>
<LI>Fixed MIDI system message exclusion under Irix.</LI> <li>Fixed missing initialization of apInput in non-default constructor of DelayA class.</li>
<LI>Added a few bitmaps for the Shaker instruments.</LI> <li>Added time seeding of random number generator to Noise constructor.</li>
<LI>Made destructors virtual for Reverb.h, WvIn.h and Simple.h.</LI> <li>Update to the contentsAt() method of Delay class.</li>
<LI>Fixed bug setting delay length in DLineA when value too big.</LI> <li>WAV file fixes (8-bit) in WvIn and WvOut classes.</li>
<LI>Fixed bug in WinMM realtime code (RTSoundIO).</LI> <li>Configure script changes.</li>
<LI>Added tick() method to BowTabl, JetTabl, and ReedTabl (same as lookup).</LI> <li>Updated \<iostream\> include statements and appended "std::" as necessary throughout for compatibility with gcc 3.</li>
<LI>Switched to pthread API on SGI platforms.</LI> </UL>
<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> \subsection v4dot1dot1 Version 4.1.1
</UL> <ul>
<li>Bug fix in RtAudio for Macintosh OS X and Windows ASIO duplex operation.</li>
\subsection v3 Version 3.0 <li>Windows ASIO fix in Stk.h.</li>
<li>Documentation updates.</li>
<UL> <li>Expanded tutorial.</li>
<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> <li>Fixed RtDuplex omission in src Makefile.</li>
<LI>Expanded and cleaned the Shakers class.</LI> </ul>
<LI>New BowedBar algorithm/class.</LI>
<LI>Fixed Linux MIDI input bug.</LI> \subsection v4dot1 Version 4.1
<LI>Fixed MIDI status masking problem in Windows.</LI>
<LI>OS type defines now in Makefile.</LI> <UL>
<LI>New RAWWAVE_PATH define in Object.h.</LI> <LI>Macintosh OS X support added.</LI>
<LI>Syntmono project pulled out to separate directory and cleaned up.</LI> <LI>New Whistle class.</LI>
<LI>Socketing capabilities under Unix, as well as Windoze.</LI> <LI>Added Voicer, SingWave, and VoicForm classes.</LI>
<LI>Multiple simultaneous socket client connections to STK servers now possible.</LI> <LI>Improvements/fixes to the banded waveguide instruments.</LI>
<LI>MD2SKINI now can merge MIDI and piped messages under Irix and Linux (for TCL->MD2SKINI->syntmono control).</LI> <LI>Demo program now uses Voicer, allowing polyphony.</LI>
<LI>Defined INT16 and INT32 types and fixed various WvIn and WvOut classes.</LI> <LI>Demo tcl/tk scripts changed to use SKINI PitchChange instead of PitchBend.</LI>
<LI>Updated MatWvIn and MatWvOut for new MAT-file documentation from Matlab.</LI> <LI>Demo program response to PitchBend modified to octave up/down.</LI>
<LI>New demo Tcl/Tk GUI (TclDemo.tcl).</LI> <LI>Several RtAudio fixes and improvements (OS X and Windows ASIO support added).</LI>
<LI>Minor fixes to FM behavior.</LI> <LI>Added nextOut() method to Delay classes.</LI>
<LI>Added record/duplex capabilities to RTSoundIO (Linux, SGI, and Windoze).</LI> <LI>Documentation fixes for Reverb classes.</LI>
<LI>Fixed bugs in WavWvOut and MatWvOut header specifications.</LI> <LI>RAWWAVE_PATH changed to include the "rawwave" directory.</LI>
<LI>Added RawWvOut class.</LI> <LI>"configure" support added for unix systems.</LI>
<LI>New WvIn class with RawWvIn, SndWvIn, WavWvIn, MatWvIn, and RTWvIn subclasses.</LI> <LI>Multivoice flag (-n NUMBER) added as command line option to demo program.</LI>
<LI>Removed RawWave, RawShot, RawInterp, and RawLoop classes (supplanted by RawWvIn).</LI> <LI>Sample rate flag added as command line option to example programs.</LI>
<LI>Multi-channel data support in WvIn and WvOut classes using MY_MULTI data type (pointer to MY_FLOAT) and the methods mtick() and mlastOutput().</LI> <LI>Socket port number added as command line option to example programs.</LI>
<LI>Now writing to primary buffer under Windoze when allowed by hardware.</LI> </UL>
<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> \subsection v4 Version 4.0
</UL>
<UL>
\subsection v2dot02 Version 2.02 <LI>New documentation and tutorial.</LI>
<LI>Several new instruments, including Saxofony, BlowBotl, and StifKarp.</LI>
<UL> <LI>New Stk base class, replacing Object class.</LI>
<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> <LI>New Filter class structure and methods.</LI>
<LI>Modified DrumSynt to correctly handle sample rates different than 22050 Hz.</LI> <LI>Extensive modifications to WvIn and WvOut class structures and methods.</LI>
<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> <LI>Looping functionality moved to WaveLoop (subclass of WvIn).</LI>
<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> <LI>Automatic file type detection in WvIn ... hosed WavWvIn, AifWvIn, RawWavIn, SndWavIn, and MatWvIn subclasses.</LI>
<LI>Fixed bug in MD2SKINI which prevented some NoteOff statements from being output.</LI> <LI>New file type specifier argument in WvOut ... hosed WavWvOut, AifWvOut, RawWavOut, SndWavOut, and MatWvOut subclasses.</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> <LI>Some simplifications of Messager class (was Controller).</LI>
</UL> <LI>New independent RtAudio class.</LI>
<LI>Extensive revisions in code and a significant number of API changes.</LI>
\subsection v2 Version 2 </UL>
<UL> \subsection v3dot2 Version 3.2
<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>
<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> <UL>
<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> <LI>New input control handling class (Controller)</LI>
<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> <LI>Added AIFF file input/output support.</LI>
<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. <FONT FACE="Geneva">MD2SKINI | syntmono Clarinet -r -i</FONT>). In addition, you can supply a filename argument to MD2SKINI and have it simultaneously record a SKINI score file for future reuse. <LI>New C++ error handling capabilities.</LI>
<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>New input/output internet streaming support (StrmWvIn/StrmWvOut).</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>Added native ALSA support for linux.</LI>
</UL> <LI>Added optional "device" argument to all "Rt" classes (audio and MIDI) and printout of devices when argument is invalid.</LI>
<LI>WvIn classes rewritten to support very big files (incremental load from disk).</LI>
*/ <LI>Changed WvIn/WvOut classes to work with sample frame buffers.</LI>
<LI>Fixed looping and negative rate calculations in WvIn classes.</LI>
<LI>Fixed interpolation bug in RtWvIn.</LI>
<LI>Windoze RtAudio code rewritten (thank Dave!).</LI>
<LI>Simplified byte-swapping functions (in-place swapping).</LI>
<LI>"Stereo-ized" RagaMatic.</LI>
<LI>Miscellaneous renamings.</LI>
<LI>Probably a bunch more fixes that I've long since forgotten about.</LI>
</UL>
\subsection v3dot1 Version 3.1
<UL>
<LI>New RagaMatic project ... very cool!!!</LI>
<LI>Less clipping in the Shakers class.</LI>
<LI>Added "microphone position" to Mandolin in STKdemo.</LI>
<LI>Fixed MIDI system message exclusion under Irix.</LI>
<LI>Added a few bitmaps for the Shaker instruments.</LI>
<LI>Made destructors virtual for Reverb.h, WvIn.h and Simple.h.</LI>
<LI>Fixed bug setting delay length in DLineA when value too big.</LI>
<LI>Fixed bug in WinMM realtime code (RTSoundIO).</LI>
<LI>Added tick() method to BowTabl, JetTabl, and ReedTabl (same as lookup).</LI>
<LI>Switched to pthread API on SGI platforms.</LI>
<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
<UL>
<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>
<LI>Expanded and cleaned the Shakers class.</LI>
<LI>New BowedBar algorithm/class.</LI>
<LI>Fixed Linux MIDI input bug.</LI>
<LI>Fixed MIDI status masking problem in Windows.</LI>
<LI>OS type defines now in Makefile.</LI>
<LI>New RAWWAVE_PATH define in Object.h.</LI>
<LI>Syntmono project pulled out to separate directory and cleaned up.</LI>
<LI>Socketing capabilities under Unix, as well as Windoze.</LI>
<LI>Multiple simultaneous socket client connections to STK servers now possible.</LI>
<LI>MD2SKINI now can merge MIDI and piped messages under Irix and Linux (for TCL->MD2SKINI->syntmono control).</LI>
<LI>Defined INT16 and INT32 types and fixed various WvIn and WvOut classes.</LI>
<LI>Updated MatWvIn and MatWvOut for new MAT-file documentation from Matlab.</LI>
<LI>New demo Tcl/Tk GUI (TclDemo.tcl).</LI>
<LI>Minor fixes to FM behavior.</LI>
<LI>Added record/duplex capabilities to RTSoundIO (Linux, SGI, and Windoze).</LI>
<LI>Fixed bugs in WavWvOut and MatWvOut header specifications.</LI>
<LI>Added RawWvOut class.</LI>
<LI>New WvIn class with RawWvIn, SndWvIn, WavWvIn, MatWvIn, and RTWvIn subclasses.</LI>
<LI>Removed RawWave, RawShot, RawInterp, and RawLoop classes (supplanted by RawWvIn).</LI>
<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>
<LI>Now writing to primary buffer under Windoze when allowed by hardware.</LI>
<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
<UL>
<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>
<LI>Modified DrumSynt to correctly handle sample rates different than 22050 Hz.</LI>
<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>
<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>
<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
<UL>
<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>
<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>
<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>
<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>
<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>
<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>
*/

88
doc/doxygen/filtering.txt Normal file
View File

@@ -0,0 +1,88 @@
/*! \page filtering Using Filters
In this section, we demonstrate the use of a few of the STK filter classes. The Filter class provides functionality to implement a generalized digital filter of any type, similar to the \c filter function in Matlab. In this example, we create a Filter instance and initialize it with specific numerator and denominator coefficients. We then compute its impulse response for 20 samples.
\code
#include "Filter.h"
int main()
{
StkFrames output( 20 ); // initialize StkFrames to 20 elements (defaults: 1 channel, interleaved)
output[0] = 1.0;
std::vector<StkFloat> numerator( 5, 0.1 ); // create and initialize numerator coefficients
std::vector<StkFloat> denominator; // create empty denominator coefficients
denominator.push_back( 1.0 ); // populate our denomintor values
denominator.push_back( 0.3 );
denominator.push_back( -0.5 );
Filter filter( numerator, denominator );
filter.tick( output );
for ( unsigned int i=0; i<output.size(); i++ ) {
std::cout << "i = " << i << " : output = " << output[i] << std::endl;
}
return 0;
}
\endcode
The Filter class implements the standard difference equation
\code
a[0]*y[n] = b[0]*x[n] + ... + b[nb]*x[n-nb] - a[1]*y[n-1] - ... - a[na]*y[n-na],
\endcode
where "b" values are numerator coefficients and "a" values are denominator coefficients. Note that if the first denominator coefficient is not 1.0, the Filter class automatically normalizes all filter coefficients by that value. The coefficient values are passed to the Filter class via a C++ <a href="http://www.roguewave.com/support/docs/sourcepro/stdlibref/vector.html">vector</a>, a container object provided by the C++ Standard Library.
Most STK classes use more specific types of digital filters, such as the OneZero, OnePole, TwoPole, or BiQuad varieties. These classes inherit from the Filter class and provide specific functionality particular to their use, as well as functions to independently control individual coefficient values.
\section reson Resonances:
The STK BiQuad and TwoPole classes provide functionality for creating resonance filters. The following example demonstrates how to create a resonance centered at 440 Hz that is used to filter the output of a Noise generator.
\code
#include "BiQuad.h"
#include "Noise.h"
int main()
{
StkFrames output( 20 ); // initialize StkFrames to 20 elements (defaults: 1 channel, interleaved)
Noise noise;
BiQuad biquad;
biquad.setResonance( 440.0, 0.98, true ); // automatically normalize for unity peak gain
for ( unsigned int i=0; i<output.size(); i++ ) {
output[i] = biquad.tick( noise.tick() ); // single-sample computations
std::cout << "i = " << i << " : output = " << output[i] << std::endl;
}
return 0;
}
\endcode
By passing a boolian value of \c true as the third argument to the BiQuad::setResonance() function, the filter coefficients are automatically scaled to achieve unity gain at the resonance peak frequency. The previous code could be easily modified for "vector-based" calculations:
\code
#include "BiQuad.h"
#include "Noise.h"
int main()
{
StkFrames output( 20 ); // initialize StkFrames to 20 elements (defaults: 1 channel, interleaved)
Noise noise;
BiQuad biquad;
biquad.setResonance( 440.0, 0.98, true ); // automatically normalize for unity peak gain
biquad.tick( noise.tick( output ) ); // vector-based computations
for ( unsigned int i=0; i<output.size(); i++ ) {
std::cout << "i = " << i << " : output = " << output[i] << std::endl;
}
return 0;
}
\endcode
[<A HREF="realtime.html">Next tutorial</A>] &nbsp; [<A HREF="tutorial.html">Main tutorial page</A>]
*/

View File

@@ -1,9 +1,9 @@
<HR> <HR>
<table> <table>
<tr><td><A HREF="http://www-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-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> <tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table> </table>
</BODY> </BODY>
</HTML> </HTML>

View File

@@ -0,0 +1,63 @@
/*! \page fundamentals STK Fundamentals
The Synthesis ToolKit is implemented in the C++ programming language. STK does not attempt to provide a new programming environment or paradigm but rather provides a set of objects which can be used within a normal C++ programming framework. Therefore, it is expected that users of STK will have some familiarity with C/C++ programming concepts. That said, the STK classes do have some particular idiosyncrasies that we will mention here.
\section Signal Computations:
Audio and control signals throughout STK use a floating-point data type, <tt>StkFloat</tt>, the exact precision of which can be controlled via a typedef statement in Stk.h. By default, an StkFloat is a double-precision floating-point value. Thus, the ToolKit can use any normalization scheme desired. The base instruments and algorithms are implemented with a general audio sample dynamic maximum of +/-1.0.
In general, the computation and/or passing of values is performed on a "single-sample" basis. For example, the Noise class outputs random floating-point numbers in the range +/-1.0. The computation of such values occurs in the Noise::tick() function. The following program will generate 20 random floating-point (<tt>StkFloat</tt>) values in the range -1.0 to +1.0:
\code
#include "Noise.h"
int main()
{
StkFloat output;
Noise noise;
for ( unsigned int i=0; i<20; i++ ) {
output = noise.tick();
std::cout << "i = " << i << " : output = " << output << std::endl;
}
return 0;
}
\endcode
Nearly all STK classes implement <TT>tick()</TT> functions which take and/or return sample values. Within the <TT>tick()</TT> function, the fundamental sample calculations are performed for a given class. Most STK classes consume/generate a single sample per operation and their <TT>tick()</TT> method takes/returns each sample "by value". In addition, every class implementing a <TT>tick()</TT> function also provides one or more overloaded <TT>tick()</TT> functions which can be used for vectorized computations, as shown in the next example.
\code
#include "Noise.h"
int main()
{
StkFrames output(20); // initialize StkFrames to 20 elements (defaults: 1 channel, interleaved)
Noise noise;
noise.tick( output );
for ( unsigned int i=0; i<output.size(); i++ ) {
std::cout << "i = " << i << " : output = " << output[i] << std::endl;
}
return 0;
}
\endcode
In this way, it might be possible to achieve improved processing efficiency using vectorized computations. The StkFrames class is a new addition to the ToolKit to provide a general "mechanism" for handling and passing vectorized, multi-channel audio data. The StkFrames "type" provides functions to set and/or determine the number of audio channels and sample frames it holds, as well as the format (interleaved or non-interleaved) of its data.
\section STK Inheritance:
Nearly all STK classes inherit from the Stk abstract base class, which provides common functionality related to error reporting, sample rate control, and byte swapping. Several other base classes exist which roughly group many of the classes according to function as follows:
- Generator: source signal unit generator classes [Envelope, ADSR, Asymp, Noise, SubNoise, Modulate, SingWave]
- Filter: digital filtering classes [OneZero, OnePole, PoleZero, TwoZero, TwoPole, BiQuad, FormSwep, Delay, DelayL, DelayA]
- Function: input to output function mappings [Table, BowTable, JetTable, ReedTable]
- Instrmnt: sound synthesis algorithms, including physical, FM, modal, and particle models
- Effect: sound processing effect classes [Echo, Chorus, PitShift, PRCRev, JCRev, NRev]
- WvOut: audio file and streaming output classes [RtWvOut, TcpWvOut]
- WvIn: audio file and streaming input classes [WaveLoop, RtWvIn, TcpWvIn]
[<A HREF="hello.html">Next tutorial</A>] &nbsp; [<A HREF="tutorial.html">Main tutorial page</A>]
*/

View File

@@ -1,10 +1,10 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>

55
doc/doxygen/hello.txt Normal file
View File

@@ -0,0 +1,55 @@
/*! \page hello Hello Sine!
We'll continue our introduction to the Synthesis ToolKit with a simple sine-wave oscillator program. STK does not provide a specific oscillator for sine waves. Instead, it provides a generic waveform oscillator class, WaveLoop, which can load a variety of common file types. In this example, we load a sine "table" from an STK RAW file (defined as monophonic, 16-bit, big-endian data). We use the class WvOut to write the result to a 16-bit, WAV formatted audio file.
\code
// sineosc.cpp
#include "WaveLoop.h"
#include "WvOut.h"
int main()
{
// Set the global sample rate before creating class instances.
Stk::setSampleRate( 44100.0 );
// Define and load the sine wave file
WaveLoop* input = new WaveLoop( "rawwaves/sinewave.raw", true );
input->setFrequency( 440.0 );
// Define and open a 16-bit, one-channel WAV formatted output file
WvOut* output = new WvOut( "hellosine.wav", 1, WvOut::WVOUT_WAV, Stk::STK_SINT16 );
// Run the oscillator for 40000 samples, writing to the output file
int i;
for ( i=0; i<40000; i++ ) {
output->tick( input->tick() );
}
// Clean up
delete input;
delete output;
return 0;
}
\endcode
WaveLoop is a subclass of WvIn, which supports WAV, SND (AU), AIFF, MAT-file (Matlab), and RAW file formats with 8-, 16-, and 32-bit integer and 32- and 64-bit floating-point data types. WvIn provides interpolating, read once ("oneshot") functionality, as well as methods for setting the read rate and read position.
The WvIn and WvOut classes are complementary, both supporting WAV, SND (AU), AIFF, MAT-file (Matlab), and RAW file formats with 8-, 16-, and 32-bit integer and 32- and 64-bit floating-point data types. However, WvOut does not perform data interpolation.
The WvIn and WvOut classes support multi-channel sample frames. To distinguish single-sample frame operations from multi-channel frame operations, these classes also implement <TT>tickFrame()</TT> functions. When a <TT>tick()</TT> method is called for multi-channel data, frame averages are returned or the input sample is distributed across all channels of a sample frame.
Nearly all STK classes inherit from the Stk base class. Stk provides a static sample rate which is queried by subclasses as needed. Because many classes use the current sample rate value during instantiation, it is important that the desired value be set at the beginning of a program. The default STK sample rate is 44100 Hz.
\section error Error Handling
The ToolKit has some basic C++ error handling functionality built in. Classes which access files and/or hardware are most prone to runtime errors. To properly "catch" such errors, the above example should be rewritten as shown below.
\include sineosc.cpp
In this particular case, we simply exit the program if an error occurs (an error message is automatically printed to stderr). A more refined program might attempt to recover from or fix a particular problem and, if successful, continue processing. See the \ref classes to determine which constructors and functions can throw an error.
[<A HREF="compile.html">Next tutorial</A>] &nbsp; [<A HREF="fundamentals.html">Main tutorial page</A>]
*/

View File

@@ -1,15 +1,26 @@
/*! \mainpage <I>The Synthesis ToolKit in C++ (STK)</I> /*! \mainpage <I>The Synthesis ToolKit in C++ (STK)</I>
<BODY BGCOLOR="white"> <BODY BGCOLOR="white">
The <B>Synthesis ToolKit in C++ (STK)</B> is a set of audio signal processing and synthesis classes and algorithms written in C++. You can use these classes to create programs that make sounds with a variety of synthesis techniques. This is not a terribly novel concept, except that the Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (no libraries, no hidden drivers, and all source code is included). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 8 years now. STK currently runs with "realtime" support (audio and MIDI) on SGI (Irix), Linux, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler. \htmlonly
<h3><center><a href="http://www.cs.princeton.edu/~prc/">Perry R. Cook</a> & <a href="http://music.mcgill.ca/~gary/">Gary P. Scavone</a></center></h3>
- \ref information \endhtmlonly
- \ref classes
- \ref download The <B>Synthesis ToolKit in C++ (STK)</B> is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. The Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (all source included, no unusual libraries, and no hidden drivers). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 10 years now. STK currently runs with "realtime" support (audio and MIDI) on SGI (Irix), Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler.
- \ref usage
- \ref maillist - \ref information
- \ref system - \ref classes
- \ref tutorial - \ref download
- \ref usage
*/ - \ref maillist
- \ref system
- \ref links
- \ref tutorial
*/
<P>
<FONT SIZE=-1>
STK is a registered trademark of Analytical Graphics, Inc., 40 General Warren Blvd., Malvern, PA 19355, the manufacturer of the Satellite Tool Kit<69> (STK<54>) family of satellite simulation software. Although the term "STK" is used in this website, the content of this site is in no way related to Analytical Graphics, Inc, or its registered STK mark. Nothing in this website should be construed to mean that a business relationship, either past or present, exists between Analytical Graphics, Inc. and the owners of this particular website.
</FONT>

View File

@@ -1,50 +1,78 @@
/*! \page information General Information /*! \page information General Information
<H3>References</H3> <H3>References</H3>
<UL> <UL>
<LI><A HREF="Papers/stkicmc99.pdf">ICMC99 Paper</A></LI> <LI><A HREF="Papers/stkicmc99.pdf">ICMC99 Paper</A></LI>
<BR> <BR>
A somewhat recent paper by Perry and Gary about the Synthesis ToolKit in C++. A not-so-recent paper by Perry and Gary about the Synthesis ToolKit in C++.
<P> <P>
<LI><A HREF="Papers/STKsiggraph96.pdf">SIGGRAPH96 Paper</A></LI> <LI><A HREF="Papers/STKsiggraph96.pdf">SIGGRAPH96 Paper</A></LI>
<BR> <BR>
A not-so-recent paper by Perry about the Synthesis ToolKit in C++. A very-not-so-recent paper by Perry about the Synthesis ToolKit in C++.
<P> <P>
<LI><A HREF="http://www.cs.princeton.edu/~prc/NewWork.html#STK">Perry's STK Web Page</A></LI> <LI><A HREF="http://www.cs.princeton.edu/~prc/NewWork.html#STK">Perry's STK Web Page</A></LI>
<BR> <BR>
This is a link to Perry Cook's STK Web page. He has information about the \ref skini, the protocol used to control STK instruments, as well as a lot of other cool stuff. This is a link to Perry Cook's STK Web page. He has information about the \ref skini, the protocol used to control STK instruments, as well as a lot of other cool stuff.
</UL> </UL>
<H4>What is the <I>Synthesis ToolKit</I>?</H4> <H4>What is the <I>Synthesis ToolKit</I>?</H4>
The Synthesis ToolKit in C++ (STK) is a set of audio signal processing and synthesis classes and algorithms written in C++. You can use these classes to create programs that make sounds with a variety of synthesis techniques. This is not a terribly novel concept, except that the Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (no libraries, no hidden drivers, and all source code is included). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 8 years now. STK currently runs with "realtime" support (audio and MIDI) on SGI (Irix), Linux, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler. The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. The Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (all source included, no unusual libraries, and no hidden drivers). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 10 years now. STK currently runs with "realtime" support (audio and MIDI) on SGI (Irix), Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler.
The Synthesis ToolKit is free for non-commercial use. The only parts of the Synthesis ToolKit that are platform-dependent concern real-time audio and MIDI input and output, and that is taken care of with a few special classes. The interface for MIDI input and the simple <A HREF="http://dev.scriptics.com">Tcl/Tk</A> graphical user interfaces (GUIs) provided is the same, so it's easy to experiment in real time using either the GUIs or MIDI. The Synthesis ToolKit can generate simultaneous SND (AU), WAV, AIFF, and MAT-file output soundfile formats (as well as realtime sound output), so you can view your results using one of a large variety of sound/signal analysis tools already available (e.g. <A HREF="http://www-ccrma.stanford.edu/software/snd/">Snd</A>, Cool Edit, Matlab). The Synthesis ToolKit is free for non-commercial use. The only parts of the Synthesis ToolKit that are platform-dependent concern real-time audio and MIDI input and output, and that is taken care of with a few special classes. The interface for MIDI input and the simple <A HREF="http://dev.scriptics.com">Tcl/Tk</A> graphical user interfaces (GUIs) provided is the same, so it's easy to experiment in real time using either the GUIs or MIDI. The Synthesis ToolKit can generate simultaneous SND (AU), WAV, AIFF, and MAT-file output soundfile formats (as well as realtime sound output), so you can view your results using one of a large variety of sound/signal analysis tools already available (e.g. <A HREF="http://www-ccrma.stanford.edu/software/snd/">Snd</A>, Cool Edit, Matlab).
<H4>What the <I>Synthesis ToolKit</I> is not.</H4> <H4>What the <I>Synthesis ToolKit</I> is not.</H4>
The Synthesis Toolkit is not one particular program. Rather, it is a set of C++ classes that you can use to create your own programs. A few example applications are provided to demonstrate some of the ways to use the classes. If you have specific needs, you will probably have to either modify the example programs or write a new program altogether. Further, the example programs don't have a fancy GUI wrapper. If you feel the need to have a "drag and drop" graphical patching GUI, you probably don't want to use the ToolKit. Spending hundreds of hours making platform-dependent graphics code would go against one of the fundamental design goals of the ToolKit - platform independence. The Synthesis Toolkit is not one particular program. Rather, it is a set of C++ classes that you can use to create your own programs. A few example applications are provided to demonstrate some of the ways to use the classes. If you have specific needs, you will probably have to either modify the example programs or write a new program altogether. Further, the example programs don't have a fancy GUI wrapper. It is easy to embed STK classes inside a GUI environment but we have chosen to focus our energy on the audio signal processing issues. Spending hundreds of hours making platform-dependent graphical user interfaces would go against one of the fundamental design goals of the ToolKit - platform independence.
For those instances where a simple GUI with sliders and buttons is helpful, we use <A HREF="http://dev.scriptics.com">Tcl/Tk</A> (which is freely distributed for all the supported ToolKit platforms). A number of Tcl/Tk GUI scripts are distributed with the ToolKit release. For control, the Synthesis Toolkit uses raw MIDI (on supported platforms), and SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like text message synthesis control format). For those instances where a simple GUI with sliders and buttons is helpful, we use <A HREF="http://dev.scriptics.com">Tcl/Tk</A> (which is freely distributed for all the supported ToolKit platforms). A number of Tcl/Tk GUI scripts are distributed with the ToolKit release. For control, the Synthesis Toolkit uses raw MIDI (on supported platforms), and SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like text message synthesis control format).
<H4>A brief history of the <I>Synthesis ToolKit in C++.</I></H4> <H4>A brief history of the <I>Synthesis ToolKit in C++.</I></H4>
Perry Cook began developing a pre-cursor to the Synthesis ToolKit (also called STK) under NeXTStep at the Center for Computer Research in Music and Acoustics (CCRMA) at Stanford University in the early-1990s. With his move to Princeton University in 1996, he ported everything to C++ on SGI hardware, added real-time capabilities, and greatly expanded the synthesis techniques available. With the help of Bill Putnam, Perry also made a port of STK to Windows95. Gary Scavone began using STK extensively in the summer of 1997 and completed a full port of STK to Linux early in 1998. He finished the fully compatable Windows port (using Direct Sound API) in June 1998. Numerous improvements and extensions have been made since then. Perry Cook began developing a pre-cursor to the Synthesis ToolKit (also called STK) under NeXTStep at the Center for Computer Research in Music and Acoustics (CCRMA) at Stanford University in the early-1990s. With his move to Princeton University in 1996, he ported everything to C++ on SGI hardware, added real-time capabilities, and greatly expanded the synthesis techniques available. With the help of Bill Putnam, Perry also made a port of STK to Windows95. Gary Scavone began using STK extensively in the summer of 1997 and completed a full port of STK to Linux early in 1998. He finished the fully compatable Windows port (using Direct Sound API) in June 1998. Numerous improvements and extensions have been made since then.
The Toolkit has been distributed continuously since 1996 via the <A HREF="http://www.music.princeton.edu/psk">Princeton Sound Kitchen</A>, <A HREF="http://www.cs.princeton.edu/~prc">Perry Cook's home page</A> at Princeton, <A HREF="http://www-ccrma.stanford.edu/~gary/">Gary Scavone's home page</A> at Stanford's Center for Computer Research in Music and Acoustics (CCRMA), and the <A HREF="http://www-ccrma.stanford.edu/software/stk">Synthesis ToolKit home page</A>. The ToolKit has been in included in various collections of software. Much of it has also been ported to MAX/MSP on Macintosh computers by Dan Trueman and Luke Dubois of Columbia University, and is distributed as <A HREF="http://music.columbia.edu/PeRColate">PeRColate</A>. Help on real-time sound and MIDI has been provided by Tim Stilson, Bill Putnam, and Gabriel Maldonado. The Toolkit has been distributed continuously since 1996 via the <A HREF="http://www.music.princeton.edu/psk">Princeton Sound Kitchen</A>, <A HREF="http://www.cs.princeton.edu/~prc">Perry Cook's home page</A> at Princeton, <A HREF="http://www-ccrma.stanford.edu/~gary/">Gary Scavone's home page</A> at Stanford's Center for Computer Research in Music and Acoustics (CCRMA), and the <A HREF="http://www-ccrma.stanford.edu/software/stk">Synthesis ToolKit home page</A>. The ToolKit has been included in various collections of software. Much of it has also been ported to Max/MSP on Macintosh computers by Dan trueman and Luke Dubois of Columbia University, and is distributed as <A HREF="http://music.columbia.edu/PeRColate">PeRColate</A>. Help on real-time sound and MIDI has been provided over the years by Tim Stilson, Bill Putnam, and Gabriel Maldonado.
<H4>Legal and Ethical Notes</H4> <H4>Legal and Ethical Notes</H4>
This software was designed and created to be made publicly available for free, primarily for academic purposes, so if you use it, pass it on with this documentation, and for free. If you make a million dollars with it, give us some. If you make compositions with it, put us in the program notes. This software was designed and created to be made publicly available for free, primarily for academic purposes, so if you use it, pass it on with this documentation, and for free. If you make a million dollars with it, give us some. If you make compositions with it, put us in the program notes.
<P> <P>
Some of the concepts are covered by various patents, some known to us and likely others which are unknown. Many of the ones known to us are administered by the Stanford Office of Technology and Licensing. The good news is that large hunks of the techniques used here are public domain. To avoid subtle legal issues, we will not state what's freely useable here, but we will try to note within the various classes where certain things are likely to be protected by patents. Some of the concepts are covered by various patents, some known to us and likely others which are unknown. Many of the ones known to us are administered by the Stanford Office of Technology and Licensing. The good news is that large hunks of the techniques used here are public domain. To avoid subtle legal issues, we will not state what's freely useable here, but we will try to note within the various classes where certain things are likely to be protected by patents.
<H4>Disclaimer</H4> <H4>Disclaimer</H4>
STK is free and we do not guarantee anything. We've been hacking on this code for a while now and most of it seems to work pretty well. But, there surely are some bugs floating around. Sometimes things work fine on one computer platform but not so fine on another. FPU overflows and underflows cause <I>very</I> weird behavior which also depends on the particular CPU and OS. Let us know about bugs you find and we'll do our best to correct them. STK is free and we do not guarantee anything. We've been hacking on this code for a while now and most of it seems to work pretty well. But, there surely are some bugs floating around. Sometimes things work fine on one computer platform but not so fine on another. FPU overflows and underflows cause <I>very</I> weird behavior which also depends on the particular CPU and OS. Let us know about bugs you find and we'll do our best to correct them.
*/ <H4>Perry's Notes From the Original Distribution of STK</H4>
This whole world was created with no particular hardware in mind. These examples are intended to be tutorial in nature, as a platform for the continuation of my research, and as a possible starting point for a software synthesis system. The basic motivation was to create the necessary unit generators to do the synthesis, processing, and control that I want to do and teach about. Little thought for optimization was given and therefore improvements, especially speed enhancements, should be possible with these classes. It was written with some basic concepts in mind about how to let compilers optimize.
Your question at this point might be, "But Perry, with CMix, CMusic, CSound, CShells, CMonkeys, etc. already cluttering the landscape, why a new set of stupid C functions for music synthesis and processing?" The answers lie below.
<ol>
<li>I needed to port many of the things I've done into something which is generic enough to port further to different machines.</li>
<li>I really plan to document this stuff, so that you don't have to be me to figure out what's going on. (I'll probably be sorry I said this in a couple of years, when even I can't figure out what I was thinking.)</li>
<li>The classic difficulties most people have in trying to implement physical models are:
<ul>
<li>They have trouble understanding the papers, and/or in turning the theory into practice.</li>
<li>The physical model instruments are a pain to get to oscillate, and coming up with stable and meaningful parameter values is required to get the models to work at all.</li>
</ul>
This set of C++ unit generators and instruments might help to diminish the scores of emails I get asking what to do with those block diagrams I put in my papers.</li>
<li>I wanted to try some new stuff with modal synthesis, and implement some classic FM patches as well.</li>
<li>I wanted to reimplement, and newly implement more of the intelligent and physical performer models I've talked about in some of my papers. But I wanted to do it in a portable way, and in such a way that I can hook up modules quickly. I also wanted to make these instruments connectable to such player objects, so folks like Brad Garton who really think a lot about the players can connect them to my instruments, a lot about which I think.</li>
<li>More rationalizations to follow ...</li>
</ol>
*/

View File

@@ -0,0 +1,15 @@
/*! \page instruments Instruments
The ToolKit comes with a wide variety of synthesis algorithms, all of which inherit from the Instrmnt class. In this example, we'll fire up an instance of the BeeThree FM synthesis class and show how its frequency can be modified over time.
\include bethree.cpp
We have used an Instrmnt pointer when referencing the BeeThree instance above, so it would be simple to replace the BeeThree class with any other STK instrument class. It should be noted, however, that a few classes do not respond to the setFrequency() function (e.g., Shakers, Drummer).
The noteOn() function initiates an instrument attack. Instruments which are continuously excited (e.g., Clarinet, BeeThree) will continue to sound until stopped with a noteOff(). Impulsively excited instrument sounds (e.g., Plucked, Wurley) typically decay within a few seconds time, requiring subsequent noteOn() messages for re-attack.
Instrument parameters can be precisely controlled as demonstrated above. A more flexible approach to instrument control, allowing arbitrary scorefile or realtime updates, is described in the next tutorial chapter.
[<A HREF="controlin.html">Next tutorial</A>] &nbsp; [<A HREF="tutorial.html">Main tutorial page</A>]
*/

25
doc/doxygen/links.txt Normal file
View File

@@ -0,0 +1,25 @@
/*! \page links Miscellaneous Links
- <A HREF="http://music.mcgill.ca/~gary/rtaudio/">The %RtAudio WWW site</A>
- <A HREF="http://music.mcgill.ca/~gary/rtmidi/">The %RtMidi WWW site</A>
- <A HREF="http://chuck.cs.princeton.edu/">ChucK: Concurrent, On-the-fly Audio Programming Language</A> using STK unit generators
- <A HREF="http://www.music.princeton.edu/paul/stkugens.tar.gz">Paul Lansky's port of STK to SuperCollider</A>
- <A HREF="http://kern.humdrum.net/">Kern Scores: A Library of Electronic Musical Scores</A> (with automatic conversion to SKINI format)
- <A HREF="http://stk.sapp.org/midi2skini">MIDI to SKINI file converter</A> by Craig Sapp
- <A HREF="http://stk.sapp.org/kern2skini">Kern Score to SKINI file converter</A> by Craig Sapp
- <A HREF="http://www.artassault.org/software/software.html">Calico - A Polyphonic Score File Parser for STK</A> by Greg Kellum
- <A HREF="http://www.music.columbia.edu/PeRColate/">PeRColate: A Port of STK for Max/MSP</A>
- <A HREF="http://mathmorphs.swiki.net/32/">A Partial Port of STK to Squeak</A>
- <a href="http://airy.andre.online.fr/AU/index.html">AUStk: a demo of integration of STK instruments into an AudioUnit</a> by Airy Andre
*/

View File

@@ -1,12 +1,14 @@
/*! \page maillist The Mail List /*! \page maillist The Mail List
An <A HREF="mailto:stk-request@ccrma.stanford.edu">STK</A> mailing list has been set up to facilitate communication among STK users. Subscribing to this list is your best way of keeping on top of new releases, bug fixes, and various user developments. An <A HREF="mailto:stk-request@ccrma.stanford.edu">STK</A> mailing list has been set up to facilitate communication among STK users. Subscribing to this list is your best way of keeping on top of new releases, bug fixes, and various user developments.
<P> <P>
To join send a message to <A HREF="mailto:stk-request@ccrma.stanford.edu">&lt;stk-request@ccrma.stanford.edu&gt;</A> For answers to frequently asked questions, check the list <A HREF="http://ccrma-mail.stanford.edu/pipermail/stk/">archives</A>.
with the contents: <TT>subscribe</TT> <P>
To join send a message to <A HREF="mailto:stk-request@ccrma.stanford.edu">&lt;stk-request@ccrma.stanford.edu&gt;</A>
<P> with the contents: <TT>subscribe</TT>
To be removed from the list send a message to <A HREF="mailto:stk-request@ccrma.stanford.edu">&lt;stk-request@ccrma.stanford.edu&gt;</A>
with the contents: <TT>unsubscribe</TT> <P>
To be removed from the list send a message to <A HREF="mailto:stk-request@ccrma.stanford.edu">&lt;stk-request@ccrma.stanford.edu&gt;</A>
with the contents: <TT>unsubscribe</TT>
*/ */

View File

@@ -0,0 +1,14 @@
/*! \page multichannel Multi-Channel I/O
The ToolKit WvIn and WvOut classes (and their subclasses) support multi-channel audio data input and output. A set of interleaved audio samples representing a single time "slice" is referred to as a <I>sample frame</I>. At a sample rate of 44.1 kHz, a four-channel audio stream will have 44100 sample frames per second and a total of 176400 individual samples per second.
Most STK classes process single-sample data streams via their <TT>tick()</TT> function. In order to distinguish single-sample and sample frame calculations, the WvIn and WvOut classes implement both <TT>tick()</TT> and <TT>tickFrame()</TT> functions. The <TT>tickFrame()</TT> functions take or return a pointer to an array of audio data representing one or more sample frames. For single-channel streams, the <TT>tick()</TT> and <TT>tickFrame()</TT> functions produce equivalent results. When <TT>tick()</TT> is called for a multi-channel stream, however, the function either returns a sample frame average (WvIn) or writes a single sample argument to all channels (WvOut).
Multi-channel support for realtime audio input and output is dependent on the audio device(s) available on your system.
The following example demonstrates the use of the WvOut class for creating a four channel, 16-bit AIFF formatted audio file. We will use four sinewaves of different frequencies for the first two seconds and then a single sinewave for the last two seconds.
\include foursine.cpp
[<A HREF="polyvoices.html">Next tutorial</A>] &nbsp; [<A HREF="tutorial.html">Main tutorial page</A>]
*/

View File

@@ -0,0 +1,22 @@
/*! \page polyvoices Voice Management
The previous tutorial chapters were concerned only with monophonic ToolKit instrument playback and control. At this point, it should be relatively clear that one can instantiate multiple instruments and perhaps sum together their outputs or even direct their outputs to separate channels. It is less clear how one might go about controlling a group of instruments. The Voicer class is designed to serve just this purpose.
The STK Voicer class is a relatively simple voice manager. The user can dynamically add and delete instruments to/from its "control", with the option of controlling specific instruments via unique note tags and/or grouping sets of instruments via a "channel" number. All sounding instrument outputs are summed and returned via the <TT>tick()</TT> function. The Voicer class responds to noteOn, noteOff, setFrequency, pitchBend, and controlChange messages, automatically assigning incoming messages to the voices in its control. When all voices are sounding and a new noteOn is encountered, the Voicer interrupts the oldest sounding voice. The user is responsible for creating and deleting all instrument instances.
In the following example, we modify the <TT>controlbee.cpp</TT> program to make use of three BeeThree instruments, all controlled using a Voicer.
\include threebees.cpp
We have written this program to accept control messages from \c STDIN. Assuming the program is compiled as <TT>threebees</TT>, the three-voice SKINI scorefile <A HREF="tutorial/bachfugue.ski"><TT>bachfugue.ski</TT></A> (located in the <tt>scores</tt> directory with the examples) can be redirected to the program as:
\code
threebees < scores/bachfugue.ski
\endcode
For more fun, surf to <A HREF="http://kern.humdrum.net/">Kern Scores</A> for a huge assortment of other scorefiles which can be downloaded in the SKINI format.
Another easy extension would be to add the \c Messager::startMidiInput() function to the program and then play the instruments via a MIDI keyboard.
[<A HREF="tutorial.html">Main tutorial page</A>]
*/

28
doc/doxygen/realtime.txt Normal file
View File

@@ -0,0 +1,28 @@
/*! \page realtime Realtime Audio (blocking)
In this section, we modify the <TT>sineosc.cpp</TT> program in order to send the output to the default audio playback device on your computer system.
\include rtsine.cpp
The class RtWvOut is a protected subclass of WvOut. A number of optional constructor arguments can be used to fine tune its performance for a given system. RtWvOut provides a "single-sample" interface to the RtAudio class. Note that RtWvOut (as well as the RtWvIn and RtDuplex classes described below) make use of RtAudio's blocking input/output functionality. On systems which implement an inherently callback-based audio API, this blocking functionality will be less robust. An example of audio output using a callback scheme will be discussed in a subsequent tutorial section.
Though not used here, an RtWvIn class exists as well which can be used to read realtime audio data from an input device. See the <TT>record.cpp</TT> example program in the <TT>examples</TT> project for more information.
It may be possible to use an instance of RtWvOut and an instance of RtWvIn to simultaneously read and write realtime audio to and from a hardware device or devices. However, it is recommended to instead use a single instance of RtDuplex to achieve this behavior, in that it guarantees better synchronization between the input and output data. See the <TT>effects</TT> project or the <TT>io.cpp</TT> example program in the <TT>examples</TT> project for more information.
When using any realtime STK class (RtAudio, RtWvOut, RtWvIn, RtDuplex, RtMidi, TcpWvIn, TcpWvOut, Socket, and Thread), it is necessary to specify an audio/MIDI API preprocessor definition and link with the appropriate libraries or frameworks. For example, the above program could be compiled on a Linux system using the GNU g++ compiler and the ALSA audio API as follows (assuming all necessary files exist in the project directory):
\code
g++ -Wall -D__LINUX_ALSA__ -D__LITTLE_ENDIAN__ -o rtsine Stk.cpp WvIn.cpp WaveLoop.cpp WvOut.cpp \
RtWvOut.cpp RtAudio.cpp rtsine.cpp -lpthread -lasound
\endcode
On a Macintosh OS X system, the syntax would be:
\code
g++ -Wall -D__MACOSX_CORE__ -o rtsine Stk.cpp WvIn.cpp WaveLoop.cpp WvOut.cpp RtWvOut.cpp RtAudio.cpp \
rtsine.cpp -lpthread -framework CoreAudio -framework CoreMIDI -framework CoreFoundation
\endcode
[<A HREF="crealtime.html">Next tutorial</A>] &nbsp; [<A HREF="tutorial.html">Main tutorial page</A>]
*/

View File

@@ -1,218 +1,216 @@
/*! \page skini Synthesis toolKit Instrument Network Interface (SKINI) /*! \page skini Synthesis toolKit Instrument Network Interface (SKINI)
This describes the latest (version 1.1) implementation of SKINI for the Synthesis Toolkit in C++ (STK) by Perry R. Cook. This describes the latest (version 1.1) implementation of SKINI for the Synthesis ToolKit in C++ (STK) by Perry R. Cook.
\code \code
Too good to be true? Too good to be true?
Have control and read it too? Have control and read it too?
A SKINI haiku. A SKINI haiku.
\endcode \endcode
Profound thanks to Dan Trueman, Brad Garton, and Gary Scavone for input on this revision. Thanks also to MIDI, the NeXT MusicKit, ZIPI and all the creators and modifiers of these for good bases upon/from which to build and depart. Profound thanks to Dan trueman, Brad Garton, and Gary Scavone for input on this revision. Thanks also to MIDI, the NeXT MusicKit, ZIPI and all the creators and modifiers of these for good bases upon/from which to build and depart.
\section compatibility MIDI Compatibility \section compatibility MIDI Compatibility
SKINI was designed to be MIDI compatible wherever possible, and extend MIDI in incremental, then maybe profound ways. SKINI was designed to be MIDI compatible wherever possible, and extend MIDI in incremental, then maybe profound ways.
Differences from MIDI, and motivations, include: Differences from MIDI, and motivations, include:
- Text-based messages are used, with meaningful names wherever possible. This allows any language or system capable of formatted printing to generate SKINI. Similarly, any system capable of reading in a string and turning delimited fields into strings, floats, and ints can consume SKINI for control. More importantly, humans can actually read, and even write if they want, SKINI files and streams. Use an editor and search/replace or macros to change a channel or control number. Load a SKINI score into a spread sheet to apply transformations to time, control parameters, MIDI velocities, etc. Put a monkey on a special typewriter and get your next great work. Life's too short to debug bit/nybble packed variable length mumble messages. Disk space gets cheaper, available bandwidth increases, music takes up so little space and bandwidth compared to video and grapics. Live a little. - Text-based messages are used, with meaningful names wherever possible. This allows any language or system capable of formatted printing to generate SKINI. Similarly, any system capable of reading in a string and turning delimited fields into strings, floats, and ints can consume SKINI for control. More importantly, humans can actually read, and even write if they want, SKINI files and streams. Use an editor and search/replace or macros to change a channel or control number. Load a SKINI score into a spread sheet to apply transformations to time, control parameters, MIDI velocities, etc. Put a monkey on a special typewriter and get your next great work. Life's too short to debug bit/nybble packed variable length mumble messages. Disk space gets cheaper, available bandwidth increases, music takes up so little space and bandwidth compared to video and graphics. Live a little.
- Floating point numbers are used wherever possible. Note Numbers, Velocities, Controller Values, and Delta and Absolute Times are all represented and scanned as ASCII double-precision floats. MIDI byte values are preserved, so that incoming MIDI bytes from an interface can be put directly into SKINI messages. 60.0 or 60 is middle C, 127.0 or 127 is maximum velocity etc. But, unlike MIDI, 60.5 can cause a 50cent sharp middle C to be played. As with MIDI byte values like velocity, use of the integer and SKINI-added fractional parts is up to the implementor of the algorithm being controlled by SKINI messages. But the extra precision is there to be used or ignored. - Floating point numbers are used wherever possible. Note Numbers, Velocities, Controller Values, and Delta and Absolute Times are all represented and scanned as ASCII double-precision floats. MIDI byte values are preserved, so that incoming MIDI bytes from an interface can be put directly into SKINI messages. 60.0 or 60 is middle C, 127.0 or 127 is maximum velocity etc. But, unlike MIDI, 60.5 can cause a 50 cent sharp middle C to be played. As with MIDI byte values like velocity, use of the integer and SKINI-added fractional parts is up to the implementor of the algorithm being controlled by SKINI messages. But the extra precision is there to be used or ignored.
\section why Why SKINI? \section why Why SKINI?
SKINI was designed to be extensable and hackable for a number of applications: imbedded synthesis in a game or VR simulation, scoring and mixing tasks, real-time and non-real time applications which could benefit from controllable sound synthesis, JAVA controlled synthesis, or eventually maybe JAVA synthesis, etc. SKINI is not intended to be "the mother of scorefiles," but since the entire system is based on text representations of names, floats, and ints, converters from one scorefile language to SKINI, or back, should be easily created. SKINI was designed to be extensable and hackable for a number of applications: imbedded synthesis in a game or VR simulation, scoring and mixing tasks, real-time and non-real time applications which could benefit from controllable sound synthesis, JAVA controlled synthesis, or eventually maybe JAVA synthesis, etc. SKINI is not intended to be "the mother of scorefiles," but since the entire system is based on text representations of names, floats, and ints, converters from one scorefile language to SKINI, or back, should be easily created.
I am basically a bottom-up designer with an awareness of top-down design ideas, so SKINI above all reflects the needs of my particular research and creative projects as they have arisen and developed. SKINI 1.1 represents a profound advance beyond versions 0.8 and 0.9 (the first versions), future SKINI's might reflect some changes. Compatibility with prior scorefiles will be attempted, but there aren't that many scorefiles out there yet. I am basically a bottom-up designer with an awareness of top-down design ideas, so SKINI above all reflects the needs of my particular research and creative projects as they have arisen and developed. SKINI 1.1 represents a profound advance beyond versions 0.8 and 0.9 (the first versions), future SKINI's might reflect some changes. Compatibility with prior scorefiles will be attempted, but there aren't that many scorefiles out there yet.
\section messages SKINI Messages \section messages SKINI Messages
A basic SKINI message is a line of text. There are only three required fields, the message type (an ASCII name), the time (either delta or absolute), and the channel number. Don't freak out and think that this is MIDI channel 0-15 (which is supported), because the channel number is scanned as a long int. Channels could be socket numbers, machine IDs, serial numbers, or even unique tags for each event in a synthesis. Other fields might be used, as specified in the SKINI.tbl file. This is described in more detail later. A basic SKINI message is a line of text. There are only three required fields, the message type (an ASCII name), the time (either delta or absolute), and the channel number. Don't freak out and think that this is MIDI channel 0-15 (which is supported), because the channel number is scanned as a long int. Channels could be socket numbers, machine IDs, serial numbers, or even unique tags for each event in a synthesis. Other fields might be used, as specified in the SKINI.tbl file. This is described in more detail later.
Fields in a SKINI line are delimited by spaces, commas, or tabs. The SKINI parser only operates on a line at a time, so a newline means the message is over. Multiple messages are NOT allowed directly on a single line (by use of the ; for example in C). This could be supported, but it isn't in version 1.1. Fields in a SKINI line are delimited by spaces, commas, or tabs. The SKINI parser only operates on a line at a time, so a newline means the message is over. Multiple messages are NOT allowed directly on a single line (by use of the ; for example in C). This could be supported, but it isn't in version 1.1.
Message types include standard MIDI types like NoteOn, NoteOff, ControlChange, etc. MIDI extension message types (messages which look better than MIDI but actually get turned into MIDI-like messages) include LipTension, StringDamping, etc. Non-MIDI message types include SetPath (sets a path for file use later), and OpenReadFile (for streaming, mixing, and applying effects to soundfiles along with synthesis, for example). Other non-MIDI message types include Trilling, HammerOn, etc. (these translate to gestures, behaviors, and contexts for use by intellegent players and instruments using SKINI). Where possible I will still use these as MIDI extension messages, so foot switches, etc. can be used to control them in real time. Message types include standard MIDI types like NoteOn, NoteOff, ControlChange, etc. MIDI extension message types (messages which look better than MIDI but actually get turned into MIDI-like messages) include LipTension, StringDamping, etc. Non-MIDI message types include SetPath (sets a path for file use later), and OpenReadFile (for streaming, mixing, and applying effects to soundfiles along with synthesis, for example). Other non-MIDI message types include Trilling, HammerOn, etc. (these translate to gestures, behaviors, and contexts for use by intellegent players and instruments using SKINI). Where possible I will still use these as MIDI extension messages, so foot switches, etc. can be used to control them in real time.
All fields other than type, time, and channel are optional, and the types and useage of the additional fields is defined in the file SKINI.tbl. All fields other than type, time, and channel are optional, and the types and useage of the additional fields is defined in the file SKINI.tbl.
The other important file used by SKINI is SKINI.msg, which is a set of #defines to make C code more readable, and to allow reasonably quick re-mapping of control numbers, etc.. All of these defined symbols are assigned integer values. For Java, the #defines could be replaced by declaration and assignment statements, preserving the look and behavior of the rest of the code. The other important file used by SKINI is SKINI.msg, which is a set of #defines to make C code more readable, and to allow reasonably quick re-mapping of control numbers, etc.. All of these defined symbols are assigned integer values. For Java, the #defines could be replaced by declaration and assignment statements, preserving the look and behavior of the rest of the code.
\section cfiles C Files Used To Implement SKINI \section cfiles Files Used To Implement SKINI
SKINI.cpp is an object which can either open a SKINI file, and successively read and parse lines of text as SKINI strings, or accept strings from another object and parse them. The latter functionality would be used by a socket, pipe, or other connection receiving SKINI messages a line at a time, usually in real time, but not restricted to real time. Skini.cpp is a C++ object which can either open a SKINI file and successively read and parse lines of text as SKINI strings, or accept strings from another object and parse them. The latter functionality would be used by a socket, pipe, or other connection receiving SKINI messages a line at a time, usually in real time, but not restricted to real time.
SKINI.msg should be included by anything wanting to use the 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 clarity and consistency when messages are added and changed. SKINI.msg should be included by anything wanting to use the 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 clarity and consistency when messages are added and changed.
SKINI.tbl is used only by the SKINI parser object (SKINI.cpp). In the file SKINI.tbl, an array of structures is declared and assigned values which instruct the parser as to what the message types are, and what the fields mean for those message types. This table is compiled and linked into applications using SKINI, but could be dynamically loaded and changed in a future version of SKINI. SKINI.tbl is used only by the SKINI parser object (Skini.cpp). In the file SKINI.tbl, an array of structures is declared and assigned values which instruct the parser as to what the message types are, and what the fields mean for those message types. This table is compiled and linked into applications using SKINI, but could be dynamically loaded and changed in a future version of SKINI.
\section parser SKINI Messages and the SKINI Parser: \section parser SKINI Messages and the SKINI Parser:
The parser isn't all that smart, but neither am I. Here are the basic rules governing a valid SKINI message: The parser isn't all that smart, but neither am I. Here are the basic rules governing a valid SKINI message:
- If the first (non-delimiter ... see below) character in a SKINI string is '/' that line is treated as a comment and echoed to stdout. - If the first (non-delimiter ... see below) character in a SKINI string is '/' that line is treated as a comment and echoed to stdout.
- If there are no characters on a line, that line is treated as blank and echoed to stdout. Tabs and spaces are treated as non-characters. - If there are no characters on a line, that line is treated as blank and echoed to stdout. Tabs and spaces are treated as non-characters.
- Spaces, commas, and tabs delimit the fields in a SKINI message line. (We might allow for multiple messages per line later using the semicolon, but probably not. A series of lines with deltaTimes of 0.0 denotes simultaneous events. For read-ability, multiple messages per line doesn't help much, so it's unlikely to be supported later). - Spaces, commas, and tabs delimit the fields in a SKINI message line. (We might allow for multiple messages per line later using the semicolon, but probably not. A series of lines with deltaTimes of 0.0 denotes simultaneous events. For read-ability, multiple messages per line doesn't help much, so it's unlikely to be supported later).
- The first field must be a SKINI message name (like NoteOn). These might become case-insensitive in future versions, so don't plan on exciting clever overloading of names (like noTeOn being different from NoTeON). There can be a number of leading spaces or tabs, but don't exceed 32 or so. - The first field must be a SKINI message name (like NoteOn). These might become case-insensitive in future versions, so don't plan on exciting clever overloading of names (like noTeOn being different from NoTeON). There can be a number of leading spaces or tabs, but don't exceed 32 or so.
- The second field must be a time specification in seconds. A time field can be either delta-time (most common and the only one supported in version 0.8), or absolute time. Absolute time messages have an '=' appended to the beginning of the floating point number with no space. So 0.10000 means delta time of 100 ms, while =0.10000 means absolute time of 100 ms. Absolute time messages make most sense in score files, but could also be used for (loose) synchronization in a real-time context. Real-time messages should be time-ordered AND time-correct. That is, if you've sent 100 total delta-time messages of 1.0 seconds, and then send an absolute time message of =90.0 seconds, or if you send two absolute time messages of =100.0 and =90.0 in that order, things will get really fouled up. The SKINI parser doesn't know about time, however. The WvOut device is the master time keeper in the Synthesis Toolkit, so it should be queried to see if absolute time messages are making sense. There's an example of how to do that later in this document. Absolute times are returned by the parser as negative numbers (since negative deltaTimes are not allowed). - The second field must be a time specification in seconds. A time field can be either delta-time (most common and the only one supported in version 0.8), or absolute time. Absolute time messages have an '=' appended to the beginning of the floating point number with no space. So 0.10000 means delta time of 100 ms, while =0.10000 means absolute time of 100 ms. Absolute time messages make most sense in score files, but could also be used for (loose) synchronization in a real-time context. Real-time messages should be time-ordered AND time-correct. That is, if you've sent 100 total delta-time messages of 1.0 seconds, and then send an absolute time message of =90.0 seconds, or if you send two absolute time messages of =100.0 and =90.0 in that order, things will get really fouled up. The SKINI parser doesn't know about time, however. The WvOut device is the master time keeper in the Synthesis Toolkit, so it should be queried to see if absolute time messages are making sense. There's an example of how to do that later in this document. Absolute times are returned by the parser as negative numbers (since negative deltaTimes are not allowed).
- The third field must be an integer channel number. Don't go crazy and think that this is just MIDI channel 0-15 (which is supported). The channel number is scanned as a long int. Channels 0-15 are in general to be treated as MIDI channels. After that it's wide open. Channels could be socket numbers, machine IDs, serial numbers, or even unique tags for each event in a synthesis. A -1 channel can be used as don't care, omni, or other functions depending on your needs and taste. - The third field must be an integer channel number. Don't go crazy and think that this is just MIDI channel 0-15 (which is supported). The channel number is scanned as a long int. Channels 0-15 are in general to be treated as MIDI channels. After that it's wide open. Channels could be socket numbers, machine IDs, serial numbers, or even unique tags for each event in a synthesis. A -1 channel can be used as don't care, omni, or other functions depending on your needs and taste.
- All remaining fields are specified in the SKINI.tbl file. In general, there are maximum two more fields, which are either SK_INT (long), SK_DBL (double float), or SK_STR (string). The latter is the mechanism by which more arguments can be specified on the line, but the object using SKINI must take that string apart (retrived by using getRemainderString()) and scan it. Any excess fields are stashed in remainderString. - All remaining fields are specified in the SKINI.tbl file. In general, there are maximum two more fields, which are either SK_INT (long), SK_DBL (double float), or SK_STR (string). The latter is the mechanism by which more arguments can be specified on the line, but the object using SKINI must take that string apart (retrived by using getRemainderString()) and scan it. Any excess fields are stashed in remainderString.
\section file A Short SKINI File: \section file A Short SKINI File:
\code \code
/* Howdy!!! Welcome to SKINI, by P. Cook 1999 /* Howdy!!! Welcome to SKINI, by P. Cook 1999
NoteOn 0.000082 2 55 82 NoteOn 0.000082 2 55 82
NoteOff 1.000000 2 55 0 NoteOff 1.000000 2 55 0
NoteOn 0.000082 2 69 82 NoteOn 0.000082 2 69 82
StringDetune 0.100000 2 10 StringDetune 0.100000 2 10
StringDetune 0.100000 2 30 StringDetune 0.100000 2 30
StringDetune 0.100000 2 50 StringDetune 0.100000 2 50
NoteOn 0.000000 2 69 82 NoteOn 0.000000 2 69 82
StringDetune 0.100000 2 40 StringDetune 0.100000 2 40
StringDetune 0.100000 2 22 StringDetune 0.100000 2 22
StringDetune 0.100000 2 12 StringDetune 0.100000 2 12
// //
StringDamping 0.000100 2 0.0 StringDamping 0.000100 2 0.0
NoteOn 0.000082 2 55 82 NoteOn 0.000082 2 55 82
NoteOn 0.200000 2 62 82 NoteOn 0.200000 2 62 82
NoteOn 0.100000 2 71 82 NoteOn 0.100000 2 71 82
NoteOn 0.200000 2 79 82 NoteOn 0.200000 2 79 82
NoteOff 1.000000 2 55 82 NoteOff 1.000000 2 55 82
NoteOff 0.000000 2 62 82 NoteOff 0.000000 2 62 82
NoteOff 0.000000 2 71 82 NoteOff 0.000000 2 71 82
NoteOff 0.000000 2 79 82 NoteOff 0.000000 2 79 82
StringDamping =4.000000 2 0.0 StringDamping =4.000000 2 0.0
NoteOn 0.000082 2 55 82 NoteOn 0.000082 2 55 82
NoteOn 0.200000 2 62 82 NoteOn 0.200000 2 62 82
NoteOn 0.100000 2 71 82 NoteOn 0.100000 2 71 82
NoteOn 0.200000 2 79 82 NoteOn 0.200000 2 79 82
NoteOff 1.000000 2 55 82 NoteOff 1.000000 2 55 82
NoteOff 0.000000 2 62 82 NoteOff 0.000000 2 62 82
NoteOff 0.000000 2 71 82 NoteOff 0.000000 2 71 82
NoteOff 0.000000 2 79 82 NoteOff 0.000000 2 79 82
\endcode \endcode
\section table The SKINI.tbl File and Message Parsing: \section table The SKINI.tbl File and Message Parsing:
The SKINI.tbl file contains an array of structures which are accessed by the parser object SKINI.cpp. The struct is: The SKINI.tbl file contains an array of structures which are accessed by the parser object Skini.cpp. The struct is:
\code \code
struct SKINISpec { struct SKINISpec {
char messageString[32]; char messageString[32];
long type; long type;
long data2; long data2;
long data3; long data3;
}; };
\endcode \endcode
so an assignment of one of these structs looks like: so an assignment of one of these structs looks like:
\code \code
MessageStr$ ,type, data2, data3, MessageStr$ ,type, data2, data3,
\endcode \endcode
<TT>type</TT> is the message type sent back from the SKINI line parser. <TT>type</TT> is the message type sent back from the SKINI line parser.
<TT>data<n></TT> is either: <TT>data<n></TT> is either:
- NOPE : field not used, specifically, there aren't going to be any more fields on this line. So if there is is NOPE in data2, data3 won't even be checked. - NOPE : field not used, specifically, there aren't going to be any more fields on this line. So if there is is NOPE in data2, data3 won't even be checked.
- SK_INT : byte (actually scanned as 32 bit signed long int). If it's a MIDI data field which is required to be an integer, like a controller number, it's 0-127. Otherwise, get creative with SK_INTs. - SK_INT : byte (actually scanned as 32 bit signed long int). If it's a MIDI data field which is required to be an integer, like a controller number, it's 0-127. Otherwise, get creative with SK_INTs.
- SK_DBL : double precision floating point. SKINI uses these in the MIDI context for note numbers with micro tuning, velocities, controller values, etc. - SK_DBL : double precision floating point. SKINI uses these in the MIDI context for note numbers with micro tuning, velocities, controller values, etc.
- SK_STR : only valid in final field. This allows (nearly) arbitrary message types to be supported by simply scanning the string to EndOfLine and then passing it to a more intellegent handler. For example, MIDI SYSEX (system exclusive) messages of up to 256 bytes can be read as space-delimited integers into the 1K SK_STR buffer. Longer bulk dumps, soundfiles, etc. should be handled as a new message type pointing to a FileName, Socket, or something else stored in the SK_STR field, or as a new type of multi-line message. - SK_STR : only valid in final field. This allows (nearly) arbitrary message types to be supported by simply scanning the string to EndOfLine and then passing it to a more intellegent handler. For example, MIDI SYSEX (system exclusive) messages of up to 256 bytes can be read as space-delimited integers into the 1K SK_STR buffer. Longer bulk dumps, soundfiles, etc. should be handled as a new message type pointing to a FileName, Socket, or something else stored in the SK_STR field, or 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 SKINI.tbl file
\code \code
{"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},
{"ControlChange" , __SK_ControlChange_, SK_INT, SK_DBL}, {"ControlChange" , __SK_ControlChange_, SK_INT, SK_DBL},
{"Volume" , __SK_ControlChange_, __SK_Volume_ , SK_DBL}, {"Volume" , __SK_ControlChange_, __SK_Volume_ , SK_DBL},
{"StringDamping" , __SK_ControlChange_, __SK_StringDamping_, SK_DBL}, {"StringDamping" , __SK_ControlChange_, __SK_StringDamping_, SK_DBL},
{"StringDetune" , __SK_ControlChange_, __SK_StringDetune_, SK_DBL}, {"StringDetune" , __SK_ControlChange_, __SK_StringDetune_, SK_DBL},
\endcode \endcode
The first three are basic MIDI messages. The first two would cause the 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_ are #defined in the file SKINI.msg to be the MIDI byte value, without 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 therefore not described in the SKINI Message Struct). The next two fields would be scanned as double-precision floats and assigned to the byteTwo and byteThree variables of the SKINI parser. The remainder of the line is stashed in the remainderString variable. The first three are basic MIDI messages. The first two would cause the 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_ are #defined in the file SKINI.msg to be the MIDI byte value, without 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 therefore not described in the SKINI Message Struct). The next two fields would be scanned as double-precision floats and assigned to the byteTwo and byteThree variables of the SKINI parser. The remainder of the line is stashed in the remainderString variable.
The ControlChange spec is basically the same as NoteOn and NoteOff, but the second data byte is set to an integer (for checking later as to what MIDI control is being changed). The ControlChange spec is basically the same as NoteOn and NoteOff, but the second data byte is set to an integer (for checking later as to what MIDI control is being changed).
The Volume spec is a MIDI Extension message, which behaves like a ControlChange message with the controller number set explicitly to the value for MIDI Volume (7). Thus the following two lines would accomplish the same changing of MIDI volume on channel 2: The Volume spec is a MIDI Extension message, which behaves like a ControlChange message with the controller number set explicitly to the value for MIDI Volume (7). Thus the following two lines would accomplish the same changing of MIDI volume on channel 2:
\code \code
ControlChange 0.000000 2 7 64.1 ControlChange 0.000000 2 7 64.1
Volume 0.000000 2 64.1 Volume 0.000000 2 64.1
\endcode \endcode
I like the 2nd line better, thus my motivation for SKINI in the first place. I like the 2nd line better, thus my motivation for SKINI in the first place.
The StringDamping and StringDetune messages behave the same as the Volume message, but use Control Numbers which aren't specifically nailed-down in MIDI. Note that these Control Numbers are carried around as long ints, so we're not limited to 0-127. If, however, you want to use a MIDI controller to play an instrument, using controller numbers in the 0-127 range might make sense. The StringDamping and StringDetune messages behave the same as the Volume message, but use Control Numbers which aren't specifically nailed-down in MIDI. Note that these Control Numbers are carried around as long ints, so we're not limited to 0-127. If, however, you want to use a MIDI controller to play an instrument, using controller numbers in the 0-127 range might make sense.
\section using Using SKINI: \section using Using SKINI:
Here's a simple example of code which uses the SKINI object to read a SKINI file and control a single instrument. Here's a simple example of code which uses the SKINI object to read a SKINI file and control a single instrument.
\code \code
instrument = new Mandolin(50.0); Skini score;
score = new SKINI(argv[1]); Skini::Message message;
while(score->getType() > 0) { instrument = new Mandolin(50.0);
tempDouble = score->getDelta(); score.setFile( argv[1] );
if (tempDouble < 0) { while ( score.nextMessage( message ) != 0 ) {
tempDouble = - tempDouble; tempDouble = message.time;
tempDouble = tempDouble - output.getTime(); if (tempDouble < 0) {
if (tempDouble < 0) { tempDouble = - tempDouble;
printf("Bad News Here!!! Backward Absolute Time Required.\n"); tempDouble = tempDouble - output.getTime();
tempDouble = 0.0; if (tempDouble < 0) {
} printf("Bad News Here!!! Backward Absolute Time Required.\n");
} tempDouble = 0.0;
tempLong = (long) (tempDouble * Stk::sampleRate()); }
for (i=0;i<tempLong;i++) { }
output.tick(instrument->tick()); tempLong = (long) ( tempDouble * Stk::sampleRate() );
} for ( i=0; i<tempLong; i++ ) {
tempDouble3 = score->getByteThree(); output.tick( instrument->tick() );
if (score->getType()== __SK_NoteOn_ ) { }
tempDouble3 *= NORM_MIDI;
if (score->getByteThree() == 0) { tempDouble3 = message.floatValues[1] * NORM_MIDI;
tempDouble3 = 0.5; if ( message.type == __SK_NoteOn_ ) {
instrument->noteOff(tempDouble3); if ( tempDouble3 == 0.0 ) {
} tempDouble3 = 0.5;
else { instrument->noteOff( tempDouble3 );
tempLong = (int) score->getByteTwo(); }
tempDouble2 = Midi2Pitch[tempLong]; else {
instrument->noteOn(tempDouble2,tempDouble3); tempLong = message.intValues[0];
} tempDouble2 = Midi2Pitch[tempLong];
} instrument->noteOn( tempDouble2, tempDouble3 );
else if (score->getType() == __SK_NoteOff_) { }
tempDouble3 *= NORM_MIDI; }
instrument->noteOff(tempDouble3); else if ( message.type == __SK_NoteOff_ ) {
} instrument->noteOff( tempDouble3 );
else if (score->getType() == __SK_ControlChange_) { }
tempLong = score->getByteTwoInt(); else if ( message.type == __SK_ControlChange_ ) {
instrument->controlChange(tempLong,temp3.0); tempLong = message.intValues[0];
} instrument->controlChange( tempLong, tempDouble3 );
score->nextMessage(); }
} }
\endcode \endcode
When the score (SKINI object) object is created from the filename in argv[1], the first valid command line is read from the file and parsed. When a SKINI score is passed to a Skini object using the Skini::setFile() function, valid messages are read from the file and returned using the Skini::nextMessage() function.
The score->getType() retrieves the messageType. If this is -1, there are no more valid messages in the file and the synthesis loop terminates. Otherwise, the message type is returned. A Skini::Message structure contains all the information parsed from a single SKINI message. A returned message type of zero indicates either an invalid message or the end of a scorefile.
getDelta() retrieves the deltaTime until the current message should occur. If this is greater than 0, synthesis occurs until the deltaTime has elapsed. If deltaTime is less than zero, the time is interpreted as absolute time and the output device is queried as to what time it is now. That is used to form a deltaTime, and if it's positive we synthesize. If it's negative, we print an error and pretend this never happened and we hang around hoping to eventually catch up. The "time" member of a Skini::Message is the deltaTime until the current message should occur. If this is greater than 0, synthesis occurs until the deltaTime has elapsed. If deltaTime is less than zero, the time is interpreted as absolute time and the output device is queried as to what time it is now. That is used to form a deltaTime, and if it's positive we synthesize. If it's negative, we print an error, pretend this never happened and we hang around hoping to eventually catch up.
The rest of the code sorts out message types NoteOn, NoteOff (including NoteOn with velocity 0), and ControlChange. The code implicitly takes into account the integer type of the control number, but all other data is treated as double float. The rest of the code sorts out message types NoteOn, NoteOff (including NoteOn with velocity 0), and ControlChange. The code implicitly takes into account the integer type of the control number, but all other data is treated as double float.
The last line reads and parses the next message in the file. */
*/

View File

@@ -1,29 +1,41 @@
/*! \page system System Requirements /*! \page system System Requirements
<B>General</B> <B>General:</B>
<UL> <UL>
<LI>A MIDI interface to use MIDI input controls. (NOTE: This may be built into the soundcard on your computer.)</LI> <LI>A MIDI interface to use MIDI input/output controls. (NOTE: This may be built into the soundcard on your computer.)</LI>
<LI><A HREF="http://dev.scriptics.com">Tcl/Tk</A> version 8.0 or higher to use the simple Tcl/Tk GUIs provided with the STK distribution (available free over the WWW for all supported realtime platforms).</LI> <LI><A HREF="http://dev.scriptics.com">Tcl/Tk</A> version 8.0 or higher to use the simple Tcl/Tk GUIs provided with the STK distribution (available free over the WWW for all supported realtime platforms).</LI>
</UL> </UL>
<B>Linux (specific)</B>
<UL> <B>Linux (specific):</B>
<LI>A soundcard to use realtime audio input/output capabilities. In order to use the <I><B>effects</B></I> project, the soundcard and drivers must support full duplex mode.</LI> <UL>
<LI><A HREF="http://www.opensound.com">OSS</A> or <A HREF="http://www.alsa-project.org/">ALSA</A> device drivers for realtime sound output and MIDI input.</LI> <LI>A soundcard to use realtime audio input/output capabilities. In order to use the <I><B>effects</B></I> project, the soundcard and drivers must support full duplex mode.</LI>
</UL> <LI><A HREF="http://www.alsa-project.org/">ALSA</A> device drivers and library for realtime sound and MIDI input/output. <A HREF="http://www.opensound.com">OSS</A> device drivers can be used for audio input/output, but MIDI support requires the ALSA library to compile.</LI>
</UL>
<B>Windows95/98/2000/XP (specific)</B>
<UL> <B>Macintosh OS X (specific):</B>
<LI>A soundcard to use realtime audio input/output capabilities. In order to use the <I><B>effects</B></I> project, the soundcard and drivers must support full duplex mode.</LI> <UL>
<LI><A HREF="http://www.microsoft.com/directx/">DirectX</A> 5.0 (or higher) runtime libraries to use the precompiled binaries.</LI> <LI>A C++ compiler does install by default with OS X. It is necessary to download the Developer Kit from the Apple WWW site in order to compile STK or load it from the installation CD-ROM.</LI>
<LI>Visual C++ 6.0 for compiling (though a precompiled distribution is available).</LI> <LI><B>IMPORTANT:</B>The internal Macintosh audio hardware typically supports a sample rate of 44100 Hz only. The default STK sample rate is now 44100 Hz, but there may be programs which change that value before execution. Check the program code if you have sample rate conflicts. Many of the example project programs allow the sample rate to be specified via the command line.</LI>
<LI>For compiling the source (if not already in your system): <UL><LI><A HREF="Misc/dsound.h">dsound.h</A> header file (DirectX 6.1) - put somewhere in your header search path</LI><LI><A HREF="Misc/dsound.lib">dsound.lib</A> library file (DirectX 6.1) - put somewhere in your library search path</LI></UL></LI> <LI>If you experience frequent audio input/output "glitches", try increasing the RT_BUFFER_SIZE specified in Stk.h.</LI>
</UL> <LI>The tcl/tk interpreter does not ship by default with OS X, but must be downloaded from the internet. The latest Tcl/Tk Aqua distribution (http://www.apple.com/downloads/macosx/unix_open_source/tcltk.html) has been successfully tested on 10.2 and 10.3 systems. The default installation will place a link to the wish interpretor at /usr/bin/wish.
<B>WindowsNT (specific)</B> It appears that socket support in Tcl/Tk uses the Nagle algorithm, which produces poor response between changes made in the tcl/tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script.</LI>
<UL>
<LI>STK is no longer supported under WindowsNT because DirectX support for NT is minimal. Unless DirectX 5.0 or higher becomes available for NT, STK won't work.</LI> </UL>
</UL>
<B>Windows95/98/2000/XP (specific):</B>
<P> <UL>
<LI>A soundcard to use realtime audio input/output capabilities. In order to use the <I><B>effects</B></I> project, the soundcard and drivers must support full duplex mode.</LI>
*/ <LI><A HREF="http://www.microsoft.com/directx/">DirectX</A> 5.0 (or higher) runtime libraries to use the precompiled binaries.</LI>
<LI>Visual C++ 6.0 for compiling (though a precompiled distribution is available).</LI>
<LI>For compiling the source (if not already in your system): <UL><LI><A HREF="Misc/dsound.h">dsound.h</A> header file (DirectX 6.1) - put somewhere in your header search path</LI><LI><A HREF="Misc/dsound.lib">dsound.lib</A> library file (DirectX 6.1) - put somewhere in your library search path</LI></UL></LI>
</UL>
<B>WindowsNT (specific):</B>
<UL>
<LI>DirectX support for NT is inadequate, so it is not possible to use STK under WindowsNT with realtime DirectX support. It may be possible to use STK under WindowsNT with realtime ASIO support, though this has not been tested.</LI>
</UL>
<P>
*/

View File

@@ -1,149 +1,26 @@
/*! \page tutorial Tutorial /*! \page tutorial Tutorial
- \ref intro 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:
- \ref start <UL>
- \ref compile <LI>want to create audio DSP and/or synthesis programs</LI>
- \ref rtvsnonrt <LI>want to use our unit generators and input/output routines rather than code their own</LI>
<LI>want to learn about synthesis and processing algorithms</LI>
\section intro Introduction <LI>wish to teach real-time synthesis and processing and wish to use some of our classes and examples</LI>
</UL>
First and foremost, the Synthesis ToolKit is a set of C++ classes. That means you need to know some basics about programming in C++ to make use of STK (beyond the example programs we provide). STK's "target audience" is people who:
<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.).
<LI>already know how to program in C and C++</LI>
<LI>want to create audio DSP and/or synthesis programs</LI> The following tutorial chapters describe many of the fundamental ToolKit concepts and classes. All tutorial programs are included in the <TT>projects/examples</TT> directory.
<LI>want to save some time by using our unit generators and input/output routines</LI>
<LI>know C, but want to learn about synthesis and processing algorithms</LI> -# \ref fundamentals
<LI>wish to teach real-time synthesis and processing, and wish to use some of our classes and examples</LI> -# \ref hello
</UL> -# \ref compile
-# \ref filtering
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.). -# \ref realtime
-# \ref crealtime
\section start Getting Started -# \ref instruments
-# \ref controlin
We'll begin our introduction to the Synthesis ToolKit with a simple sine-wave oscillator program. STK doesn't provide a specific oscillator for sine waves. Instead, it provides a generic waveform oscillator class, WaveLoop, which can load a variety of common file types. In this example, we load a sine "table" from an STK RAW file. The class RtWvOut will send "realtime" samples to the audio output hardware on your computer. -# \ref multichannel
-# \ref polyvoices
\code
*/
// sineosc.cpp
#include "WaveLoop.h"
#include "RtWvOut.h"
int main()
{
// Set the global sample rate before creating class instances.
Stk::setSampleRate( 44100.0 );
// Define and load the sine wave file
WaveLoop *input = new WaveLoop("sinewave.raw", TRUE);
input->setFrequency(440.0);
// Define and open the default realtime output device for one-channel playback
RtWvOut *output = new RtWvOut(1);
// Play the oscillator for 40000 samples
for (int i=0; i<40000; i++) {
output->tick( input->tick() );
}
// Clean up
delete input;
delete output;
return 0;
}
\endcode
WaveLoop is a subclass of WvIn, which supports WAV, SND (AU), AIFF, MAT-file (Matlab), and RAW file formats with 8-, 16-, and 32-bit integer and 32- and 64-bit floating-point data types. WvIn provides interpolating, read once ("oneshot") functionality, as well as methods for setting the read rate and read position.
Nearly all STK classes implement tick() methods which take and/or return sample values. Within the tick() method, the fundamental sample calculations are performed for a given class. Most STK classes consume/generate a single sample per operation and their tick() method takes/returns each sample "by value". In addition, every class implementing a tick() method also provides an overloaded tick() function taking pointer and size arguments which can be used for vectorized computations.
The WvIn and WvOut classes support multi-channel sample frames. To distinguish single-sample frame operations from multi-channel frame operations, these classes also implement tickFrame() functions. When a tick() method is called for multi-channel data, frame averages are returned or the input sample is distributed across all channels of a sample frame.
Nearly all STK classes inherit from the Stk base class. Stk provides a static sample rate which is queried by subclasses as needed. Because many classes use the current sample rate value during instantiation, it is important that the desired value be set at the beginning of a program. The default STK sample rate is 22050 Hz.
Another primary concept that is somewhat obscurred in this example concerns the data format in which sample values are passed and received. Audio and control signals throughout STK use a floating-point data type, the exact precision of which can be controlled via the MY_FLOAT \#define statement in Stk.h. Thus, the ToolKit can use any normalization scheme desired. The base instruments and algorithms are implemented with a general audio sample dynamic maximum of +/-1.0, and the WvIn and WvOut classes and subclasses scale appropriately for DAC or soundfile input and output.
Finally, STK has some basic C++ error handling functionality built in. Classes which access files and/or hardware are most prone to runtime errors. To properly "catch" such errors, the above example should be rewritten as shown below.
\code
// sineosc.cpp
#include "WaveLoop.h"
#include "RtWvOut.h"
int main()
{
// Set the global sample rate before creating class instances.
Stk::setSampleRate( 44100.0 );
WaveLoop *input = 0;
RtWvOut *output = 0;
try {
// Define and load the sine wave file
input = new WaveLoop( "sinewave.raw", TRUE );
// Define and open the default realtime output device for one-channel playback
output = new RtWvOut(1);
}
catch (StkError &) {
goto cleanup;
}
input->setFrequency(440.0);
// Play the oscillator for 40000 samples
for (int i=0; i<40000; i++) {
try {
output->tick(input->tick());
}
catch (StkError &) {
goto cleanup;
}
}
cleanup:
delete input;
delete output;
return 0;
}
\endcode
In this particular case, we simply exit the program if an error occurs (an error message is automatically printed to stderr). A more refined program might attempt to recover from or fix a particular problem and, if successful, continue processing.
\section compile Compiling
\subsection compileLinux Linux
In general, you will probably want to use a <TT>Makefile</TT> for your STK programs and projects. For this particular program, however, the following will suffice (on a linux system):
\code
g++ -Wall -D__LINUX_OSS__ -D__LITTLE_ENDIAN__ -o sineosc Stk.cpp WvIn.cpp WaveLoop.cpp WvOut.cpp RtWvOut.cpp RtAudio.cpp sineosc.cpp -lpthread
\endcode
This assumes you've set up a directory that includes the files <TT>sineosc.cpp</TT>, the rawwave file <TT>sinewave.raw</TT>, and the header and source files for the classes Stk, WvIn, WaveLoop, WvOut, RtWvOut, and RtAudio. There are other, more convenient, means for structuring projects that will be discussed later.
Most linux systems currently come installed with the OSS audio hardware drivers. If your system instead has ALSA audio drivers installed and you wish to make use of native ALSA API calls, a link to the ALSA library must be specified in the above compile statement (<TT>-lasound</TT>) and the preprocessor definition should instead be <TT>__LINUX_ALSA__</TT>.
\subsection compileIrix Irix
The irix (SGI) and linux operating systems are both flavors of unix and thus behave similarly. Making the same assumptions as in the linux case, the following compile statement should work:
\code
CC -Wall -D__IRIX_AL__ -o sineosc Stk.cpp WvIn.cpp WaveLoop.cpp WvOut.cpp RtWvOut.cpp RtAudio.cpp sineosc.cpp -lpthread
\endcode
\subsection compileWin Windows
I have personally only worked with Visual C++ when compiling programs under windoze. I'll assume you've become familiar with Visual C+ and don't need a tutorial on its particular idiosyncrasies. In creating the VC++ project, add the Stk, WvIn, WaveLoop, WvOut, RtWvOut, and RtAudio class files, as well as the <TT>sineosc.cpp</TT> and <TT>sinewave.raw</TT> files. You will also need to link to the DirectSound library (<TT>dsound.lib</TT>), select the multithreaded library, and provide the <TT>__WINDOWS_DS__</TT> and <TT>__LITTLE_ENDIAN__</TT> preprocessor definitions.
\section rtvsnonrt "Realtime" vs. "Non-Realtime"
Most of the Synthesis ToolKit classes are platform independent. That means that they should compile on any reasonably current C++ compiler. The functionality needed for realtime audio and MIDI input/output, as well as realtime control message acquistion, is inherently platform and operating-system (OS) <I>dependent</I>. STK classes which require specific platform/OS support include RtAudio, RtWvOut, RtWvIn, RtDuplex, RtMidi, TcpWvIn, TcpWvOut, Socket, and Thread. These classes currently can only be compiled on Linux, Irix, and Windows (except Windows NT) systems using the <TT>__LINUX_OSS__</TT>, <TT>__LINUX_ALSA__</TT>, <TT>__IRIX_AL__</TT>, or <TT>__WINDOWS_DS__</TT> preprocessor definitions.
Without the "realtime" classes, it is still possible to read SKINI scorefiles for control input and to read and write to/from a variety of audio file formats (WAV, SND, AIFF, MAT-file, and RAW). If compiling for a "little-endian" host processor, the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition should be provided.
\section continued To Be Continued ...
*/

View File

@@ -1,183 +1,212 @@
/*! \page usage Usage Documentation /*! \page usage Usage Documentation
- \ref directory - \ref directory
- \ref compiling - \ref compiling
- \ref control - \ref control
- \ref instruments - \ref voices
- \ref nort - \ref nort
- \ref rt - \ref rt
- \ref tcl - \ref tcl
- \ref midi - \ref midi
- \ref polyphony
<HR>
<HR>
\section directory Directory Structure:
\section directory Directory Structure:
The top level distribution contains the following directories:
The top level distribution contains the following directories:
<UL>
<LI> The <I><B>src</B></I> directory contains the source .cpp files for almost all the STK unit generator and algorithm classes.</LI><P> <UL>
<LI> The <I><B>src</B></I> directory contains the source .cpp files for all the STK unit generator and algorithm classes.</LI><P>
<LI> The <I><B>include</B></I> directory contains the header files for almost all the STK unit generator and algorithm classes.</LI><P>
<LI> The <I><B>include</B></I> directory contains the header files for all the STK unit generator and algorithm classes.</LI><P>
<LI> The <I><B>rawwaves</B></I> directory contains various raw, monophonic, 16-bit, big-endian soundfiles used with the STK classes.</LI><P>
<LI> The <I><B>rawwaves</B></I> directory contains various raw, monophonic, 16-bit, big-endian, 22050 Hz soundfiles used with the STK classes.</LI><P>
<LI> The <I><B>doc</B></I> directory contains documentation about STK.</LI><P>
<LI> The <I><B>doc</B></I> directory contains documentation about STK.</LI><P>
<LI> The <I><B>projects</B></I> directory contains various demo and example STK programs.</LI><P>
</UL> <LI> The <I><B>projects</B></I> directory contains various demo and example STK programs.</LI><P>
</UL>
This release of STK comes with four separate "project" directories:
This release of STK comes with four separate "project" directories:
<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> <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>effects</B></I> project demonstrates realtime duplex mode (simultaneous audio input and output) operation, when available, as well as various delay-line based effects algorithms.<P></LI>
<LI> The <I><B>effects</B></I> project demonstrates realtime duplex mode (simultaneous audio input and output) operation, when available, as well as various delay-line based effects algorithms.<P></LI>
<LI> The <I><B>ragamatic</B></I> project is just cool. Fire it up and be enlightened.<P></LI>
<LI> The <I><B>ragamatic</B></I> project is just cool. Fire it up and be enlightened.<P></LI>
<LI> The <I><B>examples</B></I> project contains several simple programs which demonstrate audio input/output, as well as the use of the audio internet streaming classes.</LI>
</OL> <LI> The <I><B>examples</B></I> project contains several simple programs which demonstrate audio input/output, including the audio internet streaming classes, as well as most of the tutorial programs.</LI>
</OL>
\section compiling Compiling:
\section compiling Compiling:
<UL>
<LI><B>Generic (non-realtime):</B> Most STK classes are operating system <I>independent</I> and can be compiled using any current C++ compiler. STK assumes big-endian host byte order by default, so if your system is little-endian (i.e. Intel processor), you must provide the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition to your compiler. The <I><B>demo</B></I> project will compile without realtime support, allowing the use of SKINI scorefiles for input control and output to a variety of soundfile formats. The following classes <I>cannot</I> be used without realtime support: RtAudio, RtWvIn, RtWvOut, RtDuplex, RtMidi, Socket, Thread, TcpWvIn, TcpWvOut. Because of this, it is not possible to compile the <I><B>effects</B></I>, <I><B>ragamatic</B></I>, and most of the <I><B>examples</B></I> projects for non-realtime use.</LI> <UL>
<LI><B>Windows95/98/2000/XP:</B> Realtime support is available using either DirectSound or ASIO audio drivers. For DirectSound support, use the <TT>__WINDOWS_DS__</TT> preprocessor definition and link with the <TT>dsound.lib</TT>, <TT>winmm.lib</TT>, and <TT>Wsock32.lib</TT> libraries. For ASIO support, use the <TT>__WINDOWS_ASIO__</TT> preprocessor definition, include all the files in the <TT>src/asio/</TT> directory (i.e. <TT>asio.h,cpp</TT>, <TT>asiodrivers.h,cpp</TT>, ...), and link with the <TT>winmm.lib</TT>, and <TT>Wsock32.lib</TT> libraries. In addition, the <TT>__LITTLE_ENDIAN__</TT> and <TT>__WINDOWS_MM__</TT> preprocessor definitions are necessary for all Windows systems (RtMidi uses the Windows MultiMedia MIDI API). A distribution of the release is available with precompiled binaries (using DirectSound) for all the projects. In order for these binaries to function properly, your system must have the DirectX 5.0 (or higher) runtime libraries installed (available from <A HREF="http://www.microsoft.com/directx/">Microsoft</A>). Further, the <I><B>effects</B></I> project requires that your soundcard and drivers provide full duplex mode capabilities. Visual C++ 6.0 project files are provided in each project directory as well should you wish to compile your own binaries. It is important to link with the non-debug libraries when compiling "release" program versions and debug libraries when compiling "debug" program versions.</LI>
<LI><B>Linux:</B> Realtime support is enabled with either the <TT>__LINUX_OSS__</TT> or <TT>__LINUX_ALSA__</TT> preprocessor definitions, which are used to select the underlying audio/MIDI system API. Realtime programs must also link with the <TT>pthread</TT> library. When using the ALSA API, it is also necessary to link with the <TT>asound</TT> library. In addition, the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition is necessary if compiling on a little-endian system. Assuming your system has the <A HREF="http://gnu.cetcol.net.co/">GNU</A> Makefile utilities installed, typing <TT>make</TT> within a particular project directory will initiate the compilation process. The <TT>Makefile</TT> will have to be modified to change the default audio/MIDI system API and for big-endian processors. Special support exists under Linux for the MIDIator serial MIDI device, enabled using the __MIDIATOR__ preprocessor definition (together with either the __LINUX_ALSA__ or __LINUX_OSS__ definitions). See the README-Linux file for further system configuration information.</LI>
<LI><B>WindowsNT:</B> DirectX support for NT is inadequate, so it is not possible to use STK under WindowsNT with realtime DirectX support. It may be possible to use STK under WindowsNT with realtime ASIO support, though this has not been tested.</LI>
<LI><B>SGI:</B> Realtime support is enabled with the <TT>__IRIX_AL__</TT> preprocessor definition and linkage with the <TT>audio</TT>, <TT>md</TT>, and <TT>pthread</TT> libraries. If your system has the <A HREF="http://gnu.cetcol.net.co/">GNU</A> Makefile utilities installed, typing <TT>make</TT> (or <TT>gmake</TT>) within a particular project directory will initiate the compilation process. If your system does not have the GNU Makefile utilities, you should first try to download and install them. If this is not possible, a generic Makefile is provided with the <I><B>demo</B></I> project (Makefile.sgi). It can be invoked by typing <TT>make -f Makefile.sgi</TT> within that project directory. STK 4.0 is confirmed to compile using CC version 7.30. There may be problems with old compiler versions.</LI>
<LI><B>Unix Systems:</B> A GNU <TT>configure</TT> shell script is included in the distribution for unix-based systems. From the top-level distribution directory, type <TT>'./configure'</TT> and the script will create <TT>Makefiles</TT> in each project directory specific to the characteristics of the host computer. Then from within any given project directory (example <TT>demo</TT>), type <TT>'make'</TT> to compile the project. In addition, an STK library can be compiled from within the <TT>src</TT> directory.
<LI><B>Windows95/98/2000/XP:</B> Realtime support is enabled with the <TT>__WINDOWS_DS__</TT> preprocessor definition and linkage with the <TT>dsound.lib</TT>, <TT>winmm.lib</TT>, and <TT>Wsock32.lib</TT> libraries. In addition, the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition is necessary for all Windows systems. A distribution of the release is available with precompiled binaries for all the projects. In order for these binaries to function properly, your system must have the DirectX 5.0 (or higher) runtime libraries installed (available from <A HREF="http://www.microsoft.com/directx/">Microsoft</A>). Further, the <I><B>effects</B></I> project requires that your soundcard and drivers provide full duplex mode capabilities. Visual C++ 6.0 project file are provided in each project directory as well should you wish to compile your own binaries. It is important to link with the non-debug libraries when compiling "release" program versions and debug libraries when compiling "debug" program versions.</LI>
Several options can be supplied to the <TT>configure</TT> script to customize the build behavior:
<LI><B>WindowsNT:</B> I've given up trying to make things work under NT. You'll have to switch to Windows 2000 (which does seem to work).</LI> <UL>
</UL> <LI><TT>--disable-realtime</TT> to only compile generic non-realtime classes</LI>
<LI><TT>--enable-debug</TT> to enable various debug output</LI>
<LI><TT>--with-alsa</TT> to choose native ALSA API support (default, linux only)</LI>
\section control Control Data: <LI><TT>--with-jack</TT> to choose native JACK API support (linux only)</LI>
<LI><TT>--with-oss</TT> to choose native OSS audio API support (linux only, no native OSS MIDI support)</LI>
All STK programs in this distribution take input control data in the form of <A HREF="skini.html">SKINI</A> or MIDI messages only. The Messager class unifies the various means of acquiring control data under a single, easy to use set of functions. The way that SKINI messages can be sent to the programs is dependent upon the operating system in use, as well as whether the program is running in realtime or not. In general, it is possible to: </UL>
<P>
<OL> Note that it is possible to specify as many of the "--with-" options as desired to compile multi-API support. In addition, it is possible to specify the location of the STK rawwaves and the STK include path as follows:
<LI>Redirect or pipe SKINI scorefiles to an executable.</LI> \code
<LI>Pipe realtime SKINI input messages to an executable (not possible under Windows95/98).</LI> ./configure RAWWAVE_PATH="/home/gary/rawwaves/"
<LI>Socket realtime SKINI input messages to an executable.</LI> ./configure INCLUDE_PATH="/home/gary/include/"
<LI>Acquire realtime MIDI messages from a MIDI port on your computer.</LI> \endcode
</OL>
For novice STK users, the default configuration should be adequate.
<A HREF="http://dev.scriptics.com">Tcl/Tk</A> graphical user interfaces (GUI) are provided with this distribution which can generate realtime SKINI messages. Note that the Messager class allows multiple simultaneous socket client connections, together with MIDI and/or piped input. The <I><B>Md2Skini</B></I> program (in the <I><B>demo</B></I> directory) is mostly obsolete but can be used to create SKINI scorefiles from realtime MIDI input. </UL>
For those who wish to create their own system-specific <TT>Makefiles</TT>:
\section instruments Demo: STK Instruments <UL>
<LI><B>Linux:</B> Realtime audio support is enabled with either the <TT>__LINUX_ALSA__</TT>, <TT>__LINUX_JACK__</TT>, and/or <TT>__LINUX_OSS__</TT> preprocessor definitions, which are used to select the underlying audio system API(s). Because the ALSA library is now integrated into the standard Linux kernel, it is the default audio/MIDI API with STK versions 4.2 and higher. The <TT>__LINUX_ALSASEQ__</TT> preprocessor definition must be included for MIDI support. Note that native OSS MIDI support no longer exists in RtMidi. If the <TT>__LINUX_OSS__</TT> preprocessor definition is specified, only OSS audio support will be compiled and RtMidi will still be compiled using the ALSA API (assuming the <TT>__LINUX_ALSASEQ__</TT> definition is defined). For this reason, STK now requires the <TT>asound</TT> library for realtime support. Realtime programs must also link with the <TT>pthread</TT> library. In addition, the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition is necessary if compiling on a little-endian system. See the README-Linux file for further system configuration information.</LI>
The <I><B>demo</B></I> project demonstrates the behavior of all the distributed STK instruments. The instruments available with this release include:
<UL> <LI><B>Macintosh OS X:</B> Realtime support is enabled with the <TT>__MACOSX_CORE__</TT> preprocessor definitions, which incorporates the CoreAudio audio/MIDI API. Realtime programs must also link with the <TT>pthread</TT> library and the <TT>CoreAudio</TT>, <TT>CoreMIDI</TT>, and <TT>CoreFoundation</TT> frameworks. See the README-MacOSX file for further system configuration information.</LI>
<LI>Clarinet: Pretty good physical model of the clarinet</LI>
<LI>BlowHole: A clarinet physical model with one tonehole and one register vent</LI> <LI><B>SGI:</B> Realtime audio and MIDI support is enabled with the <TT>__IRIX_AL__</TT> and <TT>__IRIX_MD__</TT> preprocessor definitions and linkage with the <TT>audio</TT>, <TT>md</TT>, and <TT>pthread</TT> libraries. STK 4.0 (and higher) is confirmed to compile using CC version 7.30. There may be problems with old compiler versions.</LI>
<LI>Saxofony: A psuedo-conical bore reed instrument which sometimes sounds like a saxophone</LI>
<LI>Flute: Pretty good physical model of the flute</LI> <LI><B>Generic (non-realtime):</B> Most STK classes are operating system <I>independent</I> and can be compiled using any current C++ compiler. STK assumes big-endian host byte order by default, so if your system is little-endian (i.e. Intel processor), you must provide the <TT>__LITTLE_ENDIAN__</TT> preprocessor definition to your compiler. The <I><B>demo</B></I> project will compile without realtime support, allowing the use of SKINI scorefiles for input control and output to a variety of soundfile formats. The following classes <I>cannot</I> be used without realtime support: RtAudio, RtWvIn, RtWvOut, RtDuplex, RtMidi, Socket, Thread, Mutex, TcpWvIn, TcpWvOut. Because of this, it is not possible to compile the <I><B>effects</B></I>, <I><B>ragamatic</B></I>, and most of the <I><B>examples</B></I> projects for non-realtime use.</LI>
<LI>Brass: Not so bad physical model of a brass instrument</LI> </UL>
<LI>BlowBotl: A basic helmholtz resonator and air jet model</LI>
<LI>Bowed: Not hideous physical model of a bowed string instrument</LI>
<LI>Plucked: Yer basic plucked string physical model</LI> \section control Control Data:
<LI>StifKarp: A simple plucked, stiff string physical model</LI>
<LI>Sitar: A simple sitar/plucked string physical model</LI> All STK programs in this distribution take input control data in the form of <A HREF="skini.html">SKINI</A> or MIDI messages only. The Messager class unifies the various means of acquiring control data under a single, easy to use set of functions. The way that SKINI messages can be sent to the programs is dependent upon the operating system in use, as well as whether the program is running in realtime or not. In general, it is possible to:
<LI>Mandolin: Two-string mandolin physical model</LI>
<LI>Rhodey: Rhodes-like electric piano FM synthesis model</LI> <OL>
<LI>Wurley: Wurlitzer-like electric piano FM synthesis model</LI> <LI>Redirect or pipe SKINI scorefiles to an executable.</LI>
<LI>TubeBell: FM synthesis model</LI> <LI>Pipe realtime SKINI input messages to an executable (not possible under Windows95/98).</LI>
<LI>HevyMetl: Distorted synthesizer FM synthesis model</LI> <LI>Socket realtime SKINI input messages to an executable.</LI>
<LI>PercFlut: Percussive flute-like FM synthesis model</LI> <LI>Acquire realtime MIDI messages from a MIDI port on your computer.</LI>
<LI>BeeThree: Cheezy organ FM synthesis model</LI> </OL>
<LI>Moog: Swept filter sampler</LI>
<LI>FMVoices: Three-formant FM voice synthesis</LI> <A HREF="http://dev.scriptics.com">Tcl/Tk</A> graphical user interfaces (GUI) are provided with this distribution which can generate realtime SKINI messages. Note that the Messager class allows multiple simultaneous socket client connections, together with MIDI and/or piped input. The <I><B>Md2Skini</B></I> program (in the <I><B>demo</B></I> directory) is mostly obsolete but can be used to create SKINI scorefiles from realtime MIDI input.
<LI>Resonate: Noise through a BiQuad filter</LI>
<LI>Drummer: Sampling synthesis</LI>
<LI>BandedWG: Banded waveguide meta-object for bowed bars, tibetan bowls, etc.</LI> \section voices Demo: STK Instruments
<LI>Shakers: Various stochastic event models of shaker instruments</LI>
<LI>ModalBar: Various four-resonance presets (marimba, vibraphone, etc...)</LI> The <I><B>demo</B></I> project demonstrates the behavior of all the distributed STK instruments. The instruments available with this release include:
<LI>Mesh2D: Two-dimensional, rectilinear digital waveguide mesh</LI> <UL>
</UL> <LI>Clarinet: Pretty good physical model of the clarinet</LI>
<LI>BlowHole: A clarinet physical model with one tonehole and one register vent</LI>
\section nort Demo: Non-Realtime Use <LI>Saxofony: A psuedo-conical bore reed instrument which sometimes sounds like a saxophone</LI>
<LI>Flute: Pretty good physical model of the flute</LI>
See the information above with respect to compiling STK for non-realtime use. <LI>Brass: Not so bad physical model of a brass instrument</LI>
<LI>BlowBotl: A basic helmholtz resonator and air jet model</LI>
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: <LI>Bowed: Not hideous physical model of a bowed string instrument</LI>
<LI>Plucked: Yer basic plucked string physical model</LI>
\code <LI>StifKarp: A simple plucked, stiff string physical model</LI>
cat scores/bookert.ski | demo BeeThree -w myfile.wav <LI>Sitar: A simple sitar/plucked string physical model</LI>
\endcode <LI>Mandolin: Two-string mandolin physical model</LI>
<LI>Rhodey: Rhodes-like electric piano FM synthesis model</LI>
or (on WindowsXX and/or Unix) <LI>Wurley: Wurlitzer-like electric piano FM synthesis model</LI>
<LI>TubeBell: FM synthesis model</LI>
\code <LI>HevyMetl: Distorted synthesizer FM synthesis model</LI>
demo BeeThree -w myfile.wav < scores\bookert.ski <LI>PercFlut: Percussive flute-like FM synthesis model</LI>
\endcode <LI>BeeThree: Cheezy organ FM synthesis model</LI>
<LI>Moog: Swept filter sampler</LI>
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". Typing <TT>demo</TT> without any arguments will provide a full program usage description. <LI>FMVoices: Three-formant FM voice synthesis</LI>
<LI>VoicForm: Four-formant resonance filter voice synthesis</LI>
<LI>Resonate: Noise through a BiQuad filter</LI>
\section rt Demo: Realtime Use <LI>Drummer: Sampling synthesis</LI>
<LI>BandedWG: Banded waveguide meta-object for bowed bars, tibetan bowls, etc.</LI>
STK realtime audio and MIDI input/output and realtime SKINI control input via socketing support is provided for Linux, SGI, and Windows95/98/2000/XP operating systems. STK realtime SKINI control input via piping is possible under Linux, SGI, and Windows2000/XP only. <LI>Shakers: Various stochastic event models of shaker instruments</LI>
<P> <LI>ModalBar: Various four-resonance presets (marimba, vibraphone, etc...)</LI>
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: <LI>Mesh2D: Two-dimensional, rectilinear digital waveguide mesh</LI>
<LI>Whistle: Hybrid physical/spectral model of a police whistle</LI>
\code </UL>
demo instrument flags
\endcode \section nort Demo: Non-Realtime Use
where instruments include those described above and flags can be any or all of: See the information above with respect to compiling STK for non-realtime use.
<UL>
<LI><I>-or</I> for realtime audio output,</LI> 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:
<LI><I>-ow <file name></I> for WAV soundfile output,</LI>
<LI><I>-os <file name></I> for SND (AU) soundfile output,</LI> \code
<LI><I>-om <file name></I> for MAT-file output,</LI> demo BeeThree -ow myfile.wav -if scores/bookert.ski
<LI><I>-ip</I> or <I>-is</I> for realtime SKINI control input via piping or socketing, respectively,</LI> \endcode
<LI><I>-im <file name></I> for MIDI control input</LI>
</UL> 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.
The <-ip> and <-is> flags must be used when piping or socketing realtime SKINI control data to an STK program. The <-im> flag must be used to read MIDI control input from your MIDI port. Note that you can use all three input types simultaneously.
Assuming a successful compilation of the <I><B>demo</B></I> program, typing: \section rt Demo: Realtime Use
\code STK realtime audio and MIDI input/output and realtime SKINI control input via socketing support is provided for Linux, SGI, Mac OS X, and Windows95/98/2000/XP operating systems. STK realtime SKINI control input via piping is possible under Linux, SGI, Mac OS X, and Windows2000/XP only.
cat scores/bookert.ski | demo BeeThree -or <P>
\endcode 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:
or (on WindowsXX and/or Unix) \code
demo instrument flags
\code \endcode
demo BeeThree -or < scores\bookert.ski
\endcode where instruments include those described above and flags can be any or all of:
<UL>
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. <LI><I>-or</I> for realtime audio output,</LI>
<LI><I>-ow \<file name\></I> for WAV soundfile output,</LI>
<LI><I>-os \<file name\></I> for SND (AU) soundfile output,</LI>
\section tcl Realtime Control Input using Tcl/Tk Graphical User Interfaces: <LI><I>-om \<file name\></I> for MAT-file output,</LI>
<LI><I>-if \<file name\></I> for a SKINI formatted control file,</LI>
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 wish80 executable to the name <I>wish</I>). The PhysicalDemo script just implements the following command-line sequence: <LI><I>-ip</I> for realtime SKINI control input via piping,</LI>
<LI><I>-is \<port\></I> for realtime SKINI control input via socketing (with an optional port number),</LI>
\code <LI><I>-im \<port\></I> for MIDI control input (with optional port, -1 = virtual port where possible),</LI>
wish < tcl/Physical.tcl | demo Clarinet -or -ip <LI><I>-s RATE</I> to specify a sample rate,</LI>
\endcode <LI><I>-n NUMBER</I> to specify multivoice polyphony</LI>
</UL>
On WindowsXX and Unix platforms, the following operations are necessary to establish a socket connection between the Tcl/Tk GUI and the STK program: The <i>-ip</i> and <i>-is</i> flags must be used when piping or socketing realtime SKINI control data to an STK program. The <i>-im</i> flag must be used to read MIDI control input from your MIDI port. Note that you can use all three input types simultaneously.
<OL>
<LI>Open a DOS shell and start the STK program with the <I>-is</I> flag (ex. <I><B>demo Clarinet -or -is</B></I>).</LI> Assuming a successful compilation of the <I><B>demo</B></I> program, typing:
<LI>Open the Tcl/Tk GUI (e.g. tcl/Physical.tcl) by double-clicking on it, or type <TT>wish < tcl/Physical.tcl</TT> in another DOS shell.</LI>
<LI>Establish the socket connection by selecting <I>Socket</I> under the Communications menu item in the Tcl/Tk GUI.</LI> \code
</OL> demo BeeThree -or -if scores/bookert.ski
\endcode
Note that it is possible to specify a hostname when establishing the socket connection from the socket client. Thus, the STK socket server program and the Tcl/Tk GUI need not necessarily reside on the same computer.
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.
\section midi Realtime MIDI Control Input:
\section tcl Realtime Control Input using Tcl/Tk Graphical User Interfaces:
On all supported realtime platforms, you can direct realtime MIDI input to the STK Clarinet by typing:
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
demo Clarinet -or -im \code
\endcode wish < tcl/Physical.tcl | demo Clarinet -or -ip
\endcode
*/
On WindowsXX and Unix platforms, the following operations are necessary to establish a socket connection between the Tcl/Tk GUI and the STK program:
<OL>
<LI>Open a DOS shell and start the STK program with the <I>-is</I> flag (ex. <I><B>demo Clarinet -or -is</B></I>).</LI>
<LI>Open the Tcl/Tk GUI (e.g. tcl/Physical.tcl) by double-clicking on it, or type <TT>wish < tcl/Physical.tcl</TT> in another DOS shell.</LI>
<LI>Establish the socket connection by selecting <I>Socket</I> under the Communications menu item in the Tcl/Tk GUI.</LI>
</OL>
Note that it is possible to specify a hostname when establishing the socket connection from the socket client. Thus, the STK socket server program and the Tcl/Tk GUI need not necessarily reside on the same computer.
\section midi Realtime MIDI Control Input:
On all supported realtime platforms, you can direct realtime MIDI input to the STK Clarinet by typing:
\code
demo Clarinet -or -im
\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 (which other software applications can connect to) by specifying a port identifier of -1.
\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:
\code
demo BeeThree -n 8 -or -im
\endcode
*/

View File

@@ -1,76 +1,79 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>ADSR.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>ADSR.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00016 <font class="comment">/***************************************************/</font> 00016 <span class="comment">/***************************************************/</span>
00017 00017
00018 <font class="preprocessor">#if !defined(__ADSR_H)</font> 00018 <span class="preprocessor">#ifndef STK_ADSR_H</span>
00019 <font class="preprocessor"></font><font class="preprocessor">#define __ADSR_H</font> 00019 <span class="preprocessor"></span><span class="preprocessor">#define STK_ADSR_H</span>
00020 <font class="preprocessor"></font> 00020 <span class="preprocessor"></span>
00021 <font class="preprocessor">#include "Envelope.h"</font> 00021 <span class="preprocessor">#include "Envelope.h"</span>
00022 00022
00023 <font class="keyword">class </font><a class="code" href="classADSR.html">ADSR</a> : <font class="keyword">public</font> <a class="code" href="classEnvelope.html">Envelope</a> <a name="l00023"></a><a class="code" href="classADSR.html">00023</a> <span class="keyword">class </span><a class="code" href="classADSR.html">ADSR</a> : <span class="keyword">public</span> <a class="code" href="classEnvelope.html">Envelope</a>
00024 { 00024 {
00025 <font class="keyword">public</font>: 00025 <span class="keyword">public</span>:
00026 00026
00028 <font class="keyword">enum</font> { ATTACK, DECAY, SUSTAIN, RELEASE, DONE }; 00028 <span class="keyword">enum</span> { ATTACK, DECAY, SUSTAIN, RELEASE, DONE };
00029 00029
00031 <a class="code" href="classADSR.html#a0">ADSR</a>(<font class="keywordtype">void</font>); 00031 <a class="code" href="classADSR.html#a0">ADSR</a>(<span class="keywordtype">void</span>);
00032 00032
00034 <a class="code" href="classADSR.html#a1">~ADSR</a>(<font class="keywordtype">void</font>); 00034 <a class="code" href="classADSR.html#a1">~ADSR</a>(<span class="keywordtype">void</span>);
00035 00035
00037 <font class="keywordtype">void</font> <a class="code" href="classEnvelope.html#a2">keyOn</a>(<font class="keywordtype">void</font>); 00037 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a2">keyOn</a>(<span class="keywordtype">void</span>);
00038 00038
00040 <font class="keywordtype">void</font> <a class="code" href="classEnvelope.html#a3">keyOff</a>(<font class="keywordtype">void</font>); 00040 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a3">keyOff</a>(<span class="keywordtype">void</span>);
00041 00041
00043 <font class="keywordtype">void</font> <a class="code" href="classADSR.html#a4">setAttackRate</a>(MY_FLOAT aRate); 00043 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a4">setAttackRate</a>(StkFloat rate);
00044 00044
00046 <font class="keywordtype">void</font> <a class="code" href="classADSR.html#a5">setDecayRate</a>(MY_FLOAT aRate); 00046 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a5">setDecayRate</a>(StkFloat rate);
00047 00047
00049 <font class="keywordtype">void</font> <a class="code" href="classADSR.html#a6">setSustainLevel</a>(MY_FLOAT aLevel); 00049 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a6">setSustainLevel</a>(StkFloat level);
00050 00050
00052 <font class="keywordtype">void</font> <a class="code" href="classADSR.html#a7">setReleaseRate</a>(MY_FLOAT aRate); 00052 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a7">setReleaseRate</a>(StkFloat rate);
00053 00053
00055 <font class="keywordtype">void</font> <a class="code" href="classADSR.html#a8">setAttackTime</a>(MY_FLOAT aTime); 00055 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a8">setAttackTime</a>(StkFloat time);
00056 00056
00058 <font class="keywordtype">void</font> <a class="code" href="classADSR.html#a9">setDecayTime</a>(MY_FLOAT aTime); 00058 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a9">setDecayTime</a>(StkFloat time);
00059 00059
00061 <font class="keywordtype">void</font> <a class="code" href="classADSR.html#a10">setReleaseTime</a>(MY_FLOAT aTime); 00061 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a10">setReleaseTime</a>(StkFloat time);
00062 00062
00064 <font class="keywordtype">void</font> <a class="code" href="classADSR.html#a11">setAllTimes</a>(MY_FLOAT aTime, MY_FLOAT dTime, MY_FLOAT sLevel, MY_FLOAT rTime); 00064 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a11">setAllTimes</a>(StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime);
00065 00065
00067 <font class="keywordtype">void</font> <a class="code" href="classEnvelope.html#a6">setTarget</a>(MY_FLOAT aTarget); 00067 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a12">setTarget</a>(StkFloat target);
00068 00068
00070 <font class="keywordtype">int</font> <a class="code" href="classEnvelope.html#a8">getState</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00070 <span class="keywordtype">int</span> <a class="code" href="classADSR.html#a13">getState</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00071 00071
00073 <font class="keywordtype">void</font> <a class="code" href="classEnvelope.html#a7">setValue</a>(MY_FLOAT aValue); 00073 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a14">setValue</a>(StkFloat value);
00074 00074
00076 MY_FLOAT <a class="code" href="classEnvelope.html#a9">tick</a>(<font class="keywordtype">void</font>); 00076 StkFloat <a class="code" href="classADSR.html#a15">tick</a>(<span class="keywordtype">void</span>);
00077 00077
00079 MY_FLOAT *<a class="code" href="classEnvelope.html#a9">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00079 StkFloat *<a class="code" href="classADSR.html#a15">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00080 00080
00081 <font class="keyword">protected</font>: 00082
00082 MY_FLOAT attackRate; 00088 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classADSR.html#a15">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00083 MY_FLOAT decayRate; 00089
00084 MY_FLOAT sustainLevel; 00090 <span class="keyword">protected</span>:
00085 MY_FLOAT releaseRate; 00091 StkFloat attackRate_;
00086 }; 00092 StkFloat decayRate_;
00087 00093 StkFloat sustainLevel_;
00088 <font class="preprocessor">#endif</font> 00094 StkFloat releaseRate_;
</font></pre></div><HR> 00095 };
00096
<table> 00097 <span class="preprocessor">#endif</span>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> </pre></div><HR>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table> <table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
</BODY> <tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -0,0 +1,62 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>Asymp.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00024 <span class="comment">/***************************************************/</span>
00025
00026 <span class="preprocessor">#ifndef STK_ASYMP_H</span>
00027 <span class="preprocessor"></span><span class="preprocessor">#define STK_ASYMP_H</span>
00028 <span class="preprocessor"></span>
00029 <span class="preprocessor">#include "Envelope.h"</span>
00030
00031 <span class="keyword">const</span> StkFloat TARGET_THRESHOLD = 0.000001;
00032
<a name="l00033"></a><a class="code" href="classAsymp.html">00033</a> <span class="keyword">class </span><a class="code" href="classAsymp.html">Asymp</a> : <span class="keyword">public</span> <a class="code" href="classEnvelope.html">Envelope</a>
00034 {
00035 <span class="keyword">public</span>:
00036
00038 <a class="code" href="classAsymp.html#a0">Asymp</a>(<span class="keywordtype">void</span>);
00039
00041 <a class="code" href="classAsymp.html#a1">~Asymp</a>(<span class="keywordtype">void</span>);
00042
00044 <span class="keywordtype">void</span> <a class="code" href="classAsymp.html#a2">keyOn</a>(<span class="keywordtype">void</span>);
00045
00047 <span class="keywordtype">void</span> <a class="code" href="classAsymp.html#a3">keyOff</a>(<span class="keywordtype">void</span>);
00048
00050
00056 <span class="keywordtype">void</span> <a class="code" href="classAsymp.html#a4">setTau</a>(StkFloat tau);
00057
00059 <span class="keywordtype">void</span> <a class="code" href="classAsymp.html#a5">setTime</a>(StkFloat time);
00060
00062 <span class="keywordtype">void</span> <a class="code" href="classAsymp.html#a6">setTarget</a>(StkFloat target);
00063
00065 StkFloat <a class="code" href="classAsymp.html#a7">tick</a>(<span class="keywordtype">void</span>);
00066
00068 StkFloat *<a class="code" href="classAsymp.html#a7">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00069
00071
00077 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classAsymp.html#a7">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00078
00079 <span class="keyword">protected</span>:
00080 StkFloat factor_;
00081 StkFloat constant_;
00082 };
00083
00084 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,87 +1,96 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>BandedWG.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>BandedWG.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00030 <font class="comment">/***************************************************/</font> 00030 <span class="comment">/***************************************************/</span>
00031 00031
00032 <font class="preprocessor">#if !defined(__BANDEDWG_H)</font> 00032 <span class="preprocessor">#ifndef STK_BANDEDWG_H</span>
00033 <font class="preprocessor"></font><font class="preprocessor">#define __BANDEDWG_H</font> 00033 <span class="preprocessor"></span><span class="preprocessor">#define STK_BANDEDWG_H</span>
00034 <font class="preprocessor"></font> 00034 <span class="preprocessor"></span>
00035 <font class="preprocessor">#define MAX_BANDED_MODES 17</font> 00035 <span class="keyword">const</span> <span class="keywordtype">int</span> MAX_BANDED_MODES = 20;
00036 <font class="preprocessor"></font> 00036
00037 <font class="preprocessor">#include "Instrmnt.h"</font> 00037 <span class="preprocessor">#include "Instrmnt.h"</span>
00038 <font class="preprocessor">#include "Delay.h"</font> 00038 <span class="preprocessor">#include "DelayL.h"</span>
00039 <font class="preprocessor">#include "BowTabl.h"</font> 00039 <span class="preprocessor">#include "BowTable.h"</span>
00040 <font class="preprocessor">#include "ADSR.h"</font> 00040 <span class="preprocessor">#include "ADSR.h"</span>
00041 <font class="preprocessor">#include "BiQuad.h"</font> 00041 <span class="preprocessor">#include "BiQuad.h"</span>
00042 00042
00043 <font class="keyword">class </font><a class="code" href="classBandedWG.html">BandedWG</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00043"></a><a class="code" href="classBandedWG.html">00043</a> <span class="keyword">class </span><a class="code" href="classBandedWG.html">BandedWG</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00044 { 00044 {
00045 <font class="keyword">public</font>: 00045 <span class="keyword">public</span>:
00047 <a class="code" href="classBandedWG.html#a0">BandedWG</a>(); 00047 <a class="code" href="classBandedWG.html#a0">BandedWG</a>();
00048 00048
00050 <a class="code" href="classBandedWG.html#a1">~BandedWG</a>(); 00050 <a class="code" href="classBandedWG.html#a1">~BandedWG</a>();
00051 00051
00053 <font class="keywordtype">void</font> <a class="code" href="classBandedWG.html#a2">clear</a>(); 00053 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a2">clear</a>();
00054 00054
00056 <font class="keywordtype">void</font> <a class="code" href="classBandedWG.html#a3">setStrikePosition</a>(MY_FLOAT position); 00056 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a3">setStrikePosition</a>(StkFloat position);
00057 00057
00059 <font class="keywordtype">void</font> <a class="code" href="classBandedWG.html#a4">setPreset</a>(<font class="keywordtype">int</font> preset); 00059 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a4">setPreset</a>(<span class="keywordtype">int</span> preset);
00060 00060
00062 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00062 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a5">setFrequency</a>(StkFloat frequency);
00063 00063
00065 <font class="keywordtype">void</font> <a class="code" href="classBandedWG.html#a6">startBowing</a>(MY_FLOAT amplitude, MY_FLOAT rate); 00065 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a6">startBowing</a>(StkFloat amplitude, StkFloat rate);
00066 00066
00068 <font class="keywordtype">void</font> <a class="code" href="classBandedWG.html#a7">stopBowing</a>(MY_FLOAT rate); 00068 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a7">stopBowing</a>(StkFloat rate);
00069 00069
00071 <font class="keywordtype">void</font> <a class="code" href="classBandedWG.html#a8">pluck</a>(MY_FLOAT amp); 00071 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a8">pluck</a>(StkFloat amp);
00072 00072
00074 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00074 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a9">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00075 00075
00077 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00077 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a10">noteOff</a>(StkFloat amplitude);
00078 00078
00080 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00080 StkFloat <a class="code" href="classBandedWG.html#a11">tick</a>();
00081 00081
00083 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00083 StkFloat *<a class="code" href="classBandedWG.html#a11">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00084 00084
00085 <font class="keyword">protected</font>:
00086 00086
00087 <font class="keywordtype">bool</font> doPluck; 00092 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classBandedWG.html#a11">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00088 <font class="keywordtype">bool</font> trackVelocity; 00093
00089 <font class="keywordtype">int</font> nModes; 00095 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a14">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00090 <font class="keywordtype">int</font> presetModes; 00096
00091 <a class="code" href="classBowTabl.html">BowTabl</a> *bowTabl; 00097 <span class="keyword">protected</span>:
00092 <a class="code" href="classADSR.html">ADSR</a> *adsr; 00098
00093 <a class="code" href="classBiQuad.html">BiQuad</a> *bandpass; 00099 <span class="keywordtype">bool</span> doPluck_;
00094 <a class="code" href="classDelay.html">Delay</a> *delay; 00100 <span class="keywordtype">bool</span> trackVelocity_;
00095 MY_FLOAT maxVelocity; 00101 <span class="keywordtype">int</span> nModes_;
00096 MY_FLOAT modes[MAX_BANDED_MODES]; 00102 <span class="keywordtype">int</span> presetModes_;
00097 MY_FLOAT freakency; 00103 <a class="code" href="classBowTable.html">BowTable</a> bowTable_;
00098 MY_FLOAT baseGain; 00104 <a class="code" href="classADSR.html">ADSR</a> adsr_;
00099 MY_FLOAT gains[MAX_BANDED_MODES]; 00105 <a class="code" href="classBiQuad.html">BiQuad</a> bandpass_[MAX_BANDED_MODES];
00100 MY_FLOAT integrationConstant; 00106 <a class="code" href="classDelayL.html">DelayL</a> delay_[MAX_BANDED_MODES];
00101 MY_FLOAT bowVelocity; 00107 StkFloat maxVelocity_;
00102 MY_FLOAT bowTarget; 00108 StkFloat modes_[MAX_BANDED_MODES];
00103 MY_FLOAT bowPosition; 00109 StkFloat frequency_;
00104 <font class="keywordtype">int</font> strikePosition; 00110 StkFloat baseGain_;
00105 00111 StkFloat gains_[MAX_BANDED_MODES];
00106 }; 00112 StkFloat basegains_[MAX_BANDED_MODES];
00107 00113 StkFloat excitation_[MAX_BANDED_MODES];
00108 <font class="preprocessor">#endif</font> 00114 StkFloat integrationConstant_;
</font></pre></div><HR> 00115 StkFloat velocityInput_;
00116 StkFloat bowVelocity_;
<table> 00117 StkFloat bowTarget_;
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00118 StkFloat bowPosition_;
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00119 StkFloat strikeAmp_;
</table> 00120 <span class="keywordtype">int</span> strikePosition_;
00121
</BODY> 00122 };
00123
00124 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,41 +1,47 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>BeeThree.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>BeeThree.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00033 <font class="comment">/***************************************************/</font> 00033 <span class="comment">/***************************************************/</span>
00034 00034
00035 <font class="preprocessor">#if !defined(__BEETHREE_H)</font> 00035 <span class="preprocessor">#ifndef STK_BEETHREE_H</span>
00036 <font class="preprocessor"></font><font class="preprocessor">#define __BEETHREE_H</font> 00036 <span class="preprocessor"></span><span class="preprocessor">#define STK_BEETHREE_H</span>
00037 <font class="preprocessor"></font> 00037 <span class="preprocessor"></span>
00038 <font class="preprocessor">#include "FM.h"</font> 00038 <span class="preprocessor">#include "FM.h"</span>
00039 00039
00040 <font class="keyword">class </font><a class="code" href="classBeeThree.html">BeeThree</a> : <font class="keyword">public</font> <a class="code" href="classFM.html">FM</a> <a name="l00040"></a><a class="code" href="classBeeThree.html">00040</a> <span class="keyword">class </span><a class="code" href="classBeeThree.html">BeeThree</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
00041 { 00041 {
00042 <font class="keyword">public</font>: 00042 <span class="keyword">public</span>:
00044 <a class="code" href="classBeeThree.html#a0">BeeThree</a>(); 00044
00045 00047 <a class="code" href="classBeeThree.html#a0">BeeThree</a>();
00047 <a class="code" href="classBeeThree.html#a1">~BeeThree</a>();
00048 00048
00050 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00050 <a class="code" href="classBeeThree.html#a1">~BeeThree</a>();
00051 00051
00053 MY_FLOAT <a class="code" href="classFM.html#a14">tick</a>(); 00053 <span class="keywordtype">void</span> <a class="code" href="classBeeThree.html#a2">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00054 }; 00054
00055 00056 StkFloat <a class="code" href="classBeeThree.html#a3">tick</a>();
00056 <font class="preprocessor">#endif</font> 00057
</font></pre></div><HR> 00059 StkFloat *<a class="code" href="classBeeThree.html#a3">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00060
<table> 00062
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00068 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classBeeThree.html#a3">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00069 };
</table> 00070
00071 <span class="preprocessor">#endif</span>
</BODY> </pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,70 +1,73 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>BiQuad.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>BiQuad.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00013 <font class="comment">/***************************************************/</font> 00013 <span class="comment">/***************************************************/</span>
00014 00014
00015 <font class="preprocessor">#if !defined(__BIQUAD_H)</font> 00015 <span class="preprocessor">#ifndef STK_BIQUAD_H</span>
00016 <font class="preprocessor"></font><font class="preprocessor">#define __BIQUAD_H</font> 00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_BIQUAD_H</span>
00017 <font class="preprocessor"></font> 00017 <span class="preprocessor"></span>
00018 <font class="preprocessor">#include "Filter.h"</font> 00018 <span class="preprocessor">#include "Filter.h"</span>
00019 00019
00020 <font class="keyword">class </font><a class="code" href="classBiQuad.html">BiQuad</a> : <font class="keyword">protected</font> <a class="code" href="classFilter.html">Filter</a> <a name="l00020"></a><a class="code" href="classBiQuad.html">00020</a> <span class="keyword">class </span><a class="code" href="classBiQuad.html">BiQuad</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
00021 { 00021 {
00022 <font class="keyword">public</font>: 00022 <span class="keyword">public</span>:
00023 00023
00025 <a class="code" href="classBiQuad.html#a0">BiQuad</a>(); 00025 <a class="code" href="classBiQuad.html#a0">BiQuad</a>();
00026 00026
00028 <font class="keyword">virtual</font> <a class="code" href="classBiQuad.html#a1">~BiQuad</a>(); 00028 <span class="keyword">virtual</span> <a class="code" href="classBiQuad.html#a1">~BiQuad</a>();
00029 00029
00031 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a3">clear</a>(<font class="keywordtype">void</font>); 00031 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a2">clear</a>(<span class="keywordtype">void</span>);
00032 00032
00034 <font class="keywordtype">void</font> <a class="code" href="classBiQuad.html#a3">setB0</a>(MY_FLOAT b0); 00034 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a3">setB0</a>(StkFloat b0);
00035 00035
00037 <font class="keywordtype">void</font> <a class="code" href="classBiQuad.html#a4">setB1</a>(MY_FLOAT b1); 00037 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a4">setB1</a>(StkFloat b1);
00038 00038
00040 <font class="keywordtype">void</font> <a class="code" href="classBiQuad.html#a5">setB2</a>(MY_FLOAT b2); 00040 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a5">setB2</a>(StkFloat b2);
00041 00041
00043 <font class="keywordtype">void</font> <a class="code" href="classBiQuad.html#a6">setA1</a>(MY_FLOAT a1); 00043 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a6">setA1</a>(StkFloat a1);
00044 00044
00046 <font class="keywordtype">void</font> <a class="code" href="classBiQuad.html#a7">setA2</a>(MY_FLOAT a2); 00046 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a7">setA2</a>(StkFloat a2);
00047 00047
00049 00049
00060 <font class="keywordtype">void</font> <a class="code" href="classBiQuad.html#a8">setResonance</a>(MY_FLOAT frequency, MY_FLOAT radius, <font class="keywordtype">bool</font> normalize = FALSE); 00060 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a8">setResonance</a>(StkFloat frequency, StkFloat radius, <span class="keywordtype">bool</span> normalize = <span class="keyword">false</span>);
00061 00061
00063 00063
00069 <font class="keywordtype">void</font> <a class="code" href="classBiQuad.html#a9">setNotch</a>(MY_FLOAT frequency, MY_FLOAT radius); 00069 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a9">setNotch</a>(StkFloat frequency, StkFloat radius);
00070 00070
00072 00072
00078 <font class="keywordtype">void</font> <a class="code" href="classBiQuad.html#a10">setEqualGainZeroes</a>(); 00078 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a10">setEqualGainZeroes</a>();
00079 00079
00081 00081
00085 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a7">setGain</a>(MY_FLOAT theGain); 00085 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a11">setGain</a>(StkFloat gain);
00086 00086
00088 MY_FLOAT <a class="code" href="classFilter.html#a8">getGain</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00088 StkFloat <a class="code" href="classBiQuad.html#a12">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00089 00089
00091 MY_FLOAT <a class="code" href="classFilter.html#a9">lastOut</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00091 StkFloat <a class="code" href="classBiQuad.html#a13">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00092 00092
00094 MY_FLOAT <a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT sample); 00094 <span class="keyword">virtual</span> StkFloat <a class="code" href="classBiQuad.html#a14">tick</a>(StkFloat sample);
00095 00095
00097 MY_FLOAT *<a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00097 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classBiQuad.html#a14">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00098 }; 00098
00099 00100
00100 <font class="preprocessor">#endif</font> 00106 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classBiQuad.html#a14">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
</font></pre></div><HR> 00107 };
00108
<table> 00109 <span class="preprocessor">#endif</span>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> </pre></div><HR>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table> <table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
</BODY> <tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,72 +1,78 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>BlowBotl.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>BlowBotl.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00017 <font class="comment">/***************************************************/</font> 00017 <span class="comment">/***************************************************/</span>
00018 00018
00019 <font class="preprocessor">#if !defined(__BOTTLE_H)</font> 00019 <span class="preprocessor">#ifndef STK_BLOWBOTL_H</span>
00020 <font class="preprocessor"></font><font class="preprocessor">#define __BOTTLE_H</font> 00020 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLOWBOTL_H</span>
00021 <font class="preprocessor"></font> 00021 <span class="preprocessor"></span>
00022 <font class="preprocessor">#include "Instrmnt.h"</font> 00022 <span class="preprocessor">#include "Instrmnt.h"</span>
00023 <font class="preprocessor">#include "JetTabl.h"</font> 00023 <span class="preprocessor">#include "JetTable.h"</span>
00024 <font class="preprocessor">#include "BiQuad.h"</font> 00024 <span class="preprocessor">#include "BiQuad.h"</span>
00025 <font class="preprocessor">#include "PoleZero.h"</font> 00025 <span class="preprocessor">#include "PoleZero.h"</span>
00026 <font class="preprocessor">#include "Noise.h"</font> 00026 <span class="preprocessor">#include "Noise.h"</span>
00027 <font class="preprocessor">#include "ADSR.h"</font> 00027 <span class="preprocessor">#include "ADSR.h"</span>
00028 <font class="preprocessor">#include "WaveLoop.h"</font> 00028 <span class="preprocessor">#include "WaveLoop.h"</span>
00029 00029
00030 <font class="keyword">class </font><a class="code" href="classBlowBotl.html">BlowBotl</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00030"></a><a class="code" href="classBlowBotl.html">00030</a> <span class="keyword">class </span><a class="code" href="classBlowBotl.html">BlowBotl</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00031 { 00031 {
00032 <font class="keyword">public</font>: 00032 <span class="keyword">public</span>:
00034 <a class="code" href="classBlowBotl.html#a0">BlowBotl</a>(); 00034
00035 00037 <a class="code" href="classBlowBotl.html#a0">BlowBotl</a>();
00037 <a class="code" href="classBlowBotl.html#a1">~BlowBotl</a>();
00038 00038
00040 <font class="keywordtype">void</font> <a class="code" href="classBlowBotl.html#a2">clear</a>(); 00040 <a class="code" href="classBlowBotl.html#a1">~BlowBotl</a>();
00041 00041
00043 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00043 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a2">clear</a>();
00044 00044
00046 <font class="keywordtype">void</font> <a class="code" href="classBlowBotl.html#a4">startBlowing</a>(MY_FLOAT amplitude, MY_FLOAT rate); 00046 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a3">setFrequency</a>(StkFloat frequency);
00047 00047
00049 <font class="keywordtype">void</font> <a class="code" href="classBlowBotl.html#a5">stopBlowing</a>(MY_FLOAT rate); 00049 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a4">startBlowing</a>(StkFloat amplitude, StkFloat rate);
00050 00050
00052 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00052 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a5">stopBlowing</a>(StkFloat rate);
00053 00053
00055 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00055 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a6">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00056 00056
00058 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00058 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a7">noteOff</a>(StkFloat amplitude);
00059 00059
00061 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00061 StkFloat <a class="code" href="classBlowBotl.html#a8">tick</a>();
00062 00062
00063 <font class="keyword">protected</font>: 00064 StkFloat *<a class="code" href="classBlowBotl.html#a8">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00064 <a class="code" href="classJetTabl.html">JetTabl</a> *jetTable; 00065
00065 <a class="code" href="classBiQuad.html">BiQuad</a> *resonator; 00067
00066 <a class="code" href="classPoleZero.html">PoleZero</a> *dcBlock; 00073 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classBlowBotl.html#a8">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00067 <a class="code" href="classNoise.html">Noise</a> *noise;
00068 <a class="code" href="classADSR.html">ADSR</a> *adsr;
00069 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato;
00070 MY_FLOAT maxPressure;
00071 MY_FLOAT noiseGain;
00072 MY_FLOAT vibratoGain;
00073 MY_FLOAT outputGain;
00074 00074
00075 }; 00076 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a11">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00076 00077
00077 <font class="preprocessor">#endif</font> 00078 <span class="keyword">protected</span>:
</font></pre></div><HR> 00079 <a class="code" href="classJetTable.html">JetTable</a> jetTable_;
00080 <a class="code" href="classBiQuad.html">BiQuad</a> resonator_;
<table> 00081 <a class="code" href="classPoleZero.html">PoleZero</a> dcBlock_;
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00082 <a class="code" href="classNoise.html">Noise</a> noise_;
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00083 <a class="code" href="classADSR.html">ADSR</a> adsr_;
</table> 00084 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato_;
00085 StkFloat maxPressure_;
</BODY> 00086 StkFloat noiseGain_;
00087 StkFloat vibratoGain_;
00088 StkFloat outputGain_;
00089
00090 };
00091
00092 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,84 +1,88 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>BlowHole.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>BlowHole.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00034 <font class="comment">/***************************************************/</font> 00034 <span class="comment">/***************************************************/</span>
00035 00035
00036 <font class="preprocessor">#if !defined(__BLOWHOLE_H)</font> 00036 <span class="preprocessor">#ifndef STK_BLOWHOLE_H</span>
00037 <font class="preprocessor"></font><font class="preprocessor">#define __BLOWHOLE_H</font> 00037 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLOWHOLE_H</span>
00038 <font class="preprocessor"></font> 00038 <span class="preprocessor"></span>
00039 <font class="preprocessor">#include "Instrmnt.h"</font> 00039 <span class="preprocessor">#include "Instrmnt.h"</span>
00040 <font class="preprocessor">#include "DelayL.h"</font> 00040 <span class="preprocessor">#include "DelayL.h"</span>
00041 <font class="preprocessor">#include "ReedTabl.h"</font> 00041 <span class="preprocessor">#include "ReedTable.h"</span>
00042 <font class="preprocessor">#include "OneZero.h"</font> 00042 <span class="preprocessor">#include "OneZero.h"</span>
00043 <font class="preprocessor">#include "PoleZero.h"</font> 00043 <span class="preprocessor">#include "PoleZero.h"</span>
00044 <font class="preprocessor">#include "Envelope.h"</font> 00044 <span class="preprocessor">#include "Envelope.h"</span>
00045 <font class="preprocessor">#include "Noise.h"</font> 00045 <span class="preprocessor">#include "Noise.h"</span>
00046 <font class="preprocessor">#include "WaveLoop.h"</font> 00046 <span class="preprocessor">#include "WaveLoop.h"</span>
00047 00047
00048 <font class="keyword">class </font><a class="code" href="classBlowHole.html">BlowHole</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00048"></a><a class="code" href="classBlowHole.html">00048</a> <span class="keyword">class </span><a class="code" href="classBlowHole.html">BlowHole</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00049 { 00049 {
00050 <font class="keyword">public</font>: 00050 <span class="keyword">public</span>:
00052 <a class="code" href="classBlowHole.html#a0">BlowHole</a>(MY_FLOAT lowestFrequency); 00052
00053 00055 <a class="code" href="classBlowHole.html#a0">BlowHole</a>(StkFloat lowestFrequency);
00055 <a class="code" href="classBlowHole.html#a1">~BlowHole</a>();
00056 00056
00058 <font class="keywordtype">void</font> <a class="code" href="classBlowHole.html#a2">clear</a>(); 00058 <a class="code" href="classBlowHole.html#a1">~BlowHole</a>();
00059 00059
00061 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00061 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a2">clear</a>();
00062 00062
00064 <font class="keywordtype">void</font> <a class="code" href="classBlowHole.html#a4">setTonehole</a>(MY_FLOAT newValue); 00064 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a3">setFrequency</a>(StkFloat frequency);
00065 00065
00067 <font class="keywordtype">void</font> <a class="code" href="classBlowHole.html#a5">setVent</a>(MY_FLOAT newValue); 00067 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a4">setTonehole</a>(StkFloat newValue);
00068 00068
00070 <font class="keywordtype">void</font> <a class="code" href="classBlowHole.html#a6">startBlowing</a>(MY_FLOAT amplitude, MY_FLOAT rate); 00070 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a5">setVent</a>(StkFloat newValue);
00071 00071
00073 <font class="keywordtype">void</font> <a class="code" href="classBlowHole.html#a7">stopBlowing</a>(MY_FLOAT rate); 00073 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a6">startBlowing</a>(StkFloat amplitude, StkFloat rate);
00074 00074
00076 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00076 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a7">stopBlowing</a>(StkFloat rate);
00077 00077
00079 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00079 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a8">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00080 00080
00082 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00082 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a9">noteOff</a>(StkFloat amplitude);
00083 00083
00085 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00085 StkFloat <a class="code" href="classBlowHole.html#a10">tick</a>();
00086 00086
00087 <font class="keyword">protected</font>: 00088 StkFloat *<a class="code" href="classBlowHole.html#a10">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00088 <a class="code" href="classDelayL.html">DelayL</a> *delays[3]; 00089
00089 <a class="code" href="classReedTabl.html">ReedTabl</a> *reedTable; 00091
00090 <a class="code" href="classOneZero.html">OneZero</a> *filter; 00097 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classBlowHole.html#a10">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00091 <a class="code" href="classPoleZero.html">PoleZero</a> *tonehole; 00098
00092 <a class="code" href="classPoleZero.html">PoleZero</a> *vent; 00100 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a13">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00093 <a class="code" href="classEnvelope.html">Envelope</a> *envelope; 00101
00094 <a class="code" href="classNoise.html">Noise</a> *noise; 00102 <span class="keyword">protected</span>:
00095 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato; 00103 <a class="code" href="classDelayL.html">DelayL</a> delays_[3];
00096 <font class="keywordtype">long</font> length; 00104 <a class="code" href="classReedTable.html">ReedTable</a> reedTable_;
00097 MY_FLOAT scatter; 00105 <a class="code" href="classOneZero.html">OneZero</a> filter_;
00098 MY_FLOAT th_coeff; 00106 <a class="code" href="classPoleZero.html">PoleZero</a> tonehole_;
00099 MY_FLOAT r_th; 00107 <a class="code" href="classPoleZero.html">PoleZero</a> vent_;
00100 MY_FLOAT rh_coeff; 00108 <a class="code" href="classEnvelope.html">Envelope</a> envelope_;
00101 MY_FLOAT rh_gain; 00109 <a class="code" href="classNoise.html">Noise</a> noise_;
00102 MY_FLOAT outputGain; 00110 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato_;
00103 MY_FLOAT noiseGain; 00111 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
00104 MY_FLOAT vibratoGain; 00112 StkFloat scatter_;
00105 00113 StkFloat thCoeff_;
00106 }; 00114 StkFloat rhGain_;
00107 00115 StkFloat outputGain_;
00108 <font class="preprocessor">#endif</font> 00116 StkFloat noiseGain_;
</font></pre></div><HR> 00117 StkFloat vibratoGain_;
00118
<table> 00119 };
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00120
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00121 <span class="preprocessor">#endif</span>
</table> </pre></div><HR>
</BODY> <table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,56 +0,0 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.2.8.1 -->
<h1>BowTabl.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font>
00010 <font class="comment">/***************************************************/</font>
00011
00012 <font class="preprocessor">#if !defined(__BOWTABL_H)</font>
00013 <font class="preprocessor"></font><font class="preprocessor">#define __BOWTABL_H</font>
00014 <font class="preprocessor"></font>
00015 <font class="preprocessor">#include "Stk.h"</font>
00016
00017 <font class="keyword">class </font><a class="code" href="classBowTabl.html">BowTabl</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a>
00018 {
00019 <font class="keyword">public</font>:
00021 <a class="code" href="classBowTabl.html#a0">BowTabl</a>();
00022
00024 <a class="code" href="classBowTabl.html#a1">~BowTabl</a>();
00025
00027
00033 <font class="keywordtype">void</font> <a class="code" href="classBowTabl.html#a2">setOffset</a>(MY_FLOAT aValue);
00034
00036
00040 <font class="keywordtype">void</font> <a class="code" href="classBowTabl.html#a3">setSlope</a>(MY_FLOAT aValue);
00041
00043 MY_FLOAT <a class="code" href="classBowTabl.html#a4">lastOut</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>;
00044
00046
00050 MY_FLOAT <a class="code" href="classBowTabl.html#a5">tick</a>(<font class="keyword">const</font> MY_FLOAT input);
00051
00053 MY_FLOAT *<a class="code" href="classBowTabl.html#a5">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize);
00054
00055 <font class="keyword">protected</font>:
00056 MY_FLOAT offSet;
00057 MY_FLOAT slope;
00058 MY_FLOAT lastOutput;
00059
00060 };
00061
00062 <font class="preprocessor">#endif</font>
</font></pre></div><HR>
<table>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -0,0 +1,56 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>BowTable.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00010 <span class="comment">/***************************************************/</span>
00011
00012 <span class="preprocessor">#ifndef STK_BOWTABL_H</span>
00013 <span class="preprocessor"></span><span class="preprocessor">#define STK_BOWTABL_H</span>
00014 <span class="preprocessor"></span>
00015 <span class="preprocessor">#include "Function.h"</span>
00016
<a name="l00017"></a><a class="code" href="classBowTable.html">00017</a> <span class="keyword">class </span><a class="code" href="classBowTable.html">BowTable</a> : <span class="keyword">public</span> <a class="code" href="classFunction.html">Function</a>
00018 {
00019 <span class="keyword">public</span>:
00021 <a class="code" href="classBowTable.html#a0">BowTable</a>();
00022
00024 <a class="code" href="classBowTable.html#a1">~BowTable</a>();
00025
00027
00033 <span class="keywordtype">void</span> <a class="code" href="classBowTable.html#a2">setOffset</a>(StkFloat offset);
00034
00036
00040 <span class="keywordtype">void</span> <a class="code" href="classBowTable.html#a3">setSlope</a>(StkFloat slope);
00041
00043
00047 StkFloat <a class="code" href="classBowTable.html#a4">tick</a>( StkFloat input);
00048
00050 StkFloat *<a class="code" href="classBowTable.html#a4">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00051
00053
00059 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classBowTable.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00060
00061 <span class="keyword">protected</span>:
00062 StkFloat offset_;
00063 StkFloat slope_;
00064
00065 };
00066
00067 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,75 +1,80 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Bowed.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Bowed.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00022 <font class="comment">/***************************************************/</font> 00022 <span class="comment">/***************************************************/</span>
00023 00023
00024 <font class="preprocessor">#if !defined(__BOWED_H)</font> 00024 <span class="preprocessor">#ifndef STK_BOWED_H</span>
00025 <font class="preprocessor"></font><font class="preprocessor">#define __BOWED_H</font> 00025 <span class="preprocessor"></span><span class="preprocessor">#define STK_BOWED_H</span>
00026 <font class="preprocessor"></font> 00026 <span class="preprocessor"></span>
00027 <font class="preprocessor">#include "Instrmnt.h"</font> 00027 <span class="preprocessor">#include "Instrmnt.h"</span>
00028 <font class="preprocessor">#include "DelayL.h"</font> 00028 <span class="preprocessor">#include "DelayL.h"</span>
00029 <font class="preprocessor">#include "BowTabl.h"</font> 00029 <span class="preprocessor">#include "BowTable.h"</span>
00030 <font class="preprocessor">#include "OnePole.h"</font> 00030 <span class="preprocessor">#include "OnePole.h"</span>
00031 <font class="preprocessor">#include "BiQuad.h"</font> 00031 <span class="preprocessor">#include "BiQuad.h"</span>
00032 <font class="preprocessor">#include "WaveLoop.h"</font> 00032 <span class="preprocessor">#include "WaveLoop.h"</span>
00033 <font class="preprocessor">#include "ADSR.h"</font> 00033 <span class="preprocessor">#include "ADSR.h"</span>
00034 00034
00035 <font class="keyword">class </font><a class="code" href="classBowed.html">Bowed</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00035"></a><a class="code" href="classBowed.html">00035</a> <span class="keyword">class </span><a class="code" href="classBowed.html">Bowed</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00036 { 00036 {
00037 <font class="keyword">public</font>: 00037 <span class="keyword">public</span>:
00039 <a class="code" href="classBowed.html#a0">Bowed</a>(MY_FLOAT lowestFrequency); 00039 <a class="code" href="classBowed.html#a0">Bowed</a>(StkFloat lowestFrequency);
00040 00040
00042 <a class="code" href="classBowed.html#a1">~Bowed</a>(); 00042 <a class="code" href="classBowed.html#a1">~Bowed</a>();
00043 00043
00045 <font class="keywordtype">void</font> <a class="code" href="classBowed.html#a2">clear</a>(); 00045 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a2">clear</a>();
00046 00046
00048 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00048 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a3">setFrequency</a>(StkFloat frequency);
00049 00049
00051 <font class="keywordtype">void</font> <a class="code" href="classBowed.html#a4">setVibrato</a>(MY_FLOAT gain); 00051 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a4">setVibrato</a>(StkFloat gain);
00052 00052
00054 <font class="keywordtype">void</font> <a class="code" href="classBowed.html#a5">startBowing</a>(MY_FLOAT amplitude, MY_FLOAT rate); 00054 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a5">startBowing</a>(StkFloat amplitude, StkFloat rate);
00055 00055
00057 <font class="keywordtype">void</font> <a class="code" href="classBowed.html#a6">stopBowing</a>(MY_FLOAT rate); 00057 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a6">stopBowing</a>(StkFloat rate);
00058 00058
00060 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00060 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a7">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00061 00061
00063 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00063 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a8">noteOff</a>(StkFloat amplitude);
00064 00064
00066 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00066 StkFloat <a class="code" href="classBowed.html#a9">tick</a>();
00067 00067
00069 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00069 StkFloat *<a class="code" href="classBowed.html#a9">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00070 00070
00071 <font class="keyword">protected</font>: 00072
00072 <a class="code" href="classDelayL.html">DelayL</a> *neckDelay; 00078 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classBowed.html#a9">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00073 <a class="code" href="classDelayL.html">DelayL</a> *bridgeDelay; 00079
00074 <a class="code" href="classBowTabl.html">BowTabl</a> *bowTable; 00081 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a12">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00075 <a class="code" href="classOnePole.html">OnePole</a> *stringFilter; 00082
00076 <a class="code" href="classBiQuad.html">BiQuad</a> *bodyFilter; 00083 <span class="keyword">protected</span>:
00077 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato; 00084 <a class="code" href="classDelayL.html">DelayL</a> neckDelay_;
00078 <a class="code" href="classADSR.html">ADSR</a> *adsr; 00085 <a class="code" href="classDelayL.html">DelayL</a> bridgeDelay_;
00079 MY_FLOAT maxVelocity; 00086 <a class="code" href="classBowTable.html">BowTable</a> bowTable_;
00080 MY_FLOAT baseDelay; 00087 <a class="code" href="classOnePole.html">OnePole</a> stringFilter_;
00081 MY_FLOAT vibratoGain; 00088 <a class="code" href="classBiQuad.html">BiQuad</a> bodyFilter_;
00082 MY_FLOAT betaRatio; 00089 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato_;
00083 00090 <a class="code" href="classADSR.html">ADSR</a> adsr_;
00084 }; 00091 StkFloat maxVelocity_;
00085 00092 StkFloat baseDelay_;
00086 <font class="preprocessor">#endif</font> 00093 StkFloat vibratoGain_;
</font></pre></div><HR> 00094 StkFloat betaRatio_;
00095
<table> 00096 };
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00097
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00098 <span class="preprocessor">#endif</span>
</table> </pre></div><HR>
</BODY> <table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,73 +1,79 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Brass.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Brass.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00021 <font class="comment">/***************************************************/</font> 00021 <span class="comment">/***************************************************/</span>
00022 00022
00023 <font class="preprocessor">#if !defined(__BRASS_H)</font> 00023 <span class="preprocessor">#ifndef STK_BRASS_H</span>
00024 <font class="preprocessor"></font><font class="preprocessor">#define __BRASS_H</font> 00024 <span class="preprocessor"></span><span class="preprocessor">#define STK_BRASS_H</span>
00025 <font class="preprocessor"></font> 00025 <span class="preprocessor"></span>
00026 <font class="preprocessor">#include "Instrmnt.h"</font> 00026 <span class="preprocessor">#include "Instrmnt.h"</span>
00027 <font class="preprocessor">#include "DelayA.h"</font> 00027 <span class="preprocessor">#include "DelayA.h"</span>
00028 <font class="preprocessor">#include "BiQuad.h"</font> 00028 <span class="preprocessor">#include "BiQuad.h"</span>
00029 <font class="preprocessor">#include "PoleZero.h"</font> 00029 <span class="preprocessor">#include "PoleZero.h"</span>
00030 <font class="preprocessor">#include "ADSR.h"</font> 00030 <span class="preprocessor">#include "ADSR.h"</span>
00031 <font class="preprocessor">#include "WaveLoop.h"</font> 00031 <span class="preprocessor">#include "WaveLoop.h"</span>
00032 00032
00033 <font class="keyword">class </font><a class="code" href="classBrass.html">Brass</a>: <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00033"></a><a class="code" href="classBrass.html">00033</a> <span class="keyword">class </span><a class="code" href="classBrass.html">Brass</a>: <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00034 { 00034 {
00035 <font class="keyword">public</font>: 00035 <span class="keyword">public</span>:
00037 <a class="code" href="classBrass.html#a0">Brass</a>(MY_FLOAT lowestFrequency); 00037
00038 00040 <a class="code" href="classBrass.html#a0">Brass</a>(StkFloat lowestFrequency);
00040 <a class="code" href="classBrass.html#a1">~Brass</a>();
00041 00041
00043 <font class="keywordtype">void</font> <a class="code" href="classBrass.html#a2">clear</a>(); 00043 <a class="code" href="classBrass.html#a1">~Brass</a>();
00044 00044
00046 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00046 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a2">clear</a>();
00047 00047
00049 <font class="keywordtype">void</font> <a class="code" href="classBrass.html#a4">setLip</a>(MY_FLOAT frequency); 00049 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a3">setFrequency</a>(StkFloat frequency);
00050 00050
00052 <font class="keywordtype">void</font> <a class="code" href="classBrass.html#a5">startBlowing</a>(MY_FLOAT amplitude,MY_FLOAT rate); 00052 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a4">setLip</a>(StkFloat frequency);
00053 00053
00055 <font class="keywordtype">void</font> <a class="code" href="classBrass.html#a6">stopBlowing</a>(MY_FLOAT rate); 00055 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a5">startBlowing</a>(StkFloat amplitude, StkFloat rate);
00056 00056
00058 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00058 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a6">stopBlowing</a>(StkFloat rate);
00059 00059
00061 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00061 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a7">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00062 00062
00064 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00064 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a8">noteOff</a>(StkFloat amplitude);
00065 00065
00067 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00067 StkFloat <a class="code" href="classBrass.html#a9">tick</a>();
00068 00068
00069 <font class="keyword">protected</font>: 00070 StkFloat *<a class="code" href="classBrass.html#a9">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00070 <a class="code" href="classDelayA.html">DelayA</a> *delayLine; 00071
00071 <a class="code" href="classBiQuad.html">BiQuad</a> *lipFilter; 00073
00072 <a class="code" href="classPoleZero.html">PoleZero</a> *dcBlock; 00079 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classBrass.html#a9">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00073 <a class="code" href="classADSR.html">ADSR</a> *adsr;
00074 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato;
00075 <font class="keywordtype">long</font> length;
00076 MY_FLOAT lipTarget;
00077 MY_FLOAT slideTarget;
00078 MY_FLOAT vibratoGain;
00079 MY_FLOAT maxPressure;
00080 00080
00081 }; 00082 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a12">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00082 00083
00083 <font class="preprocessor">#endif</font> 00084 <span class="keyword">protected</span>:
</font></pre></div><HR> 00085 <a class="code" href="classDelayA.html">DelayA</a> delayLine_;
00086 <a class="code" href="classBiQuad.html">BiQuad</a> lipFilter_;
<table> 00087 <a class="code" href="classPoleZero.html">PoleZero</a> dcBlock_;
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00088 <a class="code" href="classADSR.html">ADSR</a> adsr_;
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00089 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato_;
</table> 00090 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
00091 StkFloat lipTarget_;
</BODY> 00092 StkFloat slideTarget_;
00093 StkFloat vibratoGain_;
00094 StkFloat maxPressure_;
00095
00096 };
00097
00098 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,67 +1,61 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Chorus.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Chorus.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00009 <font class="comment">/***************************************************/</font> 00009 <span class="comment">/***************************************************/</span>
00010 00010
00011 <font class="preprocessor">#if !defined(__CHORUS_H)</font> 00011 <span class="preprocessor">#ifndef STK_CHORUS_H</span>
00012 <font class="preprocessor"></font><font class="preprocessor">#define __CHORUS_H</font> 00012 <span class="preprocessor"></span><span class="preprocessor">#define STK_CHORUS_H</span>
00013 <font class="preprocessor"></font> 00013 <span class="preprocessor"></span>
00014 <font class="preprocessor">#include "Stk.h"</font> 00014 <span class="preprocessor">#include "Effect.h"</span>
00015 <font class="preprocessor">#include "DelayL.h"</font> 00015 <span class="preprocessor">#include "DelayL.h"</span>
00016 <font class="preprocessor">#include "WaveLoop.h"</font> 00016 <span class="preprocessor">#include "WaveLoop.h"</span>
00017 00017
00018 <font class="keyword">class </font><a class="code" href="classChorus.html">Chorus</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a> <a name="l00018"></a><a class="code" href="classChorus.html">00018</a> <span class="keyword">class </span><a class="code" href="classChorus.html">Chorus</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
00019 { 00019 {
00020 <font class="keyword">public</font>: 00020 <span class="keyword">public</span>:
00022 <a class="code" href="classChorus.html#a0">Chorus</a>(MY_FLOAT baseDelay); 00022
00023 00025 <a class="code" href="classChorus.html#a0">Chorus</a>( StkFloat baseDelay = 6000 );
00025 <a class="code" href="classChorus.html#a1">~Chorus</a>();
00026 00026
00028 <font class="keywordtype">void</font> <a class="code" href="classChorus.html#a2">clear</a>(); 00028 <a class="code" href="classChorus.html#a1">~Chorus</a>();
00029 00029
00031 <font class="keywordtype">void</font> <a class="code" href="classChorus.html#a3">setModDepth</a>(MY_FLOAT depth); 00031 <span class="keywordtype">void</span> <a class="code" href="classChorus.html#a2">clear</a>();
00032 00032
00034 <font class="keywordtype">void</font> <a class="code" href="classChorus.html#a4">setModFrequency</a>(MY_FLOAT frequency); 00034 <span class="keywordtype">void</span> <a class="code" href="classChorus.html#a3">setModDepth</a>(StkFloat depth);
00035 00035
00037 <font class="keywordtype">void</font> <a class="code" href="classChorus.html#a5">setEffectMix</a>(MY_FLOAT mix); 00037 <span class="keywordtype">void</span> <a class="code" href="classChorus.html#a4">setModFrequency</a>(StkFloat frequency);
00038 00038
00040 MY_FLOAT <a class="code" href="classChorus.html#a6">lastOut</a>() <font class="keyword">const</font>; 00040 StkFloat <a class="code" href="classChorus.html#a5">tick</a>(StkFloat input);
00041 00041
00043 MY_FLOAT <a class="code" href="classChorus.html#a7">lastOutLeft</a>() <font class="keyword">const</font>; 00043 StkFloat *<a class="code" href="classChorus.html#a5">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00044 00044
00046 MY_FLOAT <a class="code" href="classChorus.html#a8">lastOutRight</a>() <font class="keyword">const</font>; 00046
00047 00052 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classChorus.html#a5">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00049 MY_FLOAT <a class="code" href="classChorus.html#a9">tick</a>(MY_FLOAT input);
00050
00052 MY_FLOAT *<a class="code" href="classChorus.html#a9">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize);
00053 00053
00054 <font class="keyword">protected</font>: 00054 <span class="keyword">protected</span>:
00055 <a class="code" href="classDelayL.html">DelayL</a> *delayLine[2]; 00055 <a class="code" href="classDelayL.html">DelayL</a> delayLine_[2];
00056 <a class="code" href="classWaveLoop.html">WaveLoop</a> *mods[2]; 00056 <a class="code" href="classWaveLoop.html">WaveLoop</a> *mods_[2];
00057 MY_FLOAT baseLength; 00057 StkFloat baseLength_;
00058 MY_FLOAT modDepth; 00058 StkFloat modDepth_;
00059 MY_FLOAT lastOutput[2]; 00059
00060 MY_FLOAT effectMix; 00060 };
00061 00061
00062 }; 00062 <span class="preprocessor">#endif</span>
00063 00063 <span class="preprocessor"></span>
00064 <font class="preprocessor">#endif</font> </pre></div><HR>
00065 <font class="preprocessor"></font>
</pre></div><HR> <table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<table> <tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> </table>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table> </BODY>
</BODY>
</HTML> </HTML>

View File

@@ -1,72 +1,78 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Clarinet.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Clarinet.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00023 <font class="comment">/***************************************************/</font> 00023 <span class="comment">/***************************************************/</span>
00024 00024
00025 <font class="preprocessor">#if !defined(__CLARINET_H)</font> 00025 <span class="preprocessor">#ifndef STK_CLARINET_H</span>
00026 <font class="preprocessor"></font><font class="preprocessor">#define __CLARINET_H</font> 00026 <span class="preprocessor"></span><span class="preprocessor">#define STK_CLARINET_H</span>
00027 <font class="preprocessor"></font> 00027 <span class="preprocessor"></span>
00028 <font class="preprocessor">#include "Instrmnt.h"</font> 00028 <span class="preprocessor">#include "Instrmnt.h"</span>
00029 <font class="preprocessor">#include "DelayL.h"</font> 00029 <span class="preprocessor">#include "DelayL.h"</span>
00030 <font class="preprocessor">#include "ReedTabl.h"</font> 00030 <span class="preprocessor">#include "ReedTable.h"</span>
00031 <font class="preprocessor">#include "OneZero.h"</font> 00031 <span class="preprocessor">#include "OneZero.h"</span>
00032 <font class="preprocessor">#include "Envelope.h"</font> 00032 <span class="preprocessor">#include "Envelope.h"</span>
00033 <font class="preprocessor">#include "Noise.h"</font> 00033 <span class="preprocessor">#include "Noise.h"</span>
00034 <font class="preprocessor">#include "WaveLoop.h"</font> 00034 <span class="preprocessor">#include "WaveLoop.h"</span>
00035 00035
00036 <font class="keyword">class </font><a class="code" href="classClarinet.html">Clarinet</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00036"></a><a class="code" href="classClarinet.html">00036</a> <span class="keyword">class </span><a class="code" href="classClarinet.html">Clarinet</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00037 { 00037 {
00038 <font class="keyword">public</font>: 00038 <span class="keyword">public</span>:
00040 <a class="code" href="classClarinet.html#a0">Clarinet</a>(MY_FLOAT lowestFrequency); 00040
00041 00043 <a class="code" href="classClarinet.html#a0">Clarinet</a>(StkFloat lowestFrequency);
00043 <a class="code" href="classClarinet.html#a1">~Clarinet</a>();
00044 00044
00046 <font class="keywordtype">void</font> <a class="code" href="classClarinet.html#a2">clear</a>(); 00046 <a class="code" href="classClarinet.html#a1">~Clarinet</a>();
00047 00047
00049 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00049 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a2">clear</a>();
00050 00050
00052 <font class="keywordtype">void</font> <a class="code" href="classClarinet.html#a4">startBlowing</a>(MY_FLOAT amplitude, MY_FLOAT rate); 00052 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a3">setFrequency</a>(StkFloat frequency);
00053 00053
00055 <font class="keywordtype">void</font> <a class="code" href="classClarinet.html#a5">stopBlowing</a>(MY_FLOAT rate); 00055 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a4">startBlowing</a>(StkFloat amplitude, StkFloat rate);
00056 00056
00058 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00058 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a5">stopBlowing</a>(StkFloat rate);
00059 00059
00061 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00061 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a6">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00062 00062
00064 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00064 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a7">noteOff</a>(StkFloat amplitude);
00065 00065
00067 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00067 StkFloat <a class="code" href="classClarinet.html#a8">tick</a>();
00068 00068
00069 <font class="keyword">protected</font>: 00070 StkFloat *<a class="code" href="classClarinet.html#a8">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00070 <a class="code" href="classDelayL.html">DelayL</a> *delayLine; 00071
00071 <a class="code" href="classReedTabl.html">ReedTabl</a> *reedTable; 00073
00072 <a class="code" href="classOneZero.html">OneZero</a> *filter; 00079 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classClarinet.html#a8">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00073 <a class="code" href="classEnvelope.html">Envelope</a> *envelope;
00074 <a class="code" href="classNoise.html">Noise</a> *noise;
00075 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato;
00076 <font class="keywordtype">long</font> length;
00077 MY_FLOAT outputGain;
00078 MY_FLOAT noiseGain;
00079 MY_FLOAT vibratoGain;
00080 00080
00081 }; 00082 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a11">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00082 00083
00083 <font class="preprocessor">#endif</font> 00084 <span class="keyword">protected</span>:
</font></pre></div><HR> 00085 <a class="code" href="classDelayL.html">DelayL</a> delayLine_;
00086 <a class="code" href="classReedTable.html">ReedTable</a> reedTable_;
<table> 00087 <a class="code" href="classOneZero.html">OneZero</a> filter_;
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00088 <a class="code" href="classEnvelope.html">Envelope</a> envelope_;
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00089 <a class="code" href="classNoise.html">Noise</a> noise_;
</table> 00090 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato_;
00091 <span class="keywordtype">long</span> length_;
</BODY> 00092 StkFloat outputGain_;
00093 StkFloat noiseGain_;
00094 StkFloat vibratoGain_;
00095
00096 };
00097
00098 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,55 +1,65 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>DelayA.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>DelayA.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00023 <font class="comment">/***************************************************/</font> 00023 <span class="comment">/***************************************************/</span>
00024 00024
00025 <font class="preprocessor">#if !defined(__DelayA_h)</font> 00025 <span class="preprocessor">#ifndef STK_DELAYA_H</span>
00026 <font class="preprocessor"></font><font class="preprocessor">#define __DelayA_h</font> 00026 <span class="preprocessor"></span><span class="preprocessor">#define STK_DELAYA_H</span>
00027 <font class="preprocessor"></font> 00027 <span class="preprocessor"></span>
00028 <font class="preprocessor">#include "Delay.h"</font> 00028 <span class="preprocessor">#include "Delay.h"</span>
00029 00029
00030 <font class="keyword">class </font><a class="code" href="classDelayA.html">DelayA</a> : <font class="keyword">public</font> <a class="code" href="classDelay.html">Delay</a> <a name="l00030"></a><a class="code" href="classDelayA.html">00030</a> <span class="keyword">class </span><a class="code" href="classDelayA.html">DelayA</a> : <span class="keyword">public</span> <a class="code" href="classDelay.html">Delay</a>
00031 { 00031 {
00032 <font class="keyword">public</font>: 00032 <span class="keyword">public</span>:
00033 00033
00035 <a class="code" href="classDelayA.html#a0">DelayA</a>(); 00035 <a class="code" href="classDelayA.html#a0">DelayA</a>();
00036 00036
00038 00038
00039 <a class="code" href="classDelayA.html#a0">DelayA</a>(MY_FLOAT theDelay, <font class="keywordtype">long</font> maxDelay); 00043 <a class="code" href="classDelayA.html#a0">DelayA</a>(StkFloat delay, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxDelay);
00040 00044
00042 <a class="code" href="classDelayA.html#a2">~DelayA</a>(); 00046 <a class="code" href="classDelayA.html#a2">~DelayA</a>();
00043 00047
00045 <font class="keywordtype">void</font> <a class="code" href="classDelay.html#a3">clear</a>(); 00049 <span class="keywordtype">void</span> <a class="code" href="classDelayA.html#a3">clear</a>();
00046 00050
00048
00051 <font class="keywordtype">void</font> <a class="code" href="classDelay.html#a4">setDelay</a>(MY_FLOAT theDelay);
00052 00052
00054 MY_FLOAT <a class="code" href="classDelay.html#a5">getDelay</a>(<font class="keywordtype">void</font>); 00055 <span class="keywordtype">void</span> <a class="code" href="classDelayA.html#a4">setDelay</a>(StkFloat delay);
00055 00056
00057 MY_FLOAT <a class="code" href="classDelay.html#a9">tick</a>(MY_FLOAT sample); 00058 StkFloat <a class="code" href="classDelayA.html#a5">getDelay</a>(<span class="keywordtype">void</span>);
00058 00059
00059 <font class="keyword">protected</font>: 00061
00060 MY_FLOAT alpha; 00064 StkFloat <a class="code" href="classDelayA.html#a6">nextOut</a>(<span class="keywordtype">void</span>);
00061 MY_FLOAT coeff; 00065
00062 MY_FLOAT apInput; 00067 StkFloat <a class="code" href="classDelayA.html#a7">tick</a>(StkFloat sample);
00063 }; 00068
00064 00070 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classDelayA.html#a7">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00065 <font class="preprocessor">#endif</font> 00071
</font></pre></div><HR> 00073
00079 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classDelayA.html#a7">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
<table> 00080
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00081 <span class="keyword">protected</span>:
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00082 StkFloat alpha_;
</table> 00083 StkFloat coeff_;
00084 StkFloat apInput_;
</BODY> 00085 StkFloat nextOutput_;
00086 <span class="keywordtype">bool</span> doNextOut_;
00087 };
00088
00089 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,52 +1,62 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>DelayL.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>DelayL.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00023 <font class="comment">/***************************************************/</font> 00023 <span class="comment">/***************************************************/</span>
00024 00024
00025 <font class="preprocessor">#if !defined(__DELAYL_H)</font> 00025 <span class="preprocessor">#ifndef STK_DELAYL_H</span>
00026 <font class="preprocessor"></font><font class="preprocessor">#define __DELAYL_H</font> 00026 <span class="preprocessor"></span><span class="preprocessor">#define STK_DELAYL_H</span>
00027 <font class="preprocessor"></font> 00027 <span class="preprocessor"></span>
00028 <font class="preprocessor">#include "Delay.h"</font> 00028 <span class="preprocessor">#include "Delay.h"</span>
00029 00029
00030 <font class="keyword">class </font><a class="code" href="classDelayL.html">DelayL</a> : <font class="keyword">public</font> <a class="code" href="classDelay.html">Delay</a> <a name="l00030"></a><a class="code" href="classDelayL.html">00030</a> <span class="keyword">class </span><a class="code" href="classDelayL.html">DelayL</a> : <span class="keyword">public</span> <a class="code" href="classDelay.html">Delay</a>
00031 { 00031 {
00032 <font class="keyword">public</font>: 00032 <span class="keyword">public</span>:
00033 00033
00035 <a class="code" href="classDelayL.html#a0">DelayL</a>(); 00035 <a class="code" href="classDelayL.html#a0">DelayL</a>();
00036 00036
00038 00038
00039 <a class="code" href="classDelayL.html#a0">DelayL</a>(MY_FLOAT theDelay, <font class="keywordtype">long</font> maxDelay); 00043 <a class="code" href="classDelayL.html#a0">DelayL</a>(StkFloat delay, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxDelay);
00040 00044
00042 <a class="code" href="classDelayL.html#a2">~DelayL</a>(); 00046 <a class="code" href="classDelayL.html#a2">~DelayL</a>();
00043 00047
00045
00048 <font class="keywordtype">void</font> <a class="code" href="classDelay.html#a4">setDelay</a>(MY_FLOAT theDelay);
00049 00049
00051 MY_FLOAT <a class="code" href="classDelay.html#a5">getDelay</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00052 <span class="keywordtype">void</span> <a class="code" href="classDelayL.html#a3">setDelay</a>(StkFloat delay);
00052 00053
00054 MY_FLOAT <a class="code" href="classDelay.html#a9">tick</a>(MY_FLOAT sample); 00055 StkFloat <a class="code" href="classDelayL.html#a4">getDelay</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00055 00056
00056 <font class="keyword">protected</font>: 00058
00057 MY_FLOAT alpha; 00061 StkFloat <a class="code" href="classDelayL.html#a5">nextOut</a>(<span class="keywordtype">void</span>);
00058 MY_FLOAT omAlpha; 00062
00059 }; 00064 StkFloat <a class="code" href="classDelayL.html#a6">tick</a>(StkFloat sample);
00060 00065
00061 <font class="preprocessor">#endif</font> 00067 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classDelayL.html#a6">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
</font></pre></div><HR> 00068
00070
<table> 00076 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classDelayL.html#a6">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00077
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00078 <span class="keyword">protected</span>:
</table> 00079 StkFloat alpha_;
00080 StkFloat omAlpha_;
</BODY> 00081 StkFloat nextOutput_;
00082 <span class="keywordtype">bool</span> doNextOut_;
00083 };
00084
00085 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,65 +1,74 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Delay.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Delay.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00019 <font class="comment">/***************************************************/</font> 00019 <span class="comment">/***************************************************/</span>
00020 00020
00021 <font class="preprocessor">#if !defined(__DELAY_H)</font> 00021 <span class="preprocessor">#ifndef STK_DELAY_H</span>
00022 <font class="preprocessor"></font><font class="preprocessor">#define __DELAY_H</font> 00022 <span class="preprocessor"></span><span class="preprocessor">#define STK_DELAY_H</span>
00023 <font class="preprocessor"></font> 00023 <span class="preprocessor"></span>
00024 <font class="preprocessor">#include "Filter.h"</font> 00024 <span class="preprocessor">#include "Filter.h"</span>
00025 00025
00026 <font class="keyword">class </font><a class="code" href="classDelay.html">Delay</a> : <font class="keyword">protected</font> <a class="code" href="classFilter.html">Filter</a> <a name="l00026"></a><a class="code" href="classDelay.html">00026</a> <span class="keyword">class </span><a class="code" href="classDelay.html">Delay</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
00027 { 00027 {
00028 <font class="keyword">public</font>: 00028 <span class="keyword">public</span>:
00029 00029
00031 <a class="code" href="classDelay.html#a0">Delay</a>(); 00031 <a class="code" href="classDelay.html#a0">Delay</a>();
00032 00032
00034 <a class="code" href="classDelay.html#a0">Delay</a>(<font class="keywordtype">long</font> theDelay, <font class="keywordtype">long</font> maxDelay); 00034
00035 00039 <a class="code" href="classDelay.html#a0">Delay</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxDelay);
00037 <font class="keyword">virtual</font> <a class="code" href="classDelay.html#a2">~Delay</a>(); 00040
00038 00042 <span class="keyword">virtual</span> <a class="code" href="classDelay.html#a2">~Delay</a>();
00040 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a3">clear</a>();
00041
00043 00043
00046 <font class="keywordtype">void</font> <a class="code" href="classDelay.html#a4">setDelay</a>(<font class="keywordtype">long</font> theDelay); 00045 <span class="keywordtype">void</span> <a class="code" href="classDelay.html#a3">clear</a>();
00047 00046
00049 <font class="keywordtype">long</font> <a class="code" href="classDelay.html#a5">getDelay</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00048
00050 00055 <span class="keywordtype">void</span> <a class="code" href="classDelay.html#a4">setMaximumDelay</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay);
00052 MY_FLOAT <a class="code" href="classDelay.html#a6">energy</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00056
00053 00058
00055 00061 <span class="keywordtype">void</span> <a class="code" href="classDelay.html#a5">setDelay</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay);
00058 MY_FLOAT <a class="code" href="classDelay.html#a7">contentsAt</a>(<font class="keywordtype">long</font> tapDelay) <font class="keyword">const</font>;
00059
00061 MY_FLOAT <a class="code" href="classFilter.html#a9">lastOut</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>;
00062 00062
00064 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT sample); 00064 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classDelay.html#a6">getDelay</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00065 00065
00067 <font class="keyword">virtual</font> MY_FLOAT *<a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00067 StkFloat <a class="code" href="classDelay.html#a7">energy</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00068 00068
00069 <font class="keyword">protected</font>: 00070
00070 <font class="keywordtype">long</font> inPoint; 00075 StkFloat <a class="code" href="classDelay.html#a8">contentsAt</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> tapDelay);
00071 <font class="keywordtype">long</font> outPoint; 00076
00072 <font class="keywordtype">long</font> length; 00078 StkFloat <a class="code" href="classDelay.html#a9">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00073 MY_FLOAT delay; 00079
00074 }; 00081
00075 00084 <span class="keyword">virtual</span> StkFloat <a class="code" href="classDelay.html#a10">nextOut</a>(<span class="keywordtype">void</span>);
00076 <font class="preprocessor">#endif</font> 00085
00077 <font class="preprocessor"></font> 00087 <span class="keyword">virtual</span> StkFloat <a class="code" href="classDelay.html#a11">tick</a>(StkFloat sample);
</pre></div><HR> 00088
00090 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classDelay.html#a11">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
<table> 00091
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00093
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00099 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classDelay.html#a11">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
</table> 00100
00101 <span class="keyword">protected</span>:
</BODY> 00102 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> inPoint_;
00103 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outPoint_;
00104 StkFloat delay_;
00105 };
00106
00107 <span class="preprocessor">#endif</span>
00108 <span class="preprocessor"></span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,56 +1,61 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Drummer.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Drummer.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00016 <font class="comment">/***************************************************/</font> 00016 <span class="comment">/***************************************************/</span>
00017 00017
00018 <font class="preprocessor">#if !defined(__DRUMMER_H)</font> 00018 <span class="preprocessor">#ifndef STK_DRUMMER_H</span>
00019 <font class="preprocessor"></font><font class="preprocessor">#define __DRUMMER_H</font> 00019 <span class="preprocessor"></span><span class="preprocessor">#define STK_DRUMMER_H</span>
00020 <font class="preprocessor"></font> 00020 <span class="preprocessor"></span>
00021 <font class="preprocessor">#include "Instrmnt.h"</font> 00021 <span class="preprocessor">#include "Instrmnt.h"</span>
00022 <font class="preprocessor">#include "WvIn.h"</font> 00022 <span class="preprocessor">#include "WvIn.h"</span>
00023 <font class="preprocessor">#include "OnePole.h"</font> 00023 <span class="preprocessor">#include "OnePole.h"</span>
00024 00024
00025 <font class="preprocessor">#define DRUM_NUMWAVES 11</font> 00025 <span class="keyword">const</span> <span class="keywordtype">int</span> DRUM_NUMWAVES = 11;
00026 <font class="preprocessor"></font><font class="preprocessor">#define DRUM_POLYPHONY 4</font> 00026 <span class="keyword">const</span> <span class="keywordtype">int</span> DRUM_POLYPHONY = 4;
00027 <font class="preprocessor"></font> 00027
00028 <font class="keyword">class </font><a class="code" href="classDrummer.html">Drummer</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00028"></a><a class="code" href="classDrummer.html">00028</a> <span class="keyword">class </span><a class="code" href="classDrummer.html">Drummer</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00029 { 00029 {
00030 <font class="keyword">public</font>: 00030 <span class="keyword">public</span>:
00032 <a class="code" href="classDrummer.html#a0">Drummer</a>(); 00032
00033 00035 <a class="code" href="classDrummer.html#a0">Drummer</a>();
00035 <a class="code" href="classDrummer.html#a1">~Drummer</a>();
00036 00036
00038 00038 <a class="code" href="classDrummer.html#a1">~Drummer</a>();
00043 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT instrument, MY_FLOAT amplitude); 00039
00044 00041
00046 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00047 <span class="keywordtype">void</span> <a class="code" href="classDrummer.html#a2">noteOn</a>(StkFloat instrument, StkFloat amplitude);
00047 00048
00049 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00050 <span class="keywordtype">void</span> <a class="code" href="classDrummer.html#a3">noteOff</a>(StkFloat amplitude);
00050 00051
00051 <font class="keyword">protected</font>: 00053 StkFloat <a class="code" href="classDrummer.html#a4">tick</a>();
00052 <a class="code" href="classWvIn.html">WvIn</a> *waves[DRUM_POLYPHONY]; 00054
00053 <a class="code" href="classOnePole.html">OnePole</a> *filters[DRUM_POLYPHONY]; 00056 StkFloat *<a class="code" href="classDrummer.html#a4">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00054 <font class="keywordtype">int</font> sounding[DRUM_POLYPHONY]; 00057
00055 <font class="keywordtype">int</font> nSounding; 00059
00056 00065 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classDrummer.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00057 }; 00066
00058 00067 <span class="keyword">protected</span>:
00059 <font class="preprocessor">#endif</font> 00068 <a class="code" href="classWvIn.html">WvIn</a> *waves_[DRUM_POLYPHONY];
</font></pre></div><HR> 00069 <a class="code" href="classOnePole.html">OnePole</a> *filters_[DRUM_POLYPHONY];
00070 <span class="keywordtype">int</span> sounding_[DRUM_POLYPHONY];
<table> 00071 <span class="keywordtype">int</span> nSounding_;
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00072 };
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00073
</table> 00074 <span class="preprocessor">#endif</span>
</pre></div><HR>
</BODY>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,58 +1,58 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Echo.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Echo.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00009 <font class="comment">/***************************************************/</font> 00009 <span class="comment">/***************************************************/</span>
00010 00010
00011 <font class="preprocessor">#if !defined(__ECHO_H)</font> 00011 <span class="preprocessor">#ifndef STK_ECHO_H</span>
00012 <font class="preprocessor"></font><font class="preprocessor">#define __ECHO_H</font> 00012 <span class="preprocessor"></span><span class="preprocessor">#define STK_ECHO_H</span>
00013 <font class="preprocessor"></font> 00013 <span class="preprocessor"></span>
00014 <font class="preprocessor">#include "Stk.h"</font> 00014 <span class="preprocessor">#include "Effect.h"</span>
00015 <font class="preprocessor">#include "Delay.h"</font> 00015 <span class="preprocessor">#include "Delay.h"</span>
00016 00016
00017 <font class="keyword">class </font><a class="code" href="classEcho.html">Echo</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a> <a name="l00017"></a><a class="code" href="classEcho.html">00017</a> <span class="keyword">class </span><a class="code" href="classEcho.html">Echo</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
00018 { 00018 {
00019 <font class="keyword">public</font>: 00019 <span class="keyword">public</span>:
00021 <a class="code" href="classEcho.html#a0">Echo</a>(MY_FLOAT longestDelay); 00021
00022 00024 <a class="code" href="classEcho.html#a0">Echo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maximumDelay = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) <a class="code" href="classStk.html#e0">Stk::sampleRate</a>() );
00024 <a class="code" href="classEcho.html#a1">~Echo</a>();
00025 00025
00027 <font class="keywordtype">void</font> <a class="code" href="classEcho.html#a2">clear</a>(); 00027 <a class="code" href="classEcho.html#a1">~Echo</a>();
00028 00028
00030 <font class="keywordtype">void</font> <a class="code" href="classEcho.html#a3">setDelay</a>(MY_FLOAT delay); 00030 <span class="keywordtype">void</span> <a class="code" href="classEcho.html#a2">clear</a>();
00031 00031
00033 <font class="keywordtype">void</font> <a class="code" href="classEcho.html#a4">setEffectMix</a>(MY_FLOAT mix); 00033 <span class="keywordtype">void</span> <a class="code" href="classEcho.html#a3">setMaximumDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
00034 00034
00036 MY_FLOAT <a class="code" href="classEcho.html#a5">lastOut</a>() <font class="keyword">const</font>; 00036 <span class="keywordtype">void</span> <a class="code" href="classEcho.html#a4">setDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
00037 00037
00039 MY_FLOAT <a class="code" href="classEcho.html#a6">tick</a>(MY_FLOAT input); 00039 StkFloat <a class="code" href="classEcho.html#a5">tick</a>(StkFloat input);
00040 00040
00042 MY_FLOAT *<a class="code" href="classEcho.html#a6">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00042 StkFloat *<a class="code" href="classEcho.html#a5">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00043 00043
00044 <font class="keyword">protected</font>: 00045
00045 <a class="code" href="classDelay.html">Delay</a> *delayLine; 00051 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classEcho.html#a5">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00046 <font class="keywordtype">long</font> length; 00052
00047 MY_FLOAT lastOutput; 00053 <span class="keyword">protected</span>:
00048 MY_FLOAT effectMix; 00054 <a class="code" href="classDelay.html">Delay</a> delayLine_;
00049 00055 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
00050 }; 00056
00051 00057 };
00052 <font class="preprocessor">#endif</font> 00058
00053 <font class="preprocessor"></font> 00059 <span class="preprocessor">#endif</span>
</pre></div><HR> 00060 <span class="preprocessor"></span>
</pre></div><HR>
<table>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> <table>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> <tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
</table> <tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</BODY>
</HTML> </HTML>

View File

@@ -0,0 +1,64 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>Effect.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00010 <span class="comment">/***************************************************/</span>
00011
00012 <span class="preprocessor">#include "Stk.h"</span>
00013
00014 <span class="preprocessor">#ifndef STK_EFFECT_H</span>
00015 <span class="preprocessor"></span><span class="preprocessor">#define STK_EFFECT_H</span>
00016 <span class="preprocessor"></span>
<a name="l00017"></a><a class="code" href="classEffect.html">00017</a> <span class="keyword">class </span><a class="code" href="classEffect.html">Effect</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
00018 {
00019 <span class="keyword">public</span>:
00021 <a class="code" href="classEffect.html#a0">Effect</a>();
00022
00024 <span class="keyword">virtual</span> <a class="code" href="classEffect.html#a1">~Effect</a>();
00025
00027 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classEffect.html#a2">clear</a>() = 0;
00028
00030 <span class="keywordtype">void</span> <a class="code" href="classEffect.html#a3">setEffectMix</a>(StkFloat mix);
00031
00033 StkFloat <a class="code" href="classEffect.html#a4">lastOut</a>() <span class="keyword">const</span>;
00034
00036 StkFloat <a class="code" href="classEffect.html#a5">lastOutLeft</a>() <span class="keyword">const</span>;
00037
00039 StkFloat <a class="code" href="classEffect.html#a6">lastOutRight</a>() <span class="keyword">const</span>;
00040
00042 <span class="keyword">virtual</span> StkFloat <a class="code" href="classEffect.html#a7">tick</a>( StkFloat input ) = 0;
00043
00045 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classEffect.html#a7">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00046
00048
00054 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classEffect.html#a7">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00055
00056 <span class="keyword">protected</span>:
00057
00058 <span class="comment">// Returns true if argument value is prime.</span>
00059 <span class="keywordtype">bool</span> isPrime( <span class="keywordtype">int</span> number );
00060
00061 StkFloat lastOutput_[2];
00062 StkFloat effectMix_;
00063
00064 };
00065
00066 <span class="preprocessor">#endif</span>
00067 <span class="preprocessor"></span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,64 +1,65 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Envelope.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Envelope.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00014 <font class="comment">/***************************************************/</font> 00014 <span class="comment">/***************************************************/</span>
00015 00015
00016 <font class="preprocessor">#if !defined(__ENVELOPE_H)</font> 00016 <span class="preprocessor">#ifndef STK_ENVELOPE_H</span>
00017 <font class="preprocessor"></font><font class="preprocessor">#define __ENVELOPE_H</font> 00017 <span class="preprocessor"></span><span class="preprocessor">#define STK_ENVELOPE_H</span>
00018 <font class="preprocessor"></font> 00018 <span class="preprocessor"></span>
00019 <font class="preprocessor">#include "Stk.h"</font> 00019 <span class="preprocessor">#include "Generator.h"</span>
00020 00020
00021 <font class="keyword">class </font><a class="code" href="classEnvelope.html">Envelope</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a> <a name="l00021"></a><a class="code" href="classEnvelope.html">00021</a> <span class="keyword">class </span><a class="code" href="classEnvelope.html">Envelope</a> : <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
00022 { 00022 {
00023 <font class="keyword">public</font>: 00023 <span class="keyword">public</span>:
00024 00024
00026 <a class="code" href="classEnvelope.html#a0">Envelope</a>(<font class="keywordtype">void</font>); 00026 <a class="code" href="classEnvelope.html#a0">Envelope</a>(<span class="keywordtype">void</span>);
00027 00027
00029 <font class="keyword">virtual</font> <a class="code" href="classEnvelope.html#a1">~Envelope</a>(<font class="keywordtype">void</font>); 00029 <span class="keyword">virtual</span> <a class="code" href="classEnvelope.html#a1">~Envelope</a>(<span class="keywordtype">void</span>);
00030 00030
00032 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classEnvelope.html#a2">keyOn</a>(<font class="keywordtype">void</font>); 00032 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a2">keyOn</a>(<span class="keywordtype">void</span>);
00033 00033
00035 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classEnvelope.html#a3">keyOff</a>(<font class="keywordtype">void</font>); 00035 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a3">keyOff</a>(<span class="keywordtype">void</span>);
00036 00036
00038 <font class="keywordtype">void</font> <a class="code" href="classEnvelope.html#a4">setRate</a>(MY_FLOAT aRate); 00038 <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a4">setRate</a>(StkFloat rate);
00039 00039
00041 <font class="keywordtype">void</font> <a class="code" href="classEnvelope.html#a5">setTime</a>(MY_FLOAT aTime); 00041 <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a5">setTime</a>(StkFloat time);
00042 00042
00044 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classEnvelope.html#a6">setTarget</a>(MY_FLOAT aTarget); 00044 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a6">setTarget</a>(StkFloat target);
00045 00045
00047 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classEnvelope.html#a7">setValue</a>(MY_FLOAT aValue); 00047 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a7">setValue</a>(StkFloat value);
00048 00048
00050 <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="classEnvelope.html#a8">getState</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00050 <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classEnvelope.html#a8">getState</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00051 00051
00053 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classEnvelope.html#a9">tick</a>(<font class="keywordtype">void</font>); 00053 <span class="keyword">virtual</span> StkFloat <a class="code" href="classEnvelope.html#a9">tick</a>(<span class="keywordtype">void</span>);
00054 00054
00056 <font class="keyword">virtual</font> MY_FLOAT *<a class="code" href="classEnvelope.html#a9">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00056 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classEnvelope.html#a9">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00057 00057
00059 MY_FLOAT <a class="code" href="classEnvelope.html#a11">lastOut</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00059
00060 00065 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classEnvelope.html#a9">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00061 <font class="keyword">protected</font>: 00066
00062 MY_FLOAT value; 00067 <span class="keyword">protected</span>:
00063 MY_FLOAT target; 00068 StkFloat value_;
00064 MY_FLOAT rate; 00069 StkFloat target_;
00065 <font class="keywordtype">int</font> state; 00070 StkFloat rate_;
00066 }; 00071 <span class="keywordtype">int</span> state_;
00067 00072 };
00068 <font class="preprocessor">#endif</font> 00073
</font></pre></div><HR> 00074 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> <table>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> <tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
</table> <tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</BODY>
</HTML> </HTML>

View File

@@ -1,50 +1,56 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>FMVoices.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>FMVoices.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00031 <font class="comment">/***************************************************/</font> 00031 <span class="comment">/***************************************************/</span>
00032 00032
00033 <font class="preprocessor">#if !defined(__FMVOICES_H)</font> 00033 <span class="preprocessor">#ifndef STK_FMVOICES_H</span>
00034 <font class="preprocessor"></font><font class="preprocessor">#define __FMVOICES_H</font> 00034 <span class="preprocessor"></span><span class="preprocessor">#define STK_FMVOICES_H</span>
00035 <font class="preprocessor"></font> 00035 <span class="preprocessor"></span>
00036 <font class="preprocessor">#include "FM.h"</font> 00036 <span class="preprocessor">#include "FM.h"</span>
00037 00037
00038 <font class="keyword">class </font><a class="code" href="classFMVoices.html">FMVoices</a> : <font class="keyword">public</font> <a class="code" href="classFM.html">FM</a> <a name="l00038"></a><a class="code" href="classFMVoices.html">00038</a> <span class="keyword">class </span><a class="code" href="classFMVoices.html">FMVoices</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
00039 { 00039 {
00040 <font class="keyword">public</font>: 00040 <span class="keyword">public</span>:
00042 <a class="code" href="classFMVoices.html#a0">FMVoices</a>(); 00042
00043 00045 <a class="code" href="classFMVoices.html#a0">FMVoices</a>();
00045 <a class="code" href="classFMVoices.html#a1">~FMVoices</a>();
00046 00046
00048 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classFM.html#a4">setFrequency</a>(MY_FLOAT frequency); 00048 <a class="code" href="classFMVoices.html#a1">~FMVoices</a>();
00049 00049
00051 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00051 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFMVoices.html#a2">setFrequency</a>(StkFloat frequency);
00052 00052
00054 MY_FLOAT <a class="code" href="classFM.html#a14">tick</a>(); 00054 <span class="keywordtype">void</span> <a class="code" href="classFMVoices.html#a3">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00055 00055
00057 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classFM.html#a15">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00057 StkFloat <a class="code" href="classFMVoices.html#a4">tick</a>();
00058 00058
00059 <font class="keyword">protected</font>: 00060 StkFloat *<a class="code" href="classFMVoices.html#a4">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00060 <font class="keywordtype">int</font> currentVowel; 00061
00061 MY_FLOAT tilt[3]; 00063
00062 MY_FLOAT mods[3]; 00069 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classFMVoices.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00063 }; 00070
00064 00072 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFMVoices.html#a7">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00065 <font class="preprocessor">#endif</font> 00073
</font></pre></div><HR> 00074 <span class="keyword">protected</span>:
00075 <span class="keywordtype">int</span> currentVowel_;
<table> 00076 StkFloat tilt_[3];
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00077 StkFloat mods_[3];
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00078 };
</table> 00079
00080 <span class="preprocessor">#endif</span>
</BODY> </pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,85 +1,91 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>FM.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>FM.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00024 <font class="comment">/***************************************************/</font> 00024 <span class="comment">/***************************************************/</span>
00025 00025
00026 <font class="preprocessor">#if !defined(__FM_H)</font> 00026 <span class="preprocessor">#ifndef STK_FM_H</span>
00027 <font class="preprocessor"></font><font class="preprocessor">#define __FM_H</font> 00027 <span class="preprocessor"></span><span class="preprocessor">#define STK_FM_H</span>
00028 <font class="preprocessor"></font> 00028 <span class="preprocessor"></span>
00029 <font class="preprocessor">#include "Instrmnt.h"</font> 00029 <span class="preprocessor">#include "Instrmnt.h"</span>
00030 <font class="preprocessor">#include "ADSR.h"</font> 00030 <span class="preprocessor">#include "ADSR.h"</span>
00031 <font class="preprocessor">#include "WaveLoop.h"</font> 00031 <span class="preprocessor">#include "WaveLoop.h"</span>
00032 <font class="preprocessor">#include "TwoZero.h"</font> 00032 <span class="preprocessor">#include "TwoZero.h"</span>
00033 00033
00034 <font class="keyword">class </font><a class="code" href="classFM.html">FM</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00034"></a><a class="code" href="classFM.html">00034</a> <span class="keyword">class </span><a class="code" href="classFM.html">FM</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00035 { 00035 {
00036 <font class="keyword">public</font>: 00036 <span class="keyword">public</span>:
00038 <a class="code" href="classFM.html#a0">FM</a>( <font class="keywordtype">int</font> operators = 4 ); 00038
00039 00041 <a class="code" href="classFM.html#a0">FM</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> operators = 4 );
00041 <font class="keyword">virtual</font> <a class="code" href="classFM.html#a1">~FM</a>();
00042 00042
00044 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a2">clear</a>(); 00044 <span class="keyword">virtual</span> <a class="code" href="classFM.html#a1">~FM</a>();
00045 00045
00047 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a3">loadWaves</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> **filenames); 00047 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a2">clear</a>();
00048 00048
00050 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00050 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a3">loadWaves</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> **filenames);
00051 00051
00053 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a5">setRatio</a>(<font class="keywordtype">int</font> waveIndex, MY_FLOAT ratio); 00053 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFM.html#a4">setFrequency</a>(StkFloat frequency);
00054 00054
00056 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a6">setGain</a>(<font class="keywordtype">int</font> waveIndex, MY_FLOAT gain); 00056 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a5">setRatio</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> waveIndex, StkFloat ratio);
00057 00057
00059 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a7">setModulationSpeed</a>(MY_FLOAT mSpeed); 00059 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a6">setGain</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> waveIndex, StkFloat gain);
00060 00060
00062 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a8">setModulationDepth</a>(MY_FLOAT mDepth); 00062 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a7">setModulationSpeed</a>(StkFloat mSpeed);
00063 00063
00065 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a9">setControl1</a>(MY_FLOAT cVal); 00065 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a8">setModulationDepth</a>(StkFloat mDepth);
00066 00066
00068 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a10">setControl2</a>(MY_FLOAT cVal); 00068 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a9">setControl1</a>(StkFloat cVal);
00069 00069
00071 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a11">keyOn</a>(); 00071 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a10">setControl2</a>(StkFloat cVal);
00072 00072
00074 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a12">keyOff</a>(); 00074 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a11">keyOn</a>();
00075 00075
00077 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00077 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a12">keyOff</a>();
00078 00078
00080 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>() = 0; 00080 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a13">noteOff</a>(StkFloat amplitude);
00081 00081
00083 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00083 <span class="keyword">virtual</span> StkFloat <a class="code" href="classFM.html#a14">tick</a>() = 0;
00084 00084
00085 <font class="keyword">protected</font>: 00086 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classFM.html#a14">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize) = 0;
00086 <a class="code" href="classADSR.html">ADSR</a> **adsr; 00087
00087 <a class="code" href="classWaveLoop.html">WaveLoop</a> **waves; 00089
00088 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato; 00095 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classFM.html#a14">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 ) = 0;
00089 <a class="code" href="classTwoZero.html">TwoZero</a> *twozero; 00096
00090 <font class="keywordtype">int</font> nOperators; 00098 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFM.html#a17">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00091 MY_FLOAT baseFrequency; 00099
00092 MY_FLOAT *ratios; 00100 <span class="keyword">protected</span>:
00093 MY_FLOAT *gains; 00101 std::vector&lt;ADSR *&gt; adsr_;
00094 MY_FLOAT modDepth; 00102 std::vector&lt;WaveLoop *&gt; waves_;
00095 MY_FLOAT control1; 00103 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato_;
00096 MY_FLOAT control2; 00104 <a class="code" href="classTwoZero.html">TwoZero</a> twozero_;
00097 MY_FLOAT __FM_gains[100]; 00105 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nOperators_;
00098 MY_FLOAT __FM_susLevels[16]; 00106 StkFloat baseFrequency_;
00099 MY_FLOAT __FM_attTimes[32]; 00107 std::vector&lt;StkFloat&gt; ratios_;
00100 00108 std::vector&lt;StkFloat&gt; gains_;
00101 }; 00109 StkFloat modDepth_;
00102 00110 StkFloat control1_;
00103 <font class="preprocessor">#endif</font> 00111 StkFloat control2_;
</font></pre></div><HR> 00112 StkFloat fmGains_[100];
00113 StkFloat fmSusLevels_[16];
<table> 00114 StkFloat fmAttTimes_[32];
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00115
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00116 };
</table> 00117
00118 <span class="preprocessor">#endif</span>
</BODY> </pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,72 +1,75 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Filter.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Filter.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00028 <font class="comment">/***************************************************/</font> 00028 <span class="comment">/***************************************************/</span>
00029 00029
00030 <font class="preprocessor">#if !defined(__FILTER_H)</font> 00030 <span class="preprocessor">#ifndef STK_FILTER_H</span>
00031 <font class="preprocessor"></font><font class="preprocessor">#define __FILTER_H</font> 00031 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILTER_H</span>
00032 <font class="preprocessor"></font> 00032 <span class="preprocessor"></span>
00033 <font class="preprocessor">#include "Stk.h"</font> 00033 <span class="preprocessor">#include "Stk.h"</span>
00034 00034 <span class="preprocessor">#include &lt;vector&gt;</span>
00035 <font class="keyword">class </font><a class="code" href="classFilter.html">Filter</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a> 00035 <span class="preprocessor">#include &lt;valarray&gt;</span>
00036 { 00036
00037 <font class="keyword">public</font>: <a name="l00037"></a><a class="code" href="classFilter.html">00037</a> <span class="keyword">class </span><a class="code" href="classFilter.html">Filter</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
00039 <a class="code" href="classFilter.html#a0">Filter</a>(<font class="keywordtype">void</font>); 00038 {
00040 00039 <span class="keyword">public</span>:
00041 <a class="code" href="classFilter.html#a0">Filter</a>(<span class="keywordtype">void</span>);
00042 00042
00046 <a class="code" href="classFilter.html#a0">Filter</a>(<font class="keywordtype">int</font> nb, MY_FLOAT *bCoefficients, <font class="keywordtype">int</font> na, MY_FLOAT *aCoefficients); 00044
00047 00048 <a class="code" href="classFilter.html#a0">Filter</a>( std::vector&lt;StkFloat&gt; &amp;bCoefficients, std::vector&lt;StkFloat&gt; &amp;aCoefficients );
00049 <font class="keyword">virtual</font> <a class="code" href="classFilter.html#a2">~Filter</a>(<font class="keywordtype">void</font>); 00049
00050 00051 <span class="keyword">virtual</span> <a class="code" href="classFilter.html#a2">~Filter</a>(<span class="keywordtype">void</span>);
00052 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a3">clear</a>(<font class="keywordtype">void</font>); 00052
00053 00054 <span class="keywordtype">void</span> <a class="code" href="classFilter.html#a3">clear</a>(<span class="keywordtype">void</span>);
00055 00055
00060 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a4">setCoefficients</a>(<font class="keywordtype">int</font> nb, MY_FLOAT *bCoefficients, <font class="keywordtype">int</font> na, MY_FLOAT *aCoefficients); 00057
00061 00063 <span class="keywordtype">void</span> <a class="code" href="classFilter.html#a4">setCoefficients</a>( std::vector&lt;StkFloat&gt; &amp;bCoefficients, std::vector&lt;StkFloat&gt; &amp;aCoefficients );
00063 00064
00069 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a5">setNumerator</a>(<font class="keywordtype">int</font> nb, MY_FLOAT *bCoefficients); 00066
00070 00073 <span class="keywordtype">void</span> <a class="code" href="classFilter.html#a5">setNumerator</a>( std::vector&lt;StkFloat&gt; &amp;bCoefficients );
00072 00074
00080 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a6">setDenominator</a>(<font class="keywordtype">int</font> na, MY_FLOAT *aCoefficients); 00076
00081 00084 <span class="keywordtype">void</span> <a class="code" href="classFilter.html#a6">setDenominator</a>( std::vector&lt;StkFloat&gt; &amp;aCoefficients );
00083 00085
00087 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a7">setGain</a>(MY_FLOAT theGain); 00087
00088 00091 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFilter.html#a7">setGain</a>(StkFloat gain);
00090 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classFilter.html#a8">getGain</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00092
00091 00094 <span class="keyword">virtual</span> StkFloat <a class="code" href="classFilter.html#a8">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00093 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classFilter.html#a9">lastOut</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00095
00094 00097 <span class="keyword">virtual</span> StkFloat <a class="code" href="classFilter.html#a9">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00096 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT sample); 00098
00097 00100 <span class="keyword">virtual</span> StkFloat <a class="code" href="classFilter.html#a10">tick</a>(StkFloat sample);
00099 <font class="keyword">virtual</font> MY_FLOAT *<a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00101
00100 00103 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classFilter.html#a10">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00101 <font class="keyword">protected</font>: 00104
00102 MY_FLOAT gain; 00106
00103 <font class="keywordtype">int</font> nB; 00112 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classFilter.html#a10">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00104 <font class="keywordtype">int</font> nA; 00113
00105 MY_FLOAT *b; 00114 <span class="keyword">protected</span>:
00106 MY_FLOAT *a; 00115 StkFloat gain_;
00107 MY_FLOAT *outputs; 00116 std::vector&lt;StkFloat&gt; b_;
00108 MY_FLOAT *inputs; 00117 std::vector&lt;StkFloat&gt; a_;
00109 00118 std::vector&lt;StkFloat&gt; outputs_;
00110 }; 00119 std::vector&lt;StkFloat&gt; inputs_;
00111 00120
00112 <font class="preprocessor">#endif</font> 00121 };
</font></pre></div><HR> 00122
00123 <span class="preprocessor">#endif</span>
<table> </pre></div><HR>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> <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>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</BODY> </table>
</BODY>
</HTML> </HTML>

View File

@@ -1,86 +1,92 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Flute.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Flute.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00023 <font class="comment">/***************************************************/</font> 00023 <span class="comment">/***************************************************/</span>
00024 00024
00025 <font class="preprocessor">#if !defined(__FLUTE_H)</font> 00025 <span class="preprocessor">#ifndef STK_FLUTE_H</span>
00026 <font class="preprocessor"></font><font class="preprocessor">#define __FLUTE_H</font> 00026 <span class="preprocessor"></span><span class="preprocessor">#define STK_FLUTE_H</span>
00027 <font class="preprocessor"></font> 00027 <span class="preprocessor"></span>
00028 <font class="preprocessor">#include "Instrmnt.h"</font> 00028 <span class="preprocessor">#include "Instrmnt.h"</span>
00029 <font class="preprocessor">#include "JetTabl.h"</font> 00029 <span class="preprocessor">#include "JetTable.h"</span>
00030 <font class="preprocessor">#include "DelayL.h"</font> 00030 <span class="preprocessor">#include "DelayL.h"</span>
00031 <font class="preprocessor">#include "OnePole.h"</font> 00031 <span class="preprocessor">#include "OnePole.h"</span>
00032 <font class="preprocessor">#include "PoleZero.h"</font> 00032 <span class="preprocessor">#include "PoleZero.h"</span>
00033 <font class="preprocessor">#include "Noise.h"</font> 00033 <span class="preprocessor">#include "Noise.h"</span>
00034 <font class="preprocessor">#include "ADSR.h"</font> 00034 <span class="preprocessor">#include "ADSR.h"</span>
00035 <font class="preprocessor">#include "WaveLoop.h"</font> 00035 <span class="preprocessor">#include "WaveLoop.h"</span>
00036 00036
00037 <font class="keyword">class </font><a class="code" href="classFlute.html">Flute</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00037"></a><a class="code" href="classFlute.html">00037</a> <span class="keyword">class </span><a class="code" href="classFlute.html">Flute</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00038 { 00038 {
00039 <font class="keyword">public</font>: 00039 <span class="keyword">public</span>:
00041 <a class="code" href="classFlute.html#a0">Flute</a>(MY_FLOAT lowestFrequency); 00041
00042 00044 <a class="code" href="classFlute.html#a0">Flute</a>(StkFloat lowestFrequency);
00044 <a class="code" href="classFlute.html#a1">~Flute</a>();
00045 00045
00047 <font class="keywordtype">void</font> <a class="code" href="classFlute.html#a2">clear</a>(); 00047 <a class="code" href="classFlute.html#a1">~Flute</a>();
00048 00048
00050 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00050 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a2">clear</a>();
00051 00051
00053 <font class="keywordtype">void</font> <a class="code" href="classFlute.html#a4">setJetReflection</a>(MY_FLOAT coefficient); 00053 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a3">setFrequency</a>(StkFloat frequency);
00054 00054
00056 <font class="keywordtype">void</font> <a class="code" href="classFlute.html#a5">setEndReflection</a>(MY_FLOAT coefficient); 00056 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a4">setJetReflection</a>(StkFloat coefficient);
00057 00057
00059 <font class="keywordtype">void</font> <a class="code" href="classFlute.html#a6">setJetDelay</a>(MY_FLOAT aRatio); 00059 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a5">setEndReflection</a>(StkFloat coefficient);
00060 00060
00062 <font class="keywordtype">void</font> <a class="code" href="classFlute.html#a7">startBlowing</a>(MY_FLOAT amplitude, MY_FLOAT rate); 00062 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a6">setJetDelay</a>(StkFloat aRatio);
00063 00063
00065 <font class="keywordtype">void</font> <a class="code" href="classFlute.html#a8">stopBlowing</a>(MY_FLOAT rate); 00065 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a7">startBlowing</a>(StkFloat amplitude, StkFloat rate);
00066 00066
00068 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00068 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a8">stopBlowing</a>(StkFloat rate);
00069 00069
00071 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00071 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a9">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00072 00072
00074 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00074 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a10">noteOff</a>(StkFloat amplitude);
00075 00075
00077 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00077 StkFloat <a class="code" href="classFlute.html#a11">tick</a>();
00078 00078
00079 <font class="keyword">protected</font>: 00080 StkFloat *<a class="code" href="classFlute.html#a11">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00080 <a class="code" href="classDelayL.html">DelayL</a> *jetDelay; 00081
00081 <a class="code" href="classDelayL.html">DelayL</a> *boreDelay; 00083
00082 <a class="code" href="classJetTabl.html">JetTabl</a> *jetTable; 00089 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classFlute.html#a11">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00083 <a class="code" href="classOnePole.html">OnePole</a> *filter; 00090
00084 <a class="code" href="classPoleZero.html">PoleZero</a> *dcBlock; 00092 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a14">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00085 <a class="code" href="classNoise.html">Noise</a> *noise; 00093
00086 <a class="code" href="classADSR.html">ADSR</a> *adsr; 00094 <span class="keyword">protected</span>:
00087 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato; 00095 <a class="code" href="classDelayL.html">DelayL</a> jetDelay_;
00088 <font class="keywordtype">long</font> length; 00096 <a class="code" href="classDelayL.html">DelayL</a> boreDelay_;
00089 MY_FLOAT lastFrequency; 00097 <a class="code" href="classJetTable.html">JetTable</a> jetTable_;
00090 MY_FLOAT maxPressure; 00098 <a class="code" href="classOnePole.html">OnePole</a> filter_;
00091 MY_FLOAT jetReflection; 00099 <a class="code" href="classPoleZero.html">PoleZero</a> dcBlock_;
00092 MY_FLOAT endReflection; 00100 <a class="code" href="classNoise.html">Noise</a> noise_;
00093 MY_FLOAT noiseGain; 00101 <a class="code" href="classADSR.html">ADSR</a> adsr_;
00094 MY_FLOAT vibratoGain; 00102 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato_;
00095 MY_FLOAT outputGain; 00103 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
00096 MY_FLOAT jetRatio; 00104 StkFloat lastFrequency_;
00097 00105 StkFloat maxPressure_;
00098 }; 00106 StkFloat jetReflection_;
00099 00107 StkFloat endReflection_;
00100 <font class="preprocessor">#endif</font> 00108 StkFloat noiseGain_;
</font></pre></div><HR> 00109 StkFloat vibratoGain_;
00110 StkFloat outputGain_;
<table> 00111 StkFloat jetRatio_;
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00112
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00113 };
</table> 00114
00115 <span class="preprocessor">#endif</span>
</BODY> </pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,72 +1,75 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>FormSwep.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>FormSwep.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00013 <font class="comment">/***************************************************/</font> 00013 <span class="comment">/***************************************************/</span>
00014 00014
00015 <font class="preprocessor">#if !defined(__FORMSWEP_H)</font> 00015 <span class="preprocessor">#ifndef STK_FORMSWEP_H</span>
00016 <font class="preprocessor"></font><font class="preprocessor">#define __FORMSWEP_H</font> 00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_FORMSWEP_H</span>
00017 <font class="preprocessor"></font> 00017 <span class="preprocessor"></span>
00018 <font class="preprocessor">#include "BiQuad.h"</font> 00018 <span class="preprocessor">#include "BiQuad.h"</span>
00019 00019
00020 <font class="keyword">class </font><a class="code" href="classFormSwep.html">FormSwep</a> : <font class="keyword">public</font> <a class="code" href="classBiQuad.html">BiQuad</a> <a name="l00020"></a><a class="code" href="classFormSwep.html">00020</a> <span class="keyword">class </span><a class="code" href="classFormSwep.html">FormSwep</a> : <span class="keyword">public</span> <a class="code" href="classBiQuad.html">BiQuad</a>
00021 { 00021 {
00022 <font class="keyword">public</font>: 00022 <span class="keyword">public</span>:
00023 00023
00025 <a class="code" href="classFormSwep.html#a0">FormSwep</a>(); 00025 <a class="code" href="classFormSwep.html#a0">FormSwep</a>();
00026 00026
00028 <a class="code" href="classFormSwep.html#a1">~FormSwep</a>(); 00028 <a class="code" href="classFormSwep.html#a1">~FormSwep</a>();
00029 00029
00031 00031
00042 <font class="keywordtype">void</font> <a class="code" href="classBiQuad.html#a8">setResonance</a>(MY_FLOAT aFrequency, MY_FLOAT aRadius); 00042 <span class="keywordtype">void</span> <a class="code" href="classFormSwep.html#a2">setResonance</a>(StkFloat frequency, StkFloat radius);
00043 00043
00045 <font class="keywordtype">void</font> <a class="code" href="classFormSwep.html#a3">setStates</a>(MY_FLOAT aFrequency, MY_FLOAT aRadius, MY_FLOAT aGain = 1.0); 00045 <span class="keywordtype">void</span> <a class="code" href="classFormSwep.html#a3">setStates</a>(StkFloat frequency, StkFloat radius, StkFloat gain = 1.0);
00046 00046
00048 <font class="keywordtype">void</font> <a class="code" href="classFormSwep.html#a4">setTargets</a>(MY_FLOAT aFrequency, MY_FLOAT aRadius, MY_FLOAT aGain = 1.0); 00048 <span class="keywordtype">void</span> <a class="code" href="classFormSwep.html#a4">setTargets</a>(StkFloat frequency, StkFloat radius, StkFloat gain = 1.0);
00049 00049
00051 00051
00059 <font class="keywordtype">void</font> <a class="code" href="classFormSwep.html#a5">setSweepRate</a>(MY_FLOAT aRate); 00059 <span class="keywordtype">void</span> <a class="code" href="classFormSwep.html#a5">setSweepRate</a>(StkFloat rate);
00060 00060
00062 00062
00067 <font class="keywordtype">void</font> <a class="code" href="classFormSwep.html#a6">setSweepTime</a>(MY_FLOAT aTime); 00067 <span class="keywordtype">void</span> <a class="code" href="classFormSwep.html#a6">setSweepTime</a>(StkFloat time);
00068 00068
00070 MY_FLOAT <a class="code" href="classBiQuad.html#a14">tick</a>(MY_FLOAT sample); 00070 StkFloat <a class="code" href="classFormSwep.html#a7">tick</a>(StkFloat sample);
00071 00071
00073 MY_FLOAT *<a class="code" href="classBiQuad.html#a14">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00073 StkFloat *<a class="code" href="classFormSwep.html#a7">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00074 00074
00075 <font class="keyword">protected</font>: 00076
00076 <font class="keywordtype">bool</font> dirty; 00082 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classFormSwep.html#a7">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00077 MY_FLOAT frequency; 00083
00078 MY_FLOAT radius; 00084 <span class="keyword">protected</span>:
00079 MY_FLOAT startFrequency; 00085 <span class="keywordtype">bool</span> dirty_;
00080 MY_FLOAT startRadius; 00086 StkFloat frequency_;
00081 MY_FLOAT startGain; 00087 StkFloat radius_;
00082 MY_FLOAT targetFrequency; 00088 StkFloat startFrequency_;
00083 MY_FLOAT targetRadius; 00089 StkFloat startRadius_;
00084 MY_FLOAT targetGain; 00090 StkFloat startGain_;
00085 MY_FLOAT deltaFrequency; 00091 StkFloat targetFrequency_;
00086 MY_FLOAT deltaRadius; 00092 StkFloat targetRadius_;
00087 MY_FLOAT deltaGain; 00093 StkFloat targetGain_;
00088 MY_FLOAT sweepState; 00094 StkFloat deltaFrequency_;
00089 MY_FLOAT sweepRate; 00095 StkFloat deltaRadius_;
00090 00096 StkFloat deltaGain_;
00091 }; 00097 StkFloat sweepState_;
00092 00098 StkFloat sweepRate_;
00093 <font class="preprocessor">#endif</font> 00099
</font></pre></div><HR> 00100 };
00101
<table> 00102 <span class="preprocessor">#endif</span>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> </pre></div><HR>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table> <table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
</BODY> <tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -0,0 +1,52 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>Function.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00011 <span class="comment">/***************************************************/</span>
00012
00013 <span class="preprocessor">#include "Stk.h"</span>
00014
00015 <span class="preprocessor">#ifndef STK_FUNCTION_H</span>
00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_FUNCTION_H</span>
00017 <span class="preprocessor"></span>
<a name="l00018"></a><a class="code" href="classFunction.html">00018</a> <span class="keyword">class </span><a class="code" href="classFunction.html">Function</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
00019 {
00020 <span class="keyword">public</span>:
00022 <a class="code" href="classFunction.html#a0">Function</a>();
00023
00025 <span class="keyword">virtual</span> <a class="code" href="classFunction.html#a1">~Function</a>();
00026
<a name="l00028"></a><a class="code" href="classFunction.html#a2">00028</a> <span class="keyword">virtual</span> StkFloat <a class="code" href="classFunction.html#a2">lastOut</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastOutput_; };
00029
00031 <span class="keyword">virtual</span> StkFloat <a class="code" href="classFunction.html#a3">tick</a>( StkFloat input ) = 0;
00032
00034 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classFunction.html#a3">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00035
00037
00043 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classFunction.html#a3">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00044
00045 <span class="keyword">protected</span>:
00046
00047 StkFloat lastOutput_;
00048
00049 };
00050
00051 <span class="preprocessor">#endif</span>
00052 <span class="preprocessor"></span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -0,0 +1,52 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>Generator.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00010 <span class="comment">/***************************************************/</span>
00011
00012 <span class="preprocessor">#ifndef STK_GENERATOR_H</span>
00013 <span class="preprocessor"></span><span class="preprocessor">#define STK_GENERATOR_H</span>
00014 <span class="preprocessor"></span>
00015 <span class="preprocessor">#include "Stk.h"</span>
00016
<a name="l00017"></a><a class="code" href="classGenerator.html">00017</a> <span class="keyword">class </span><a class="code" href="classGenerator.html">Generator</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
00018 {
00019 <span class="keyword">public</span>:
00021 <a class="code" href="classGenerator.html#a0">Generator</a>();
00022
00024 <span class="keyword">virtual</span> <a class="code" href="classGenerator.html#a1">~Generator</a>();
00025
<a name="l00027"></a><a class="code" href="classGenerator.html#a2">00027</a> <span class="keyword">virtual</span> StkFloat <a class="code" href="classGenerator.html#a2">lastOut</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastOutput_; };
00028
00030 <span class="keyword">virtual</span> StkFloat <a class="code" href="classGenerator.html#a3">tick</a>( <span class="keywordtype">void</span> ) = 0;
00031
00033 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classGenerator.html#a3">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00034
00036
00042 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classGenerator.html#a3">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00043
00044 <span class="keyword">protected</span>:
00045
00046 StkFloat lastOutput_;
00047
00048 };
00049
00050 <span class="preprocessor">#endif</span>
00051 <span class="preprocessor"></span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,41 +1,47 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>HevyMetl.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>HevyMetl.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00029 <font class="comment">/***************************************************/</font> 00029 <span class="comment">/***************************************************/</span>
00030 00030
00031 <font class="preprocessor">#if !defined(__HEVYMETL_H)</font> 00031 <span class="preprocessor">#ifndef STK_HEVYMETL_H</span>
00032 <font class="preprocessor"></font><font class="preprocessor">#define __HEVYMETL_H</font> 00032 <span class="preprocessor"></span><span class="preprocessor">#define STK_HEVYMETL_H</span>
00033 <font class="preprocessor"></font> 00033 <span class="preprocessor"></span>
00034 <font class="preprocessor">#include "FM.h"</font> 00034 <span class="preprocessor">#include "FM.h"</span>
00035 00035
00036 <font class="keyword">class </font><a class="code" href="classHevyMetl.html">HevyMetl</a> : <font class="keyword">public</font> <a class="code" href="classFM.html">FM</a> <a name="l00036"></a><a class="code" href="classHevyMetl.html">00036</a> <span class="keyword">class </span><a class="code" href="classHevyMetl.html">HevyMetl</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
00037 { 00037 {
00038 <font class="keyword">public</font>: 00038 <span class="keyword">public</span>:
00040 <a class="code" href="classHevyMetl.html#a0">HevyMetl</a>(); 00040
00041 00043 <a class="code" href="classHevyMetl.html#a0">HevyMetl</a>();
00043 <a class="code" href="classHevyMetl.html#a1">~HevyMetl</a>();
00044 00044
00046 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00046 <a class="code" href="classHevyMetl.html#a1">~HevyMetl</a>();
00047 00047
00049 MY_FLOAT <a class="code" href="classFM.html#a14">tick</a>(); 00049 <span class="keywordtype">void</span> <a class="code" href="classHevyMetl.html#a2">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00050 }; 00050
00051 00052 StkFloat <a class="code" href="classHevyMetl.html#a3">tick</a>();
00052 <font class="preprocessor">#endif</font> 00053
</font></pre></div><HR> 00055 StkFloat *<a class="code" href="classHevyMetl.html#a3">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00056
<table> 00058
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00064 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classHevyMetl.html#a3">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00065 };
</table> 00066
00067 <span class="preprocessor">#endif</span>
</BODY> </pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,56 +1,62 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Instrmnt.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Instrmnt.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00010 <font class="comment">/***************************************************/</font> 00010 <span class="comment">/***************************************************/</span>
00011 00011
00012 <font class="preprocessor">#if !defined(__INSTRMNT_H)</font> 00012 <span class="preprocessor">#ifndef STK_INSTRMNT_H</span>
00013 <font class="preprocessor"></font><font class="preprocessor">#define __INSTRMNT_H</font> 00013 <span class="preprocessor"></span><span class="preprocessor">#define STK_INSTRMNT_H</span>
00014 <font class="preprocessor"></font> 00014 <span class="preprocessor"></span>
00015 <font class="preprocessor">#include "Stk.h"</font> 00015 <span class="preprocessor">#include "Stk.h"</span>
00016 <font class="preprocessor">#include &lt;iostream.h&gt;</font> 00016
00017 <a name="l00017"></a><a class="code" href="classInstrmnt.html">00017</a> <span class="keyword">class </span><a class="code" href="classInstrmnt.html">Instrmnt</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
00018 <font class="keyword">class </font><a class="code" href="classInstrmnt.html">Instrmnt</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a> 00018 {
00019 { 00019 <span class="keyword">public</span>:
00020 <font class="keyword">public</font>: 00021 <a class="code" href="classInstrmnt.html#a0">Instrmnt</a>();
00022 <a class="code" href="classInstrmnt.html#a0">Instrmnt</a>(); 00022
00023 00024 <span class="keyword">virtual</span> <a class="code" href="classInstrmnt.html#a1">~Instrmnt</a>();
00025 <font class="keyword">virtual</font> <a class="code" href="classInstrmnt.html#a1">~Instrmnt</a>(); 00025
00026 00027 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(StkFloat frequency, StkFloat amplitude) = 0;
00028 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude) = 0; 00028
00029 00030 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(StkFloat amplitude) = 0;
00031 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude) = 0; 00031
00032 00033 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(StkFloat frequency);
00034 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00034
00035 00036 StkFloat <a class="code" href="classInstrmnt.html#a5">lastOut</a>() <span class="keyword">const</span>;
00037 MY_FLOAT <a class="code" href="classInstrmnt.html#a5">lastOut</a>() <font class="keyword">const</font>; 00037
00038 00039 StkFloat <a class="code" href="classInstrmnt.html#a6">lastOutLeft</a>() <span class="keyword">const</span>;
00040 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>() = 0; 00040
00041 00042 StkFloat <a class="code" href="classInstrmnt.html#a7">lastOutRight</a>() <span class="keyword">const</span>;
00043 <font class="keyword">virtual</font> MY_FLOAT *<a class="code" href="classInstrmnt.html#a6">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00043
00044 00045 <span class="keyword">virtual</span> StkFloat <a class="code" href="classInstrmnt.html#a8">tick</a>() = 0;
00046 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00046
00047 00048 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classInstrmnt.html#a8">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00048 <font class="keyword">protected</font>: 00049
00049 MY_FLOAT lastOutput; 00051
00050 00057 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classInstrmnt.html#a8">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00051 }; 00058
00052 00060 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classInstrmnt.html#a11">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00053 <font class="preprocessor">#endif</font> 00061
</font></pre></div><HR> 00062 <span class="keyword">protected</span>:
00063 StkFloat lastOutput_;
<table> 00064
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00065 };
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00066
</table> 00067 <span class="preprocessor">#endif</span>
</pre></div><HR>
</BODY>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,54 +1,59 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>JCRev.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>JCRev.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00015 <font class="comment">/***************************************************/</font> 00015 <span class="comment">/***************************************************/</span>
00016 00016
00017 <font class="preprocessor">#if !defined(__JCREV_H)</font> 00017 <span class="preprocessor">#ifndef STK_JCREV_H</span>
00018 <font class="preprocessor"></font><font class="preprocessor">#define __JCREV_H</font> 00018 <span class="preprocessor"></span><span class="preprocessor">#define STK_JCREV_H</span>
00019 <font class="preprocessor"></font> 00019 <span class="preprocessor"></span>
00020 <font class="preprocessor">#include "Reverb.h"</font> 00020 <span class="preprocessor">#include "Effect.h"</span>
00021 <font class="preprocessor">#include "Delay.h"</font> 00021 <span class="preprocessor">#include "Delay.h"</span>
00022 00022
00023 <font class="keyword">class </font><a class="code" href="classJCRev.html">JCRev</a> : <font class="keyword">public</font> <a class="code" href="classReverb.html">Reverb</a> <a name="l00023"></a><a class="code" href="classJCRev.html">00023</a> <span class="keyword">class </span><a class="code" href="classJCRev.html">JCRev</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
00024 { 00024 {
00025 <font class="keyword">public</font>: 00025 <span class="keyword">public</span>:
00026 <font class="comment">// Class constructor taking a T60 decay time argument.</font> 00027 <a class="code" href="classJCRev.html#a0">JCRev</a>( StkFloat T60 = 1.0 );
00027 JCRev(MY_FLOAT T60);
00028 00028
00029 <font class="comment">// Class destructor.</font> 00030 <a class="code" href="classJCRev.html#a1">~JCRev</a>();
00030 ~JCRev();
00031 00031
00033 <font class="keywordtype">void</font> <a class="code" href="classReverb.html#a2">clear</a>(); 00033 <span class="keywordtype">void</span> <a class="code" href="classJCRev.html#a2">clear</a>();
00034 00034
00036 MY_FLOAT <a class="code" href="classReverb.html#a7">tick</a>(MY_FLOAT input); 00036 <span class="keywordtype">void</span> <a class="code" href="classJCRev.html#a3">setT60</a>( StkFloat T60 );
00037 00037
00038 <font class="keyword">protected</font>: 00039 StkFloat <a class="code" href="classJCRev.html#a4">tick</a>(StkFloat input);
00039 <a class="code" href="classDelay.html">Delay</a> *allpassDelays[3]; 00040
00040 <a class="code" href="classDelay.html">Delay</a> *combDelays[4]; 00042 StkFloat *<a class="code" href="classJCRev.html#a4">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00041 <a class="code" href="classDelay.html">Delay</a> *outLeftDelay; 00043
00042 <a class="code" href="classDelay.html">Delay</a> *outRightDelay;
00043 MY_FLOAT allpassCoefficient;
00044 MY_FLOAT combCoefficient[4];
00045 00045
00046 }; 00051 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classJCRev.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00047 00052
00048 <font class="preprocessor">#endif</font> 00053 <span class="keyword">protected</span>:
00049 <font class="preprocessor"></font> 00054 <a class="code" href="classDelay.html">Delay</a> allpassDelays_[3];
</pre></div><HR> 00055 <a class="code" href="classDelay.html">Delay</a> combDelays_[4];
00056 <a class="code" href="classDelay.html">Delay</a> outLeftDelay_;
<table> 00057 <a class="code" href="classDelay.html">Delay</a> outRightDelay_;
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00058 StkFloat allpassCoefficient_;
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00059 StkFloat combCoefficient_[4];
</table> 00060
00061 };
</BODY> 00062
00063 <span class="preprocessor">#endif</span>
00064 <span class="preprocessor"></span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,47 +0,0 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.2.8.1 -->
<h1>JetTabl.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font>
00014 <font class="comment">/***************************************************/</font>
00015
00016 <font class="preprocessor">#if !defined(__JETTABL_H)</font>
00017 <font class="preprocessor"></font><font class="preprocessor">#define __JETTABL_H</font>
00018 <font class="preprocessor"></font>
00019 <font class="preprocessor">#include "Stk.h"</font>
00020
00021 <font class="keyword">class </font><a class="code" href="classJetTabl.html">JetTabl</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a>
00022 {
00023 <font class="keyword">public</font>:
00025 <a class="code" href="classJetTabl.html#a0">JetTabl</a>();
00026
00028 <a class="code" href="classJetTabl.html#a1">~JetTabl</a>();
00029
00031 MY_FLOAT <a class="code" href="classJetTabl.html#a2">lastOut</a>() <font class="keyword">const</font>;
00032
00034 MY_FLOAT <a class="code" href="classJetTabl.html#a3">tick</a>(MY_FLOAT input);
00035
00037 MY_FLOAT *<a class="code" href="classJetTabl.html#a3">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize);
00038
00039 <font class="keyword">protected</font>:
00040 MY_FLOAT lastOutput;
00041
00042 };
00043
00044 <font class="preprocessor">#endif</font>
</font></pre></div><HR>
<table>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -0,0 +1,47 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>JetTable.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00014 <span class="comment">/***************************************************/</span>
00015
00016 <span class="preprocessor">#ifndef STK_JETTABL_H</span>
00017 <span class="preprocessor"></span><span class="preprocessor">#define STK_JETTABL_H</span>
00018 <span class="preprocessor"></span>
00019 <span class="preprocessor">#include "Function.h"</span>
00020
<a name="l00021"></a><a class="code" href="classJetTable.html">00021</a> <span class="keyword">class </span><a class="code" href="classJetTable.html">JetTable</a> : <span class="keyword">public</span> <a class="code" href="classFunction.html">Function</a>
00022 {
00023 <span class="keyword">public</span>:
00025 <a class="code" href="classJetTable.html#a0">JetTable</a>();
00026
00028 <a class="code" href="classJetTable.html#a1">~JetTable</a>();
00029
00031 StkFloat <a class="code" href="classJetTable.html#a2">tick</a>(StkFloat input);
00032
00034 StkFloat *<a class="code" href="classJetTable.html#a2">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00035
00037
00043 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classJetTable.html#a2">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00044
00045 <span class="keyword">protected</span>:
00046
00047 };
00048
00049 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,57 +1,61 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Mandolin.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Mandolin.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00028 <font class="comment">/***************************************************/</font> 00028 <span class="comment">/***************************************************/</span>
00029 00029
00030 <font class="preprocessor">#if !defined(__MANDOLIN_H)</font> 00030 <span class="preprocessor">#ifndef STK_MANDOLIN_H</span>
00031 <font class="preprocessor"></font><font class="preprocessor">#define __MANDOLIN_H</font> 00031 <span class="preprocessor"></span><span class="preprocessor">#define STK_MANDOLIN_H</span>
00032 <font class="preprocessor"></font> 00032 <span class="preprocessor"></span>
00033 <font class="preprocessor">#include "PluckTwo.h"</font> 00033 <span class="preprocessor">#include "PluckTwo.h"</span>
00034 <font class="preprocessor">#include "WvIn.h"</font> 00034 <span class="preprocessor">#include "WvIn.h"</span>
00035 00035
00036 <font class="keyword">class </font><a class="code" href="classMandolin.html">Mandolin</a> : <font class="keyword">public</font> <a class="code" href="classPluckTwo.html">PluckTwo</a> <a name="l00036"></a><a class="code" href="classMandolin.html">00036</a> <span class="keyword">class </span><a class="code" href="classMandolin.html">Mandolin</a> : <span class="keyword">public</span> <a class="code" href="classPluckTwo.html">PluckTwo</a>
00037 { 00037 {
00038 <font class="keyword">public</font>: 00038 <span class="keyword">public</span>:
00040 <a class="code" href="classMandolin.html#a0">Mandolin</a>(MY_FLOAT lowestFrequency); 00040 <a class="code" href="classMandolin.html#a0">Mandolin</a>(StkFloat lowestFrequency);
00041 00041
00043 <font class="keyword">virtual</font> <a class="code" href="classMandolin.html#a1">~Mandolin</a>(); 00043 <a class="code" href="classMandolin.html#a1">~Mandolin</a>();
00044 00044
00046 <font class="keywordtype">void</font> <a class="code" href="classMandolin.html#a2">pluck</a>(MY_FLOAT amplitude); 00046 <span class="keywordtype">void</span> <a class="code" href="classMandolin.html#a2">pluck</a>(StkFloat amplitude);
00047 00047
00049 <font class="keywordtype">void</font> <a class="code" href="classMandolin.html#a2">pluck</a>(MY_FLOAT amplitude,MY_FLOAT position); 00049 <span class="keywordtype">void</span> <a class="code" href="classMandolin.html#a2">pluck</a>(StkFloat amplitude,StkFloat position);
00050 00050
00052 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00052 <span class="keywordtype">void</span> <a class="code" href="classMandolin.html#a4">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00053 00053
00055 <font class="keywordtype">void</font> <a class="code" href="classMandolin.html#a5">setBodySize</a>(MY_FLOAT size); 00055 <span class="keywordtype">void</span> <a class="code" href="classMandolin.html#a5">setBodySize</a>(StkFloat size);
00056 00056
00058 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classPluckTwo.html#a9">tick</a>(); 00058 StkFloat <a class="code" href="classMandolin.html#a6">tick</a>();
00059 00059
00061 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00061 StkFloat *<a class="code" href="classMandolin.html#a6">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00062 00062
00063 <font class="keyword">protected</font>: 00064
00064 <a class="code" href="classWvIn.html">WvIn</a> *soundfile[12]; 00070 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classMandolin.html#a6">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00065 MY_FLOAT directBody; 00071
00066 <font class="keywordtype">int</font> mic; 00073 <span class="keywordtype">void</span> <a class="code" href="classMandolin.html#a9">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00067 <font class="keywordtype">long</font> dampTime; 00074
00068 <font class="keywordtype">bool</font> waveDone; 00075 <span class="keyword">protected</span>:
00069 }; 00076 <a class="code" href="classWvIn.html">WvIn</a> *soundfile_[12];
00070 00077 <span class="keywordtype">int</span> mic_;
00071 <font class="preprocessor">#endif</font> 00078 <span class="keywordtype">long</span> dampTime_;
</font></pre></div><HR> 00079 <span class="keywordtype">bool</span> waveDone_;
00080 };
<table> 00081
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00082 <span class="preprocessor">#endif</span>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> </pre></div><HR>
</table>
<table>
</BODY> <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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,89 +1,92 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Mesh2D.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Mesh2D.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00025 <font class="comment">/***************************************************/</font> 00025 <span class="comment">/***************************************************/</span>
00026 00026
00027 <font class="preprocessor">#if !defined(__MESH2D_H)</font> 00027 <span class="preprocessor">#ifndef STK_MESH2D_H</span>
00028 <font class="preprocessor"></font><font class="preprocessor">#define __MESH2D_H</font> 00028 <span class="preprocessor"></span><span class="preprocessor">#define STK_MESH2D_H</span>
00029 <font class="preprocessor"></font> 00029 <span class="preprocessor"></span>
00030 <font class="preprocessor">#include "Instrmnt.h"</font> 00030 <span class="preprocessor">#include "Instrmnt.h"</span>
00031 <font class="preprocessor">#include "OnePole.h"</font> 00031 <span class="preprocessor">#include "OnePole.h"</span>
00032 00032
00033 <font class="preprocessor">#define NXMAX ((short)(12))</font> 00033 <span class="keyword">const</span> <span class="keywordtype">short</span> NXMAX = 12;
00034 <font class="preprocessor"></font><font class="preprocessor">#define NYMAX ((short)(12))</font> 00034 <span class="keyword">const</span> <span class="keywordtype">short</span> NYMAX = 12;
00035 <font class="preprocessor"></font> 00035
00036 <font class="keyword">class </font><a class="code" href="classMesh2D.html">Mesh2D</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00036"></a><a class="code" href="classMesh2D.html">00036</a> <span class="keyword">class </span><a class="code" href="classMesh2D.html">Mesh2D</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00037 { 00037 {
00038 <font class="keyword">public</font>: 00038 <span class="keyword">public</span>:
00040 <a class="code" href="classMesh2D.html#a0">Mesh2D</a>(<font class="keywordtype">short</font> nX, <font class="keywordtype">short</font> nY); 00040 <a class="code" href="classMesh2D.html#a0">Mesh2D</a>(<span class="keywordtype">short</span> nX, <span class="keywordtype">short</span> nY);
00041 00041
00043 <a class="code" href="classMesh2D.html#a1">~Mesh2D</a>(); 00043 <a class="code" href="classMesh2D.html#a1">~Mesh2D</a>();
00044 00044
00046 <font class="keywordtype">void</font> <a class="code" href="classMesh2D.html#a2">clear</a>(); 00046 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a2">clear</a>();
00047 00047
00049 <font class="keywordtype">void</font> <a class="code" href="classMesh2D.html#a3">setNX</a>(<font class="keywordtype">short</font> lenX); 00049 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a3">setNX</a>(<span class="keywordtype">short</span> lenX);
00050 00050
00052 <font class="keywordtype">void</font> <a class="code" href="classMesh2D.html#a4">setNY</a>(<font class="keywordtype">short</font> lenY); 00052 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a4">setNY</a>(<span class="keywordtype">short</span> lenY);
00053 00053
00055 <font class="keywordtype">void</font> <a class="code" href="classMesh2D.html#a5">setInputPosition</a>(MY_FLOAT xFactor, MY_FLOAT yFactor); 00055 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a5">setInputPosition</a>(StkFloat xFactor, StkFloat yFactor);
00056 00056
00058 <font class="keywordtype">void</font> <a class="code" href="classMesh2D.html#a6">setDecay</a>(MY_FLOAT decayFactor); 00058 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a6">setDecay</a>(StkFloat decayFactor);
00059 00059
00061 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00061 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a7">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00062 00062
00064 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00064 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a8">noteOff</a>(StkFloat amplitude);
00065 00065
00067 MY_FLOAT <a class="code" href="classMesh2D.html#a9">energy</a>(); 00067 StkFloat <a class="code" href="classMesh2D.html#a9">energy</a>();
00068 00068
00070 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00070 StkFloat <a class="code" href="classMesh2D.html#a10">tick</a>();
00071 00071
00073 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(MY_FLOAT input); 00073 StkFloat <a class="code" href="classMesh2D.html#a10">tick</a>(StkFloat input);
00074 00074
00076 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00076 StkFloat *<a class="code" href="classMesh2D.html#a10">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00077 00077
00078 <font class="keyword">protected</font>:
00079 00079
00080 MY_FLOAT tick0(); 00085 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classMesh2D.html#a10">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00081 MY_FLOAT tick1(); 00086
00082 <font class="keywordtype">void</font> clearMesh(); 00088 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a14">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00083 00089
00084 <font class="keywordtype">short</font> NX, NY; 00090 <span class="keyword">protected</span>:
00085 <font class="keywordtype">short</font> xInput, yInput; 00091
00086 <a class="code" href="classOnePole.html">OnePole</a> *filterX[NXMAX]; 00092 StkFloat tick0();
00087 <a class="code" href="classOnePole.html">OnePole</a> *filterY[NYMAX]; 00093 StkFloat tick1();
00088 MY_FLOAT v[NXMAX-1][NYMAX-1]; <font class="comment">// junction velocities</font> 00094 <span class="keywordtype">void</span> clearMesh();
00089 MY_FLOAT vxp[NXMAX][NYMAX]; <font class="comment">// positive-x velocity wave</font> 00095
00090 MY_FLOAT vxm[NXMAX][NYMAX]; <font class="comment">// negative-x velocity wave</font> 00096 <span class="keywordtype">short</span> NX_, NY_;
00091 MY_FLOAT vyp[NXMAX][NYMAX]; <font class="comment">// positive-y velocity wave</font> 00097 <span class="keywordtype">short</span> xInput_, yInput_;
00092 MY_FLOAT vym[NXMAX][NYMAX]; <font class="comment">// negative-y velocity wave</font> 00098 <a class="code" href="classOnePole.html">OnePole</a> filterX_[NXMAX];
00093 00099 <a class="code" href="classOnePole.html">OnePole</a> filterY_[NYMAX];
00094 <font class="comment">// Alternate buffers</font> 00100 StkFloat v_[NXMAX-1][NYMAX-1]; <span class="comment">// junction velocities</span>
00095 MY_FLOAT vxp1[NXMAX][NYMAX]; <font class="comment">// positive-x velocity wave</font> 00101 StkFloat vxp_[NXMAX][NYMAX]; <span class="comment">// positive-x velocity wave</span>
00096 MY_FLOAT vxm1[NXMAX][NYMAX]; <font class="comment">// negative-x velocity wave</font> 00102 StkFloat vxm_[NXMAX][NYMAX]; <span class="comment">// negative-x velocity wave</span>
00097 MY_FLOAT vyp1[NXMAX][NYMAX]; <font class="comment">// positive-y velocity wave</font> 00103 StkFloat vyp_[NXMAX][NYMAX]; <span class="comment">// positive-y velocity wave</span>
00098 MY_FLOAT vym1[NXMAX][NYMAX]; <font class="comment">// negative-y velocity wave</font> 00104 StkFloat vym_[NXMAX][NYMAX]; <span class="comment">// negative-y velocity wave</span>
00099 00105
00100 <font class="keywordtype">int</font> counter; <font class="comment">// time in samples</font> 00106 <span class="comment">// Alternate buffers</span>
00101 00107 StkFloat vxp1_[NXMAX][NYMAX]; <span class="comment">// positive-x velocity wave</span>
00102 00108 StkFloat vxm1_[NXMAX][NYMAX]; <span class="comment">// negative-x velocity wave</span>
00103 }; 00109 StkFloat vyp1_[NXMAX][NYMAX]; <span class="comment">// positive-y velocity wave</span>
00104 00110 StkFloat vym1_[NXMAX][NYMAX]; <span class="comment">// negative-y velocity wave</span>
00105 <font class="preprocessor">#endif</font> 00111
</font></pre></div><HR> 00112 <span class="keywordtype">int</span> counter_; <span class="comment">// time in samples</span>
00113 };
<table> 00114
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00115 <span class="preprocessor">#endif</span>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> </pre></div><HR>
</table>
<table>
</BODY> <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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,115 +1,107 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Messager.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Messager.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00034 <font class="comment">/***************************************************/</font> 00033 <span class="comment">/***************************************************/</span>
00035 00034
00036 <font class="preprocessor">#if !defined(__MESSAGER_H)</font> 00035 <span class="preprocessor">#ifndef STK_MESSAGER_H</span>
00037 <font class="preprocessor"></font><font class="preprocessor">#define __MESSSAGER_H</font> 00036 <span class="preprocessor"></span><span class="preprocessor">#define STK_MESSAGER_H</span>
00038 <font class="preprocessor"></font> 00037 <span class="preprocessor"></span>
00039 <font class="preprocessor">#include "Stk.h"</font> 00038 <span class="preprocessor">#include "Stk.h"</span>
00040 <font class="preprocessor">#include "SKINI.h"</font> 00039 <span class="preprocessor">#include "Skini.h"</span>
00040 <span class="preprocessor">#include &lt;queue&gt;</span>
00041 00041
00042 <font class="preprocessor">#define MESSAGE_LENGTH 128</font> 00042 <span class="keyword">const</span> <span class="keywordtype">int</span> DEFAULT_QUEUE_LIMIT = 200;
00043 <font class="preprocessor"></font><font class="preprocessor">#define MAX_MESSAGES 25</font> 00043
00044 <font class="preprocessor"></font> 00044 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
00045 <font class="preprocessor">#if defined(__STK_REALTIME__)</font> 00045 <span class="preprocessor"></span>
00046 <font class="preprocessor"></font> 00046 <span class="preprocessor">#include "Mutex.h"</span>
00047 <font class="preprocessor">#include "Thread.h"</font> 00047 <span class="preprocessor">#include "Thread.h"</span>
00048 <font class="preprocessor">#include "Socket.h"</font> 00048 <span class="preprocessor">#include "Socket.h"</span>
00049 <font class="preprocessor">#include "RtMidi.h"</font> 00049 <span class="preprocessor">#include "RtMidi.h"</span>
00050 00050
00051 <font class="preprocessor">#define STK_MIDI 0x0001</font> 00051 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> THREAD_RETURN THREAD_TYPE stdinHandler(<span class="keywordtype">void</span> * ptr);
00052 <font class="preprocessor"></font><font class="preprocessor">#define STK_PIPE 0x0002</font> 00052
00053 <font class="preprocessor"></font><font class="preprocessor">#define STK_SOCKET 0x0004</font> 00053 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> THREAD_RETURN THREAD_TYPE socketHandler(<span class="keywordtype">void</span> * ptr);
00054 <font class="preprocessor"></font> 00054
00055 <font class="keyword">extern</font> <font class="stringliteral">"C"</font> THREAD_RETURN THREAD_TYPE stdinHandler(<font class="keywordtype">void</font> * ptr); 00055 <span class="preprocessor">#endif // __STK_REALTIME__</span>
00056 00056 <span class="preprocessor"></span>
00057 <font class="preprocessor">#if (defined(__OS_IRIX__) || defined(__OS_LINUX__))</font> <a name="l00057"></a><a class="code" href="classMessager.html">00057</a> <span class="keyword">class </span><a class="code" href="classMessager.html">Messager</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
00058 <font class="preprocessor"></font><font class="preprocessor"> #include &lt;sys/types.h&gt;</font> 00058 {
00059 <font class="preprocessor"> #include &lt;sys/time.h&gt;</font> 00059 <span class="keyword">public</span>:
00060 <font class="preprocessor">#endif</font> 00060
00061 <font class="preprocessor"></font> 00061 <span class="comment">// This structure is used to share data among the various realtime</span>
00062 <font class="preprocessor">#endif // __STK_REALTIME__</font> 00062 <span class="comment">// messager threads. It must be public.</span>
00063 <font class="preprocessor"></font> 00063 <span class="keyword">struct </span>MessagerData {
00064 <font class="keyword">class </font><a class="code" href="classMessager.html">Messager</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a> 00064 <a class="code" href="classSkini.html">Skini</a> skini;
00065 { 00065 std::queue&lt;Skini::Message&gt; queue;
00066 <font class="keyword">public</font>: 00066 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueLimit;
00067 <span class="keywordtype">int</span> sources;
00068 00068
00075 <a class="code" href="classMessager.html#a0">Messager</a>(<font class="keywordtype">int</font> inputMask = 0); 00069 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
00076 00070 <span class="preprocessor"></span> <a class="code" href="classMutex.html">Mutex</a> mutex;
00078 <a class="code" href="classMessager.html#a1">~Messager</a>(); 00071 <a class="code" href="classRtMidiIn.html">RtMidiIn</a> *midi;
00079 00072 <a class="code" href="classSocket.html">Socket</a> *socket;
00073 std::vector&lt;int&gt; fd;
00074 fd_set mask;
00075 <span class="preprocessor">#endif</span>
00076 <span class="preprocessor"></span>
00077 <span class="comment">// Default constructor.</span>
00078 MessagerData()
00079 :queueLimit(0), sources(0) {}
00080 };
00081 00081
00087 <font class="keywordtype">long</font> <a class="code" href="classMessager.html#a2">nextMessage</a>(<font class="keywordtype">void</font>); 00083 <a class="code" href="classMessager.html#a0">Messager</a>();
00088 00084
00090 <font class="keywordtype">void</font> <a class="code" href="classMessager.html#a3">setRtDelta</a>(<font class="keywordtype">long</font> nSamples); 00086 <a class="code" href="classMessager.html#a1">~Messager</a>();
00091 00087
00093 <font class="keywordtype">long</font> <a class="code" href="classMessager.html#a4">getDelta</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00089
00094 00095 <span class="keywordtype">void</span> <a class="code" href="classMessager.html#a2">popMessage</a>( <a class="code" href="structSkini_1_1Message.html">Skini::Message</a>&amp; message );
00096 <font class="keywordtype">long</font> <a class="code" href="classMessager.html#a5">getType</a>() <font class="keyword">const</font>; 00096
00097 00098 <span class="keywordtype">void</span> <a class="code" href="classMessager.html#a3">pushMessage</a>( <a class="code" href="structSkini_1_1Message.html">Skini::Message</a>&amp; message );
00099 MY_FLOAT <a class="code" href="classMessager.html#a6">getByteTwo</a>() <font class="keyword">const</font>; 00099
00100 00101
00102 MY_FLOAT <a class="code" href="classMessager.html#a7">getByteThree</a>() <font class="keyword">const</font>; 00109 <span class="keywordtype">bool</span> <a class="code" href="classMessager.html#a4">setScoreFile</a>( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename );
00103 00110
00105 <font class="keywordtype">long</font> <a class="code" href="classMessager.html#a8">getChannel</a>() <font class="keyword">const</font>; 00111 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
00106 00112 <span class="preprocessor"></span>
00107 <font class="keyword">protected</font>: 00113
00108 00122 <span class="keywordtype">bool</span> startStdInput();
00109 <a class="code" href="classSKINI.html">SKINI</a> *skini; 00123
00110 <font class="keywordtype">long</font> type;
00111 <font class="keywordtype">long</font> channel;
00112 MY_FLOAT byte2;
00113 MY_FLOAT byte3;
00114 <font class="keywordtype">int</font> sources;
00115 <font class="keywordtype">long</font> delta;
00116 <font class="keywordtype">long</font> rtDelta;
00117 <font class="keywordtype">char</font> message[MAX_MESSAGES][MESSAGE_LENGTH];
00118 <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> messageIndex;
00119 <font class="keywordtype">int</font> nMessages;
00120
00121 <font class="preprocessor">#if defined(__STK_REALTIME__)</font>
00122 <font class="preprocessor"></font>
00123 <font class="comment">// Check MIDI source for new messages.</font>
00124 <font class="keywordtype">bool</font> midiMessage(<font class="keywordtype">void</font>);
00125 00125
00126 <font class="comment">// Check socket sources for new messages.</font> 00136 <span class="keywordtype">bool</span> startSocketInput( <span class="keywordtype">int</span> port=2001 );
00127 <font class="keywordtype">bool</font> socketMessage(<font class="keywordtype">void</font>); 00137
00128 00139
00129 <font class="comment">// Receive and parse socket data.</font> 00151 <span class="keywordtype">bool</span> startMidiInput( <span class="keywordtype">int</span> port=0 );
00130 <font class="keywordtype">bool</font> readSocket(<font class="keywordtype">int</font> fd); 00152
00131 00153 <span class="preprocessor">#endif</span>
00132 <a class="code" href="classRtMidi.html">RtMidi</a> *midi; 00154 <span class="preprocessor"></span>
00133 <a class="code" href="classThread.html">Thread</a> *thread; 00155 <span class="keyword">protected</span>:
00134 <a class="code" href="classSocket.html">Socket</a> *soket; 00156
00135 00157 MessagerData data_;
00136 <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> nSockets; 00158
00137 fd_set mask; 00159 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
00138 <font class="keywordtype">int</font> maxfd; 00160 <span class="preprocessor"></span> <a class="code" href="classThread.html">Thread</a> stdinThread_;
00139 <font class="keywordtype">int</font> pipefd; 00161 <a class="code" href="classThread.html">Thread</a> socketThread_;
00140 <font class="keywordtype">int</font> fd[16]; 00162 <span class="preprocessor">#endif</span>
00141 <font class="keywordtype">char</font> error[256]; 00163 <span class="preprocessor"></span>
00142 00164 };
00143 <font class="preprocessor">#endif // __STK_REALTIME__</font> 00165
00144 <font class="preprocessor"></font> 00166 <span class="preprocessor">#endif</span>
00145 }; </pre></div><HR>
00146
00147 <font class="preprocessor">#endif // defined(__MESSAGER_H)</font> <table>
</font></pre></div><HR> <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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<table> </table>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> </BODY>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -0,0 +1,92 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>MidiFileIn.h</h1><div class="fragment"><pre>00001 <span class="comment">/**********************************************************************/</span>
00016 <span class="comment">/**********************************************************************/</span>
00017
00018 <span class="preprocessor">#ifndef STK_MIDIFILEIN_H</span>
00019 <span class="preprocessor"></span><span class="preprocessor">#define STK_MIDIFILEIN_H</span>
00020 <span class="preprocessor"></span>
00021 <span class="preprocessor">#include "Stk.h"</span>
00022 <span class="preprocessor">#include &lt;string&gt;</span>
00023 <span class="preprocessor">#include &lt;vector&gt;</span>
00024 <span class="preprocessor">#include &lt;fstream&gt;</span>
00025 <span class="preprocessor">#include &lt;sstream&gt;</span>
00026
<a name="l00027"></a><a class="code" href="classMidiFileIn.html">00027</a> <span class="keyword">class </span><a class="code" href="classMidiFileIn.html">MidiFileIn</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
00028 {
00029 <span class="keyword">public</span>:
00031
00035 <a class="code" href="classMidiFileIn.html#a0">MidiFileIn</a>( std::string fileName );
00036
00038 <a class="code" href="classMidiFileIn.html#a1">~MidiFileIn</a>();
00039
00041 <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a2">getFileFormat</a>() <span class="keyword">const</span>;
00042
00044 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a3">getNumberOfTracks</a>() <span class="keyword">const</span>;
00045
00047
00052 <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a4">getDivision</a>() <span class="keyword">const</span>;
00053
00055
00059 <span class="keywordtype">void</span> <a class="code" href="classMidiFileIn.html#a5">rewindTrack</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
00060
00062
00069 <span class="keywordtype">double</span> <a class="code" href="classMidiFileIn.html#a6">getTickSeconds</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
00070
00072
00084 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classMidiFileIn.html#a7">getNextEvent</a>( std::vector&lt;unsigned char&gt; *event, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
00085
00087
00097 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classMidiFileIn.html#a8">getNextMidiEvent</a>( std::vector&lt;unsigned char&gt; *midiEvent, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
00098
00099 <span class="keyword">protected</span>:
00100
00101 <span class="comment">// This protected class function is used for reading variable-length</span>
00102 <span class="comment">// MIDI file values. It is assumed that this function is called with</span>
00103 <span class="comment">// the file read pointer positioned at the start of a</span>
00104 <span class="comment">// variable-length value. The function returns true if the value is</span>
00105 <span class="comment">// successfully parsed. Otherwise, it returns false.</span>
00106 <span class="keywordtype">bool</span> readVariableLength( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *value );
00107
00108 std::ifstream file_;
00109 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nTracks_;
00110 <span class="keywordtype">int</span> format_;
00111 <span class="keywordtype">int</span> division_;
00112 <span class="keywordtype">bool</span> usingTimeCode_;
00113 std::vector&lt;double&gt; tickSeconds_;
00114 std::vector&lt;long&gt; trackPointers_;
00115 std::vector&lt;long&gt; trackOffsets_;
00116 std::vector&lt;long&gt; trackLengths_;
00117 std::vector&lt;char&gt; trackStatus_;
00118
00119 <span class="comment">// This structure and the following variables are used to save and</span>
00120 <span class="comment">// keep track of a format 1 tempo map (and the initial tickSeconds</span>
00121 <span class="comment">// parameter for formats 0 and 2).</span>
00122 <span class="keyword">struct </span>TempoChange {
00123 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> count;
00124 <span class="keywordtype">double</span> tickSeconds;
00125 };
00126 std::vector&lt;TempoChange&gt; tempoEvents_;
00127 std::vector&lt;unsigned long&gt; trackCounters_;
00128 std::vector&lt;unsigned int&gt; trackTempoIndex_;
00129 };
00130
00131 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,47 +1,47 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>ModalBar.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>ModalBar.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00028 <font class="comment">/***************************************************/</font> 00029 <span class="comment">/***************************************************/</span>
00029 00030
00030 <font class="preprocessor">#if !defined(__MODALBAR_H)</font> 00031 <span class="preprocessor">#ifndef STK_MODALBAR_H</span>
00031 <font class="preprocessor"></font><font class="preprocessor">#define __MODALBAR_H</font> 00032 <span class="preprocessor"></span><span class="preprocessor">#define STK_MODALBAR_H</span>
00032 <font class="preprocessor"></font> 00033 <span class="preprocessor"></span>
00033 <font class="preprocessor">#include "Modal.h"</font> 00034 <span class="preprocessor">#include "Modal.h"</span>
00034 00035
00035 <font class="keyword">class </font><a class="code" href="classModalBar.html">ModalBar</a> : <font class="keyword">public</font> <a class="code" href="classModal.html">Modal</a> <a name="l00036"></a><a class="code" href="classModalBar.html">00036</a> <span class="keyword">class </span><a class="code" href="classModalBar.html">ModalBar</a> : <span class="keyword">public</span> <a class="code" href="classModal.html">Modal</a>
00036 { 00037 {
00037 <font class="keyword">public</font>: 00038 <span class="keyword">public</span>:
00039 <a class="code" href="classModalBar.html#a0">ModalBar</a>(); 00040 <a class="code" href="classModalBar.html#a0">ModalBar</a>();
00040 00041
00042 <a class="code" href="classModalBar.html#a1">~ModalBar</a>(); 00043 <a class="code" href="classModalBar.html#a1">~ModalBar</a>();
00043 00044
00045 <font class="keywordtype">void</font> <a class="code" href="classModalBar.html#a2">setStickHardness</a>(MY_FLOAT hardness); 00046 <span class="keywordtype">void</span> <a class="code" href="classModalBar.html#a2">setStickHardness</a>(StkFloat hardness);
00046 00047
00048 <font class="keywordtype">void</font> <a class="code" href="classModalBar.html#a3">setStrikePosition</a>(MY_FLOAT position); 00049 <span class="keywordtype">void</span> <a class="code" href="classModalBar.html#a3">setStrikePosition</a>(StkFloat position);
00049 00050
00051 <font class="keywordtype">void</font> <a class="code" href="classModalBar.html#a4">setPreset</a>(<font class="keywordtype">int</font> preset); 00052 <span class="keywordtype">void</span> <a class="code" href="classModalBar.html#a4">setPreset</a>(<span class="keywordtype">int</span> preset);
00052 00053
00054 <font class="keywordtype">void</font> <a class="code" href="classModalBar.html#a5">setModulationDepth</a>(MY_FLOAT mDepth); 00055 <span class="keywordtype">void</span> <a class="code" href="classModalBar.html#a5">setModulationDepth</a>(StkFloat mDepth);
00055 00056
00057 <font class="keywordtype">void</font> <a class="code" href="classModal.html#a13">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00058 <span class="keywordtype">void</span> <a class="code" href="classModalBar.html#a6">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00058 }; 00059 };
00059 00060
00060 <font class="preprocessor">#endif</font> 00061 <span class="preprocessor">#endif</span>
</font></pre></div><HR> </pre></div><HR>
<table> <table>
<tr><td><A HREF="http://www-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-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> <tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table> </table>
</BODY> </BODY>
</HTML> </HTML>

View File

@@ -1,82 +1,89 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Modal.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Modal.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00012 <font class="comment">/***************************************************/</font> 00012 <span class="comment">/***************************************************/</span>
00013 00013
00014 <font class="preprocessor">#if !defined(__MODAL_H)</font> 00014 <span class="preprocessor">#ifndef STK_MODAL_H</span>
00015 <font class="preprocessor"></font><font class="preprocessor">#define __MODAL_H</font> 00015 <span class="preprocessor"></span><span class="preprocessor">#define STK_MODAL_H</span>
00016 <font class="preprocessor"></font> 00016 <span class="preprocessor"></span>
00017 <font class="preprocessor">#include "Instrmnt.h"</font> 00017 <span class="preprocessor">#include "Instrmnt.h"</span>
00018 <font class="preprocessor">#include "Envelope.h"</font> 00018 <span class="preprocessor">#include "Envelope.h"</span>
00019 <font class="preprocessor">#include "WaveLoop.h"</font> 00019 <span class="preprocessor">#include "WaveLoop.h"</span>
00020 <font class="preprocessor">#include "BiQuad.h"</font> 00020 <span class="preprocessor">#include "BiQuad.h"</span>
00021 <font class="preprocessor">#include "OnePole.h"</font> 00021 <span class="preprocessor">#include "OnePole.h"</span>
00022 00022
00023 <font class="keyword">class </font><a class="code" href="classModal.html">Modal</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00023"></a><a class="code" href="classModal.html">00023</a> <span class="keyword">class </span><a class="code" href="classModal.html">Modal</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00024 { 00024 {
00025 <font class="keyword">public</font>: 00025 <span class="keyword">public</span>:
00027 <a class="code" href="classModal.html#a0">Modal</a>( <font class="keywordtype">int</font> modes = 4 ); 00027
00028 00030 <a class="code" href="classModal.html#a0">Modal</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modes = 4 );
00030 <font class="keyword">virtual</font> <a class="code" href="classModal.html#a1">~Modal</a>();
00031 00031
00033 <font class="keywordtype">void</font> <a class="code" href="classModal.html#a2">clear</a>(); 00033 <span class="keyword">virtual</span> <a class="code" href="classModal.html#a1">~Modal</a>();
00034 00034
00036 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00036 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a2">clear</a>();
00037 00037
00039 <font class="keywordtype">void</font> <a class="code" href="classModal.html#a4">setRatioAndRadius</a>(<font class="keywordtype">int</font> modeIndex, MY_FLOAT ratio, MY_FLOAT radius); 00039 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classModal.html#a3">setFrequency</a>(StkFloat frequency);
00040 00040
00042 <font class="keywordtype">void</font> <a class="code" href="classModal.html#a5">setMasterGain</a>(MY_FLOAT aGain); 00042 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a4">setRatioAndRadius</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modeIndex, StkFloat ratio, StkFloat radius);
00043 00043
00045 <font class="keywordtype">void</font> <a class="code" href="classModal.html#a6">setDirectGain</a>(MY_FLOAT aGain); 00045 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a5">setMasterGain</a>(StkFloat aGain);
00046 00046
00048 <font class="keywordtype">void</font> <a class="code" href="classModal.html#a7">setModeGain</a>(<font class="keywordtype">int</font> modeIndex, MY_FLOAT gain); 00048 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a6">setDirectGain</a>(StkFloat aGain);
00049 00049
00051 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classModal.html#a8">strike</a>(MY_FLOAT amplitude); 00051 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a7">setModeGain</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modeIndex, StkFloat gain);
00052 00052
00054 <font class="keywordtype">void</font> <a class="code" href="classModal.html#a9">damp</a>(MY_FLOAT amplitude); 00054 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classModal.html#a8">strike</a>(StkFloat amplitude);
00055 00055
00057 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00057 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a9">damp</a>(StkFloat amplitude);
00058 00058
00060 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00060 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a10">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00061 00061
00063 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00063 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a11">noteOff</a>(StkFloat amplitude);
00064 00064
00066 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value) = 0; 00066 <span class="keyword">virtual</span> StkFloat <a class="code" href="classModal.html#a12">tick</a>();
00067 00067
00068 <font class="keyword">protected</font>: 00069 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classModal.html#a12">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00069 <a class="code" href="classEnvelope.html">Envelope</a> *envelope; 00070
00070 <a class="code" href="classWvIn.html">WvIn</a> *wave; 00072
00071 <a class="code" href="classBiQuad.html">BiQuad</a> **filters; 00078 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classModal.html#a12">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00072 <a class="code" href="classOnePole.html">OnePole</a> *onepole; 00079
00073 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato; 00081 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classModal.html#a15">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value) = 0;
00074 <font class="keywordtype">int</font> nModes; 00082
00075 MY_FLOAT vibratoGain; 00083 <span class="keyword">protected</span>:
00076 MY_FLOAT masterGain; 00084 <a class="code" href="classEnvelope.html">Envelope</a> envelope_;
00077 MY_FLOAT directGain; 00085 <a class="code" href="classWvIn.html">WvIn</a> *wave_;
00078 MY_FLOAT stickHardness; 00086 <a class="code" href="classBiQuad.html">BiQuad</a> **filters_;
00079 MY_FLOAT strikePosition; 00087 <a class="code" href="classOnePole.html">OnePole</a> onepole_;
00080 MY_FLOAT baseFrequency; 00088 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato_;
00081 MY_FLOAT *ratios; 00089
00082 MY_FLOAT *radii; 00090 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nModes_;
00083 00091 std::vector&lt;StkFloat&gt; ratios_;
00084 }; 00092 std::vector&lt;StkFloat&gt; radii_;
00085 00093
00086 <font class="preprocessor">#endif</font> 00094 StkFloat vibratoGain_;
</font></pre></div><HR> 00095 StkFloat masterGain_;
00096 StkFloat directGain_;
<table> 00097 StkFloat stickHardness_;
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00098 StkFloat strikePosition_;
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00099 StkFloat baseFrequency_;
</table> 00100 };
00101
</BODY> 00102 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,63 +1,64 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Modulate.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Modulate.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00011 <font class="comment">/***************************************************/</font> 00011 <span class="comment">/***************************************************/</span>
00012 00012
00013 <font class="preprocessor">#if !defined(__MODULATE_H)</font> 00013 <span class="preprocessor">#ifndef STK_MODULATE_H</span>
00014 <font class="preprocessor"></font><font class="preprocessor">#define __MODULATE_H</font> 00014 <span class="preprocessor"></span><span class="preprocessor">#define STK_MODULATE_H</span>
00015 <font class="preprocessor"></font> 00015 <span class="preprocessor"></span>
00016 <font class="preprocessor">#include "Stk.h"</font> 00016 <span class="preprocessor">#include "Generator.h"</span>
00017 <font class="preprocessor">#include "WaveLoop.h"</font> 00017 <span class="preprocessor">#include "WaveLoop.h"</span>
00018 <font class="preprocessor">#include "SubNoise.h"</font> 00018 <span class="preprocessor">#include "SubNoise.h"</span>
00019 <font class="preprocessor">#include "OnePole.h"</font> 00019 <span class="preprocessor">#include "OnePole.h"</span>
00020 00020
00021 <font class="keyword">class </font><a class="code" href="classModulate.html">Modulate</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a> <a name="l00021"></a><a class="code" href="classModulate.html">00021</a> <span class="keyword">class </span><a class="code" href="classModulate.html">Modulate</a> : <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
00022 { 00022 {
00023 <font class="keyword">public</font>: 00023 <span class="keyword">public</span>:
00025 <a class="code" href="classModulate.html#a0">Modulate</a>(); 00025
00026 00028 <a class="code" href="classModulate.html#a0">Modulate</a>();
00028 <a class="code" href="classModulate.html#a1">~Modulate</a>();
00029 00029
00031 <font class="keywordtype">void</font> <a class="code" href="classModulate.html#a2">reset</a>(); 00031 <a class="code" href="classModulate.html#a1">~Modulate</a>();
00032 00032
00034 <font class="keywordtype">void</font> <a class="code" href="classModulate.html#a3">setVibratoRate</a>(MY_FLOAT aRate); 00034 <span class="keywordtype">void</span> <a class="code" href="classModulate.html#a2">reset</a>();
00035 00035
00037 <font class="keywordtype">void</font> <a class="code" href="classModulate.html#a4">setVibratoGain</a>(MY_FLOAT aGain); 00037 <span class="keywordtype">void</span> <a class="code" href="classModulate.html#a3">setVibratoRate</a>(StkFloat rate);
00038 00038
00040 <font class="keywordtype">void</font> <a class="code" href="classModulate.html#a5">setRandomGain</a>(MY_FLOAT aGain); 00040 <span class="keywordtype">void</span> <a class="code" href="classModulate.html#a4">setVibratoGain</a>(StkFloat gain);
00041 00041
00043 MY_FLOAT <a class="code" href="classModulate.html#a6">tick</a>(); 00043 <span class="keywordtype">void</span> <a class="code" href="classModulate.html#a5">setRandomGain</a>(StkFloat gain);
00044 00044
00046 <font class="keyword">virtual</font> MY_FLOAT *<a class="code" href="classModulate.html#a6">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00046 StkFloat <a class="code" href="classModulate.html#a6">tick</a>();
00047 00047
00049 MY_FLOAT <a class="code" href="classModulate.html#a8">lastOut</a>() <font class="keyword">const</font>; 00049 StkFloat *<a class="code" href="classModulate.html#a6">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00050 00050
00051 <font class="keyword">protected</font>: 00052
00052 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato; 00058 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classModulate.html#a6">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00053 <a class="code" href="classSubNoise.html">SubNoise</a> *noise; 00059
00054 <a class="code" href="classOnePole.html">OnePole</a> *filter; 00060 <span class="keyword">protected</span>:
00055 MY_FLOAT vibratoGain; 00061 <a class="code" href="classWaveLoop.html">WaveLoop</a> *vibrato_;
00056 MY_FLOAT randomGain; 00062 <a class="code" href="classSubNoise.html">SubNoise</a> noise_;
00057 MY_FLOAT lastOutput; 00063 <a class="code" href="classOnePole.html">OnePole</a> filter_;
00058 00064 StkFloat vibratoGain_;
00059 }; 00065 StkFloat randomGain_;
00060 00066
00061 <font class="preprocessor">#endif</font> 00067 };
</font></pre></div><HR> 00068
00069 <span class="preprocessor">#endif</span>
<table> </pre></div><HR>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> <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>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</BODY> </table>
</BODY>
</HTML> </HTML>

View File

@@ -1,57 +1,63 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Moog.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Moog.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00019 <font class="comment">/***************************************************/</font> 00019 <span class="comment">/***************************************************/</span>
00020 00020
00021 <font class="preprocessor">#if !defined(__MOOG_H)</font> 00021 <span class="preprocessor">#ifndef STK_MOOG_H</span>
00022 <font class="preprocessor"></font><font class="preprocessor">#define __MOOG_H</font> 00022 <span class="preprocessor"></span><span class="preprocessor">#define STK_MOOG_H</span>
00023 <font class="preprocessor"></font> 00023 <span class="preprocessor"></span>
00024 <font class="preprocessor">#include "Sampler.h"</font> 00024 <span class="preprocessor">#include "Sampler.h"</span>
00025 <font class="preprocessor">#include "FormSwep.h"</font> 00025 <span class="preprocessor">#include "FormSwep.h"</span>
00026 00026
00027 <font class="keyword">class </font><a class="code" href="classMoog.html">Moog</a> : <font class="keyword">public</font> <a class="code" href="classSampler.html">Sampler</a> <a name="l00027"></a><a class="code" href="classMoog.html">00027</a> <span class="keyword">class </span><a class="code" href="classMoog.html">Moog</a> : <span class="keyword">public</span> <a class="code" href="classSampler.html">Sampler</a>
00028 { 00028 {
00029 <font class="keyword">public</font>: 00029 <span class="keyword">public</span>:
00031 <a class="code" href="classMoog.html#a0">Moog</a>(); 00031
00032 00034 <a class="code" href="classMoog.html#a0">Moog</a>();
00034 <a class="code" href="classMoog.html#a1">~Moog</a>();
00035 00035
00037 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classSampler.html#a3">setFrequency</a>(MY_FLOAT frequency); 00037 <a class="code" href="classMoog.html#a1">~Moog</a>();
00038 00038
00040 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00040 <span class="keywordtype">void</span> <a class="code" href="classMoog.html#a2">setFrequency</a>(StkFloat frequency);
00041 00041
00043 <font class="keywordtype">void</font> <a class="code" href="classMoog.html#a4">setModulationSpeed</a>(MY_FLOAT mSpeed); 00043 <span class="keywordtype">void</span> <a class="code" href="classMoog.html#a3">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00044 00044
00046 <font class="keywordtype">void</font> <a class="code" href="classMoog.html#a5">setModulationDepth</a>(MY_FLOAT mDepth); 00046 <span class="keywordtype">void</span> <a class="code" href="classMoog.html#a4">setModulationSpeed</a>(StkFloat mSpeed);
00047 00047
00049 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classSampler.html#a7">tick</a>(); 00049 <span class="keywordtype">void</span> <a class="code" href="classMoog.html#a5">setModulationDepth</a>(StkFloat mDepth);
00050 00050
00052 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classSampler.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00052 StkFloat <a class="code" href="classMoog.html#a6">tick</a>();
00053 00053
00054 <font class="keyword">protected</font>: 00055 StkFloat *<a class="code" href="classMoog.html#a6">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00055 <a class="code" href="classFormSwep.html">FormSwep</a> *filters[2]; 00056
00056 MY_FLOAT modDepth; 00058
00057 MY_FLOAT filterQ; 00064 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classMoog.html#a6">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00058 MY_FLOAT filterRate; 00065
00059 00067 <span class="keywordtype">void</span> <a class="code" href="classMoog.html#a9">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00060 }; 00068
00061 00069 <span class="keyword">protected</span>:
00062 <font class="preprocessor">#endif</font> 00070 <a class="code" href="classFormSwep.html">FormSwep</a> filters_[2];
</font></pre></div><HR> 00071 StkFloat modDepth_;
00072 StkFloat filterQ_;
<table> 00073 StkFloat filterRate_;
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00074
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00075 };
</table> 00076
00077 <span class="preprocessor">#endif</span>
</BODY> </pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -0,0 +1,68 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>Mutex.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00012 <span class="comment">/***************************************************/</span>
00013
00014 <span class="preprocessor">#ifndef STK_MUTEX_H</span>
00015 <span class="preprocessor"></span><span class="preprocessor">#define STK_MUTEX_H</span>
00016 <span class="preprocessor"></span>
00017 <span class="preprocessor">#include "Stk.h"</span>
00018
00019 <span class="preprocessor">#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))</span>
00020 <span class="preprocessor"></span>
00021 <span class="preprocessor"> #include &lt;pthread.h&gt;</span>
00022 <span class="keyword">typedef</span> pthread_mutex_t MUTEX;
00023 <span class="keyword">typedef</span> pthread_cond_t CONDITION;
00024
00025 <span class="preprocessor">#elif defined(__OS_WINDOWS__)</span>
00026 <span class="preprocessor"></span>
00027 <span class="preprocessor"> #include &lt;windows.h&gt;</span>
00028 <span class="preprocessor"> #include &lt;process.h&gt;</span>
00029 <span class="keyword">typedef</span> CRITICAL_SECTION MUTEX;
00030 <span class="keyword">typedef</span> HANDLE CONDITION;
00031
00032 <span class="preprocessor">#endif</span>
00033 <span class="preprocessor"></span>
<a name="l00034"></a><a class="code" href="classMutex.html">00034</a> <span class="keyword">class </span><a class="code" href="classMutex.html">Mutex</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
00035 {
00036 <span class="keyword">public</span>:
00038 <a class="code" href="classMutex.html#a0">Mutex</a>();
00039
00041 <a class="code" href="classMutex.html#a1">~Mutex</a>();
00042
00044 <span class="keywordtype">void</span> <a class="code" href="classMutex.html#a2">lock</a>(<span class="keywordtype">void</span>);
00045
00047 <span class="keywordtype">void</span> <a class="code" href="classMutex.html#a3">unlock</a>(<span class="keywordtype">void</span>);
00048
00050
00054 <span class="keywordtype">void</span> <a class="code" href="classMutex.html#a4">wait</a>(<span class="keywordtype">void</span>);
00055
00057
00061 <span class="keywordtype">void</span> <a class="code" href="classMutex.html#a5">signal</a>(<span class="keywordtype">void</span>);
00062
00063 <span class="keyword">protected</span>:
00064
00065 MUTEX mutex_;
00066 CONDITION condition_;
00067
00068 };
00069
00070 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,53 +1,58 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>NRev.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>NRev.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00017 <font class="comment">/***************************************************/</font> 00017 <span class="comment">/***************************************************/</span>
00018 00018
00019 <font class="preprocessor">#if !defined(__NREV_H)</font> 00019 <span class="preprocessor">#ifndef STK_NREV_H</span>
00020 <font class="preprocessor"></font><font class="preprocessor">#define __NREV_H</font> 00020 <span class="preprocessor"></span><span class="preprocessor">#define STK_NREV_H</span>
00021 <font class="preprocessor"></font> 00021 <span class="preprocessor"></span>
00022 <font class="preprocessor">#include "Reverb.h"</font> 00022 <span class="preprocessor">#include "Effect.h"</span>
00023 <font class="preprocessor">#include "Delay.h"</font> 00023 <span class="preprocessor">#include "Delay.h"</span>
00024 00024
00025 <font class="keyword">class </font><a class="code" href="classNRev.html">NRev</a> : <font class="keyword">public</font> <a class="code" href="classReverb.html">Reverb</a> <a name="l00025"></a><a class="code" href="classNRev.html">00025</a> <span class="keyword">class </span><a class="code" href="classNRev.html">NRev</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
00026 { 00026 {
00027 <font class="keyword">public</font>: 00027 <span class="keyword">public</span>:
00028 <font class="comment">// Class constructor taking a T60 decay time argument.</font> 00029 <a class="code" href="classNRev.html#a0">NRev</a>( StkFloat T60 = 1.0 );
00029 NRev(MY_FLOAT T60);
00030 00030
00031 <font class="comment">// Class destructor.</font> 00032 <a class="code" href="classNRev.html#a1">~NRev</a>();
00032 ~NRev();
00033 00033
00035 <font class="keywordtype">void</font> <a class="code" href="classReverb.html#a2">clear</a>(); 00035 <span class="keywordtype">void</span> <a class="code" href="classNRev.html#a2">clear</a>();
00036 00036
00038 MY_FLOAT <a class="code" href="classReverb.html#a7">tick</a>(MY_FLOAT input); 00038 <span class="keywordtype">void</span> <a class="code" href="classNRev.html#a3">setT60</a>( StkFloat T60 );
00039 00039
00040 <font class="keyword">protected</font>: 00041 StkFloat <a class="code" href="classNRev.html#a4">tick</a>(StkFloat input);
00041 <a class="code" href="classDelay.html">Delay</a> *allpassDelays[8]; 00042
00042 <a class="code" href="classDelay.html">Delay</a> *combDelays[6]; 00044 StkFloat *<a class="code" href="classNRev.html#a4">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00043 MY_FLOAT allpassCoefficient; 00045
00044 MY_FLOAT combCoefficient[6]; 00047
00045 MY_FLOAT lowpassState; 00053 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classNRev.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00046 00054
00047 }; 00055 <span class="keyword">protected</span>:
00048 00056 <a class="code" href="classDelay.html">Delay</a> allpassDelays_[8];
00049 <font class="preprocessor">#endif</font> 00057 <a class="code" href="classDelay.html">Delay</a> combDelays_[6];
00050 <font class="preprocessor"></font> 00058 StkFloat allpassCoefficient_;
</pre></div><HR> 00059 StkFloat combCoefficient_[6];
00060 StkFloat lowpassState_;
<table> 00061
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00062 };
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00063
</table> 00064 <span class="preprocessor">#endif</span>
00065 <span class="preprocessor"></span>
</BODY> </pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,49 +1,54 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Noise.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Noise.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00011 <font class="comment">/***************************************************/</font> 00011 <span class="comment">/***************************************************/</span>
00012 00012
00013 <font class="preprocessor">#if !defined(__NOISE_H)</font> 00013 <span class="preprocessor">#ifndef STK_NOISE_H</span>
00014 <font class="preprocessor"></font><font class="preprocessor">#define __NOISE_H</font> 00014 <span class="preprocessor"></span><span class="preprocessor">#define STK_NOISE_H</span>
00015 <font class="preprocessor"></font> 00015 <span class="preprocessor"></span>
00016 <font class="preprocessor">#include "Stk.h"</font> 00016 <span class="preprocessor">#include "Generator.h"</span>
00017 00017
00018 <font class="keyword">class </font><a class="code" href="classNoise.html">Noise</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a> <a name="l00018"></a><a class="code" href="classNoise.html">00018</a> <span class="keyword">class </span><a class="code" href="classNoise.html">Noise</a> : <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
00019 { 00019 {
00020 <font class="keyword">public</font>: 00020 <span class="keyword">public</span>:
00021 00021
00023 <a class="code" href="classNoise.html#a0">Noise</a>(); 00023 <a class="code" href="classNoise.html#a0">Noise</a>();
00024 00024
00026 <font class="keyword">virtual</font> <a class="code" href="classNoise.html#a1">~Noise</a>(); 00026
00027 00030 <a class="code" href="classNoise.html#a0">Noise</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seed );
00029 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classNoise.html#a2">tick</a>(); 00031
00030 00033 <span class="keyword">virtual</span> <a class="code" href="classNoise.html#a2">~Noise</a>();
00032 <font class="keyword">virtual</font> MY_FLOAT *<a class="code" href="classNoise.html#a2">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00034
00033
00035 MY_FLOAT <a class="code" href="classNoise.html#a4">lastOut</a>() <font class="keyword">const</font>;
00036 00036
00037 <font class="keyword">protected</font>: 00040 <span class="keywordtype">void</span> <a class="code" href="classNoise.html#a3">setSeed</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seed = 0 );
00038 00041
00039 MY_FLOAT lastOutput; 00043 <span class="keyword">virtual</span> StkFloat <a class="code" href="classNoise.html#a4">tick</a>();
00040 00044
00041 }; 00046 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classNoise.html#a4">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00042 00047
00043 <font class="preprocessor">#endif</font> 00049
</font></pre></div><HR> 00055 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classNoise.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00056
<table> 00057 <span class="keyword">protected</span>:
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00058
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00059 };
</table> 00060
00061 <span class="preprocessor">#endif</span>
</BODY> </pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,60 +1,64 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>OnePole.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>OnePole.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00013 <font class="comment">/***************************************************/</font> 00013 <span class="comment">/***************************************************/</span>
00014 00014
00015 <font class="preprocessor">#if !defined(__ONEPOLE_H)</font> 00015 <span class="preprocessor">#ifndef STK_ONEPOLE_H</span>
00016 <font class="preprocessor"></font><font class="preprocessor">#define __ONEPOLE_H</font> 00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_ONEPOLE_H</span>
00017 <font class="preprocessor"></font> 00017 <span class="preprocessor"></span>
00018 <font class="preprocessor">#include "Filter.h"</font> 00018 <span class="preprocessor">#include "Filter.h"</span>
00019 00019
00020 <font class="keyword">class </font><a class="code" href="classOnePole.html">OnePole</a> : <font class="keyword">protected</font> <a class="code" href="classFilter.html">Filter</a> <a name="l00020"></a><a class="code" href="classOnePole.html">00020</a> <span class="keyword">class </span><a class="code" href="classOnePole.html">OnePole</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
00021 { 00021 {
00022 <font class="keyword">public</font>: 00022 <span class="keyword">public</span>:
00023 00023
00025 <a class="code" href="classOnePole.html#a0">OnePole</a>(); 00025 <a class="code" href="classOnePole.html#a0">OnePole</a>();
00026 00026
00028 <a class="code" href="classOnePole.html#a0">OnePole</a>(MY_FLOAT thePole); 00028 <a class="code" href="classOnePole.html#a0">OnePole</a>(StkFloat thePole);
00029 00029
00031 <a class="code" href="classOnePole.html#a2">~OnePole</a>(); 00031 <a class="code" href="classOnePole.html#a2">~OnePole</a>();
00032 00032
00034 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a3">clear</a>(<font class="keywordtype">void</font>); 00034 <span class="keywordtype">void</span> <a class="code" href="classOnePole.html#a3">clear</a>(<span class="keywordtype">void</span>);
00035 00035
00037 <font class="keywordtype">void</font> <a class="code" href="classOnePole.html#a4">setB0</a>(MY_FLOAT b0); 00037 <span class="keywordtype">void</span> <a class="code" href="classOnePole.html#a4">setB0</a>(StkFloat b0);
00038 00038
00040 <font class="keywordtype">void</font> <a class="code" href="classOnePole.html#a5">setA1</a>(MY_FLOAT a1); 00040 <span class="keywordtype">void</span> <a class="code" href="classOnePole.html#a5">setA1</a>(StkFloat a1);
00041 00041
00043 00043
00050 <font class="keywordtype">void</font> <a class="code" href="classOnePole.html#a6">setPole</a>(MY_FLOAT thePole); 00050 <span class="keywordtype">void</span> <a class="code" href="classOnePole.html#a6">setPole</a>(StkFloat thePole);
00051 00051
00053 00053
00057 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a7">setGain</a>(MY_FLOAT theGain); 00057 <span class="keywordtype">void</span> <a class="code" href="classOnePole.html#a7">setGain</a>(StkFloat gain);
00058 00058
00060 MY_FLOAT <a class="code" href="classFilter.html#a8">getGain</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00060 StkFloat <a class="code" href="classOnePole.html#a8">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00061 00061
00063 MY_FLOAT <a class="code" href="classFilter.html#a9">lastOut</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00063 StkFloat <a class="code" href="classOnePole.html#a9">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00064 00064
00066 MY_FLOAT <a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT sample); 00066 StkFloat <a class="code" href="classOnePole.html#a10">tick</a>(StkFloat sample);
00067 00067
00069 MY_FLOAT *<a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00069 StkFloat *<a class="code" href="classOnePole.html#a10">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00070 }; 00070
00071 00072
00072 <font class="preprocessor">#endif</font> 00078 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classOnePole.html#a10">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
</font></pre></div><HR> 00079
00080 };
<table> 00081
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00082 <span class="preprocessor">#endif</span>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> </pre></div><HR>
</table>
<table>
</BODY> <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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,60 +1,64 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>OneZero.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>OneZero.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00013 <font class="comment">/***************************************************/</font> 00013 <span class="comment">/***************************************************/</span>
00014 00014
00015 <font class="preprocessor">#if !defined(__ONEZERO_H)</font> 00015 <span class="preprocessor">#ifndef STK_ONEZERO_H</span>
00016 <font class="preprocessor"></font><font class="preprocessor">#define __ONEZERO_H</font> 00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_ONEZERO_H</span>
00017 <font class="preprocessor"></font> 00017 <span class="preprocessor"></span>
00018 <font class="preprocessor">#include "Filter.h"</font> 00018 <span class="preprocessor">#include "Filter.h"</span>
00019 00019
00020 <font class="keyword">class </font><a class="code" href="classOneZero.html">OneZero</a> : <font class="keyword">protected</font> <a class="code" href="classFilter.html">Filter</a> <a name="l00020"></a><a class="code" href="classOneZero.html">00020</a> <span class="keyword">class </span><a class="code" href="classOneZero.html">OneZero</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
00021 { 00021 {
00022 <font class="keyword">public</font>: 00022 <span class="keyword">public</span>:
00023 00023
00025 <a class="code" href="classOneZero.html#a0">OneZero</a>(); 00025 <a class="code" href="classOneZero.html#a0">OneZero</a>();
00026 00026
00028 <a class="code" href="classOneZero.html#a0">OneZero</a>(MY_FLOAT theZero); 00028 <a class="code" href="classOneZero.html#a0">OneZero</a>(StkFloat theZero);
00029 00029
00031 <a class="code" href="classOneZero.html#a2">~OneZero</a>(); 00031 <a class="code" href="classOneZero.html#a2">~OneZero</a>();
00032 00032
00034 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a3">clear</a>(<font class="keywordtype">void</font>); 00034 <span class="keywordtype">void</span> <a class="code" href="classOneZero.html#a3">clear</a>(<span class="keywordtype">void</span>);
00035 00035
00037 <font class="keywordtype">void</font> <a class="code" href="classOneZero.html#a4">setB0</a>(MY_FLOAT b0); 00037 <span class="keywordtype">void</span> <a class="code" href="classOneZero.html#a4">setB0</a>(StkFloat b0);
00038 00038
00040 <font class="keywordtype">void</font> <a class="code" href="classOneZero.html#a5">setB1</a>(MY_FLOAT b1); 00040 <span class="keywordtype">void</span> <a class="code" href="classOneZero.html#a5">setB1</a>(StkFloat b1);
00041 00041
00043 00043
00050 <font class="keywordtype">void</font> <a class="code" href="classOneZero.html#a6">setZero</a>(MY_FLOAT theZero); 00050 <span class="keywordtype">void</span> <a class="code" href="classOneZero.html#a6">setZero</a>(StkFloat theZero);
00051 00051
00053 00053
00057 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a7">setGain</a>(MY_FLOAT theGain); 00057 <span class="keywordtype">void</span> <a class="code" href="classOneZero.html#a7">setGain</a>(StkFloat gain);
00058 00058
00060 MY_FLOAT <a class="code" href="classFilter.html#a8">getGain</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00060 StkFloat <a class="code" href="classOneZero.html#a8">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00061 00061
00063 MY_FLOAT <a class="code" href="classFilter.html#a9">lastOut</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00063 StkFloat <a class="code" href="classOneZero.html#a9">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00064 00064
00066 MY_FLOAT <a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT sample); 00066 StkFloat <a class="code" href="classOneZero.html#a10">tick</a>(StkFloat sample);
00067 00067
00069 MY_FLOAT *<a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00069 StkFloat *<a class="code" href="classOneZero.html#a10">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00070 }; 00070
00071 00072
00072 <font class="preprocessor">#endif</font> 00078 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classOneZero.html#a10">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
</font></pre></div><HR> 00079
00080 };
<table> 00081
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00082 <span class="preprocessor">#endif</span>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> </pre></div><HR>
</table>
<table>
</BODY> <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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,52 +1,57 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>PRCRev.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>PRCRev.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00015 <font class="comment">/***************************************************/</font> 00015 <span class="comment">/***************************************************/</span>
00016 00016
00017 <font class="preprocessor">#if !defined(__PRCREV_H)</font> 00017 <span class="preprocessor">#ifndef STK_PRCREV_H</span>
00018 <font class="preprocessor"></font><font class="preprocessor">#define __PRCREV_H</font> 00018 <span class="preprocessor"></span><span class="preprocessor">#define STK_PRCREV_H</span>
00019 <font class="preprocessor"></font> 00019 <span class="preprocessor"></span>
00020 <font class="preprocessor">#include "Reverb.h"</font> 00020 <span class="preprocessor">#include "Effect.h"</span>
00021 <font class="preprocessor">#include "Delay.h"</font> 00021 <span class="preprocessor">#include "Delay.h"</span>
00022 00022
00023 <font class="keyword">class </font><a class="code" href="classPRCRev.html">PRCRev</a> : <font class="keyword">public</font> <a class="code" href="classReverb.html">Reverb</a> <a name="l00023"></a><a class="code" href="classPRCRev.html">00023</a> <span class="keyword">class </span><a class="code" href="classPRCRev.html">PRCRev</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
00024 { 00024 {
00025 <font class="keyword">public</font>: 00025 <span class="keyword">public</span>:
00026 <font class="comment">// Class constructor taking a T60 decay time argument.</font> 00027 <a class="code" href="classPRCRev.html#a0">PRCRev</a>( StkFloat T60 = 1.0 );
00027 PRCRev(MY_FLOAT T60);
00028 00028
00029 <font class="comment">// Class destructor.</font> 00030 <a class="code" href="classPRCRev.html#a1">~PRCRev</a>();
00030 ~PRCRev();
00031 00031
00033 <font class="keywordtype">void</font> <a class="code" href="classReverb.html#a2">clear</a>(); 00033 <span class="keywordtype">void</span> <a class="code" href="classPRCRev.html#a2">clear</a>();
00034 00034
00036 MY_FLOAT <a class="code" href="classReverb.html#a7">tick</a>(MY_FLOAT input); 00036 <span class="keywordtype">void</span> <a class="code" href="classPRCRev.html#a3">setT60</a>( StkFloat T60 );
00037 00037
00038 <font class="keyword">protected</font>: 00039 StkFloat <a class="code" href="classPRCRev.html#a4">tick</a>(StkFloat input);
00039 <a class="code" href="classDelay.html">Delay</a> *allpassDelays[2]; 00040
00040 <a class="code" href="classDelay.html">Delay</a> *combDelays[2]; 00042 StkFloat *<a class="code" href="classPRCRev.html#a4">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00041 MY_FLOAT allpassCoefficient;
00042 MY_FLOAT combCoefficient[2];
00043 00043
00044 };
00045 00045
00046 <font class="preprocessor">#endif</font> 00051 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classPRCRev.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00047 <font class="preprocessor"></font> 00052
</pre></div><HR> 00053 <span class="keyword">protected</span>:
00054 <a class="code" href="classDelay.html">Delay</a> allpassDelays_[2];
<table> 00055 <a class="code" href="classDelay.html">Delay</a> combDelays_[2];
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00056 StkFloat allpassCoefficient_;
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00057 StkFloat combCoefficient_[2];
</table> 00058
00059 };
</BODY> 00060
00061 <span class="preprocessor">#endif</span>
00062 <span class="preprocessor"></span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

Binary file not shown.

Binary file not shown.

View File

@@ -1,43 +1,49 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>PercFlut.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>PercFlut.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00027 <font class="comment">/***************************************************/</font> 00027 <span class="comment">/***************************************************/</span>
00028 00028
00029 <font class="preprocessor">#if !defined(__PERCFLUT_H)</font> 00029 <span class="preprocessor">#ifndef STK_PERCFLUT_H</span>
00030 <font class="preprocessor"></font><font class="preprocessor">#define __PERCFLUT_H</font> 00030 <span class="preprocessor"></span><span class="preprocessor">#define STK_PERCFLUT_H</span>
00031 <font class="preprocessor"></font> 00031 <span class="preprocessor"></span>
00032 <font class="preprocessor">#include "FM.h"</font> 00032 <span class="preprocessor">#include "FM.h"</span>
00033 00033
00034 <font class="keyword">class </font><a class="code" href="classPercFlut.html">PercFlut</a> : <font class="keyword">public</font> <a class="code" href="classFM.html">FM</a> <a name="l00034"></a><a class="code" href="classPercFlut.html">00034</a> <span class="keyword">class </span><a class="code" href="classPercFlut.html">PercFlut</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
00035 { 00035 {
00036 <font class="keyword">public</font>: 00036 <span class="keyword">public</span>:
00038 <a class="code" href="classPercFlut.html#a0">PercFlut</a>(); 00038
00039 00041 <a class="code" href="classPercFlut.html#a0">PercFlut</a>();
00041 <a class="code" href="classPercFlut.html#a1">~PercFlut</a>();
00042 00042
00044 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a4">setFrequency</a>(MY_FLOAT frequency); 00044 <a class="code" href="classPercFlut.html#a1">~PercFlut</a>();
00045 00045
00047 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00047 <span class="keywordtype">void</span> <a class="code" href="classPercFlut.html#a2">setFrequency</a>(StkFloat frequency);
00048 00048
00050 MY_FLOAT <a class="code" href="classFM.html#a14">tick</a>(); 00050 <span class="keywordtype">void</span> <a class="code" href="classPercFlut.html#a3">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00051 }; 00051
00052 00053 StkFloat <a class="code" href="classPercFlut.html#a4">tick</a>();
00053 <font class="preprocessor">#endif</font> 00054
</font></pre></div><HR> 00056 StkFloat *<a class="code" href="classPercFlut.html#a4">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00057
<table> 00059
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00065 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classPercFlut.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00066 };
</table> 00067
00068 <span class="preprocessor">#endif</span>
</BODY> </pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -0,0 +1,55 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>Phonemes.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00011 <span class="comment">/***************************************************/</span>
00012
00013 <span class="preprocessor">#ifndef STK_PHONEMES_H</span>
00014 <span class="preprocessor"></span><span class="preprocessor">#define STK_PHONEMES_H</span>
00015 <span class="preprocessor"></span>
00016 <span class="preprocessor">#include "Stk.h"</span>
00017
<a name="l00018"></a><a class="code" href="classPhonemes.html">00018</a> <span class="keyword">class </span><a class="code" href="classPhonemes.html">Phonemes</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
00019 {
00020 <span class="keyword">public</span>:
00021
00022 <a class="code" href="classPhonemes.html">Phonemes</a>(<span class="keywordtype">void</span>);
00023 ~<a class="code" href="classPhonemes.html">Phonemes</a>(<span class="keywordtype">void</span>);
00024
00026 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classPhonemes.html#e0">name</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index );
00027
00029 <span class="keyword">static</span> StkFloat <a class="code" href="classPhonemes.html#e1">voiceGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index );
00030
00032 <span class="keyword">static</span> StkFloat <a class="code" href="classPhonemes.html#e2">noiseGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index );
00033
00035 <span class="keyword">static</span> StkFloat <a class="code" href="classPhonemes.html#e3">formantFrequency</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partial );
00036
00038 <span class="keyword">static</span> StkFloat <a class="code" href="classPhonemes.html#e4">formantRadius</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partial );
00039
00041 <span class="keyword">static</span> StkFloat <a class="code" href="classPhonemes.html#e5">formantGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partial );
00042
00043 <span class="keyword">private</span>:
00044
00045 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> phonemeNames[][4];
00046 <span class="keyword">static</span> <span class="keyword">const</span> StkFloat phonemeGains[][2];
00047 <span class="keyword">static</span> <span class="keyword">const</span> StkFloat phonemeParameters[][4][3];
00048 };
00049
00050 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,60 +1,59 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>PitShift.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>PitShift.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00010 <font class="comment">/***************************************************/</font> 00010 <span class="comment">/***************************************************/</span>
00011 00011
00012 <font class="preprocessor">#if !defined(__PITSHIFT_H)</font> 00012 <span class="preprocessor">#ifndef STK_PITSHIFT_H</span>
00013 <font class="preprocessor"></font><font class="preprocessor">#define __PITSHIFT_H</font> 00013 <span class="preprocessor"></span><span class="preprocessor">#define STK_PITSHIFT_H</span>
00014 <font class="preprocessor"></font> 00014 <span class="preprocessor"></span>
00015 <font class="preprocessor">#include "Stk.h"</font> 00015 <span class="preprocessor">#include "Effect.h"</span>
00016 <font class="preprocessor">#include "DelayL.h"</font> 00016 <span class="preprocessor">#include "DelayL.h"</span>
00017 00017
00018 <font class="keyword">class </font><a class="code" href="classPitShift.html">PitShift</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a> <a name="l00018"></a><a class="code" href="classPitShift.html">00018</a> <span class="keyword">class </span><a class="code" href="classPitShift.html">PitShift</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
00019 { 00019 {
00020 <font class="keyword">public</font>: 00020 <span class="keyword">public</span>:
00022 <a class="code" href="classPitShift.html#a0">PitShift</a>(); 00022 <a class="code" href="classPitShift.html#a0">PitShift</a>();
00023 00023
00025 <a class="code" href="classPitShift.html#a1">~PitShift</a>(); 00025 <a class="code" href="classPitShift.html#a1">~PitShift</a>();
00026 00026
00028 <font class="keywordtype">void</font> <a class="code" href="classPitShift.html#a2">clear</a>(); 00028 <span class="keywordtype">void</span> <a class="code" href="classPitShift.html#a2">clear</a>();
00029 00029
00031 <font class="keywordtype">void</font> <a class="code" href="classPitShift.html#a3">setShift</a>(MY_FLOAT shift); 00031 <span class="keywordtype">void</span> <a class="code" href="classPitShift.html#a3">setShift</a>(StkFloat shift);
00032 00032
00034 <font class="keywordtype">void</font> <a class="code" href="classPitShift.html#a4">setEffectMix</a>(MY_FLOAT mix); 00034 StkFloat <a class="code" href="classPitShift.html#a4">tick</a>(StkFloat input);
00035 00035
00037 MY_FLOAT <a class="code" href="classPitShift.html#a5">lastOut</a>() <font class="keyword">const</font>; 00037 StkFloat *<a class="code" href="classPitShift.html#a4">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00038 00038
00040 MY_FLOAT <a class="code" href="classPitShift.html#a6">tick</a>(MY_FLOAT input); 00040
00041 00046 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classPitShift.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00043 MY_FLOAT *<a class="code" href="classPitShift.html#a6">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00047
00044 00048 <span class="keyword">protected</span>:
00045 <font class="keyword">protected</font>: 00049 <a class="code" href="classDelayL.html">DelayL</a> delayLine_[2];
00046 <a class="code" href="classDelay.html">Delay</a> *delayLine[2]; 00050 StkFloat delay_[2];
00047 MY_FLOAT lastOutput; 00051 StkFloat env_[2];
00048 MY_FLOAT delay[2]; 00052 StkFloat rate_;
00049 MY_FLOAT env[2]; 00053 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delayLength;
00050 MY_FLOAT effectMix; 00054 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> halfLength;
00051 MY_FLOAT rate; 00055
00052 00056 };
00053 }; 00057
00054 00058 <span class="preprocessor">#endif</span>
00055 <font class="preprocessor">#endif</font> 00059 <span class="preprocessor"></span>
00056 <font class="preprocessor"></font> </pre></div><HR>
</pre></div><HR>
<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://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> <tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> </table>
</table>
</BODY>
</BODY>
</HTML> </HTML>

View File

@@ -1,73 +1,79 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>PluckTwo.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>PluckTwo.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00019 <font class="comment">/***************************************************/</font> 00019 <span class="comment">/***************************************************/</span>
00020 00020
00021 <font class="preprocessor">#if !defined(__PLUCKTWO_H)</font> 00021 <span class="preprocessor">#ifndef STK_PLUCKTWO_H</span>
00022 <font class="preprocessor"></font><font class="preprocessor">#define __PLUCKTWO_H</font> 00022 <span class="preprocessor"></span><span class="preprocessor">#define STK_PLUCKTWO_H</span>
00023 <font class="preprocessor"></font> 00023 <span class="preprocessor"></span>
00024 <font class="preprocessor">#include "Instrmnt.h"</font> 00024 <span class="preprocessor">#include "Instrmnt.h"</span>
00025 <font class="preprocessor">#include "DelayL.h"</font> 00025 <span class="preprocessor">#include "DelayL.h"</span>
00026 <font class="preprocessor">#include "DelayA.h"</font> 00026 <span class="preprocessor">#include "DelayA.h"</span>
00027 <font class="preprocessor">#include "OneZero.h"</font> 00027 <span class="preprocessor">#include "OneZero.h"</span>
00028 00028
00029 <font class="keyword">class </font><a class="code" href="classPluckTwo.html">PluckTwo</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00029"></a><a class="code" href="classPluckTwo.html">00029</a> <span class="keyword">class </span><a class="code" href="classPluckTwo.html">PluckTwo</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00030 { 00030 {
00031 <font class="keyword">public</font>: 00031 <span class="keyword">public</span>:
00033 <a class="code" href="classPluckTwo.html#a0">PluckTwo</a>(MY_FLOAT lowestFrequency); 00033 <a class="code" href="classPluckTwo.html#a0">PluckTwo</a>(StkFloat lowestFrequency);
00034 00034
00036 <font class="keyword">virtual</font> <a class="code" href="classPluckTwo.html#a1">~PluckTwo</a>(); 00036 <span class="keyword">virtual</span> <a class="code" href="classPluckTwo.html#a1">~PluckTwo</a>();
00037 00037
00039 <font class="keywordtype">void</font> <a class="code" href="classPluckTwo.html#a2">clear</a>(); 00039 <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a2">clear</a>();
00040 00040
00042 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00042 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a3">setFrequency</a>(StkFloat frequency);
00043 00043
00045 <font class="keywordtype">void</font> <a class="code" href="classPluckTwo.html#a4">setDetune</a>(MY_FLOAT detune); 00045 <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a4">setDetune</a>(StkFloat detune);
00046 00046
00048 <font class="keywordtype">void</font> <a class="code" href="classPluckTwo.html#a5">setFreqAndDetune</a>(MY_FLOAT frequency, MY_FLOAT detune); 00048 <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a5">setFreqAndDetune</a>(StkFloat frequency, StkFloat detune);
00049 00049
00051 <font class="keywordtype">void</font> <a class="code" href="classPluckTwo.html#a6">setPluckPosition</a>(MY_FLOAT position); 00051 <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a6">setPluckPosition</a>(StkFloat position);
00052 00052
00054 00054
00059 <font class="keywordtype">void</font> <a class="code" href="classPluckTwo.html#a7">setBaseLoopGain</a>(MY_FLOAT aGain); 00059 <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a7">setBaseLoopGain</a>(StkFloat aGain);
00060 00060
00062 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00062 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a8">noteOff</a>(StkFloat amplitude);
00063 00063
00065 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>() = 0; 00065 <span class="keyword">virtual</span> StkFloat <a class="code" href="classPluckTwo.html#a9">tick</a>() = 0;
00066 00066
00067 <font class="keyword">protected</font>: 00068 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classPluckTwo.html#a9">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize) = 0;
00068 <a class="code" href="classDelayA.html">DelayA</a> *delayLine; 00069
00069 <a class="code" href="classDelayA.html">DelayA</a> *delayLine2; 00071
00070 <a class="code" href="classDelayL.html">DelayL</a> *combDelay; 00077 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classPluckTwo.html#a9">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 ) = 0;
00071 <a class="code" href="classOneZero.html">OneZero</a> *filter; 00078
00072 <a class="code" href="classOneZero.html">OneZero</a> *filter2; 00079 <span class="keyword">protected</span>:
00073 <font class="keywordtype">long</font> length; 00080 <a class="code" href="classDelayA.html">DelayA</a> delayLine_;
00074 MY_FLOAT loopGain; 00081 <a class="code" href="classDelayA.html">DelayA</a> delayLine2_;
00075 MY_FLOAT baseLoopGain; 00082 <a class="code" href="classDelayL.html">DelayL</a> combDelay_;
00076 MY_FLOAT lastFrequency; 00083 <a class="code" href="classOneZero.html">OneZero</a> filter_;
00077 MY_FLOAT lastLength; 00084 <a class="code" href="classOneZero.html">OneZero</a> filter2_;
00078 MY_FLOAT detuning; 00085
00079 MY_FLOAT pluckAmplitude; 00086 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
00080 MY_FLOAT pluckPosition; 00087 StkFloat loopGain_;
00081 00088 StkFloat baseLoopGain_;
00082 }; 00089 StkFloat lastFrequency_;
00083 00090 StkFloat lastLength_;
00084 <font class="preprocessor">#endif</font> 00091 StkFloat detuning_;
</font></pre></div><HR> 00092 StkFloat pluckAmplitude_;
00093 StkFloat pluckPosition_;
<table> 00094
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00095 };
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00096
</table> 00097 <span class="preprocessor">#endif</span>
</pre></div><HR>
</BODY>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,63 +1,68 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Plucked.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Plucked.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00018 <font class="comment">/***************************************************/</font> 00018 <span class="comment">/***************************************************/</span>
00019 00019
00020 <font class="preprocessor">#if !defined(__PLUCKED_H)</font> 00020 <span class="preprocessor">#ifndef STK_PLUCKED_H</span>
00021 <font class="preprocessor"></font><font class="preprocessor">#define __PLUCKED_H</font> 00021 <span class="preprocessor"></span><span class="preprocessor">#define STK_PLUCKED_H</span>
00022 <font class="preprocessor"></font> 00022 <span class="preprocessor"></span>
00023 <font class="preprocessor">#include "Instrmnt.h"</font> 00023 <span class="preprocessor">#include "Instrmnt.h"</span>
00024 <font class="preprocessor">#include "DelayA.h"</font> 00024 <span class="preprocessor">#include "DelayA.h"</span>
00025 <font class="preprocessor">#include "OneZero.h"</font> 00025 <span class="preprocessor">#include "OneZero.h"</span>
00026 <font class="preprocessor">#include "OnePole.h"</font> 00026 <span class="preprocessor">#include "OnePole.h"</span>
00027 <font class="preprocessor">#include "Noise.h"</font> 00027 <span class="preprocessor">#include "Noise.h"</span>
00028 00028
00029 <font class="keyword">class </font><a class="code" href="classPlucked.html">Plucked</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00029"></a><a class="code" href="classPlucked.html">00029</a> <span class="keyword">class </span><a class="code" href="classPlucked.html">Plucked</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00030 { 00030 {
00031 <font class="keyword">public</font>: 00031 <span class="keyword">public</span>:
00033 <a class="code" href="classPlucked.html#a0">Plucked</a>(MY_FLOAT lowestFrequency); 00033 <a class="code" href="classPlucked.html#a0">Plucked</a>(StkFloat lowestFrequency);
00034 00034
00036 <a class="code" href="classPlucked.html#a1">~Plucked</a>(); 00036 <a class="code" href="classPlucked.html#a1">~Plucked</a>();
00037 00037
00039 <font class="keywordtype">void</font> <a class="code" href="classPlucked.html#a2">clear</a>(); 00039 <span class="keywordtype">void</span> <a class="code" href="classPlucked.html#a2">clear</a>();
00040 00040
00042 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(MY_FLOAT frequency); 00042 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPlucked.html#a3">setFrequency</a>(StkFloat frequency);
00043 00043
00045 <font class="keywordtype">void</font> <a class="code" href="classPlucked.html#a4">pluck</a>(MY_FLOAT amplitude); 00045 <span class="keywordtype">void</span> <a class="code" href="classPlucked.html#a4">pluck</a>(StkFloat amplitude);
00046 00046
00048 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00048 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPlucked.html#a5">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00049 00049
00051 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00051 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPlucked.html#a6">noteOff</a>(StkFloat amplitude);
00052 00052
00054 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00054 <span class="keyword">virtual</span> StkFloat <a class="code" href="classPlucked.html#a7">tick</a>();
00055 00055
00056 <font class="keyword">protected</font>: 00057 <span class="keyword">virtual</span> StkFloat *<a class="code" href="classPlucked.html#a7">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00057 <a class="code" href="classDelayA.html">DelayA</a> *delayLine; 00058
00058 <a class="code" href="classOneZero.html">OneZero</a> *loopFilter; 00060
00059 <a class="code" href="classOnePole.html">OnePole</a> *pickFilter; 00066 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classPlucked.html#a7">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00060 <a class="code" href="classNoise.html">Noise</a> *noise; 00067
00061 <font class="keywordtype">long</font> length; 00068 <span class="keyword">protected</span>:
00062 MY_FLOAT loopGain; 00069 <a class="code" href="classDelayA.html">DelayA</a> delayLine_;
00063 00070 <a class="code" href="classOneZero.html">OneZero</a> loopFilter_;
00064 }; 00071 <a class="code" href="classOnePole.html">OnePole</a> pickFilter_;
00065 00072 <a class="code" href="classNoise.html">Noise</a> noise_;
00066 <font class="preprocessor">#endif</font> 00073 StkFloat loopGain_;
00067 <font class="preprocessor"></font> 00074 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
</pre></div><HR> 00075
00076 };
<table> 00077
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00078 <span class="preprocessor">#endif</span>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00079 <span class="preprocessor"></span>
</table> </pre></div><HR>
</BODY> <table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,63 +1,67 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>PoleZero.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>PoleZero.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00013 <font class="comment">/***************************************************/</font> 00013 <span class="comment">/***************************************************/</span>
00014 00014
00015 <font class="preprocessor">#if !defined(__POLEZERO_H)</font> 00015 <span class="preprocessor">#ifndef STK_POLEZERO_H</span>
00016 <font class="preprocessor"></font><font class="preprocessor">#define __POLEZERO_H</font> 00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_POLEZERO_H</span>
00017 <font class="preprocessor"></font> 00017 <span class="preprocessor"></span>
00018 <font class="preprocessor">#include "Filter.h"</font> 00018 <span class="preprocessor">#include "Filter.h"</span>
00019 00019
00020 <font class="keyword">class </font><a class="code" href="classPoleZero.html">PoleZero</a> : <font class="keyword">protected</font> <a class="code" href="classFilter.html">Filter</a> <a name="l00020"></a><a class="code" href="classPoleZero.html">00020</a> <span class="keyword">class </span><a class="code" href="classPoleZero.html">PoleZero</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
00021 { 00021 {
00022 <font class="keyword">public</font>: 00022 <span class="keyword">public</span>:
00023 00023
00025 <a class="code" href="classPoleZero.html#a0">PoleZero</a>(); 00025 <a class="code" href="classPoleZero.html#a0">PoleZero</a>();
00026 00026
00028 <a class="code" href="classPoleZero.html#a1">~PoleZero</a>(); 00028 <a class="code" href="classPoleZero.html#a1">~PoleZero</a>();
00029 00029
00031 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a3">clear</a>(<font class="keywordtype">void</font>); 00031 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a2">clear</a>(<span class="keywordtype">void</span>);
00032 00032
00034 <font class="keywordtype">void</font> <a class="code" href="classPoleZero.html#a3">setB0</a>(MY_FLOAT b0); 00034 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a3">setB0</a>(StkFloat b0);
00035 00035
00037 <font class="keywordtype">void</font> <a class="code" href="classPoleZero.html#a4">setB1</a>(MY_FLOAT b1); 00037 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a4">setB1</a>(StkFloat b1);
00038 00038
00040 <font class="keywordtype">void</font> <a class="code" href="classPoleZero.html#a5">setA1</a>(MY_FLOAT a1); 00040 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a5">setA1</a>(StkFloat a1);
00041 00041
00043 00043
00048 <font class="keywordtype">void</font> <a class="code" href="classPoleZero.html#a6">setAllpass</a>(MY_FLOAT coefficient); 00048 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a6">setAllpass</a>(StkFloat coefficient);
00049 00049
00051 00051
00057 <font class="keywordtype">void</font> <a class="code" href="classPoleZero.html#a7">setBlockZero</a>(MY_FLOAT thePole = 0.99); 00057 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a7">setBlockZero</a>(StkFloat thePole = 0.99);
00058 00058
00060 00060
00064 <font class="keywordtype">void</font> <a class="code" href="classFilter.html#a7">setGain</a>(MY_FLOAT theGain); 00064 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a8">setGain</a>(StkFloat gain);
00065 00065
00067 MY_FLOAT <a class="code" href="classFilter.html#a8">getGain</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00067 StkFloat <a class="code" href="classPoleZero.html#a9">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00068 00068
00070 MY_FLOAT <a class="code" href="classFilter.html#a9">lastOut</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00070 StkFloat <a class="code" href="classPoleZero.html#a10">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00071 00071
00073 MY_FLOAT <a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT sample); 00073 StkFloat <a class="code" href="classPoleZero.html#a11">tick</a>(StkFloat sample);
00074 00074
00076 MY_FLOAT *<a class="code" href="classFilter.html#a10">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00076 StkFloat *<a class="code" href="classPoleZero.html#a11">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00077 }; 00077
00078 00079
00079 <font class="preprocessor">#endif</font> 00085 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classPoleZero.html#a11">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
</font></pre></div><HR> 00086
00087 };
<table> 00088
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00089 <span class="preprocessor">#endif</span>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> </pre></div><HR>
</table>
<table>
</BODY> <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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,56 +0,0 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.2.8.1 -->
<h1>ReedTabl.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font>
00018 <font class="comment">/***************************************************/</font>
00019
00020 <font class="preprocessor">#if !defined(__REEDTABL_H)</font>
00021 <font class="preprocessor"></font><font class="preprocessor">#define __REEDTABL_H</font>
00022 <font class="preprocessor"></font>
00023 <font class="preprocessor">#include "Stk.h"</font>
00024
00025 <font class="keyword">class </font><a class="code" href="classReedTabl.html">ReedTabl</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a>
00026 {
00027 <font class="keyword">public</font>:
00029 <a class="code" href="classReedTabl.html#a0">ReedTabl</a>();
00030
00032 <a class="code" href="classReedTabl.html#a1">~ReedTabl</a>();
00033
00035
00040 <font class="keywordtype">void</font> <a class="code" href="classReedTabl.html#a2">setOffset</a>(MY_FLOAT aValue);
00041
00043
00048 <font class="keywordtype">void</font> <a class="code" href="classReedTabl.html#a3">setSlope</a>(MY_FLOAT aValue);
00049
00051 MY_FLOAT <a class="code" href="classReedTabl.html#a4">lastOut</a>() <font class="keyword">const</font>;
00052
00054
00058 MY_FLOAT <a class="code" href="classReedTabl.html#a5">tick</a>(MY_FLOAT input);
00059
00061 MY_FLOAT *<a class="code" href="classReedTabl.html#a5">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize);
00062
00063 <font class="keyword">protected</font>:
00064 MY_FLOAT offSet;
00065 MY_FLOAT slope;
00066 MY_FLOAT lastOutput;
00067
00068 };
00069
00070 <font class="preprocessor">#endif</font>
</font></pre></div><HR>
<table>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -0,0 +1,56 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>ReedTable.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00018 <span class="comment">/***************************************************/</span>
00019
00020 <span class="preprocessor">#ifndef STK_REEDTABLE_H</span>
00021 <span class="preprocessor"></span><span class="preprocessor">#define STK_REEDTABLE_H</span>
00022 <span class="preprocessor"></span>
00023 <span class="preprocessor">#include "Function.h"</span>
00024
<a name="l00025"></a><a class="code" href="classReedTable.html">00025</a> <span class="keyword">class </span><a class="code" href="classReedTable.html">ReedTable</a> : <span class="keyword">public</span> <a class="code" href="classFunction.html">Function</a>
00026 {
00027 <span class="keyword">public</span>:
00029 <a class="code" href="classReedTable.html#a0">ReedTable</a>();
00030
00032 <a class="code" href="classReedTable.html#a1">~ReedTable</a>();
00033
00035
00040 <span class="keywordtype">void</span> <a class="code" href="classReedTable.html#a2">setOffset</a>(StkFloat offset);
00041
00043
00048 <span class="keywordtype">void</span> <a class="code" href="classReedTable.html#a3">setSlope</a>(StkFloat slope);
00049
00051
00055 StkFloat <a class="code" href="classReedTable.html#a4">tick</a>(StkFloat input);
00056
00058 StkFloat *<a class="code" href="classReedTable.html#a4">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00059
00061
00067 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classReedTable.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00068
00069 <span class="keyword">protected</span>:
00070 StkFloat offset_;
00071 StkFloat slope_;
00072
00073 };
00074
00075 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,70 +1,75 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Resonate.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Resonate.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00018 <font class="comment">/***************************************************/</font> 00018 <span class="comment">/***************************************************/</span>
00019 00019
00020 <font class="preprocessor">#if !defined(__RESONATE_H)</font> 00020 <span class="preprocessor">#ifndef STK_RESONATE_H</span>
00021 <font class="preprocessor"></font><font class="preprocessor">#define __RESONATE_H</font> 00021 <span class="preprocessor"></span><span class="preprocessor">#define STK_RESONATE_H</span>
00022 <font class="preprocessor"></font> 00022 <span class="preprocessor"></span>
00023 <font class="preprocessor">#include "Instrmnt.h"</font> 00023 <span class="preprocessor">#include "Instrmnt.h"</span>
00024 <font class="preprocessor">#include "ADSR.h"</font> 00024 <span class="preprocessor">#include "ADSR.h"</span>
00025 <font class="preprocessor">#include "BiQuad.h"</font> 00025 <span class="preprocessor">#include "BiQuad.h"</span>
00026 <font class="preprocessor">#include "Noise.h"</font> 00026 <span class="preprocessor">#include "Noise.h"</span>
00027 00027
00028 <font class="keyword">class </font><a class="code" href="classResonate.html">Resonate</a> : <font class="keyword">public</font> <a class="code" href="classInstrmnt.html">Instrmnt</a> <a name="l00028"></a><a class="code" href="classResonate.html">00028</a> <span class="keyword">class </span><a class="code" href="classResonate.html">Resonate</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
00029 { 00029 {
00030 <font class="keyword">public</font>: 00030 <span class="keyword">public</span>:
00032 <a class="code" href="classResonate.html#a0">Resonate</a>(); 00032 <a class="code" href="classResonate.html#a0">Resonate</a>();
00033 00033
00035 <a class="code" href="classResonate.html#a1">~Resonate</a>(); 00035 <a class="code" href="classResonate.html#a1">~Resonate</a>();
00036 00036
00038 <font class="keywordtype">void</font> <a class="code" href="classResonate.html#a2">clear</a>(); 00038 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a2">clear</a>();
00039 00039
00041 <font class="keywordtype">void</font> <a class="code" href="classResonate.html#a3">setResonance</a>(MY_FLOAT frequency, MY_FLOAT radius); 00041 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a3">setResonance</a>(StkFloat frequency, StkFloat radius);
00042 00042
00044 <font class="keywordtype">void</font> <a class="code" href="classResonate.html#a4">setNotch</a>(MY_FLOAT frequency, MY_FLOAT radius); 00044 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a4">setNotch</a>(StkFloat frequency, StkFloat radius);
00045 00045
00047 <font class="keywordtype">void</font> <a class="code" href="classResonate.html#a5">setEqualGainZeroes</a>(); 00047 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a5">setEqualGainZeroes</a>();
00048 00048
00050 <font class="keywordtype">void</font> <a class="code" href="classResonate.html#a6">keyOn</a>(); 00050 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a6">keyOn</a>();
00051 00051
00053 <font class="keywordtype">void</font> <a class="code" href="classResonate.html#a7">keyOff</a>(); 00053 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a7">keyOff</a>();
00054 00054
00056 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00056 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a8">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00057 00057
00059 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(MY_FLOAT amplitude); 00059 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a9">noteOff</a>(StkFloat amplitude);
00060 00060
00062 MY_FLOAT <a class="code" href="classInstrmnt.html#a6">tick</a>(); 00062 StkFloat <a class="code" href="classResonate.html#a10">tick</a>();
00063 00063
00065 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a8">controlChange</a>(<font class="keywordtype">int</font> number, MY_FLOAT value); 00065 StkFloat *<a class="code" href="classResonate.html#a10">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00066 00066
00067 <font class="keyword">protected</font>: 00068
00068 <a class="code" href="classADSR.html">ADSR</a> *adsr; 00074 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classResonate.html#a10">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00069 <a class="code" href="classBiQuad.html">BiQuad</a> *filter;
00070 <a class="code" href="classNoise.html">Noise</a> *noise;
00071 MY_FLOAT poleFrequency;
00072 MY_FLOAT poleRadius;
00073 MY_FLOAT zeroFrequency;
00074 MY_FLOAT zeroRadius;
00075 00075
00076 }; 00077 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a13">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
00077 00078
00078 <font class="preprocessor">#endif</font> 00079 <span class="keyword">protected</span>:
</font></pre></div><HR> 00080 <a class="code" href="classADSR.html">ADSR</a> adsr_;
00081 <a class="code" href="classBiQuad.html">BiQuad</a> filter_;
<table> 00082 <a class="code" href="classNoise.html">Noise</a> noise_;
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00083 StkFloat poleFrequency_;
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00084 StkFloat poleRadius_;
</table> 00085 StkFloat zeroFrequency_;
00086 StkFloat zeroRadius_;
</BODY> 00087
00088 };
00089
00090 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,61 +0,0 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.2.8.1 -->
<h1>Reverb.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font>
00010 <font class="comment">/***************************************************/</font>
00011
00012 <font class="preprocessor">#include "Stk.h"</font>
00013
00014 <font class="preprocessor">#if !defined(__REVERB_H)</font>
00015 <font class="preprocessor"></font><font class="preprocessor">#define __REVERB_H</font>
00016 <font class="preprocessor"></font>
00017 <font class="keyword">class </font><a class="code" href="classReverb.html">Reverb</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a>
00018 {
00019 <font class="keyword">public</font>:
00021 <a class="code" href="classReverb.html#a0">Reverb</a>();
00022
00024 <font class="keyword">virtual</font> <a class="code" href="classReverb.html#a1">~Reverb</a>();
00025
00027 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classReverb.html#a2">clear</a>() = 0;
00028
00030 <font class="keywordtype">void</font> <a class="code" href="classReverb.html#a3">setEffectMix</a>(MY_FLOAT mix);
00031
00033 MY_FLOAT <a class="code" href="classReverb.html#a4">lastOut</a>() <font class="keyword">const</font>;
00034
00036 MY_FLOAT <a class="code" href="classReverb.html#a5">lastOutLeft</a>() <font class="keyword">const</font>;
00037
00039 MY_FLOAT <a class="code" href="classReverb.html#a6">lastOutRight</a>() <font class="keyword">const</font>;
00040
00042 <font class="keyword">virtual</font> MY_FLOAT <a class="code" href="classReverb.html#a7">tick</a>(MY_FLOAT input) = 0;
00043
00045 <font class="keyword">virtual</font> MY_FLOAT *<a class="code" href="classReverb.html#a7">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize);
00046
00047 <font class="keyword">protected</font>:
00048
00049 <font class="comment">// Returns true if argument value is prime.</font>
00050 <font class="keywordtype">bool</font> isPrime(<font class="keywordtype">int</font> number);
00051
00052 MY_FLOAT lastOutput[2];
00053 MY_FLOAT effectMix;
00054
00055 };
00056
00057 <font class="preprocessor">#endif // defined(__REVERB_H)</font>
00058 <font class="preprocessor"></font>
</pre></div><HR>
<table>
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,43 +1,49 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>Rhodey.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>Rhodey.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00031 <font class="comment">/***************************************************/</font> 00031 <span class="comment">/***************************************************/</span>
00032 00032
00033 <font class="preprocessor">#if !defined(__RHODEY_H)</font> 00033 <span class="preprocessor">#ifndef STK_RHODEY_H</span>
00034 <font class="preprocessor"></font><font class="preprocessor">#define __RHODEY_H</font> 00034 <span class="preprocessor"></span><span class="preprocessor">#define STK_RHODEY_H</span>
00035 <font class="preprocessor"></font> 00035 <span class="preprocessor"></span>
00036 <font class="preprocessor">#include "FM.h"</font> 00036 <span class="preprocessor">#include "FM.h"</span>
00037 00037
00038 <font class="keyword">class </font><a class="code" href="classRhodey.html">Rhodey</a> : <font class="keyword">public</font> <a class="code" href="classFM.html">FM</a> <a name="l00038"></a><a class="code" href="classRhodey.html">00038</a> <span class="keyword">class </span><a class="code" href="classRhodey.html">Rhodey</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
00039 { 00039 {
00040 <font class="keyword">public</font>: 00040 <span class="keyword">public</span>:
00042 <a class="code" href="classRhodey.html#a0">Rhodey</a>(); 00042
00043 00045 <a class="code" href="classRhodey.html#a0">Rhodey</a>();
00045 <a class="code" href="classRhodey.html#a1">~Rhodey</a>();
00046 00046
00048 <font class="keywordtype">void</font> <a class="code" href="classFM.html#a4">setFrequency</a>(MY_FLOAT frequency); 00048 <a class="code" href="classRhodey.html#a1">~Rhodey</a>();
00049 00049
00051 <font class="keywordtype">void</font> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(MY_FLOAT frequency, MY_FLOAT amplitude); 00051 <span class="keywordtype">void</span> <a class="code" href="classRhodey.html#a2">setFrequency</a>(StkFloat frequency);
00052 00052
00054 MY_FLOAT <a class="code" href="classFM.html#a14">tick</a>(); 00054 <span class="keywordtype">void</span> <a class="code" href="classRhodey.html#a3">noteOn</a>(StkFloat frequency, StkFloat amplitude);
00055 }; 00055
00056 00057 StkFloat <a class="code" href="classRhodey.html#a4">tick</a>();
00057 <font class="preprocessor">#endif</font> 00058
</font></pre></div><HR> 00060 StkFloat *<a class="code" href="classRhodey.html#a4">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00061
<table> 00063
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00069 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classRhodey.html#a4">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00070 };
</table> 00071
00072 <span class="preprocessor">#endif</span>
</BODY> </pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,301 +1,566 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>RtAudio.h</h1><div class="fragment"><pre>00001 <font class="comment">/******************************************/</font> <h1>RtAudio.h</h1><div class="fragment"><pre>00001 <span class="comment">/************************************************************************/</span>
00002 <font class="comment">/*</font> 00038 <span class="comment">/************************************************************************/</span>
00003 <font class="comment"> RtAudio - realtime sound I/O C++ class</font> 00039
00004 <font class="comment"> by Gary P. Scavone, 2001-2002.</font> 00040 <span class="comment">// RtAudio: Version 3.0.2, pre-release for STK 4.2.0</span>
00005 <font class="comment">*/</font> 00041
00006 <font class="comment">/******************************************/</font> 00042 <span class="preprocessor">#ifndef __RTAUDIO_H</span>
00007 00043 <span class="preprocessor"></span><span class="preprocessor">#define __RTAUDIO_H</span>
00008 <font class="preprocessor">#if !defined(__RTAUDIO_H)</font> 00044 <span class="preprocessor"></span>
00009 <font class="preprocessor"></font><font class="preprocessor">#define __RTAUDIO_H</font> 00045 <span class="preprocessor">#include "RtError.h"</span>
00010 <font class="preprocessor"></font> 00046 <span class="preprocessor">#include &lt;string&gt;</span>
00011 <font class="preprocessor">#include &lt;map&gt;</font> 00047 <span class="preprocessor">#include &lt;vector&gt;</span>
00012 00048
00013 <font class="preprocessor">#if defined(__LINUX_ALSA__)</font> 00049 <span class="comment">// Operating system dependent thread functionality.</span>
00014 <font class="preprocessor"></font><font class="preprocessor"> #include &lt;alsa/asoundlib.h&gt;</font> 00050 <span class="preprocessor">#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)</span>
00015 <font class="preprocessor"> #include &lt;pthread.h&gt;</font> 00051 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;windows.h&gt;</span>
00016 <font class="preprocessor"> #include &lt;unistd.h&gt;</font> 00052 <span class="preprocessor"> #include &lt;process.h&gt;</span>
00017 00053
00018 <font class="preprocessor"> #define THREAD_TYPE</font> 00054 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ThreadHandle;
00019 <font class="preprocessor"></font> <font class="keyword">typedef</font> snd_pcm_t *AUDIO_HANDLE; 00055 <span class="keyword">typedef</span> CRITICAL_SECTION StreamMutex;
00020 <font class="keyword">typedef</font> <font class="keywordtype">int</font> DEVICE_ID; 00056
00021 <font class="keyword">typedef</font> pthread_t THREAD_HANDLE; 00057 <span class="preprocessor">#else // Various unix flavors with pthread support.</span>
00022 <font class="keyword">typedef</font> pthread_mutex_t MUTEX; 00058 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;pthread.h&gt;</span>
00023 00059
00024 <font class="preprocessor">#elif defined(__LINUX_OSS__)</font> 00060 <span class="keyword">typedef</span> pthread_t ThreadHandle;
00025 <font class="preprocessor"></font><font class="preprocessor"> #include &lt;pthread.h&gt;</font> 00061 <span class="keyword">typedef</span> pthread_mutex_t StreamMutex;
00026 <font class="preprocessor"> #include &lt;unistd.h&gt;</font> 00062
00027 00063 <span class="preprocessor">#endif</span>
00028 <font class="preprocessor"> #define THREAD_TYPE</font> 00064 <span class="preprocessor"></span>
00029 <font class="preprocessor"></font> <font class="keyword">typedef</font> <font class="keywordtype">int</font> AUDIO_HANDLE; 00065 <span class="comment">// This global structure type is used to pass callback information</span>
00030 <font class="keyword">typedef</font> <font class="keywordtype">int</font> DEVICE_ID; 00066 <span class="comment">// between the private RtAudio stream structure and global callback</span>
00031 <font class="keyword">typedef</font> pthread_t THREAD_HANDLE; 00067 <span class="comment">// handling functions.</span>
00032 <font class="keyword">typedef</font> pthread_mutex_t MUTEX; 00068 <span class="keyword">struct </span>CallbackInfo {
00033 00069 <span class="keywordtype">void</span> *object; <span class="comment">// Used as a "this" pointer.</span>
00034 <font class="preprocessor">#elif defined(__WINDOWS_DS__)</font> 00070 ThreadHandle thread;
00035 <font class="preprocessor"></font><font class="preprocessor"> #include &lt;windows.h&gt;</font> 00071 <span class="keywordtype">bool</span> usingCallback;
00036 <font class="preprocessor"> #include &lt;process.h&gt;</font> 00072 <span class="keywordtype">void</span> *callback;
00037 00073 <span class="keywordtype">void</span> *userData;
00038 <font class="comment">// The following struct is used to hold the extra variables</font> 00074 <span class="keywordtype">void</span> *apiInfo; <span class="comment">// void pointer for API specific callback information</span>
00039 <font class="comment">// specific to the DirectSound implementation.</font> 00075
00040 <font class="keyword">typedef</font> <font class="keyword">struct </font>{ 00076 <span class="comment">// Default constructor.</span>
00041 <font class="keywordtype">void</font> * object; 00077 CallbackInfo()
00042 <font class="keywordtype">void</font> * buffer; 00078 :object(0), usingCallback(false), callback(0),
00043 UINT bufferPointer; 00079 userData(0), apiInfo(0) {}
00044 } AUDIO_HANDLE; 00080 };
00045 00081
00046 <font class="preprocessor"> #define THREAD_TYPE __stdcall</font> 00082 <span class="comment">// Support for signed integers and floats. Audio data fed to/from</span>
00047 <font class="preprocessor"></font> <font class="keyword">typedef</font> LPGUID DEVICE_ID; 00083 <span class="comment">// the tickStream() routine is assumed to ALWAYS be in host</span>
00048 <font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> THREAD_HANDLE; 00084 <span class="comment">// byte order. The internal routines will automatically take care of</span>
00049 <font class="keyword">typedef</font> CRITICAL_SECTION MUTEX; 00085 <span class="comment">// any necessary byte-swapping between the host format and the</span>
00050 00086 <span class="comment">// soundcard. Thus, endian-ness is not a concern in the following</span>
00051 <font class="preprocessor">#elif defined(__IRIX_AL__)</font> 00087 <span class="comment">// format definitions.</span>
00052 <font class="preprocessor"></font><font class="preprocessor"> #include &lt;dmedia/audio.h&gt;</font> 00088 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> RtAudioFormat;
00053 <font class="preprocessor"> #include &lt;pthread.h&gt;</font> 00089 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT8 = 0x1;
00054 <font class="preprocessor"> #include &lt;unistd.h&gt;</font> 00090 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT16 = 0x2;
00055 00091 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT24 = 0x4;
00056 <font class="preprocessor"> #define THREAD_TYPE</font> 00092 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT32 = 0x8;
00057 <font class="preprocessor"></font> <font class="keyword">typedef</font> ALport AUDIO_HANDLE; 00093 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_FLOAT32 = 0x10;
00058 <font class="keyword">typedef</font> <font class="keywordtype">int</font> DEVICE_ID; 00094 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_FLOAT64 = 0x20;
00059 <font class="keyword">typedef</font> pthread_t THREAD_HANDLE; 00096 <span class="keyword">typedef</span> int (*RtAudioCallback)(<span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> bufferSize, <span class="keywordtype">void</span> *userData);
00060 <font class="keyword">typedef</font> pthread_mutex_t MUTEX; 00097
00061 <a name="l00099"></a><a class="code" href="structRtAudioDeviceInfo.html">00099</a> <span class="keyword">struct </span><a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> {
00062 <font class="preprocessor">#endif</font> <a name="l00100"></a><a class="code" href="structRtAudioDeviceInfo.html#o0">00100</a> std::string <a class="code" href="structRtAudioDeviceInfo.html#o0">name</a>;
00063 <font class="preprocessor"></font> <a name="l00101"></a><a class="code" href="structRtAudioDeviceInfo.html#o1">00101</a> <span class="keywordtype">bool</span> <a class="code" href="structRtAudioDeviceInfo.html#o1">probed</a>;
00064 <a name="l00102"></a><a class="code" href="structRtAudioDeviceInfo.html#o2">00102</a> <span class="keywordtype">int</span> <a class="code" href="structRtAudioDeviceInfo.html#o2">outputChannels</a>;
00065 <font class="comment">// *************************************************** //</font> <a name="l00103"></a><a class="code" href="structRtAudioDeviceInfo.html#o3">00103</a> <span class="keywordtype">int</span> <a class="code" href="structRtAudioDeviceInfo.html#o3">inputChannels</a>;
00066 <font class="comment">//</font> <a name="l00104"></a><a class="code" href="structRtAudioDeviceInfo.html#o4">00104</a> <span class="keywordtype">int</span> <a class="code" href="structRtAudioDeviceInfo.html#o4">duplexChannels</a>;
00067 <font class="comment">// RtError class declaration.</font> <a name="l00105"></a><a class="code" href="structRtAudioDeviceInfo.html#o5">00105</a> <span class="keywordtype">bool</span> <a class="code" href="structRtAudioDeviceInfo.html#o5">isDefault</a>;
00068 <font class="comment">//</font> <a name="l00106"></a><a class="code" href="structRtAudioDeviceInfo.html#o6">00106</a> std::vector&lt;int&gt; <a class="code" href="structRtAudioDeviceInfo.html#o6">sampleRates</a>;
00069 <font class="comment">// *************************************************** //</font> <a name="l00107"></a><a class="code" href="structRtAudioDeviceInfo.html#o7">00107</a> RtAudioFormat <a class="code" href="structRtAudioDeviceInfo.html#o7">nativeFormats</a>;
00070 00109 <span class="comment">// Default constructor.</span>
00071 <font class="keyword">class </font>RtError 00110 <a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a>()
00072 { 00111 :<a class="code" href="structRtAudioDeviceInfo.html#o1">probed</a>(false), <a class="code" href="structRtAudioDeviceInfo.html#o2">outputChannels</a>(0), <a class="code" href="structRtAudioDeviceInfo.html#o3">inputChannels</a>(0),
00073 <font class="keyword">public</font>: 00112 <a class="code" href="structRtAudioDeviceInfo.html#o4">duplexChannels</a>(0), <a class="code" href="structRtAudioDeviceInfo.html#o5">isDefault</a>(false), <a class="code" href="structRtAudioDeviceInfo.html#o7">nativeFormats</a>(0) {}
00074 <font class="keyword">enum</font> TYPE { 00113 };
00075 WARNING, 00114
00076 DEBUG_WARNING, 00115 <span class="comment">// **************************************************************** //</span>
00077 UNSPECIFIED, 00116 <span class="comment">//</span>
00078 NO_DEVICES_FOUND, 00117 <span class="comment">// RtApi class declaration.</span>
00079 INVALID_DEVICE, 00118 <span class="comment">//</span>
00080 INVALID_STREAM, 00119 <span class="comment">// Note that RtApi is an abstract base class and cannot be</span>
00081 MEMORY_ERROR, 00120 <span class="comment">// explicitly instantiated. The class RtAudio will create an</span>
00082 INVALID_PARAMETER, 00121 <span class="comment">// instance of an RtApi subclass (RtApiOss, RtApiAlsa,</span>
00083 DRIVER_ERROR, 00122 <span class="comment">// RtApiJack, RtApiCore, RtApiAl, RtApiDs, or RtApiAsio).</span>
00084 SYSTEM_ERROR, 00123 <span class="comment">//</span>
00085 THREAD_ERROR 00124 <span class="comment">// **************************************************************** //</span>
00086 }; 00125
00087 00126 <span class="keyword">class </span>RtApi
00088 <font class="keyword">protected</font>: 00127 {
00089 <font class="keywordtype">char</font> error_message[256]; 00128 <span class="keyword">public</span>:
00090 TYPE type; 00129
00091 00130 <span class="keyword">enum</span> StreamState {
00092 <font class="keyword">public</font>: 00131 STREAM_STOPPED,
00094 RtError(<font class="keyword">const</font> <font class="keywordtype">char</font> *p, TYPE tipe = RtError::UNSPECIFIED); 00132 STREAM_RUNNING
00095 00133 };
00097 <font class="keyword">virtual</font> ~RtError(<font class="keywordtype">void</font>); 00134
00098 00135 RtApi();
00100 <font class="keyword">virtual</font> <font class="keywordtype">void</font> printMessage(<font class="keywordtype">void</font>); 00136 <span class="keyword">virtual</span> ~RtApi();
00101 00137 <span class="keywordtype">void</span> openStream( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels,
00103 <font class="keyword">virtual</font> <font class="keyword">const</font> TYPE&amp; getType(<font class="keywordtype">void</font>)<font class="keyword"> </font>{ <font class="keywordflow">return</font> type; } 00138 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
00104 00139 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
00106 <font class="keyword">virtual</font> <font class="keyword">const</font> <font class="keywordtype">char</font> *getMessage(<font class="keywordtype">void</font>)<font class="keyword"> </font>{ <font class="keywordflow">return</font> error_message; } 00140 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
00107 }; 00141 <span class="keywordtype">void</span> openStream( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels,
00108 00142 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
00109 00143 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
00110 <font class="comment">// *************************************************** //</font> 00144 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> *numberOfBuffers );
00111 <font class="comment">//</font> 00145 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData ) = 0;
00112 <font class="comment">// RtAudio class declaration.</font> 00146 <span class="keyword">virtual</span> <span class="keywordtype">void</span> cancelStreamCallback() = 0;
00113 <font class="comment">//</font> 00147 <span class="keywordtype">int</span> getDeviceCount(<span class="keywordtype">void</span>);
00114 <font class="comment">// *************************************************** //</font> 00148 <a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> getDeviceInfo( <span class="keywordtype">int</span> device );
00115 00149 <span class="keywordtype">char</span> * <span class="keyword">const</span> getStreamBuffer();
00116 <font class="keyword">class </font>RtAudio 00150 RtApi::StreamState getStreamState() <span class="keyword">const</span>;
00117 { 00151 <span class="keyword">virtual</span> <span class="keywordtype">void</span> tickStream() = 0;
00118 <font class="keyword">public</font>: 00152 <span class="keyword">virtual</span> <span class="keywordtype">void</span> closeStream();
00119 00153 <span class="keyword">virtual</span> <span class="keywordtype">void</span> startStream() = 0;
00120 <font class="comment">// Support for signed integers and floats. Audio data fed to/from</font> 00154 <span class="keyword">virtual</span> <span class="keywordtype">void</span> stopStream() = 0;
00121 <font class="comment">// the tickStream() routine is assumed to ALWAYS be in host</font> 00155 <span class="keyword">virtual</span> <span class="keywordtype">void</span> abortStream() = 0;
00122 <font class="comment">// byte order. The internal routines will automatically take care of</font>
00123 <font class="comment">// any necessary byte-swapping between the host format and the</font>
00124 <font class="comment">// soundcard. Thus, endian-ness is not a concern in the following</font>
00125 <font class="comment">// format definitions.</font>
00126 <font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> RTAUDIO_FORMAT;
00127 <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_SINT8;
00128 <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_SINT16;
00129 <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_SINT24;
00130 <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_SINT32;
00131 <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_FLOAT32;
00132 <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_FLOAT64;
00133
00134 <font class="comment">//static const int MAX_SAMPLE_RATES = 14;</font>
00135 <font class="keyword">enum</font> { MAX_SAMPLE_RATES = 14 };
00136
00137 <font class="keyword">typedef</font> int (*RTAUDIO_CALLBACK)(<font class="keywordtype">char</font> *buffer, <font class="keywordtype">int</font> bufferSize, <font class="keywordtype">void</font> *userData);
00138
00139 <font class="keyword">typedef</font> <font class="keyword">struct </font>{
00140 <font class="keywordtype">char</font> name[128];
00141 DEVICE_ID id[2];
00142 <font class="keywordtype">bool</font> probed;
00143 <font class="keywordtype">int</font> maxOutputChannels;
00144 <font class="keywordtype">int</font> maxInputChannels;
00145 <font class="keywordtype">int</font> maxDuplexChannels;
00146 <font class="keywordtype">int</font> minOutputChannels;
00147 <font class="keywordtype">int</font> minInputChannels;
00148 <font class="keywordtype">int</font> minDuplexChannels;
00149 <font class="keywordtype">bool</font> hasDuplexSupport;
00150 <font class="keywordtype">int</font> nSampleRates;
00151 <font class="keywordtype">int</font> sampleRates[MAX_SAMPLE_RATES];
00152 RTAUDIO_FORMAT nativeFormats;
00153 } RTAUDIO_DEVICE;
00154
00156 00156
00163 RtAudio(); 00157 <span class="keyword">protected</span>:
00164 00158
00166 00159 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MAX_SAMPLE_RATES;
00177 RtAudio(<font class="keywordtype">int</font> *streamId, 00160 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> SAMPLE_RATES[];
00178 <font class="keywordtype">int</font> outputDevice, <font class="keywordtype">int</font> outputChannels, 00161
00179 <font class="keywordtype">int</font> inputDevice, <font class="keywordtype">int</font> inputChannels, 00162 <span class="keyword">enum</span> { FAILURE, SUCCESS };
00180 RTAUDIO_FORMAT format, <font class="keywordtype">int</font> sampleRate, 00163
00181 <font class="keywordtype">int</font> *bufferSize, <font class="keywordtype">int</font> numberOfBuffers); 00164 <span class="keyword">enum</span> StreamMode {
00182 00165 OUTPUT,
00184 00166 INPUT,
00188 ~RtAudio(); 00167 DUPLEX,
00189 00168 UNINITIALIZED = -75
00191 00169 };
00218 <font class="keywordtype">int</font> openStream(<font class="keywordtype">int</font> outputDevice, <font class="keywordtype">int</font> outputChannels, 00170
00219 <font class="keywordtype">int</font> inputDevice, <font class="keywordtype">int</font> inputChannels, 00171 <span class="comment">// A protected structure used for buffer conversion.</span>
00220 RTAUDIO_FORMAT format, <font class="keywordtype">int</font> sampleRate, 00172 <span class="keyword">struct </span>ConvertInfo {
00221 <font class="keywordtype">int</font> *bufferSize, <font class="keywordtype">int</font> numberOfBuffers); 00173 <span class="keywordtype">int</span> channels;
00222 00174 <span class="keywordtype">int</span> inJump, outJump;
00224 00175 RtAudioFormat inFormat, outFormat;
00243 <font class="keywordtype">void</font> setStreamCallback(<font class="keywordtype">int</font> streamId, RTAUDIO_CALLBACK callback, <font class="keywordtype">void</font> *userData); 00176 std::vector&lt;int&gt; inOffset;
00177 std::vector&lt;int&gt; outOffset;
00178 };
00179
00180 <span class="comment">// A protected structure for audio streams.</span>
00181 <span class="keyword">struct </span>RtApiStream {
00182 <span class="keywordtype">int</span> device[2]; <span class="comment">// Playback and record, respectively.</span>
00183 <span class="keywordtype">void</span> *apiHandle; <span class="comment">// void pointer for API specific stream handle information</span>
00184 StreamMode mode; <span class="comment">// OUTPUT, INPUT, or DUPLEX.</span>
00185 StreamState state; <span class="comment">// STOPPED or RUNNING</span>
00186 <span class="keywordtype">char</span> *userBuffer;
00187 <span class="keywordtype">char</span> *deviceBuffer;
00188 <span class="keywordtype">bool</span> doConvertBuffer[2]; <span class="comment">// Playback and record, respectively.</span>
00189 <span class="keywordtype">bool</span> deInterleave[2]; <span class="comment">// Playback and record, respectively.</span>
00190 <span class="keywordtype">bool</span> doByteSwap[2]; <span class="comment">// Playback and record, respectively.</span>
00191 <span class="keywordtype">int</span> sampleRate;
00192 <span class="keywordtype">int</span> bufferSize;
00193 <span class="keywordtype">int</span> nBuffers;
00194 <span class="keywordtype">int</span> nUserChannels[2]; <span class="comment">// Playback and record, respectively.</span>
00195 <span class="keywordtype">int</span> nDeviceChannels[2]; <span class="comment">// Playback and record channels, respectively.</span>
00196 RtAudioFormat userFormat;
00197 RtAudioFormat deviceFormat[2]; <span class="comment">// Playback and record, respectively.</span>
00198 StreamMutex mutex;
00199 CallbackInfo callbackInfo;
00200 ConvertInfo convertInfo[2];
00201
00202 RtApiStream()
00203 :apiHandle(0), userBuffer(0), deviceBuffer(0) {}
00204 };
00205
00206 <span class="comment">// A protected device structure for audio devices.</span>
00207 <span class="keyword">struct </span>RtApiDevice {
00208 std::string name;
00209 <span class="keywordtype">bool</span> probed;
00210 <span class="keywordtype">void</span> *apiDeviceId; <span class="comment">// void pointer for API specific device information</span>
00211 <span class="keywordtype">int</span> maxOutputChannels;
00212 <span class="keywordtype">int</span> maxInputChannels;
00213 <span class="keywordtype">int</span> maxDuplexChannels;
00214 <span class="keywordtype">int</span> minOutputChannels;
00215 <span class="keywordtype">int</span> minInputChannels;
00216 <span class="keywordtype">int</span> minDuplexChannels;
00217 <span class="keywordtype">bool</span> hasDuplexSupport;
00218 <span class="keywordtype">bool</span> isDefault;
00219 std::vector&lt;int&gt; sampleRates;
00220 RtAudioFormat nativeFormats;
00222 <span class="comment">// Default constructor.</span>
00223 RtApiDevice()
00224 :probed(false), apiDeviceId(0), maxOutputChannels(0), maxInputChannels(0),
00225 maxDuplexChannels(0), minOutputChannels(0), minInputChannels(0),
00226 minDuplexChannels(0), isDefault(false), nativeFormats(0) {}
00227 };
00228
00229 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> Int16;
00230 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> Int32;
00231 <span class="keyword">typedef</span> <span class="keywordtype">float</span> Float32;
00232 <span class="keyword">typedef</span> <span class="keywordtype">double</span> Float64;
00233
00234 <span class="keywordtype">char</span> message_[1024];
00235 <span class="keywordtype">int</span> nDevices_;
00236 std::vector&lt;RtApiDevice&gt; devices_;
00237 RtApiStream stream_;
00238
00243 <span class="keyword">virtual</span> <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>) = 0;
00244 00244
00246 00253 <span class="keyword">virtual</span> <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
00253 <font class="keywordtype">void</font> cancelStreamCallback(<font class="keywordtype">int</font> streamId);
00254 00254
00256 <font class="keywordtype">int</font> getDeviceCount(<font class="keywordtype">void</font>); 00263 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
00257 00264 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
00259 00265 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
00269 <font class="keywordtype">void</font> getDeviceInfo(<font class="keywordtype">int</font> device, RTAUDIO_DEVICE *info); 00266
00270 00271 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
00272 00272
00277 <font class="keywordtype">char</font> * <font class="keyword">const</font> getStreamBuffer(<font class="keywordtype">int</font> streamId); 00277 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
00278 00278
00280 00280 <span class="keywordtype">void</span> clearDeviceInfo( RtApiDevice *info );
00285 <font class="keywordtype">void</font> tickStream(<font class="keywordtype">int</font> streamId); 00281
00286 00283 <span class="keywordtype">void</span> clearStreamInfo();
00288 00284
00292 <font class="keywordtype">void</font> closeStream(<font class="keywordtype">int</font> streamId); 00286 <span class="keywordtype">void</span> error( RtError::Type type );
00287
00292 <span class="keywordtype">void</span> verifyStream();
00293 00293
00295 00298 <span class="keywordtype">void</span> convertBuffer( <span class="keywordtype">char</span> *outBuffer, <span class="keywordtype">char</span> *inBuffer, ConvertInfo &amp;info );
00299 <font class="keywordtype">void</font> startStream(<font class="keywordtype">int</font> streamId); 00299
00300 00301 <span class="keywordtype">void</span> byteSwapBuffer( <span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> samples, RtAudioFormat format );
00302 00302
00306 <font class="keywordtype">void</font> stopStream(<font class="keywordtype">int</font> streamId); 00304 <span class="keywordtype">int</span> formatBytes( RtAudioFormat format );
00305 };
00306
00307 00307
00309 00308 <span class="comment">// **************************************************************** //</span>
00313 <font class="keywordtype">void</font> abortStream(<font class="keywordtype">int</font> streamId); 00309 <span class="comment">//</span>
00314 00310 <span class="comment">// RtAudio class declaration.</span>
00316 00311 <span class="comment">//</span>
00321 <font class="keywordtype">int</font> streamWillBlock(<font class="keywordtype">int</font> streamId); 00312 <span class="comment">// RtAudio is a "controller" used to select an available audio i/o</span>
00322 00313 <span class="comment">// interface. It presents a common API for the user to call but all</span>
00323 <font class="keyword">protected</font>: 00314 <span class="comment">// functionality is implemented by the class RtAudioApi and its</span>
00315 <span class="comment">// subclasses. RtAudio creates an instance of an RtAudioApi subclass</span>
00316 <span class="comment">// based on the user's API choice. If no choice is made, RtAudio</span>
00317 <span class="comment">// attempts to make a "logical" API selection.</span>
00318 <span class="comment">//</span>
00319 <span class="comment">// **************************************************************** //</span>
00320
<a name="l00321"></a><a class="code" href="classRtAudio.html">00321</a> <span class="keyword">class </span><a class="code" href="classRtAudio.html">RtAudio</a>
00322 {
00323 <span class="keyword">public</span>:
00324 00324
00325 <font class="keyword">private</font>: <a name="l00326"></a><a class="code" href="classRtAudio.html#w8">00326</a> <span class="keyword">enum</span> <a class="code" href="classRtAudio.html#w8">RtAudioApi</a> {
00326 00327 <a class="code" href="classRtAudio.html#w8w0">UNSPECIFIED</a>,
00327 <font class="keyword">static</font> <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> SAMPLE_RATES[MAX_SAMPLE_RATES]; 00328 <a class="code" href="classRtAudio.html#w8w1">LINUX_ALSA</a>,
00328 00329 <a class="code" href="classRtAudio.html#w8w2">LINUX_OSS</a>,
00329 <font class="keyword">enum</font> { FAILURE, SUCCESS }; 00330 <a class="code" href="classRtAudio.html#w8w3">LINUX_JACK</a>,
00330 00331 <a class="code" href="classRtAudio.html#w8w4">MACOSX_CORE</a>,
00331 <font class="keyword">enum</font> STREAM_MODE { 00332 <a class="code" href="classRtAudio.html#w8w5">IRIX_AL</a>,
00332 PLAYBACK, 00333 <a class="code" href="classRtAudio.html#w8w6">WINDOWS_ASIO</a>,
00333 RECORD, 00334 <a class="code" href="classRtAudio.html#w8w7">WINDOWS_DS</a>
00334 DUPLEX, 00335 };
00335 UNINITIALIZED = -75 00336
00336 }; 00338
00337 00348 <a class="code" href="classRtAudio.html#a0">RtAudio</a>( RtAudioApi api=UNSPECIFIED );
00338 <font class="keyword">enum</font> STREAM_STATE { 00349
00339 STREAM_STOPPED, 00351
00340 STREAM_RUNNING 00362 <a class="code" href="classRtAudio.html#a0">RtAudio</a>( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels,
00341 }; 00363 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
00342 00364 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
00343 <font class="keyword">typedef</font> <font class="keyword">struct </font>{ 00365 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers, RtAudioApi api=UNSPECIFIED );
00344 <font class="keywordtype">int</font> device[2]; <font class="comment">// Playback and record, respectively.</font>
00345 STREAM_MODE mode; <font class="comment">// PLAYBACK, RECORD, or DUPLEX.</font>
00346 AUDIO_HANDLE handle[2]; <font class="comment">// Playback and record handles, respectively.</font>
00347 STREAM_STATE state; <font class="comment">// STOPPED or RUNNING</font>
00348 <font class="keywordtype">char</font> *userBuffer;
00349 <font class="keywordtype">char</font> *deviceBuffer;
00350 <font class="keywordtype">bool</font> doConvertBuffer[2]; <font class="comment">// Playback and record, respectively.</font>
00351 <font class="keywordtype">bool</font> deInterleave[2]; <font class="comment">// Playback and record, respectively.</font>
00352 <font class="keywordtype">bool</font> doByteSwap[2]; <font class="comment">// Playback and record, respectively.</font>
00353 <font class="keywordtype">int</font> sampleRate;
00354 <font class="keywordtype">int</font> bufferSize;
00355 <font class="keywordtype">int</font> nBuffers;
00356 <font class="keywordtype">int</font> nUserChannels[2]; <font class="comment">// Playback and record, respectively.</font>
00357 <font class="keywordtype">int</font> nDeviceChannels[2]; <font class="comment">// Playback and record channels, respectively.</font>
00358 RTAUDIO_FORMAT userFormat;
00359 RTAUDIO_FORMAT deviceFormat[2]; <font class="comment">// Playback and record, respectively.</font>
00360 <font class="keywordtype">bool</font> usingCallback;
00361 THREAD_HANDLE thread;
00362 MUTEX mutex;
00363 RTAUDIO_CALLBACK callback;
00364 <font class="keywordtype">void</font> *userData;
00365 } RTAUDIO_STREAM;
00366 00366
00367 <font class="keyword">typedef</font> <font class="keywordtype">signed</font> <font class="keywordtype">short</font> INT16; 00368
00368 <font class="keyword">typedef</font> <font class="keywordtype">signed</font> <font class="keywordtype">int</font> INT32; 00376 <a class="code" href="classRtAudio.html#a0">RtAudio</a>( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels,
00369 <font class="keyword">typedef</font> <font class="keywordtype">float</font> FLOAT32; 00377 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
00370 <font class="keyword">typedef</font> <font class="keywordtype">double</font> FLOAT64; 00378 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
00371 00379 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> *numberOfBuffers, RtAudioApi api=UNSPECIFIED );
00372 <font class="keywordtype">char</font> message[256];
00373 <font class="keywordtype">int</font> nDevices;
00374 RTAUDIO_DEVICE *devices;
00375
00376 std::map&lt;int, void *&gt; streams;
00377
00379 <font class="keywordtype">void</font> error(RtError::TYPE type);
00380 00380
00385 <font class="keywordtype">void</font> initialize(<font class="keywordtype">void</font>); 00382
00386 00386 <a class="code" href="classRtAudio.html#a3">~RtAudio</a>();
00388 <font class="keywordtype">void</font> clearDeviceInfo(RTAUDIO_DEVICE *info); 00387
00389 00389
00397 <font class="keywordtype">void</font> probeDeviceInfo(RTAUDIO_DEVICE *info); 00415 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a4">openStream</a>( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels,
00398 00416 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
00405 <font class="keywordtype">bool</font> probeDeviceOpen(<font class="keywordtype">int</font> device, RTAUDIO_STREAM *stream, 00417 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
00406 STREAM_MODE mode, <font class="keywordtype">int</font> channels, 00418 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
00407 <font class="keywordtype">int</font> sampleRate, RTAUDIO_FORMAT format, 00419
00408 <font class="keywordtype">int</font> *bufferSize, <font class="keywordtype">int</font> numberOfBuffers); 00421
00409 00429 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a4">openStream</a>( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels,
00416 <font class="keywordtype">void</font> *verifyStream(<font class="keywordtype">int</font> streamId); 00430 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
00417 00431 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
00422 <font class="keywordtype">void</font> convertStreamBuffer(RTAUDIO_STREAM *stream, STREAM_MODE mode); 00432 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> *numberOfBuffers );
00423
00425 <font class="keywordtype">void</font> byteSwapBuffer(<font class="keywordtype">char</font> *buffer, <font class="keywordtype">int</font> samples, RTAUDIO_FORMAT format);
00426
00428 <font class="keywordtype">int</font> formatBytes(RTAUDIO_FORMAT format);
00429 };
00430
00431 <font class="comment">// Uncomment the following definition to have extra information spewed to stderr.</font>
00432 <font class="comment">//#define RTAUDIO_DEBUG</font>
00433 00433
00434 <font class="preprocessor">#endif</font> 00435
</font></pre></div><HR> <a name="l00454"></a><a class="code" href="classRtAudio.html#a6">00454</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a6">setStreamCallback</a>(RtAudioCallback callback, <span class="keywordtype">void</span> *userData) { rtapi_-&gt;setStreamCallback( callback, userData ); };
00455
<table> 00457
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> <a name="l00464"></a><a class="code" href="classRtAudio.html#a7">00464</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a7">cancelStreamCallback</a>() { rtapi_-&gt;cancelStreamCallback(); };
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00465
</table> <a name="l00467"></a><a class="code" href="classRtAudio.html#a8">00467</a> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a8">getDeviceCount</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> rtapi_-&gt;getDeviceCount(); };
00468
</BODY> 00470
<a name="l00478"></a><a class="code" href="classRtAudio.html#a9">00478</a> <a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> <a class="code" href="classRtAudio.html#a9">getDeviceInfo</a>(<span class="keywordtype">int</span> device) { <span class="keywordflow">return</span> rtapi_-&gt;getDeviceInfo( device ); };
00479
00481
<a name="l00486"></a><a class="code" href="classRtAudio.html#a10">00486</a> <span class="keywordtype">char</span> * <span class="keyword">const</span> <a class="code" href="classRtAudio.html#a10">getStreamBuffer</a>() { <span class="keywordflow">return</span> rtapi_-&gt;getStreamBuffer(); };
00487
00489
<a name="l00494"></a><a class="code" href="classRtAudio.html#a11">00494</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a11">tickStream</a>() { rtapi_-&gt;tickStream(); };
00495
00497
<a name="l00501"></a><a class="code" href="classRtAudio.html#a12">00501</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a12">closeStream</a>() { rtapi_-&gt;closeStream(); };
00502
00504
<a name="l00508"></a><a class="code" href="classRtAudio.html#a13">00508</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a13">startStream</a>() { rtapi_-&gt;startStream(); };
00509
00511
<a name="l00515"></a><a class="code" href="classRtAudio.html#a14">00515</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a14">stopStream</a>() { rtapi_-&gt;stopStream(); };
00516
00518
<a name="l00522"></a><a class="code" href="classRtAudio.html#a15">00522</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a15">abortStream</a>() { rtapi_-&gt;abortStream(); };
00523
00524
00525 <span class="keyword">protected</span>:
00526
00527 <span class="keywordtype">void</span> initialize( RtAudioApi api );
00528
00529 RtApi *rtapi_;
00530 };
00531
00532
00533 <span class="comment">// RtApi Subclass prototypes.</span>
00534
00535 <span class="preprocessor">#if defined(__LINUX_ALSA__)</span>
00536 <span class="preprocessor"></span>
00537 <span class="keyword">class </span>RtApiAlsa: <span class="keyword">public</span> RtApi
00538 {
00539 <span class="keyword">public</span>:
00540
00541 RtApiAlsa();
00542 ~RtApiAlsa();
00543 <span class="keywordtype">void</span> tickStream();
00544 <span class="keywordtype">void</span> closeStream();
00545 <span class="keywordtype">void</span> startStream();
00546 <span class="keywordtype">void</span> stopStream();
00547 <span class="keywordtype">void</span> abortStream();
00548 <span class="keywordtype">int</span> streamWillBlock();
00549 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
00550 <span class="keywordtype">void</span> cancelStreamCallback();
00551
00552 <span class="keyword">private</span>:
00553
00554 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
00555 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
00556 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
00557 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
00558 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
00559 };
00560
00561 <span class="preprocessor">#endif</span>
00562 <span class="preprocessor"></span>
00563 <span class="preprocessor">#if defined(__LINUX_JACK__)</span>
00564 <span class="preprocessor"></span>
00565 <span class="keyword">class </span>RtApiJack: <span class="keyword">public</span> RtApi
00566 {
00567 <span class="keyword">public</span>:
00568
00569 RtApiJack();
00570 ~RtApiJack();
00571 <span class="keywordtype">void</span> tickStream();
00572 <span class="keywordtype">void</span> closeStream();
00573 <span class="keywordtype">void</span> startStream();
00574 <span class="keywordtype">void</span> stopStream();
00575 <span class="keywordtype">void</span> abortStream();
00576 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
00577 <span class="keywordtype">void</span> cancelStreamCallback();
00578 <span class="comment">// This function is intended for internal use only. It must be</span>
00579 <span class="comment">// public because it is called by the internal callback handler,</span>
00580 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
00581 <span class="comment">// will most likely produce highly undesireable results!</span>
00582 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nframes );
00583
00584 <span class="keyword">private</span>:
00585
00586 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
00587 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
00588 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
00589 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
00590 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
00591 };
00592
00593 <span class="preprocessor">#endif</span>
00594 <span class="preprocessor"></span>
00595 <span class="preprocessor">#if defined(__LINUX_OSS__)</span>
00596 <span class="preprocessor"></span>
00597 <span class="keyword">class </span>RtApiOss: <span class="keyword">public</span> RtApi
00598 {
00599 <span class="keyword">public</span>:
00600
00601 RtApiOss();
00602 ~RtApiOss();
00603 <span class="keywordtype">void</span> tickStream();
00604 <span class="keywordtype">void</span> closeStream();
00605 <span class="keywordtype">void</span> startStream();
00606 <span class="keywordtype">void</span> stopStream();
00607 <span class="keywordtype">void</span> abortStream();
00608 <span class="keywordtype">int</span> streamWillBlock();
00609 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
00610 <span class="keywordtype">void</span> cancelStreamCallback();
00611
00612 <span class="keyword">private</span>:
00613
00614 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
00615 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
00616 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
00617 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
00618 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
00619 };
00620
00621 <span class="preprocessor">#endif</span>
00622 <span class="preprocessor"></span>
00623 <span class="preprocessor">#if defined(__MACOSX_CORE__)</span>
00624 <span class="preprocessor"></span>
00625 <span class="preprocessor">#include &lt;CoreAudio/AudioHardware.h&gt;</span>
00626
00627 <span class="keyword">class </span>RtApiCore: <span class="keyword">public</span> RtApi
00628 {
00629 <span class="keyword">public</span>:
00630
00631 RtApiCore();
00632 ~RtApiCore();
00633 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
00634 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
00635 <span class="keywordtype">void</span> tickStream();
00636 <span class="keywordtype">void</span> closeStream();
00637 <span class="keywordtype">void</span> startStream();
00638 <span class="keywordtype">void</span> stopStream();
00639 <span class="keywordtype">void</span> abortStream();
00640 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
00641 <span class="keywordtype">void</span> cancelStreamCallback();
00642
00643 <span class="comment">// This function is intended for internal use only. It must be</span>
00644 <span class="comment">// public because it is called by the internal callback handler,</span>
00645 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
00646 <span class="comment">// will most likely produce highly undesireable results!</span>
00647 <span class="keywordtype">void</span> callbackEvent( AudioDeviceID deviceId, <span class="keywordtype">void</span> *inData, <span class="keywordtype">void</span> *outData );
00648
00649 <span class="keyword">private</span>:
00650
00651 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
00652 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
00653 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
00654 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
00655 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
00656 };
00657
00658 <span class="preprocessor">#endif</span>
00659 <span class="preprocessor"></span>
00660 <span class="preprocessor">#if defined(__WINDOWS_DS__)</span>
00661 <span class="preprocessor"></span>
00662 <span class="keyword">class </span>RtApiDs: <span class="keyword">public</span> RtApi
00663 {
00664 <span class="keyword">public</span>:
00665
00666 RtApiDs();
00667 ~RtApiDs();
00668 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
00669 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
00670 <span class="keywordtype">void</span> tickStream();
00671 <span class="keywordtype">void</span> closeStream();
00672 <span class="keywordtype">void</span> startStream();
00673 <span class="keywordtype">void</span> stopStream();
00674 <span class="keywordtype">void</span> abortStream();
00675 <span class="keywordtype">int</span> streamWillBlock();
00676 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
00677 <span class="keywordtype">void</span> cancelStreamCallback();
00678
00679 <span class="keyword">private</span>:
00680
00681 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
00682 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
00683 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
00684 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
00685 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
00686 };
00687
00688 <span class="preprocessor">#endif</span>
00689 <span class="preprocessor"></span>
00690 <span class="preprocessor">#if defined(__WINDOWS_ASIO__)</span>
00691 <span class="preprocessor"></span>
00692 <span class="keyword">class </span>RtApiAsio: <span class="keyword">public</span> RtApi
00693 {
00694 <span class="keyword">public</span>:
00695
00696 RtApiAsio();
00697 ~RtApiAsio();
00698 <span class="keywordtype">void</span> tickStream();
00699 <span class="keywordtype">void</span> closeStream();
00700 <span class="keywordtype">void</span> startStream();
00701 <span class="keywordtype">void</span> stopStream();
00702 <span class="keywordtype">void</span> abortStream();
00703 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
00704 <span class="keywordtype">void</span> cancelStreamCallback();
00705
00706 <span class="comment">// This function is intended for internal use only. It must be</span>
00707 <span class="comment">// public because it is called by the internal callback handler,</span>
00708 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
00709 <span class="comment">// will most likely produce highly undesireable results!</span>
00710 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">long</span> bufferIndex );
00711
00712 <span class="keyword">private</span>:
00713
00714 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
00715 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
00716 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
00717 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
00718 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
00719 };
00720
00721 <span class="preprocessor">#endif</span>
00722 <span class="preprocessor"></span>
00723 <span class="preprocessor">#if defined(__IRIX_AL__)</span>
00724 <span class="preprocessor"></span>
00725 <span class="keyword">class </span>RtApiAl: <span class="keyword">public</span> RtApi
00726 {
00727 <span class="keyword">public</span>:
00728
00729 RtApiAl();
00730 ~RtApiAl();
00731 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
00732 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
00733 <span class="keywordtype">void</span> tickStream();
00734 <span class="keywordtype">void</span> closeStream();
00735 <span class="keywordtype">void</span> startStream();
00736 <span class="keywordtype">void</span> stopStream();
00737 <span class="keywordtype">void</span> abortStream();
00738 <span class="keywordtype">int</span> streamWillBlock();
00739 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
00740 <span class="keywordtype">void</span> cancelStreamCallback();
00741
00742 <span class="keyword">private</span>:
00743
00744 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
00745 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
00746 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
00747 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
00748 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
00749 };
00750
00751 <span class="preprocessor">#endif</span>
00752 <span class="preprocessor"></span>
00753 <span class="comment">// Define the following flag to have extra information spewed to stderr.</span>
00754 <span class="comment">//#define __RTAUDIO_DEBUG__</span>
00755
00756 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -1,70 +1,75 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE> <TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css"> <LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
<CENTER> <CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"><P> <img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER> <a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR> <HR>
<!-- Generated by Doxygen 1.2.8.1 --> <!-- Generated by Doxygen 1.3.4 -->
<h1>RtDuplex.h</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************/</font> <h1>RtDuplex.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00022 <font class="comment">/***************************************************/</font> 00029 <span class="comment">/***************************************************/</span>
00023 00030
00024 <font class="preprocessor">#if !defined(__RTDUPLEX_H)</font> 00031 <span class="preprocessor">#ifndef STK_RTDUPLEX_H</span>
00025 <font class="preprocessor"></font><font class="preprocessor">#define __RTDUPLEX_H</font> 00032 <span class="preprocessor"></span><span class="preprocessor">#define STK_RTDUPLEX_H</span>
00026 <font class="preprocessor"></font> 00033 <span class="preprocessor"></span>
00027 <font class="preprocessor">#include "Stk.h"</font> 00034 <span class="preprocessor">#include "Stk.h"</span>
00028 <font class="preprocessor">#include "RtAudio.h"</font> 00035 <span class="preprocessor">#include "RtAudio.h"</span>
00029 00036
00030 <font class="keyword">class </font><a class="code" href="classRtDuplex.html">RtDuplex</a> : <font class="keyword">public</font> <a class="code" href="classStk.html">Stk</a> <a name="l00037"></a><a class="code" href="classRtDuplex.html">00037</a> <span class="keyword">class </span><a class="code" href="classRtDuplex.html">RtDuplex</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
00031 { 00038 {
00032 <font class="keyword">public</font>: 00039 <span class="keyword">public</span>:
00034 00041
00045 <a class="code" href="classRtDuplex.html#a0">RtDuplex</a>(<font class="keywordtype">int</font> nChannels = 1, MY_FLOAT sampleRate = Stk::sampleRate(), <font class="keywordtype">int</font> device = 0, <font class="keywordtype">int</font> bufferFrames = RT_BUFFER_SIZE, <font class="keywordtype">int</font> nBuffers = 2); 00052 <a class="code" href="classRtDuplex.html#a0">RtDuplex</a>(<span class="keywordtype">int</span> nChannels = 1, StkFloat <a class="code" href="classStk.html#e0">sampleRate</a> = <a class="code" href="classStk.html#e0">Stk::sampleRate</a>(), <span class="keywordtype">int</span> device = 0, <span class="keywordtype">int</span> bufferFrames = RT_BUFFER_SIZE, <span class="keywordtype">int</span> nBuffers = 2);
00046 00053
00048 <a class="code" href="classRtDuplex.html#a1">~RtDuplex</a>(); 00055 <a class="code" href="classRtDuplex.html#a1">~RtDuplex</a>();
00049 00056
00051 00058
00054 <font class="keywordtype">void</font> <a class="code" href="classRtDuplex.html#a2">start</a>(<font class="keywordtype">void</font>); 00061 <span class="keywordtype">void</span> <a class="code" href="classRtDuplex.html#a2">start</a>(<span class="keywordtype">void</span>);
00055 00062
00057
00060 <font class="keywordtype">void</font> <a class="code" href="classRtDuplex.html#a3">stop</a>(<font class="keywordtype">void</font>);
00061
00063 MY_FLOAT <a class="code" href="classRtDuplex.html#a4">lastOut</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>;
00064 00064
00066 00067 <span class="keywordtype">void</span> <a class="code" href="classRtDuplex.html#a3">stop</a>(<span class="keywordtype">void</span>);
00069 MY_FLOAT <a class="code" href="classRtDuplex.html#a5">tick</a>(<font class="keyword">const</font> MY_FLOAT sample); 00068
00070 00070 StkFloat <a class="code" href="classRtDuplex.html#a4">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00072 00071
00075 MY_FLOAT *<a class="code" href="classRtDuplex.html#a5">tick</a>(MY_FLOAT *vector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> vectorSize); 00073
00076 00076 StkFloat <a class="code" href="classRtDuplex.html#a5">tick</a>(<span class="keyword">const</span> StkFloat sample);
00078 <font class="keyword">const</font> MY_FLOAT *<a class="code" href="classRtDuplex.html#a7">lastFrame</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>; 00077
00079 00079
00081 00082 StkFloat *<a class="code" href="classRtDuplex.html#a5">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00084 MY_FLOAT *<a class="code" href="classRtDuplex.html#a8">tickFrame</a>(MY_FLOAT *frameVector, <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> frames = 1); 00083
00085 00085
00086 <font class="keyword">protected</font>: 00092 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classRtDuplex.html#a5">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00087 00093
00088 RtAudio *audio; 00095 <span class="keyword">const</span> StkFloat *<a class="code" href="classRtDuplex.html#a8">lastFrame</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00089 MY_FLOAT *data;
00090 MY_FLOAT *lastOutput;
00091 <font class="keywordtype">int</font> bufferSize;
00092 <font class="keywordtype">bool</font> stopped;
00093 <font class="keywordtype">int</font> stream;
00094 <font class="keywordtype">long</font> counter;
00095 <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> channels;
00096 00096
00097 };
00098 00098
00099 <font class="preprocessor">#endif</font> 00101 StkFloat *<a class="code" href="classRtDuplex.html#a9">tickFrame</a>(StkFloat *frameVector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> frames = 1);
</font></pre></div><HR> 00102
00104
<table> 00110 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classRtDuplex.html#a9">tickFrame</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames );
<tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr> 00111
<tr><td>&copy;1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr> 00112 <span class="keyword">protected</span>:
</table> 00113
00114 <a class="code" href="classRtAudio.html">RtAudio</a> *audio_;
</BODY> 00115 StkFloat *data_;
00116 StkFloat *lastOutput_;
00117 <span class="keywordtype">int</span> bufferSize_;
00118 <span class="keywordtype">bool</span> stopped_;
00119 <span class="keywordtype">long</span> counter_;
00120 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels_;
00121
00122 };
00123
00124 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML> </HTML>

View File

@@ -0,0 +1,65 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>RtError.h</h1><div class="fragment"><pre>00001 <span class="comment">/************************************************************************/</span>
00010 <span class="comment">/************************************************************************/</span>
00011
00012 <span class="preprocessor">#ifndef RTERROR_H</span>
00013 <span class="preprocessor"></span><span class="preprocessor">#define RTERROR_H</span>
00014 <span class="preprocessor"></span>
00015 <span class="preprocessor">#include &lt;iostream&gt;</span>
00016 <span class="preprocessor">#include &lt;string&gt;</span>
00017
<a name="l00018"></a><a class="code" href="classRtError.html">00018</a> <span class="keyword">class </span><a class="code" href="classRtError.html">RtError</a>
00019 {
00020 <span class="keyword">public</span>:
<a name="l00022"></a><a class="code" href="classRtError.html#w11">00022</a> <span class="keyword">enum</span> <a class="code" href="classRtError.html#w11">Type</a> {
00023 <a class="code" href="classRtError.html#w11w0">WARNING</a>,
00024 <a class="code" href="classRtError.html#w11w1">DEBUG_WARNING</a>,
00025 <a class="code" href="classRtError.html#w11w2">UNSPECIFIED</a>,
00026 <a class="code" href="classRtError.html#w11w3">NO_DEVICES_FOUND</a>,
00027 <a class="code" href="classRtError.html#w11w4">INVALID_DEVICE</a>,
00028 <a class="code" href="classRtError.html#w11w5">INVALID_STREAM</a>,
00029 <a class="code" href="classRtError.html#w11w6">MEMORY_ERROR</a>,
00030 <a class="code" href="classRtError.html#w11w7">INVALID_PARAMETER</a>,
00031 <a class="code" href="classRtError.html#w11w8">DRIVER_ERROR</a>,
00032 <a class="code" href="classRtError.html#w11w9">SYSTEM_ERROR</a>,
00033 <a class="code" href="classRtError.html#w11w10">THREAD_ERROR</a>
00034 };
00035
00036 <span class="keyword">protected</span>:
00037 std::string message_;
00038 <a class="code" href="classRtError.html#w11">Type</a> type_;
00039
00040 <span class="keyword">public</span>:
<a name="l00042"></a><a class="code" href="classRtError.html#a0">00042</a> <a class="code" href="classRtError.html#a0">RtError</a>(<span class="keyword">const</span> std::string&amp; message, Type type = RtError::UNSPECIFIED) : message_(message), type_(type) {}
00043
<a name="l00045"></a><a class="code" href="classRtError.html#a1">00045</a> <span class="keyword">virtual</span> <a class="code" href="classRtError.html#a1">~RtError</a>(<span class="keywordtype">void</span>) {};
00046
<a name="l00048"></a><a class="code" href="classRtError.html#a2">00048</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtError.html#a2">printMessage</a>(<span class="keywordtype">void</span>) { std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">"\n\n"</span>; }
00049
<a name="l00051"></a><a class="code" href="classRtError.html#a3">00051</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classRtError.html#w11">Type</a>&amp; <a class="code" href="classRtError.html#a3">getType</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> type_; }
00052
<a name="l00054"></a><a class="code" href="classRtError.html#a4">00054</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classRtError.html#a4">getMessage</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_; }
00055
<a name="l00057"></a><a class="code" href="classRtError.html#a5">00057</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classRtError.html#a5">getMessageString</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_.c_str(); }
00058 };
00059
00060 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<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-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

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