From ffce5357c6b6c2dfe8333fc8e419a659f211adc3 Mon Sep 17 00:00:00 2001 From: Gary Scavone Date: Sun, 29 Sep 2013 23:36:33 +0200 Subject: [PATCH] Release 4.1.1 tarball --- doc/html/Stk_8h-source.html | 2 +- doc/html/compile.html | 83 ++ doc/html/controlin.html | 143 +++ doc/html/download.html | 21 +- doc/html/hello.html | 119 +++ doc/html/index.html | 2 +- doc/html/information.html | 2 +- doc/html/instrmnts.html | 77 ++ doc/html/instruments.html | 89 ++ doc/html/multichannel.html | 86 ++ doc/html/pages.html | 14 + doc/html/polyvoices.html | 137 +++ doc/html/realtime.html | 85 ++ doc/html/skini.html | 4 +- doc/html/system.html | 12 +- doc/html/tutorial.html | 31 + doc/html/tutorial/bachfugue.ski | 1601 +++++++++++++++++++++++++++++++ doc/html/tutorial/bookert.ski | 90 ++ doc/html/tutorial1.html | 112 +++ doc/html/usage.html | 4 +- 20 files changed, 2694 insertions(+), 20 deletions(-) create mode 100644 doc/html/compile.html create mode 100644 doc/html/controlin.html create mode 100644 doc/html/hello.html create mode 100644 doc/html/instrmnts.html create mode 100644 doc/html/instruments.html create mode 100644 doc/html/multichannel.html create mode 100644 doc/html/polyvoices.html create mode 100644 doc/html/realtime.html create mode 100644 doc/html/tutorial.html create mode 100644 doc/html/tutorial/bachfugue.ski create mode 100644 doc/html/tutorial/bookert.ski create mode 100644 doc/html/tutorial1.html diff --git a/doc/html/Stk_8h-source.html b/doc/html/Stk_8h-source.html index e31f54a..5a1ba61 100644 --- a/doc/html/Stk_8h-source.html +++ b/doc/html/Stk_8h-source.html @@ -129,7 +129,7 @@ 00155 00156 #define ONE_OVER_128 (MY_FLOAT) 0.0078125 00157 -00158 #if defined(__WINDOWS_DS__) +00158 #if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) 00159 #define __OS_WINDOWS__ 00160 #define __STK_REALTIME__ 00161 #elif defined(__LINUX_OSS__) || defined(__LINUX_ALSA__) diff --git a/doc/html/compile.html b/doc/html/compile.html new file mode 100644 index 0000000..3383f29 --- /dev/null +++ b/doc/html/compile.html @@ -0,0 +1,83 @@ + + +The Synthesis ToolKit in C++ (STK) + + + +
+  

+Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   Tutorial

+
+ +

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 Makefiles which compile project-specific class objects from common src and include 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. +

+

"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) dependent. 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, Macintosh OS X, and Windows systems using the __LINUX_OSS__, __LINUX_ALSA__, __IRIX_AL__, __MACOSX_CORE__, __WINDOWS_DS__, or __WINDOWS_ASIO__ 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 __LITTLE_ENDIAN__ preprocessor definition should be provided. +

+

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. +

+

+ + + + +
OS: Realtime Audio/MIDI API: Preprocessor Definition: Library or Framework:
Linux ALSA __LINUX_ALSA__, __LITTLE_ENDIAN__ asound, pthread
Linux OSS __LINUX_OSS__, __LITTLE_ENDIAN__ pthread
Macintosh OS X CoreAudio __MACOSX_CORE__ pthread, stdc++, CoreAudio, CoreMIDI, CoreFoundation
Irix AL __IRIX_AL__ audio, pthread
+
+ +

+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 sineosc.cpp example from the previous tutorial chapter, it would be necessary to set up a directory that includes the files sineosc.cpp, the rawwave file sinewave.raw in a subdirectory called rawwaves, and the header and source files for the classes Stk, WvIn, WaveLoop, and WvOut. The program could then be compiled on a Linux system using the GNU g++ compiler as follows:

g++ -Wall -D__LITTLE_ENDIAN__ -o sineosc Stk.cpp WvIn.cpp WaveLoop.cpp WvOut.cpp sineosc.cpp
+

+Note that the sineosc.cpp 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). The example STK projects (e.g., demo, effects, ...) contain Makefiles (built by the configure script) which compile project-specific class objects from the distribution src and include directories. This approach makes it relatively easy when upgrading to a new STK release (by making path substitutions in the Makefile or by moving the projects to a similar relative path within the new STK source tree). A Makefile of this sort is provided in the projects/examples directory for compiling all the tutorial programs, as well as other example programs. To compile the sineosc.cpp program, for example, one need only type make sineosc from within the projects/examples directory. +

+

Library Use:

+ +

+The STK distribution provides a Makefile that can be used on Unix systems to build a static library. After unpacking the distribution (tar -xzf stk-4.x.tar.gz), run the configure script by typing ./configure from the top level distribution directory (see the INSTALL file in the same directory for more information). Then from within the src directory, type make. After a successful build, you may wish to move the library (libstk.a) and the contents of the include directory to standard library and include search paths on your system. For example, the linux RPM distribution of STK puts the library in /usr/lib/ and the STK header files in /usr/include/stk/. +

+Assuming the library is located in a standard search path and the header files are located in /usr/include/stk/, the sineosc.cpp example from the previous tutorial chapter can be compiled on a Linux system using the GNU g++ compiler as follows: +

+

g++ -Wall -D__LITTLE_ENDIAN__ -I/usr/include/stk -o sineosc sineosc.cpp -lstk
+

+With the header files in a standard search path, it is possible to modify the #include statements in the sineosc.cpp program as follows: +

+

#include "stk/WaveLoop.h"
+#include "stk/WvOut.h"
+

+and then compile without an explicit include path argument to the compiler: +

+

g++ -Wall -D__LITTLE_ENDIAN__ -o sineosc sineosc.cpp -lstk
+

+

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 src and include 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 sineosc.cpp, and make sure the sinewave.raw file is in the subdirectory rawwaves. +

+For programs using any of the STK realtime classes mentioned above, it is necessary to link with the DirectSound (dsound.lib), winmm.lib, and Wsock32.lib libraries, select the multithreaded library, and provide the __LITTLE_ENDIAN__ and __WINDOWS_DS__ preprocessor definitions. +

+For Steinberg ASIO support, use the __WINDOWS_ASIO__ preprocessor definition, include all the files in the src/asio/ directory (i.e., asio.h,cpp, asiodrivers.h,cpp, ...), and link with the winmm.lib, and Wsock32.lib libraries. +

+[Next tutorial]   [Main tutorial page] +

+


+ + + + +
The Synthesis ToolKit in C++ (STK)
©1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
+ + + diff --git a/doc/html/controlin.html b/doc/html/controlin.html new file mode 100644 index 0000000..68fdb61 --- /dev/null +++ b/doc/html/controlin.html @@ -0,0 +1,143 @@ + + +The Synthesis ToolKit in C++ (STK) + + + +
+  

+Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   Tutorial

+
+ +

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 SKINI 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: +

+

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
+

+MIDI messages (with the exception of Sysex) 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. 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 bethree.cpp program from the previous tutorial chapter and incorporate a Messager class to allow control via a SKINI scorefile. +

+

// controlbee.cpp
+
+#include "BeeThree.h"
+#include "RtWvOut.h"
+#include "Messager.h"
+#include "SKINI.msg"
+#include <math.h>
+
+int main()
+{
+  // Set the global sample rate before creating class instances.
+  Stk::setSampleRate( 44100.0 );
+
+  Instrmnt *instrument = 0;
+  RtWvOut *output = 0;
+  Messager *messager = 0;
+  bool done = FALSE;
+
+  try {
+    // Define and load the BeeThree instrument
+    instrument = new BeeThree();
+
+    // Define and open the default realtime output device for one-channel playback
+    output = new RtWvOut(1);
+  }
+  catch (StkError &) {
+    goto cleanup;
+  }
+
+  try {
+    // Create a Messager instance to read from a redirected SKINI scorefile.
+    messager = new Messager();
+  }
+  catch (StkError &) {
+    goto cleanup;
+  }
+
+  // Play the instrument until the end of the scorefile.
+  int i, nTicks, type;
+  MY_FLOAT byte2, byte3, frequency;
+  while (!done) {
+
+    // Look for new messages and return a delta time (in samples).
+    type = messager->nextMessage();
+    if (type < 0)
+      done = TRUE;
+
+    nTicks = messager->getDelta();
+    try {
+      for ( i=0; i<nTicks; i++ )
+        output->tick( instrument->tick() );
+    }
+    catch (StkError &) {
+      goto cleanup;
+    }
+
+    if ( type > 0 ) {
+      // Process the new control message.
+      byte2 = messager->getByteTwo();
+      byte3 = messager->getByteThree();
+
+      switch(type) {
+
+      case __SK_NoteOn_:
+        frequency = (MY_FLOAT) 220.0 * pow( 2.0, (byte2 - 57.0) / 12.0 );
+        instrument->noteOn( frequency, byte3 * ONE_OVER_128 );
+        break;
+
+      case __SK_NoteOff_:
+        instrument->noteOff( byte3 * ONE_OVER_128 );
+        break;
+
+      case __SK_ControlChange_:
+        instrument->controlChange( (int) byte2, byte3 );
+        break;
+
+      case __SK_AfterTouch_:
+        instrument->controlChange( 128, byte2 );
+        break;
+      }
+    }
+  }
+
+ cleanup:
+  delete instrument;
+  delete output;
+  delete messager;
+
+  return 0;
+}
+

+Assuming the program is compiled as controlbee and the SKINI scorefile bookert.ski is in the scores directory, the scorefile could be redirected to the program as: +

+

controlbee < scores/bookert.ski
+

+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 STDIN, socket, or MIDI connections. The Messager class constructor takes an optional argument consisting of a bitmask of the following options: STK_PIPE, STK_SOCKET, and/or STK_MIDI. +

+[Next tutorial]   [Main tutorial page] +

+


+ + + + +
The Synthesis ToolKit in C++ (STK)
©1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
+ + + diff --git a/doc/html/download.html b/doc/html/download.html index 5827e2c..539c789 100644 --- a/doc/html/download.html +++ b/doc/html/download.html @@ -10,26 +10,27 @@

Download and Release Notes

- Version 4.1, 8 October 2002 -

- STK Version 4.1: Source distribution (1.2 MB tar/gzipped)
- STK Version 4.1: Source distribution with precompiled windows binaries (1.7 MB tar/gzipped)
- STK Version 4.1: Linux RPM using ALSA API (1.2 MB)
- STK Manual (PDF) (1.2 MB) Note: HTML version in /doc/html/ directory of distribution
- + Version 4.1.1, 24 October 2002

+

Release Notes:

+

+

Version 4.1.1

+ +

+

+

Version 4.1

+
  • Macintosh OS X support added.
  • New Whistle class.
  • Added Voicer, SingWave, and VoicForm classes.
  • Improvements/fixes to the banded waveguide instruments.
  • Demo program now uses Voicer, allowing polyphony.
  • Demo tcl/tk scripts changed to use SKINI PitchChange instead of PitchBend.
  • Demo program response to PitchBend modified to octave up/down.
  • Several RtAudio fixes and improvements (OS X and Windows ASIO support added).
  • Added nextOut() method to Delay classes.
  • Documentation fixes for Reverb classes.
  • RAWWAVE_PATH changed to include the "rawwave" directory.
  • "configure" support added for unix systems.
  • Multivoice flag (-n NUMBER) added as command line option to demo program.
  • Sample rate flag added as command line option to example programs.
  • Socket port number added as command line option to example programs.

    Version 4.0

    diff --git a/doc/html/hello.html b/doc/html/hello.html new file mode 100644 index 0000000..85e1b83 --- /dev/null +++ b/doc/html/hello.html @@ -0,0 +1,119 @@ + + +The Synthesis ToolKit in C++ (STK) + + + +
    +  

    +Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   Tutorial

    +
    + +

    Hello Sine!

    + We'll begin 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. +

    +

    // 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
    +  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;
    +}
    +

    +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. +

    +Nearly all STK classes implement tick() functions which take and/or return sample values. Within the tick() function, 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() function 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. +

    +

    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. +

    +

    // sineosc.cpp
    +
    +#include "WaveLoop.h"
    +#include "WvOut.h"
    +
    +int main()
    +{
    +  // Set the global sample rate before creating class instances.
    +  Stk::setSampleRate( 44100.0 );
    +
    +  WaveLoop *input = 0;
    +  WvOut *output = 0;
    +
    +  try {
    +    // Define and load the sine wave file
    +    input = new WaveLoop( "rawwaves/sinewave.raw", TRUE );
    +
    +    // Define and open a 16-bit, one-channel WAV formatted output file
    +    output = new WvOut( "hellosine.wav", 1, WvOut::WVOUT_WAV, Stk::STK_SINT16 );
    +  }
    +  catch ( StkError & ) {
    +    goto cleanup;
    +  }
    +
    +  input->setFrequency( 440.0 );
    +
    +  // Run the oscillator for 40000 samples, writing to the output file
    +  for ( int i=0; i<40000; i++ ) {
    +
    +    try {
    +      output->tick( input->tick() );
    +    }
    +    catch ( StkError & ) {
    +      goto cleanup;
    +    }
    +
    +  }
    +
    + cleanup:
    +  delete input;
    +  delete output;
    +
    +  return 0;
    +}
    +

    +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 Class Documentation to determine which constructors and functions can throw an error. +

    +[Next tutorial]   [Main tutorial page] +

    +


    + + + + +
    The Synthesis ToolKit in C++ (STK)
    ©1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
    + + + diff --git a/doc/html/index.html b/doc/html/index.html index 78c981d..f4fe37c 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -13,7 +13,7 @@

    -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 C++. 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 8 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.

    diff --git a/doc/html/information.html b/doc/html/information.html index 0738e3f..613ad9f 100644 --- a/doc/html/information.html +++ b/doc/html/information.html @@ -25,7 +25,7 @@

    What is the Synthesis ToolKit?

    -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 unusual 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, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler. +The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in C++. 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 8 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 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).

    diff --git a/doc/html/instrmnts.html b/doc/html/instrmnts.html new file mode 100644 index 0000000..dd7c31a --- /dev/null +++ b/doc/html/instrmnts.html @@ -0,0 +1,77 @@ + + +The Synthesis ToolKit in C++ (STK) + + + +

    +  

    +Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   Tutorial

    +
    + +

    Using 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 it's frequency can be modified over time. +

    +

    // beethree.cpp
    +
    +#include "BeeThree.h"
    +#include "RtWvOut.h"
    +
    +int main()
    +{
    +  // Set the global sample rate before creating class instances.
    +  Stk::setSampleRate( 44100.0 );
    +
    +  Instrmnt *instrument = 0;
    +  RtWvOut *output = 0;
    +  MY_FLOAT frequency, amplitude, scaler;
    +
    +  try {
    +    // Define and load the sine wave file
    +    instrument = new BeeThree();
    +
    +    // Define and open the default realtime output device for one-channel playback
    +    output = new RtWvOut(1);
    +  }
    +  catch (StkError &) {
    +    goto cleanup;
    +  }
    +
    +  scaler = 1.0;
    +  frequency = 220.0;
    +  amplitude = 0.5;
    +  instrument->noteOn( frequency, amplitude );
    +
    +  // Play the instrument for 80000 samples, changing the frequency every 2000 samples
    +  for (int i=0; i<80000; i++) {
    +    try {
    +      output->tick( instrument->tick() );
    +    }
    +    catch (StkError &) {
    +      goto cleanup;
    +    }
    +
    +    if ( i % 2000 == 0 ) {
    +      scaler += 0.025;
    +      instrument->setFrequency( frequency * scaler );
    +    }
    +  }
    +
    + cleanup:
    +  delete instrument;
    +  delete output;
    +
    +  return 0;
    +}
    +

    +By using an Instrmnt pointer above, it is possible 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 (Shakers, Drummer). +

    +


    + + + + +
    The Synthesis ToolKit in C++ (STK)
    ©1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
    + + + diff --git a/doc/html/instruments.html b/doc/html/instruments.html new file mode 100644 index 0000000..ec454ff --- /dev/null +++ b/doc/html/instruments.html @@ -0,0 +1,89 @@ + + +The Synthesis ToolKit in C++ (STK) + + + +
    +  

    +Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   Tutorial

    +
    + +

    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 it's frequency can be modified over time. +

    +

    // bethree.cpp
    +
    +#include "BeeThree.h"
    +#include "RtWvOut.h"
    +
    +int main()
    +{
    +  // Set the global sample rate before creating class instances.
    +  Stk::setSampleRate( 44100.0 );
    +
    +  Instrmnt *instrument = 0;
    +  RtWvOut *output = 0;
    +  MY_FLOAT frequency, amplitude, scaler;
    +  long counter, i;
    +
    +  try {
    +    // Define and load the BeeThree instrument
    +    instrument = new BeeThree();
    +
    +    // Define and open the default realtime output device for one-channel playback
    +    output = new RtWvOut(1);
    +  }
    +  catch (StkError &) {
    +    goto cleanup;
    +  }
    +
    +  scaler = 1.0;
    +  frequency = 220.0;
    +  amplitude = 0.5;
    +  instrument->noteOn( frequency, amplitude );
    +
    +  // Play the instrument for 80000 samples, changing the frequency every 2000 samples
    +  counter = 0;
    +  while ( counter < 80000 ) {
    +    for ( i=0; i<2000; i++ ) {
    +      try {
    +        output->tick( instrument->tick() );
    +      }
    +      catch (StkError &) {
    +        goto cleanup;
    +      }
    +    }
    +
    +    counter += 2000;
    +    scaler += 0.025;
    +    instrument->setFrequency( frequency * scaler );
    +  }
    +
    +  // Turn the instrument off with maximum decay envelope.
    +  instrument->noteOff( 1.0 );
    +
    + cleanup:
    +  delete instrument;
    +  delete output;
    +
    +  return 0;
    +}
    +

    +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. +

    +[Next tutorial]   [Main tutorial page] +

    +


    + + + + +
    The Synthesis ToolKit in C++ (STK)
    ©1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
    + + + diff --git a/doc/html/multichannel.html b/doc/html/multichannel.html new file mode 100644 index 0000000..a067426 --- /dev/null +++ b/doc/html/multichannel.html @@ -0,0 +1,86 @@ + + +The Synthesis ToolKit in C++ (STK) + + + +
    +  

    +Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   Tutorial

    +
    + +

    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 sample frame. 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 tick() function. In order to distinguish single-sample and sample frame calculations, the WvIn and WvOut classes implement both tick() and tickFrame() functions. The tickFrame() functions take or return a pointer to an array of audio data representing one or more sample frames. For single-channel streams, the tick() and tickFrame() functions produce equivalent results. When tick() 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. +

    +

    // foursine.cpp
    +
    +#include "WaveLoop.h"
    +#include "WvOut.h"
    +
    +int main()
    +{
    +  // Set the global sample rate before creating class instances.
    +  Stk::setSampleRate( 44100.0 );
    +
    +  int i, j;
    +  WvOut *output = 0;
    +  WaveLoop *inputs[4];
    +  for ( i=0; i<4; i++ ) inputs[i] = 0;
    +
    +  // Define and load the sine waves
    +  try {
    +    for ( i=0; i<4; i++ ) {
    +      inputs[i] = new WaveLoop( "rawwaves/sinewave.raw", TRUE );
    +      inputs[i]->setFrequency( 220.0 * (i+1) );
    +    }
    +  }
    +  catch (StkError &) {
    +    goto cleanup;
    +  }
    +
    +  // Define and open a 16-bit, four-channel AIFF formatted output file
    +  try {
    +    output = new WvOut( "foursine.aif", 4, WvOut::WVOUT_AIF, Stk::STK_SINT16 );
    +  }
    +  catch (StkError &) {
    +    goto cleanup;
    +  }
    +
    +  // Write two seconds of four sines to the output file
    +  MY_FLOAT frame[4];
    +  for ( j=0; j<88200; j++ ) {
    +    for ( i=0; i<4; i++ )
    +      frame[i] = inputs[i]->tick();
    +
    +    output->tickFrame( frame );
    +  }
    +
    +  // Now write the first sine to all four channels for two seconds
    +  for ( j=0; j<88200; j++ ) {
    +    output->tick( inputs[0]->tick() );
    +  }
    +
    + cleanup:
    +  for ( i=0; i<4; i++ ) delete inputs[i];
    +  delete output;
    +
    +  return 0;
    +}
    +

    +[Next tutorial]   [Main tutorial page] +

    +


    + + + + +
    The Synthesis ToolKit in C++ (STK)
    ©1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
    + + + diff --git a/doc/html/pages.html b/doc/html/pages.html index ee0336f..286bd4c 100644 --- a/doc/html/pages.html +++ b/doc/html/pages.html @@ -12,14 +12,28 @@

    STK Related Pages

    Here is a list of all related documentation pages:

    Why SKINI?

    diff --git a/doc/html/system.html b/doc/html/system.html index 7069138..e948a84 100644 --- a/doc/html/system.html +++ b/doc/html/system.html @@ -19,11 +19,17 @@

    Macintosh OS X (specific):

    diff --git a/doc/html/tutorial.html b/doc/html/tutorial.html new file mode 100644 index 0000000..0809373 --- /dev/null +++ b/doc/html/tutorial.html @@ -0,0 +1,31 @@ + + +The Synthesis ToolKit in C++ (STK) + + + +
    +  

    +Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   Tutorial

    +
    + +

    Tutorial

    + The Synthesis ToolKit is a set of C++ classes. In order to go beyond the simple example programs we provide, it is necessary to know some basics about programming in C or C++. STK's "target audience" includes people who: + +

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

    +The following tutorial chapters describe many of the fundamental ToolKit concepts and classes. All tutorial programs are included in the projects/examples directory. +

    +

      +
    1. Hello Sine!
    2. Compiling
    3. Realtime Audio
    4. Instruments
    5. Control Input
    6. Multi-Channel I/O
    7. Voice Management
    +
    + + + + +
    The Synthesis ToolKit in C++ (STK)
    ©1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
    + + + diff --git a/doc/html/tutorial/bachfugue.ski b/doc/html/tutorial/bachfugue.ski new file mode 100644 index 0000000..f106995 --- /dev/null +++ b/doc/html/tutorial/bachfugue.ski @@ -0,0 +1,1601 @@ +///COM: Bach, Johann Sebastian +///OTA: Das wohltemperirte Clavier +///OPR: Das wohltemperierte Klavier +///OTL: Fuga 2, Vol. 1 +///XEN: The Well-Tempered Clavier, Volume 1, Fugue 2. +///ONB: C minor, 3-part +///SCT: BWV 847b +///YEC: Copyright 1994, David Huron +///YEM: Rights to all derivative electronic formats reserved. +// Keysig 3 flats +// Tempo 72 MM per quarter note + +// Measure number 1 =0 +NoteOn 0.416667 2 72 64 +NoteOff 0.208333 2 72 64 +NoteOn 0 2 71 64 +NoteOff 0.208333 2 71 64 +NoteOn 0 2 72 64 +NoteOff 0.416667 2 72 64 +NoteOn 0 2 67 64 +NoteOff 0.416667 2 67 64 +NoteOn 0 2 68 64 +NoteOff 0.416667 2 68 64 +NoteOn 0 2 72 64 +NoteOff 0.208333 2 72 64 +NoteOn 0 2 71 64 +NoteOff 0.208333 2 71 64 +NoteOn 0 2 72 64 +NoteOff 0.416667 2 72 64 +NoteOn 0 2 74 64 +NoteOff 0.416667 2 74 64 + +// Measure number 2 =3.33333 +NoteOn 0 2 67 64 +NoteOff 0.416667 2 67 64 +NoteOn 0 2 72 64 +NoteOff 0.208333 2 72 64 +NoteOn 0 2 71 64 +NoteOff 0.208333 2 71 64 +NoteOn 0 2 72 64 +NoteOff 0.416667 2 72 64 +NoteOn 0 2 74 64 +NoteOff 0.416667 2 74 64 +NoteOn 0 2 65 64 +NoteOff 0.208333 2 65 64 +NoteOn 0 2 67 64 +NoteOff 0.208333 2 67 64 +NoteOn 0 2 68 64 +NoteOff 0.833333 2 68 64 +NoteOn 0 2 67 64 +NoteOff 0.208333 2 67 64 +NoteOn 0 2 65 64 +NoteOff 0.208333 2 65 64 + +// Measure number 3 =6.66667 +NoteOn 0 2 63 64 +NoteOff 0.208333 2 63 64 +NoteOn 0 2 72 64 +NoteOff 0.208333 2 72 64 +NoteOn 0 2 71 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 2 71 64 +NoteOff 0 3 79 64 +NoteOn 0 2 69 64 +NoteOn 0 3 78 64 +NoteOff 0.208333 2 69 64 +NoteOff 0 3 78 64 +NoteOn 0 2 67 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 2 67 64 +NoteOn 0 2 65 64 +NoteOff 0.208333 3 79 64 +NoteOff 0 2 65 64 +NoteOn 0 2 63 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 2 63 64 +NoteOn 0 2 62 64 +NoteOff 0.208333 3 72 64 +NoteOff 0 2 62 64 +NoteOn 0 2 60 64 +NoteOn 0 3 75 64 +NoteOff 0.416667 2 60 64 +NoteOff 0 3 75 64 +NoteOn 0 2 75 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 3 79 64 +NoteOn 0 3 78 64 +NoteOff 0.208333 2 75 64 +NoteOff 0 3 78 64 +NoteOn 0 2 74 64 +NoteOn 0 3 79 64 +NoteOff 0.416667 2 74 64 +NoteOff 0 3 79 64 +NoteOn 0 2 72 64 +NoteOn 0 3 81 64 +NoteOff 0.416667 2 72 64 +NoteOff 0 3 81 64 + +// Measure number 4 =10 +NoteOn 0 2 70 64 +NoteOn 0 3 74 64 +NoteOff 0.416667 2 70 64 +NoteOff 0 3 74 64 +NoteOn 0 2 69 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 3 79 64 +NoteOn 0 3 78 64 +NoteOff 0.208333 2 69 64 +NoteOff 0 3 78 64 +NoteOn 0 2 70 64 +NoteOn 0 3 79 64 +NoteOff 0.416667 2 70 64 +NoteOff 0 3 79 64 +NoteOn 0 2 72 64 +NoteOn 0 3 81 64 +NoteOff 0.416667 2 72 64 +NoteOff 0 3 81 64 +NoteOn 0 2 66 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 3 72 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 2 66 64 +NoteOff 0 3 74 64 +NoteOn 0 2 67 64 +NoteOn 0 3 75 64 +NoteOff 0.416667 2 67 64 +NoteOn 0 2 69 64 +NoteOff 0.416667 3 75 64 +NoteOff 0 2 69 64 +NoteOn 0 2 66 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 3 74 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 2 66 64 +NoteOff 0 3 72 64 + +// Measure number 5 =13.3333 +NoteOn 0 2 67 64 +NoteOn 0 3 70 64 +NoteOff 0.416667 3 70 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 3 75 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 2 67 64 +NoteOff 0 3 74 64 +NoteOn 0 3 75 64 +NoteOn 0.208333 2 60 64 +NoteOff 0.208333 3 75 64 +NoteOff 0 2 60 64 +NoteOn 0 2 62 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 2 62 64 +NoteOn 0 2 63 64 +NoteOff 0.208333 3 67 64 +NoteOff 0 2 63 64 +NoteOn 0 2 65 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 2 65 64 +NoteOn 0 2 67 64 +NoteOff 0.208333 3 68 64 +NoteOff 0 2 67 64 +NoteOn 0 2 68 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 3 77 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 3 75 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 2 68 64 +NoteOn 0 2 62 64 +NoteOff 0.208333 3 77 64 +NoteOff 0 2 62 64 +NoteOn 0 2 63 64 +NoteOn 0 3 69 64 +NoteOff 0.208333 2 63 64 +NoteOn 0 2 65 64 +NoteOff 0.208333 3 69 64 +NoteOff 0 2 65 64 + +// Measure number 6 =16.6667 +NoteOn 0 2 67 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 2 67 64 +NoteOn 0 2 69 64 +NoteOff 0.208333 3 70 64 +NoteOff 0 2 69 64 +NoteOn 0 2 70 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 3 79 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 3 77 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 2 70 64 +NoteOn 0 2 63 64 +NoteOff 0.208333 3 79 64 +NoteOff 0 2 63 64 +NoteOn 0 2 65 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 2 65 64 +NoteOn 0 2 67 64 +NoteOff 0.208333 3 71 64 +NoteOff 0 2 67 64 +NoteOn 0 2 68 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 2 68 64 +NoteOn 0 2 67 64 +NoteOff 0.208333 3 72 64 +NoteOff 0 2 67 64 +NoteOn 0 2 65 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 2 65 64 +NoteOff 0 3 74 64 +NoteOn 0 2 63 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 2 63 64 +NoteOff 0 3 75 64 +NoteOn 0 2 62 64 +NoteOn 0 3 77 64 +NoteOff 0.416667 2 62 64 +NoteOn 0 2 72 64 +NoteOff 0.208333 2 72 64 +NoteOn 0 2 71 64 +NoteOff 0.208333 2 71 64 + +// Measure number 7 =20 +NoteOn 0 2 72 64 +NoteOff 0.416667 3 77 64 +NoteOn 0 1 60 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 60 64 +NoteOff 0 3 75 64 +NoteOn 0 1 59 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 2 72 64 +NoteOff 0 1 59 64 +NoteOff 0 3 74 64 +NoteOn 0 1 60 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 3 72 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 1 60 64 +NoteOff 0 3 70 64 +NoteOn 0 1 55 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 3 68 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 1 55 64 +NoteOff 0 3 67 64 +NoteOn 0 1 56 64 +NoteOn 0 3 65 64 +NoteOff 0.416667 1 56 64 +NoteOff 0 3 65 64 +NoteOn 0 1 60 64 +NoteOn 0 2 77 64 +NoteOn 0 3 80 64 +NoteOff 0.208333 1 60 64 +NoteOn 0 1 59 64 +NoteOff 0.208333 2 77 64 +NoteOff 0 3 80 64 +NoteOff 0 1 59 64 +NoteOn 0 1 60 64 +NoteOn 0 2 75 64 +NoteOn 0 3 79 64 +NoteOff 0.416667 1 60 64 +NoteOff 0 2 75 64 +NoteOff 0 3 79 64 +NoteOn 0 1 62 64 +NoteOn 0 2 74 64 +NoteOn 0 3 77 64 +NoteOff 0.416667 1 62 64 +NoteOff 0 2 74 64 +NoteOff 0 3 77 64 + +// Measure number 8 =23.3333 +NoteOn 0 1 55 64 +NoteOn 0 3 75 64 +NoteOff 0.416667 1 55 64 +NoteOff 0 3 75 64 +NoteOn 0 1 60 64 +NoteOn 0 2 68 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 60 64 +NoteOn 0 1 59 64 +NoteOff 0.208333 2 68 64 +NoteOff 0 3 74 64 +NoteOff 0 1 59 64 +NoteOn 0 1 60 64 +NoteOn 0 2 67 64 +NoteOn 0 3 75 64 +NoteOff 0.416667 1 60 64 +NoteOff 0 2 67 64 +NoteOff 0 3 75 64 +NoteOn 0 1 62 64 +NoteOn 0 2 65 64 +NoteOn 0 3 77 64 +NoteOff 0.416667 1 62 64 +NoteOff 0 2 65 64 +NoteOff 0 3 77 64 +NoteOn 0 1 53 64 +NoteOn 0 2 67 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 1 53 64 +NoteOn 0 1 55 64 +NoteOff 0.208333 2 67 64 +NoteOff 0 3 71 64 +NoteOff 0 1 55 64 +NoteOn 0 1 56 64 +NoteOn 0 2 65 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 2 65 64 +NoteOn 0 2 63 64 +NoteOff 0.208333 3 72 64 +NoteOff 0 2 63 64 +NoteOn 0 2 65 64 +NoteOn 0 3 74 64 +NoteOff 0.416667 1 56 64 +NoteOff 0 2 65 64 +NoteOff 0 3 74 64 +NoteOn 0 1 55 64 +NoteOn 0 2 62 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 1 55 64 +NoteOn 0 1 53 64 +NoteOff 0.208333 2 62 64 +NoteOff 0 3 71 64 +NoteOff 0 1 53 64 + +// Measure number 9 =26.6667 +NoteOn 0 1 51 64 +NoteOn 0 2 67 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 1 51 64 +NoteOn 0 1 60 64 +NoteOff 0.208333 3 72 64 +NoteOff 0 1 60 64 +NoteOn 0 1 59 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 1 59 64 +NoteOff 0 3 79 64 +NoteOn 0 1 57 64 +NoteOn 0 3 78 64 +NoteOff 0.208333 2 67 64 +NoteOff 0 1 57 64 +NoteOff 0 3 78 64 +NoteOn 0 1 55 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 1 55 64 +NoteOn 0 1 53 64 +NoteOff 0.208333 3 79 64 +NoteOff 0 1 53 64 +NoteOn 0 1 51 64 +NoteOn 0 2 71 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 51 64 +NoteOn 0 1 50 64 +NoteOff 0.208333 2 71 64 +NoteOff 0 3 74 64 +NoteOff 0 1 50 64 +NoteOn 0 1 48 64 +NoteOn 0 2 72 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 50 64 +NoteOff 0.208333 2 72 64 +NoteOff 0 1 50 64 +NoteOn 0 1 51 64 +NoteOn 0 2 72 64 +NoteOff 0.208333 1 51 64 +NoteOff 0 2 72 64 +NoteOn 0 1 50 64 +NoteOn 0 2 71 64 +NoteOff 0.208333 3 75 64 +NoteOff 0 1 50 64 +NoteOff 0 2 71 64 +NoteOn 0 1 48 64 +NoteOn 0 2 72 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 46 64 +NoteOff 0.208333 2 72 64 +NoteOff 0 1 46 64 +NoteOn 0 1 44 64 +NoteOn 0 2 67 64 +NoteOn 0 3 76 64 +NoteOff 0.208333 1 44 64 +NoteOn 0 1 43 64 +NoteOff 0.208333 2 67 64 +NoteOff 0 3 76 64 +NoteOff 0 1 43 64 + +// Measure number 10 =30 +NoteOn 0 1 41 64 +NoteOn 0 2 68 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 1 41 64 +NoteOn 0 1 58 64 +NoteOff 0.208333 3 77 64 +NoteOff 0 1 58 64 +NoteOn 0 1 56 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 1 56 64 +NoteOff 0 3 77 64 +NoteOn 0 1 55 64 +NoteOn 0 3 76 64 +NoteOff 0.208333 2 68 64 +NoteOff 0 1 55 64 +NoteOff 0 3 76 64 +NoteOn 0 1 53 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 1 53 64 +NoteOn 0 1 51 64 +NoteOff 0.208333 3 77 64 +NoteOff 0 1 51 64 +NoteOn 0 1 50 64 +NoteOn 0 2 69 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 1 50 64 +NoteOn 0 1 48 64 +NoteOff 0.208333 2 69 64 +NoteOff 0 3 72 64 +NoteOff 0 1 48 64 +NoteOn 0 1 46 64 +NoteOn 0 2 70 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 46 64 +NoteOn 0 1 48 64 +NoteOff 0.208333 2 70 64 +NoteOff 0 1 48 64 +NoteOn 0 1 50 64 +NoteOn 0 2 70 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 2 70 64 +NoteOn 0 1 48 64 +NoteOn 0 2 69 64 +NoteOff 0.208333 3 74 64 +NoteOff 0 1 48 64 +NoteOff 0 2 69 64 +NoteOn 0 1 46 64 +NoteOn 0 2 70 64 +NoteOff 0.208333 1 46 64 +NoteOn 0 1 44 64 +NoteOff 0.208333 2 70 64 +NoteOff 0 1 44 64 +NoteOn 0 1 43 64 +NoteOn 0 2 65 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 43 64 +NoteOn 0 1 41 64 +NoteOff 0.208333 2 65 64 +NoteOff 0 3 74 64 +NoteOff 0 1 41 64 + +// Measure number 11 =33.3333 +NoteOn 0 1 39 64 +NoteOn 0 2 67 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 39 64 +NoteOn 0 1 56 64 +NoteOff 0.208333 3 75 64 +NoteOff 0 1 56 64 +NoteOn 0 1 55 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 55 64 +NoteOff 0 3 75 64 +NoteOn 0 1 53 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 2 67 64 +NoteOff 0 1 53 64 +NoteOff 0 3 74 64 +NoteOn 0 1 51 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 51 64 +NoteOn 0 1 49 64 +NoteOff 0.208333 3 75 64 +NoteOff 0 1 49 64 +NoteOn 0 1 48 64 +NoteOn 0 2 67 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 46 64 +NoteOff 0.208333 2 67 64 +NoteOff 0 3 70 64 +NoteOff 0 1 46 64 +NoteOn 0 1 44 64 +NoteOn 0 2 68 64 +NoteOn 0 3 72 64 +NoteOff 0.416667 1 44 64 +NoteOff 0 2 68 64 +NoteOff 0 3 72 64 +NoteOn 0 1 60 64 +NoteOn 0 2 68 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 3 75 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 60 64 +NoteOff 0 2 68 64 +NoteOff 0 3 74 64 +NoteOn 0 1 58 64 +NoteOn 0 2 67 64 +NoteOn 0 3 75 64 +NoteOff 0.416667 1 58 64 +NoteOff 0 2 67 64 +NoteOff 0 3 75 64 +NoteOn 0 1 56 64 +NoteOn 0 2 65 64 +NoteOn 0 3 77 64 +NoteOff 0.416667 1 56 64 +NoteOff 0 2 65 64 +NoteOff 0 3 77 64 + +// Measure number 12 =36.6667 +NoteOn 0 1 55 64 +NoteOn 0 3 70 64 +NoteOff 0.416667 1 55 64 +NoteOff 0 3 70 64 +NoteOn 0 1 53 64 +NoteOn 0 2 56 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 3 75 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 53 64 +NoteOff 0 2 56 64 +NoteOff 0 3 74 64 +NoteOn 0 1 55 64 +NoteOn 0 2 58 64 +NoteOn 0 3 75 64 +NoteOff 0.416667 1 55 64 +NoteOff 0 2 58 64 +NoteOff 0 3 75 64 +NoteOn 0 1 56 64 +NoteOn 0 2 60 64 +NoteOn 0 3 77 64 +NoteOff 0.416667 1 56 64 +NoteOff 0 2 60 64 +NoteOff 0 3 77 64 +NoteOn 0 1 50 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 3 68 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 3 70 64 +NoteOn 0 1 51 64 +NoteOn 0 2 56 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 2 56 64 +NoteOn 0 2 55 64 +NoteOff 0.208333 1 51 64 +NoteOff 0 2 55 64 +NoteOn 0 1 53 64 +NoteOn 0 2 56 64 +NoteOff 0.416667 3 72 64 +NoteOff 0 1 53 64 +NoteOff 0 2 56 64 +NoteOn 0 1 50 64 +NoteOn 0 2 53 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 3 70 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 2 53 64 +NoteOff 0 3 68 64 + +// Measure number 13 =40 +NoteOn 0 1 51 64 +NoteOn 0 2 58 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 3 67 64 +NoteOn 0 3 63 64 +NoteOff 0.208333 1 51 64 +NoteOff 0 2 58 64 +NoteOff 0 3 63 64 +NoteOn 0 1 56 64 +NoteOn 0 2 60 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 3 65 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 1 56 64 +NoteOff 0 2 60 64 +NoteOff 0 3 67 64 +NoteOn 0 1 55 64 +NoteOn 0 2 58 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 3 68 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 1 55 64 +NoteOff 0 2 58 64 +NoteOff 0 3 70 64 +NoteOn 0 1 53 64 +NoteOn 0 2 56 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 3 72 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 53 64 +NoteOff 0 2 56 64 +NoteOff 0 3 74 64 +NoteOn 0 1 55 64 +NoteOn 0 2 58 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 3 75 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 55 64 +NoteOff 0 2 58 64 +NoteOff 0 3 74 64 +NoteOn 0 1 51 64 +NoteOn 0 2 55 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 3 72 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 51 64 +NoteOff 0 2 55 64 +NoteOff 0 3 74 64 +NoteOn 0 1 50 64 +NoteOn 0 2 53 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 3 75 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 2 53 64 +NoteOff 0 3 77 64 +NoteOn 0 1 48 64 +NoteOn 0 2 51 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 3 79 64 +NoteOn 0 3 81 64 +NoteOff 0.208333 1 48 64 +NoteOff 0 2 51 64 +NoteOff 0 3 81 64 + +// Measure number 14 =43.3333 +NoteOn 0 1 50 64 +NoteOn 0 2 53 64 +NoteOn 0 3 82 64 +NoteOff 0.208333 3 82 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 2 53 64 +NoteOff 0 3 65 64 +NoteOn 0 1 58 64 +NoteOn 0 2 61 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 3 67 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 1 58 64 +NoteOff 0 2 61 64 +NoteOff 0 3 68 64 +NoteOn 0 1 56 64 +NoteOn 0 2 60 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 3 70 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 1 56 64 +NoteOff 0 2 60 64 +NoteOff 0 3 72 64 +NoteOn 0 1 55 64 +NoteOn 0 2 58 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 3 74 64 +NoteOn 0 3 76 64 +NoteOff 0.208333 1 55 64 +NoteOff 0 2 58 64 +NoteOff 0 3 76 64 +NoteOn 0 1 56 64 +NoteOn 0 2 60 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 3 77 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 56 64 +NoteOff 0 2 60 64 +NoteOff 0 3 75 64 +NoteOn 0 1 53 64 +NoteOn 0 2 56 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 3 74 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 53 64 +NoteOff 0 2 56 64 +NoteOff 0 3 75 64 +NoteOn 0 1 51 64 +NoteOn 0 2 55 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 3 77 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 1 51 64 +NoteOff 0 2 55 64 +NoteOff 0 3 79 64 +NoteOn 0 1 50 64 +NoteOn 0 2 53 64 +NoteOn 0 3 81 64 +NoteOff 0.208333 3 81 64 +NoteOn 0 3 83 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 2 53 64 +NoteOff 0 3 83 64 + +// Measure number 15 =46.6667 +NoteOn 0 1 51 64 +NoteOn 0 2 55 64 +NoteOn 0 3 84 64 +NoteOff 0.416667 1 51 64 +NoteOff 0 2 55 64 +NoteOff 0 3 84 64 +NoteOn 0 2 67 64 +NoteOn 0 3 83 64 +NoteOff 0.208333 2 67 64 +NoteOff 0 3 83 64 +NoteOn 0 2 66 64 +NoteOn 0 3 81 64 +NoteOff 0.208333 2 66 64 +NoteOff 0 3 81 64 +NoteOn 0 2 67 64 +NoteOn 0 3 79 64 +NoteOff 0.208333 3 79 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 2 67 64 +NoteOff 0 3 77 64 +NoteOn 0 2 60 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 3 75 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 2 60 64 +NoteOff 0 3 74 64 +NoteOn 0 2 63 64 +NoteOn 0 3 72 64 +NoteOff 0.416667 2 63 64 +NoteOff 0 3 72 64 +NoteOn 0 1 48 64 +NoteOn 0 2 67 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 2 67 64 +NoteOn 0 2 66 64 +NoteOff 0.208333 1 48 64 +NoteOff 0 3 75 64 +NoteOff 0 2 66 64 +NoteOn 0 1 46 64 +NoteOn 0 2 67 64 +NoteOn 0 3 74 64 +NoteOff 0.416667 1 46 64 +NoteOff 0 2 67 64 +NoteOff 0 3 74 64 +NoteOn 0 1 45 64 +NoteOn 0 2 69 64 +NoteOn 0 3 72 64 +NoteOff 0.416667 1 45 64 +NoteOff 0 2 69 64 +NoteOff 0 3 72 64 + +// Measure number 16 =50 +NoteOn 0 2 62 64 +NoteOn 0 3 70 64 +NoteOff 0.416667 2 62 64 +NoteOff 0 3 70 64 +NoteOn 0 1 51 64 +NoteOn 0 2 67 64 +NoteOn 0 3 69 64 +NoteOff 0.208333 2 67 64 +NoteOn 0 2 66 64 +NoteOff 0.208333 1 51 64 +NoteOff 0 3 69 64 +NoteOff 0 2 66 64 +NoteOn 0 1 50 64 +NoteOn 0 2 67 64 +NoteOn 0 3 70 64 +NoteOff 0.416667 1 50 64 +NoteOff 0 2 67 64 +NoteOff 0 3 70 64 +NoteOn 0 1 48 64 +NoteOn 0 2 69 64 +NoteOn 0 3 72 64 +NoteOff 0.416667 1 48 64 +NoteOff 0 2 69 64 +NoteOff 0 3 72 64 +NoteOn 0 1 50 64 +NoteOn 0 2 60 64 +NoteOn 0 3 66 64 +NoteOff 0.208333 2 60 64 +NoteOn 0 2 62 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 3 66 64 +NoteOff 0 2 62 64 +NoteOn 0 1 48 64 +NoteOn 0 2 63 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 46 64 +NoteOff 0.208333 3 67 64 +NoteOff 0 1 46 64 +NoteOn 0 1 48 64 +NoteOn 0 3 69 64 +NoteOff 0.416667 2 63 64 +NoteOff 0 1 48 64 +NoteOff 0 3 69 64 +NoteOn 0 1 50 64 +NoteOn 0 2 62 64 +NoteOn 0 3 66 64 +NoteOff 0.208333 2 62 64 +NoteOn 0 2 60 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 3 66 64 +NoteOff 0 2 60 64 + +// Measure number 17 =53.3333 +NoteOn 0 1 43 64 +NoteOn 0 2 58 64 +NoteOn 0 3 67 64 +NoteOff 0.416667 1 43 64 +NoteOff 0 2 58 64 +NoteOff 0 3 67 64 +NoteOn 0 1 58 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 58 64 +NoteOff 0 3 74 64 +NoteOn 0 1 57 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 1 57 64 +NoteOff 0 3 72 64 +NoteOn 0 1 58 64 +NoteOn 0 3 74 64 +NoteOn 0.208333 2 62 64 +NoteOff 0.208333 1 58 64 +NoteOff 0 3 74 64 +NoteOff 0 2 62 64 +NoteOn 0 1 50 64 +NoteOn 0 2 64 64 +NoteOff 0.208333 2 64 64 +NoteOn 0 2 66 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 2 66 64 +NoteOn 0 1 51 64 +NoteOn 0 2 67 64 +NoteOff 0.208333 2 67 64 +NoteOn 0 2 69 64 +NoteOff 0.208333 1 51 64 +NoteOff 0 2 69 64 +NoteOn 0 1 60 64 +NoteOn 0 2 70 64 +NoteOn 0 3 76 64 +NoteOff 0.208333 1 60 64 +NoteOff 0 3 76 64 +NoteOn 0 1 58 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 58 64 +NoteOff 0 3 74 64 +NoteOn 0 1 60 64 +NoteOn 0 3 76 64 +NoteOff 0.208333 2 70 64 +NoteOn 0 2 64 64 +NoteOff 0.208333 1 60 64 +NoteOff 0 3 76 64 +NoteOff 0 2 64 64 +NoteOn 0 1 52 64 +NoteOn 0 2 65 64 +NoteOff 0.208333 2 65 64 +NoteOn 0 2 67 64 +NoteOff 0.208333 1 52 64 +NoteOff 0 2 67 64 + +// Measure number 18 =56.6667 +NoteOn 0 1 53 64 +NoteOn 0 2 69 64 +NoteOff 0.208333 2 69 64 +NoteOn 0 2 70 64 +NoteOff 0.208333 1 53 64 +NoteOff 0 2 70 64 +NoteOn 0 1 62 64 +NoteOn 0 2 72 64 +NoteOn 0 3 78 64 +NoteOff 0.208333 1 62 64 +NoteOff 0 3 78 64 +NoteOn 0 1 60 64 +NoteOn 0 3 76 64 +NoteOff 0.208333 1 60 64 +NoteOff 0 3 76 64 +NoteOn 0 1 62 64 +NoteOn 0 3 78 64 +NoteOff 0.208333 2 72 64 +NoteOn 0 2 66 64 +NoteOff 0.208333 1 62 64 +NoteOff 0 3 78 64 +NoteOff 0 2 66 64 +NoteOn 0 1 54 64 +NoteOn 0 2 67 64 +NoteOff 0.208333 2 67 64 +NoteOn 0 2 69 64 +NoteOff 0.208333 1 54 64 +NoteOff 0 2 69 64 +NoteOn 0 1 55 64 +NoteOn 0 2 70 64 +NoteOff 0.416667 2 70 64 +NoteOn 0 2 63 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 2 63 64 +NoteOff 0 3 67 64 +NoteOn 0 2 62 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 1 55 64 +NoteOff 0 2 62 64 +NoteOff 0 3 65 64 +NoteOn 0 2 63 64 +NoteOn 0 3 67 64 +NoteOn 0.208333 1 43 64 +NoteOff 0.208333 2 63 64 +NoteOff 0 3 67 64 +NoteOff 0 1 43 64 +NoteOn 0 1 45 64 +NoteOn 0 2 55 64 +NoteOff 0.208333 1 45 64 +NoteOn 0 1 47 64 +NoteOff 0.208333 2 55 64 +NoteOff 0 1 47 64 + +// Measure number 19 =60 +NoteOn 0 1 48 64 +NoteOn 0 2 56 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 50 64 +NoteOff 0.208333 2 56 64 +NoteOff 0 1 50 64 +NoteOn 0 1 51 64 +NoteOn 0 2 65 64 +NoteOn 0 3 69 64 +NoteOff 0.208333 2 65 64 +NoteOff 0 3 69 64 +NoteOn 0 2 63 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 2 63 64 +NoteOff 0 3 67 64 +NoteOn 0 2 65 64 +NoteOn 0 3 69 64 +NoteOff 0.208333 1 51 64 +NoteOn 0 1 45 64 +NoteOff 0.208333 2 65 64 +NoteOff 0 3 69 64 +NoteOff 0 1 45 64 +NoteOn 0 1 46 64 +NoteOn 0 2 57 64 +NoteOff 0.208333 1 46 64 +NoteOn 0 1 48 64 +NoteOff 0.208333 2 57 64 +NoteOff 0 1 48 64 +NoteOn 0 1 50 64 +NoteOn 0 2 58 64 +NoteOff 0.208333 1 50 64 +NoteOn 0 1 51 64 +NoteOff 0.208333 2 58 64 +NoteOff 0 1 51 64 +NoteOn 0 1 53 64 +NoteOn 0 2 67 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 2 67 64 +NoteOff 0 3 71 64 +NoteOn 0 2 65 64 +NoteOn 0 3 69 64 +NoteOff 0.208333 2 65 64 +NoteOff 0 3 69 64 +NoteOn 0 2 67 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 1 53 64 +NoteOn 0 1 47 64 +NoteOff 0.208333 2 67 64 +NoteOff 0 3 71 64 +NoteOff 0 1 47 64 +NoteOn 0 1 48 64 +NoteOn 0 2 59 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 50 64 +NoteOff 0.208333 2 59 64 +NoteOff 0 1 50 64 + +// Measure number 20 =63.3333 +NoteOn 0 1 51 64 +NoteOn 0 2 60 64 +NoteOff 0.208333 2 60 64 +NoteOn 0 2 65 64 +NoteOff 0.208333 1 51 64 +NoteOff 0 2 65 64 +NoteOn 0 2 63 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 2 63 64 +NoteOff 0 3 72 64 +NoteOn 0 2 62 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 2 62 64 +NoteOff 0 3 71 64 +NoteOn 0 2 60 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 2 60 64 +NoteOn 0 2 58 64 +NoteOff 0.208333 3 72 64 +NoteOff 0 2 58 64 +NoteOn 0 1 52 64 +NoteOn 0 2 56 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 2 56 64 +NoteOn 0 2 55 64 +NoteOff 0.208333 1 52 64 +NoteOff 0 3 67 64 +NoteOff 0 2 55 64 +NoteOn 0 1 53 64 +NoteOn 0 2 53 64 +NoteOn 0 3 68 64 +NoteOff 0.416667 1 53 64 +NoteOff 0 2 53 64 +NoteOff 0 3 68 64 +NoteOn 0 1 41 64 +NoteOn 0 2 68 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 3 72 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 1 41 64 +NoteOff 0 2 68 64 +NoteOff 0 3 71 64 +NoteOn 0 1 39 64 +NoteOn 0 2 67 64 +NoteOn 0 3 72 64 +NoteOff 0.416667 1 39 64 +NoteOff 0 2 67 64 +NoteOff 0 3 72 64 +NoteOn 0 1 38 64 +NoteOn 0 2 65 64 +NoteOn 0 3 74 64 +NoteOff 0.416667 1 38 64 +NoteOff 0 2 65 64 +NoteOff 0 3 74 64 + +// Measure number 21 =66.6667 +NoteOn 0 2 63 64 +NoteOn 0 3 67 64 +NoteOff 0.416667 2 63 64 +NoteOff 0 3 67 64 +NoteOn 0 1 44 64 +NoteOn 0 2 62 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 3 72 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 1 44 64 +NoteOff 0 2 62 64 +NoteOff 0 3 71 64 +NoteOn 0 1 43 64 +NoteOn 0 2 63 64 +NoteOn 0 3 72 64 +NoteOff 0.416667 1 43 64 +NoteOff 0 2 63 64 +NoteOff 0 3 72 64 +NoteOn 0 1 41 64 +NoteOn 0 2 65 64 +NoteOn 0 3 74 64 +NoteOff 0.416667 1 41 64 +NoteOff 0 2 65 64 +NoteOff 0 3 74 64 +NoteOn 0 1 43 64 +NoteOn 0 2 59 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 3 65 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 1 43 64 +NoteOff 0 2 59 64 +NoteOff 0 3 67 64 +NoteOn 0 1 41 64 +NoteOn 0 2 60 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 1 41 64 +NoteOn 0 1 39 64 +NoteOff 0.208333 2 60 64 +NoteOff 0 1 39 64 +NoteOn 0 1 41 64 +NoteOn 0 2 62 64 +NoteOff 0.416667 3 68 64 +NoteOff 0 1 41 64 +NoteOff 0 2 62 64 +NoteOn 0 1 43 64 +NoteOn 0 2 59 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 3 67 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 1 43 64 +NoteOff 0 2 59 64 +NoteOff 0 3 65 64 + +// Measure number 22 =70 +NoteOn 0 1 48 64 +NoteOn 0 2 60 64 +NoteOn 0 3 63 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 50 64 +NoteOff 0.208333 3 63 64 +NoteOff 0 1 50 64 +NoteOn 0 1 51 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 1 51 64 +NoteOff 0 3 72 64 +NoteOn 0 1 50 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 2 60 64 +NoteOff 0 1 50 64 +NoteOff 0 3 71 64 +NoteOn 0 1 48 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 46 64 +NoteOff 0.208333 3 72 64 +NoteOff 0 1 46 64 +NoteOn 0 1 44 64 +NoteOn 0 2 64 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 1 44 64 +NoteOn 0 1 43 64 +NoteOff 0.208333 2 64 64 +NoteOff 0 3 67 64 +NoteOff 0 1 43 64 +NoteOn 0 1 41 64 +NoteOn 0 2 65 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 1 41 64 +NoteOn 0 1 58 64 +NoteOff 0.208333 2 65 64 +NoteOff 0 1 58 64 +NoteOn 0 1 56 64 +NoteOn 0 2 65 64 +NoteOff 0.208333 1 56 64 +NoteOff 0 2 65 64 +NoteOn 0 1 55 64 +NoteOn 0 2 64 64 +NoteOff 0.208333 3 68 64 +NoteOff 0 1 55 64 +NoteOff 0 2 64 64 +NoteOn 0 1 53 64 +NoteOn 0 2 65 64 +NoteOff 0.208333 1 53 64 +NoteOn 0 1 51 64 +NoteOff 0.208333 2 65 64 +NoteOff 0 1 51 64 +NoteOn 0 1 50 64 +NoteOn 0 2 60 64 +NoteOn 0 3 69 64 +NoteOff 0.208333 1 50 64 +NoteOn 0 1 48 64 +NoteOff 0.208333 2 60 64 +NoteOff 0 3 69 64 +NoteOff 0 1 48 64 + +// Measure number 23 =73.3333 +NoteOn 0 1 46 64 +NoteOn 0 2 62 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 1 46 64 +NoteOn 0 1 48 64 +NoteOff 0.208333 3 70 64 +NoteOff 0 1 48 64 +NoteOn 0 1 50 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 3 70 64 +NoteOn 0 1 48 64 +NoteOn 0 3 69 64 +NoteOff 0.208333 2 62 64 +NoteOff 0 1 48 64 +NoteOff 0 3 69 64 +NoteOn 0 1 46 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 1 46 64 +NoteOn 0 1 44 64 +NoteOff 0.208333 3 70 64 +NoteOff 0 1 44 64 +NoteOn 0 1 43 64 +NoteOn 0 2 62 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 1 43 64 +NoteOn 0 1 41 64 +NoteOff 0.208333 2 62 64 +NoteOff 0 3 65 64 +NoteOff 0 1 41 64 +NoteOn 0 1 39 64 +NoteOn 0 2 63 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 1 39 64 +NoteOn 0 1 56 64 +NoteOff 0.208333 2 63 64 +NoteOff 0 1 56 64 +NoteOn 0 1 55 64 +NoteOn 0 2 63 64 +NoteOff 0.208333 1 55 64 +NoteOff 0 2 63 64 +NoteOn 0 1 53 64 +NoteOn 0 2 62 64 +NoteOff 0.208333 3 67 64 +NoteOff 0 1 53 64 +NoteOff 0 2 62 64 +NoteOn 0 1 51 64 +NoteOn 0 2 63 64 +NoteOff 0.208333 1 51 64 +NoteOn 0 1 50 64 +NoteOff 0.208333 2 63 64 +NoteOff 0 1 50 64 +NoteOn 0 1 48 64 +NoteOn 0 2 58 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 46 64 +NoteOff 0.208333 2 58 64 +NoteOff 0 1 46 64 + +// Measure number 24 =76.6667 +NoteOn 0 1 44 64 +NoteOn 0 2 60 64 +NoteOff 0.208333 1 44 64 +NoteOn 0 1 46 64 +NoteOff 0.208333 3 67 64 +NoteOff 0 1 46 64 +NoteOn 0 1 48 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 1 48 64 +NoteOff 0 3 68 64 +NoteOn 0 1 46 64 +NoteOn 0 3 70 64 +NoteOff 0.208333 1 46 64 +NoteOff 0 3 70 64 +NoteOn 0 1 44 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 1 44 64 +NoteOff 0 3 72 64 +NoteOn 0 1 43 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 1 43 64 +NoteOff 0 3 71 64 +NoteOn 0 1 41 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 1 41 64 +NoteOff 0 3 72 64 +NoteOn 0 1 39 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 1 39 64 +NoteOff 0 3 68 64 +NoteOn 0 1 38 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 1 38 64 +NoteOn 0 1 55 64 +NoteOff 0.208333 2 60 64 +NoteOff 0 1 55 64 +NoteOn 0 1 53 64 +NoteOn 0 2 62 64 +NoteOff 0.208333 1 53 64 +NoteOff 0 2 62 64 +NoteOn 0 1 51 64 +NoteOn 0 2 63 64 +NoteOff 0.208333 1 51 64 +NoteOff 0 2 63 64 +NoteOn 0 1 50 64 +NoteOn 0 2 65 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 2 65 64 +NoteOn 0 1 48 64 +NoteOn 0 2 63 64 +NoteOff 0.208333 1 48 64 +NoteOff 0 2 63 64 +NoteOn 0 1 47 64 +NoteOn 0 2 65 64 +NoteOff 0.208333 1 47 64 +NoteOff 0 2 65 64 +NoteOn 0 1 45 64 +NoteOn 0 2 62 64 +NoteOff 0.208333 1 45 64 +NoteOff 0 2 62 64 + +// Measure number 25 =80 +NoteOn 0 1 43 64 +NoteOn 0 2 59 64 +NoteOff 0.416667 3 65 64 +NoteOff 0 2 59 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 3 74 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 1 43 64 +NoteOff 0 3 72 64 +NoteOn 0 3 74 64 +NoteOff 0.416667 3 74 64 +NoteOn 0 2 59 64 +NoteOn 0 3 65 64 +NoteOff 0.416667 2 59 64 +NoteOff 0 3 65 64 +NoteOn 0 2 60 64 +NoteOn 0 3 63 64 +NoteOn 0.208333 1 43 64 +NoteOff 0.208333 2 60 64 +NoteOff 0 3 63 64 +NoteOff 0 1 43 64 +NoteOn 0 1 45 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 45 64 +NoteOff 0 3 75 64 +NoteOn 0 1 47 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 47 64 +NoteOff 0 3 74 64 +NoteOn 0 1 48 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 50 64 +NoteOff 0.208333 3 75 64 +NoteOff 0 1 50 64 +NoteOn 0 1 51 64 +NoteOn 0 2 63 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 1 51 64 +NoteOn 0 1 53 64 +NoteOff 0.208333 2 63 64 +NoteOff 0 3 67 64 +NoteOff 0 1 53 64 + +// Measure number 26 =83.3333 +NoteOn 0 1 55 64 +NoteOn 0 2 62 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 1 55 64 +NoteOn 0 1 53 64 +NoteOff 0.208333 2 62 64 +NoteOff 0 3 65 64 +NoteOff 0 1 53 64 +NoteOn 0 1 56 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 1 56 64 +NoteOff 0 3 77 64 +NoteOn 0 1 55 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 55 64 +NoteOff 0 3 75 64 +NoteOn 0 1 53 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 1 53 64 +NoteOn 0 1 51 64 +NoteOff 0.208333 3 77 64 +NoteOff 0 1 51 64 +NoteOn 0 1 50 64 +NoteOn 0 2 65 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 1 50 64 +NoteOn 0 1 48 64 +NoteOff 0.208333 3 68 64 +NoteOff 0 1 48 64 +NoteOn 0 1 47 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 3 67 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 2 65 64 +NoteOff 0 1 47 64 +NoteOff 0 3 77 64 +NoteOn 0 1 48 64 +NoteOn 0 3 75 64 +NoteOff 0.208333 1 48 64 +NoteOff 0 3 75 64 +NoteOn 0 1 47 64 +NoteOn 0 3 74 64 +NoteOff 0.208333 1 47 64 +NoteOff 0 3 74 64 +NoteOn 0 1 48 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 3 72 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 1 48 64 +NoteOff 0 3 71 64 +NoteOn 0 1 43 64 +NoteOn 0 2 65 64 +NoteOn 0 3 69 64 +NoteOff 0.208333 3 69 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 1 43 64 +NoteOff 0 2 65 64 +NoteOff 0 3 67 64 + +// Measure number 27 =86.6667 +NoteOn 0 1 44 64 +NoteOn 0 2 63 64 +NoteOn 0 3 72 64 +NoteOff 0.416667 1 44 64 +NoteOff 0 2 63 64 +NoteOff 0 3 72 64 +NoteOn 0 1 48 64 +NoteOn 0 2 68 64 +NoteOn 0 3 77 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 47 64 +NoteOff 0.208333 2 68 64 +NoteOff 0 3 77 64 +NoteOff 0 1 47 64 +NoteOn 0 1 48 64 +NoteOn 0 2 67 64 +NoteOn 0 3 75 64 +NoteOff 0.416667 1 48 64 +NoteOff 0 2 67 64 +NoteOff 0 3 75 64 +NoteOn 0 1 50 64 +NoteOn 0 2 65 64 +NoteOn 0 3 74 64 +NoteOff 0.416667 1 50 64 +NoteOff 0 2 65 64 +NoteOff 0 3 74 64 +NoteOn 0 1 43 64 +NoteOn 0 2 63 64 +NoteOff 0.416667 1 43 64 +NoteOff 0 2 63 64 +NoteOn 0 1 48 64 +NoteOn 0 2 62 64 +NoteOn 0 3 68 64 +NoteOff 0.208333 1 48 64 +NoteOn 0 1 47 64 +NoteOff 0.208333 2 62 64 +NoteOff 0 3 68 64 +NoteOff 0 1 47 64 +NoteOn 0 1 48 64 +NoteOn 0 2 63 64 +NoteOn 0 3 67 64 +NoteOff 0.416667 1 48 64 +NoteOff 0 2 63 64 +NoteOff 0 3 67 64 +NoteOn 0 1 50 64 +NoteOn 0 2 65 64 +NoteOn 0 3 65 64 +NoteOff 0.416667 1 50 64 +NoteOff 0 2 65 64 +NoteOff 0 3 65 64 + +// Measure number 28 =90 +NoteOn 0 1 41 64 +NoteOn 0 2 59 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 1 41 64 +NoteOn 0 1 43 64 +NoteOff 0.208333 2 59 64 +NoteOff 0 3 67 64 +NoteOff 0 1 43 64 +NoteOn 0 1 44 64 +NoteOn 0 2 60 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 3 65 64 +NoteOn 0 3 63 64 +NoteOff 0.208333 2 60 64 +NoteOff 0 3 63 64 +NoteOn 0 2 62 64 +NoteOn 0 3 65 64 +NoteOff 0.416667 1 44 64 +NoteOff 0 2 62 64 +NoteOff 0 3 65 64 +NoteOn 0 1 43 64 +NoteOn 0 2 59 64 +NoteOn 0 3 62 64 +NoteOff 0.208333 1 43 64 +NoteOn 0 1 41 64 +NoteOff 0.208333 2 59 64 +NoteOff 0 3 62 64 +NoteOff 0 1 41 64 +NoteOn 0 1 39 64 +NoteOn 0 2 59 64 +NoteOn 0 3 68 64 +NoteOff 0.416667 2 59 64 +NoteOff 0 3 68 64 +NoteOn 0 2 60 64 +NoteOn 0 3 67 64 +NoteOff 0.416667 1 39 64 +NoteOff 0 2 60 64 +NoteOff 0 3 67 64 +NoteOn 0.416667 1 51 64 +NoteOn 0 2 60 64 +NoteOn 0 3 69 64 +NoteOff 0.416667 1 51 64 +NoteOff 0 2 60 64 +NoteOff 0 3 69 64 + +// Measure number 29 =93.3333 +NoteOn 0 1 50 64 +NoteOn 0 2 65 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 2 65 64 +NoteOn 0 2 62 64 +NoteOff 0.208333 1 50 64 +NoteOff 0 3 71 64 +NoteOff 0 2 62 64 +NoteOn 0 1 48 64 +NoteOn 0 2 63 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 2 63 64 +NoteOn 0 2 60 64 +NoteOff 0.208333 1 48 64 +NoteOff 0 3 72 64 +NoteOn 0 1 55 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 3 65 64 +NoteOn 0 3 63 64 +NoteOff 0.208333 2 60 64 +NoteOff 0 1 55 64 +NoteOff 0 3 63 64 +NoteOn 0 1 43 64 +NoteOn 0 2 59 64 +NoteOn 0 3 62 64 +NoteOff 0.208333 3 62 64 +NoteOn 0 3 60 64 +NoteOff 0.208333 1 43 64 +NoteOff 0 2 59 64 +NoteOff 0 3 60 64 +NoteOn 0 1 36 64 +NoteOn 0 1 48 64 +NoteOn 0 2 60 64 +NoteOn 0 3 60 64 +NoteOff 0.416667 3 60 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 3 72 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 2 60 64 +NoteOff 0 3 71 64 +NoteOn 0 3 72 64 +NoteOff 0.416667 3 72 64 +NoteOn 0 2 64 64 +NoteOn 0 3 67 64 +NoteOff 0.416667 1 48 64 +NoteOff 0 2 64 64 +NoteOff 0 3 67 64 + +// Measure number 30 =96.6667 +NoteOn 0 2 65 64 +NoteOn 0 3 68 64 +NoteOff 0.416667 3 68 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 3 72 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 2 65 64 +NoteOff 0 3 71 64 +NoteOn 0 3 72 64 +NoteOff 0.416667 3 72 64 +NoteOn 0 2 65 64 +NoteOn 0 2 68 64 +NoteOn 0 3 71 64 +NoteOn 0 3 74 64 +NoteOff 0.416667 2 65 64 +NoteOff 0 2 68 64 +NoteOff 0 3 71 64 +NoteOff 0 3 74 64 +NoteOn 0 2 65 64 +NoteOn 0 3 67 64 +NoteOff 0.416667 2 65 64 +NoteOff 0 3 67 64 +NoteOn 0 2 63 64 +NoteOn 0 3 72 64 +NoteOff 0.208333 2 63 64 +NoteOff 0 3 72 64 +NoteOn 0 2 62 64 +NoteOn 0 3 71 64 +NoteOff 0.208333 2 62 64 +NoteOff 0 3 71 64 +NoteOn 0 2 63 64 +NoteOn 0 3 72 64 +NoteOff 0.416667 2 63 64 +NoteOff 0 3 72 64 +NoteOn 0 2 65 64 +NoteOn 0 2 68 64 +NoteOn 0 3 74 64 +NoteOff 0.416667 2 65 64 +NoteOff 0 2 68 64 +NoteOff 0 3 74 64 + +// Measure number 31 =100 +NoteOn 0 2 59 64 +NoteOn 0 2 62 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 3 65 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 2 59 64 +NoteOff 0 2 62 64 +NoteOff 0 3 67 64 +NoteOn 0 3 68 64 +NoteOn 0.416667 2 59 64 +NoteOn 0 2 62 64 +NoteOff 0.416667 3 68 64 +NoteOff 0 2 59 64 +NoteOff 0 2 62 64 +NoteOn 0 3 67 64 +NoteOff 0.208333 3 67 64 +NoteOn 0 3 65 64 +NoteOff 0.208333 3 65 64 +NoteOn 0 2 55 64 +NoteOn 0 2 60 64 +NoteOn 0 3 64 64 +NoteOff 1.66667 1 36 64 +NoteOff 0 2 55 64 +NoteOff 0 2 60 64 +NoteOff 0 3 64 64 + +// Measure =103.333 +///CDT: 1685/3/-1750/7/28 +///OCY: Deutschland +///PPP: Coethen; Cothen; Co2then +///ODT: <1722// +///PDT: 1722 +///AFR: fuga; fugue +///AST: polyphony +///AMT: simple quadruple +///SCA: Bach-Werke-Verzeichnis +///YOR: Bach Gesellschaft +///SMS: British Library, various +///AIN: cemba; clavi +///EEV: 1.0 +///RDT: 1986 November 14 +///YER: 1994 August 10 +///EFL: 2/48 +///VTS: 1035528445 + diff --git a/doc/html/tutorial/bookert.ski b/doc/html/tutorial/bookert.ski new file mode 100644 index 0000000..ca6e0aa --- /dev/null +++ b/doc/html/tutorial/bookert.ski @@ -0,0 +1,90 @@ +/* Howdy!! SKINI File, Perry Cook */ +NoteOn 0.000000 1 60 114.299997 +NoteOff 0.380000 1 60 63.500000 +NoteOn 0.020000 1 60 101.600002 +NoteOff 0.100000 1 60 63.500000 +NoteOn 0.100000 1 48 63.500000 +NoteOff 0.200000 1 48 63.500000 +NoteOn 0.200000 1 48 88.899998 +NoteOff 0.190023 1 48 63.500000 +NoteOn 0.010023 1 51 101.600002 +NoteOff 0.570023 1 51 63.500000 +NoteOn 0.030023 1 53 88.899998 +NoteOff 0.570023 1 53 63.500000 +NoteOn 0.030023 1 48 38.100002 +NoteOff 0.300000 1 48 63.500000 +NoteOn 0.300000 1 67 101.600002 +NoteOff 0.570023 1 67 63.500000 +NoteOn 0.030023 1 66 76.200003 +NoteOff 0.190023 1 66 63.500000 +NoteOn 0.010023 1 65 63.500000 +NoteOff 0.190023 1 65 63.500000 +NoteOn 0.010023 1 63 50.800001 +NoteOff 0.190023 1 63 63.500000 +NoteOn 0.010023 1 60 76.200003 +NoteOff 0.380000 1 60 63.500000 +NoteOn 0.020000 1 58 50.800001 +NoteOff 0.190023 1 58 63.500000 +NoteOn 0.010023 1 48 114.299997 +NoteOff 0.380000 1 48 63.500000 +NoteOn 0.020000 1 48 101.600002 +NoteOff 0.100000 1 48 63.500000 +NoteOn 0.100000 1 36 63.500000 +NoteOff 0.200000 1 36 63.500000 +NoteOn 0.200000 1 36 88.899998 +NoteOff 0.190023 1 36 63.500000 +NoteOn 0.010023 1 39 101.600002 +NoteOff 0.570023 1 39 63.500000 +NoteOn 0.030023 1 41 88.899998 +NoteOff 0.570023 1 41 63.500000 +NoteOn 0.030023 1 84 127.000000 +NoteOff 0.475011 1 84 63.500000 +NoteOn 0.025034 1 83 120.649998 +NoteOff 0.066531 1 83 63.500000 +NoteOn 0.003537 1 82 114.299997 +NoteOff 0.057007 1 82 63.500000 +NoteOn 0.003039 1 81 107.950003 +NoteOff 0.047528 1 81 63.500000 +NoteOn 0.002540 1 80 101.600002 +NoteOff 0.047528 1 80 63.500000 +NoteOn 0.002540 1 78 95.250000 +NoteOff 0.038005 1 78 63.500000 +NoteOn 0.002041 1 78 88.899998 +NoteOff 0.028526 1 78 63.500000 +NoteOn 0.001542 1 77 82.549997 +NoteOff 0.019002 1 77 63.500000 +NoteOn 0.001043 1 76 76.200003 +NoteOff 0.019002 1 76 63.500000 +NoteOn 0.001043 1 75 69.850002 +NoteOff 0.019002 1 75 63.500000 +NoteOn 0.001043 1 74 63.500000 +NoteOff 0.019002 1 74 63.500000 +NoteOn 0.001043 1 73 63.500000 +NoteOff 0.028526 1 73 63.500000 +NoteOn 0.001542 1 72 63.500000 +NoteOff 0.019002 1 72 63.500000 +NoteOn 0.001043 1 71 57.149998 +NoteOff 0.028526 1 71 63.500000 +NoteOn 0.001542 1 70 50.800001 +NoteOff 0.038005 1 70 63.500000 +NoteOn 0.002041 1 69 44.449999 +NoteOff 0.047528 1 69 63.500000 +NoteOn 0.002540 1 68 38.100002 +NoteOff 0.057007 1 68 63.500000 +NoteOn 0.003039 1 67 31.750000 +NoteOff 0.057007 1 67 63.500000 +NoteOn 0.003039 1 66 25.400000 +NoteOff 0.057007 1 66 63.500000 +NoteOn 0.003039 1 65 31.750000 +NoteOff 0.066531 1 65 63.500000 +NoteOn 0.003537 1 64 25.400000 +NoteOff 0.076009 1 64 63.500000 +NoteOn 0.004036 1 63 19.050001 +NoteOff 0.085533 1 63 63.500000 +NoteOn 0.004535 1 62 31.750000 +NoteOff 0.095011 1 62 63.500000 +NoteOn 0.005034 1 61 44.449999 +NoteOff 0.104535 1 61 63.500000 +ControlChange 0.005533 1 1 127.000000 +NoteOn 0.000000 1 60 63.500000 +NoteOff 1.500000 1 60 63.500000 diff --git a/doc/html/tutorial1.html b/doc/html/tutorial1.html new file mode 100644 index 0000000..ae7e609 --- /dev/null +++ b/doc/html/tutorial1.html @@ -0,0 +1,112 @@ + + +The Synthesis ToolKit in C++ (STK) + + + +
    +  

    +Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   Tutorial

    +
    + +

    Hello Sine!

    +

    Getting Started

    + +

    +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. +

    +

    // 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;
    +}
    +

    +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. +

    +

    // 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;
    +}
    +

    +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. +

    +


    + + + + +
    The Synthesis ToolKit in C++ (STK)
    ©1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
    + + + diff --git a/doc/html/usage.html b/doc/html/usage.html index 337029b..ef13961 100644 --- a/doc/html/usage.html +++ b/doc/html/usage.html @@ -11,7 +11,7 @@

    Usage Documentation

    +
  • Directory Structure:
  • Compiling:
  • Control Data:
  • Demo: STK Instruments
  • Demo: Non-Realtime Use
  • Demo: Realtime Use
  • Realtime Control Input using Tcl/Tk Graphical User Interfaces:
  • Realtime MIDI Control Input:
  • Polyphony:

    Directory Structure:

    @@ -100,7 +100,7 @@ All STK programs in this distribution take input control data in the form of Tcl/Tk 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 Md2Skini program (in the demo directory) is mostly obsolete but can be used to create SKINI scorefiles from realtime MIDI input.

    -

    Demo: STK Instruments

    +

    Demo: STK Instruments

    The demo project demonstrates the behavior of all the distributed STK instruments. The instruments available with this release include: