From 36ede6076bdc5628ea47626e79a8dffccf5058cf Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Thu, 17 Dec 2015 10:21:44 +0100 Subject: [PATCH 1/5] Add libs/stk as a git submodule --- .gitmodules | 3 +++ libs/stk | 1 + 2 files changed, 4 insertions(+) create mode 160000 libs/stk diff --git a/.gitmodules b/.gitmodules index 958a6d6af4..54926b2e77 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "source/StkInst/stk"] path = source/StkInst/stk url = https://github.com/thestk/stk.git +[submodule "libs/stk"] + path = libs/stk + url = https://github.com/thestk/stk.git diff --git a/libs/stk b/libs/stk new file mode 160000 index 0000000000..a506acc708 --- /dev/null +++ b/libs/stk @@ -0,0 +1 @@ +Subproject commit a506acc7082f5b602a42bbecfdc586fad0228c89 From 48b5036c7b127c38103d6ef63cad033ac7bbcd66 Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Thu, 17 Dec 2015 11:02:08 +0100 Subject: [PATCH 2/5] use libs/stk submodule for StkUGens and StkInst --- CMakeLists.txt | 9 +++++- source/CMakeLists.txt | 25 ++++++++------- source/StkInst/CMakeLists.txt | 5 ++- source/StkInst/StkInst.cpp | 58 +++++++++++++++++------------------ source/StkUGens/StkAll.cpp | 8 +++-- 5 files changed, 58 insertions(+), 47 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3868cddc5a..04748c1cec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,9 +2,16 @@ cmake_minimum_required (VERSION 2.8) project (sc3-plugins) if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/libs/nova-simd/simd_memory.hpp) - message(FATAL_ERROR "nova-simd submodule is missing: please run `git submodule init && git submodule update' from the toplevel of your git working tree") + message(FATAL_ERROR "nova-simd submodule is missing: please run `git submodule init && git submodule update' from the toplevel of your git working tree") endif() +if (NOT SYSTEM_STK) + if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/libs/stk/include/Stk.h) + message(FATAL_ERROR "stk submodule is missing: please run `git submodule init && git submodule update' from the toplevel of your git working tree") + endif() +endif() + + set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules ${CMAKE_MODULE_PATH}) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 73e7d759d1..50a9f4f3b7 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -269,23 +269,26 @@ if(SYSTEM_STK) find_package(STK) add_definitions(-DSYSTEM_STK) include_directories(${STK_INCLUDE_DIR}) + if (EXISTS ${STK_INCLUDE_DIR}/SKINI.msg) + add_definitions(-DSTK_SKINIMSG) + endif() BUILD_PLUGIN(StkUGens "StkUGens/StkAll.cpp" ${STK_LIBRARY} "StkUGens") add_subdirectory(StkInst) else() add_subdirectory(StkInst) - file(GLOB STKSources "StkUGens/stk-4.4.4/src/*.cpp") - file(GLOB UnneededSTKSources "StkUGens/stk-4.4.4/src/Rt*.cpp" - "StkUGens/stk-4.4.4/src/Inet*.cpp" - "StkUGens/stk-4.4.4/src/Socket.cpp" - "StkUGens/stk-4.4.4/src/Tcp*.cpp" - "StkUGens/stk-4.4.4/src/UdpSocket.cpp" - "StkUGens/stk-4.4.4/src/Thread.cpp" - "StkUGens/stk-4.4.4/src/Mutex.cpp" + file(GLOB STKSources "../libs/stk/src/*.cpp") + file(GLOB UnneededSTKSources "../libs/stk/src/Rt*.cpp" + "../libs/stk/src/Inet*.cpp" + "../libs/stk/src/Socket.cpp" + "../libs/stk/src/Tcp*.cpp" + "../libs/stk/src/UdpSocket.cpp" + "../libs/stk/src/Thread.cpp" + "../libs/stk/src/Mutex.cpp" ) list(REMOVE_ITEM STKSources ${UnneededSTKSources}) - include_directories(StkUGens/stk-4.4.4) - include_directories(StkUGens/stk-4.4.4/include) - include_directories(StkUGens/stk-4.4.4/src/include) + include_directories(../libs/stk) + include_directories(../libs/stk/include) + include_directories(../libs/stk/src/include) BUILD_PLUGIN(StkUGens "StkUGens/StkAll.cpp;${STKSources}" "" "StkUGens") endif() diff --git a/source/StkInst/CMakeLists.txt b/source/StkInst/CMakeLists.txt index 295fb62072..760c680ea4 100644 --- a/source/StkInst/CMakeLists.txt +++ b/source/StkInst/CMakeLists.txt @@ -5,9 +5,9 @@ project (${PROJECT}) include (${CMAKE_ROOT}/Modules/TestBigEndian.cmake) if(NOT SYSTEM_STK) - set(STKDIR ${CMAKE_CURRENT_SOURCE_DIR}/stk) + set(STKDIR ${CMAKE_CURRENT_SOURCE_DIR}/../../libs/stk) - if(NOT EXISTS ${STKDIR}/src) + if(NOT EXISTS ${STKDIR}/include/Stk.h) message(FATAL_ERROR "Should use git submodule update and git submodule init to get Stk") endif() @@ -21,7 +21,6 @@ if(NOT SYSTEM_STK) "${STKDIR}/src/Mutex.cpp" "${STKDIR}/src/Messager.cpp" ) - #message(WARNING ${STKSources}) list(REMOVE_ITEM STKSources ${UnneededSTKSources}) include_directories(${STKDIR}) include_directories(${STKDIR}/include) diff --git a/source/StkInst/StkInst.cpp b/source/StkInst/StkInst.cpp index cbc9ecb38d..8dc8200826 100644 --- a/source/StkInst/StkInst.cpp +++ b/source/StkInst/StkInst.cpp @@ -3,34 +3,34 @@ InterfaceTable *ft; World * gWorld; // STK Instrument Classes -#include "Clarinet.h" -#include "BlowHole.h" -#include "Saxofony.h" -#include "Flute.h" -#include "Brass.h" -#include "BlowBotl.h" -#include "Bowed.h" -#include "Plucked.h" -#include "StifKarp.h" -#include "Sitar.h" -#include "Mandolin.h" -#include "Rhodey.h" -#include "Wurley.h" -#include "TubeBell.h" -#include "HevyMetl.h" -#include "PercFlut.h" -#include "BeeThree.h" -#include "FMVoices.h" -#include "VoicForm.h" -#include "Moog.h" -#include "Simple.h" -#include "Drummer.h" -#include "BandedWG.h" -#include "Shakers.h" -#include "ModalBar.h" -#include "Mesh2D.h" -#include "Resonate.h" -#include "Whistle.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* void* operator new (unsigned int size) @@ -418,4 +418,4 @@ PluginLoad(StkUnit){ DefineDtorUnit(StkInst); DefineDtorUnit(StkMesh2D); DefineSimpleUnit(StkGlobals); -} \ No newline at end of file +} diff --git a/source/StkUGens/StkAll.cpp b/source/StkUGens/StkAll.cpp index 67ba47a2ed..8a07361589 100644 --- a/source/StkUGens/StkAll.cpp +++ b/source/StkUGens/StkAll.cpp @@ -3,10 +3,12 @@ #define MY_FLOAT float #include // caps -#ifdef SYSTEM_STK +#ifdef STK_SKINIMSG + // STK up to release version 4.5.0 #include #else - #include "include/SKINI.msg" + // later versions of STK + #include #endif #include @@ -20,7 +22,7 @@ #include #include #include -#include // caps +#include #include #include #include From a2f3c7ab8754a426ee36df72d55800c186401bc2 Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Thu, 17 Dec 2015 11:03:45 +0100 Subject: [PATCH 3/5] remove embedded copy of stk-4.4.4, remove git submodule in StkInst directory --- .gitmodules | 3 - source/StkInst/stk | 1 - source/StkUGens/stk-4.4.4/INSTALL | 42 - source/StkUGens/stk-4.4.4/Makefile.in | 30 - source/StkUGens/stk-4.4.4/README | 217 - source/StkUGens/stk-4.4.4/bin/treesed | 189 - source/StkUGens/stk-4.4.4/config/config.guess | 1371 --- source/StkUGens/stk-4.4.4/config/config.sub | 1362 --- source/StkUGens/stk-4.4.4/config/install.sh | 0 source/StkUGens/stk-4.4.4/configure | 6890 -------------- source/StkUGens/stk-4.4.4/configure.ac | 195 - .../StkUGens/stk-4.4.4/doc/README-Linux.txt | 13 - .../StkUGens/stk-4.4.4/doc/README-MacOSX.txt | 16 - source/StkUGens/stk-4.4.4/doc/README-SGI.txt | 7 - source/StkUGens/stk-4.4.4/doc/README-Win.txt | 35 - .../StkUGens/stk-4.4.4/doc/ReleaseNotes.txt | 265 - source/StkUGens/stk-4.4.4/doc/SKINI.txt | 388 - .../StkUGens/stk-4.4.4/doc/doxygen/Doxyfile | 1563 --- .../stk-4.4.4/doc/doxygen/classes.txt | 10 - .../stk-4.4.4/doc/doxygen/compile.txt | 127 - .../stk-4.4.4/doc/doxygen/control.txt | 54 - .../stk-4.4.4/doc/doxygen/crealtime.txt | 74 - .../stk-4.4.4/doc/doxygen/download.txt | 311 - source/StkUGens/stk-4.4.4/doc/doxygen/faq.txt | 80 - .../stk-4.4.4/doc/doxygen/filtering.txt | 91 - .../stk-4.4.4/doc/doxygen/footer.html | 9 - .../stk-4.4.4/doc/doxygen/fundamentals.txt | 65 - .../stk-4.4.4/doc/doxygen/header.html | 10 - .../StkUGens/stk-4.4.4/doc/doxygen/header.tex | 31 - .../StkUGens/stk-4.4.4/doc/doxygen/hello.txt | 94 - .../stk-4.4.4/doc/doxygen/images/ccrma.gif | Bin 8305 -> 0 bytes .../doc/doxygen/images/princeton.gif | Bin 5476 -> 0 bytes .../StkUGens/stk-4.4.4/doc/doxygen/index.txt | 40 - .../stk-4.4.4/doc/doxygen/information.txt | 133 - .../stk-4.4.4/doc/doxygen/instruments.txt | 19 - .../StkUGens/stk-4.4.4/doc/doxygen/links.txt | 25 - .../stk-4.4.4/doc/doxygen/maillist.txt | 14 - .../stk-4.4.4/doc/doxygen/multichannel.txt | 30 - .../stk-4.4.4/doc/doxygen/polyvoices.txt | 22 - .../stk-4.4.4/doc/doxygen/realtime.txt | 49 - .../StkUGens/stk-4.4.4/doc/doxygen/skini.txt | 226 - .../StkUGens/stk-4.4.4/doc/doxygen/system.txt | 35 - .../stk-4.4.4/doc/doxygen/tutorial.txt | 26 - .../StkUGens/stk-4.4.4/doc/doxygen/usage.txt | 203 - source/StkUGens/stk-4.4.4/doc/hierarchy.txt | 179 - .../stk-4.4.4/doc/html/ADSR_8h_source.html | 164 - .../stk-4.4.4/doc/html/Asymp_8h_source.html | 124 - .../doc/html/BandedWG_8h_source.html | 129 - .../doc/html/BeeThree_8h_source.html | 107 - .../stk-4.4.4/doc/html/BiQuad_8h_source.html | 148 - .../stk-4.4.4/doc/html/BlitSaw_8h_source.html | 129 - .../doc/html/BlitSquare_8h_source.html | 134 - .../stk-4.4.4/doc/html/Blit_8h_source.html | 124 - .../doc/html/BlowBotl_8h_source.html | 134 - .../doc/html/BlowHole_8h_source.html | 156 - .../doc/html/BowTable_8h_source.html | 134 - .../stk-4.4.4/doc/html/Bowed_8h_source.html | 140 - .../stk-4.4.4/doc/html/Brass_8h_source.html | 132 - .../stk-4.4.4/doc/html/Chorus_8h_source.html | 149 - .../doc/html/Clarinet_8h_source.html | 136 - .../stk-4.4.4/doc/html/Cubic_8h_source.html | 122 - .../stk-4.4.4/doc/html/DelayA_8h_source.html | 168 - .../stk-4.4.4/doc/html/DelayL_8h_source.html | 166 - .../stk-4.4.4/doc/html/Delay_8h_source.html | 148 - .../stk-4.4.4/doc/html/Drummer_8h_source.html | 121 - .../stk-4.4.4/doc/html/Echo_8h_source.html | 113 - .../stk-4.4.4/doc/html/Effect_8h_source.html | 89 - .../doc/html/Envelope_8h_source.html | 120 - .../doc/html/FMVoices_8h_source.html | 115 - .../stk-4.4.4/doc/html/FM_8h_source.html | 99 - .../doc/html/FileLoop_8h_source.html | 97 - .../doc/html/FileRead_8h_source.html | 99 - .../doc/html/FileWrite_8h_source.html | 105 - .../doc/html/FileWvIn_8h_source.html | 119 - .../doc/html/FileWvOut_8h_source.html | 80 - .../stk-4.4.4/doc/html/Filter_8h_source.html | 116 - .../stk-4.4.4/doc/html/Fir_8h_source.html | 131 - .../stk-4.4.4/doc/html/Flute_8h_source.html | 147 - .../doc/html/FormSwep_8h_source.html | 156 - .../doc/html/FreeVerb_8h_source.html | 212 - .../doc/html/Function_8h_source.html | 53 - .../doc/html/Generator_8h_source.html | 55 - .../doc/html/Granulate_8h_source.html | 158 - .../stk-4.4.4/doc/html/Guitar_8h_source.html | 153 - .../doc/html/HevyMetl_8h_source.html | 110 - .../stk-4.4.4/doc/html/Iir_8h_source.html | 156 - .../doc/html/InetWvIn_8h_source.html | 115 - .../doc/html/InetWvOut_8h_source.html | 79 - .../doc/html/Instrmnt_8h_source.html | 93 - .../stk-4.4.4/doc/html/JCRev_8h_source.html | 136 - .../doc/html/JetTable_8h_source.html | 107 - .../doc/html/LentPitShift_8h_source.html | 255 - .../doc/html/Mandolin_8h_source.html | 122 - .../stk-4.4.4/doc/html/Mesh2D_8h_source.html | 125 - .../doc/html/Messager_8h_source.html | 110 - .../doc/html/MidiFileIn_8h_source.html | 100 - .../doc/html/ModalBar_8h_source.html | 55 - .../stk-4.4.4/doc/html/Modal_8h_source.html | 145 - .../doc/html/Modulate_8h_source.html | 106 - .../stk-4.4.4/doc/html/Moog_8h_source.html | 115 - .../stk-4.4.4/doc/html/Mutex_8h_source.html | 76 - .../stk-4.4.4/doc/html/NRev_8h_source.html | 135 - .../stk-4.4.4/doc/html/Noise_8h_source.html | 82 - .../stk-4.4.4/doc/html/OnePole_8h_source.html | 118 - .../stk-4.4.4/doc/html/OneZero_8h_source.html | 119 - .../stk-4.4.4/doc/html/PRCRev_8h_source.html | 116 - .../doc/html/PercFlut_8h_source.html | 112 - .../doc/html/Phonemes_8h_source.html | 64 - .../doc/html/PitShift_8h_source.html | 102 - .../stk-4.4.4/doc/html/Plucked_8h_source.html | 107 - .../doc/html/PoleZero_8h_source.html | 100 - .../doc/html/ReedTable_8h_source.html | 123 - .../doc/html/Resonate_8h_source.html | 116 - .../stk-4.4.4/doc/html/Rhodey_8h_source.html | 109 - .../stk-4.4.4/doc/html/RtAudio_8h.html | 147 - .../stk-4.4.4/doc/html/RtAudio_8h_source.html | 680 -- .../stk-4.4.4/doc/html/RtError_8h_source.html | 69 - .../stk-4.4.4/doc/html/RtMidi_8h.html | 36 - .../stk-4.4.4/doc/html/RtMidi_8h_source.html | 535 -- .../stk-4.4.4/doc/html/RtWvIn_8h_source.html | 90 - .../stk-4.4.4/doc/html/RtWvOut_8h_source.html | 77 - .../stk-4.4.4/doc/html/Sampler_8h_source.html | 78 - .../doc/html/Saxofony_8h_source.html | 136 - .../stk-4.4.4/doc/html/Shakers_8h_source.html | 294 - .../stk-4.4.4/doc/html/Simple_8h_source.html | 118 - .../doc/html/SineWave_8h_source.html | 140 - .../doc/html/SingWave_8h_source.html | 119 - .../stk-4.4.4/doc/html/Sitar_8h_source.html | 122 - .../stk-4.4.4/doc/html/Skini_8h_source.html | 101 - .../stk-4.4.4/doc/html/Socket_8h_source.html | 92 - .../stk-4.4.4/doc/html/Sphere_8h_source.html | 82 - .../doc/html/StifKarp_8h_source.html | 135 - .../stk-4.4.4/doc/html/Stk_8h_source.html | 371 - .../doc/html/TapDelay_8h_source.html | 173 - .../doc/html/TcpClient_8h_source.html | 56 - .../doc/html/TcpServer_8h_source.html | 56 - .../stk-4.4.4/doc/html/Thread_8h_source.html | 81 - .../doc/html/TubeBell_8h_source.html | 107 - .../stk-4.4.4/doc/html/Twang_8h_source.html | 129 - .../stk-4.4.4/doc/html/TwoPole_8h_source.html | 128 - .../stk-4.4.4/doc/html/TwoZero_8h_source.html | 127 - .../doc/html/UdpSocket_8h_source.html | 65 - .../doc/html/Vector3D_8h_source.html | 76 - .../doc/html/VoicForm_8h_source.html | 137 - .../stk-4.4.4/doc/html/Voicer_8h_source.html | 160 - .../stk-4.4.4/doc/html/Whistle_8h_source.html | 118 - .../stk-4.4.4/doc/html/Wurley_8h_source.html | 109 - .../stk-4.4.4/doc/html/WvIn_8h_source.html | 56 - .../stk-4.4.4/doc/html/WvOut_8h_source.html | 89 - .../StkUGens/stk-4.4.4/doc/html/_formulas.tex | 8 - .../stk-4.4.4/doc/html/annotated.html | 134 - source/StkUGens/stk-4.4.4/doc/html/ccrma.gif | Bin 8305 -> 0 bytes .../doc/html/classRtAudio-members.html | 52 - .../stk-4.4.4/doc/html/classRtAudio.html | 581 -- .../doc/html/classRtError-members.html | 41 - .../stk-4.4.4/doc/html/classRtError.html | 145 - .../doc/html/classRtMidi-members.html | 38 - .../stk-4.4.4/doc/html/classRtMidi.gif | Bin 764 -> 0 bytes .../stk-4.4.4/doc/html/classRtMidi.html | 164 - .../stk-4.4.4/doc/html/classRtMidi.png | Bin 439 -> 0 bytes .../doc/html/classRtMidiIn-members.html | 46 - .../stk-4.4.4/doc/html/classRtMidiIn.gif | Bin 459 -> 0 bytes .../stk-4.4.4/doc/html/classRtMidiIn.html | 327 - .../stk-4.4.4/doc/html/classRtMidiIn.png | Bin 317 -> 0 bytes .../doc/html/classRtMidiOut-members.html | 42 - .../stk-4.4.4/doc/html/classRtMidiOut.gif | Bin 496 -> 0 bytes .../stk-4.4.4/doc/html/classRtMidiOut.html | 215 - .../stk-4.4.4/doc/html/classRtMidiOut.png | Bin 345 -> 0 bytes .../StkUGens/stk-4.4.4/doc/html/classes.html | 46 - .../doc/html/classstk_1_1ADSR-members.html | 75 - .../stk-4.4.4/doc/html/classstk_1_1ADSR.html | 214 - .../stk-4.4.4/doc/html/classstk_1_1ADSR.png | Bin 528 -> 0 bytes .../doc/html/classstk_1_1Asymp-members.html | 64 - .../stk-4.4.4/doc/html/classstk_1_1Asymp.html | 162 - .../stk-4.4.4/doc/html/classstk_1_1Asymp.png | Bin 546 -> 0 bytes .../html/classstk_1_1BandedWG-members.html | 67 - .../doc/html/classstk_1_1BandedWG.html | 170 - .../doc/html/classstk_1_1BandedWG.png | Bin 545 -> 0 bytes .../html/classstk_1_1BeeThree-members.html | 73 - .../doc/html/classstk_1_1BeeThree.html | 163 - .../doc/html/classstk_1_1BeeThree.png | Bin 639 -> 0 bytes .../doc/html/classstk_1_1BiQuad-members.html | 71 - .../doc/html/classstk_1_1BiQuad.html | 308 - .../stk-4.4.4/doc/html/classstk_1_1BiQuad.png | Bin 493 -> 0 bytes .../doc/html/classstk_1_1Blit-members.html | 62 - .../stk-4.4.4/doc/html/classstk_1_1Blit.html | 199 - .../stk-4.4.4/doc/html/classstk_1_1Blit.png | Bin 501 -> 0 bytes .../doc/html/classstk_1_1BlitSaw-members.html | 60 - .../doc/html/classstk_1_1BlitSaw.html | 148 - .../doc/html/classstk_1_1BlitSaw.png | Bin 533 -> 0 bytes .../html/classstk_1_1BlitSquare-members.html | 62 - .../doc/html/classstk_1_1BlitSquare.html | 198 - .../doc/html/classstk_1_1BlitSquare.png | Bin 558 -> 0 bytes .../html/classstk_1_1BlowBotl-members.html | 64 - .../doc/html/classstk_1_1BlowBotl.html | 172 - .../doc/html/classstk_1_1BlowBotl.png | Bin 512 -> 0 bytes .../html/classstk_1_1BlowHole-members.html | 66 - .../doc/html/classstk_1_1BlowHole.html | 181 - .../doc/html/classstk_1_1BlowHole.png | Bin 519 -> 0 bytes .../html/classstk_1_1BowTable-members.html | 59 - .../doc/html/classstk_1_1BowTable.html | 240 - .../doc/html/classstk_1_1BowTable.png | Bin 535 -> 0 bytes .../doc/html/classstk_1_1Bowed-members.html | 65 - .../stk-4.4.4/doc/html/classstk_1_1Bowed.html | 158 - .../stk-4.4.4/doc/html/classstk_1_1Bowed.png | Bin 500 -> 0 bytes .../doc/html/classstk_1_1Brass-members.html | 65 - .../stk-4.4.4/doc/html/classstk_1_1Brass.html | 177 - .../stk-4.4.4/doc/html/classstk_1_1Brass.png | Bin 494 -> 0 bytes .../doc/html/classstk_1_1Chorus-members.html | 61 - .../doc/html/classstk_1_1Chorus.html | 293 - .../stk-4.4.4/doc/html/classstk_1_1Chorus.png | Bin 495 -> 0 bytes .../html/classstk_1_1Clarinet-members.html | 64 - .../doc/html/classstk_1_1Clarinet.html | 174 - .../doc/html/classstk_1_1Clarinet.png | Bin 505 -> 0 bytes .../doc/html/classstk_1_1Cubic-members.html | 60 - .../stk-4.4.4/doc/html/classstk_1_1Cubic.html | 190 - .../stk-4.4.4/doc/html/classstk_1_1Cubic.png | Bin 498 -> 0 bytes .../doc/html/classstk_1_1Delay-members.html | 72 - .../stk-4.4.4/doc/html/classstk_1_1Delay.html | 358 - .../stk-4.4.4/doc/html/classstk_1_1Delay.png | Bin 483 -> 0 bytes .../doc/html/classstk_1_1DelayA-members.html | 70 - .../doc/html/classstk_1_1DelayA.html | 339 - .../stk-4.4.4/doc/html/classstk_1_1DelayA.png | Bin 502 -> 0 bytes .../doc/html/classstk_1_1DelayL-members.html | 70 - .../doc/html/classstk_1_1DelayL.html | 338 - .../stk-4.4.4/doc/html/classstk_1_1DelayL.png | Bin 497 -> 0 bytes .../doc/html/classstk_1_1Drummer-members.html | 61 - .../doc/html/classstk_1_1Drummer.html | 181 - .../doc/html/classstk_1_1Drummer.png | Bin 505 -> 0 bytes .../doc/html/classstk_1_1Echo-members.html | 61 - .../stk-4.4.4/doc/html/classstk_1_1Echo.html | 207 - .../stk-4.4.4/doc/html/classstk_1_1Echo.png | Bin 477 -> 0 bytes .../doc/html/classstk_1_1Effect-members.html | 54 - .../doc/html/classstk_1_1Effect.html | 74 - .../stk-4.4.4/doc/html/classstk_1_1Effect.png | Bin 1761 -> 0 bytes .../html/classstk_1_1Envelope-members.html | 64 - .../doc/html/classstk_1_1Envelope.html | 180 - .../doc/html/classstk_1_1Envelope.png | Bin 546 -> 0 bytes .../doc/html/classstk_1_1FM-members.html | 71 - .../stk-4.4.4/doc/html/classstk_1_1FM.html | 174 - .../stk-4.4.4/doc/html/classstk_1_1FM.png | Bin 1685 -> 0 bytes .../html/classstk_1_1FMVoices-members.html | 73 - .../doc/html/classstk_1_1FMVoices.html | 167 - .../doc/html/classstk_1_1FMVoices.png | Bin 639 -> 0 bytes .../html/classstk_1_1FileLoop-members.html | 74 - .../doc/html/classstk_1_1FileLoop.html | 378 - .../doc/html/classstk_1_1FileLoop.png | Bin 642 -> 0 bytes .../html/classstk_1_1FileRead-members.html | 60 - .../doc/html/classstk_1_1FileRead.html | 240 - .../doc/html/classstk_1_1FileRead.png | Bin 380 -> 0 bytes .../html/classstk_1_1FileWrite-members.html | 61 - .../doc/html/classstk_1_1FileWrite.html | 255 - .../doc/html/classstk_1_1FileWrite.png | Bin 383 -> 0 bytes .../html/classstk_1_1FileWvIn-members.html | 68 - .../doc/html/classstk_1_1FileWvIn.html | 417 - .../doc/html/classstk_1_1FileWvIn.png | Bin 641 -> 0 bytes .../html/classstk_1_1FileWvOut-members.html | 61 - .../doc/html/classstk_1_1FileWvOut.html | 250 - .../doc/html/classstk_1_1FileWvOut.png | Bin 524 -> 0 bytes .../doc/html/classstk_1_1Filter-members.html | 58 - .../doc/html/classstk_1_1Filter.html | 195 - .../stk-4.4.4/doc/html/classstk_1_1Filter.png | Bin 2607 -> 0 bytes .../doc/html/classstk_1_1Fir-members.html | 65 - .../stk-4.4.4/doc/html/classstk_1_1Fir.html | 255 - .../stk-4.4.4/doc/html/classstk_1_1Fir.png | Bin 438 -> 0 bytes .../doc/html/classstk_1_1Flute-members.html | 67 - .../stk-4.4.4/doc/html/classstk_1_1Flute.html | 183 - .../stk-4.4.4/doc/html/classstk_1_1Flute.png | Bin 486 -> 0 bytes .../html/classstk_1_1FormSwep-members.html | 67 - .../doc/html/classstk_1_1FormSwep.html | 265 - .../doc/html/classstk_1_1FormSwep.png | Bin 535 -> 0 bytes .../html/classstk_1_1FreeVerb-members.html | 69 - .../doc/html/classstk_1_1FreeVerb.html | 338 - .../doc/html/classstk_1_1FreeVerb.png | Bin 531 -> 0 bytes .../html/classstk_1_1Function-members.html | 52 - .../doc/html/classstk_1_1Function.html | 64 - .../doc/html/classstk_1_1Function.png | Bin 988 -> 0 bytes .../html/classstk_1_1Generator-members.html | 53 - .../doc/html/classstk_1_1Generator.html | 106 - .../doc/html/classstk_1_1Generator.png | Bin 2289 -> 0 bytes .../html/classstk_1_1Granulate-members.html | 64 - .../doc/html/classstk_1_1Granulate.html | 325 - .../doc/html/classstk_1_1Granulate.png | Bin 547 -> 0 bytes .../doc/html/classstk_1_1Guitar-members.html | 62 - .../doc/html/classstk_1_1Guitar.html | 354 - .../stk-4.4.4/doc/html/classstk_1_1Guitar.png | Bin 362 -> 0 bytes .../html/classstk_1_1HevyMetl-members.html | 73 - .../doc/html/classstk_1_1HevyMetl.html | 159 - .../doc/html/classstk_1_1HevyMetl.png | Bin 642 -> 0 bytes .../doc/html/classstk_1_1Iir-members.html | 67 - .../stk-4.4.4/doc/html/classstk_1_1Iir.html | 347 - .../stk-4.4.4/doc/html/classstk_1_1Iir.png | Bin 429 -> 0 bytes .../html/classstk_1_1InetWvIn-members.html | 58 - .../doc/html/classstk_1_1InetWvIn.html | 246 - .../doc/html/classstk_1_1InetWvIn.png | Bin 489 -> 0 bytes .../html/classstk_1_1InetWvOut-members.html | 61 - .../doc/html/classstk_1_1InetWvOut.html | 221 - .../doc/html/classstk_1_1InetWvOut.png | Bin 523 -> 0 bytes .../html/classstk_1_1Instrmnt-members.html | 59 - .../doc/html/classstk_1_1Instrmnt.html | 190 - .../doc/html/classstk_1_1Instrmnt.png | Bin 4149 -> 0 bytes .../doc/html/classstk_1_1JCRev-members.html | 60 - .../stk-4.4.4/doc/html/classstk_1_1JCRev.html | 257 - .../stk-4.4.4/doc/html/classstk_1_1JCRev.png | Bin 491 -> 0 bytes .../html/classstk_1_1JetTable-members.html | 54 - .../doc/html/classstk_1_1JetTable.html | 176 - .../doc/html/classstk_1_1JetTable.png | Bin 521 -> 0 bytes .../classstk_1_1LentPitShift-members.html | 60 - .../doc/html/classstk_1_1LentPitShift.html | 297 - .../doc/html/classstk_1_1LentPitShift.png | Bin 546 -> 0 bytes .../html/classstk_1_1Mandolin-members.html | 67 - .../doc/html/classstk_1_1Mandolin.html | 163 - .../doc/html/classstk_1_1Mandolin.png | Bin 520 -> 0 bytes .../doc/html/classstk_1_1Mesh2D-members.html | 68 - .../doc/html/classstk_1_1Mesh2D.html | 162 - .../stk-4.4.4/doc/html/classstk_1_1Mesh2D.png | Bin 518 -> 0 bytes .../html/classstk_1_1Messager-members.html | 57 - .../doc/html/classstk_1_1Messager.html | 178 - .../doc/html/classstk_1_1Messager.png | Bin 394 -> 0 bytes .../html/classstk_1_1MidiFileIn-members.html | 58 - .../doc/html/classstk_1_1MidiFileIn.html | 220 - .../doc/html/classstk_1_1MidiFileIn.png | Bin 381 -> 0 bytes .../doc/html/classstk_1_1Modal-members.html | 68 - .../stk-4.4.4/doc/html/classstk_1_1Modal.html | 178 - .../stk-4.4.4/doc/html/classstk_1_1Modal.png | Bin 662 -> 0 bytes .../html/classstk_1_1ModalBar-members.html | 74 - .../doc/html/classstk_1_1ModalBar.html | 95 - .../doc/html/classstk_1_1ModalBar.png | Bin 654 -> 0 bytes .../html/classstk_1_1Modulate-members.html | 60 - .../doc/html/classstk_1_1Modulate.html | 149 - .../doc/html/classstk_1_1Modulate.png | Bin 532 -> 0 bytes .../doc/html/classstk_1_1Moog-members.html | 68 - .../stk-4.4.4/doc/html/classstk_1_1Moog.html | 168 - .../stk-4.4.4/doc/html/classstk_1_1Moog.png | Bin 646 -> 0 bytes .../doc/html/classstk_1_1Mutex-members.html | 55 - .../stk-4.4.4/doc/html/classstk_1_1Mutex.html | 110 - .../stk-4.4.4/doc/html/classstk_1_1Mutex.png | Bin 360 -> 0 bytes .../doc/html/classstk_1_1NRev-members.html | 60 - .../stk-4.4.4/doc/html/classstk_1_1NRev.html | 258 - .../stk-4.4.4/doc/html/classstk_1_1NRev.png | Bin 483 -> 0 bytes .../doc/html/classstk_1_1Noise-members.html | 57 - .../stk-4.4.4/doc/html/classstk_1_1Noise.html | 158 - .../stk-4.4.4/doc/html/classstk_1_1Noise.png | Bin 525 -> 0 bytes .../doc/html/classstk_1_1OnePole-members.html | 67 - .../doc/html/classstk_1_1OnePole.html | 218 - .../doc/html/classstk_1_1OnePole.png | Bin 511 -> 0 bytes .../doc/html/classstk_1_1OneZero-members.html | 67 - .../doc/html/classstk_1_1OneZero.html | 218 - .../doc/html/classstk_1_1OneZero.png | Bin 517 -> 0 bytes .../doc/html/classstk_1_1PRCRev-members.html | 60 - .../doc/html/classstk_1_1PRCRev.html | 240 - .../stk-4.4.4/doc/html/classstk_1_1PRCRev.png | Bin 510 -> 0 bytes .../html/classstk_1_1PercFlut-members.html | 73 - .../doc/html/classstk_1_1PercFlut.html | 162 - .../doc/html/classstk_1_1PercFlut.png | Bin 629 -> 0 bytes .../html/classstk_1_1Phonemes-members.html | 55 - .../doc/html/classstk_1_1Phonemes.html | 69 - .../doc/html/classstk_1_1Phonemes.png | Bin 381 -> 0 bytes .../html/classstk_1_1PitShift-members.html | 60 - .../doc/html/classstk_1_1PitShift.html | 144 - .../doc/html/classstk_1_1PitShift.png | Bin 501 -> 0 bytes .../doc/html/classstk_1_1Plucked-members.html | 63 - .../doc/html/classstk_1_1Plucked.html | 140 - .../doc/html/classstk_1_1Plucked.png | Bin 507 -> 0 bytes .../html/classstk_1_1PoleZero-members.html | 68 - .../doc/html/classstk_1_1PoleZero.html | 179 - .../doc/html/classstk_1_1PoleZero.png | Bin 514 -> 0 bytes .../html/classstk_1_1ReedTable-members.html | 57 - .../doc/html/classstk_1_1ReedTable.html | 231 - .../doc/html/classstk_1_1ReedTable.png | Bin 539 -> 0 bytes .../html/classstk_1_1Resonate-members.html | 67 - .../doc/html/classstk_1_1Resonate.html | 158 - .../doc/html/classstk_1_1Resonate.png | Bin 521 -> 0 bytes .../doc/html/classstk_1_1Rhodey-members.html | 73 - .../doc/html/classstk_1_1Rhodey.html | 163 - .../stk-4.4.4/doc/html/classstk_1_1Rhodey.png | Bin 623 -> 0 bytes .../doc/html/classstk_1_1RtWvIn-members.html | 58 - .../doc/html/classstk_1_1RtWvIn.html | 239 - .../stk-4.4.4/doc/html/classstk_1_1RtWvIn.png | Bin 474 -> 0 bytes .../doc/html/classstk_1_1RtWvOut-members.html | 60 - .../doc/html/classstk_1_1RtWvOut.html | 204 - .../doc/html/classstk_1_1RtWvOut.png | Bin 513 -> 0 bytes .../doc/html/classstk_1_1Sampler-members.html | 64 - .../doc/html/classstk_1_1Sampler.html | 117 - .../doc/html/classstk_1_1Sampler.png | Bin 645 -> 0 bytes .../html/classstk_1_1Saxofony-members.html | 65 - .../doc/html/classstk_1_1Saxofony.html | 179 - .../doc/html/classstk_1_1Saxofony.png | Bin 537 -> 0 bytes .../doc/html/classstk_1_1Shakers-members.html | 60 - .../doc/html/classstk_1_1Shakers.html | 193 - .../doc/html/classstk_1_1Shakers.png | Bin 512 -> 0 bytes .../doc/html/classstk_1_1Simple-members.html | 64 - .../doc/html/classstk_1_1Simple.html | 172 - .../stk-4.4.4/doc/html/classstk_1_1Simple.png | Bin 507 -> 0 bytes .../html/classstk_1_1SineWave-members.html | 62 - .../doc/html/classstk_1_1SineWave.html | 237 - .../doc/html/classstk_1_1SineWave.png | Bin 550 -> 0 bytes .../html/classstk_1_1SingWave-members.html | 69 - .../doc/html/classstk_1_1SingWave.html | 182 - .../doc/html/classstk_1_1SingWave.png | Bin 566 -> 0 bytes .../doc/html/classstk_1_1Sitar-members.html | 63 - .../stk-4.4.4/doc/html/classstk_1_1Sitar.html | 139 - .../stk-4.4.4/doc/html/classstk_1_1Sitar.png | Bin 486 -> 0 bytes .../doc/html/classstk_1_1Skini-members.html | 56 - .../stk-4.4.4/doc/html/classstk_1_1Skini.html | 149 - .../stk-4.4.4/doc/html/classstk_1_1Skini.png | Bin 341 -> 0 bytes .../doc/html/classstk_1_1Socket-members.html | 60 - .../doc/html/classstk_1_1Socket.html | 88 - .../stk-4.4.4/doc/html/classstk_1_1Socket.png | Bin 894 -> 0 bytes .../doc/html/classstk_1_1Sphere-members.html | 62 - .../doc/html/classstk_1_1Sphere.html | 90 - .../stk-4.4.4/doc/html/classstk_1_1Sphere.png | Bin 382 -> 0 bytes .../html/classstk_1_1StifKarp-members.html | 66 - .../doc/html/classstk_1_1StifKarp.html | 177 - .../doc/html/classstk_1_1StifKarp.png | Bin 522 -> 0 bytes .../doc/html/classstk_1_1Stk-members.html | 49 - .../stk-4.4.4/doc/html/classstk_1_1Stk.html | 277 - .../stk-4.4.4/doc/html/classstk_1_1Stk.png | Bin 3746 -> 0 bytes .../html/classstk_1_1StkError-members.html | 29 - .../doc/html/classstk_1_1StkError.html | 58 - .../html/classstk_1_1StkFrames-members.html | 41 - .../doc/html/classstk_1_1StkFrames.html | 461 - .../html/classstk_1_1TapDelay-members.html | 66 - .../doc/html/classstk_1_1TapDelay.html | 365 - .../doc/html/classstk_1_1TapDelay.png | Bin 531 -> 0 bytes .../html/classstk_1_1TcpClient-members.html | 63 - .../doc/html/classstk_1_1TcpClient.html | 129 - .../doc/html/classstk_1_1TcpClient.png | Bin 534 -> 0 bytes .../html/classstk_1_1TcpServer-members.html | 63 - .../doc/html/classstk_1_1TcpServer.html | 111 - .../doc/html/classstk_1_1TcpServer.png | Bin 553 -> 0 bytes .../doc/html/classstk_1_1Thread-members.html | 55 - .../doc/html/classstk_1_1Thread.html | 162 - .../stk-4.4.4/doc/html/classstk_1_1Thread.png | Bin 365 -> 0 bytes .../html/classstk_1_1TubeBell-members.html | 73 - .../doc/html/classstk_1_1TubeBell.html | 160 - .../doc/html/classstk_1_1TubeBell.png | Bin 632 -> 0 bytes .../doc/html/classstk_1_1Twang-members.html | 60 - .../stk-4.4.4/doc/html/classstk_1_1Twang.html | 254 - .../stk-4.4.4/doc/html/classstk_1_1Twang.png | Bin 371 -> 0 bytes .../doc/html/classstk_1_1TwoPole-members.html | 67 - .../doc/html/classstk_1_1TwoPole.html | 242 - .../doc/html/classstk_1_1TwoPole.png | Bin 503 -> 0 bytes .../doc/html/classstk_1_1TwoZero-members.html | 67 - .../doc/html/classstk_1_1TwoZero.html | 235 - .../doc/html/classstk_1_1TwoZero.png | Bin 506 -> 0 bytes .../html/classstk_1_1UdpSocket-members.html | 65 - .../doc/html/classstk_1_1UdpSocket.html | 199 - .../doc/html/classstk_1_1UdpSocket.png | Bin 555 -> 0 bytes .../html/classstk_1_1Vector3D-members.html | 58 - .../doc/html/classstk_1_1Vector3D.html | 78 - .../doc/html/classstk_1_1Vector3D.png | Bin 385 -> 0 bytes .../html/classstk_1_1VoicForm-members.html | 69 - .../doc/html/classstk_1_1VoicForm.html | 189 - .../doc/html/classstk_1_1VoicForm.png | Bin 515 -> 0 bytes .../doc/html/classstk_1_1Voicer-members.html | 67 - .../doc/html/classstk_1_1Voicer.html | 435 - .../stk-4.4.4/doc/html/classstk_1_1Voicer.png | Bin 359 -> 0 bytes .../doc/html/classstk_1_1Whistle-members.html | 64 - .../doc/html/classstk_1_1Whistle.html | 173 - .../doc/html/classstk_1_1Whistle.png | Bin 500 -> 0 bytes .../doc/html/classstk_1_1Wurley-members.html | 73 - .../doc/html/classstk_1_1Wurley.html | 163 - .../stk-4.4.4/doc/html/classstk_1_1Wurley.png | Bin 614 -> 0 bytes .../doc/html/classstk_1_1WvIn-members.html | 53 - .../stk-4.4.4/doc/html/classstk_1_1WvIn.html | 91 - .../stk-4.4.4/doc/html/classstk_1_1WvIn.png | Bin 968 -> 0 bytes .../doc/html/classstk_1_1WvOut-members.html | 56 - .../stk-4.4.4/doc/html/classstk_1_1WvOut.html | 99 - .../stk-4.4.4/doc/html/classstk_1_1WvOut.png | Bin 836 -> 0 bytes source/StkUGens/stk-4.4.4/doc/html/closed.gif | Bin 57 -> 0 bytes .../StkUGens/stk-4.4.4/doc/html/compile.html | 66 - .../stk-4.4.4/doc/html/controlin.html | 222 - .../stk-4.4.4/doc/html/crealtime.html | 105 - .../dir_221deb9bdff892d63ed1e409450a60d2.html | 130 - .../dir_f14fd23bc74c76f288031ad23b3f3505.html | 128 - source/StkUGens/stk-4.4.4/doc/html/dirs.html | 25 - .../StkUGens/stk-4.4.4/doc/html/download.html | 518 - .../StkUGens/stk-4.4.4/doc/html/doxygen.css | 532 -- .../StkUGens/stk-4.4.4/doc/html/doxygen.png | Bin 1281 -> 0 bytes source/StkUGens/stk-4.4.4/doc/html/faq.html | 88 - source/StkUGens/stk-4.4.4/doc/html/files.html | 126 - .../stk-4.4.4/doc/html/filtering.html | 95 - .../stk-4.4.4/doc/html/functions.html | 108 - .../stk-4.4.4/doc/html/functions_0x62.html | 97 - .../stk-4.4.4/doc/html/functions_0x63.html | 186 - .../stk-4.4.4/doc/html/functions_0x64.html | 100 - .../stk-4.4.4/doc/html/functions_0x65.html | 83 - .../stk-4.4.4/doc/html/functions_0x66.html | 148 - .../stk-4.4.4/doc/html/functions_0x67.html | 221 - .../stk-4.4.4/doc/html/functions_0x68.html | 70 - .../stk-4.4.4/doc/html/functions_0x69.html | 145 - .../stk-4.4.4/doc/html/functions_0x6a.html | 67 - .../stk-4.4.4/doc/html/functions_0x6b.html | 82 - .../stk-4.4.4/doc/html/functions_0x6c.html | 136 - .../stk-4.4.4/doc/html/functions_0x6d.html | 98 - .../stk-4.4.4/doc/html/functions_0x6e.html | 165 - .../stk-4.4.4/doc/html/functions_0x6f.html | 111 - .../stk-4.4.4/doc/html/functions_0x70.html | 120 - .../stk-4.4.4/doc/html/functions_0x71.html | 67 - .../stk-4.4.4/doc/html/functions_0x72.html | 145 - .../stk-4.4.4/doc/html/functions_0x73.html | 689 -- .../stk-4.4.4/doc/html/functions_0x74.html | 227 - .../stk-4.4.4/doc/html/functions_0x75.html | 82 - .../stk-4.4.4/doc/html/functions_0x76.html | 76 - .../stk-4.4.4/doc/html/functions_0x77.html | 113 - .../stk-4.4.4/doc/html/functions_0x7e.html | 301 - .../stk-4.4.4/doc/html/functions_enum.html | 41 - .../stk-4.4.4/doc/html/functions_eval.html | 177 - .../stk-4.4.4/doc/html/functions_func.html | 101 - .../doc/html/functions_func_0x62.html | 97 - .../doc/html/functions_func_0x63.html | 182 - .../doc/html/functions_func_0x64.html | 85 - .../doc/html/functions_func_0x65.html | 83 - .../doc/html/functions_func_0x66.html | 124 - .../doc/html/functions_func_0x67.html | 221 - .../doc/html/functions_func_0x68.html | 70 - .../doc/html/functions_func_0x69.html | 121 - .../doc/html/functions_func_0x6a.html | 67 - .../doc/html/functions_func_0x6b.html | 82 - .../doc/html/functions_func_0x6c.html | 126 - .../doc/html/functions_func_0x6d.html | 91 - .../doc/html/functions_func_0x6e.html | 152 - .../doc/html/functions_func_0x6f.html | 108 - .../doc/html/functions_func_0x70.html | 114 - .../doc/html/functions_func_0x71.html | 67 - .../doc/html/functions_func_0x72.html | 130 - .../doc/html/functions_func_0x73.html | 659 -- .../doc/html/functions_func_0x74.html | 212 - .../doc/html/functions_func_0x75.html | 73 - .../doc/html/functions_func_0x76.html | 76 - .../doc/html/functions_func_0x77.html | 98 - .../doc/html/functions_func_0x7e.html | 301 - .../stk-4.4.4/doc/html/functions_type.html | 37 - .../stk-4.4.4/doc/html/functions_vars.html | 185 - .../stk-4.4.4/doc/html/fundamentals.html | 74 - .../StkUGens/stk-4.4.4/doc/html/globals.html | 42 - .../stk-4.4.4/doc/html/globals_type.html | 42 - .../stk-4.4.4/doc/html/graph_legend.dot | 22 - source/StkUGens/stk-4.4.4/doc/html/hello.html | 116 - .../stk-4.4.4/doc/html/hierarchy.html | 162 - source/StkUGens/stk-4.4.4/doc/html/index.html | 37 - .../stk-4.4.4/doc/html/information.html | 95 - .../stk-4.4.4/doc/html/instruments.html | 131 - source/StkUGens/stk-4.4.4/doc/html/links.html | 57 - .../StkUGens/stk-4.4.4/doc/html/maillist.html | 28 - source/StkUGens/stk-4.4.4/doc/html/mcgill.gif | Bin 3810 -> 0 bytes .../stk-4.4.4/doc/html/multichannel.html | 72 - .../stk-4.4.4/doc/html/namespaces.html | 25 - .../stk-4.4.4/doc/html/namespacestk.html | 233 - source/StkUGens/stk-4.4.4/doc/html/open.gif | Bin 54 -> 0 bytes source/StkUGens/stk-4.4.4/doc/html/pages.html | 64 - .../doc/html/papers/STKsiggraph96.pdf | Bin 62635 -> 0 bytes .../stk-4.4.4/doc/html/papers/stkicmc99.pdf | Bin 76701 -> 0 bytes .../stk-4.4.4/doc/html/papers/stkupdate.pdf | Bin 40293 -> 0 bytes .../stk-4.4.4/doc/html/polyvoices.html | 213 - .../StkUGens/stk-4.4.4/doc/html/princeton.gif | Bin 5476 -> 0 bytes .../StkUGens/stk-4.4.4/doc/html/realtime.html | 89 - source/StkUGens/stk-4.4.4/doc/html/skini.html | 204 - .../structRtAudio_1_1DeviceInfo-members.html | 32 - .../doc/html/structRtAudio_1_1DeviceInfo.html | 175 - ...tructRtAudio_1_1StreamOptions-members.html | 27 - .../html/structRtAudio_1_1StreamOptions.html | 115 - ...ctRtAudio_1_1StreamParameters-members.html | 26 - .../structRtAudio_1_1StreamParameters.html | 85 - ...structstk_1_1Skini_1_1Message-members.html | 29 - .../html/structstk_1_1Skini_1_1Message.html | 130 - .../StkUGens/stk-4.4.4/doc/html/system.html | 67 - source/StkUGens/stk-4.4.4/doc/html/tab_b.gif | Bin 35 -> 0 bytes source/StkUGens/stk-4.4.4/doc/html/tab_l.gif | Bin 706 -> 0 bytes source/StkUGens/stk-4.4.4/doc/html/tab_r.gif | Bin 2585 -> 0 bytes source/StkUGens/stk-4.4.4/doc/html/tabs.css | 105 - .../StkUGens/stk-4.4.4/doc/html/tutorial.html | 49 - .../stk-4.4.4/doc/html/tutorial/bachfugue.ski | 1601 ---- .../stk-4.4.4/doc/html/tutorial/bookert.ski | 90 - source/StkUGens/stk-4.4.4/doc/html/usage.html | 257 - source/StkUGens/stk-4.4.4/doc/treesed.html | 175 - source/StkUGens/stk-4.4.4/include/ADSR.h | 179 - source/StkUGens/stk-4.4.4/include/Asymp.h | 146 - source/StkUGens/stk-4.4.4/include/BandedWG.h | 153 - source/StkUGens/stk-4.4.4/include/BeeThree.h | 127 - source/StkUGens/stk-4.4.4/include/BiQuad.h | 186 - source/StkUGens/stk-4.4.4/include/Blit.h | 151 - source/StkUGens/stk-4.4.4/include/BlitSaw.h | 148 - .../StkUGens/stk-4.4.4/include/BlitSquare.h | 170 - source/StkUGens/stk-4.4.4/include/BlowBotl.h | 144 - source/StkUGens/stk-4.4.4/include/BlowHole.h | 185 - source/StkUGens/stk-4.4.4/include/BowTable.h | 150 - source/StkUGens/stk-4.4.4/include/Bowed.h | 157 - source/StkUGens/stk-4.4.4/include/Brass.h | 147 - source/StkUGens/stk-4.4.4/include/Chorus.h | 172 - source/StkUGens/stk-4.4.4/include/Clarinet.h | 152 - source/StkUGens/stk-4.4.4/include/Cubic.h | 138 - source/StkUGens/stk-4.4.4/include/Delay.h | 188 - source/StkUGens/stk-4.4.4/include/DelayA.h | 207 - source/StkUGens/stk-4.4.4/include/DelayL.h | 203 - source/StkUGens/stk-4.4.4/include/Drummer.h | 130 - source/StkUGens/stk-4.4.4/include/Echo.h | 120 - source/StkUGens/stk-4.4.4/include/Effect.h | 79 - source/StkUGens/stk-4.4.4/include/Envelope.h | 130 - source/StkUGens/stk-4.4.4/include/FM.h | 122 - source/StkUGens/stk-4.4.4/include/FMVoices.h | 135 - source/StkUGens/stk-4.4.4/include/FileLoop.h | 164 - source/StkUGens/stk-4.4.4/include/FileRead.h | 141 - source/StkUGens/stk-4.4.4/include/FileWrite.h | 116 - source/StkUGens/stk-4.4.4/include/FileWvIn.h | 196 - source/StkUGens/stk-4.4.4/include/FileWvOut.h | 102 - source/StkUGens/stk-4.4.4/include/Filter.h | 124 - source/StkUGens/stk-4.4.4/include/Fir.h | 155 - source/StkUGens/stk-4.4.4/include/Flute.h | 166 - source/StkUGens/stk-4.4.4/include/FormSwep.h | 190 - source/StkUGens/stk-4.4.4/include/FreeVerb.h | 255 - source/StkUGens/stk-4.4.4/include/Function.h | 41 - source/StkUGens/stk-4.4.4/include/Generator.h | 50 - source/StkUGens/stk-4.4.4/include/Granulate.h | 209 - source/StkUGens/stk-4.4.4/include/Guitar.h | 199 - source/StkUGens/stk-4.4.4/include/HevyMetl.h | 126 - source/StkUGens/stk-4.4.4/include/Iir.h | 202 - source/StkUGens/stk-4.4.4/include/InetWvIn.h | 157 - source/StkUGens/stk-4.4.4/include/InetWvOut.h | 98 - source/StkUGens/stk-4.4.4/include/Instrmnt.h | 102 - source/StkUGens/stk-4.4.4/include/JCRev.h | 166 - source/StkUGens/stk-4.4.4/include/JetTable.h | 112 - .../StkUGens/stk-4.4.4/include/LentPitShift.h | 263 - source/StkUGens/stk-4.4.4/include/Mandolin.h | 143 - source/StkUGens/stk-4.4.4/include/Mesh2D.h | 144 - source/StkUGens/stk-4.4.4/include/Messager.h | 166 - .../StkUGens/stk-4.4.4/include/MidiFileIn.h | 135 - source/StkUGens/stk-4.4.4/include/Modal.h | 154 - source/StkUGens/stk-4.4.4/include/ModalBar.h | 65 - source/StkUGens/stk-4.4.4/include/Modulate.h | 108 - source/StkUGens/stk-4.4.4/include/Moog.h | 125 - source/StkUGens/stk-4.4.4/include/Mutex.h | 74 - source/StkUGens/stk-4.4.4/include/NRev.h | 160 - source/StkUGens/stk-4.4.4/include/Noise.h | 84 - source/StkUGens/stk-4.4.4/include/OnePole.h | 134 - source/StkUGens/stk-4.4.4/include/OneZero.h | 134 - source/StkUGens/stk-4.4.4/include/PRCRev.h | 140 - source/StkUGens/stk-4.4.4/include/PercFlut.h | 127 - source/StkUGens/stk-4.4.4/include/Phonemes.h | 55 - source/StkUGens/stk-4.4.4/include/PitShift.h | 107 - source/StkUGens/stk-4.4.4/include/Plucked.h | 117 - source/StkUGens/stk-4.4.4/include/PoleZero.h | 113 - source/StkUGens/stk-4.4.4/include/ReedTable.h | 143 - source/StkUGens/stk-4.4.4/include/Resonate.h | 127 - source/StkUGens/stk-4.4.4/include/Rhodey.h | 128 - source/StkUGens/stk-4.4.4/include/RtAudio.h | 1014 -- source/StkUGens/stk-4.4.4/include/RtError.h | 60 - source/StkUGens/stk-4.4.4/include/RtMidi.h | 675 -- source/StkUGens/stk-4.4.4/include/RtWvIn.h | 125 - source/StkUGens/stk-4.4.4/include/RtWvOut.h | 96 - source/StkUGens/stk-4.4.4/include/SKINI.msg | 129 - source/StkUGens/stk-4.4.4/include/SKINI.tbl | 135 - source/StkUGens/stk-4.4.4/include/Sampler.h | 78 - source/StkUGens/stk-4.4.4/include/Saxofony.h | 166 - source/StkUGens/stk-4.4.4/include/Shakers.h | 332 - source/StkUGens/stk-4.4.4/include/Simple.h | 129 - source/StkUGens/stk-4.4.4/include/SineWave.h | 159 - source/StkUGens/stk-4.4.4/include/SingWave.h | 136 - source/StkUGens/stk-4.4.4/include/Sitar.h | 129 - source/StkUGens/stk-4.4.4/include/Skini.h | 122 - source/StkUGens/stk-4.4.4/include/Socket.h | 89 - source/StkUGens/stk-4.4.4/include/Sphere.h | 79 - source/StkUGens/stk-4.4.4/include/StifKarp.h | 154 - source/StkUGens/stk-4.4.4/include/Stk.h | 545 -- source/StkUGens/stk-4.4.4/include/TapDelay.h | 216 - source/StkUGens/stk-4.4.4/include/TcpClient.h | 65 - source/StkUGens/stk-4.4.4/include/TcpServer.h | 65 - source/StkUGens/stk-4.4.4/include/Thread.h | 98 - source/StkUGens/stk-4.4.4/include/TubeBell.h | 125 - source/StkUGens/stk-4.4.4/include/Twang.h | 160 - source/StkUGens/stk-4.4.4/include/TwoPole.h | 153 - source/StkUGens/stk-4.4.4/include/TwoZero.h | 149 - source/StkUGens/stk-4.4.4/include/UdpSocket.h | 76 - source/StkUGens/stk-4.4.4/include/Vector3D.h | 68 - source/StkUGens/stk-4.4.4/include/VoicForm.h | 161 - source/StkUGens/stk-4.4.4/include/Voicer.h | 219 - source/StkUGens/stk-4.4.4/include/Whistle.h | 128 - source/StkUGens/stk-4.4.4/include/Wurley.h | 128 - source/StkUGens/stk-4.4.4/include/WvIn.h | 46 - source/StkUGens/stk-4.4.4/include/WvOut.h | 85 - source/StkUGens/stk-4.4.4/rawwaves/ahh.raw | Bin 184 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/bassdrum.raw | Bin 4288 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/britestk.raw | Bin 4096 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/cowbell1.raw | Bin 6438 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/crashcym.raw | Bin 40776 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/dope.raw | Bin 20480 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/eee.raw | Bin 184 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/fwavblnk.raw | Bin 512 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/halfwave.raw | Bin 512 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/hihatcym.raw | Bin 4976 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/impuls10.raw | Bin 512 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/impuls20.raw | Bin 512 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/impuls40.raw | Bin 512 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/makefunc.c | 55 - source/StkUGens/stk-4.4.4/rawwaves/makemidi.c | 33 - source/StkUGens/stk-4.4.4/rawwaves/makewavs.c | 116 - source/StkUGens/stk-4.4.4/rawwaves/mand1.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand10.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand11.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand12.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand2.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand3.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand4.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand5.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand6.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand7.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand8.raw | Bin 2048 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/mand9.raw | Bin 2048 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/mandpluk.raw | Bin 8900 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/marmstk1.raw | Bin 512 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/ooo.raw | Bin 184 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/peksblnk.raw | Bin 512 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/ppksblnk.raw | Bin 512 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/ridecymb.raw | Bin 32394 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/silence.raw | Bin 448 -> 0 bytes source/StkUGens/stk-4.4.4/rawwaves/sine.c | 22 - .../StkUGens/stk-4.4.4/rawwaves/sineblnk.raw | Bin 512 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/sinewave.raw | Bin 2048 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/snardrum.raw | Bin 16660 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/snglpeak.raw | Bin 512 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/tambourn.raw | Bin 9240 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/tomhidrm.raw | Bin 27642 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/tomlowdr.raw | Bin 39200 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/tommiddr.raw | Bin 28292 -> 0 bytes .../StkUGens/stk-4.4.4/rawwaves/twopeaks.raw | Bin 512 -> 0 bytes source/StkUGens/stk-4.4.4/src/ADSR.cpp | 180 - source/StkUGens/stk-4.4.4/src/Asymp.cpp | 111 - source/StkUGens/stk-4.4.4/src/BandedWG.cpp | 364 - source/StkUGens/stk-4.4.4/src/BeeThree.cpp | 79 - source/StkUGens/stk-4.4.4/src/BiQuad.cpp | 103 - source/StkUGens/stk-4.4.4/src/Blit.cpp | 78 - source/StkUGens/stk-4.4.4/src/BlitSaw.cpp | 91 - source/StkUGens/stk-4.4.4/src/BlitSquare.cpp | 95 - source/StkUGens/stk-4.4.4/src/BlowBotl.cpp | 122 - source/StkUGens/stk-4.4.4/src/BlowHole.cpp | 224 - source/StkUGens/stk-4.4.4/src/Bowed.cpp | 180 - source/StkUGens/stk-4.4.4/src/Brass.cpp | 158 - source/StkUGens/stk-4.4.4/src/Chorus.cpp | 56 - source/StkUGens/stk-4.4.4/src/Clarinet.cpp | 138 - source/StkUGens/stk-4.4.4/src/Delay.cpp | 110 - source/StkUGens/stk-4.4.4/src/DelayA.cpp | 117 - source/StkUGens/stk-4.4.4/src/DelayL.cpp | 97 - source/StkUGens/stk-4.4.4/src/Drummer.cpp | 141 - source/StkUGens/stk-4.4.4/src/Echo.cpp | 51 - source/StkUGens/stk-4.4.4/src/Envelope.cpp | 84 - source/StkUGens/stk-4.4.4/src/FM.cpp | 179 - source/StkUGens/stk-4.4.4/src/FMVoices.cpp | 163 - source/StkUGens/stk-4.4.4/src/FileLoop.cpp | 224 - source/StkUGens/stk-4.4.4/src/FileRead.cpp | 886 -- source/StkUGens/stk-4.4.4/src/FileWrite.cpp | 795 -- source/StkUGens/stk-4.4.4/src/FileWvIn.cpp | 253 - source/StkUGens/stk-4.4.4/src/FileWvOut.cpp | 140 - source/StkUGens/stk-4.4.4/src/Fir.cpp | 74 - source/StkUGens/stk-4.4.4/src/Flute.cpp | 163 - source/StkUGens/stk-4.4.4/src/FormSwep.cpp | 136 - source/StkUGens/stk-4.4.4/src/FreeVerb.cpp | 227 - source/StkUGens/stk-4.4.4/src/Granulate.cpp | 296 - source/StkUGens/stk-4.4.4/src/Guitar.cpp | 244 - source/StkUGens/stk-4.4.4/src/HevyMetl.cpp | 75 - source/StkUGens/stk-4.4.4/src/Iir.cpp | 125 - source/StkUGens/stk-4.4.4/src/InetWvIn.cpp | 319 - source/StkUGens/stk-4.4.4/src/InetWvOut.cpp | 231 - source/StkUGens/stk-4.4.4/src/JCRev.cpp | 136 - .../StkUGens/stk-4.4.4/src/LentPitShift.cpp | 52 - source/StkUGens/stk-4.4.4/src/Makefile.in | 89 - source/StkUGens/stk-4.4.4/src/Mandolin.cpp | 186 - source/StkUGens/stk-4.4.4/src/Mesh2D.cpp | 367 - source/StkUGens/stk-4.4.4/src/Messager.cpp | 434 - source/StkUGens/stk-4.4.4/src/MidiFileIn.cpp | 352 - source/StkUGens/stk-4.4.4/src/Modal.cpp | 169 - source/StkUGens/stk-4.4.4/src/ModalBar.cpp | 182 - source/StkUGens/stk-4.4.4/src/Modulate.cpp | 49 - source/StkUGens/stk-4.4.4/src/Moog.cpp | 111 - source/StkUGens/stk-4.4.4/src/Mutex.cpp | 104 - source/StkUGens/stk-4.4.4/src/NRev.cpp | 119 - source/StkUGens/stk-4.4.4/src/Noise.cpp | 34 - source/StkUGens/stk-4.4.4/src/OnePole.cpp | 61 - source/StkUGens/stk-4.4.4/src/OneZero.cpp | 49 - source/StkUGens/stk-4.4.4/src/PRCRev.cpp | 120 - source/StkUGens/stk-4.4.4/src/PercFlut.cpp | 85 - source/StkUGens/stk-4.4.4/src/Phonemes.cpp | 292 - source/StkUGens/stk-4.4.4/src/PitShift.cpp | 88 - source/StkUGens/stk-4.4.4/src/Plucked.cpp | 98 - source/StkUGens/stk-4.4.4/src/PoleZero.cpp | 73 - source/StkUGens/stk-4.4.4/src/Resonate.cpp | 113 - source/StkUGens/stk-4.4.4/src/Rhodey.cpp | 92 - source/StkUGens/stk-4.4.4/src/RtAudio.cpp | 8350 ----------------- source/StkUGens/stk-4.4.4/src/RtMidi.cpp | 3747 -------- source/StkUGens/stk-4.4.4/src/RtWvIn.cpp | 194 - source/StkUGens/stk-4.4.4/src/RtWvOut.cpp | 213 - source/StkUGens/stk-4.4.4/src/Sampler.cpp | 53 - source/StkUGens/stk-4.4.4/src/Saxofony.cpp | 177 - source/StkUGens/stk-4.4.4/src/Shakers.cpp | 729 -- source/StkUGens/stk-4.4.4/src/Simple.cpp | 105 - source/StkUGens/stk-4.4.4/src/SineWave.cpp | 78 - source/StkUGens/stk-4.4.4/src/SingWave.cpp | 53 - source/StkUGens/stk-4.4.4/src/Sitar.cpp | 92 - source/StkUGens/stk-4.4.4/src/Skini.cpp | 223 - source/StkUGens/stk-4.4.4/src/Socket.cpp | 78 - source/StkUGens/stk-4.4.4/src/Sphere.cpp | 50 - source/StkUGens/stk-4.4.4/src/StifKarp.cpp | 181 - source/StkUGens/stk-4.4.4/src/Stk.cpp | 340 - source/StkUGens/stk-4.4.4/src/TapDelay.cpp | 92 - source/StkUGens/stk-4.4.4/src/TcpClient.cpp | 105 - source/StkUGens/stk-4.4.4/src/TcpServer.cpp | 99 - source/StkUGens/stk-4.4.4/src/Thread.cpp | 106 - source/StkUGens/stk-4.4.4/src/TubeBell.cpp | 78 - source/StkUGens/stk-4.4.4/src/Twang.cpp | 102 - source/StkUGens/stk-4.4.4/src/TwoPole.cpp | 76 - source/StkUGens/stk-4.4.4/src/TwoZero.cpp | 74 - source/StkUGens/stk-4.4.4/src/UdpSocket.cpp | 110 - source/StkUGens/stk-4.4.4/src/VoicForm.cpp | 189 - source/StkUGens/stk-4.4.4/src/Voicer.cpp | 224 - source/StkUGens/stk-4.4.4/src/Whistle.cpp | 256 - source/StkUGens/stk-4.4.4/src/Wurley.cpp | 94 - .../StkUGens/stk-4.4.4/src/include/asio.cpp | 257 - source/StkUGens/stk-4.4.4/src/include/asio.h | 1054 --- .../stk-4.4.4/src/include/asiodrivers.cpp | 186 - .../stk-4.4.4/src/include/asiodrivers.h | 41 - .../StkUGens/stk-4.4.4/src/include/asiodrvr.h | 76 - .../stk-4.4.4/src/include/asiolist.cpp | 268 - .../StkUGens/stk-4.4.4/src/include/asiolist.h | 46 - .../StkUGens/stk-4.4.4/src/include/asiosys.h | 82 - .../StkUGens/stk-4.4.4/src/include/dsound.h | 2369 ----- .../StkUGens/stk-4.4.4/src/include/ginclude.h | 38 - .../StkUGens/stk-4.4.4/src/include/iasiodrv.h | 37 - .../src/include/iasiothiscallresolver.cpp | 572 -- .../src/include/iasiothiscallresolver.h | 202 - .../stk-4.4.4/src/include/soundcard.h | 1878 ---- 830 files changed, 121224 deletions(-) delete mode 160000 source/StkInst/stk delete mode 100644 source/StkUGens/stk-4.4.4/INSTALL delete mode 100644 source/StkUGens/stk-4.4.4/Makefile.in delete mode 100644 source/StkUGens/stk-4.4.4/README delete mode 100755 source/StkUGens/stk-4.4.4/bin/treesed delete mode 100755 source/StkUGens/stk-4.4.4/config/config.guess delete mode 100644 source/StkUGens/stk-4.4.4/config/config.sub delete mode 100644 source/StkUGens/stk-4.4.4/config/install.sh delete mode 100755 source/StkUGens/stk-4.4.4/configure delete mode 100644 source/StkUGens/stk-4.4.4/configure.ac delete mode 100644 source/StkUGens/stk-4.4.4/doc/README-Linux.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/README-MacOSX.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/README-SGI.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/README-Win.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/ReleaseNotes.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/SKINI.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/Doxyfile delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/classes.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/compile.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/control.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/crealtime.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/download.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/faq.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/filtering.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/footer.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/fundamentals.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/header.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/header.tex delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/hello.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/images/ccrma.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/images/princeton.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/index.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/information.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/instruments.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/links.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/maillist.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/multichannel.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/polyvoices.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/realtime.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/skini.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/system.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/tutorial.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/doxygen/usage.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/hierarchy.txt delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/ADSR_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Asymp_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/BandedWG_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/BeeThree_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/BiQuad_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/BlitSaw_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/BlitSquare_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Blit_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/BlowBotl_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/BlowHole_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/BowTable_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Bowed_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Brass_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Chorus_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Clarinet_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Cubic_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/DelayA_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/DelayL_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Delay_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Drummer_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Echo_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Effect_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Envelope_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/FMVoices_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/FM_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/FileLoop_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/FileRead_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/FileWrite_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/FileWvIn_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/FileWvOut_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Filter_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Fir_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Flute_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/FormSwep_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/FreeVerb_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Function_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Generator_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Granulate_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Guitar_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/HevyMetl_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Iir_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/InetWvIn_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/InetWvOut_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Instrmnt_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/JCRev_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/JetTable_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/LentPitShift_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Mandolin_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Mesh2D_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Messager_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/MidiFileIn_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/ModalBar_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Modal_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Modulate_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Moog_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Mutex_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/NRev_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Noise_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/OnePole_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/OneZero_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/PRCRev_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/PercFlut_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Phonemes_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/PitShift_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Plucked_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/PoleZero_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/ReedTable_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Resonate_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Rhodey_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/RtAudio_8h.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/RtAudio_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/RtError_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/RtMidi_8h.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/RtMidi_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/RtWvIn_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/RtWvOut_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Sampler_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Saxofony_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Shakers_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Simple_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/SineWave_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/SingWave_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Sitar_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Skini_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Socket_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Sphere_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/StifKarp_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Stk_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/TapDelay_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/TcpClient_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/TcpServer_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Thread_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/TubeBell_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Twang_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/TwoPole_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/TwoZero_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/UdpSocket_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Vector3D_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/VoicForm_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Voicer_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Whistle_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/Wurley_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/WvIn_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/WvOut_8h_source.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/_formulas.tex delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/annotated.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/ccrma.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtAudio-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtAudio.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtError-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtError.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidi-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidi.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidi.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidi.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classes.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Asymp-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Asymp.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Asymp.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BandedWG-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BandedWG.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BandedWG.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BiQuad-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BiQuad.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BiQuad.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSaw-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSaw.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSaw.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSquare-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSquare.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSquare.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowBotl-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowBotl.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowBotl.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Chorus-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Chorus.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Chorus.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Drummer-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Drummer.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Drummer.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FMVoices-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FMVoices.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FMVoices.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvOut-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvOut.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvOut.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Filter-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Filter.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Filter.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Fir-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Fir.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Fir.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JCRev-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JCRev.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JCRev.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mandolin-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mandolin.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mandolin.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1MidiFileIn-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1MidiFileIn.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1MidiFileIn.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ModalBar-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ModalBar.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ModalBar.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Moog-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Moog.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Moog.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mutex-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mutex.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mutex.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Noise-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Noise.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Noise.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PRCRev-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PRCRev.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PRCRev.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PercFlut-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PercFlut.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PercFlut.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Resonate-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Resonate.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Resonate.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvIn-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvIn.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvIn.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Simple-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Simple.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Simple.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SineWave-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SineWave.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SineWave.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SingWave-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SingWave.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SingWave.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sitar-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sitar.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sitar.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sphere-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sphere.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sphere.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkError-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkError.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkFrames-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkFrames.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Thread-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Thread.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Thread.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1UdpSocket-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1UdpSocket.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1UdpSocket.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1VoicForm-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1VoicForm.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1VoicForm.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Whistle-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Whistle.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Whistle.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Wurley-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Wurley.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Wurley.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvOut-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvOut.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvOut.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/closed.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/compile.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/controlin.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/crealtime.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/dir_221deb9bdff892d63ed1e409450a60d2.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/dir_f14fd23bc74c76f288031ad23b3f3505.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/dirs.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/download.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/doxygen.css delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/doxygen.png delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/faq.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/files.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/filtering.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x62.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x63.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x64.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x65.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x66.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x67.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x68.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x69.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x6a.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x6b.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x6c.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x6d.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x6e.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x6f.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x70.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x71.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x72.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x73.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x74.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x75.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x76.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x77.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_0x7e.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_enum.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_eval.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x62.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x63.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x64.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x65.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x66.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x67.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x68.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x69.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6a.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6b.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6c.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6d.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6e.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6f.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x70.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x71.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x72.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x73.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x74.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x75.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x76.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x77.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_func_0x7e.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_type.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/functions_vars.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/fundamentals.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/globals.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/globals_type.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/graph_legend.dot delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/hello.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/hierarchy.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/index.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/information.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/instruments.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/links.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/maillist.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/mcgill.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/multichannel.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/namespaces.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/namespacestk.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/open.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/pages.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/papers/STKsiggraph96.pdf delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/papers/stkicmc99.pdf delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/papers/stkupdate.pdf delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/polyvoices.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/princeton.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/realtime.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/skini.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1DeviceInfo-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1DeviceInfo.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamOptions-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamOptions.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamParameters-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamParameters.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/structstk_1_1Skini_1_1Message-members.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/structstk_1_1Skini_1_1Message.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/system.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/tab_b.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/tab_l.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/tab_r.gif delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/tabs.css delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/tutorial.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/tutorial/bachfugue.ski delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/tutorial/bookert.ski delete mode 100644 source/StkUGens/stk-4.4.4/doc/html/usage.html delete mode 100644 source/StkUGens/stk-4.4.4/doc/treesed.html delete mode 100644 source/StkUGens/stk-4.4.4/include/ADSR.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Asymp.h delete mode 100644 source/StkUGens/stk-4.4.4/include/BandedWG.h delete mode 100644 source/StkUGens/stk-4.4.4/include/BeeThree.h delete mode 100644 source/StkUGens/stk-4.4.4/include/BiQuad.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Blit.h delete mode 100644 source/StkUGens/stk-4.4.4/include/BlitSaw.h delete mode 100644 source/StkUGens/stk-4.4.4/include/BlitSquare.h delete mode 100644 source/StkUGens/stk-4.4.4/include/BlowBotl.h delete mode 100644 source/StkUGens/stk-4.4.4/include/BlowHole.h delete mode 100644 source/StkUGens/stk-4.4.4/include/BowTable.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Bowed.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Brass.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Chorus.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Clarinet.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Cubic.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Delay.h delete mode 100644 source/StkUGens/stk-4.4.4/include/DelayA.h delete mode 100644 source/StkUGens/stk-4.4.4/include/DelayL.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Drummer.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Echo.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Effect.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Envelope.h delete mode 100644 source/StkUGens/stk-4.4.4/include/FM.h delete mode 100644 source/StkUGens/stk-4.4.4/include/FMVoices.h delete mode 100644 source/StkUGens/stk-4.4.4/include/FileLoop.h delete mode 100644 source/StkUGens/stk-4.4.4/include/FileRead.h delete mode 100644 source/StkUGens/stk-4.4.4/include/FileWrite.h delete mode 100644 source/StkUGens/stk-4.4.4/include/FileWvIn.h delete mode 100644 source/StkUGens/stk-4.4.4/include/FileWvOut.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Filter.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Fir.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Flute.h delete mode 100644 source/StkUGens/stk-4.4.4/include/FormSwep.h delete mode 100644 source/StkUGens/stk-4.4.4/include/FreeVerb.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Function.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Generator.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Granulate.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Guitar.h delete mode 100644 source/StkUGens/stk-4.4.4/include/HevyMetl.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Iir.h delete mode 100644 source/StkUGens/stk-4.4.4/include/InetWvIn.h delete mode 100644 source/StkUGens/stk-4.4.4/include/InetWvOut.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Instrmnt.h delete mode 100644 source/StkUGens/stk-4.4.4/include/JCRev.h delete mode 100644 source/StkUGens/stk-4.4.4/include/JetTable.h delete mode 100644 source/StkUGens/stk-4.4.4/include/LentPitShift.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Mandolin.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Mesh2D.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Messager.h delete mode 100644 source/StkUGens/stk-4.4.4/include/MidiFileIn.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Modal.h delete mode 100644 source/StkUGens/stk-4.4.4/include/ModalBar.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Modulate.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Moog.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Mutex.h delete mode 100644 source/StkUGens/stk-4.4.4/include/NRev.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Noise.h delete mode 100644 source/StkUGens/stk-4.4.4/include/OnePole.h delete mode 100644 source/StkUGens/stk-4.4.4/include/OneZero.h delete mode 100644 source/StkUGens/stk-4.4.4/include/PRCRev.h delete mode 100644 source/StkUGens/stk-4.4.4/include/PercFlut.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Phonemes.h delete mode 100644 source/StkUGens/stk-4.4.4/include/PitShift.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Plucked.h delete mode 100644 source/StkUGens/stk-4.4.4/include/PoleZero.h delete mode 100644 source/StkUGens/stk-4.4.4/include/ReedTable.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Resonate.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Rhodey.h delete mode 100644 source/StkUGens/stk-4.4.4/include/RtAudio.h delete mode 100644 source/StkUGens/stk-4.4.4/include/RtError.h delete mode 100644 source/StkUGens/stk-4.4.4/include/RtMidi.h delete mode 100644 source/StkUGens/stk-4.4.4/include/RtWvIn.h delete mode 100644 source/StkUGens/stk-4.4.4/include/RtWvOut.h delete mode 100644 source/StkUGens/stk-4.4.4/include/SKINI.msg delete mode 100644 source/StkUGens/stk-4.4.4/include/SKINI.tbl delete mode 100644 source/StkUGens/stk-4.4.4/include/Sampler.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Saxofony.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Shakers.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Simple.h delete mode 100644 source/StkUGens/stk-4.4.4/include/SineWave.h delete mode 100644 source/StkUGens/stk-4.4.4/include/SingWave.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Sitar.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Skini.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Socket.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Sphere.h delete mode 100644 source/StkUGens/stk-4.4.4/include/StifKarp.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Stk.h delete mode 100644 source/StkUGens/stk-4.4.4/include/TapDelay.h delete mode 100644 source/StkUGens/stk-4.4.4/include/TcpClient.h delete mode 100644 source/StkUGens/stk-4.4.4/include/TcpServer.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Thread.h delete mode 100644 source/StkUGens/stk-4.4.4/include/TubeBell.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Twang.h delete mode 100644 source/StkUGens/stk-4.4.4/include/TwoPole.h delete mode 100644 source/StkUGens/stk-4.4.4/include/TwoZero.h delete mode 100644 source/StkUGens/stk-4.4.4/include/UdpSocket.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Vector3D.h delete mode 100644 source/StkUGens/stk-4.4.4/include/VoicForm.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Voicer.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Whistle.h delete mode 100644 source/StkUGens/stk-4.4.4/include/Wurley.h delete mode 100644 source/StkUGens/stk-4.4.4/include/WvIn.h delete mode 100644 source/StkUGens/stk-4.4.4/include/WvOut.h delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/ahh.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/bassdrum.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/britestk.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/cowbell1.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/crashcym.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/dope.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/eee.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/fwavblnk.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/halfwave.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/hihatcym.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/impuls10.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/impuls20.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/impuls40.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/makefunc.c delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/makemidi.c delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/makewavs.c delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand1.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand10.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand11.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand12.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand2.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand3.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand4.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand5.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand6.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand7.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand8.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mand9.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/mandpluk.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/marmstk1.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/ooo.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/peksblnk.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/ppksblnk.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/ridecymb.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/silence.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/sine.c delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/sineblnk.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/sinewave.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/snardrum.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/snglpeak.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/tambourn.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/tomhidrm.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/tomlowdr.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/tommiddr.raw delete mode 100644 source/StkUGens/stk-4.4.4/rawwaves/twopeaks.raw delete mode 100644 source/StkUGens/stk-4.4.4/src/ADSR.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Asymp.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/BandedWG.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/BeeThree.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/BiQuad.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Blit.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/BlitSaw.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/BlitSquare.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/BlowBotl.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/BlowHole.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Bowed.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Brass.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Chorus.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Clarinet.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Delay.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/DelayA.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/DelayL.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Drummer.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Echo.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Envelope.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/FM.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/FMVoices.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/FileLoop.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/FileRead.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/FileWrite.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/FileWvIn.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/FileWvOut.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Fir.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Flute.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/FormSwep.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/FreeVerb.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Granulate.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Guitar.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/HevyMetl.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Iir.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/InetWvIn.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/InetWvOut.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/JCRev.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/LentPitShift.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Makefile.in delete mode 100644 source/StkUGens/stk-4.4.4/src/Mandolin.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Mesh2D.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Messager.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/MidiFileIn.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Modal.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/ModalBar.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Modulate.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Moog.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Mutex.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/NRev.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Noise.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/OnePole.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/OneZero.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/PRCRev.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/PercFlut.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Phonemes.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/PitShift.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Plucked.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/PoleZero.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Resonate.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Rhodey.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/RtAudio.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/RtMidi.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/RtWvIn.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/RtWvOut.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Sampler.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Saxofony.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Shakers.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Simple.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/SineWave.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/SingWave.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Sitar.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Skini.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Socket.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Sphere.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/StifKarp.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Stk.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/TapDelay.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/TcpClient.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/TcpServer.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Thread.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/TubeBell.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Twang.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/TwoPole.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/TwoZero.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/UdpSocket.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/VoicForm.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Voicer.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Whistle.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/Wurley.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/include/asio.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/include/asio.h delete mode 100644 source/StkUGens/stk-4.4.4/src/include/asiodrivers.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/include/asiodrivers.h delete mode 100644 source/StkUGens/stk-4.4.4/src/include/asiodrvr.h delete mode 100644 source/StkUGens/stk-4.4.4/src/include/asiolist.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/include/asiolist.h delete mode 100644 source/StkUGens/stk-4.4.4/src/include/asiosys.h delete mode 100644 source/StkUGens/stk-4.4.4/src/include/dsound.h delete mode 100644 source/StkUGens/stk-4.4.4/src/include/ginclude.h delete mode 100644 source/StkUGens/stk-4.4.4/src/include/iasiodrv.h delete mode 100644 source/StkUGens/stk-4.4.4/src/include/iasiothiscallresolver.cpp delete mode 100644 source/StkUGens/stk-4.4.4/src/include/iasiothiscallresolver.h delete mode 100644 source/StkUGens/stk-4.4.4/src/include/soundcard.h diff --git a/.gitmodules b/.gitmodules index 54926b2e77..ce35806de9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,6 @@ [submodule "libs/nova-simd"] path = libs/nova-simd url = git://github.com/timblechmann/nova-simd.git -[submodule "source/StkInst/stk"] - path = source/StkInst/stk - url = https://github.com/thestk/stk.git [submodule "libs/stk"] path = libs/stk url = https://github.com/thestk/stk.git diff --git a/source/StkInst/stk b/source/StkInst/stk deleted file mode 160000 index f3b1f35a8c..0000000000 --- a/source/StkInst/stk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f3b1f35a8c2fe0c4855cad78408434938b0fb83a diff --git a/source/StkUGens/stk-4.4.4/INSTALL b/source/StkUGens/stk-4.4.4/INSTALL deleted file mode 100644 index a50d05a412..0000000000 --- a/source/StkUGens/stk-4.4.4/INSTALL +++ /dev/null @@ -1,42 +0,0 @@ -The Synthesis ToolKit in C++ (STK) - -By Perry R. Cook and Gary P. Scavone, 1995-2012. - -The Synthesis ToolKit in C++ can be used in a variety of ways, depending on your particular needs. Some people simmply choose the classes they need for a particular project and copy those to their project directory. Others like to compile and link to a library of object files. STK was not designed with one particular style of use in mind. - -To configure and compile (on Unix systems and MinGW): - -1. Unpack the STK distribution (tar -xzf stk-4.x.x.tar.gz). -2. From within the directory containing this file, run configure: - - ./configure - -3. From within each project directory, type "make". -4. To compile a library of objects, type "make" from within the src directory. - -Several options can be passed to configure, including: - - --disable-realtime = only compile generic non-realtime classes - --enable-debug = enable various debug output - --with-alsa = choose native ALSA API support (default, linux only) - --with-oss = choose native OSS API support (linux only) - --with-jack = choose native JACK server API support (linux and macintosh OS-X) - --with-core = choose OS-X Core Audio API (macintosh OS-X only) - --with-asio = choose ASIO API support (windows only) - --with-ds = choose DirectSound API support (windows only) - -It is now possible to specify more than one audio and MIDI API where supported. Note, however, that the ALSA library is required in order to compile the RtMidi class in Linux if the "--with-oss" option is provided (only the OSS audio API will be used, not the OSS MIDI API). Typing "./configure --help" will display all the available options. In addition, it is possible to specify the RAWWAVES and INCLUDE paths to configure as (ex. to set to /home/me/rawwaves and /home/me/include): - - ./configure RAWWAVE_PATH='$(HOME)/rawwaves/' - ./configure INCLUDE_PATH='$(HOME)/include/' - -The ending "/" is required for the RAWWAVES path. The default behavior will set a relative path that works for the project files included with the distribution (assuming they are not moved). You can also change the RAWWAVE_PATH dynamically via the static Stk::setRawwavePath() function. - -If you wish to use a different compiler than that selected by configure, specify that compiler in the command line (ex. to use CC): - - ./configure CXX=CC - - -For Windows Users: - -MinGW support is provided in the configure script. In addition, Visual C++ 6.0 project files are included for each of the example STK projects, though these may not work with more recent versions of Visual Studio. diff --git a/source/StkUGens/stk-4.4.4/Makefile.in b/source/StkUGens/stk-4.4.4/Makefile.in deleted file mode 100644 index 2a2380e07f..0000000000 --- a/source/StkUGens/stk-4.4.4/Makefile.in +++ /dev/null @@ -1,30 +0,0 @@ -### Do not edit -- Generated by 'configure --with-whatever' from Makefile.in - -RM = /bin/rm - -all : - cd src && $(MAKE) - cd projects/demo && $(MAKE) libdemo - cd projects/effects && $(MAKE) libeffects - cd projects/ragamatic && $(MAKE) libragamat - cd projects/eguitar && $(MAKE) libeguitar - cd projects/examples && $(MAKE) -f libMakefile - -clean : - $(RM) -f *~ - cd src && $(MAKE) clean - cd projects/demo && $(MAKE) clean - cd projects/effects && $(MAKE) clean - cd projects/ragamatic && $(MAKE) clean - cd projects/eguitar && $(MAKE) clean - cd projects/examples && $(MAKE) clean - -distclean: clean - $(RM) -rf config.log config.status autom4te.cache Makefile - cd src && $(MAKE) distclean - cd projects/demo && $(MAKE) distclean - cd projects/effects && $(MAKE) distclean - cd projects/ragamatic && $(MAKE) distclean - cd projects/eguitar && $(MAKE) distclean - cd projects/examples && $(MAKE) distclean - diff --git a/source/StkUGens/stk-4.4.4/README b/source/StkUGens/stk-4.4.4/README deleted file mode 100644 index 6c5148e3c5..0000000000 --- a/source/StkUGens/stk-4.4.4/README +++ /dev/null @@ -1,217 +0,0 @@ -The Synthesis ToolKit in C++ (STK) - -By Perry R. Cook and Gary P. Scavone, 1995-2012. - -This distribution of the Synthesis ToolKit in C++ (STK) contains the following: - -include: STK class header files -src: STK class source files -rawwaves: STK audio files (1-channel, 16-bit, big-endian) -doc: STK documentation -projects: example STK projects and programs - -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 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 (most classes are platform-independent 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. STK -currently runs with "realtime" support (audio and MIDI) on Linux, -Macintosh OS X, and Windows computer platforms. Generic, non-realtime -support has been tested under NeXTStep, Sun, and other platforms and -should work with any standard C++ compiler. - -The only classes of the Synthesis ToolKit that are platform-dependent -concern sockets, threads, mutexes, and real-time audio and MIDI input -and output. 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). - -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) 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 (and MinGW) 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 (AND NOT SO NEW): - -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" in the /doc directory to see what has changed since -the last release. - -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 that accept StkFrames -arguments. - -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. - -Realtime audio input capabilities were added to STK with release 3.0, -though the behavior of such is very hardware dependent. Under Linux -and Macintosh OS-X, 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 generally higher. Performance with the ASIO audio -API on Windoze provides much better performance. - -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. - -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. - - -DISCLAIMER: - -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. - - -LEGAL AND ETHICAL: - -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, it would be nice if you would -share. If you make compositions with it, put us in the program notes. - -Some of the concepts are covered by various patents, some known to us -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'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. - -LICENSE: - -STK WWW site: http://ccrma.stanford.edu/software/stk/ - -The Synthesis ToolKit in C++ (STK) -Copyright (c) 1995-2012 Perry R. Cook and Gary P. Scavone - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -Any person wishing to distribute modifications to the Software is -asked to send the modifications to the original developer so that they -can be incorporated into the canonical version. This is, however, not -a binding provision of this license. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -FURTHER READING: - -For complete documentation on this ToolKit, the classes, etc., see the -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. - - -PERRY'S NOTES FROM THE ORIGINAL DISTRIBUTION: - -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. - -1) I needed to port many of the things I've done into something which is generic enough to port further to different machines. - -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.) - -3) The classic difficulties most people have in trying to implement physical models are: - - A) They have trouble understanding the papers, and/or in turning the theory into practice. - - B) The Physical Model instruments are a pain to get to oscillate, and coming up with stable and meaningful parameter values is required to get the models to work at all. - - This set of C++ unit generators and instruments might help to diminish the scores of emails I get asking what to do with those block diagrams I put in my papers. - -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 . . . - diff --git a/source/StkUGens/stk-4.4.4/bin/treesed b/source/StkUGens/stk-4.4.4/bin/treesed deleted file mode 100755 index 06ff4ddeaa..0000000000 --- a/source/StkUGens/stk-4.4.4/bin/treesed +++ /dev/null @@ -1,189 +0,0 @@ -#!/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 -tree/-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 () { - $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 () { - 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 () { - 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 - diff --git a/source/StkUGens/stk-4.4.4/config/config.guess b/source/StkUGens/stk-4.4.4/config/config.guess deleted file mode 100755 index 313be34be5..0000000000 --- a/source/StkUGens/stk-4.4.4/config/config.guess +++ /dev/null @@ -1,1371 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. - -timestamp='2004-02-26' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Written by Per Bothner . -# Please send patches to . -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - - -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int dummy(){}" > $dummy.c - for c in cc gcc c89 ; do - ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 - if test $? = 0 ; then - CC_FOR_BUILD="$c"; break - fi - done - rm -f $dummy.c $dummy.o $dummy.rel - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 8/24/94.) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # Netbsd (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # Determine the machine/vendor (is the vendor relevant). - case "${UNAME_MACHINE}" in - amiga) machine=m68k-unknown ;; - arm32) machine=arm-unknown ;; - atari*) machine=m68k-atari ;; - sun3*) machine=m68k-sun ;; - mac68k) machine=m68k-apple ;; - macppc) machine=powerpc-apple ;; - hp3[0-9][05]) machine=m68k-hp ;; - ibmrt|romp-ibm) machine=romp-ibm ;; - *) machine=${UNAME_MACHINE}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE}" in - i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit 0 ;; - alpha:OSF1:*:*) - if test $UNAME_RELEASE = "V4.0"; then - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - fi - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - cat <$dummy.s - .data -\$Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - - .text - .globl main - .align 4 - .ent main -main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) - UNAME_MACHINE="alpha" - ;; - 1-0) - UNAME_MACHINE="alphaev5" - ;; - 1-1) - UNAME_MACHINE="alphaev56" - ;; - 1-101) - UNAME_MACHINE="alphapca56" - ;; - 2-303) - UNAME_MACHINE="alphaev6" - ;; - 2-307) - UNAME_MACHINE="alphaev67" - ;; - esac - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit 0 ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit 0;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; - arc64:OpenBSD:*:*) - echo mips64el-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - arc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hkmips:OpenBSD:*:*) - echo mips-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - pmax:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mips-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - wgrisc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit 0;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit 0 ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit 0 ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit 0 ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - atari*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; - sun3*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit 0 ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy \ - && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit 0 ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit 0 ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit 0 ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit 0 ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit 0 ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit 0 ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit 0 ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit 0 ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit 0 ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo rs6000-ibm-aix3.2.5 - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit 0 ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit 0 ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit 0 ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit 0 ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit 0 ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit 0 ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - case "${HPUX_REV}" in - 11.[0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - esac ;; - esac - fi ;; - esac - if [ "${HP_ARCH}" = "" ]; then - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` - if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi - rm -f $dummy.c $dummy - fi ;; - esac - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit 0 ;; - 3050*:HI-UX:*:*) - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo unknown-hitachi-hiuxwe2 - exit 0 ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit 0 ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit 0 ;; - *9??*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit 0 ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit 0 ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit 0 ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit 0 ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit 0 ;; - hppa*:OpenBSD:*:*) - echo hppa-unknown-openbsd - exit 0 ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit 0 ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit 0 ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit 0 ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit 0 ;; - CRAY*X-MP:*:*:*) - echo xmp-cray-unicos - exit 0 ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} - exit 0 ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ - exit 0 ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3D:*:*:*) - echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY-2:*:*:*) - echo cray2-cray-unicos - exit 0 ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit 0 ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit 0 ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit 0 ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i386-pc-interix - exit 0 ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit 0 ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - *:GNU:*:*) - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit 0 ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux - exit 0 ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - mips:Linux:*:*) - cat >$dummy.c < /* for printf() prototype */ -int main (int argc, char *argv[]) { -#else -int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __MIPSEB__ - printf ("%s-unknown-linux-gnu\n", argv[1]); -#endif -#ifdef __MIPSEL__ - printf ("%sel-unknown-linux-gnu\n", argv[1]); -#endif - return 0; -} -EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - ;; - ppc:Linux:*:*) - # Determine Lib Version - cat >$dummy.c < -#if defined(__GLIBC__) -extern char __libc_version[]; -extern char __libc_release[]; -#endif -main(argc, argv) - int argc; - char *argv[]; -{ -#if defined(__GLIBC__) - printf("%s %s\n", __libc_version, __libc_release); -#else - printf("unknown\n"); -#endif - return 0; -} -EOF - LIBC="" - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null - if test "$?" = 0 ; then - ./$dummy | grep 1\.99 > /dev/null - if test "$?" = 0 ; then LIBC="libc1" ; fi - fi - rm -f $dummy.c $dummy - echo powerpc-unknown-linux-gnu${LIBC} - exit 0 ;; - alpha:Linux:*:*) - cat <$dummy.s - .data - \$Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - .text - .globl main - .align 4 - .ent main - main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - LIBC="" - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) UNAME_MACHINE="alpha" ;; - 1-0) UNAME_MACHINE="alphaev5" ;; - 1-1) UNAME_MACHINE="alphaev56" ;; - 1-101) UNAME_MACHINE="alphapca56" ;; - 2-303) UNAME_MACHINE="alphaev6" ;; - 2-307) UNAME_MACHINE="alphaev67" ;; - esac - objdump --private-headers $dummy | \ - grep ld.so.1 > /dev/null - if test "$?" = 0 ; then - LIBC="libc1" - fi - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit 0 ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit 0 ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit 0 ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit 0 ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit 0 ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - ld_supported_emulations=`cd /; ld --help 2>&1 \ - | sed -ne '/supported emulations:/!d - s/[ ][ ]*/ /g - s/.*supported emulations: *// - s/ .*// - p'` - case "$ld_supported_emulations" in - i*86linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit 0 - ;; - elf_i*86) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - i*86coff) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 - ;; - esac - # Either a pre-BFD a.out linker (linux-gnuoldld) - # or one that does not give us useful --help. - # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. - # If ld does not provide *any* "supported emulations:" - # that means it is gnuoldld. - test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 - case "${UNAME_MACHINE}" in - i*86) - VENDOR=pc; - ;; - *) - VENDOR=unknown; - ;; - esac - # Determine whether the default compiler is a.out or elf - cat >$dummy.c < -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __ELF__ -# ifdef __GLIBC__ -# if __GLIBC__ >= 2 - printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); -# else - printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); -# endif -# else - printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); -# endif -#else - printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); -#endif - return 0; -} -EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 - ;; -# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions -# are messed up and put the nodename in both sysname and nodename. - i*86:DYNIX/ptx:4*:*) - echo i386-sequent-sysv4 - exit 0 ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit 0 ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit 0 ;; - i*86:*:5:7*) - # Fixed at (any) Pentium or better - UNAME_MACHINE=i586 - if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then - echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} - fi - exit 0 ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit 0 ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit 0 ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit 0 ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit 0 ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit 0 ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit 0 ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit 0 ;; - M68*:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3${OS_REL} && exit 0 - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit 0 ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit 0 ;; - PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit 0 ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit 0 ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit 0 ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit 0 ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit 0 ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit 0 ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit 0 ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit 0 ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit 0 ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit 0 ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Darwin:*:*) - echo `uname -p`-apple-darwin${UNAME_RELEASE} - exit 0 ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - if test "${UNAME_MACHINE}" = "x86pc"; then - UNAME_MACHINE=pc - fi - echo `uname -p`-${UNAME_MACHINE}-nto-qnx - exit 0 ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit 0 ;; - NSR-[KW]:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit 0 ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit 0 ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit 0 ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit 0 ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit 0 ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit 0 ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit 0 ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit 0 ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit 0 ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit 0 ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 -rm -f $dummy.c $dummy - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit 0 ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - c34*) - echo c34-convex-bsd - exit 0 ;; - c38*) - echo c38-convex-bsd - exit 0 ;; - c4*) - echo c4-convex-bsd - exit 0 ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/source/StkUGens/stk-4.4.4/config/config.sub b/source/StkUGens/stk-4.4.4/config/config.sub deleted file mode 100644 index 7d3f49f06d..0000000000 --- a/source/StkUGens/stk-4.4.4/config/config.sub +++ /dev/null @@ -1,1362 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. - -timestamp='2004-02-26' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Please send patches to . -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit 0;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \ - | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \ - | pyramid | mn10200 | mn10300 | tron | a29k \ - | 580 | i960 | h8300 \ - | x86 | ppcbe | mipsbe | mipsle | shbe | shle \ - | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ - | hppa64 \ - | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ - | alphaev6[78] \ - | we32k | ns16k | clipper | i370 | sh | sh[34] \ - | powerpc | powerpcle \ - | 1750a | dsp16xx | pdp10 | pdp11 \ - | mips16 | mips64 | mipsel | mips64el \ - | mips64orion | mips64orionel | mipstx39 | mipstx39el \ - | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ - | mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \ - | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \ - | v850 | c4x \ - | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \ - | pj | pjl | h8500) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65) - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - # FIXME: clean up the formatting here. - vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ - | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \ - | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ - | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ - | xmp-* | ymp-* \ - | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \ - | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ - | hppa2.0n-* | hppa64-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ - | alphaev6[78]-* \ - | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ - | clipper-* | orion-* \ - | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ - | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \ - | mips16-* | mips64-* | mipsel-* \ - | mips64el-* | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ - | mipstx39-* | mipstx39el-* | mcore-* \ - | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \ - | [cjt]90-* \ - | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ - | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \ - | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | ymp) - basic_machine=ymp-cray - os=-unicos - ;; - cray2) - basic_machine=cray2-cray - os=-unicos - ;; - [cjt]90) - basic_machine=${basic_machine}-cray - os=-unicos - ;; - crds | unos) - basic_machine=m68k-crds - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mipsel*-linux*) - basic_machine=mipsel-unknown - os=-linux-gnu - ;; - mips*-linux*) - basic_machine=mips-unknown - os=-linux-gnu - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - mmix*) - basic_machine=mmix-knuth - os=-mmixware - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pentium | p5 | k5 | k6 | nexgen) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon) - basic_machine=i686-pc - ;; - pentiumii | pentium2) - basic_machine=i686-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sparclite-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=t3e-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xmp) - basic_machine=xmp-cray - os=-unicos - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - mips) - if [ x$os = x-linux-gnu ]; then - basic_machine=mips-unknown - else - basic_machine=mips-mips - fi - ;; - romp) - basic_machine=romp-ibm - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh3 | sh4) - basic_machine=sh-unknown - ;; - sparc | sparcv9 | sparcv9b) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - c4x*) - basic_machine=c4x-none - os=-coff - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto*) - os=-nto-qnx - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-ibm) - os=-aix - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -vxsim* | -vxworks*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/source/StkUGens/stk-4.4.4/config/install.sh b/source/StkUGens/stk-4.4.4/config/install.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/source/StkUGens/stk-4.4.4/configure b/source/StkUGens/stk-4.4.4/configure deleted file mode 100755 index 98b82ea378..0000000000 --- a/source/StkUGens/stk-4.4.4/configure +++ /dev/null @@ -1,6890 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for STK 4.4. -# -# Report bugs to . -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - -if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes -else - as_have_required=no -fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : -else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - case $as_dir in - /*) - for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" - done;; - esac -done -IFS=$as_save_IFS - - - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - - -fi - -fi - - - -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf@gnu.org about your system, - echo including any error possibly output before this - echo message -} - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Identity of this package. -PACKAGE_NAME='STK' -PACKAGE_TARNAME='stk' -PACKAGE_VERSION='4.4' -PACKAGE_STRING='STK 4.4' -PACKAGE_BUGREPORT='gary@music.mcgill.ca' - -ac_unique_file="src/Stk.cpp" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -GXX -CXX -CXXFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CXX -EXEEXT -OBJEXT -RANLIB -AR -CC -CFLAGS -ac_ct_CC -CPP -GREP -EGREP -byte_order -rawwaves -include -sound_api -realtime -cppflag -cxxflag -object_path -debug -build -build_cpu -build_vendor -build_os -host -host_cpu -host_vendor -host_os -sharedlib -sharedname -libflags -api -objects -LIBOBJS -LTLIBOBJS' -ac_subst_files='' - ac_precious_vars='build_alias -host_alias -target_alias -CXX -CXXFLAGS -LDFLAGS -LIBS -CPPFLAGS -CCC -CC -CFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute directory names. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures STK 4.4 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/stk] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of STK 4.4:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-realtime = only compile generic non-realtime classes - --enable-debug = enable various debug output - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-jack = choose JACK server support (mac and linux only) - --with-alsa = choose native ALSA API support (linux only) - --with-oss = choose OSS API support (linux only) - --with-jack = choose JACK server support (unix only) - --with-core = choose CoreAudio API support (mac only) - --with-asio = choose ASIO API support (windoze only) - --with-ds = choose DirectSound API support (windoze only) - -Some influential environment variables: - CXX C++ compiler command - CXXFLAGS C++ compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CC C compiler command - CFLAGS C compiler flags - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -STK configure 4.4 -generated by GNU Autoconf 2.61 - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by STK $as_me 4.4, which was -generated by GNU Autoconf 2.61. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" -elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" -else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" -fi -shift -for ac_site_file -do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - - - - - - - - - - - - - - - - - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_aux_dir= -for ac_dir in config "$srcdir"/config; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&2;} - { (exit 1); exit 1; }; } -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - -ac_config_files="$ac_config_files Makefile src/Makefile projects/demo/Makefile projects/effects/Makefile projects/ragamatic/Makefile projects/examples/Makefile projects/examples/libMakefile projects/eguitar/Makefile" - - -# Fill GXX with something before test. -GXX="no" - - -# Checks for programs. -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ CC c++ cxx - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ CC c++ cxx -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5 -echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6; } -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { (ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi - -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } -if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C++ compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5 -echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C++ compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C++ compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -rm -f a.out a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6; } - -{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CXXFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -# Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_path_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $AR in - [\\/]* | ?:[\\/]*) - ac_cv_path_AR="$AR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - - test -z "$ac_cv_path_AR" && ac_cv_path_AR="no" - ;; -esac -fi -AR=$ac_cv_path_AR -if test -n "$AR"; then - { echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -if [ $AR = "no" ] ; then - { { echo "$as_me:$LINENO: error: \"Could not find ar - needed to create a library\"" >&5 -echo "$as_me: error: \"Could not find ar - needed to create a library\"" >&2;} - { (exit 1); exit 1; }; }; -fi - -# Checks for header files. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; - xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; -esac - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Extract the first word of "grep ggrep" to use in msg output -if test -z "$GREP"; then -set dummy grep ggrep; ac_prog_name=$2 -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_path_GREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue - # Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - - $ac_path_GREP_found && break 3 - done -done - -done -IFS=$as_save_IFS - - -fi - -GREP="$ac_cv_path_GREP" -if test -z "$GREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - -else - ac_cv_path_GREP=$GREP -fi - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -echo "${ECHO_T}$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - # Extract the first word of "egrep" to use in msg output -if test -z "$EGREP"; then -set dummy egrep; ac_prog_name=$2 -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_path_EGREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue - # Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - - $ac_path_EGREP_found && break 3 - done -done - -done -IFS=$as_save_IFS - - -fi - -EGREP="$ac_cv_path_EGREP" -if test -z "$EGREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - -else - ac_cv_path_EGREP=$EGREP -fi - - - fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f -r conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f -r conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - - - - -for ac_header in fcntl.h sys/ioctl.h sys/time.h termio.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ----------------------------------- ## -## Report this to gary@music.mcgill.ca ## -## ----------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# Checks for typedefs, structures, and compiler characteristics. -{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } -if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_c_const=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_const=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 -echo "${ECHO_T}$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -cat >>confdefs.h <<\_ACEOF -#define const -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking for size_t" >&5 -echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } -if test "${ac_cv_type_size_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef size_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_size_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_size_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 -echo "${ECHO_T}$ac_cv_type_size_t" >&6; } -if test $ac_cv_type_size_t = yes; then - : -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 -echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; } -if test "${ac_cv_header_time+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include - -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_time=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_time=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 -echo "${ECHO_T}$ac_cv_header_time" >&6; } -if test $ac_cv_header_time = yes; then - -cat >>confdefs.h <<\_ACEOF -#define TIME_WITH_SYS_TIME 1 -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ - && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) - bogus endian macros -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_c_bigendian=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_bigendian=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } -int -main () -{ - _ascii (); _ebcdic (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then - ac_cv_c_bigendian=yes -fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_bigendian=no -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -case $ac_cv_c_bigendian in - yes) - -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifndef WORDS_BIGENDIAN - yes -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then - byte_order=-D__LITTLE_ENDIAN__ - -fi -rm -f -r conftest* - - -{ echo "$as_me:$LINENO: checking for RAWWAVE_PATH argument" >&5 -echo $ECHO_N "checking for RAWWAVE_PATH argument... $ECHO_C" >&6; } -rawwaves=$RAWWAVE_PATH - -{ echo "$as_me:$LINENO: result: $RAWWAVE_PATH" >&5 -echo "${ECHO_T}$RAWWAVE_PATH" >&6; } - -{ echo "$as_me:$LINENO: checking for INCLUDE_PATH argument" >&5 -echo $ECHO_N "checking for INCLUDE_PATH argument... $ECHO_C" >&6; } -include=$INCLUDE_PATH - -{ echo "$as_me:$LINENO: result: $INCLUDE_PATH" >&5 -echo "${ECHO_T}$INCLUDE_PATH" >&6; } - -# Check for realtime support disable -{ echo "$as_me:$LINENO: checking whether to compile realtime support" >&5 -echo $ECHO_N "checking whether to compile realtime support... $ECHO_C" >&6; } -# Check whether --enable-realtime was given. -if test "${enable_realtime+set}" = set; then - enableval=$enable_realtime; realtime=$enableval -fi - -if test "$realtime" = "no"; then - sound_api= - -else - realtime=yes - -fi -{ echo "$as_me:$LINENO: result: $realtime" >&5 -echo "${ECHO_T}$realtime" >&6; } - -# Check for math library - -{ echo "$as_me:$LINENO: checking for cos in -lm" >&5 -echo $ECHO_N "checking for cos in -lm... $ECHO_C" >&6; } -if test "${ac_cv_lib_m_cos+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char cos (); -int -main () -{ -return cos (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_cos=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_m_cos=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_cos" >&5 -echo "${ECHO_T}$ac_cv_lib_m_cos" >&6; } -if test $ac_cv_lib_m_cos = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBM 1 -_ACEOF - - LIBS="-lm $LIBS" - -else - { { echo "$as_me:$LINENO: error: math library is needed!" >&5 -echo "$as_me: error: math library is needed!" >&2;} - { (exit 1); exit 1; }; } -fi - - -# Check for debug -{ echo "$as_me:$LINENO: checking whether to compile debug version" >&5 -echo $ECHO_N "checking whether to compile debug version... $ECHO_C" >&6; } -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then - enableval=$enable_debug; debug=$enableval -fi - -if test "$debug" = "yes"; then - cppflag="-D_STK_DEBUG_ -D__RTAUDIO_DEBUG__ -D__RTMIDI_DEBUG__" - - cxxflag="-g" - - object_path=Debug - -else - debug=no - - cppflag= - - cxxflag=-O3 - - object_path=Release - -fi -{ echo "$as_me:$LINENO: result: $debug" >&5 -echo "${ECHO_T}$debug" >&6; } - -# Checks for functions -if test $realtime = yes; then - - -for ac_func in select socket -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - { echo "$as_me:$LINENO: checking for gettimeofday" >&5 -echo $ECHO_N "checking for gettimeofday... $ECHO_C" >&6; } -if test "${ac_cv_func_gettimeofday+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define gettimeofday to an innocuous variant, in case declares gettimeofday. - For example, HP-UX 11i declares gettimeofday. */ -#define gettimeofday innocuous_gettimeofday - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char gettimeofday (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef gettimeofday - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gettimeofday (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_gettimeofday || defined __stub___gettimeofday -choke me -#endif - -int -main () -{ -return gettimeofday (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_gettimeofday=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_gettimeofday=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_gettimeofday" >&5 -echo "${ECHO_T}$ac_cv_func_gettimeofday" >&6; } -if test $ac_cv_func_gettimeofday = yes; then - cppflag="$cppflag -DHAVE_GETTIMEOFDAY" -fi - -fi - -# For -I and -D flags -CPPFLAGS="$CPPFLAGS $cppflag" - -# For debugging and optimization ... overwrite default because it has both -g and -O2 -echo "$CXXFLAGS" -CXXFLAGS="$cxxflag" - -# Check compiler and use -Wall if gnu. -if test $GXX = "yes" ; then - cxxflag=-Wall - -fi - -CXXFLAGS="$CXXFLAGS $cxxflag" - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} - { (exit 1); exit 1; }; } - -{ echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6; } -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -echo "$as_me: error: invalid value of canonical build" >&2;} - { (exit 1); exit 1; }; };; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6; } -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} - { (exit 1); exit 1; }; } -fi - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -echo "$as_me: error: invalid value of canonical host" >&2;} - { (exit 1); exit 1; }; };; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - -sharedlib="libstk.so" - -sharedname="libstk.so.\$(RELEASE)" - -libflags="-shared -Wl,-soname,\$(SHAREDLIB).\$(MAJOR) -o \$(SHAREDLIB).\$(RELEASE)" - -case $host in - *-apple*) - sharedlib="libstk.dylib" - - sharedname="libstk.\$(RELEASE).dylib" - - libflags="-dynamiclib -o libstk.\$(RELEASE).dylib" - -esac - -if test $realtime = yes; then - # Checks for package options and external software - { echo "$as_me:$LINENO: checking for audio API" >&5 -echo $ECHO_N "checking for audio API... $ECHO_C" >&6; } - case $host in - *-*-linux*) - -# Check whether --with-jack was given. -if test "${with_jack+set}" = set; then - withval=$with_jack; - api="$api -D__UNIX_JACK__" - { echo "$as_me:$LINENO: result: using JACK" >&5 -echo "${ECHO_T}using JACK" >&6; } - -{ echo "$as_me:$LINENO: checking for jack_client_open in -ljack" >&5 -echo $ECHO_N "checking for jack_client_open in -ljack... $ECHO_C" >&6; } -if test "${ac_cv_lib_jack_jack_client_open+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ljack $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char jack_client_open (); -int -main () -{ -return jack_client_open (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_jack_jack_client_open=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_jack_jack_client_open=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_jack_jack_client_open" >&5 -echo "${ECHO_T}$ac_cv_lib_jack_jack_client_open" >&6; } -if test $ac_cv_lib_jack_jack_client_open = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBJACK 1 -_ACEOF - - LIBS="-ljack $LIBS" - -else - { { echo "$as_me:$LINENO: error: JACK support requires the jack library!" >&5 -echo "$as_me: error: JACK support requires the jack library!" >&2;} - { (exit 1); exit 1; }; } -fi - - -{ echo "$as_me:$LINENO: checking for snd_pcm_open in -lasound" >&5 -echo $ECHO_N "checking for snd_pcm_open in -lasound... $ECHO_C" >&6; } -if test "${ac_cv_lib_asound_snd_pcm_open+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lasound $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char snd_pcm_open (); -int -main () -{ -return snd_pcm_open (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_asound_snd_pcm_open=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_asound_snd_pcm_open=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_pcm_open" >&5 -echo "${ECHO_T}$ac_cv_lib_asound_snd_pcm_open" >&6; } -if test $ac_cv_lib_asound_snd_pcm_open = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBASOUND 1 -_ACEOF - - LIBS="-lasound $LIBS" - -else - { { echo "$as_me:$LINENO: error: Jack support also requires the asound library!" >&5 -echo "$as_me: error: Jack support also requires the asound library!" >&2;} - { (exit 1); exit 1; }; } -fi - -fi - - - # Look for ALSA flag - -# Check whether --with-alsa was given. -if test "${with_alsa+set}" = set; then - withval=$with_alsa; - api="$api -D__LINUX_ALSA__" - { echo "$as_me:$LINENO: result: using ALSA" >&5 -echo "${ECHO_T}using ALSA" >&6; } - -{ echo "$as_me:$LINENO: checking for snd_pcm_open in -lasound" >&5 -echo $ECHO_N "checking for snd_pcm_open in -lasound... $ECHO_C" >&6; } -if test "${ac_cv_lib_asound_snd_pcm_open+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lasound $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char snd_pcm_open (); -int -main () -{ -return snd_pcm_open (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_asound_snd_pcm_open=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_asound_snd_pcm_open=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_pcm_open" >&5 -echo "${ECHO_T}$ac_cv_lib_asound_snd_pcm_open" >&6; } -if test $ac_cv_lib_asound_snd_pcm_open = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBASOUND 1 -_ACEOF - - LIBS="-lasound $LIBS" - -else - { { echo "$as_me:$LINENO: error: ALSA support requires the asound library!" >&5 -echo "$as_me: error: ALSA support requires the asound library!" >&2;} - { (exit 1); exit 1; }; } -fi - -fi - - - # Look for OSS flag - -# Check whether --with-oss was given. -if test "${with_oss+set}" = set; then - withval=$with_oss; - api="$api -D__LINUX_OSS__ -D__LINUX_ALSA__" - { echo "$as_me:$LINENO: result: using OSS" >&5 -echo "${ECHO_T}using OSS" >&6; } - -{ echo "$as_me:$LINENO: checking for snd_pcm_open in -lasound" >&5 -echo $ECHO_N "checking for snd_pcm_open in -lasound... $ECHO_C" >&6; } -if test "${ac_cv_lib_asound_snd_pcm_open+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lasound $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char snd_pcm_open (); -int -main () -{ -return snd_pcm_open (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_asound_snd_pcm_open=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_asound_snd_pcm_open=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_pcm_open" >&5 -echo "${ECHO_T}$ac_cv_lib_asound_snd_pcm_open" >&6; } -if test $ac_cv_lib_asound_snd_pcm_open = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBASOUND 1 -_ACEOF - - LIBS="-lasound $LIBS" - -else - { { echo "$as_me:$LINENO: error: OSS support requires ALSA for RtMidi!" >&5 -echo "$as_me: error: OSS support requires ALSA for RtMidi!" >&2;} - { (exit 1); exit 1; }; } -fi - -fi - - - # If no audio api flags specified, use ALSA - if test "$api" == ""; then - { echo "$as_me:$LINENO: result: using ALSA" >&5 -echo "${ECHO_T}using ALSA" >&6; } - api=-D__LINUX_ALSA__ - - -{ echo "$as_me:$LINENO: checking for snd_pcm_open in -lasound" >&5 -echo $ECHO_N "checking for snd_pcm_open in -lasound... $ECHO_C" >&6; } -if test "${ac_cv_lib_asound_snd_pcm_open+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lasound $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char snd_pcm_open (); -int -main () -{ -return snd_pcm_open (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_asound_snd_pcm_open=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_asound_snd_pcm_open=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_pcm_open" >&5 -echo "${ECHO_T}$ac_cv_lib_asound_snd_pcm_open" >&6; } -if test $ac_cv_lib_asound_snd_pcm_open = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBASOUND 1 -_ACEOF - - LIBS="-lasound $LIBS" - -else - { { echo "$as_me:$LINENO: error: ALSA support requires the asound library!" >&5 -echo "$as_me: error: ALSA support requires the asound library!" >&2;} - { (exit 1); exit 1; }; } -fi - - fi - - ;; - - *-apple*) - -# Check whether --with-jack was given. -if test "${with_jack+set}" = set; then - withval=$with_jack; - api="$api -D__UNIX_JACK__" - { echo "$as_me:$LINENO: result: using JACK" >&5 -echo "${ECHO_T}using JACK" >&6; } - -{ echo "$as_me:$LINENO: checking for jack_client_new in -ljack" >&5 -echo $ECHO_N "checking for jack_client_new in -ljack... $ECHO_C" >&6; } -if test "${ac_cv_lib_jack_jack_client_new+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ljack $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char jack_client_new (); -int -main () -{ -return jack_client_new (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_jack_jack_client_new=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_jack_jack_client_new=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_jack_jack_client_new" >&5 -echo "${ECHO_T}$ac_cv_lib_jack_jack_client_new" >&6; } -if test $ac_cv_lib_jack_jack_client_new = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBJACK 1 -_ACEOF - - LIBS="-ljack $LIBS" - -else - { { echo "$as_me:$LINENO: error: JACK support requires the jack library!" >&5 -echo "$as_me: error: JACK support requires the jack library!" >&2;} - { (exit 1); exit 1; }; } -fi - -fi - - - # Look for Core flag - -# Check whether --with-core was given. -if test "${with_core+set}" = set; then - withval=$with_core; - api="$api -D__MACOSX_CORE__" - { echo "$as_me:$LINENO: result: using CoreAudio" >&5 -echo "${ECHO_T}using CoreAudio" >&6; } - if test "${ac_cv_header_CoreAudio_CoreAudio_h+set}" = set; then - { echo "$as_me:$LINENO: checking for CoreAudio/CoreAudio.h" >&5 -echo $ECHO_N "checking for CoreAudio/CoreAudio.h... $ECHO_C" >&6; } -if test "${ac_cv_header_CoreAudio_CoreAudio_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_CoreAudio_CoreAudio_h" >&5 -echo "${ECHO_T}$ac_cv_header_CoreAudio_CoreAudio_h" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking CoreAudio/CoreAudio.h usability" >&5 -echo $ECHO_N "checking CoreAudio/CoreAudio.h usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking CoreAudio/CoreAudio.h presence" >&5 -echo $ECHO_N "checking CoreAudio/CoreAudio.h presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ----------------------------------- ## -## Report this to gary@music.mcgill.ca ## -## ----------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for CoreAudio/CoreAudio.h" >&5 -echo $ECHO_N "checking for CoreAudio/CoreAudio.h... $ECHO_C" >&6; } -if test "${ac_cv_header_CoreAudio_CoreAudio_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_CoreAudio_CoreAudio_h=$ac_header_preproc -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_CoreAudio_CoreAudio_h" >&5 -echo "${ECHO_T}$ac_cv_header_CoreAudio_CoreAudio_h" >&6; } - -fi -if test $ac_cv_header_CoreAudio_CoreAudio_h = yes; then - : -else - { { echo "$as_me:$LINENO: error: CoreAudio header files not found!" >&5 -echo "$as_me: error: CoreAudio header files not found!" >&2;} - { (exit 1); exit 1; }; } -fi - - - LIBS="$LIBS -framework CoreAudio -framework CoreFoundation -framework CoreMidi" -fi - - - # If no audio api flags specified, use CoreAudio - if test "$api" == ""; then - api=-D__MACOSX_CORE__ - - { echo "$as_me:$LINENO: result: using CoreAudio" >&5 -echo "${ECHO_T}using CoreAudio" >&6; } - if test "${ac_cv_header_CoreAudio_CoreAudio_h+set}" = set; then - { echo "$as_me:$LINENO: checking for CoreAudio/CoreAudio.h" >&5 -echo $ECHO_N "checking for CoreAudio/CoreAudio.h... $ECHO_C" >&6; } -if test "${ac_cv_header_CoreAudio_CoreAudio_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_CoreAudio_CoreAudio_h" >&5 -echo "${ECHO_T}$ac_cv_header_CoreAudio_CoreAudio_h" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking CoreAudio/CoreAudio.h usability" >&5 -echo $ECHO_N "checking CoreAudio/CoreAudio.h usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking CoreAudio/CoreAudio.h presence" >&5 -echo $ECHO_N "checking CoreAudio/CoreAudio.h presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: CoreAudio/CoreAudio.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: CoreAudio/CoreAudio.h: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ----------------------------------- ## -## Report this to gary@music.mcgill.ca ## -## ----------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for CoreAudio/CoreAudio.h" >&5 -echo $ECHO_N "checking for CoreAudio/CoreAudio.h... $ECHO_C" >&6; } -if test "${ac_cv_header_CoreAudio_CoreAudio_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_CoreAudio_CoreAudio_h=$ac_header_preproc -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_CoreAudio_CoreAudio_h" >&5 -echo "${ECHO_T}$ac_cv_header_CoreAudio_CoreAudio_h" >&6; } - -fi -if test $ac_cv_header_CoreAudio_CoreAudio_h = yes; then - : -else - { { echo "$as_me:$LINENO: error: CoreAudio header files not found!" >&5 -echo "$as_me: error: CoreAudio header files not found!" >&2;} - { (exit 1); exit 1; }; } -fi - - - LIBS="-framework CoreAudio -framework CoreFoundation -framework CoreMidi" - - fi - - -{ echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5 -echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6; } -if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_create (); -int -main () -{ -return pthread_create (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_pthread_pthread_create=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_pthread_pthread_create=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5 -echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6; } -if test $ac_cv_lib_pthread_pthread_create = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBPTHREAD 1 -_ACEOF - - LIBS="-lpthread $LIBS" - -else - { { echo "$as_me:$LINENO: error: RtAudio requires the pthread library!" >&5 -echo "$as_me: error: RtAudio requires the pthread library!" >&2;} - { (exit 1); exit 1; }; } -fi - - ;; - - *-mingw32*) - -# Check whether --with-asio was given. -if test "${with_asio+set}" = set; then - withval=$with_asio; - api="$api -D__WINDOWS_ASIO__" - { echo "$as_me:$LINENO: result: using ASIO" >&5 -echo "${ECHO_T}using ASIO" >&6; } - objects="asio.o asiodrivers.o asiolist.o iasiothiscallresolver.o" - -fi - - - # Look for DirectSound flag - -# Check whether --with-ds was given. -if test "${with_ds+set}" = set; then - withval=$with_ds; - api="$api -D__WINDOWS_DS__" - { echo "$as_me:$LINENO: result: using DirectSound" >&5 -echo "${ECHO_T}using DirectSound" >&6; } - LIBS="-ldsound -lwinmm $LIBS" -fi - - - # If no audio api flags specified, use DirectSound - if test "$api" == ""; then - api=-D__WINDOWS_DS__ - - { echo "$as_me:$LINENO: result: using DirectSound" >&5 -echo "${ECHO_T}using DirectSound" >&6; } - LIBS="-ldsound -lwinmm $LIBS" - fi - - api="$api -D__WINDOWS_MM__" - LIBS="-lole32 -lwinmm -lWsock32 $LIBS" - ;; - - *) - # Default case for unknown realtime systems. - { { echo "$as_me:$LINENO: error: Unknown system type for realtime support ... try --disable-realtime argument!" >&5 -echo "$as_me: error: Unknown system type for realtime support ... try --disable-realtime argument!" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - -CPPFLAGS="$CPPFLAGS $api" -fi - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 - -# Save the log message, to keep $[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by STK $as_me 4.4, which was -generated by GNU Autoconf 2.61. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -STK config.status 4.4 -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2006 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL - export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "projects/demo/Makefile") CONFIG_FILES="$CONFIG_FILES projects/demo/Makefile" ;; - "projects/effects/Makefile") CONFIG_FILES="$CONFIG_FILES projects/effects/Makefile" ;; - "projects/ragamatic/Makefile") CONFIG_FILES="$CONFIG_FILES projects/ragamatic/Makefile" ;; - "projects/examples/Makefile") CONFIG_FILES="$CONFIG_FILES projects/examples/Makefile" ;; - "projects/examples/libMakefile") CONFIG_FILES="$CONFIG_FILES projects/examples/libMakefile" ;; - "projects/eguitar/Makefile") CONFIG_FILES="$CONFIG_FILES projects/eguitar/Makefile" ;; - - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "$CONFIG_FILES"; then - -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -GXX!$GXX$ac_delim -CXX!$CXX$ac_delim -CXXFLAGS!$CXXFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CXX!$ac_ct_CXX$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -RANLIB!$RANLIB$ac_delim -AR!$AR$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -CPP!$CPP$ac_delim -GREP!$GREP$ac_delim -EGREP!$EGREP$ac_delim -byte_order!$byte_order$ac_delim -rawwaves!$rawwaves$ac_delim -include!$include$ac_delim -sound_api!$sound_api$ac_delim -realtime!$realtime$ac_delim -cppflag!$cppflag$ac_delim -cxxflag!$cxxflag$ac_delim -object_path!$object_path$ac_delim -debug!$debug$ac_delim -build!$build$ac_delim -build_cpu!$build_cpu$ac_delim -build_vendor!$build_vendor$ac_delim -build_os!$build_os$ac_delim -host!$host$ac_delim -host_cpu!$host_cpu$ac_delim -host_vendor!$host_vendor$ac_delim -host_os!$host_os$ac_delim -sharedlib!$sharedlib$ac_delim -sharedname!$sharedname$ac_delim -libflags!$libflags$ac_delim -api!$api$ac_delim -objects!$objects$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 77; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof -_ACEOF - - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF -fi # test -n "$CONFIG_FILES" - - -for ac_tag in :F $CONFIG_FILES -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; - esac - ac_file_inputs="$ac_file_inputs $ac_f" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - fi - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p -' $ac_file_inputs` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac - ;; - - - - esac - -done # for ac_tag - - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi - diff --git a/source/StkUGens/stk-4.4.4/configure.ac b/source/StkUGens/stk-4.4.4/configure.ac deleted file mode 100644 index 40c7395c89..0000000000 --- a/source/StkUGens/stk-4.4.4/configure.ac +++ /dev/null @@ -1,195 +0,0 @@ -# Process this file with autoconf to produce a configure script. -AC_INIT(STK, 4.4, gary@music.mcgill.ca, stk) -AC_CONFIG_AUX_DIR(config) -AC_CONFIG_SRCDIR(src/Stk.cpp) -AC_CONFIG_FILES(Makefile src/Makefile projects/demo/Makefile projects/effects/Makefile projects/ragamatic/Makefile projects/examples/Makefile projects/examples/libMakefile projects/eguitar/Makefile) - -# Fill GXX with something before test. -AC_SUBST( GXX, ["no"] ) - -# Checks for programs. -AC_PROG_CXX(g++ CC c++ cxx) -AC_PROG_RANLIB -AC_PATH_PROG(AR, ar, no) -if [[ $AR = "no" ]] ; then - AC_MSG_ERROR("Could not find ar - needed to create a library"); -fi - -# 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], - realtime=$enableval) -if test "$realtime" = "no"; then - AC_SUBST( sound_api, [] ) -else - AC_SUBST( realtime, [yes] ) -fi -AC_MSG_RESULT($realtime) - -# Check for math library -AC_CHECK_LIB(m, cos, , AC_MSG_ERROR(math library is needed!)) - -# Check for debug -AC_MSG_CHECKING(whether to compile debug version) -AC_ARG_ENABLE(debug, - [ --enable-debug = enable various debug output], - debug=$enableval) -if test "$debug" = "yes"; then - AC_SUBST( cppflag, ["-D_STK_DEBUG_ -D__RTAUDIO_DEBUG__ -D__RTMIDI_DEBUG__"] ) - AC_SUBST( cxxflag, ["-g"] ) - AC_SUBST( object_path, [Debug] ) -else - AC_SUBST( debug, [no] ) - AC_SUBST( cppflag, [] ) - AC_SUBST( cxxflag, [-O3] ) - AC_SUBST( object_path, [Release] ) -fi -AC_MSG_RESULT($debug) - -# Checks for functions -if test $realtime = yes; then - AC_CHECK_FUNCS(select socket) - AC_CHECK_FUNC(gettimeofday, [cppflag="$cppflag -DHAVE_GETTIMEOFDAY"], ) -fi - -# For -I and -D flags -CPPFLAGS="$CPPFLAGS $cppflag" - -# For debugging and optimization ... overwrite default because it has both -g and -O2 -echo "$CXXFLAGS" -CXXFLAGS="$cxxflag" - -# Check compiler and use -Wall if gnu. -if [test $GXX = "yes" ;] then - AC_SUBST( cxxflag, [-Wall] ) -fi - -CXXFLAGS="$CXXFLAGS $cxxflag" - -AC_CANONICAL_HOST - -AC_SUBST( sharedlib, ["libstk.so"] ) -AC_SUBST( sharedname, ["libstk.so.\$(RELEASE)"] ) -AC_SUBST( libflags, ["-shared -Wl,-soname,\$(SHAREDLIB).\$(MAJOR) -o \$(SHAREDLIB).\$(RELEASE)"] ) -case $host in - *-apple*) - AC_SUBST( sharedlib, ["libstk.dylib"] ) - AC_SUBST( sharedname, ["libstk.\$(RELEASE).dylib"] ) - AC_SUBST( libflags, ["-dynamiclib -o libstk.\$(RELEASE).dylib"] ) -esac - -if test $realtime = yes; then - # Checks for package options and external software - AC_MSG_CHECKING(for audio API) - case $host in - *-*-linux*) - AC_ARG_WITH(jack, [ --with-jack = choose JACK server support (mac and linux only)], [ - api="$api -D__UNIX_JACK__" - AC_MSG_RESULT(using JACK) - AC_CHECK_LIB(jack, jack_client_open, , AC_MSG_ERROR(JACK support requires the jack library!)) - AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(Jack support also requires the asound library!))], ) - - # Look for ALSA flag - AC_ARG_WITH(alsa, [ --with-alsa = choose native ALSA API support (linux only)], [ - api="$api -D__LINUX_ALSA__" - AC_MSG_RESULT(using ALSA) - AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(ALSA support requires the asound library!))], ) - - # Look for OSS flag - AC_ARG_WITH(oss, [ --with-oss = choose OSS API support (linux only)], [ - api="$api -D__LINUX_OSS__ -D__LINUX_ALSA__" - AC_MSG_RESULT(using OSS) - AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(OSS support requires ALSA for RtMidi!))], ) - - # If no audio api flags specified, use ALSA - if [test "$api" == "";] then - AC_MSG_RESULT(using ALSA) - AC_SUBST( api, [-D__LINUX_ALSA__] ) - AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(ALSA support requires the asound library!)) - fi - - ;; - - *-apple*) - AC_ARG_WITH(jack, [ --with-jack = choose JACK server support (unix only)], [ - api="$api -D__UNIX_JACK__" - AC_MSG_RESULT(using JACK) - AC_CHECK_LIB(jack, jack_client_new, , AC_MSG_ERROR(JACK support requires the jack library!))], ) - - # Look for Core flag - AC_ARG_WITH(core, [ --with-core = choose CoreAudio API support (mac only)], [ - api="$api -D__MACOSX_CORE__" - AC_MSG_RESULT(using CoreAudio) - AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [], [AC_MSG_ERROR(CoreAudio header files not found!)] ) - LIBS="$LIBS -framework CoreAudio -framework CoreFoundation -framework CoreMidi" ], ) - - # If no audio api flags specified, use CoreAudio - if [test "$api" == ""; ] then - AC_SUBST( api, [-D__MACOSX_CORE__] ) - AC_MSG_RESULT(using CoreAudio) - AC_CHECK_HEADER(CoreAudio/CoreAudio.h, - [], - [AC_MSG_ERROR(CoreAudio header files not found!)] ) - AC_SUBST( LIBS, ["-framework CoreAudio -framework CoreFoundation -framework CoreMidi"] ) - fi - - AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR(RtAudio requires the pthread library!)) - ;; - - *-mingw32*) - AC_ARG_WITH(asio, [ --with-asio = choose ASIO API support (windoze only)], [ - api="$api -D__WINDOWS_ASIO__" - AC_MSG_RESULT(using ASIO) - AC_SUBST( objects, ["asio.o asiodrivers.o asiolist.o iasiothiscallresolver.o"] ) ], ) - - # Look for DirectSound flag - AC_ARG_WITH(ds, [ --with-ds = choose DirectSound API support (windoze only)], [ - api="$api -D__WINDOWS_DS__" - AC_MSG_RESULT(using DirectSound) - LIBS="-ldsound -lwinmm $LIBS" ], ) - - # If no audio api flags specified, use DirectSound - if [test "$api" == "";] then - AC_SUBST( api, [-D__WINDOWS_DS__] ) - AC_MSG_RESULT(using DirectSound) - LIBS="-ldsound -lwinmm $LIBS" - fi - - api="$api -D__WINDOWS_MM__" - LIBS="-lole32 -lwinmm -lWsock32 $LIBS" - ;; - - *) - # Default case for unknown realtime systems. - AC_MSG_ERROR(Unknown system type for realtime support ... try --disable-realtime argument!) - ;; - esac - -CPPFLAGS="$CPPFLAGS $api" -fi - -AC_OUTPUT diff --git a/source/StkUGens/stk-4.4.4/doc/README-Linux.txt b/source/StkUGens/stk-4.4.4/doc/README-Linux.txt deleted file mode 100644 index 68b4f22ddf..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/README-Linux.txt +++ /dev/null @@ -1,13 +0,0 @@ -The Synthesis ToolKit in C++ (STK) - -By Perry R. Cook and Gary P. Scavone, 1995-2012. - -Please read the file README and INSTALL for more general STK information. - -Realtime audio support for Linux currently includes the Advanced Linux Sound Architecture (ALSA), the JACK low-latency audio server, and/or Open Sound System (OSS version 4.0 and higher only) APIs. That said, the OSS API support has not been tested in several years and is not considered a high priority. One or more APIs are selected during compilation using the __LINUX_ALSA__, __UNIX_JACK__, and/or __LINUX_OSS__ definitions. Because the ALSA library is now integrated into the standard Linux kernel, it is the default audio/MIDI API with STK versions 4.2 and higher. - -Realtime MIDI support Linux currently includes the Jack and ALSA sequencer support. Native OSS MIDI support no longer exists in RtMidi. If the __LINUX_OSS__ preprocessor definition is specified, only OSS audio support will be compiled and RtMidi will still be compiled using the ALSA API. For this reason, STK now requires the asound library for realtime support (unless only using the Jack API). Realtime programs must also link with the pthread library. - -STK should compile without much trouble under Linux. Since all Linux distributions typically include the GNU makefile utilities, you should be able to use the default Makefiles. Typing "make" in a project directory will initiate the compilation process (after initially running the configure script in the top-level directory). - - diff --git a/source/StkUGens/stk-4.4.4/doc/README-MacOSX.txt b/source/StkUGens/stk-4.4.4/doc/README-MacOSX.txt deleted file mode 100644 index a82888f106..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/README-MacOSX.txt +++ /dev/null @@ -1,16 +0,0 @@ -The Synthesis ToolKit in C++ (STK) - -By Perry R. Cook and Gary P. Scavone, 1995-2012. - -Please read the file README and INSTALL for more general STK information. - -The default realtime support for Macintosh OS X uses the CoreAudio HAL API and is specified during compilation using the __MACOSX_CORE__ preprocessor definition. There is also support for the JACK audio server using the __UNIX_JACK__ preprocessor definition. - -It is necessary to install the OS X developer kit (or the command line tools) in order to compile STK. STK was successfully tested on the latest version of OS X. - -Tcl/Tk on OS X: - -I think that tcl/tk interpreter is now included in the XCode package, since I haven't had to download it for several years now. - -It appears that socket support in Tcl/Tk on OS X uses the Nagle algorithm, which produces poor response between changes made in the tcl/tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script. - diff --git a/source/StkUGens/stk-4.4.4/doc/README-SGI.txt b/source/StkUGens/stk-4.4.4/doc/README-SGI.txt deleted file mode 100644 index 08f4d24a12..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/README-SGI.txt +++ /dev/null @@ -1,7 +0,0 @@ -The Synthesis ToolKit in C++ (STK) - -By Perry R. Cook and Gary P. Scavone, 1995-2012. - -Please read the file README and INSTALL for more general STK information. - -Since STK version 4.3, realtime support for IRIX has been discontinued due to an inability to test it. If you need realtime support on an SGI, go back to version 4.2.1. Release 4.0 of STK is confirmed to compile (with various warnings) using CC version 7.30. diff --git a/source/StkUGens/stk-4.4.4/doc/README-Win.txt b/source/StkUGens/stk-4.4.4/doc/README-Win.txt deleted file mode 100644 index 58bf66e53b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/README-Win.txt +++ /dev/null @@ -1,35 +0,0 @@ -The Synthesis ToolKit in C++ (STK) - -By Perry R. Cook and Gary P. Scavone, 1995-2012. - -Please read the file README for more general STK information. - -The configure script supports MinGW. As well, STK is distributed with Visual C++ .NET project and workspace files (though these may no longer work with current versions of Visual Studio). It no longer compiles with Visual C++ 6.0. - -With Windows XP/7, piping works as under unix. Simply fire up the script files (ex. StkDemo.bat) by either double-clicking on them or from within a shell. - -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. - -Both the DirectSound and Steinberg ASIO audio APIs are supported for realtime audio input/output. The Visual C++ project files included with this distribution are configured to use the DirectSound API. In order to use the ASIO API, it is necessary to change the preprocessor definition from __WINDOWS_DS__ to __WINDOWS_ASIO__, as well as include all the files in the /src/include/ directory (i.e. asio.h, asio.cpp, ...). If you have a good quality soundcard and a native ASIO driver (not emulated), you are likely to get much better input/output response using that. - -When using the DirectSound API for audio input, latency can be high. If you experience realtime audio "stuttering", you should experiment with different "buffer size" and "number of buffers" values. - -Realtime MIDI input/output is supported by RtMidi using the winmm.lib API and requires the __WINDOWS_MM__ preprocessor definition. - -Visual C++ workspaces have been created for the various STK projects. Everything has already been configured for you. The intermediate .obj files will be written to either the "Release" or "Debug" directories, but the executable files will be written to the main project directories (where they need to be for proper execution). If you should somehow lose or hose the VC++ workspace file for a project, then you will have to do a LOT of configuring to recreate it ... it's probably easier just to download the distribution again from our WWW sites. Anyway, for your benefit and mine, here is a list of things that need to be added to the various "Project Settings" (this was for VC 6.0 ... things have changed with the newer versions of the VC compiler): - -1. Under General: Set "Output files:" to (this will put the executable in the main project directory. - -2. Under C/C++ > Code Generation: Set "Use run-time library:" to Multithreaded (use "debug" versions for the debug configuration). - -3. Under Link > General: Add winmm.lib, dsound.lib, and Wsock32.lib to the end of the Object/library modules list. - -4. Under C/C++ > Preprocessor: Add "../../include" directory to the "extra include" field. - -5. Under C/C++ > Preprocessor: Add "__WINDOWS_DS__", "__WINDOWS_MM__", and "__LITTLE_ENDIAN__ to the definitions field. - -6. Add all the necessary files to the project. - -Remember that items 1-5 above need to be done for each project and for each configuration. There might be an easy way to make global changes, but I couldn't figure it out. - -To use the Tcl/Tk GUIs, you will have to install Tcl/Tk. diff --git a/source/StkUGens/stk-4.4.4/doc/ReleaseNotes.txt b/source/StkUGens/stk-4.4.4/doc/ReleaseNotes.txt deleted file mode 100644 index 2779d7f66d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/ReleaseNotes.txt +++ /dev/null @@ -1,265 +0,0 @@ -The Synthesis ToolKit in C++ (STK) - -By Perry R. Cook and Gary P. Scavone, 1995-2012. - -v4.4.4: (24 August 2012) -- new FreeVerb class (thanks to Greg Burlet) -- new Guitar class -- new electric guitar project -- cleaned / revised Shakers class -- updated versions of RtAudio and RtMidi -- bug fix in LentPitShift -- bug fix in Echo constructor -- bug fix in FileWvIn (file size when chunking) -- bug fix in StkFrames copy constructor - -v4.4.3: (30 August 2011) -- changed SINT24 to be lower 3 bytes of 32-bit word -- bug fixes to vectorized tick functions in Effects classes -- updated versions of RtAudio and RtMidi -- fix to ADSR bugs -- updates to the internal argument checking and reporting scheme -- updates to Bowed class (thanks to Esteban Maestre!) -- fixes for 24-bit support in FileRead and FileWrite -- added WAVE_FORMAT_EXTENSIBLE support in FileWrite -- added sample rate variable reading and writing for MAT-files in FileRead and FileWrite - -v4.4.2: (4 February 2011) -- added various header file includes for newer compilers -- new LentPitShift class (thanks to Francois Germain) -- added "addTo" function to Delay class -- updates to RtAudio and RtMidi -- bug fixes in Voicer class (thanks Richard Dobson!) -- bug fixes in Granulate class -- added Makefile.in to compile library and all projects, as well as clean and distclean all - -v4.4.1: (3 June 2010) -- added multi-channel/frame tick() virtual function to WvIn and WvOut abstract base classes (required update to RtWvOut class) -- updated configure script to select g++ compiler by default -- in demo.cpp: removed voicer grouping for messages, fixing polyphony when messages are on the same MIDI/SKINI channel -- updates to RtAudio and RtMidi - -v4.4: (30 April 2010) -- all classes embedded in the "stk" namespace (except RtAudio, RtMidi, and RtError) -- class WaveLoop renamed FileLoop -- significant efficiency improvements via code restructuring and inlining -- some class source (.cpp) files deleted as part of inlining (Generator, Filter, Function, WvIn, WvOut, Effect, Instrmnt, BowTable, ReedTable, JetTable, Vector3D) -- updates to RtAudio and RtMidi -- previous "tickFrame()" functions renamed "tick" for more consistent API -- more consistent and scalable approach to multichannel data and computations -- multichannel support added to Granulate class -- Filter class made abstract. New Iir and Fir classes made for non-order-specific filtering. -- new TapDelay class -- SubNoise class deleted (same as sub-sampled "ticking" of Noise class) - - -v4.3.1: (7 December 2007) -- further headerless file support in FileRead -- bug fix in RtWvOut.cpp -- added configure support for MinGW -- updates to RtAudio and RtMidi for MinGW -- changes to channel assignment in demo.cpp - - -v4.3.0: (13 August 2007) -- an official MIT-like license -- new functionality to automatically update class data when the STK sample rate changes (partly implemented) -- updates for new RtAudio version 4.0 -- removed RtDuplex class, users should use RtAudio directly with a callback function -- bug fix in interpolate() function in Stk.h for non-interleaved data -- fixes / improvements to the Granulate class -- fix in Whistle when doing animation -- fixes in BlitSquare for frequency, harmonics, and dc offset -- updates to Makefiles for non-realtime compile -- fix in demo.cpp for voice channel assignment -- updated versions of RtMidi and RtAudio -- updated ASIO files for MinGW compiler -- new FAQ in documentation -- MAT-file bug fix in FileRead class - - -v4.2.1: (14 October 2005) -- greatly expanded StkFrames functionality (including interpolation and indexing by channel/frame) -- new Granulate granular synthesis class -- new Blit, BlitSaw, and BlitSquare bandlimited waveform classes (thanks to Robin Davies!) -- removed Table class ... all functionality (including interpolation) now in StkFrames and FileRead classes -- revised Socket class (now abstract) and added TcpServer, TcpClient, and UdpSocket subclasses -- added Stk::showWarnings() and Stk::printErrors() functions to dis/enable warning and error printouts -- extracted file I/O functionality to new FileRead and FileWrite classes -- revised WvIn / WvOut class structure (WvIn / WvOut now abstract and file I/O functionality in new FileWvIn / FileWvOut subclasses) -- new SineWave class which calculates its own static table of variable length (no rawwave dependency) -- new sinewave.raw file of length 1024 samples (used to be 256) -- TcpWvIn and TcpWvOut renamed InetWvIn and InetWvOut, with added support for UDP sockets -- fixed bug in WvOut tickFrame( const StkFrames &frames ) function -- fixed bug in demo.cpp when writing output soundfiles without realtime output -- added "binary" open flag to MidiFileIn class for Windows -- fixed oversized MAT-file header in WvOut.cpp -- fixed case statement bug in MidiFileIn.cpp for sysex -- added missing getDelay() function to DelayA.cpp -- fixed modDepth omission in Chorus.cpp -- fixed DC blocker initialization bug in Flute.cpp -- changed Filter class behavior so no default clearing of state when changing coefficients -- bug fixes to RtAudio, especially for Windows DirectSound and ASIO (thanks to Robin Davies) -- bug fixes to RtMidi, especially for Linux (thanks to Pedro Pedro Lopez-Cabanillas) - - -v4.2.0: (4 October 2004) -- simultaneous multiple audio APIs supported at compile time -- fixed hidden overloaded virtual functions -- new Asymp exponential envelope class -- various changes to better conform to standard C++ programming practices -- MY_FLOAT type converted to StkFloat and changed throughout (use treesed utility to search/replace in old files) -- most example programs rewritten to use an audio callback paradigm (which works better in OS-X) -- new StkFrames class for vectorized multichannel data and associated new tick() functions making use of StkFrames -- new RtMidi class with MIDI output capabilities (API changes) -- new MidiFileIn class for reading MIDI files -- revised Filter classes to use std::vectors for coefficients (API changes) -- revised Messager class (now queues messages for retrieval) (API changes) -- new abstract parent Effect class for various effects -- added setT60 function to all reverbs -- new abstract parent Generator class for various signal sources -- new abstract parent Function class for tables and various non-linear functions -- Skini class completely rewritten (simplified) using the C++ STL (API changes) -- WvOut classes now clip to -1.0 to +1.0 and report out of range -- new Mutex class -- turned Nagle algorithm off by default in Socket class -- error reporting standardized in all classes - -v4.1.3: (22 March 2004) -- bug fix in RtAudio for Windows DirectSound output only support - -v4.1.2: (15 March 2004) -- added Linux JACK support to RtAudio -- added optional doNormalize argument to WvIn to allow specification of data normalization or not -- added volume control to demo program and various tcl scripts -- added support for dynamic rawwavePath() setting -- WaveLoop bug fix -- fixed bug in ADSR::setReleaseTime() method -- fixed missing initialization of apInput in non-default constructor of DelayA class -- added time seeding of random number generator to Noise constructor -- update to the contentsAt() method of Delay class -- WAV file fixes (8-bit) in WvIn and WvOut classes -- configure changes -- updated include statements and appended "std::" as necessary throughout for compatibility with gcc 3 - -v4.1.1: (24 October 2002) -- bug fix in RtAudio for Macintosh OS X and Windows ASIO duplex operation -- windows ASIO fix in Stk.h -- documentation updates -- expanded tutorial -- fixed RtDuplex omission in src Makefile - -v4.1: (8 October 2002) -- 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 all example programs -- socket port number added as command line option to all example programs - -v4.0: (April 2002) -- new documentation and tutorial -- several new instruments, including Saxofony, BlowBotl, and StifKarp -- new Stk base class, replacing Object class -- new Filter class structure and methods -- 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 -- new file type specifier argument in WvOut ... hosed WavWvOut, AifWvOut, RawWavOut, SndWavOut, and MatWvOut subclasses -- some simplifications of Messager class (was Controller) -- new independent RtAudio class -- extensive revisions in code and a significant number of API changes - -v3.2: (13 November 2000) -- new control handling class (Controller) -- added AIFF file input/output support -- stklib.a Makefile in src directory -- added C++ error handling capabilities -- added input/output internet streaming support (StrmWvIn/StrmWvOut) -- added native ALSA support for linux -- added optional "device" argument to all "Rt" classes (audio and MIDI) and printout of devices when argument is invalid -- 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 -- fixed interpolation bug in RtWvIn -- windoze RtAudio code rewritten (thanks Dave!) -- simplified byte-swapping functions (in-place swapping) -- new FIR filter class (thanks Julius!) -- "stereo-ized" RagaMatic -- probably a bunch more fixes that I've long since forgotten about - - -v3.1: (13 March 2000) -- 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. diff --git a/source/StkUGens/stk-4.4.4/doc/SKINI.txt b/source/StkUGens/stk-4.4.4/doc/SKINI.txt deleted file mode 100644 index d42c731aea..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/SKINI.txt +++ /dev/null @@ -1,388 +0,0 @@ -This describes the latest (version 1.1) implementation of SKINI. - -Synthesis toolKit Instrument Network Interface - -for the Synthesis Toolkit in C++ by Perry R. Cook. - -********************************* -* Too good to be true? * -* Have control and read it too? * -* A SKINI Haiku. * -********************************* - -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. - -1) MIDI Compatibility - - SKINI was designed to be MIDI compatible wherever possible, - and extend MIDI in incremental, then maybe profound ways. - - 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. - - 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. - -2) 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. - - 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. - -3) 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. - - 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. - NonMIDI 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. - - 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. - -4) C 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.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. - -5) 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: - - a) If the first (non-delimiter (see c)) character in a SKINI - string is '/' that line is treated as a comment and echoed - to stdout. - - 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 non-characters. - - c) 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). - - d) 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. - - 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 - 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). - - 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 - 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. - - g) 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. - -6) A Short SKINI File: - - /* Howdy!!! Welcome to SKINI, by P. Cook 1999 - - NoteOn 0.000082 2 55 82 - NoteOff 1.000000 2 55 0 - NoteOn 0.000082 2 69 82 - StringDetune 0.100000 2 10 - StringDetune 0.100000 2 30 - StringDetune 0.100000 2 50 - NoteOn 0.000000 2 69 82 - StringDetune 0.100000 2 40 - StringDetune 0.100000 2 22 - StringDetune 0.100000 2 12 - // - StringDamping 0.000100 2 0.0 - NoteOn 0.000082 2 55 82 - NoteOn 0.200000 2 62 82 - NoteOn 0.100000 2 71 82 - NoteOn 0.200000 2 79 82 - NoteOff 1.000000 2 55 82 - NoteOff 0.000000 2 62 82 - NoteOff 0.000000 2 71 82 - NoteOff 0.000000 2 79 82 - StringDamping =4.000000 2 0.0 - NoteOn 0.000082 2 55 82 - NoteOn 0.200000 2 62 82 - NoteOn 0.100000 2 71 82 - NoteOn 0.200000 2 79 82 - NoteOff 1.000000 2 55 82 - NoteOff 0.000000 2 62 82 - NoteOff 0.000000 2 71 82 - NoteOff 0.000000 2 79 82 - -7) The SKINI.tbl File, How Messages are Parsed: - - The SKINI.tbl file contains an array of structures which - are accessed by the parser object Skini.cpp. The struct is: - - struct SKINISpec { char messageString[32]; - long type; - long data2; - long data3; - }; - - so an assignment of one of these structs looks like: - - MessageStr$ ,type, data2, data3, - - type is the message type sent back from the SKINI line parser. - data 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 - 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_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 - - {"NoteOff" , __SK_NoteOff_, SK_DBL, SK_DBL}, - {"NoteOn" , __SK_NoteOn_, SK_DBL, SK_DBL}, - - {"ControlChange" , __SK_ControlChange_, SK_INT, SK_DBL}, - {"Volume" , __SK_ControlChange_, __SK_Volume_ , SK_DBL}, - - {"StringDamping" , __SK_ControlChange_, __SK_StringDamping_, SK_DBL}, - {"StringDetune" , __SK_ControlChange_, __SK_StringDetune_, SK_DBL}, - - 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 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: - - ControlChange 0.000000 2 7 64.1 - Volume 0.000000 2 64.1 - - 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. - -8) Objects using SKINI - - Here's a simple example of code which uses the Skini object - to read a SKINI file and control a single instrument. - - Skini score; - Skini::Message message; - instrument = new Mandolin(50.0); - score.setFile( argv[1] ); - while ( score.nextMessage( message ) != 0 ) { - tempDouble = message.time; - if (tempDouble < 0) { - tempDouble = - tempDouble; - tempDouble = tempDouble - output.getTime(); - if (tempDouble < 0) { - printf("Bad News Here!!! Backward Absolute Time Required.\n"); - tempDouble = 0.0; - } - } - tempLong = (long) ( tempDouble * Stk::sampleRate() ); - for ( i=0; itick() ); - } - - tempDouble3 = message.floatValues[1] * NORM_MIDI; - if ( message.type == __SK_NoteOn_ ) { - if ( tempDouble3 == 0.0 ) { - tempDouble3 = 0.5; - instrument->noteOff( tempDouble3 ); - } - else { - tempLong = message.intValues[0]; - tempDouble2 = Midi2Pitch[tempLong]; - instrument->noteOn( tempDouble2, tempDouble3 ); - } - } - else if ( message.type == __SK_NoteOff_ ) { - instrument->noteOff( tempDouble3 ); - } - else if ( message.type == __SK_ControlChange_ ) { - tempLong = message.intValues[0]; - instrument->controlChange( tempLong, tempDouble3 ); - } - } - - 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. - - 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. - - 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. diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/Doxyfile b/source/StkUGens/stk-4.4.4/doc/doxygen/Doxyfile deleted file mode 100644 index 397991dd13..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/Doxyfile +++ /dev/null @@ -1,1563 +0,0 @@ -# Doxyfile 1.6.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = STK - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 4.4.4 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ../html/ - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 9 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it parses. -# With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this tag. -# The format is ext=language, where ext is a file extension, and language is one of -# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, -# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. Note that for custom extensions you also need to set -# FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = NO - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = YES - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = YES - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = YES - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -# doxygen. The layout file controls the global structure of the generated output files -# in an output format independent way. The create the layout file that represents -# doxygen's defaults, run doxygen with the -l option. You can optionally specify a -# file name after the option, if omitted DoxygenLayout.xml will be used as the name -# of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = . \ - ../../include - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = *.txt \ - *.msg \ - *.h - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = ../../src/asio - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = ../../projects/examples - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = YES - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = ../html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = header.html - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = NO - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -# are set, an additional index file will be generated that can be used as input for -# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -# HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. -# For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's -# filter section matches. -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = YES - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = NO - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a PHP enabled web server instead of at the web client -# using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server -# based approach is that it scales better to large projects and allows -# full text search. The disadvances is that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = letter - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = header.tex - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = NO - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = /sw/bin - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/classes.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/classes.txt deleted file mode 100644 index be7fda7665..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/classes.txt +++ /dev/null @@ -1,10 +0,0 @@ -/*! \page classes Class Documentation - - - -*/ \ No newline at end of file diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/compile.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/compile.txt deleted file mode 100644 index c6f5fb87d7..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/compile.txt +++ /dev/null @@ -1,127 +0,0 @@ -/*! \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 Makefiles that 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. - - -\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) dependent. STK classes that require -specific platform/OS support include RtAudio, RtWvOut, RtWvIn, -RtDuplex, RtMidi, InetWvIn, InetWvOut, Socket, UdpSocket, TcpServer, -TcpClient, Thread, and Mutex. These classes currently can only be -compiled on Linux, 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 -__LITTLE_ENDIAN__ 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. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OS:Realtime Audio/MIDI API:Preprocessor Definition:Library or Framework:
LinuxALSA__LINUX_ALSA__, __LITTLE_ENDIAN__asound, pthread
LinuxOSS (version 4.0 only, use ALSA for MIDI support)__LINUX_OSS__, __LINUX_ALSA__, __LITTLE_ENDIAN__asound, pthread
Linux and Macintosh OS-XJack__UNIX_JACK__, __LITTLE_ENDIAN__asound, pthread, jack
Macintosh OS XCoreAudio__MACOSX_CORE__pthread, CoreAudio, CoreMidi, CoreFoundation
-
- -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, FileRead, FileWrite, FileWvIn, FileLoop, and -FileWvOut. 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 FileRead.cpp FileWrite.cpp FileWvIn.cpp FileLoop.cpp FileWvOut.cpp sineosc.cpp \endcode - -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). Most of the STK projects (e.g., demo, effects, ...) contain Makefiles (built by the configure script) that 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 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. - - -\subsection library 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.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 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 \#include statements in the sineosc.cpp program as follows: - -\code -#include "stk/FileLoop.h" -#include "stk/FileWvOut.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 .NET compiler -only. It is assumed here that you're familiar with Visual C++ and its -particular idiosyncrasies. STK won't compile in Visual C++ 6.0 any more. - -The approach when using Visual C++ is to build a project that -includes the necessary ToolKit files from the distribution -src and include directories. For the example -program from the previous tutorial chapter, create a VC++ console -application project, add the Stk, FileRead, FileWrite, WvIn, FileWvIn, -FileLoop, WvOut, and FileWvOut class files, as well as -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__, __WINDOWS_DS__, and __WINDOWS_MM__ preprocessor definitions. - -For Steinberg ASIO support, use the __WINDOWS_ASIO__ preprocessor definition (and the __WINDOWS_MM__ definition for RtMidi support), 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. - -[Main tutorial page]   [Next tutorial] -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/control.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/control.txt deleted file mode 100644 index 6408655ebb..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/control.txt +++ /dev/null @@ -1,54 +0,0 @@ -/*! \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 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: - -\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 stk::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 stk::Skini::Message types (MIDI -messages are converted to the stk::Skini:Message format). The user -then uses the stk::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 -stk::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 stk::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 controlbee and the SKINI scorefile bookert.ski is in the scores 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 stk::Messager class provides stk::Messager::startStdInput(), stk::Messager::startSocketInput(), and stk::Messager::startMidiInput() functions for this purpose. - -[Main tutorial page]   [Next tutorial] -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/crealtime.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/crealtime.txt deleted file mode 100644 index 72d4e94fa1..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/crealtime.txt +++ /dev/null @@ -1,74 +0,0 @@ -/*! \page crealtime Realtime Audio (callback) - -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 rtsine.cpp 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). - -The previous section described the use of the stk::RtWvOut class for -realtime audio output. The stk::RtWvOut::tick() function writes data to a -large ring-buffer, from which data is periodically written to the -computer's audio hardware via an underlying callback routine. - -\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 StkFloat, and the -RT_BUFFER_SIZE defined in Stk.h. The \c bufferFrames argument is an -API-dependent buffering parameter (see RtAudio for further -information). - -We also provide the audio system controller with a pointer to our -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 struct (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 pointers to the audio input and output data buffers, the -buffer size (in frames), a stream time argument, a status argument to -test for over/underruns, and the data pointer passed in the -openStream() 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 nBufferFrames 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. - -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 that 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. - -[Main tutorial page]   [Next tutorial] -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/download.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/download.txt deleted file mode 100644 index def0613de6..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/download.txt +++ /dev/null @@ -1,311 +0,0 @@ -/*! \page download Download, Release Notes, and Bug Fixes - -\section down Download Version 4.4.4 (24 August 2012): - - - - -\section notes Release Notes: - -\subsection v4dot4dot4 Version 4.4.4 - -
    -
  • New FreeVerb class (thanks to Greg Burlet)
  • -
  • New Guitar class
  • -
  • New electric guitar project
  • -
  • Updated versions of RtAudio and RtMidi
  • -
  • Cleaned / revised Shakers class
  • -
  • Bug fix in LentPitShift
  • -
  • Bug fix in Echo constructor
  • -
  • Bug fix in FileWvIn (file size when chunking)
  • -
  • Bug fix in StkFrames copy constructor
  • -
- -\subsection v4dot4dot3 Version 4.4.3 - -
    -
  • Changed SINT24 to be lower 3 bytes of 32-bit word.
  • -
  • Bug fixes to vectorized tick functions in Effects classes.
  • -
  • Updated versions of RtAudio and RtMidi.
  • -
  • Bug fixes in ADSR and Envelope classes.
  • -
  • Updates to the internal argument checking and reporting scheme.
  • -
  • Updates to Bowed class (thanks to Esteban Maestre!).
  • -
  • Fixes for 24-bit support in FileRead and FileWrite.
  • -
  • Added WAVE_FORMAT_EXTENSIBLE support in FileWrite.
  • -
  • Added sample rate variable reading and writing for MAT-files in FileRead and FileWrite.
  • -
- -\subsection v4dot4dot2 Version 4.4.2 - -
    -
  • Added various header file includes for newer compilers.
  • -
  • Updates to RtAudio and RtMidi.
  • -
  • New LentPitShift class (thanks to Francois Germain).
  • -
  • Bug fixes in Voicer class (thanks Richard Dobson!).
  • -
  • Added Makefile.in to compile library and all projects, as well as clean and distclean.
  • -
- -\subsection v4dot4dot1 Version 4.4.1 - -
    -
  • Added multi-channel/frame tick() virtual function to WvIn and WvOut abstract base classes (required update to RtWvOut class).
  • -
  • Updated configure script to select g++ compiler by default.
  • -
  • In demo.cpp: removed voicer grouping for messages, fixing polyphony when messages are on the same MIDI/SKINI channel.
  • -
  • Updates to RtAudio and RtMidi.
  • -
- -\subsection v4dot4dot0 Version 4.4.0 - -
    -
  • All classes embedded in the "stk" namespace (except RtAudio, RtMidi, and RtError).
  • -
  • Class WaveLoop renamed FileLoop.
  • -
  • Significant efficiency improvements via code restructuring and inlining.
  • -
  • Some class source (.cpp) files deleted as part of inlining (Generator, Filter, Function, WvIn, WvOut, Effect, Instrmnt, BowTable, ReedTable, JetTable, Vector3D).
  • -
  • Updates to RtAudio and RtMidi.
  • -
  • Previous "tickFrame()" functions renamed "tick" for more consistent API.
  • -
  • More consistent and scalable approach to multichannel data and computations.
  • -
  • Multichannel support added to Granulate class.
  • -
  • Filter class made abstract. New Iir and Fir classes made for non-order-specific filtering.
  • -
  • New TapDelay class.
  • -
  • SubNoise class deleted (same as sub-sampled "ticking" of Noise class).
  • -
- -\subsection v4dot3dot1 Version 4.3.1 - -
    -
  • Further headerless file support in FileRead.
  • -
  • Bug fix in RtWvOut.cpp.
  • -
  • Added configure support for MinGW.
  • -
  • Updates to RtAudio and RtMidi for MinGW.
  • -
  • Changes to channel assignment in demo.cpp.
  • -
- -\subsection v4dot3dot0 Version 4.3.0 - -
    -
  • An official MIT-like license.
  • -
  • New functionality to automatically update class data when the STK sample rate changes (partly implemented).
  • -
  • Updates for new RtAudio version 4.0.
  • -
  • Removed RtDuplex class, users should use RtAudio directly with a callback function.
  • -
  • Bug fix in interpolate() function in Stk.h for non-interleaved data.
  • -
  • Fixes / improvements to the Granulate class.
  • -
  • Fix in Whistle when doing animation.
  • -
  • Fixes in BlitSquare for frequency, harmonics, and dc offset.
  • -
  • Updates to Makefiles for non-realtime compile.
  • -
  • Fix in demo.cpp for voice channel assignment.
  • -
  • Updated versions of RtMidi and RtAudio.
  • -
  • Updated ASIO files for MinGW compiler.
  • -
  • New FAQ in documentation.
  • -
  • MAT-file bug fix in FileRead class.
  • -
- -\subsection v4dot2dot1 Version 4.2.1 - -
    -
  • Greatly expanded StkFrames functionality (including interpolation and indexing by channel/frame).
  • -
  • New Blit, BlitSaw, and BlitSquare bandlimited waveform classes (thanks to Robin Davies!).
  • -
  • New Granulate granular synthesis class.
  • -
  • Removed Table class ... all functionality (including interpolation) now in StkFrames and FileRead classes.
  • -
  • Revised Socket class (now abstract) and added TcpServer, TcpClient, and UdpSocket subclasses.
  • -
  • Added Stk::showWarnings() and Stk::printErrors() functions to dis/enable warning and error printouts.
  • -
  • Extracted file I/O functionality to FileRead and FileWrite classes.
  • -
  • Revised WvIn / WvOut class structure (WvIn / WvOut now abstract and file I/O functionality in new FileWvIn / FileWvOut subclasses).
  • -
  • New SineWave class which calculates its own static table of variable length (no rawwave dependency).
  • -
  • New sinewave.raw file of length 1024 samples (used to be 256).
  • -
  • TcpWvIn and TcpWvOut renamed InetWvIn and InetWvOut, with added support for UDP sockets.
  • -
  • Fixed bug in WvOut tickFrame( const StkFrames &frames ) function.
  • -
  • Fixed bug in demo.cpp when writing output soundfiles without realtime output.
  • -
  • Added "binary" open flag to MidiFileIn class for Windows.
  • -
  • Fixed oversized MAT-file header in WvOut.cpp
  • -
  • Fixed case statement bug in MidiFileIn.cpp for sysex.
  • -
  • Added missing getDelay() function to DelayA.cpp.
  • -
  • Fixed modDepth omission in Chorus.cpp.
  • -
  • Fixed DC blocker initialization bug in Flute.cpp.
  • -
  • Changed Filter class behavior so no default clearing of state when changing coefficients.
  • -
  • Fixes to RtAudio, especially for Windows DirectSound and ASIO (thanks to Robin Davies).
  • -
- -\subsection v4dot2dot0 Version 4.2.0 - -
    -
  • Simultaneous multiple audio APIs supported at compile time.
  • -
  • Various changes to better conform to standard C++ programming practices.
  • -
  • Fixed hidden overloaded virtual functions.
  • -
  • New Asymp exponential envelope class.
  • -
  • MY_FLOAT type converted to StkFloat and changed throughout (use \c treesed utility to search/replace in old files).
  • -
  • Most example programs rewritten to use an audio callback paradigm (which works better in OS-X).
  • -
  • New StkFrames class for vectorized multichannel data and associated new tick() functions making use of StkFrames.
  • -
  • New RtMidi class with MIDI output capabilities (API changes).
  • -
  • New MidiFileIn class for reading MIDI files.
  • -
  • Revised Filter classes to use std::vectors for coefficients (API changes).
  • -
  • Revised Messager class (API changes).
  • -
  • New abstract parent Effect class for various effects.
  • -
  • New abstract parent Generator class for various signal sources.
  • -
  • New abstract parent Function class for tables and various non-linear functions.
  • -
  • Skini class completely rewritten (simplified) using the C++ STL (API changes).
  • -
  • WvOut classes now clip to -1.0 to +1.0 and report out of range.
  • -
  • New Mutex class.
  • -
  • Turned Nagle algorithm off by default in Socket class.
  • -
  • Error reporting standardized in all classes.
  • -
- -\subsection v4dot1dot3 Version 4.1.3 - -
    -
  • Bug fix in RtAudio for Windows DirectSound output only support
  • -
- -\subsection v4dot1dot2 Version 4.1.2 - -
    -
  • Added Linux JACK support to RtAudio.
  • -
  • Added optional doNormalize argument to WvIn to allow specification of data normalization or not.
  • -
  • Added volume control to demo program and various tcl scripts.
  • -
  • Added support for dynamic rawwavePath() setting.
  • -
  • WaveLoop bug fix.
  • -
  • Fixed bug in ADSR::setReleaseTime() method.
  • -
  • Fixed missing initialization of apInput in non-default constructor of DelayA class.
  • -
  • Added time seeding of random number generator to Noise constructor.
  • -
  • Update to the contentsAt() method of Delay class.
  • -
  • WAV file fixes (8-bit) in WvIn and WvOut classes.
  • -
  • Configure script changes.
  • -
  • Updated \ include statements and appended "std::" as necessary throughout for compatibility with gcc 3.
  • -
- -\subsection v4dot1dot1 Version 4.1.1 -
    -
  • Bug fix in RtAudio for Macintosh OS X and Windows ASIO duplex operation.
  • -
  • Windows ASIO fix in Stk.h.
  • -
  • Documentation updates.
  • -
  • Expanded tutorial.
  • -
  • Fixed RtDuplex omission in src Makefile.
  • -
- -\subsection v4dot1 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.
  • -
- -\subsection v4 Version 4.0 - -
    -
  • New documentation and tutorial.
  • -
  • Several new instruments, including Saxofony, BlowBotl, and StifKarp.
  • -
  • New Stk base class, replacing Object class.
  • -
  • New Filter class structure and methods.
  • -
  • 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.
  • -
  • New file type specifier argument in WvOut ... hosed WavWvOut, AifWvOut, RawWavOut, SndWavOut, and MatWvOut subclasses.
  • -
  • Some simplifications of Messager class (was Controller).
  • -
  • New independent RtAudio class.
  • -
  • Extensive revisions in code and a significant number of API changes.
  • -
- -\subsection v3dot2 Version 3.2 - -
    -
  • New input control handling class (Controller)
  • -
  • Added AIFF file input/output support.
  • -
  • New C++ error handling capabilities.
  • -
  • New input/output internet streaming support (StrmWvIn/StrmWvOut).
  • -
  • Added native ALSA support for linux.
  • -
  • Added optional "device" argument to all "Rt" classes (audio and MIDI) and printout of devices when argument is invalid.
  • -
  • 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.
  • -
  • Fixed interpolation bug in RtWvIn.
  • -
  • Windoze RtAudio code rewritten (thank Dave!).
  • -
  • Simplified byte-swapping functions (in-place swapping).
  • -
  • "Stereo-ized" RagaMatic.
  • -
  • Miscellaneous renamings.
  • -
  • Probably a bunch more fixes that I've long since forgotten about.
  • -
- -\subsection v3dot1 Version 3.1 - -
    -
  • New RagaMatic project ... very cool!!!
  • -
  • Less clipping in the Shakers class.
  • -
  • 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 few minor changes, some bug fixes ... can't remember all of them.
  • -
- -\subsection v3 Version 3.0 - -
    -
  • New #define flags for OS and realtime dependencies (this will probably cause problems for old personal STK code, but it was necessary to make future ports easier).
  • -
  • Expanded and cleaned the Shakers class.
  • -
  • New BowedBar algorithm/class.
  • -
  • 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 project 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 Tcl/Tk GUI (TclDemo.tcl).
  • -
  • 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).
  • -
- -\subsection v2dot02 Version 2.02 - -
    -
  • Created RawWave abstract class, with subclasses of RawLoop (looping rawwave oscillator), RawShot (non-looping, non-interpolating rawwave player ... used to be RawWvIn), and RawInterp (looping or non-looping, interpolating rawwave player ... used to be RawWave).
  • -
  • 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 WinXX 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.
  • -
  • 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.
  • -
- -\subsection v2 Version 2 - -
    -
  • Unification of the capabilities of STK across the various platforms. All of the previous SGI functionality has been ported to Linux and Windows, including realtime sound output and MIDI input.
  • -
  • 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.
  • -
  • 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.
  • -
  • 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.
  • -
  • 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. MD2SKINI | syntmono Clarinet -r -i). In addition, you can supply a filename argument to MD2SKINI and have it simultaneously record a SKINI score file for future reuse.
  • -
  • Modifications to Object.h for OS_TYPE compilation dependencies. Makefile automatically determines OS_TYPE when invoked (if you have the GNU makefile utilities installed on your system).
  • -
  • 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.
  • -
- -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/faq.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/faq.txt deleted file mode 100644 index 7c393d85dd..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/faq.txt +++ /dev/null @@ -1,80 +0,0 @@ -/*! \page faq Frequently Asked Questions - -- \ref license -- \ref filerate -- \ref endianness -- \ref xwindows - -\section license Does STK have a license? - -Yes, we finally made something official for release 4.3.0. It is listed in the Stk class and a few other places in the distribution, but I'll repeat it here for clarity: - -\verbatim -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. STK currently runs -with realtime support (audio and MIDI) on Linux, Macintosh OS X, -and Windows computer platforms. Generic, non-realtime support has -been tested under NeXTStep, Sun, and other platforms and should -work with any standard C++ compiler. - -STK WWW site: http://ccrma.stanford.edu/software/stk/ - -The Synthesis ToolKit in C++ (STK) -Copyright (c) 1995-2012 Perry R. Cook and Gary P. Scavone - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -Any person wishing to distribute modifications to the Software is -asked to send the modifications to the original developer so that they -can be incorporated into the canonical version. This is, however, not -a binding provision of this license. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -\endverbatim - -\section filerate Why is my file sample rate wrong? - -When the FileWvIn class loads a soundfile, it automatically sets its internal read increment based on the soundfile rate and the current STK sample rate. For example, if the current STK sample rate is 44100 Hz and the soundfile rate is 22050 Hz, the read increment, or rate, will be set to 0.5 and the file will be interpolated so that is sounds correct at 44100 Hz. For most cases, this works fine. However, consider the following example: - -\code -FileWvIn input( "infile" ); // read an input soundfile -StkFloat sampleRate = input.getFileRate(); -Stk::setSampleRate( sampleRate ); // set a new STK sample rate based on the file rate -\endcode - -With version 4.3 and higher of STK, the FileWvIn class will be notified of a sample rate change and it will automatically adjust its read rate accordingly. Previous versions of STK did not perform this change and thus, the read rate could end up being incorrect. If you do not want FileWvIn to perform this automatic adjustment, you can call the \c ignoreSampleRateChange() function for a given class instance. - -\section endianness Why does the sound I generated with STK sound like *&#@!? - -If the resultant sound generated by an STK program sounds like noise (and you're not doing an MLS experiment), the problem is likely related to the byte "endianness" of your computer. By default, STK assumes "big endian" byte order. If you are working with STK classes on a PC (Windows or Linux), you \e must define the __LITTLE_ENDIAN__ preprocessor definition \e before compiling. If after reading this you realize you need to make this change, do not forget to recompile all STK classes from scratch. - -\section xwindows Why do I get a Tk display error message? - -The following error may be printed to your terminal window (depending on the version of the tcl/tk interpreter you are running) if you attempt to start an STK tcl/tk interface without the X Server first running: - -\code -Application initialization failed: this isn't a Tk applicationcouldn't connect to display ":0.0" -\endcode - -Simply start your X server and then try the command again. - -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/filtering.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/filtering.txt deleted file mode 100644 index 67d689c75d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/filtering.txt +++ /dev/null @@ -1,91 +0,0 @@ -/*! \page filtering Using Filters - -In this section, we demonstrate the use of a few of the STK filter classes. The stk::Iir class provides functionality to implement a generalized infinite impulse response (IIR) digital filter, similar to the \c filter function in Matlab. In this example, we create an stk::Iir instance and initialize it with specific numerator and denominator coefficients. We then compute its impulse response for 20 samples. - -\code -#include "Iir.h" -using namespace stk; - -int main() -{ - StkFrames output( 20, 1 ); // initialize StkFrames to 20 frames and 1 channel (default: interleaved) - output[0] = 1.0; - - std::vector numerator( 5, 0.1 ); // create and initialize numerator coefficients - std::vector denominator; // create empty denominator coefficients - denominator.push_back( 1.0 ); // populate our denomintor values - denominator.push_back( 0.3 ); - denominator.push_back( -0.5 ); - - Iir filter( numerator, denominator ); - - filter.tick( output ); - for ( unsigned int i=0; ivector, a container object provided by the C++ Standard Library. - -Most STK classes use more specific types of digital filters, such as the stk::OneZero, stk::OnePole, stk::TwoPole, or stk::BiQuad varieties. These classes inherit from the stk::Filter abstract base class and provide specific functionality particular to their use, as well as functions to independently control individual coefficient values. - -\section reson Resonances: - -The STK stk::BiQuad and stk::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 stk::Noise generator. - -\code -#include "BiQuad.h" -#include "Noise.h" -using namespace stk; - -int main() -{ - StkFrames output( 20, 1 ); // initialize StkFrames to 20 frames and 1 channel (default: interleaved) - Noise noise; - - BiQuad biquad; - biquad.setResonance( 440.0, 0.98, true ); // automatically normalize for unity peak gain - - for ( unsigned int i=0; iMain tutorial page]   [Next tutorial] -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/footer.html b/source/StkUGens/stk-4.4.4/doc/doxygen/footer.html deleted file mode 100644 index c1ab0ab34a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/footer.html +++ /dev/null @@ -1,9 +0,0 @@ -
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/fundamentals.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/fundamentals.txt deleted file mode 100644 index 9ada45e53b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/fundamentals.txt +++ /dev/null @@ -1,65 +0,0 @@ -/*! \page fundamentals STK Fundamentals - -The Synthesis ToolKit is implemented in the C++ programming language. STK does not attempt to provide a new programming environment or paradigm but rather provides a set of objects that can be used within a normal C++ programming framework. Therefore, it is expected that users of STK will have some familiarity with C/C++ programming concepts. That said, the STK classes do have some particular idiosyncrasies that we will mention here. Starting with STK version 4.4, all STK classes except RtAudio, RtMidi, and RtError are defined within the stk namespace. - -\section Signal Computations: - -Audio and control signals throughout STK use a floating-point data type, StkFloat, 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 stk::Noise class outputs random floating-point numbers in the range +/-1.0. The computation of such values occurs in the stk::Noise::tick() function. The following program will generate 20 random floating-point (StkFloat) values in the range -1.0 to +1.0: - -\code -#include "Noise.h" -using namespace stk; - -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 tick() functions that 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 one or more overloaded tick() functions that can be used for vectorized computations, as shown in the next example. - -\code -#include "Noise.h" -using namespace stk; - -int main() -{ - StkFrames output(20, 1); // initialize StkFrames to 20 frames and 1 channel (default: interleaved) - Noise noise; - - noise.tick( output ); - for ( unsigned int i=0; iMain tutorial page]   [Next tutorial] -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/header.html b/source/StkUGens/stk-4.4.4/doc/doxygen/header.html deleted file mode 100644 index 3504a3d5b9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/header.html +++ /dev/null @@ -1,10 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/header.tex b/source/StkUGens/stk-4.4.4/doc/doxygen/header.tex deleted file mode 100644 index 4a1ea8146f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/header.tex +++ /dev/null @@ -1,31 +0,0 @@ -\documentclass[letter]{book} -\usepackage{makeidx} -\usepackage{fancyhdr} -\usepackage{graphicx} -\usepackage{float} -\usepackage{alltt} -\usepackage{doxygen} -\usepackage{hyperref} -\makeindex -\setcounter{tocdepth}{1} -\setlength{\footrulewidth}{0.4pt} -\begin{document} -\begin{titlepage} -\vspace*{7cm} -\begin{center} -{\Large User Manual}\\ -\vspace*{0.5cm} -{\Large The Synthesis ToolKit in C++}\\ -\vspace*{1cm} -{\large by Perry R. Cook and Gary P. Scavone}\\ -\vspace*{0.5cm} -{\small \copyright 1995--2007}\\ -\end{center} -\end{titlepage} -\clearemptydoublepage -\pagenumbering{roman} -\rfoot[\fancyplain{}{\bfseries\scriptsize The Synthesis ToolKit in C++ by Perry R. Cook and Gary P. Scavone, \copyright~1995--2007}]{} -\lfoot[]{\fancyplain{}{\bfseries\scriptsize The Synthesis ToolKit in C++ by Perry R. Cook and Gary P. Scavone, \copyright~1995--2007}} -\tableofcontents -\clearemptydoublepage -\pagenumbering{arabic} diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/hello.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/hello.txt deleted file mode 100644 index e6cceaa103..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/hello.txt +++ /dev/null @@ -1,94 +0,0 @@ -/*! \page hello Hello Sine! - -We'll continue our introduction to the Synthesis ToolKit with a simple -sine-wave oscillator program. STK provides two different classes for -sine-wave generation. We will first look at a generic waveform -oscillator class, stk::FileLoop, that 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 -stk::FileWvOut to write the result to a 16-bit, WAV formatted audio file. - -\code - -// sineosc.cpp - -#include "FileLoop.h" -#include "FileWvOut.h" -using namespace stk; - -int main() -{ - // Set the global sample rate before creating class instances. - Stk::setSampleRate( 44100.0 ); - - FileLoop input; - FileWvOut output; - - // Load the sine wave file. - input.openFile( "rawwaves/sinewave.raw", true ); - - // Open a 16-bit, one-channel WAV formatted output file - output.openFile( "hellosine.wav", 1, FileWrite::FILE_WAV, Stk::STK_SINT16 ); - - input.setFrequency( 440.0 ); - - // Run the oscillator for 40000 samples, writing to the output file - for ( int i=0; i<40000; i++ ) - output.tick( input.tick() ); - - return 0; -} -\endcode - -stk::FileLoop is a subclass of stk::FileWvIn, 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. -stk::FileWvIn provides interpolating, read-once ("oneshot") -functionality, as well as methods for setting the read rate and read -position. - -stk::FileWvIn provides a "tick level" and interpolating interface to -the stk::FileRead class. Likewise, stk::FileWvOut provides a "tick -level" interface to the stk::FileWrite class. stk::FileRead and -FileWrite both support 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. stk::FileWvOut does not currently offer -data interpolation functionality. - -A number of STK parent classes, including stk::WvIn, stk::WvOut, -stk::Instrmnt, stk::Generator, and stk::Effect, (and some or all of -their subclasses) support multi-channel sample frames. If a -single-sample version of the tick() function is called for -these classes, a full sample frame is computed but only a single value -is either input and/or output. For example, if the single-sample -tick() function is called for subclasses of stk::WvOut, the -sample argument is written to all channels in the one computed frame. -For classes returning values, an optional \c channel argument -specifies which channel value is returned from the computed frame (the -default is always channel 0). To input and/or output multichannel data -to these classes, the overloaded tick() functions taking -StkFrames reference arguments should be used. - -Nearly all STK classes inherit from the stk::Stk base class. Stk -provides a static sample rate that 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 that 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. - -[Main tutorial page]   [Next tutorial] -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/images/ccrma.gif b/source/StkUGens/stk-4.4.4/doc/doxygen/images/ccrma.gif deleted file mode 100644 index f8a138538a87e78406e2269977d110062b1f12ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8305 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 -

Perry R. Cook & Gary P. Scavone

-\endhtmlonly - -The Synthesis ToolKit in C++ (STK) is a set of open source -audio signal processing and algorithmic synthesis classes written in -the C++ programming language. STK was designed to facilitate rapid -development of music synthesis and audio processing software, with an -emphasis on cross-platform functionality, realtime control, ease of -use, and educational example code. The Synthesis ToolKit is extremely -portable (it's mostly platform-independent C and C++ code), and it's -completely user-extensible (all source included, no unusual libraries, -and no hidden drivers). We like to think that this increases the -chances that our programs will still work in another 5-10 years. In -fact, the ToolKit has been working continuously for nearly 15 years -now. STK currently runs with realtime support (audio and MIDI) on -Linux, Macintosh OS X, and Windows computer platforms. Generic, -non-realtime support has been tested under NeXTStep, Sun, and other -platforms and should work with any standard C++ compiler. - -- \ref information -- \ref classes -- \ref download -- \ref usage -- \ref maillist -- \ref system -- \ref links -- \ref faq -- \ref tutorial - -*/ - -

- -STK is a registered trademark of Analytical Graphics, Inc., 40 General Warren Blvd., Malvern, PA 19355, the manufacturer of the Satellite Tool Kit® (STK®) 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. - - diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/information.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/information.txt deleted file mode 100644 index 738d91d452..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/information.txt +++ /dev/null @@ -1,133 +0,0 @@ -/*! \page information General Information - -

References

-
    -
  • ICMC2005 Paper
  • -
    -A paper by Gary and Perry detailing recent updates to the Synthesis ToolKit in C++. -

    -

  • ICMC99 Paper
  • -
    -A not-so-recent paper by Perry and Gary about the Synthesis ToolKit in C++. -

    -

  • Book Chapter: Audio Anecdotes
  • -
    -Here's a link to a book that includes an chapter on STK. -
- - -

What is the Synthesis ToolKit?

- -The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. The Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (all source included, no unusual libraries, and no hidden drivers). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 15 years now. STK currently runs with realtime support (audio and MIDI) on Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler. - -The Synthesis ToolKit is free. The only parts of the Synthesis ToolKit that are platform-dependent concern real-time audio and MIDI input and output, and that is taken care of with a few special classes. The interface for MIDI input and the simple 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). - - -

What the Synthesis ToolKit is not.

- -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 Tcl/Tk (that is freely distributed for all the supported ToolKit platforms). A number of Tcl/Tk GUI scripts are distributed with the ToolKit release. For control, the Synthesis Toolkit uses raw MIDI (on supported platforms), and SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like text message synthesis control format). - -

A brief history of the Synthesis ToolKit in C++.

- -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 Princeton Sound Kitchen, -Perry Cook's home page -at Princeton, Gary -Scavone's home page at McGill University, and the Synthesis ToolKit -home page. 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 PeRColate. Help on -real-time sound and MIDI has been provided over the years by Tim -Stilson, Bill Putnam, and Gabriel Maldonado. - -

Legal and Ethical 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, it would be nice if you would share. If you make -compositions with it, put us in the program notes. - -Some of the concepts are covered by various patents, some known to us -and likely others that 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. - -

License

- -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -Any person wishing to distribute modifications to the Software is -asked to send the modifications to the original developer so that they -can be incorporated into the canonical version. This is, however, not -a binding provision of this license. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -

Disclaimer

- -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 very weird behavior that also depends on the particular CPU and OS. Let us know about bugs you find and we'll do our best to correct them. - -

Perry's Notes From the Original Distribution of STK

- -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. - -
    -
  1. I needed to port many of the things I've done into something that is generic enough to port further to different machines.
  2. - -
  3. 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.)
  4. - -
  5. The classic difficulties most people have in trying to implement physical models are: - -
      -
    • They have trouble understanding the papers, and/or in turning the theory into practice.
    • - -
    • The physical model instruments are a pain to get to oscillate, and coming up with stable and meaningful parameter values is required to get the models to work at all.
    • -
    - -This set of C++ unit generators and instruments might help to diminish the scores of emails I get asking what to do with those block diagrams I put in my papers.
  6. - -
  7. I wanted to try some new stuff with modal synthesis, and implement some classic FM patches as well.
  8. - -
  9. 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.
  10. - -
  11. More rationalizations to follow ...
  12. -
- -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/instruments.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/instruments.txt deleted file mode 100644 index 9ce7852126..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/instruments.txt +++ /dev/null @@ -1,19 +0,0 @@ -/*! \page instruments Instruments - -The ToolKit comes with a wide variety of synthesis algorithms, all of which inherit from the stk::Instrmnt class. In this example, we'll fire up an instance of the stk::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 that are continuously excited (e.g., stk::Clarinet, stk::BeeThree) will continue to sound until stopped with a noteOff(). Impulsively excited instrument sounds (e.g., stk::Plucked, stk::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. - -[Main tutorial page]   [Next tutorial] -*/ - diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/links.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/links.txt deleted file mode 100644 index 724e171a2c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/links.txt +++ /dev/null @@ -1,25 +0,0 @@ -/*! \page links Miscellaneous Links - -- The %RtAudio WWW site - -- The %RtMidi WWW site - -- MoMu-Stk: A lightly modified version of STK that supports the iPhone platform (iPhone, iPad, iPod Touches) - -- StkX: A Cocoa STK Framework for Mac OS X by Woon Seung Yeo - -- Mobile STK: A port of STK for mobile devices by Georg Essl and Michael Rohs - -- ChucK: Concurrent, On-the-fly Audio Programming Language using STK unit generators - -- Kern Scores: A Library of Electronic Musical Scores (with automatic conversion to SKINI format) - -- MIDI to SKINI file converter by Craig Sapp - -- Kern Score to SKINI file converter by Craig Sapp - -- PeRColate: A Port of STK for Max/MSP - -- AUStk: a demo of integration of STK instruments into an AudioUnit by Airy Andre - -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/maillist.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/maillist.txt deleted file mode 100644 index b49182dd6a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/maillist.txt +++ /dev/null @@ -1,14 +0,0 @@ -/*! \page maillist The Mail List - -An STK 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. -

-For answers to frequently asked questions, check the list archives. -

-To join send a message to <stk-request@ccrma.stanford.edu> -with the contents: subscribe - -

-To be removed from the list send a message to <stk-request@ccrma.stanford.edu> -with the contents: unsubscribe - -*/ \ No newline at end of file diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/multichannel.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/multichannel.txt deleted file mode 100644 index f2ba6ebc55..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/multichannel.txt +++ /dev/null @@ -1,30 +0,0 @@ -/*! \page multichannel Multi-Channel I/O - -The ToolKit stk::WvIn and stk::WvOut classes (and their subclasses) support multi-channel audio data input and output. Several other abstract base classes, such as stk::Instrmnt, stk::Generator, and stk::Effect, also support multi-channel computations though not all of their subclasses produce or take multi-channel data. 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. For classes supporting multi-channel data, -one must distinguish the tick() functions taking or producing -single \c StkFloat arguments from those taking stk::StkFrames& arguments. If -a single-sample version of the tick() function is called for -these classes, a full sample frame is computed but only a single value -is either input and/or output. For example, if the single-sample -tick() function is called for subclasses of WvOut, the sample -argument is written to all channels in the one computed frame. For -classes returning values, an optional \c channel argument specifies -which channel value is returned from the computed frame (the default -is always channel 0). To input and/or output multichannel data to -these classes, the overloaded tick() functions taking -StkFrames reference arguments should be used. - -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 stk::FileWvOut 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 - -[Main tutorial page]   [Next tutorial] -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/polyvoices.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/polyvoices.txt deleted file mode 100644 index 405da76c7d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/polyvoices.txt +++ /dev/null @@ -1,22 +0,0 @@ -/*! \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 stk::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 "group" number. All sounding instrument outputs are summed and returned via the tick() function. The stk::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 stk::Voicer interrupts the oldest sounding voice. The user is responsible for creating and deleting all instrument instances. - -In the following example, we modify the controlbee.cpp program to make use of three stk::BeeThree instruments, all controlled using a stk::Voicer. - -\include threebees.cpp - -We have written this program to accept control messages from \c STDIN. Assuming the program is compiled as threebees, the three-voice SKINI scorefile bachfugue.ski (located in the scores directory with the examples) can be redirected to the program as: - -\code -threebees < scores/bachfugue.ski -\endcode - -For more fun, surf to Kern Scores for a huge assortment of other scorefiles that can be downloaded in the SKINI format. - -Another easy extension would be to add the \c stk::Messager::startMidiInput() function to the program and then play the instruments via a MIDI keyboard. - -[Main tutorial page] -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/realtime.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/realtime.txt deleted file mode 100644 index 63cc6a8b7a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/realtime.txt +++ /dev/null @@ -1,49 +0,0 @@ -/*! \page realtime Realtime Audio (blocking) - -In this section, we modify the sineosc.cpp program in order -to send the output to the default audio playback device on your -computer system. We also make use of the stk::SineWave class as a -sine-wave oscillator. stk::SineWave computes an internal, static sine-wave -table when its first instance is created. Subsequent instances make -use of the same table. The default table length, specified in -SineWave.h, is 2048 samples. - -\include rtsine.cpp - -The class stk::RtWvOut is a protected subclass of stk::WvOut. A number of -optional constructor arguments can be used to fine tune its -performance for a given system. stk::RtWvOut provides a "single-sample", -blocking interface to the RtAudio class. Note that stk::RtWvOut (as well -as the stk::RtWvIn class described below) makes use of RtAudio's callback -input/output functionality by creating a large ring-buffer into which -data is written. These classes should not be used when low-latency -and robust performance is necessary - -Though not used here, an stk::RtWvIn class exists as well that can be used -to read realtime audio data from an input device. See the -record.cpp example program in the examples project -for more information. - -It may be possible to use an instance of stk::RtWvOut and an instance of -stk::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 RtAudio to achieve this behavior, as described in the next section. -See the effects project or the duplex.cpp example -program in the examples project for more information. - -When using any realtime STK class (RtAudio, stk::RtWvOut, stk::RtWvIn, RtMidi, stk::InetWvIn, stk::InetWvOut, stk::Socket, stk::UdpSocket, stk::TcpServer, stk::TcpClient, and stk::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 Generator.cpp SineWave.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 Generator.cpp SineWave.cpp WvOut.cpp RtWvOut.cpp RtAudio.cpp \ - rtsine.cpp -lpthread -framework CoreAudio -framework CoreMIDI -framework CoreFoundation -\endcode - -[Main tutorial page]   [Next tutorial] -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/skini.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/skini.txt deleted file mode 100644 index 9509295202..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/skini.txt +++ /dev/null @@ -1,226 +0,0 @@ -/*! \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. - -\code - Too good to be true? - Have control and read it too? - A SKINI haiku. -\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. - -\section compatibility MIDI Compatibility - -SKINI was designed to be MIDI compatible wherever possible, and extend MIDI in incremental, then maybe profound ways. - -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 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 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? - -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. - -\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 \c 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. - -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 intelligent 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 \c -SKINI.tbl. - -The other important file used by SKINI is \c 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 Files Used To Implement SKINI - -Skini is a C++ class 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. - -\c SKINI.msg should be included by anything wanting to use the Skini 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. - -\c SKINI.tbl is used only by the Skini parser object (Skini.cpp). In the file \c 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: - -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. - -- 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 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. - -- All remaining fields are specified in the \c 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: - -\code - /* Howdy!!! Welcome to SKINI, by P. Cook 1999 - - NoteOn 0.000082 2 55 82 - NoteOff 1.000000 2 55 0 - NoteOn 0.000082 2 69 82 - StringDetune 0.100000 2 10 - StringDetune 0.100000 2 30 - StringDetune 0.100000 2 50 - NoteOn 0.000000 2 69 82 - StringDetune 0.100000 2 40 - StringDetune 0.100000 2 22 - StringDetune 0.100000 2 12 - // - StringDamping 0.000100 2 0.0 - NoteOn 0.000082 2 55 82 - NoteOn 0.200000 2 62 82 - NoteOn 0.100000 2 71 82 - NoteOn 0.200000 2 79 82 - NoteOff 1.000000 2 55 82 - NoteOff 0.000000 2 62 82 - NoteOff 0.000000 2 71 82 - NoteOff 0.000000 2 79 82 - StringDamping =4.000000 2 0.0 - NoteOn 0.000082 2 55 82 - NoteOn 0.200000 2 62 82 - NoteOn 0.100000 2 71 82 - NoteOn 0.200000 2 79 82 - NoteOff 1.000000 2 55 82 - NoteOff 0.000000 2 62 82 - NoteOff 0.000000 2 71 82 - NoteOff 0.000000 2 79 82 -\endcode - -\section table The SKINI.tbl File and Message Parsing: - -The \c SKINI.tbl file contains an array of structures which are accessed by the parser object Skini.cpp. The struct is: - -\code -struct SKINISpec { - char messageString[32]; - long type; - long data2; - long data3; -}; -\endcode - -so an assignment of one of these structs looks like: - -\code - MessageStr$ ,type, data2, data3, -\endcode - -type is the message type sent back from the SKINI line parser. - -data 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. - -- 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_STR : only valid in final field. This allows (nearly) arbitrary message types to be supported by simply scanning the string to EOL (End Of Line) and then passing it to a more intelligent handler. For example, MIDI SYSEX (system exclusive) messages can be read as space-delimited integers into the 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. - -Each individual SKINI message is parsed and saved to a Skini::Message structure of the form: -\code - struct Message { - long type; /*!< The message type, as defined in SKINI.msg. */ - long channel; /*!< The message channel (not limited to 16!). */ - StkFloat time; /*!< The message time stamp in seconds (delta or absolute). */ - std::vector floatValues; /*!< The message values read as floats (values are type-specific). */ - std::vector intValues; /*!< The message values read as ints (number and values are type-specific). */ - std::string remainder; /*!< Any remaining message data, read as ascii text. */ - }; -\endcode - -Here's a couple of lines from the \c SKINI.tbl file - -\code - {"NoteOff" , __SK_NoteOff_, SK_DBL, SK_DBL}, - {"NoteOn" , __SK_NoteOn_, SK_DBL, SK_DBL}, - - {"ControlChange" , __SK_ControlChange_, SK_INT, SK_DBL}, - {"Volume" , __SK_ControlChange_, __SK_Volume_ , SK_DBL}, - - {"StringDamping" , __SK_ControlChange_, __SK_StringDamping_, SK_DBL}, - {"StringDetune" , __SK_ControlChange_, __SK_StringDetune_, SK_DBL}, -\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 \c 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 either as double-precision \c floats or as long ints, depending on the format specified in \c SKINI.tbl, and saved to the corresponding C++ vector variables in the Skini::Message structure (either \c floatValues or \c intValues). Floating-point values are also cast to ints (and vice-versa) and stored to their respective variables. For example, an expected integer value of 64 will also be saved as 64.0 in the corresponding \c floatValues variable of the Skini::Message structure. 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 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 - ControlChange 0.000000 2 7 64.1 - Volume 0.000000 2 64.1 -\endcode - -I like the second 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. - -\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. - -\code - Skini score; - Skini::Message message; - instrument = new Mandolin(50.0); - score.setFile( argv[1] ); - while ( score.nextMessage( message ) != 0 ) { - tempDouble = message.time; - if (tempDouble < 0) { - tempDouble = - tempDouble; - tempDouble = tempDouble - output.getTime(); - if (tempDouble < 0) { - printf("Bad News Here!!! Backward Absolute Time Required.\n"); - tempDouble = 0.0; - } - } - tempLong = (long) ( tempDouble * Stk::sampleRate() ); - for ( i=0; itick() ); - } - - tempDouble3 = message.floatValues[1] * NORM_MIDI; - if ( message.type == __SK_NoteOn_ ) { - if ( tempDouble3 == 0.0 ) { - tempDouble3 = 0.5; - instrument->noteOff( tempDouble3 ); - } - else { - tempLong = message.intValues[0]; - tempDouble2 = Midi2Pitch[tempLong]; - instrument->noteOn( tempDouble2, tempDouble3 ); - } - } - else if ( message.type == __SK_NoteOff_ ) { - instrument->noteOff( tempDouble3 ); - } - else if ( message.type == __SK_ControlChange_ ) { - tempLong = message.intValues[0]; - instrument->controlChange( tempLong, tempDouble3 ); - } - } -\endcode - -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 "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. - -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/system.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/system.txt deleted file mode 100644 index e376db5ea8..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/system.txt +++ /dev/null @@ -1,35 +0,0 @@ -/*! \page system System Requirements - -General: -

    -
  • A MIDI interface to use MIDI input/output controls. (NOTE: This may be built into the soundcard on your computer.)
  • -
  • Tcl/Tk 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).
  • -
- -Linux (specific): -
    -
  • A soundcard to use realtime audio input/output capabilities. In order to use the effects project, the soundcard and drivers must support full duplex mode.
  • -
  • ALSA device drivers and library for realtime sound and MIDI input/output.
  • -
  • OSS device drivers (version 4.0 and higher only) can be used for audio input/output, but MIDI support requires the ALSA library to compile.
  • -
- -Macintosh OS X (specific): -
    -
  • A C++ compiler is not installed by default with OS X. It is necessary to download the Developer Kit from the Apple WWW site in order to compile STK or load it from the installation CD-ROM.
  • -
  • If you experience frequent audio input/output "glitches", try increasing the RT_BUFFER_SIZE specified in Stk.h.
  • -
  • The tcl/tk interpreter does not ship by default with OS X and must be downloaded from the internet. The latest Tcl/Tk Aqua distribution (http://www.apple.com/downloads/macosx/unix_open_source/tcltk.html) has been successfully tested on 10.2 and 10.3 systems. The default installation will place a link to the wish interpretor at /usr/bin/wish. - -It appears that socket support in Tcl/Tk uses the Nagle algorithm, which produces poor response between changes made in the tcl/tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script.
  • - -
- -Windows95/98/2000/XP/7 (specific): -
    -
  • A soundcard to use realtime audio input/output capabilities. In order to use the effects project, the soundcard and drivers must support full duplex mode.
  • -
  • DirectX 5.0 (or higher) runtime libraries.
  • -
  • For compiling the source (if not already in your system):
    • dsound.h header file (DirectX 6.1) - put somewhere in your header search path
    • dsound.lib library file (DirectX 6.1) - put somewhere in your library search path
  • -
- -

- -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/tutorial.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/tutorial.txt deleted file mode 100644 index 0123b85097..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/tutorial.txt +++ /dev/null @@ -1,26 +0,0 @@ -/*! \page tutorial Tutorial - -The Synthesis ToolKit is a set of C++ classes. In order to go beyond the simple example programs we provide, it is necessary to know some basics about programming in C and C++. STK's "target audience" includes people who: -

    -
  • want to create audio DSP and/or synthesis programs
  • -
  • want to use our unit generators and input/output routines rather than code their own
  • -
  • want to learn about synthesis and processing algorithms
  • -
  • wish to teach real-time synthesis and processing and wish to use some of our classes and examples
  • -
- -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. - --# \ref fundamentals --# \ref hello --# \ref compile --# \ref filtering --# \ref realtime --# \ref crealtime --# \ref instruments --# \ref controlin --# \ref multichannel --# \ref polyvoices - -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/doxygen/usage.txt b/source/StkUGens/stk-4.4.4/doc/doxygen/usage.txt deleted file mode 100644 index f22420ad39..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/doxygen/usage.txt +++ /dev/null @@ -1,203 +0,0 @@ -/*! \page usage Usage Documentation - -- \ref directory -- \ref compiling -- \ref debug -- \ref control -- \ref voices -- \ref nort -- \ref rt -- \ref tcl -- \ref midi -- \ref polyphony - -
- -\section directory Directory Structure: - -The top level distribution contains the following directories: - -
    -
  • The src directory contains the source .cpp files for all the STK unit generator and algorithm classes.
  • - -

  • The include directory contains the header files for all the STK unit generator and algorithm classes.
  • - -

  • The rawwaves directory contains various raw, monophonic, 16-bit, big-endian, 22050 Hz soundfiles used with the STK classes.
  • - -

  • The doc directory contains documentation about STK.
  • - -

  • The projects directory contains various demo and example STK programs.
  • -

- -This release of STK comes with four separate "project" directories: - -
    -
  1. The demo project is used to demonstrate nearly all of the STK instruments. The demo program has been written to allow a variety of control input and sound data output options. Simple graphical user interfaces (GUIs) are also provided.

  2. - -
  3. The effects project demonstrates realtime duplex mode (simultaneous audio input and output) operation, when available, as well as various delay-line based effects algorithms.

  4. - -
  5. The ragamatic project is just cool. Fire it up and be enlightened.

  6. - -
  7. The eguitar project demonstrates how to make an electric guitar with feedback and distortion.

  8. - -
  9. The examples project contains several simple programs that demonstrate audio input/output, including the audio internet streaming classes, as well as most of the tutorial programs.
  10. -
- -\section compiling Compiling: - -
    -
  • Windows95/98/2000/XP/7: Realtime support is available using either DirectSound or ASIO audio drivers. For DirectSound support, use the __WINDOWS_DS__ preprocessor definition and link with the dsound.lib, winmm.lib, and Wsock32.lib libraries. For 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. In addition, the __LITTLE_ENDIAN__ and __WINDOWS_MM__ preprocessor definitions are necessary for all Windows systems (RtMidi uses the Windows MultiMedia MIDI API). Fairly old Visual C++ project files are provided in each project directory, though they may not work on newer versions of MSVS. As well, the MinGW compiler is supported (see below). It is important to link with the non-debug libraries when compiling "release" program versions and debug libraries when compiling "debug" program versions.
  • - -
  • Unix (and MinGW) Systems: A GNU configure shell script is included in the distribution for unix-based systems. From the top-level distribution directory, type './configure' and the script will create Makefiles in each project directory specific to the characteristics of the host computer. Then from within any given project directory (example demo), type 'make' to compile the project. In addition, an STK library can be compiled from within the src directory. - -Several options can be supplied to the configure script to customize the build behavior: -
      -
    • --disable-realtime to only compile generic non-realtime classes
    • -
    • --enable-debug to enable various debug output
    • -
    • --with-alsa to choose native ALSA API support (default, linux only)
    • -
    • --with-oss to choose native OSS audio API support (linux only, no native OSS MIDI support)
    • -
    • --with-jack to choose native JACK API support (linux and Macintosh OS-X)
    • -
    • --with-core to choose Core Audio API support (Macintosh OS-X)
    • -
    -

    -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: -\code -./configure RAWWAVE_PATH="/home/gary/rawwaves/" -./configure INCLUDE_PATH="/home/gary/include/" -\endcode - -For novice STK users, the default configuration should be adequate. -

- -For those who wish to create their own system-specific Makefiles: -
    -
  • Linux: Realtime audio support is enabled with either the __LINUX_ALSA__, __UNIX_JACK__, and/or __LINUX_OSS__ 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 __LINUX_ALSASEQ__ preprocessor definition must be included for MIDI support. Note that native OSS MIDI support no longer exists in RtMidi. If the __LINUX_OSS__ preprocessor definition is specified, only OSS (version 4.0) audio support will be compiled and RtMidi will still be compiled using the ALSA API (assuming the __LINUX_ALSASEQ__ definition is defined). For this reason, STK now requires the asound library for realtime support. Realtime programs must also link with the pthread library. In addition, the __LITTLE_ENDIAN__ preprocessor definition is necessary if compiling on a little-endian system. See the README-Linux file for further system configuration information.
  • - -
  • Macintosh OS X: Realtime support is enabled with the __MACOSX_CORE__ and __UNIX_JACK__ preprocessor definitions, which incorporate the CoreAudio audio/MIDI API and/or the JACK API. Realtime programs must also link with the pthread library and the CoreAudio, CoreMIDI, and CoreFoundation frameworks (for Core Audio support) and/or the JACK library. See the README-MacOSX file for further system configuration information.
  • - -
  • Generic (non-realtime): Most STK classes are operating system independent 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 __LITTLE_ENDIAN__ preprocessor definition to your compiler. The demo 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 cannot 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 effects, ragamatic, and most of the examples projects for non-realtime use.
  • -
- -\section debug Debugging: - -When developing applications with STK, it is recommended that you define the preprocessor definition _STK_DEBUG_ when compiling (or specify the --enable-debug option to the configure script). This will enable all levels of function argument and error checking within the STK classes. Without this definition, argument checking does not occur in functions that are expected to be called frequently in an iterative manner. - -\section control Control Data: - -All STK programs in this distribution take input control data in the form of SKINI 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: - -
    -
  1. Redirect or pipe SKINI scorefiles to an executable.
  2. -
  3. Pipe realtime SKINI input messages to an executable (not possible under Windows95/98).
  4. -
  5. Acquire realtime MIDI messages from a MIDI port on your computer.
  6. -
- -Tcl/Tk graphical user interfaces (GUI) are provided with this distribution that can generate realtime SKINI messages. Note that the Messager class allows multiple simultaneous socket client connections, together with MIDI and/or piped input. The Md2Skini program (in the demo directory) is mostly obsolete but can be used to create SKINI scorefiles from realtime MIDI input. - - -\section voices Demo: STK Instruments - -The demo project demonstrates the behavior of all the distributed STK instruments. The instruments available with this release include: -
    -
  • Clarinet: Pretty good physical model of the clarinet
  • -
  • BlowHole: A clarinet physical model with one tonehole and one register vent
  • -
  • Saxofony: A psuedo-conical bore reed instrument that sometimes sounds like a saxophone
  • -
  • Flute: Pretty good physical model of the flute
  • -
  • Brass: Not so bad physical model of a brass instrument
  • -
  • BlowBotl: A basic helmholtz resonator and air jet model
  • -
  • Bowed: Not hideous physical model of a bowed string instrument
  • -
  • Plucked: Yer basic plucked string physical model
  • -
  • StifKarp: A simple plucked, stiff string physical model
  • -
  • Sitar: A simple sitar/plucked string physical model
  • -
  • Mandolin: Two-string mandolin physical model
  • -
  • Rhodey: Rhodes-like electric piano FM synthesis model
  • -
  • Wurley: Wurlitzer-like electric piano FM synthesis model
  • -
  • TubeBell: FM synthesis model
  • -
  • HevyMetl: Distorted synthesizer FM synthesis model
  • -
  • PercFlut: Percussive flute-like FM synthesis model
  • -
  • BeeThree: Cheezy organ FM synthesis model
  • -
  • Moog: Swept filter sampler
  • -
  • FMVoices: Three-formant FM voice synthesis
  • -
  • VoicForm: Four-formant resonance filter voice synthesis
  • -
  • Resonate: Noise through a BiQuad filter
  • -
  • Drummer: Sampling synthesis
  • -
  • BandedWG: Banded waveguide meta-object for bowed bars, tibetan bowls, etc.
  • -
  • Shakers: Various stochastic event models of shaker instruments
  • -
  • ModalBar: Various four-resonance presets (marimba, vibraphone, etc...)
  • -
  • Mesh2D: Two-dimensional, rectilinear digital waveguide mesh
  • -
  • Whistle: Hybrid physical/spectral model of a police whistle
  • -
- -\section nort Demo: Non-Realtime Use - -See the information above with respect to compiling STK for non-realtime use. - -In non-realtime mode, it is assumed that input control messages are provided from a SKINI scorefile and that audio output is written to a soundfile (.snd, .wav, .aif, .mat, .raw). A number of SKINI scorefiles are provided in the scores directory of the demo project. Assuming a successful compilation of the demo program, typing: - -\code -demo BeeThree -ow myfile.wav -if scores/bookert.ski -\endcode - -from the demo directory will play the scorefile bookert.ski 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 ./ to the program name if your default shell setup is not set to look in the current directory). Typing demo without any arguments will provide a full program usage description. - - -\section rt Demo: Realtime Use - -STK realtime audio and MIDI input/output and realtime SKINI control input via socketing support is provided for Linux, Mac OS-X, and Windows95/98/2000/XP operating systems. STK realtime SKINI control input via piping is possible under Linux, Mac OS X, and Windows2000/XP only. -

-Control input and audio output options are typically specified as command-line arguments to STK programs. For example, the demo program is invoked as: - -\code -demo instrument flags -\endcode - -where instruments include those described above and flags can be any or all of: -

    -
  • -or for realtime audio output,
  • -
  • -ow \ for WAV soundfile output,
  • -
  • -os \ for SND (AU) soundfile output,
  • -
  • -om \ for MAT-file output,
  • -
  • -if \ for a SKINI formatted control file,
  • -
  • -ip for realtime SKINI control input via piping,
  • -
  • -im \ for MIDI control input (with optional port, -1 = virtual port where possible),
  • -
  • -s RATE to specify a sample rate,
  • -
  • -n NUMBER to specify multivoice polyphony
  • -
-The -ip flag must be used when piping 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 both input types simultaneously. - -Assuming a successful compilation of the demo program, typing: - -\code -demo BeeThree -or -if scores/bookert.ski -\endcode - -from the demo directory will play the scorefile bookert.ski using the STK BeeThree instrument and stream the resulting audio data in realtime to the audio output channel of your computer. Typing demo without any arguments will provide a full program usage description. - - -\section tcl Realtime Control Input using Tcl/Tk Graphical User Interfaces: - -There are a number of Tcl/Tk 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 wish). The Physical.bat script just implements the following command-line sequence: - -\code -wish < tcl/Physical.tcl | demo Clarinet -or -ip -\endcode - -\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 -im flag. Valid MIDI ports are numbered from 0 (default) and higher. On Linux and Macintosh OS-X systems, it is possible to open a virtual MIDI input port (that other software applications can connect to) by specifying a port identifier of -1. - -\section polyphony Polyphony: - -The demo program supports an arbitrary number of voices via the -n NUMBER 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 - -*/ diff --git a/source/StkUGens/stk-4.4.4/doc/hierarchy.txt b/source/StkUGens/stk-4.4.4/doc/hierarchy.txt deleted file mode 100644 index f1ccbb3269..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/hierarchy.txt +++ /dev/null @@ -1,179 +0,0 @@ -STK: A ToolKit of Audio Synthesis Classes and Instruments in C++ - -By Perry R. Cook and Gary P. Scavone, 1995-2012. - -STK Classes - See the HTML documentation in the html directory for complete information. - - - .- Generator - (Modulate, Noise, SingWave, Envelope, ADSR, Asymp, SineWave, Blit, BlitSaw, BlitSquare, Granulate) - | - |- Function - (BowTable, JetTable, ReedTable) - | - |- FileRead, FileWrite - | - |- WvIn - (FileWvIn, RtWvIn, InetWvIn) - | | - | FileLoop - | - |- WvOut - (FileWvOut, RtWvOut, TcpWvOut) - | - |- Filter - (OnePole, OneZero, TwoPole, TwoZero, PoleZero, Biquad, FormSwep, Delay, DelayL, DelayA, TapDelay) - | - |- RtAudio, RtMidi, Socket, Thread, Mutex - | | -Stk -| UdpSocket - | TcpServer - | TcpClient - | - |- StkFrames - | - |- Effect - (Echo, Chorus, PitShift, LentPitShift, PRCRev, JCRev, NRev, FreeVerb) - | - |- Voicer, Message, Skini, MidiFileIn, Phonemes, Sphere, Vector3D - | - |- Messager - | - |- Twang, Guitar - | - | .- FM - (HevyMetl, PercFlut, Rhodey, Wurley, TubeBell, BeeThree, FMVoices) - | | - | |- Modal - ModalBar - | | - | |- VoicForm - | | - | |- Sampler - Moog - | | - | |- Resonate - | | - | |- Mandolin - .- Instrmnt -| - |- Drummer - | - |- Clarinet, BlowHole, Saxofony, Flute, Brass, BlowBotl, Bowed, Plucked, StifKarp, Sitar - | - |- Shakers - | - |- BandedWG - | - |- Mesh2D - | - .- Whistle - - -*********** UNIT GENERATORS ************** - -Master Class: Stk.cpp Sample rate, byte-swapping, error handling functionality - -Sources: Generator.h Abstract base class for various source signal classes - Function.h Abstract base class for various input/output mapping classes - Envelope.cpp Linearly goes to target by rate - ADSR.cpp ADSR envelope - Asymp.cpp Exponentially approaches target - Noise.cpp Random number generator - SineWave.cpp Sinusoidal oscillator with internally computed static table - Blit.cpp Bandlimited impulse train - BlitSaw.cpp Bandlimited sawtooth generator - BlitSquare.cpp Bandlimited square wave generator - Granulate.cpp Granular synthesis class that processes a monophonic audio file - FileRead.cpp Audio file input class (no internal data storage) for RAW, WAV, SND (AU), AIFF, MAT-file files - WvIn.h Abstract base class for audio data input classes - FileWvIn.cpp Audio file input interface class with interpolation - FileLoop.cpp Wavetable looping (subclass of FileWvIn) - RtWvIn.cpp Realtime audio input class (subclass of WvIn) - InetWvIn.cpp Audio streaming (socket server) input class (subclass of WvIn) - -Sinks: FileWrite.cpp Audio file output class (no internal data storage) for RAW, WAV, SND (AU), AIFF, MAT-file files - WvOut.h Abstract base class for audio data output classes - FileWvOut.cpp Audio file output interface class to FileWrite - RtWvOut.cpp Realtime audio output class (subclass of WvOut) - InetWvOut.cpp Audio streaming (socket client) output class (subclass of WvOut) - -Filters: Filter.h Filter master class - Iir.h General infinite-impulse response filter - Fir.h General finite-impulse response filter - OneZero.cpp One zero filter - OnePole.cpp One pole filter - PoleZero.cpp One pole/one zero filter - TwoZero.cpp Two zero filter - TwoPole.cpp Two pole filter - BiQuad.cpp Two pole/two zero filter - FormSwep.cpp Sweepable biquad filter (goes to target by rate) - Delay.cpp Non-interpolating delay line class - DelayL.cpp Linearly interpolating delay line - DelayA.cpp Allpass interpolating delay line - TapDelay.cpp Multi-tap non-interpolating delay line class - -Non-Linear: JetTabl.h Cubic jet non-linearity - BowTabl.h x^(-3) Bow non-linearity - ReedTabl.h One breakpoint saturating reed non-linearity - -Derived: Modulate.cpp Periodic and random vibrato: WvIn, Noise, OnePole - SingWave.cpp Looping wave table with randomness: Modulate, FileLoop, Envelope - - -********** INSTRUMENTS AND ALGORITHMS ************** - -Each class is listed either with some of the unit generators it uses, -or in terms of the algorithm it implements. All inherit from Instrmnt, -which inherits from Stk. - -Simple.cpp Simple Instrument Pulse oscillator + resonant filtered noise -Plucked.cpp Basic Plucked String DelayA, OneZero, OnePole, Noise -Twang.cpp Not So Basic Pluck DelayL, DlineA, Fir, allows commuted synthesis -Mandolin.cpp Commuted Mandolin 2 Twangs -Guitar.cpp N-String Guitar N Twangs, bridge coupling, allows feedback and body filter -StifKarp.cpp Plucked String with Stiffness DelayA, DelayL, OneZero, BiQuad, Noise -Bowed.cpp So So Bowed String DelayL, BowTabl, OnePole, BiQuad, WaveLoop, ADSR -Brass.cpp Not So Bad Brass Instrument DelayA, BiQuad, PoleZero, ADSR, WaveLoop -Clarinet.cpp Pretty Good Clarinet DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop -BlowHole.cpp Clarinet w/ Tone & Vent Holes DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop, PoleZero -Saxofony.cpp A Faux Saxophone DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop -Flute.cpp Pretty Good Flute JetTabl, DelayL, OnePole, PoleZero, Noise, ADSR, WaveLoop -BlowBotl.cpp Blown Bottle JetTabl, BiQuad, PoleZero, Noise, ADSR, WaveLoop -BandedWG.cpp Banded Waveguide Meta-Object Delay, BowTabl, ADSR, BiQuad -Modal.cpp N Resonances Envelope, WaveLoop, BiQuad, OnePole -ModalBar.cpp Various presets 4 Resonance Models -FM.cpp N Operator FM Master ADSR, WaveLoop, TwoZero -HevyMetl.cpp Distorted FM Synthesizer 3 Cascade with FB Modulator -PercFlut.cpp Percussive Flute 3 Cascade Operators -Rhodey.cpp Rhodes-Like Electric Piano 2 Parallel Simple FMs -Wurley.cpp Wurlitzer Electric Piano 2 Parallel Simple FMs -TubeBell.cpp Classic FM Bell 2 Parallel Simple FMs -FMVoices.cpp 3 Formant FM Voice 3 Carriers Share 1 Modulator -VoicForm.cpp 4 Formant Voice Synthesis FormSwep, SingWave, OnePole, OneZero, Envelope, Noise -BeeThree.cpp Cheezy Additive Organ 4 Oscillators Additive -Sampler.cpp Sampling Synthesizer 5 each ADSR, WvIn, WaveLoop, OnePole -Moog.cpp Swept Filter Sampler with Swept Filter -Resonate.cpp Filtered Noise ADSR, BiQuad, Noise -Drummer.cpp Drum Synthesizer Bunch of WvIns, and OnePole -Shakers.cpp PhISM statistical model for shakers and real-world sound effects -Mesh2D.cpp Two-dimensional, rectilinear digital waveguide mesh. -Whistle.cpp Hybrid physical/spectral model of a police whistle. - -Effect.h Effects Processor Base Class -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 -PRCRev.cpp Dirt Cheap Reverb by Cook 2 allpass, 2 comb filters -FreeVerb.cpp Jezar at Dreampoint's FreeVerb 4 allpass, 8 lowpass comb filters -Flanger.cpp Flanger Effects Processor DelayL, WaveLoop -Chorus.cpp Chorus Effects Processor DelayL, WaveLoop -PitShift.cpp Cheap Pitch Shifter DelayL -LentPitShift.cpp Pitch Shifter based Lent Algorithm - - -*********** OTHER SUPPORT CLASSES AND FILES ************** - -RtAudio.cpp Multi-OS/API audio I/O routines -RtMidi.cpp Multi-OS/API MIDI I/O routines -Messager.cpp Pipe, socket, and MIDI control message handling -Voicer.cpp Multi-instrument voice manager - -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 - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/ADSR_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/ADSR_8h_source.html deleted file mode 100644 index 1f27a1d8b5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/ADSR_8h_source.html +++ /dev/null @@ -1,164 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

ADSR.h

00001 #ifndef STK_ADSR_H
-00002 #define STK_ADSR_H
-00003 
-00004 #include "Generator.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00022 /***************************************************/
-00023 
-00024 class ADSR : public Generator
-00025 {
-00026  public:
-00027 
-00029   enum {
-00030     ATTACK,   
-00031     DECAY,    
-00032     SUSTAIN,  
-00033     RELEASE,  
-00034     IDLE      
-00035   };
-00036 
-00038   ADSR( void );
-00039 
-00041   ~ADSR( void );
-00042 
-00044   void keyOn( void );
-00045 
-00047   void keyOff( void );
-00048 
-00050   void setAttackRate( StkFloat rate );
-00051 
-00053   void setAttackTarget( StkFloat target );
-00054 
-00056   void setDecayRate( StkFloat rate );
-00057 
-00059   void setSustainLevel( StkFloat level );
-00060 
-00062   void setReleaseRate( StkFloat rate );
-00063 
-00065   void setAttackTime( StkFloat time );
-00066 
-00068   void setDecayTime( StkFloat time );
-00069 
-00071   void setReleaseTime( StkFloat time );
-00072 
-00074   void setAllTimes( StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime );
-00075 
-00077   void setTarget( StkFloat target );
-00078 
-00080   int getState( void ) const { return state_; };
-00081 
-00083   void setValue( StkFloat value );
-00084 
-00086   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00087 
-00089   StkFloat tick( void );
-00090 
-00092 
-00099   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00100 
-00101  protected:  
-00102 
-00103   void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00104 
-00105   int state_;
-00106   StkFloat value_;
-00107   StkFloat target_;
-00108   StkFloat attackRate_;
-00109   StkFloat decayRate_;
-00110   StkFloat releaseRate_;
-00111   StkFloat releaseTime_;
-00112   StkFloat sustainLevel_;
-00113 };
-00114 
-00115 inline StkFloat ADSR :: tick( void )
-00116 {
-00117   switch ( state_ ) {
-00118 
-00119   case ATTACK:
-00120     value_ += attackRate_;
-00121     if ( value_ >= target_ ) {
-00122       value_ = target_;
-00123       target_ = sustainLevel_;
-00124              state_ = DECAY;
-00125     }
-00126     lastFrame_[0] = value_;
-00127     break;
-00128 
-00129   case DECAY:
-00130     if ( value_ > sustainLevel_ ) {
-00131       value_ -= decayRate_;
-00132       if ( value_ <= sustainLevel_ ) {
-00133         value_ = sustainLevel_;
-00134         state_ = SUSTAIN;
-00135       }
-00136     }
-00137     else {
-00138       value_ += decayRate_; // attack target < sustain level
-00139       if ( value_ >= sustainLevel_ ) {
-00140         value_ = sustainLevel_;
-00141         state_ = SUSTAIN;
-00142       }
-00143     }
-00144     lastFrame_[0] = value_;
-00145     break;
-00146 
-00147   case RELEASE:
-00148     value_ -= releaseRate_;
-00149     if ( value_ <= 0.0 ) {
-00150       value_ = 0.0;
-00151       state_ = IDLE;
-00152     }
-00153     lastFrame_[0] = value_;
-00154 
-00155   }
-00156 
-00157   return value_;
-00158 }
-00159 
-00160 inline StkFrames& ADSR :: tick( StkFrames& frames, unsigned int channel )
-00161 {
-00162 #if defined(_STK_DEBUG_)
-00163   if ( channel >= frames.channels() ) {
-00164     oStream_ << "ADSR::tick(): channel and StkFrames arguments are incompatible!";
-00165     handleError( StkError::FUNCTION_ARGUMENT );
-00166   }
-00167 #endif
-00168 
-00169   StkFloat *samples = &frames[channel];
-00170   unsigned int hop = frames.channels();
-00171   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00172     *samples = ADSR::tick();
-00173 
-00174   return frames;
-00175 }
-00176 
-00177 } // stk namespace
-00178 
-00179 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Asymp_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Asymp_8h_source.html deleted file mode 100644 index 1aca073f34..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Asymp_8h_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Asymp.h

00001 #ifndef STK_ASYMP_H
-00002 #define STK_ASYMP_H
-00003 
-00004 #include "Generator.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00031 /***************************************************/
-00032 
-00033 const StkFloat TARGET_THRESHOLD = 0.000001;
-00034 
-00035 class Asymp : public Generator
-00036 {
-00037  public:
-00038 
-00040   Asymp( void );
-00041 
-00043   ~Asymp( void );
-00044 
-00046   void keyOn( void );
-00047 
-00049   void keyOff( void );
-00050 
-00052 
-00058   void setTau( StkFloat tau );
-00059 
-00061   void setTime( StkFloat time );
-00062 
-00064   void setT60( StkFloat t60 );
-00065 
-00067   void setTarget( StkFloat target );
-00068 
-00070   void setValue( StkFloat value );
-00071 
-00073   int getState( void ) const { return state_; };
-00074 
-00076   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00077 
-00079   StkFloat tick( void );
-00080 
-00082 
-00089   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00090 
-00091  protected:
-00092 
-00093   void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00094 
-00095   StkFloat value_;
-00096   StkFloat target_;
-00097   StkFloat factor_;
-00098   StkFloat constant_;
-00099   int state_;
-00100 };
-00101 
-00102 inline StkFloat Asymp :: tick( void )
-00103 {
-00104   if ( state_ ) {
-00105 
-00106     value_ = factor_ * value_ + constant_;
-00107 
-00108     // Check threshold.
-00109     if ( target_ > value_ ) {
-00110       if ( target_ - value_ <= TARGET_THRESHOLD ) {
-00111         value_ = target_;
-00112         state_ = 0;
-00113       }
-00114     }
-00115     else {
-00116       if ( value_ - target_ <= TARGET_THRESHOLD ) {
-00117         value_ = target_;
-00118         state_ = 0;
-00119       }
-00120     }
-00121     lastFrame_[0] = value_;
-00122   }
-00123 
-00124   return value_;
-00125 }
-00126 
-00127 inline StkFrames& Asymp :: tick( StkFrames& frames, unsigned int channel )
-00128 {
-00129 #if defined(_STK_DEBUG_)
-00130   if ( channel >= frames.channels() ) {
-00131     oStream_ << "Asymp::tick(): channel and StkFrames arguments are incompatible!";
-00132     handleError( StkError::FUNCTION_ARGUMENT );
-00133   }
-00134 #endif
-00135 
-00136   StkFloat *samples = &frames[channel];
-00137   unsigned int hop = frames.channels();
-00138   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00139     *samples = Asymp::tick();
-00140 
-00141   return frames;
-00142 }
-00143 
-00144 } // stk namespace
-00145 
-00146 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/BandedWG_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/BandedWG_8h_source.html deleted file mode 100644 index 058f0aa573..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/BandedWG_8h_source.html +++ /dev/null @@ -1,129 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

BandedWG.h

00001 #ifndef STK_BANDEDWG_H
-00002 #define STK_BANDEDWG_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "DelayL.h"
-00006 #include "BowTable.h"
-00007 #include "ADSR.h"
-00008 #include "BiQuad.h"
-00009 
-00010 namespace stk {
-00011 
-00012 /***************************************************/
-00041 /***************************************************/
-00042 
-00043 const int MAX_BANDED_MODES = 20;
-00044 
-00045 class BandedWG : public Instrmnt
-00046 {
-00047  public:
-00049   BandedWG( void );
-00050 
-00052   ~BandedWG( void );
-00053 
-00055   void clear( void );
-00056 
-00058   void setStrikePosition( StkFloat position );
-00059 
-00061   void setPreset( int preset );
-00062 
-00064   void setFrequency( StkFloat frequency );
-00065 
-00067   void startBowing( StkFloat amplitude, StkFloat rate );
-00068 
-00070   void stopBowing( StkFloat rate );
-00071 
-00073   void pluck( StkFloat amp );
-00074 
-00076   void noteOn( StkFloat frequency, StkFloat amplitude );
-00077 
-00079   void noteOff( StkFloat amplitude );
-00080 
-00082   void controlChange( int number, StkFloat value );
-00083 
-00085   StkFloat tick( unsigned int channel = 0 );
-00086 
-00088 
-00095   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00096 
-00097  protected:
-00098 
-00099   bool doPluck_;
-00100   bool trackVelocity_;
-00101   int nModes_;
-00102   int presetModes_;
-00103   BowTable bowTable_;
-00104   ADSR     adsr_;
-00105   BiQuad   bandpass_[MAX_BANDED_MODES];
-00106   DelayL   delay_[MAX_BANDED_MODES];
-00107   StkFloat maxVelocity_;
-00108   StkFloat modes_[MAX_BANDED_MODES];
-00109   StkFloat frequency_;
-00110   StkFloat baseGain_;
-00111   StkFloat gains_[MAX_BANDED_MODES];
-00112   StkFloat basegains_[MAX_BANDED_MODES];
-00113   StkFloat excitation_[MAX_BANDED_MODES];
-00114   StkFloat integrationConstant_;
-00115   StkFloat velocityInput_;
-00116   StkFloat bowVelocity_;
-00117   StkFloat bowTarget_;
-00118   StkFloat bowPosition_;
-00119   StkFloat strikeAmp_;
-00120   int strikePosition_;
-00121 
-00122 };
-00123 
-00124 inline StkFrames& BandedWG :: tick( StkFrames& frames, unsigned int channel )
-00125 {
-00126   unsigned int nChannels = lastFrame_.channels();
-00127 #if defined(_STK_DEBUG_)
-00128   if ( channel > frames.channels() - nChannels ) {
-00129     oStream_ << "BandedWG::tick(): channel and StkFrames arguments are incompatible!";
-00130     handleError( StkError::FUNCTION_ARGUMENT );
-00131   }
-00132 #endif
-00133 
-00134   StkFloat *samples = &frames[channel];
-00135   unsigned int j, hop = frames.channels() - nChannels;
-00136   if ( nChannels == 1 ) {
-00137     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00138       *samples++ = tick();
-00139   }
-00140   else {
-00141     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00142       *samples++ = tick();
-00143       for ( j=1; j<nChannels; j++ )
-00144         *samples++ = lastFrame_[j];
-00145     }
-00146   }
-00147 
-00148   return frames;
-00149 }
-00150 
-00151 } // stk namespace
-00152 
-00153 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/BeeThree_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/BeeThree_8h_source.html deleted file mode 100644 index 720f27f9a2..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/BeeThree_8h_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

BeeThree.h

00001 #ifndef STK_BEETHREE_H
-00002 #define STK_BEETHREE_H
-00003 
-00004 #include "FM.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00040 /***************************************************/
-00041 
-00042 class BeeThree : public FM
-00043 {
-00044  public:
-00046 
-00049   BeeThree( void );
-00050 
-00052   ~BeeThree( void );
-00053 
-00055   void noteOn( StkFloat frequency, StkFloat amplitude );
-00056 
-00058   StkFloat tick( unsigned int channel = 0 );
-00059 
-00061 
-00068   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00069 
-00070  protected:
-00071 
-00072 };
-00073 
-00074 inline StkFloat BeeThree :: tick( unsigned int )
-00075 {
-00076   register StkFloat temp;
-00077 
-00078   if ( modDepth_ > 0.0 )   {
-00079     temp = 1.0 + ( modDepth_ * vibrato_.tick() * 0.1 );
-00080     waves_[0]->setFrequency( baseFrequency_ * temp * ratios_[0] );
-00081     waves_[1]->setFrequency( baseFrequency_ * temp * ratios_[1] );
-00082     waves_[2]->setFrequency( baseFrequency_ * temp * ratios_[2] );
-00083     waves_[3]->setFrequency( baseFrequency_ * temp * ratios_[3] );
-00084   }
-00085 
-00086   waves_[3]->addPhaseOffset( twozero_.lastOut() );
-00087   temp = control1_ * 2.0 * gains_[3] * adsr_[3]->tick() * waves_[3]->tick();
-00088   twozero_.tick( temp );
-00089 
-00090   temp += control2_ * 2.0 * gains_[2] * adsr_[2]->tick() * waves_[2]->tick();
-00091   temp += gains_[1] * adsr_[1]->tick() * waves_[1]->tick();
-00092   temp += gains_[0] * adsr_[0]->tick() * waves_[0]->tick();
-00093 
-00094   lastFrame_[0] = temp * 0.125;
-00095   return lastFrame_[0];
-00096 }
-00097 
-00098 inline StkFrames& BeeThree :: tick( StkFrames& frames, unsigned int channel )
-00099 {
-00100   unsigned int nChannels = lastFrame_.channels();
-00101 #if defined(_STK_DEBUG_)
-00102   if ( channel > frames.channels() - nChannels ) {
-00103     oStream_ << "BeeThree::tick(): channel and StkFrames arguments are incompatible!";
-00104     handleError( StkError::FUNCTION_ARGUMENT );
-00105   }
-00106 #endif
-00107 
-00108   StkFloat *samples = &frames[channel];
-00109   unsigned int j, hop = frames.channels() - nChannels;
-00110   if ( nChannels == 1 ) {
-00111     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00112       *samples++ = tick();
-00113   }
-00114   else {
-00115     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00116       *samples++ = tick();
-00117       for ( j=1; j<nChannels; j++ )
-00118         *samples++ = lastFrame_[j];
-00119     }
-00120   }
-00121 
-00122   return frames;
-00123 }
-00124 
-00125 } // stk namespace
-00126 
-00127 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/BiQuad_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/BiQuad_8h_source.html deleted file mode 100644 index c35eabb62b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/BiQuad_8h_source.html +++ /dev/null @@ -1,148 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

BiQuad.h

00001 #ifndef STK_BIQUAD_H
-00002 #define STK_BIQUAD_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class BiQuad : public Filter
-00021 {
-00022 public:
-00023 
-00025   BiQuad();
-00026 
-00028   ~BiQuad();
-00029 
-00031   void ignoreSampleRateChange( bool ignore = true ) { ignoreSampleRateChange_ = ignore; };
-00032 
-00034   void setCoefficients( StkFloat b0, StkFloat b1, StkFloat b2, StkFloat a1, StkFloat a2, bool clearState = false );
-00035 
-00037   void setB0( StkFloat b0 ) { b_[0] = b0; };
-00038 
-00040   void setB1( StkFloat b1 ) { b_[1] = b1; };
-00041 
-00043   void setB2( StkFloat b2 ) { b_[2] = b2; };
-00044 
-00046   void setA1( StkFloat a1 ) { a_[1] = a1; };
-00047 
-00049   void setA2( StkFloat a2 ) { a_[2] = a2; };
-00050 
-00052 
-00065   void setResonance( StkFloat frequency, StkFloat radius, bool normalize = false );
-00066 
-00068 
-00075   void setNotch( StkFloat frequency, StkFloat radius );
-00076 
-00078 
-00084   void setEqualGainZeroes( void );
-00085 
-00087   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00088 
-00090   StkFloat tick( StkFloat input );
-00091 
-00093 
-00101   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00102 
-00104 
-00112   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00113 
-00114  protected:
-00115 
-00116   virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00117 };
-00118 
-00119 inline StkFloat BiQuad :: tick( StkFloat input )
-00120 {
-00121   inputs_[0] = gain_ * input;
-00122   lastFrame_[0] = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
-00123   lastFrame_[0] -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
-00124   inputs_[2] = inputs_[1];
-00125   inputs_[1] = inputs_[0];
-00126   outputs_[2] = outputs_[1];
-00127   outputs_[1] = lastFrame_[0];
-00128 
-00129   return lastFrame_[0];
-00130 }
-00131 
-00132 inline StkFrames& BiQuad :: tick( StkFrames& frames, unsigned int channel )
-00133 {
-00134 #if defined(_STK_DEBUG_)
-00135   if ( channel >= frames.channels() ) {
-00136     oStream_ << "BiQuad::tick(): channel and StkFrames arguments are incompatible!";
-00137     handleError( StkError::FUNCTION_ARGUMENT );
-00138   }
-00139 #endif
-00140 
-00141   StkFloat *samples = &frames[channel];
-00142   unsigned int hop = frames.channels();
-00143   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00144     inputs_[0] = gain_ * *samples;
-00145     *samples = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
-00146     *samples -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
-00147     inputs_[2] = inputs_[1];
-00148     inputs_[1] = inputs_[0];
-00149     outputs_[2] = outputs_[1];
-00150     outputs_[1] = *samples;
-00151   }
-00152 
-00153   lastFrame_[0] = outputs_[1];
-00154   return frames;
-00155 }
-00156 
-00157 inline StkFrames& BiQuad :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00158 {
-00159 #if defined(_STK_DEBUG_)
-00160   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00161     oStream_ << "BiQuad::tick(): channel and StkFrames arguments are incompatible!";
-00162     handleError( StkError::FUNCTION_ARGUMENT );
-00163   }
-00164 #endif
-00165 
-00166   StkFloat *iSamples = &iFrames[iChannel];
-00167   StkFloat *oSamples = &oFrames[oChannel];
-00168   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00169   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00170     inputs_[0] = gain_ * *iSamples;
-00171     *oSamples = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
-00172     *oSamples -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
-00173     inputs_[2] = inputs_[1];
-00174     inputs_[1] = inputs_[0];
-00175     outputs_[2] = outputs_[1];
-00176     outputs_[1] = *oSamples;
-00177   }
-00178 
-00179   lastFrame_[0] = outputs_[1];
-00180   return iFrames;
-00181 }
-00182 
-00183 } // stk namespace
-00184 
-00185 #endif
-00186 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/BlitSaw_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/BlitSaw_8h_source.html deleted file mode 100644 index bf8fcbcfa0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/BlitSaw_8h_source.html +++ /dev/null @@ -1,129 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

BlitSaw.h

00001 #ifndef STK_BLITSAW_H
-00002 #define STK_BLITSAW_H
-00003 
-00004 #include "Generator.h"
-00005 #include <cmath>
-00006 #include <limits>
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00029 /***************************************************/
-00030 
-00031 class BlitSaw: public Generator
-00032 {
-00033  public:
-00035   BlitSaw( StkFloat frequency = 220.0 );
-00036 
-00038   ~BlitSaw();
-00039 
-00041   void reset();
-00042 
-00044   void setFrequency( StkFloat frequency );
-00045 
-00047 
-00059   void setHarmonics( unsigned int nHarmonics = 0 );
-00060 
-00062   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00063 
-00065   StkFloat tick( void );
-00066 
-00068 
-00075   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00076 
-00077  protected:
-00078 
-00079   void updateHarmonics( void );
-00080 
-00081   unsigned int nHarmonics_;
-00082   unsigned int m_;
-00083   StkFloat rate_;
-00084   StkFloat phase_;
-00085   StkFloat p_;
-00086   StkFloat C2_;
-00087   StkFloat a_;
-00088   StkFloat state_;
-00089 
-00090 };
-00091 
-00092 inline StkFloat BlitSaw :: tick( void )
-00093 {
-00094   // The code below implements the BLIT algorithm of Stilson and
-00095   // Smith, followed by a summation and filtering operation to produce
-00096   // a sawtooth waveform.  After experimenting with various approaches
-00097   // to calculate the average value of the BLIT over one period, I
-00098   // found that an estimate of C2_ = 1.0 / period (in samples) worked
-00099   // most consistently.  A "leaky integrator" is then applied to the
-00100   // difference of the BLIT output and C2_. (GPS - 1 October 2005)
-00101 
-00102   // A fully  optimized version of this code would replace the two sin 
-00103   // calls with a pair of fast sin oscillators, for which stable fast 
-00104   // two-multiply algorithms are well known. In the spirit of STK,
-00105   // which favors clarity over performance, the optimization has 
-00106   // not been made here.
-00107 
-00108   // Avoid a divide by zero, or use of a denormalized divisor 
-00109   // at the sinc peak, which has a limiting value of m_ / p_.
-00110   StkFloat tmp, denominator = sin( phase_ );
-00111   if ( fabs(denominator) <= std::numeric_limits<StkFloat>::epsilon() )
-00112     tmp = a_;
-00113   else {
-00114     tmp =  sin( m_ * phase_ );
-00115     tmp /= p_ * denominator;
-00116   }
-00117 
-00118   tmp += state_ - C2_;
-00119   state_ = tmp * 0.995;
-00120 
-00121   phase_ += rate_;
-00122   if ( phase_ >= PI ) phase_ -= PI;
-00123     
-00124   lastFrame_[0] = tmp;
-00125          return lastFrame_[0];
-00126 }
-00127 
-00128 inline StkFrames& BlitSaw :: tick( StkFrames& frames, unsigned int channel )
-00129 {
-00130 #if defined(_STK_DEBUG_)
-00131   if ( channel >= frames.channels() ) {
-00132     oStream_ << "BlitSaw::tick(): channel and StkFrames arguments are incompatible!";
-00133     handleError( StkError::FUNCTION_ARGUMENT );
-00134   }
-00135 #endif
-00136 
-00137 
-00138   StkFloat *samples = &frames[channel];
-00139   unsigned int hop = frames.channels();
-00140   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00141     *samples = BlitSaw::tick();
-00142 
-00143   return frames;
-00144 }
-00145 
-00146 } // stk namespace
-00147 
-00148 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/BlitSquare_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/BlitSquare_8h_source.html deleted file mode 100644 index 4cf24b87ed..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/BlitSquare_8h_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

BlitSquare.h

00001 #ifndef STK_BLITSQUARE_H
-00002 #define STK_BLITSQUARE_H
-00003 
-00004 #include "Generator.h"
-00005 #include <cmath>
-00006 #include <limits>
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00040 /***************************************************/
-00041 
-00042 class BlitSquare: public Generator
-00043 {
-00044  public:
-00046   BlitSquare( StkFloat frequency = 220.0 );
-00047 
-00049   ~BlitSquare();
-00050 
-00052   void reset();
-00053 
-00055 
-00058   void setPhase( StkFloat phase ) { phase_ = PI * phase; };
-00059 
-00061 
-00064   StkFloat getPhase() const { return phase_ / PI; };
-00065 
-00067   void setFrequency( StkFloat frequency );
-00068 
-00070 
-00082   void setHarmonics( unsigned int nHarmonics = 0 );
-00083 
-00085   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00086 
-00088   StkFloat tick( void );
-00089 
-00091 
-00098   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00099 
-00100  protected:
-00101 
-00102   void updateHarmonics( void );
-00103 
-00104   unsigned int nHarmonics_;
-00105   unsigned int m_;
-00106   StkFloat rate_;
-00107   StkFloat phase_;
-00108   StkFloat p_;
-00109   StkFloat a_;
-00110   StkFloat lastBlitOutput_;
-00111   StkFloat dcbState_;
-00112 };
-00113 
-00114 inline StkFloat BlitSquare :: tick( void )
-00115 {
-00116   StkFloat temp = lastBlitOutput_;
-00117 
-00118   // A fully  optimized version of this would replace the two sin calls
-00119   // with a pair of fast sin oscillators, for which stable fast 
-00120   // two-multiply algorithms are well known. In the spirit of STK,
-00121   // which favors clarity over performance, the optimization has 
-00122   // not been made here.
-00123 
-00124   // Avoid a divide by zero, or use of a denomralized divisor
-00125   // at the sinc peak, which has a limiting value of 1.0.
-00126   StkFloat denominator = sin( phase_ );
-00127   if ( fabs( denominator )  < std::numeric_limits<StkFloat>::epsilon() ) {
-00128     // Inexact comparison safely distinguishes betwen *close to zero*, and *close to PI*.
-00129     if ( phase_ < 0.1f || phase_ > TWO_PI - 0.1f )
-00130       lastBlitOutput_ = a_;
-00131     else
-00132       lastBlitOutput_ = -a_;
-00133   }
-00134   else {
-00135     lastBlitOutput_ =  sin( m_ * phase_ );
-00136     lastBlitOutput_ /= p_ * denominator;
-00137   }
-00138 
-00139   lastBlitOutput_ += temp;
-00140 
-00141   // Now apply DC blocker.
-00142   lastFrame_[0] = lastBlitOutput_ - dcbState_ + 0.999 * lastFrame_[0];
-00143   dcbState_ = lastBlitOutput_;
-00144 
-00145   phase_ += rate_;
-00146   if ( phase_ >= TWO_PI ) phase_ -= TWO_PI;
-00147 
-00148          return lastFrame_[0];
-00149 }
-00150 
-00151 inline StkFrames& BlitSquare :: tick( StkFrames& frames, unsigned int channel )
-00152 {
-00153 #if defined(_STK_DEBUG_)
-00154   if ( channel >= frames.channels() ) {
-00155     oStream_ << "BlitSquare::tick(): channel and StkFrames arguments are incompatible!";
-00156     handleError( StkError::FUNCTION_ARGUMENT );
-00157   }
-00158 #endif
-00159 
-00160   StkFloat *samples = &frames[channel];
-00161   unsigned int hop = frames.channels();
-00162   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00163     *samples = BlitSquare::tick();
-00164 
-00165   return frames;
-00166 }
-00167 
-00168 } // stk namespace
-00169 
-00170 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Blit_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Blit_8h_source.html deleted file mode 100644 index fcdeb33e58..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Blit_8h_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Blit.h

00001 #ifndef STK_BLIT_H
-00002 #define STK_BLIT_H
-00003 
-00004 #include "Generator.h"
-00005 #include <cmath>
-00006 #include <limits>
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00031 /***************************************************/
-00032 
-00033 class Blit: public Generator
-00034 {
-00035  public:
-00037   Blit( StkFloat frequency = 220.0 );
-00038 
-00040   ~Blit();
-00041 
-00043   void reset();
-00044 
-00046 
-00049   void setPhase( StkFloat phase ) { phase_ = PI * phase; };
-00050 
-00052 
-00055   StkFloat getPhase() const { return phase_ / PI; };
-00056 
-00058   void setFrequency( StkFloat frequency );
-00059 
-00061 
-00073   void setHarmonics( unsigned int nHarmonics = 0 );
-00074 
-00076   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00077 
-00079   StkFloat tick( void );
-00080 
-00082 
-00089   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00090 
-00091  protected:
-00092 
-00093   void updateHarmonics( void );
-00094 
-00095   unsigned int nHarmonics_;
-00096   unsigned int m_;
-00097   StkFloat rate_;
-00098   StkFloat phase_;
-00099   StkFloat p_;
-00100 
-00101 };
-00102 
-00103 inline StkFloat Blit :: tick( void )
-00104 {
-00105   // The code below implements the SincM algorithm of Stilson and
-00106   // Smith with an additional scale factor of P / M applied to
-00107   // normalize the output.
-00108 
-00109   // A fully optimized version of this code would replace the two sin
-00110   // calls with a pair of fast sin oscillators, for which stable fast
-00111   // two-multiply algorithms are well known. In the spirit of STK,
-00112   // which favors clarity over performance, the optimization has not
-00113   // been made here.
-00114 
-00115   // Avoid a divide by zero at the sinc peak, which has a limiting
-00116   // value of 1.0.
-00117   StkFloat tmp, denominator = sin( phase_ );
-00118   if ( denominator <= std::numeric_limits<StkFloat>::epsilon() )
-00119     tmp = 1.0;
-00120   else {
-00121     tmp =  sin( m_ * phase_ );
-00122     tmp /= m_ * denominator;
-00123   }
-00124 
-00125   phase_ += rate_;
-00126   if ( phase_ >= PI ) phase_ -= PI;
-00127 
-00128   lastFrame_[0] = tmp;
-00129          return lastFrame_[0];
-00130 }
-00131 
-00132 inline StkFrames& Blit :: tick( StkFrames& frames, unsigned int channel )
-00133 {
-00134 #if defined(_STK_DEBUG_)
-00135   if ( channel >= frames.channels() ) {
-00136     oStream_ << "Blit::tick(): channel and StkFrames arguments are incompatible!";
-00137     handleError( StkError::FUNCTION_ARGUMENT );
-00138   }
-00139 #endif
-00140 
-00141   StkFloat *samples = &frames[channel];
-00142   unsigned int hop = frames.channels();
-00143   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00144     *samples = Blit::tick();
-00145 
-00146   return frames;
-00147 }
-00148 
-00149 } // stk namespace
-00150 
-00151 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/BlowBotl_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/BlowBotl_8h_source.html deleted file mode 100644 index 914ec8b5d4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/BlowBotl_8h_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

BlowBotl.h

00001 #ifndef STK_BLOWBOTL_H
-00002 #define STK_BLOWBOTL_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "JetTable.h"
-00006 #include "BiQuad.h"
-00007 #include "PoleZero.h"
-00008 #include "Noise.h"
-00009 #include "ADSR.h"
-00010 #include "SineWave.h"
-00011 
-00012 namespace stk {
-00013 
-00014 /***************************************************/
-00030 /***************************************************/
-00031 
-00032 class BlowBotl : public Instrmnt
-00033 {
-00034  public:
-00036 
-00039   BlowBotl( void );
-00040 
-00042   ~BlowBotl( void );
-00043 
-00045   void clear( void );
-00046 
-00048   void setFrequency( StkFloat frequency );
-00049 
-00051   void startBlowing( StkFloat amplitude, StkFloat rate );
-00052 
-00054   void stopBlowing( StkFloat rate );
-00055 
-00057   void noteOn( StkFloat frequency, StkFloat amplitude );
-00058 
-00060   void noteOff( StkFloat amplitude );
-00061 
-00063   void controlChange( int number, StkFloat value );
-00064 
-00066   StkFloat tick( unsigned int channel = 0 );
-00067 
-00069 
-00076   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00077 
-00078  protected:
-00079 
-00080   JetTable jetTable_;
-00081   BiQuad resonator_;
-00082   PoleZero dcBlock_;
-00083   Noise noise_;
-00084   ADSR adsr_;
-00085   SineWave vibrato_;
-00086   StkFloat maxPressure_;
-00087   StkFloat noiseGain_;
-00088   StkFloat vibratoGain_;
-00089   StkFloat outputGain_;
-00090 
-00091 };
-00092 
-00093 inline StkFloat BlowBotl :: tick( unsigned int )
-00094 {
-00095   StkFloat breathPressure;
-00096   StkFloat randPressure;
-00097   StkFloat pressureDiff;
-00098 
-00099   // Calculate the breath pressure (envelope + vibrato)
-00100   breathPressure = maxPressure_ * adsr_.tick();
-00101   breathPressure += vibratoGain_ * vibrato_.tick();
-00102 
-00103   pressureDiff = breathPressure - resonator_.lastOut();
-00104 
-00105   randPressure = noiseGain_ * noise_.tick();
-00106   randPressure *= breathPressure;
-00107   randPressure *= (1.0 + pressureDiff);
-00108 
-00109   resonator_.tick( breathPressure + randPressure - ( jetTable_.tick( pressureDiff ) * pressureDiff ) );
-00110   lastFrame_[0] = 0.2 * outputGain_ * dcBlock_.tick( pressureDiff );
-00111 
-00112   return lastFrame_[0];
-00113 }
-00114 
-00115 inline StkFrames& BlowBotl :: tick( StkFrames& frames, unsigned int channel )
-00116 {
-00117   unsigned int nChannels = lastFrame_.channels();
-00118 #if defined(_STK_DEBUG_)
-00119   if ( channel > frames.channels() - nChannels ) {
-00120     oStream_ << "BlowBotl::tick(): channel and StkFrames arguments are incompatible!";
-00121     handleError( StkError::FUNCTION_ARGUMENT );
-00122   }
-00123 #endif
-00124 
-00125   StkFloat *samples = &frames[channel];
-00126   unsigned int j, hop = frames.channels() - nChannels;
-00127   if ( nChannels == 1 ) {
-00128     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00129       *samples++ = tick();
-00130   }
-00131   else {
-00132     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00133       *samples++ = tick();
-00134       for ( j=1; j<nChannels; j++ )
-00135         *samples++ = lastFrame_[j];
-00136     }
-00137   }
-00138 
-00139   return frames;
-00140 }
-00141 
-00142 } // stk namespace
-00143 
-00144 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/BlowHole_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/BlowHole_8h_source.html deleted file mode 100644 index 3084d42fa0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/BlowHole_8h_source.html +++ /dev/null @@ -1,156 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

BlowHole.h

00001 #ifndef STK_BLOWHOLE_H
-00002 #define STK_BLOWHOLE_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "DelayL.h"
-00006 #include "ReedTable.h"
-00007 #include "OneZero.h"
-00008 #include "PoleZero.h"
-00009 #include "Envelope.h"
-00010 #include "Noise.h"
-00011 #include "SineWave.h"
-00012 
-00013 namespace stk {
-00014 
-00015 /***************************************************/
-00048 /***************************************************/
-00049 
-00050 class BlowHole : public Instrmnt
-00051 {
-00052  public:
-00054 
-00057   BlowHole( StkFloat lowestFrequency );
-00058 
-00060   ~BlowHole( void );
-00061 
-00063   void clear( void );
-00064 
-00066   void setFrequency( StkFloat frequency );
-00067 
-00069   void setTonehole( StkFloat newValue );
-00070 
-00072   void setVent( StkFloat newValue );
-00073 
-00075   void startBlowing( StkFloat amplitude, StkFloat rate );
-00076 
-00078   void stopBlowing( StkFloat rate );
-00079 
-00081   void noteOn( StkFloat frequency, StkFloat amplitude );
-00082 
-00084   void noteOff( StkFloat amplitude );
-00085 
-00087   void controlChange( int number, StkFloat value );
-00088 
-00090   StkFloat tick( unsigned int channel = 0 );
-00091 
-00093 
-00100   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00101 
-00102  protected:
-00103 
-00104   DelayL    delays_[3];
-00105   ReedTable reedTable_;
-00106   OneZero   filter_;
-00107   PoleZero  tonehole_;
-00108   PoleZero  vent_;
-00109   Envelope  envelope_;
-00110   Noise     noise_;
-00111   SineWave  vibrato_;
-00112 
-00113   StkFloat scatter_;
-00114   StkFloat thCoeff_;
-00115   StkFloat rhGain_;
-00116   StkFloat outputGain_;
-00117   StkFloat noiseGain_;
-00118   StkFloat vibratoGain_;
-00119 };
-00120 
-00121   inline StkFloat BlowHole :: tick( unsigned int )
-00122 {
-00123   StkFloat pressureDiff;
-00124   StkFloat breathPressure;
-00125   StkFloat temp;
-00126 
-00127   // Calculate the breath pressure (envelope + noise + vibrato)
-00128   breathPressure = envelope_.tick(); 
-00129   breathPressure += breathPressure * noiseGain_ * noise_.tick();
-00130   breathPressure += breathPressure * vibratoGain_ * vibrato_.tick();
-00131 
-00132   // Calculate the differential pressure = reflected - mouthpiece pressures
-00133   pressureDiff = delays_[0].lastOut() - breathPressure;
-00134 
-00135   // Do two-port junction scattering for register vent
-00136   StkFloat pa = breathPressure + pressureDiff * reedTable_.tick( pressureDiff );
-00137   StkFloat pb = delays_[1].lastOut();
-00138   vent_.tick( pa+pb );
-00139 
-00140   lastFrame_[0] = delays_[0].tick( vent_.lastOut()+pb );
-00141   lastFrame_[0] *= outputGain_;
-00142 
-00143   // Do three-port junction scattering (under tonehole)
-00144   pa += vent_.lastOut();
-00145   pb = delays_[2].lastOut();
-00146   StkFloat pth = tonehole_.lastOut();
-00147   temp = scatter_ * (pa + pb - 2 * pth);
-00148 
-00149   delays_[2].tick( filter_.tick(pa + temp) * -0.95 );
-00150   delays_[1].tick( pb + temp );
-00151   tonehole_.tick( pa + pb - pth + temp );
-00152 
-00153   return lastFrame_[0];
-00154 }
-00155 
-00156 inline StkFrames& BlowHole :: tick( StkFrames& frames, unsigned int channel )
-00157 {
-00158   unsigned int nChannels = lastFrame_.channels();
-00159 #if defined(_STK_DEBUG_)
-00160   if ( channel > frames.channels() - nChannels ) {
-00161     oStream_ << "BlowHole::tick(): channel and StkFrames arguments are incompatible!";
-00162     handleError( StkError::FUNCTION_ARGUMENT );
-00163   }
-00164 #endif
-00165 
-00166   StkFloat *samples = &frames[channel];
-00167   unsigned int j, hop = frames.channels() - nChannels;
-00168   if ( nChannels == 1 ) {
-00169     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00170       *samples++ = tick();
-00171   }
-00172   else {
-00173     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00174       *samples++ = tick();
-00175       for ( j=1; j<nChannels; j++ )
-00176         *samples++ = lastFrame_[j];
-00177     }
-00178   }
-00179 
-00180   return frames;
-00181 }
-00182 
-00183 } // stk namespace
-00184 
-00185 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/BowTable_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/BowTable_8h_source.html deleted file mode 100644 index 37d6c1933d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/BowTable_8h_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

BowTable.h

00001 #ifndef STK_BOWTABL_H
-00002 #define STK_BOWTABL_H
-00003 
-00004 #include "Function.h"
-00005 #include <cmath>
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00020 /***************************************************/
-00021 
-00022 class BowTable : public Function
-00023 {
-00024 public:
-00026   BowTable( void ) : offset_(0.0), slope_(0.1), minOutput_(0.01), maxOutput_(0.98) {};
-00027 
-00029 
-00035   void setOffset( StkFloat offset ) { offset_ = offset; };
-00036 
-00038 
-00042   void setSlope( StkFloat slope ) { slope_ = slope; };
-00043 
-00045   void setMinOutput( StkFloat minimum ) { minOutput_ = minimum; };
-00046 
-00048   void setMaxOutput( StkFloat maximum ) { maxOutput_ = maximum; };
-00049 
-00051   StkFloat tick( StkFloat input );
-00052 
-00054 
-00062   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00063 
-00065 
-00073   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00074 
-00075 protected:
-00076 
-00077   StkFloat offset_;
-00078   StkFloat slope_;
-00079   StkFloat minOutput_;
-00080   StkFloat maxOutput_;
-00081 
-00082 };
-00083 
-00084 inline StkFloat BowTable :: tick( StkFloat input )
-00085 {
-00086   // The input represents differential string vs. bow velocity.
-00087   StkFloat sample  = input + offset_;  // add bias to input
-00088   sample *= slope_;          // then scale it
-00089   lastFrame_[0] = (StkFloat) fabs( (double) sample ) + (StkFloat) 0.75;
-00090   lastFrame_[0] = (StkFloat) pow( lastFrame_[0], (StkFloat) -4.0 );
-00091 
-00092   // Set minimum threshold
-00093   if ( lastFrame_[0] < minOutput_ ) lastFrame_[0] = minOutput_;
-00094 
-00095   // Set maximum threshold
-00096   if ( lastFrame_[0] > maxOutput_ ) lastFrame_[0] = maxOutput_;
-00097 
-00098   return lastFrame_[0];
-00099 }
-00100 
-00101 inline StkFrames& BowTable :: tick( StkFrames& frames, unsigned int channel )
-00102 {
-00103 #if defined(_STK_DEBUG_)
-00104   if ( channel >= frames.channels() ) {
-00105     oStream_ << "BowTable::tick(): channel and StkFrames arguments are incompatible!";
-00106     handleError( StkError::FUNCTION_ARGUMENT );
-00107   }
-00108 #endif
-00109 
-00110   StkFloat *samples = &frames[channel];
-00111   unsigned int hop = frames.channels();
-00112   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00113     *samples = *samples + offset_;
-00114     *samples *= slope_;
-00115     *samples = (StkFloat) fabs( (double) *samples ) + 0.75;
-00116     *samples = (StkFloat) pow( *samples, (StkFloat) -4.0 );
-00117     if ( *samples > 1.0) *samples = 1.0;
-00118   }
-00119 
-00120   lastFrame_[0] = *(samples-hop);
-00121   return frames;
-00122 }
-00123 
-00124 inline StkFrames& BowTable :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00125 {
-00126 #if defined(_STK_DEBUG_)
-00127   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00128     oStream_ << "BowTable::tick(): channel and StkFrames arguments are incompatible!";
-00129     handleError( StkError::FUNCTION_ARGUMENT );
-00130   }
-00131 #endif
-00132 
-00133   StkFloat *iSamples = &iFrames[iChannel];
-00134   StkFloat *oSamples = &oFrames[oChannel];
-00135   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00136   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00137     *oSamples = *iSamples + offset_;
-00138     *oSamples *= slope_;
-00139     *oSamples = (StkFloat) fabs( (double) *oSamples ) + 0.75;
-00140     *oSamples = (StkFloat) pow( *oSamples, (StkFloat) -4.0 );
-00141     if ( *oSamples > 1.0) *oSamples = 1.0;
-00142   }
-00143 
-00144   lastFrame_[0] = *(oSamples-oHop);
-00145   return iFrames;
-00146 }
-00147 
-00148 } // stk namespace
-00149 
-00150 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Bowed_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Bowed_8h_source.html deleted file mode 100644 index 41c33bc73b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Bowed_8h_source.html +++ /dev/null @@ -1,140 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Bowed.h

00001 #ifndef STK_BOWED_H
-00002 #define STK_BOWED_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "DelayL.h"
-00006 #include "BowTable.h"
-00007 #include "OnePole.h"
-00008 #include "BiQuad.h"
-00009 #include "SineWave.h"
-00010 #include "ADSR.h"
-00011 
-00012 namespace stk {
-00013 
-00014 /***************************************************/
-00038 /***************************************************/
-00039 
-00040 class Bowed : public Instrmnt
-00041 {
-00042  public:
-00044   Bowed( StkFloat lowestFrequency = 8.0 );
-00045 
-00047   ~Bowed( void );
-00048 
-00050   void clear( void );
-00051 
-00053   void setFrequency( StkFloat frequency );
-00054 
-00056   void setVibrato( StkFloat gain ) { vibratoGain_ = gain; };
-00057 
-00059   void startBowing( StkFloat amplitude, StkFloat rate );
-00060 
-00062   void stopBowing( StkFloat rate );
-00063 
-00065   void noteOn( StkFloat frequency, StkFloat amplitude );
-00066 
-00068   void noteOff( StkFloat amplitude );
-00069 
-00071   void controlChange( int number, StkFloat value );
-00072 
-00074   StkFloat tick( unsigned int channel = 0 );
-00075 
-00077 
-00084   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00085 
-00086  protected:
-00087 
-00088   DelayL   neckDelay_;
-00089   DelayL   bridgeDelay_;
-00090   BowTable bowTable_;
-00091   OnePole  stringFilter_;
-00092   BiQuad   bodyFilters_[6];
-00093   SineWave vibrato_;
-00094   ADSR     adsr_;
-00095 
-00096   bool     bowDown_;
-00097   StkFloat maxVelocity_;
-00098   StkFloat baseDelay_;
-00099   StkFloat vibratoGain_;
-00100   StkFloat betaRatio_;
-00101 
-00102 };
-00103 
-00104 inline StkFloat Bowed :: tick( unsigned int )
-00105 {
-00106   StkFloat bowVelocity = maxVelocity_ * adsr_.tick();
-00107   StkFloat bridgeReflection = -stringFilter_.tick( bridgeDelay_.lastOut() );
-00108   StkFloat nutReflection = -neckDelay_.lastOut();
-00109   StkFloat stringVelocity = bridgeReflection + nutReflection;
-00110   StkFloat deltaV = bowVelocity - stringVelocity;             // Differential velocity
-00111 
-00112   StkFloat newVelocity = 0.0;
-00113   if ( bowDown_ )
-00114     newVelocity = deltaV * bowTable_.tick( deltaV );     // Non-Linear bow function
-00115   neckDelay_.tick( bridgeReflection + newVelocity);      // Do string propagations
-00116   bridgeDelay_.tick(nutReflection + newVelocity);
-00117     
-00118   if ( vibratoGain_ > 0.0 )  {
-00119     neckDelay_.setDelay( (baseDelay_ * (1.0 - betaRatio_) ) + 
-00120                          (baseDelay_ * vibratoGain_ * vibrato_.tick()) );
-00121   }
-00122 
-00123   lastFrame_[0] = 0.1248 * bodyFilters_[5].tick( bodyFilters_[4].tick( bodyFilters_[3].tick( bodyFilters_[2].tick( bodyFilters_[1].tick( bodyFilters_[0].tick( bridgeDelay_.lastOut() ) ) ) ) ) );
-00124 
-00125   return lastFrame_[0];
-00126 }
-00127 
-00128 inline StkFrames& Bowed :: tick( StkFrames& frames, unsigned int channel )
-00129 {
-00130   unsigned int nChannels = lastFrame_.channels();
-00131 #if defined(_STK_DEBUG_)
-00132   if ( channel > frames.channels() - nChannels ) {
-00133     oStream_ << "Bowed::tick(): channel and StkFrames arguments are incompatible!";
-00134     handleError( StkError::FUNCTION_ARGUMENT );
-00135   }
-00136 #endif
-00137 
-00138   StkFloat *samples = &frames[channel];
-00139   unsigned int j, hop = frames.channels() - nChannels;
-00140   if ( nChannels == 1 ) {
-00141     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00142       *samples++ = tick();
-00143   }
-00144   else {
-00145     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00146       *samples++ = tick();
-00147       for ( j=1; j<nChannels; j++ )
-00148         *samples++ = lastFrame_[j];
-00149     }
-00150   }
-00151 
-00152   return frames;
-00153 }
-00154 
-00155 } // stk namespace
-00156 
-00157 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Brass_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Brass_8h_source.html deleted file mode 100644 index fe8bb9ebc0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Brass_8h_source.html +++ /dev/null @@ -1,132 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Brass.h

00001 #ifndef STK_BRASS_H
-00002 #define STK_BRASS_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "DelayA.h"
-00006 #include "BiQuad.h"
-00007 #include "PoleZero.h"
-00008 #include "ADSR.h"
-00009 #include "SineWave.h"
-00010 
-00011 namespace stk {
-00012 
-00013 /***************************************************/
-00033 /***************************************************/
-00034 
-00035 class Brass: public Instrmnt
-00036 {
-00037  public:
-00039 
-00042   Brass( StkFloat lowestFrequency = 8.0 );
-00043 
-00045   ~Brass(  );
-00046 
-00048   void clear(  );
-00049 
-00051   void setFrequency( StkFloat frequency );
-00052 
-00054   void setLip( StkFloat frequency );
-00055 
-00057   void startBlowing( StkFloat amplitude, StkFloat rate );
-00058 
-00060   void stopBlowing( StkFloat rate );
-00061 
-00063   void noteOn( StkFloat frequency, StkFloat amplitude );
-00064 
-00066   void noteOff( StkFloat amplitude );
-00067 
-00069   void controlChange( int number, StkFloat value );
-00070 
-00072   StkFloat tick( unsigned int channel = 0 );
-00073 
-00075 
-00082   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00083 
-00084  protected:
-00085 
-00086   DelayA   delayLine_;
-00087   BiQuad   lipFilter_;
-00088   PoleZero dcBlock_;
-00089   ADSR     adsr_;
-00090   SineWave vibrato_;
-00091 
-00092   StkFloat lipTarget_;
-00093   StkFloat slideTarget_;
-00094   StkFloat vibratoGain_;
-00095   StkFloat maxPressure_;
-00096 
-00097 };
-00098 
-00099 inline StkFloat Brass :: tick( unsigned int )
-00100 {
-00101   StkFloat breathPressure = maxPressure_ * adsr_.tick();
-00102   breathPressure += vibratoGain_ * vibrato_.tick();
-00103 
-00104   StkFloat mouthPressure = 0.3 * breathPressure;
-00105   StkFloat borePressure = 0.85 * delayLine_.lastOut();
-00106   StkFloat deltaPressure = mouthPressure - borePressure; // Differential pressure.
-00107   deltaPressure = lipFilter_.tick( deltaPressure );      // Force - > position.
-00108   deltaPressure *= deltaPressure;                        // Basic position to area mapping.
-00109   if ( deltaPressure > 1.0 ) deltaPressure = 1.0;        // Non-linear saturation.
-00110 
-00111   // The following input scattering assumes the mouthPressure = area.
-00112   lastFrame_[0] = deltaPressure * mouthPressure + ( 1.0 - deltaPressure) * borePressure;
-00113   lastFrame_[0] = delayLine_.tick( dcBlock_.tick( lastFrame_[0] ) );
-00114 
-00115   return lastFrame_[0];
-00116 }
-00117 
-00118 inline StkFrames& Brass :: tick( StkFrames& frames, unsigned int channel )
-00119 {
-00120   unsigned int nChannels = lastFrame_.channels();
-00121 #if defined(_STK_DEBUG_)
-00122   if ( channel > frames.channels() - nChannels ) {
-00123     oStream_ << "Brass::tick(): channel and StkFrames arguments are incompatible!";
-00124     handleError( StkError::FUNCTION_ARGUMENT );
-00125   }
-00126 #endif
-00127 
-00128   StkFloat *samples = &frames[channel];
-00129   unsigned int j, hop = frames.channels() - nChannels;
-00130   if ( nChannels == 1 ) {
-00131     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00132       *samples++ = tick();
-00133   }
-00134   else {
-00135     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00136       *samples++ = tick();
-00137       for ( j=1; j<nChannels; j++ )
-00138         *samples++ = lastFrame_[j];
-00139     }
-00140   }
-00141 
-00142   return frames;
-00143 }
-00144 
-00145 } // stk namespace
-00146 
-00147 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Chorus_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Chorus_8h_source.html deleted file mode 100644 index fdff49c491..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Chorus_8h_source.html +++ /dev/null @@ -1,149 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Chorus.h

00001 #ifndef STK_CHORUS_H
-00002 #define STK_CHORUS_H
-00003 
-00004 #include "Effect.h"
-00005 #include "DelayL.h"
-00006 #include "SineWave.h"
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00019 /***************************************************/
-00020 
-00021 class Chorus : public Effect
-00022 {
-00023  public:
-00025 
-00028   Chorus( StkFloat baseDelay = 6000 );
-00029 
-00031   void clear( void );
-00032 
-00034   void setModDepth( StkFloat depth );
-00035 
-00037   void setModFrequency( StkFloat frequency );
-00038 
-00040 
-00048   StkFloat lastOut( unsigned int channel = 0 );
-00049 
-00051 
-00058   StkFloat tick( StkFloat input, unsigned int channel = 0 );
-00059 
-00061 
-00070   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00071 
-00073 
-00082   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00083 
-00084  protected:
-00085 
-00086   DelayL delayLine_[2];
-00087   SineWave mods_[2];
-00088   StkFloat baseLength_;
-00089   StkFloat modDepth_;
-00090 
-00091 };
-00092 
-00093 inline StkFloat Chorus :: lastOut( unsigned int channel )
-00094 {
-00095 #if defined(_STK_DEBUG_)
-00096   if ( channel > 1 ) {
-00097     oStream_ << "Chorus::lastOut(): channel argument must be less than 2!";
-00098     handleError( StkError::FUNCTION_ARGUMENT );
-00099   }
-00100 #endif
-00101 
-00102   return lastFrame_[channel];
-00103 }
-00104 
-00105 inline StkFloat Chorus :: tick( StkFloat input, unsigned int channel )
-00106 {
-00107 #if defined(_STK_DEBUG_)
-00108   if ( channel > 1 ) {
-00109     oStream_ << "Chorus::tick(): channel argument must be less than 2!";
-00110     handleError( StkError::FUNCTION_ARGUMENT );
-00111   }
-00112 #endif
-00113 
-00114   delayLine_[0].setDelay( baseLength_ * 0.707 * ( 1.0 + modDepth_ * mods_[0].tick() ) );
-00115   delayLine_[1].setDelay( baseLength_  * 0.5 *  ( 1.0 - modDepth_ * mods_[1].tick() ) );
-00116   lastFrame_[0] = effectMix_ * ( delayLine_[0].tick( input ) - input ) + input;
-00117   lastFrame_[1] = effectMix_ * ( delayLine_[1].tick( input ) - input ) + input;
-00118   return lastFrame_[channel];
-00119 }
-00120 
-00121 inline StkFrames& Chorus :: tick( StkFrames& frames, unsigned int channel )
-00122 {
-00123 #if defined(_STK_DEBUG_)
-00124   if ( channel >= frames.channels() - 1 ) {
-00125     oStream_ << "Chorus::tick(): channel and StkFrames arguments are incompatible!";
-00126     handleError( StkError::FUNCTION_ARGUMENT );
-00127   }
-00128 #endif
-00129 
-00130   StkFloat *samples = &frames[channel];
-00131   unsigned int hop = frames.channels() - 1;
-00132   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00133     delayLine_[0].setDelay( baseLength_ * 0.707 * ( 1.0 + modDepth_ * mods_[0].tick() ) );
-00134     delayLine_[1].setDelay( baseLength_  * 0.5 *  ( 1.0 - modDepth_ * mods_[1].tick() ) );
-00135     *samples = effectMix_ * ( delayLine_[0].tick( *samples ) - *samples ) + *samples;
-00136     samples++;
-00137     *samples = effectMix_ * ( delayLine_[1].tick( *samples ) - *samples ) + *samples;
-00138   }
-00139 
-00140   lastFrame_[0] = *(samples-hop);
-00141   lastFrame_[1] = *(samples-hop+1);
-00142   return frames;
-00143 }
-00144 
-00145 inline StkFrames& Chorus :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00146 {
-00147 #if defined(_STK_DEBUG_)
-00148   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() - 1 ) {
-00149     oStream_ << "Chorus::tick(): channel and StkFrames arguments are incompatible!";
-00150     handleError( StkError::FUNCTION_ARGUMENT );
-00151   }
-00152 #endif
-00153 
-00154   StkFloat *iSamples = &iFrames[iChannel];
-00155   StkFloat *oSamples = &oFrames[oChannel];
-00156   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00157   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00158     delayLine_[0].setDelay( baseLength_ * 0.707 * ( 1.0 + modDepth_ * mods_[0].tick() ) );
-00159     delayLine_[1].setDelay( baseLength_  * 0.5 *  ( 1.0 - modDepth_ * mods_[1].tick() ) );
-00160     *oSamples = effectMix_ * ( delayLine_[0].tick( *iSamples ) - *iSamples ) + *iSamples;
-00161     *(oSamples+1) = effectMix_ * ( delayLine_[1].tick( *iSamples ) - *iSamples ) + *iSamples;
-00162   }
-00163 
-00164   lastFrame_[0] = *(oSamples-oHop);
-00165   lastFrame_[1] = *(oSamples-oHop+1);
-00166   return iFrames;
-00167 }
-00168 
-00169 } // stk namespace
-00170 
-00171 #endif
-00172 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Clarinet_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Clarinet_8h_source.html deleted file mode 100644 index 9c9d4e6b63..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Clarinet_8h_source.html +++ /dev/null @@ -1,136 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Clarinet.h

00001 #ifndef STK_CLARINET_H
-00002 #define STK_CLARINET_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "DelayL.h"
-00006 #include "ReedTable.h"
-00007 #include "OneZero.h"
-00008 #include "Envelope.h"
-00009 #include "Noise.h"
-00010 #include "SineWave.h"
-00011 
-00012 namespace stk {
-00013 
-00014 /***************************************************/
-00036 /***************************************************/
-00037 
-00038 class Clarinet : public Instrmnt
-00039 {
-00040  public:
-00042 
-00045   Clarinet( StkFloat lowestFrequency = 8.0 );
-00046 
-00048   ~Clarinet( void );
-00049 
-00051   void clear( void );
-00052 
-00054   void setFrequency( StkFloat frequency );
-00055 
-00057   void startBlowing( StkFloat amplitude, StkFloat rate );
-00058 
-00060   void stopBlowing( StkFloat rate );
-00061 
-00063   void noteOn( StkFloat frequency, StkFloat amplitude );
-00064 
-00066   void noteOff( StkFloat amplitude );
-00067 
-00069   void controlChange( int number, StkFloat value );
-00070 
-00072   StkFloat tick( unsigned int channel = 0 );
-00073 
-00075 
-00082   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00083 
-00084  protected:
-00085 
-00086   DelayL delayLine_;
-00087   ReedTable reedTable_;
-00088   OneZero filter_;
-00089   Envelope envelope_;
-00090   Noise noise_;
-00091   SineWave vibrato_;
-00092 
-00093   StkFloat outputGain_;
-00094   StkFloat noiseGain_;
-00095   StkFloat vibratoGain_;
-00096 };
-00097 
-00098 inline StkFloat Clarinet :: tick( unsigned int )
-00099 {
-00100   StkFloat pressureDiff;
-00101   StkFloat breathPressure;
-00102 
-00103   // Calculate the breath pressure (envelope + noise + vibrato)
-00104   breathPressure = envelope_.tick(); 
-00105   breathPressure += breathPressure * noiseGain_ * noise_.tick();
-00106   breathPressure += breathPressure * vibratoGain_ * vibrato_.tick();
-00107 
-00108   // Perform commuted loss filtering.
-00109   pressureDiff = -0.95 * filter_.tick( delayLine_.lastOut() );
-00110 
-00111   // Calculate pressure difference of reflected and mouthpiece pressures.
-00112   pressureDiff = pressureDiff - breathPressure;
-00113 
-00114   // Perform non-linear scattering using pressure difference in reed function.
-00115   lastFrame_[0] = delayLine_.tick(breathPressure + pressureDiff * reedTable_.tick(pressureDiff));
-00116 
-00117   // Apply output gain.
-00118   lastFrame_[0] *= outputGain_;
-00119 
-00120   return lastFrame_[0];
-00121 }
-00122 
-00123 inline StkFrames& Clarinet :: tick( StkFrames& frames, unsigned int channel )
-00124 {
-00125   unsigned int nChannels = lastFrame_.channels();
-00126 #if defined(_STK_DEBUG_)
-00127   if ( channel > frames.channels() - nChannels ) {
-00128     oStream_ << "Clarinet::tick(): channel and StkFrames arguments are incompatible!";
-00129     handleError( StkError::FUNCTION_ARGUMENT );
-00130   }
-00131 #endif
-00132 
-00133   StkFloat *samples = &frames[channel];
-00134   unsigned int j, hop = frames.channels() - nChannels;
-00135   if ( nChannels == 1 ) {
-00136     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00137       *samples++ = tick();
-00138   }
-00139   else {
-00140     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00141       *samples++ = tick();
-00142       for ( j=1; j<nChannels; j++ )
-00143         *samples++ = lastFrame_[j];
-00144     }
-00145   }
-00146 
-00147   return frames;
-00148 }
-00149 
-00150 } // stk namespace
-00151 
-00152 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Cubic_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Cubic_8h_source.html deleted file mode 100644 index d87165818f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Cubic_8h_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Cubic.h

00001 #ifndef STK_CUBIC_H
-00002 #define STK_CUBIC_H
-00003 
-00004 #include "Function.h"
-00005 #include <cmath>
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00027 /***************************************************/
-00028 
-00029 class Cubic : public Function
-00030 {
-00031 public:
-00033   Cubic( void ) : a1_(0.5), a2_(0.5), a3_(0.5), gain_(1.0), threshold_(1.0) {};
-00034 
-00036   void setA1( StkFloat a1 ) { a1_ = a1; };
-00037 
-00039   void setA2( StkFloat a2 )  { a2_ = a2; };
-00040 
-00042   void setA3( StkFloat a3 )  { a3_ = a3; };
-00043 
-00045   void setGain( StkFloat gain ) { gain_ = gain; };
-00046 
-00048   void setThreshold( StkFloat threshold ) { threshold_ = threshold; };
-00049 
-00051   StkFloat tick( StkFloat input );
-00052 
-00054 
-00062   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00063 
-00065 
-00073   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00074 
-00075 protected:
-00076 
-00077   StkFloat a1_;
-00078   StkFloat a2_;
-00079   StkFloat a3_;
-00080   StkFloat gain_; 
-00081   StkFloat threshold_;
-00082 };
-00083 
-00084 inline StkFloat Cubic :: tick( StkFloat input )
-00085 {
-00086   StkFloat inSquared = input * input;
-00087   StkFloat inCubed = inSquared * input;
-00088 
-00089   lastFrame_[0] = gain_ * (a1_ * input + a2_ * inSquared + a3_ * inCubed);
-00090 
-00091   // Apply threshold if we are out of range.
-00092   if ( fabs( lastFrame_[0] ) > threshold_ ) {
-00093     lastFrame_[0] = ( lastFrame_[0] < 0 ? -threshold_ : threshold_ );
-00094   }
-00095 
-00096   return lastFrame_[0];
-00097 }
-00098 
-00099 inline StkFrames& Cubic :: tick( StkFrames& frames, unsigned int channel )
-00100 {
-00101 #if defined(_STK_DEBUG_)
-00102   if ( channel >= frames.channels() ) {
-00103     oStream_ << "Cubic::tick(): channel and StkFrames arguments are incompatible!";
-00104     handleError( StkError::FUNCTION_ARGUMENT );
-00105   }
-00106 #endif
-00107 
-00108   StkFloat *samples = &frames[channel];
-00109   unsigned int hop = frames.channels();
-00110   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00111     *samples = tick( *samples );
-00112 
-00113   lastFrame_[0] = *(samples-hop);
-00114   return frames;
-00115 }
-00116 
-00117 inline StkFrames& Cubic :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00118 {
-00119 #if defined(_STK_DEBUG_)
-00120   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00121     oStream_ << "Cubic::tick(): channel and StkFrames arguments are incompatible!";
-00122     handleError( StkError::FUNCTION_ARGUMENT );
-00123   }
-00124 #endif
-00125 
-00126   StkFloat *iSamples = &iFrames[iChannel];
-00127   StkFloat *oSamples = &oFrames[oChannel];
-00128   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00129   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop )
-00130     *oSamples = tick( *iSamples );
-00131 
-00132   lastFrame_[0] = *(oSamples-oHop);
-00133   return iFrames;
-00134 }
-00135 
-00136 } // stk namespace
-00137 
-00138 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/DelayA_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/DelayA_8h_source.html deleted file mode 100644 index ecffbd6908..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/DelayA_8h_source.html +++ /dev/null @@ -1,168 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

DelayA.h

00001 #ifndef STK_DELAYA_H
-00002 #define STK_DELAYA_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00026 /***************************************************/
-00027 
-00028 class DelayA : public Filter
-00029 {
-00030 public:
-00031 
-00033 
-00038   DelayA( StkFloat delay = 0.5, unsigned long maxDelay = 4095 );
-00039 
-00041   ~DelayA();
-00042 
-00044   void clear( void );
-00045 
-00047   unsigned long getMaximumDelay( void ) { return inputs_.size() - 1; };
-00048   
-00050 
-00057   void setMaximumDelay( unsigned long delay );
-00058 
-00060 
-00063   void setDelay( StkFloat delay );
-00064 
-00066   StkFloat getDelay( void ) const { return delay_; };
-00067 
-00069 
-00074   StkFloat tapOut( unsigned long tapDelay );
-00075 
-00077   void tapIn( StkFloat value, unsigned long tapDelay );
-00078 
-00080   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00081 
-00083 
-00086   StkFloat nextOut( void );
-00087 
-00089   StkFloat tick( StkFloat input );
-00090 
-00092 
-00100   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00101 
-00103 
-00111   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00112 
-00113 protected:  
-00114 
-00115   unsigned long inPoint_;
-00116   unsigned long outPoint_;
-00117   StkFloat delay_;
-00118   StkFloat alpha_;
-00119   StkFloat coeff_;
-00120   StkFloat apInput_;
-00121   StkFloat nextOutput_;
-00122   bool doNextOut_;
-00123 };
-00124 
-00125 inline StkFloat DelayA :: nextOut( void )
-00126 {
-00127   if ( doNextOut_ ) {
-00128     // Do allpass interpolation delay.
-00129     nextOutput_ = -coeff_ * lastFrame_[0];
-00130     nextOutput_ += apInput_ + ( coeff_ * inputs_[outPoint_] );
-00131     doNextOut_ = false;
-00132   }
-00133 
-00134   return nextOutput_;
-00135 }
-00136 
-00137 inline StkFloat DelayA :: tick( StkFloat input )
-00138 {
-00139   inputs_[inPoint_++] = input * gain_;
-00140 
-00141   // Increment input pointer modulo length.
-00142   if ( inPoint_ == inputs_.size() )
-00143     inPoint_ = 0;
-00144 
-00145   lastFrame_[0] = nextOut();
-00146   doNextOut_ = true;
-00147 
-00148   // Save the allpass input and increment modulo length.
-00149   apInput_ = inputs_[outPoint_++];
-00150   if ( outPoint_ == inputs_.size() )
-00151     outPoint_ = 0;
-00152 
-00153   return lastFrame_[0];
-00154 }
-00155 
-00156 inline StkFrames& DelayA :: tick( StkFrames& frames, unsigned int channel )
-00157 {
-00158 #if defined(_STK_DEBUG_)
-00159   if ( channel >= frames.channels() ) {
-00160     oStream_ << "DelayA::tick(): channel and StkFrames arguments are incompatible!";
-00161     handleError( StkError::FUNCTION_ARGUMENT );
-00162   }
-00163 #endif
-00164 
-00165   StkFloat *samples = &frames[channel];
-00166   unsigned int hop = frames.channels();
-00167   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00168     inputs_[inPoint_++] = *samples * gain_;
-00169     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00170     *samples = nextOut();
-00171     lastFrame_[0] = *samples;
-00172     doNextOut_ = true;
-00173     apInput_ = inputs_[outPoint_++];
-00174     if ( outPoint_ == inputs_.size() ) outPoint_ = 0;
-00175   }
-00176 
-00177   return frames;
-00178 }
-00179 
-00180 inline StkFrames& DelayA :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00181 {
-00182 #if defined(_STK_DEBUG_)
-00183   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00184     oStream_ << "DelayA::tick(): channel and StkFrames arguments are incompatible!";
-00185     handleError( StkError::FUNCTION_ARGUMENT );
-00186   }
-00187 #endif
-00188 
-00189   StkFloat *iSamples = &iFrames[iChannel];
-00190   StkFloat *oSamples = &oFrames[oChannel];
-00191   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00192   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00193     inputs_[inPoint_++] = *iSamples * gain_;
-00194     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00195     *oSamples = nextOut();
-00196     lastFrame_[0] = *oSamples;
-00197     doNextOut_ = true;
-00198     apInput_ = inputs_[outPoint_++];
-00199     if ( outPoint_ == inputs_.size() ) outPoint_ = 0;
-00200   }
-00201 
-00202   return iFrames;
-00203 }
-00204 
-00205 } // stk namespace
-00206 
-00207 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/DelayL_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/DelayL_8h_source.html deleted file mode 100644 index f891c35c8e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/DelayL_8h_source.html +++ /dev/null @@ -1,166 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

DelayL.h

00001 #ifndef STK_DELAYL_H
-00002 #define STK_DELAYL_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00025 /***************************************************/
-00026 
-00027 class DelayL : public Filter
-00028 {
-00029 public:
-00030 
-00032 
-00037   DelayL( StkFloat delay = 0.0, unsigned long maxDelay = 4095 );
-00038 
-00040   ~DelayL();
-00041 
-00043   unsigned long getMaximumDelay( void ) { return inputs_.size() - 1; };
-00044 
-00046 
-00053   void setMaximumDelay( unsigned long delay );
-00054 
-00056 
-00059   void setDelay( StkFloat delay );
-00060 
-00062   StkFloat getDelay( void ) const { return delay_; };
-00063 
-00065 
-00070   StkFloat tapOut( unsigned long tapDelay );
-00071 
-00073   void tapIn( StkFloat value, unsigned long tapDelay );
-00074 
-00076   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00077 
-00079 
-00082   StkFloat nextOut( void );
-00083 
-00085   StkFloat tick( StkFloat input );
-00086 
-00088 
-00096   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00097 
-00099 
-00107   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00108 
-00109  protected:
-00110 
-00111   unsigned long inPoint_;
-00112   unsigned long outPoint_;
-00113   StkFloat delay_;
-00114   StkFloat alpha_;
-00115   StkFloat omAlpha_;
-00116   StkFloat nextOutput_;
-00117   bool doNextOut_;
-00118 };
-00119 
-00120 inline StkFloat DelayL :: nextOut( void )
-00121 {
-00122   if ( doNextOut_ ) {
-00123     // First 1/2 of interpolation
-00124     nextOutput_ = inputs_[outPoint_] * omAlpha_;
-00125     // Second 1/2 of interpolation
-00126     if (outPoint_+1 < inputs_.size())
-00127       nextOutput_ += inputs_[outPoint_+1] * alpha_;
-00128     else
-00129       nextOutput_ += inputs_[0] * alpha_;
-00130     doNextOut_ = false;
-00131   }
-00132 
-00133   return nextOutput_;
-00134 }
-00135 
-00136 inline StkFloat DelayL :: tick( StkFloat input )
-00137 {
-00138   inputs_[inPoint_++] = input * gain_;
-00139 
-00140   // Increment input pointer modulo length.
-00141   if ( inPoint_ == inputs_.size() )
-00142     inPoint_ = 0;
-00143 
-00144   lastFrame_[0] = nextOut();
-00145   doNextOut_ = true;
-00146 
-00147   // Increment output pointer modulo length.
-00148   if ( ++outPoint_ == inputs_.size() )
-00149     outPoint_ = 0;
-00150 
-00151   return lastFrame_[0];
-00152 }
-00153 
-00154 inline StkFrames& DelayL :: tick( StkFrames& frames, unsigned int channel )
-00155 {
-00156 #if defined(_STK_DEBUG_)
-00157   if ( channel >= frames.channels() ) {
-00158     oStream_ << "DelayL::tick(): channel and StkFrames arguments are incompatible!";
-00159     handleError( StkError::FUNCTION_ARGUMENT );
-00160   }
-00161 #endif
-00162 
-00163   StkFloat *samples = &frames[channel];
-00164   unsigned int hop = frames.channels();
-00165   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00166     inputs_[inPoint_++] = *samples * gain_;
-00167     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00168     *samples = nextOut();
-00169     doNextOut_ = true;
-00170     if ( ++outPoint_ == inputs_.size() ) outPoint_ = 0;
-00171   }
-00172 
-00173   lastFrame_[0] = *(samples-hop);
-00174   return frames;
-00175 }
-00176 
-00177 inline StkFrames& DelayL :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00178 {
-00179 #if defined(_STK_DEBUG_)
-00180   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00181     oStream_ << "DelayL::tick(): channel and StkFrames arguments are incompatible!";
-00182     handleError( StkError::FUNCTION_ARGUMENT );
-00183   }
-00184 #endif
-00185 
-00186   StkFloat *iSamples = &iFrames[iChannel];
-00187   StkFloat *oSamples = &oFrames[oChannel];
-00188   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00189   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00190     inputs_[inPoint_++] = *iSamples * gain_;
-00191     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00192     *oSamples = nextOut();
-00193     doNextOut_ = true;
-00194     if ( ++outPoint_ == inputs_.size() ) outPoint_ = 0;
-00195   }
-00196 
-00197   lastFrame_[0] = *(oSamples-oHop);
-00198   return iFrames;
-00199 }
-00200 
-00201 } // stk namespace
-00202 
-00203 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Delay_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Delay_8h_source.html deleted file mode 100644 index fb7c25761a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Delay_8h_source.html +++ /dev/null @@ -1,148 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Delay.h

00001 #ifndef STK_DELAY_H
-00002 #define STK_DELAY_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00022 /***************************************************/
-00023 
-00024 class Delay : public Filter
-00025 {
-00026 public:
-00027 
-00029 
-00034   Delay( unsigned long delay = 0, unsigned long maxDelay = 4095 );
-00035 
-00037   ~Delay();
-00038 
-00040   unsigned long getMaximumDelay( void ) { return inputs_.size() - 1; };
-00041 
-00043 
-00050   void setMaximumDelay( unsigned long delay );
-00051 
-00053 
-00056   void setDelay( unsigned long delay );
-00057 
-00059   unsigned long getDelay( void ) const { return delay_; };
-00060 
-00062 
-00067   StkFloat tapOut( unsigned long tapDelay );
-00068 
-00070   void tapIn( StkFloat value, unsigned long tapDelay );
-00071 
-00073 
-00078   StkFloat addTo( StkFloat value, unsigned long tapDelay );
-00079 
-00081   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00082 
-00084 
-00087   StkFloat nextOut( void ) { return inputs_[outPoint_]; };
-00088 
-00090   StkFloat energy( void ) const;
-00091 
-00093   StkFloat tick( StkFloat input );
-00094 
-00096 
-00104   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00105 
-00107 
-00115   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00116 
-00117 protected:
-00118 
-00119   unsigned long inPoint_;
-00120   unsigned long outPoint_;
-00121   unsigned long delay_;
-00122 };
-00123 
-00124 inline StkFloat Delay :: tick( StkFloat input )
-00125 {
-00126   inputs_[inPoint_++] = input * gain_;
-00127 
-00128   // Check for end condition
-00129   if ( inPoint_ == inputs_.size() )
-00130     inPoint_ = 0;
-00131 
-00132   // Read out next value
-00133   lastFrame_[0] = inputs_[outPoint_++];
-00134 
-00135   if ( outPoint_ == inputs_.size() )
-00136     outPoint_ = 0;
-00137 
-00138   return lastFrame_[0];
-00139 }
-00140 
-00141 inline StkFrames& Delay :: tick( StkFrames& frames, unsigned int channel )
-00142 {
-00143 #if defined(_STK_DEBUG_)
-00144   if ( channel >= frames.channels() ) {
-00145     oStream_ << "Delay::tick(): channel and StkFrames arguments are incompatible!";
-00146     handleError( StkError::FUNCTION_ARGUMENT );
-00147   }
-00148 #endif
-00149 
-00150   StkFloat *samples = &frames[channel];
-00151   unsigned int hop = frames.channels();
-00152   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00153     inputs_[inPoint_++] = *samples * gain_;
-00154     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00155     *samples = inputs_[outPoint_++];
-00156     if ( outPoint_ == inputs_.size() ) outPoint_ = 0;
-00157   }
-00158 
-00159   lastFrame_[0] = *(samples-hop);
-00160   return frames;
-00161 }
-00162 
-00163 inline StkFrames& Delay :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00164 {
-00165 #if defined(_STK_DEBUG_)
-00166   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00167     oStream_ << "Delay::tick(): channel and StkFrames arguments are incompatible!";
-00168     handleError( StkError::FUNCTION_ARGUMENT );
-00169   }
-00170 #endif
-00171 
-00172   StkFloat *iSamples = &iFrames[iChannel];
-00173   StkFloat *oSamples = &oFrames[oChannel];
-00174   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00175   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00176     inputs_[inPoint_++] = *iSamples * gain_;
-00177     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00178     *oSamples = inputs_[outPoint_++];
-00179     if ( outPoint_ == inputs_.size() ) outPoint_ = 0;
-00180   }
-00181 
-00182   lastFrame_[0] = *(oSamples-oHop);
-00183   return iFrames;
-00184 }
-00185 
-00186 } // stk namespace
-00187 
-00188 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Drummer_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Drummer_8h_source.html deleted file mode 100644 index 30f000bfa8..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Drummer_8h_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Drummer.h

00001 #ifndef STK_DRUMMER_H
-00002 #define STK_DRUMMER_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "FileWvIn.h"
-00006 #include "OnePole.h"
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00025 /***************************************************/
-00026 
-00027 const int DRUM_NUMWAVES = 11;
-00028 const int DRUM_POLYPHONY = 4;
-00029 
-00030 class Drummer : public Instrmnt
-00031 {
-00032  public:
-00034 
-00037   Drummer( void );
-00038 
-00040   ~Drummer( void );
-00041 
-00043 
-00049   void noteOn( StkFloat instrument, StkFloat amplitude );
-00050 
-00052   void noteOff( StkFloat amplitude );
-00053 
-00055   StkFloat tick( unsigned int channel = 0 );
-00056 
-00058 
-00065   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00066 
-00067  protected:
-00068 
-00069   FileWvIn waves_[DRUM_POLYPHONY];
-00070   OnePole  filters_[DRUM_POLYPHONY];
-00071   std::vector<int> soundOrder_;
-00072   std::vector<int> soundNumber_;
-00073   int      nSounding_;
-00074 };
-00075 
-00076 inline StkFloat Drummer :: tick( unsigned int )
-00077 {
-00078   lastFrame_[0] = 0.0;
-00079   if ( nSounding_ == 0 ) return lastFrame_[0];
-00080 
-00081   for ( int i=0; i<DRUM_POLYPHONY; i++ ) {
-00082     if ( soundOrder_[i] >= 0 ) {
-00083       if ( waves_[i].isFinished() ) {
-00084         // Re-order the list.
-00085         for ( int j=0; j<DRUM_POLYPHONY; j++ ) {
-00086           if ( soundOrder_[j] > soundOrder_[i] )
-00087             soundOrder_[j] -= 1;
-00088         }
-00089         soundOrder_[i] = -1;
-00090         nSounding_--;
-00091       }
-00092       else
-00093         lastFrame_[0] += filters_[i].tick( waves_[i].tick() );
-00094     }
-00095   }
-00096 
-00097   return lastFrame_[0];
-00098 }
-00099 
-00100 inline StkFrames& Drummer :: tick( StkFrames& frames, unsigned int channel )
-00101 {
-00102   unsigned int nChannels = lastFrame_.channels();
-00103 #if defined(_STK_DEBUG_)
-00104   if ( channel > frames.channels() - nChannels ) {
-00105     oStream_ << "Drummer::tick(): channel and StkFrames arguments are incompatible!";
-00106     handleError( StkError::FUNCTION_ARGUMENT );
-00107   }
-00108 #endif
-00109 
-00110   StkFloat *samples = &frames[channel];
-00111   unsigned int j, hop = frames.channels() - nChannels;
-00112   if ( nChannels == 1 ) {
-00113     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00114       *samples++ = tick();
-00115   }
-00116   else {
-00117     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00118       *samples++ = tick();
-00119       for ( j=1; j<nChannels; j++ )
-00120         *samples++ = lastFrame_[j];
-00121     }
-00122   }
-00123 
-00124   return frames;
-00125 }
-00126 
-00127 
-00128 } // stk namespace
-00129 
-00130 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Echo_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Echo_8h_source.html deleted file mode 100644 index 9fe5f518d9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Echo_8h_source.html +++ /dev/null @@ -1,113 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Echo.h

00001 #ifndef STK_ECHO_H
-00002 #define STK_ECHO_H
-00003 
-00004 #include "Effect.h" 
-00005 #include "Delay.h" 
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00017 /***************************************************/
-00018 
-00019 class Echo : public Effect
-00020 {
-00021  public:
-00023 
-00026   Echo( unsigned long maximumDelay = (unsigned long) Stk::sampleRate() );
-00027 
-00029   void clear();
-00030 
-00032   void setMaximumDelay( unsigned long delay );
-00033 
-00035   void setDelay( unsigned long delay );
-00036 
-00038   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00039 
-00041   StkFloat tick( StkFloat input );
-00042 
-00044 
-00052   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00053 
-00055 
-00063   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00064 
-00065  protected:
-00066 
-00067   Delay delayLine_;
-00068   unsigned long length_;
-00069 
-00070 };
-00071 
-00072 inline StkFloat Echo :: tick( StkFloat input )
-00073 {
-00074   lastFrame_[0] = effectMix_ * ( delayLine_.tick( input ) - input ) + input;
-00075   return lastFrame_[0];
-00076 }
-00077 
-00078 inline StkFrames& Echo :: tick( StkFrames& frames, unsigned int channel )
-00079 {
-00080 #if defined(_STK_DEBUG_)
-00081   if ( channel >= frames.channels() ) {
-00082     oStream_ << "Echo::tick(): channel and StkFrames arguments are incompatible!";
-00083     handleError( StkError::FUNCTION_ARGUMENT );
-00084   }
-00085 #endif
-00086 
-00087   StkFloat *samples = &frames[channel];
-00088   unsigned int hop = frames.channels();
-00089   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00090     *samples = effectMix_ * ( delayLine_.tick( *samples ) - *samples ) + *samples;
-00091   }
-00092 
-00093   lastFrame_[0] = *(samples-hop);
-00094   return frames;
-00095 }
-00096 
-00097 inline StkFrames& Echo :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00098 {
-00099 #if defined(_STK_DEBUG_)
-00100   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00101     oStream_ << "Echo::tick(): channel and StkFrames arguments are incompatible!";
-00102     handleError( StkError::FUNCTION_ARGUMENT );
-00103   }
-00104 #endif
-00105 
-00106   StkFloat *iSamples = &iFrames[iChannel];
-00107   StkFloat *oSamples = &oFrames[oChannel];
-00108   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00109   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00110     *oSamples = effectMix_ * ( delayLine_.tick( *iSamples ) - *iSamples ) + *iSamples;
-00111   }
-00112 
-00113   lastFrame_[0] = *(oSamples-oHop);
-00114   return iFrames;
-00115 }
-00116 
-00117 } // stk namespace
-00118 
-00119 #endif
-00120 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Effect_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Effect_8h_source.html deleted file mode 100644 index 95098dde49..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Effect_8h_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Effect.h

00001 #ifndef STK_EFFECT_H
-00002 #define STK_EFFECT_H
-00003 
-00004 #include "Stk.h"
-00005 #include <cmath>
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00019 /***************************************************/
-00020 
-00021 class Effect : public Stk
-00022 {
-00023  public:
-00025   Effect( void ) { lastFrame_.resize( 1, 1, 0.0 ); };
-00026 
-00028   unsigned int channelsOut( void ) const { return lastFrame_.channels(); };
-00029 
-00031   const StkFrames& lastFrame( void ) const { return lastFrame_; };
-00032 
-00034   virtual void clear() = 0;
-00035 
-00037   virtual void setEffectMix( StkFloat mix );
-00038 
-00039  protected:
-00040 
-00041   // Returns true if argument value is prime.
-00042   bool isPrime( unsigned int number );
-00043 
-00044   StkFrames lastFrame_;
-00045   StkFloat effectMix_;
-00046 
-00047 };
-00048 
-00049 inline void Effect :: setEffectMix( StkFloat mix )
-00050 {
-00051   if ( mix < 0.0 ) {
-00052     oStream_ << "Effect::setEffectMix: mix parameter is less than zero ... setting to zero!";
-00053     handleError( StkError::WARNING );
-00054     effectMix_ = 0.0;
-00055   }
-00056   else if ( mix > 1.0 ) {
-00057     oStream_ << "Effect::setEffectMix: mix parameter is greater than 1.0 ... setting to one!";
-00058     handleError( StkError::WARNING );
-00059     effectMix_ = 1.0;
-00060   }
-00061   else
-00062     effectMix_ = mix;
-00063 }
-00064 
-00065 inline bool Effect :: isPrime( unsigned int number )
-00066 {
-00067   if ( number == 2 ) return true;
-00068   if ( number & 1 ) {
-00069            for ( int i=3; i<(int)sqrt((double)number)+1; i+=2 )
-00070                     if ( (number % i) == 0 ) return false;
-00071            return true; // prime
-00072          }
-00073   else return false; // even
-00074 }
-00075 
-00076 } // stk namespace
-00077 
-00078 #endif
-00079 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Envelope_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Envelope_8h_source.html deleted file mode 100644 index 9bc78421aa..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Envelope_8h_source.html +++ /dev/null @@ -1,120 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Envelope.h

00001 #ifndef STK_ENVELOPE_H
-00002 #define STK_ENVELOPE_H
-00003 
-00004 #include "Generator.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00019 /***************************************************/
-00020 
-00021 class Envelope : public Generator
-00022 {
-00023  public:
-00024 
-00026   Envelope( void );
-00027 
-00029   ~Envelope( void );
-00030 
-00032   Envelope& operator= ( const Envelope& e );
-00033 
-00035   void keyOn( void ) { this->setTarget( 1.0 ); };
-00036 
-00038   void keyOff( void ) { this->setTarget( 0.0 ); };
-00039 
-00041 
-00044   void setRate( StkFloat rate );
-00045 
-00047 
-00051   void setTime( StkFloat time );
-00052 
-00054   void setTarget( StkFloat target );
-00055 
-00057   void setValue( StkFloat value );
-00058 
-00060   int getState( void ) const { return state_; };
-00061 
-00063   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00064 
-00066   StkFloat tick( void );
-00067 
-00069 
-00076   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00077 
-00078  protected:
-00079 
-00080   void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00081 
-00082   StkFloat value_;
-00083   StkFloat target_;
-00084   StkFloat rate_;
-00085   int state_;
-00086 };
-00087 
-00088 inline StkFloat Envelope :: tick( void )
-00089 {
-00090   if ( state_ ) {
-00091     if ( target_ > value_ ) {
-00092       value_ += rate_;
-00093       if ( value_ >= target_ ) {
-00094         value_ = target_;
-00095         state_ = 0;
-00096       }
-00097     }
-00098     else {
-00099       value_ -= rate_;
-00100       if ( value_ <= target_ ) {
-00101         value_ = target_;
-00102         state_ = 0;
-00103       }
-00104     }
-00105     lastFrame_[0] = value_;
-00106   }
-00107 
-00108   return value_;
-00109 }
-00110 
-00111 inline StkFrames& Envelope :: tick( StkFrames& frames, unsigned int channel )
-00112 {
-00113 #if defined(_STK_DEBUG_)
-00114   if ( channel >= frames.channels() ) {
-00115     oStream_ << "Envelope::tick(): channel and StkFrames arguments are incompatible!";
-00116     handleError( StkError::FUNCTION_ARGUMENT );
-00117   }
-00118 #endif
-00119 
-00120   StkFloat *samples = &frames[channel];
-00121   unsigned int hop = frames.channels();
-00122   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00123     *samples = tick();
-00124 
-00125   return frames;
-00126 }
-00127 
-00128 } // stk namespace
-00129 
-00130 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/FMVoices_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/FMVoices_8h_source.html deleted file mode 100644 index 0d455694fe..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/FMVoices_8h_source.html +++ /dev/null @@ -1,115 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

FMVoices.h

00001 #ifndef STK_FMVOICES_H
-00002 #define STK_FMVOICES_H
-00003 
-00004 #include "FM.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00038 /***************************************************/
-00039 
-00040 class FMVoices : public FM
-00041 {
-00042  public:
-00044 
-00047   FMVoices( void );
-00048 
-00050   ~FMVoices( void );
-00051 
-00053   void setFrequency( StkFloat frequency );
-00054 
-00056   void noteOn( StkFloat frequency, StkFloat amplitude );
-00057 
-00059   void controlChange( int number, StkFloat value );
-00060 
-00062   StkFloat tick( unsigned int channel = 0 );
-00063 
-00065 
-00072   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00073 
-00074  protected:
-00075 
-00076   int currentVowel_;
-00077   StkFloat tilt_[3];
-00078   StkFloat mods_[3];
-00079 };
-00080 
-00081 inline StkFloat FMVoices :: tick( unsigned int )
-00082 {
-00083   register StkFloat temp, temp2;
-00084 
-00085   temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick();
-00086   temp2 = vibrato_.tick() * modDepth_ * 0.1;
-00087 
-00088   waves_[0]->setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[0]);
-00089   waves_[1]->setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[1]);
-00090   waves_[2]->setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[2]);
-00091   waves_[3]->setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[3]);
-00092 
-00093   waves_[0]->addPhaseOffset(temp * mods_[0]);
-00094   waves_[1]->addPhaseOffset(temp * mods_[1]);
-00095   waves_[2]->addPhaseOffset(temp * mods_[2]);
-00096   waves_[3]->addPhaseOffset( twozero_.lastOut() );
-00097   twozero_.tick( temp );
-00098   temp =  gains_[0] * tilt_[0] * adsr_[0]->tick() * waves_[0]->tick();
-00099   temp += gains_[1] * tilt_[1] * adsr_[1]->tick() * waves_[1]->tick();
-00100   temp += gains_[2] * tilt_[2] * adsr_[2]->tick() * waves_[2]->tick();
-00101 
-00102   lastFrame_[0] = temp * 0.33;
-00103   return lastFrame_[0];
-00104 }
-00105 
-00106 inline StkFrames& FMVoices :: tick( StkFrames& frames, unsigned int channel )
-00107 {
-00108   unsigned int nChannels = lastFrame_.channels();
-00109 #if defined(_STK_DEBUG_)
-00110   if ( channel > frames.channels() - nChannels ) {
-00111     oStream_ << "FMVoices::tick(): channel and StkFrames arguments are incompatible!";
-00112     handleError( StkError::FUNCTION_ARGUMENT );
-00113   }
-00114 #endif
-00115 
-00116   StkFloat *samples = &frames[channel];
-00117   unsigned int j, hop = frames.channels() - nChannels;
-00118   if ( nChannels == 1 ) {
-00119     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00120       *samples++ = tick();
-00121   }
-00122   else {
-00123     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00124       *samples++ = tick();
-00125       for ( j=1; j<nChannels; j++ )
-00126         *samples++ = lastFrame_[j];
-00127     }
-00128   }
-00129 
-00130   return frames;
-00131 }
-00132 
-00133 } // stk namespace
-00134 
-00135 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/FM_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/FM_8h_source.html deleted file mode 100644 index 82e62b6433..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/FM_8h_source.html +++ /dev/null @@ -1,99 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

FM.h

00001 #ifndef STK_FM_H
-00002 #define STK_FM_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "ADSR.h"
-00006 #include "FileLoop.h"
-00007 #include "SineWave.h"
-00008 #include "TwoZero.h"
-00009 
-00010 namespace stk {
-00011 
-00012 /***************************************************/
-00035 /***************************************************/
-00036 
-00037 class FM : public Instrmnt
-00038 {
-00039  public:
-00041 
-00044   FM( unsigned int operators = 4 );
-00045 
-00047   virtual ~FM( void );
-00048 
-00050   void clear( void );
-00051 
-00053   void loadWaves( const char **filenames );
-00054 
-00056   virtual void setFrequency( StkFloat frequency );
-00057 
-00059   void setRatio( unsigned int waveIndex, StkFloat ratio );
-00060 
-00062   void setGain( unsigned int waveIndex, StkFloat gain );
-00063 
-00065   void setModulationSpeed( StkFloat mSpeed ) { vibrato_.setFrequency( mSpeed ); };
-00066 
-00068   void setModulationDepth( StkFloat mDepth ) { modDepth_ = mDepth; };
-00069 
-00071   void setControl1( StkFloat cVal ) { control1_ = cVal * 2.0; };
-00072 
-00074   void setControl2( StkFloat cVal ) { control2_ = cVal * 2.0; };
-00075 
-00077   void keyOn( void );
-00078 
-00080   void keyOff( void );
-00081 
-00083   void noteOff( StkFloat amplitude );
-00084 
-00086   virtual void controlChange( int number, StkFloat value );
-00087 
-00089   virtual StkFloat tick( unsigned int ) = 0;
-00090 
-00092 
-00099   virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0;
-00100 
-00101  protected:
-00102 
-00103   std::vector<ADSR *> adsr_; 
-00104   std::vector<FileLoop *> waves_;
-00105   SineWave vibrato_;
-00106   TwoZero  twozero_;
-00107   unsigned int nOperators_;
-00108   StkFloat baseFrequency_;
-00109   std::vector<StkFloat> ratios_;
-00110   std::vector<StkFloat> gains_;
-00111   StkFloat modDepth_;
-00112   StkFloat control1_;
-00113   StkFloat control2_;
-00114   StkFloat fmGains_[100];
-00115   StkFloat fmSusLevels_[16];
-00116   StkFloat fmAttTimes_[32];
-00117 
-00118 };
-00119 
-00120 } // stk namespace
-00121 
-00122 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/FileLoop_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/FileLoop_8h_source.html deleted file mode 100644 index 313a057a0b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/FileLoop_8h_source.html +++ /dev/null @@ -1,97 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

FileLoop.h

00001 #ifndef STK_FILELOOP_H
-00002 #define STK_FILELOOP_H
-00003 
-00004 #include "FileWvIn.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00024 /***************************************************/
-00025 
-00026 class FileLoop : protected FileWvIn
-00027 {
-00028  public:
-00030   FileLoop( unsigned long chunkThreshold = 1000000, unsigned long chunkSize = 1024 );
-00031 
-00033   FileLoop( std::string fileName, bool raw = false, bool doNormalize = true,
-00034             unsigned long chunkThreshold = 1000000, unsigned long chunkSize = 1024 );
-00035 
-00037   ~FileLoop( void );
-00038 
-00040 
-00049   void openFile( std::string fileName, bool raw = false, bool doNormalize = true );
-00050 
-00052   void closeFile( void ) { FileWvIn::closeFile(); };
-00053 
-00055   void reset( void ) { FileWvIn::reset(); };
-00056 
-00058   unsigned int channelsOut( void ) const { return data_.channels(); };
-00059 
-00061 
-00065   void normalize( void ) { FileWvIn::normalize( 1.0 ); };
-00066 
-00068 
-00072   void normalize( StkFloat peak ) { FileWvIn::normalize( peak ); };
-00073 
-00075   unsigned long getSize( void ) const { return data_.frames(); };
-00076 
-00078 
-00083   StkFloat getFileRate( void ) const { return data_.dataRate(); };
-00084 
-00086 
-00089   void setRate( StkFloat rate );
-00090 
-00092 
-00098   void setFrequency( StkFloat frequency ) { this->setRate( file_.fileSize() * frequency / Stk::sampleRate() ); };
-00099 
-00101   void addTime( StkFloat time );
-00102 
-00104 
-00109   void addPhase( StkFloat angle );
-00110 
-00112 
-00117   void addPhaseOffset( StkFloat angle );
-00118 
-00120 
-00129   StkFloat lastOut( unsigned int channel = 0 ) { return FileWvIn::lastOut( channel ); };
-00130 
-00132 
-00141   StkFloat tick( unsigned int channel = 0 );
-00142 
-00144 
-00153   StkFrames& tick( StkFrames& frames );
-00154 
-00155  protected:
-00156 
-00157   StkFrames firstFrame_;
-00158   StkFloat phaseOffset_;
-00159 
-00160 };
-00161 
-00162 } // stk namespace
-00163 
-00164 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/FileRead_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/FileRead_8h_source.html deleted file mode 100644 index 2ed968c52b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/FileRead_8h_source.html +++ /dev/null @@ -1,99 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

FileRead.h

00001 #ifndef STK_FILEREAD_H
-00002 #define STK_FILEREAD_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00039 /***************************************************/
-00040 
-00041 class FileRead : public Stk
-00042 {
-00043 public:
-00045   FileRead( void );
-00046 
-00048 
-00054   FileRead( std::string fileName, bool typeRaw = false, unsigned int nChannels = 1,
-00055             StkFormat format = STK_SINT16, StkFloat rate = 22050.0 );
-00056 
-00058   ~FileRead( void );
-00059 
-00061 
-00067   void open( std::string fileName, bool typeRaw = false, unsigned int nChannels = 1,
-00068              StkFormat format = STK_SINT16, StkFloat rate = 22050.0 );
-00069 
-00071   void close( void );
-00072 
-00074   bool isOpen( void );
-00075 
-00077   unsigned long fileSize( void ) const { return fileSize_; };
-00078 
-00080   unsigned int channels( void ) const { return channels_; };
-00081 
-00083   StkFormat format( void ) const { return dataType_; };
-00084 
-00086 
-00091   StkFloat fileRate( void ) const { return fileRate_; };
-00092 
-00094 
-00106   void read( StkFrames& buffer, unsigned long startFrame = 0, bool doNormalize = true );
-00107 
-00108 protected:
-00109 
-00110   // Get STK RAW file information.
-00111   bool getRawInfo( const char *fileName, unsigned int nChannels,
-00112                    StkFormat format, StkFloat rate );
-00113 
-00114   // Get WAV file header information.
-00115   bool getWavInfo( const char *fileName );
-00116 
-00117   // Get SND (AU) file header information.
-00118   bool getSndInfo( const char *fileName );
-00119 
-00120   // Get AIFF file header information.
-00121   bool getAifInfo( const char *fileName );
-00122 
-00123   // Get MAT-file header information.
-00124   bool getMatInfo( const char *fileName );
-00125 
-00126   // Helper function for MAT-file parsing.
-00127   bool findNextMatArray( SINT32 *chunkSize, SINT32 *rows, SINT32 *columns, SINT32 *nametype );
-00128 
-00129   FILE *fd_;
-00130   bool byteswap_;
-00131   bool wavFile_;
-00132   unsigned long fileSize_;
-00133   unsigned long dataOffset_;
-00134   unsigned int channels_;
-00135   StkFormat dataType_;
-00136   StkFloat fileRate_;
-00137 };
-00138 
-00139 } // stk namespace
-00140 
-00141 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/FileWrite_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/FileWrite_8h_source.html deleted file mode 100644 index a37ebf2184..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/FileWrite_8h_source.html +++ /dev/null @@ -1,105 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

FileWrite.h

00001 #ifndef STK_FILEWRITE_H
-00002 #define STK_FILEWRITE_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00029 /***************************************************/
-00030 
-00031 class FileWrite : public Stk
-00032 {
-00033  public:
-00034 
-00035   typedef unsigned long FILE_TYPE;
-00036 
-00037   static const FILE_TYPE FILE_RAW; 
-00038   static const FILE_TYPE FILE_WAV; 
-00039   static const FILE_TYPE FILE_SND; 
-00040   static const FILE_TYPE FILE_AIF; 
-00041   static const FILE_TYPE FILE_MAT; 
-00043 
-00044   FileWrite( void );
-00045 
-00047 
-00050   FileWrite( std::string fileName, unsigned int nChannels = 1, FILE_TYPE type = FILE_WAV, Stk::StkFormat format = STK_SINT16 );
-00051 
-00053   virtual ~FileWrite();
-00054 
-00056 
-00059   void open( std::string fileName, unsigned int nChannels = 1,
-00060              FileWrite::FILE_TYPE type = FILE_WAV, Stk::StkFormat format = STK_SINT16 );
-00061 
-00063   void close( void );
-00064 
-00066   bool isOpen( void );
-00067 
-00069 
-00074   void write( StkFrames& buffer );
-00075 
-00076  protected:
-00077 
-00078   // Write STK RAW file header.
-00079   bool setRawFile( std::string fileName );
-00080 
-00081   // Write WAV file header.
-00082   bool setWavFile( std::string fileName );
-00083 
-00084   // Close WAV file, updating the header.
-00085   void closeWavFile( void );
-00086 
-00087   // Write SND (AU) file header.
-00088   bool setSndFile( std::string fileName );
-00089 
-00090   // Close SND file, updating the header.
-00091   void closeSndFile( void );
-00092 
-00093   // Write AIFF file header.
-00094   bool setAifFile( std::string fileName );
-00095 
-00096   // Close AIFF file, updating the header.
-00097   void closeAifFile( void );
-00098 
-00099   // Write MAT-file header.
-00100   bool setMatFile( std::string fileName );
-00101 
-00102   // Close MAT-file, updating the header.
-00103   void closeMatFile( void );
-00104 
-00105   FILE *fd_;
-00106   FILE_TYPE fileType_;
-00107   StkFormat dataType_;
-00108   unsigned int channels_;
-00109   unsigned long frameCounter_;
-00110   bool byteswap_;
-00111 
-00112 };
-00113 
-00114 } // stk namespace
-00115 
-00116 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/FileWvIn_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/FileWvIn_8h_source.html deleted file mode 100644 index 57b640928d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/FileWvIn_8h_source.html +++ /dev/null @@ -1,119 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

FileWvIn.h

00001 #ifndef STK_FILEWVIN_H
-00002 #define STK_FILEWVIN_H
-00003 
-00004 #include "WvIn.h"
-00005 #include "FileRead.h"
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00040 /***************************************************/
-00041 
-00042 class FileWvIn : public WvIn
-00043 {
-00044 public:
-00046   FileWvIn( unsigned long chunkThreshold = 1000000, unsigned long chunkSize = 1024 );
-00047 
-00049 
-00053   FileWvIn( std::string fileName, bool raw = false, bool doNormalize = true,
-00054             unsigned long chunkThreshold = 1000000, unsigned long chunkSize = 1024 );
-00055 
-00057   ~FileWvIn( void );
-00058 
-00060 
-00069   virtual void openFile( std::string fileName, bool raw = false, bool doNormalize = true );
-00070 
-00072   virtual void closeFile( void );
-00073 
-00075   virtual void reset( void );
-00076 
-00078 
-00082   virtual void normalize( void );
-00083 
-00085 
-00089   virtual void normalize( StkFloat peak );
-00090 
-00092   virtual unsigned long getSize( void ) const { return file_.fileSize(); };
-00093 
-00095 
-00100   virtual StkFloat getFileRate( void ) const { return data_.dataRate(); };
-00101 
-00103   bool isOpen( void ) { return file_.isOpen(); };
-00104 
-00106   bool isFinished( void ) const { return finished_; };
-00107 
-00109 
-00112   virtual void setRate( StkFloat rate );
-00113 
-00115 
-00118   virtual void addTime( StkFloat time );
-00119 
-00121 
-00127   void setInterpolate( bool doInterpolate ) { interpolate_ = doInterpolate; };
-00128 
-00130 
-00139   StkFloat lastOut( unsigned int channel = 0 );
-00140 
-00142 
-00151   virtual StkFloat tick( unsigned int channel = 0 );
-00152 
-00154 
-00162   virtual StkFrames& tick( StkFrames& frames );
-00163 
-00164 protected:
-00165 
-00166   void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00167 
-00168   FileRead file_;
-00169   bool finished_;
-00170   bool interpolate_;
-00171   bool normalizing_;
-00172   bool chunking_;
-00173   StkFloat time_;
-00174   StkFloat rate_;
-00175   unsigned long chunkThreshold_;
-00176   unsigned long chunkSize_;
-00177   long chunkPointer_;
-00178 
-00179 };
-00180 
-00181 inline StkFloat FileWvIn :: lastOut( unsigned int channel )
-00182 {
-00183 #if defined(_STK_DEBUG_)
-00184   if ( channel >= data_.channels() ) {
-00185     oStream_ << "FileWvIn::lastOut(): channel argument and soundfile data are incompatible!";
-00186     handleError( StkError::FUNCTION_ARGUMENT );
-00187   }
-00188 #endif
-00189 
-00190   if ( finished_ ) return 0.0;
-00191   return lastFrame_[channel];
-00192 }
-00193 
-00194 } // stk namespace
-00195 
-00196 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/FileWvOut_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/FileWvOut_8h_source.html deleted file mode 100644 index fefcb12024..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/FileWvOut_8h_source.html +++ /dev/null @@ -1,80 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

FileWvOut.h

00001 #ifndef STK_FILEWVOUT_H
-00002 #define STK_FILEWVOUT_H
-00003 
-00004 #include "WvOut.h"
-00005 #include "FileWrite.h"
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00030 /***************************************************/
-00031 
-00032 class FileWvOut : public WvOut
-00033 {
-00034  public:
-00035 
-00037 
-00041   FileWvOut( unsigned int bufferFrames = 1024 );
-00042 
-00044 
-00047   FileWvOut( std::string fileName,
-00048              unsigned int nChannels = 1,
-00049              FileWrite::FILE_TYPE type = FileWrite::FILE_WAV,
-00050              Stk::StkFormat format = STK_SINT16,
-00051              unsigned int bufferFrames = 1024 );
-00052 
-00054   virtual ~FileWvOut();
-00055 
-00057 
-00062   void openFile( std::string fileName,
-00063                  unsigned int nChannels,
-00064                  FileWrite::FILE_TYPE type,
-00065                  Stk::StkFormat format );
-00066 
-00068 
-00072   void closeFile( void );
-00073 
-00075 
-00078   void tick( const StkFloat sample );
-00079 
-00081 
-00087   void tick( const StkFrames& frames );
-00088 
-00089  protected:
-00090 
-00091   void incrementFrame( void );
-00092 
-00093   FileWrite file_;
-00094   unsigned int bufferFrames_;
-00095   unsigned int bufferIndex_;
-00096   unsigned int iData_;
-00097 
-00098 };
-00099 
-00100 } // stk namespace
-00101 
-00102 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Filter_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Filter_8h_source.html deleted file mode 100644 index 318c835ee7..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Filter_8h_source.html +++ /dev/null @@ -1,116 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Filter.h

00001 #ifndef STK_FILTER_H
-00002 #define STK_FILTER_H
-00003 
-00004 #include "Stk.h"
-00005 #include <vector>
-00006 #include <cmath>
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00020 /***************************************************/
-00021 
-00022 class Filter : public Stk
-00023 {
-00024 public:
-00026   Filter( void ) { gain_ = 1.0; channelsIn_ = 1; lastFrame_.resize( 1, 1, 0.0 ); };
-00027 
-00029   unsigned int channelsIn( void ) const { return channelsIn_; };
-00030 
-00032   unsigned int channelsOut( void ) const { return lastFrame_.channels(); };
-00033 
-00035   virtual void clear( void );
-00036 
-00038 
-00042   void setGain( StkFloat gain ) { gain_ = gain; };
-00043 
-00045   StkFloat getGain( void ) const { return gain_; };
-00046 
-00048 
-00053   StkFloat phaseDelay( StkFloat frequency );
-00054 
-00056   const StkFrames& lastFrame( void ) const { return lastFrame_; };
-00057 
-00059 
-00067   virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0;
-00068 
-00069 protected:
-00070 
-00071   StkFloat gain_;
-00072   unsigned int channelsIn_;
-00073   StkFrames lastFrame_;
-00074 
-00075   std::vector<StkFloat> b_;
-00076   std::vector<StkFloat> a_;
-00077   StkFrames outputs_;
-00078   StkFrames inputs_;
-00079 
-00080 };
-00081 
-00082 inline void Filter :: clear( void )
-00083 {
-00084   unsigned int i;
-00085   for ( i=0; i<inputs_.size(); i++ )
-00086     inputs_[i] = 0.0;
-00087   for ( i=0; i<outputs_.size(); i++ )
-00088     outputs_[i] = 0.0;
-00089   for ( i=0; i<lastFrame_.size(); i++ )
-00090     lastFrame_[i] = 0.0;  
-00091 }
-00092 
-00093 inline StkFloat Filter :: phaseDelay( StkFloat frequency )
-00094 {
-00095   if ( frequency <= 0.0 || frequency > 0.5 * Stk::sampleRate() ) {
-00096     oStream_ << "Filter::phaseDelay: argument (" << frequency << ") is out of range!";
-00097     handleError( StkError::WARNING ); return 0.0;
-00098   }
-00099 
-00100   StkFloat omegaT = 2 * PI * frequency / Stk::sampleRate();
-00101   StkFloat real = 0.0, imag = 0.0;
-00102   for ( unsigned int i=0; i<b_.size(); i++ ) {
-00103     real += b_[i] * std::cos( i * omegaT );
-00104     imag -= b_[i] * std::sin( i * omegaT );
-00105   }
-00106   real *= gain_;
-00107   imag *= gain_;
-00108 
-00109   StkFloat phase = atan2( imag, real );
-00110 
-00111   real = 0.0, imag = 0.0;
-00112   for ( unsigned int i=0; i<a_.size(); i++ ) {
-00113     real += a_[i] * std::cos( i * omegaT );
-00114     imag -= a_[i] * std::sin( i * omegaT );
-00115   }
-00116 
-00117   phase -= std::atan2( imag, real );
-00118   phase = std::fmod( -phase, 2 * PI );
-00119   return phase / omegaT;
-00120 }
-00121 
-00122 } // stk namespace
-00123 
-00124 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Fir_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Fir_8h_source.html deleted file mode 100644 index 92cee75170..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Fir_8h_source.html +++ /dev/null @@ -1,131 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Fir.h

00001 #ifndef STK_FIR_H
-00002 #define STK_FIR_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00028 /***************************************************/
-00029 
-00030 class Fir : public Filter
-00031 {
-00032 public:
-00034   Fir( void );
-00035 
-00037 
-00041   Fir( std::vector<StkFloat> &coefficients );
-00042 
-00044   ~Fir( void );
-00045 
-00047 
-00052   void setCoefficients( std::vector<StkFloat> &coefficients, bool clearState = false );
-00053 
-00055   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00056 
-00058   StkFloat tick( StkFloat input );
-00059 
-00061 
-00069   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00070 
-00072 
-00080   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00081 
-00082 protected:
-00083 
-00084 };
-00085 
-00086 inline StkFloat Fir :: tick( StkFloat input )
-00087 {
-00088   lastFrame_[0] = 0.0;
-00089   inputs_[0] = gain_ * input;
-00090 
-00091   for ( unsigned int i=b_.size()-1; i>0; i-- ) {
-00092     lastFrame_[0] += b_[i] * inputs_[i];
-00093     inputs_[i] = inputs_[i-1];
-00094   }
-00095   lastFrame_[0] += b_[0] * inputs_[0];
-00096 
-00097   return lastFrame_[0];
-00098 }
-00099 
-00100 inline StkFrames& Fir :: tick( StkFrames& frames, unsigned int channel )
-00101 {
-00102 #if defined(_STK_DEBUG_)
-00103   if ( channel >= frames.channels() ) {
-00104     oStream_ << "Fir::tick(): channel and StkFrames arguments are incompatible!";
-00105     handleError( StkError::FUNCTION_ARGUMENT );
-00106   }
-00107 #endif
-00108 
-00109   StkFloat *samples = &frames[channel];
-00110   unsigned int i, hop = frames.channels();
-00111   for ( unsigned int j=0; j<frames.frames(); j++, samples += hop ) {
-00112     inputs_[0] = gain_ * *samples;
-00113     *samples = 0.0;
-00114 
-00115     for ( i=b_.size()-1; i>0; i-- ) {
-00116       *samples += b_[i] * inputs_[i];
-00117       inputs_[i] = inputs_[i-1];
-00118     }
-00119     *samples += b_[0] * inputs_[0];
-00120   }
-00121 
-00122   lastFrame_[0] = *(samples-hop);
-00123   return frames;
-00124 }
-00125 
-00126 inline StkFrames& Fir :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00127 {
-00128 #if defined(_STK_DEBUG_)
-00129   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00130     oStream_ << "Fir::tick(): channel and StkFrames arguments are incompatible!";
-00131     handleError( StkError::FUNCTION_ARGUMENT );
-00132   }
-00133 #endif
-00134 
-00135   StkFloat *iSamples = &iFrames[iChannel];
-00136   StkFloat *oSamples = &oFrames[oChannel];
-00137   unsigned int i, iHop = iFrames.channels(), oHop = oFrames.channels();
-00138   for ( unsigned int j=0; j<iFrames.frames(); j++, iSamples += iHop, oSamples += oHop ) {
-00139     inputs_[0] = gain_ * *iSamples;
-00140     *oSamples = 0.0;
-00141 
-00142     for ( i=b_.size()-1; i>0; i-- ) {
-00143       *oSamples += b_[i] * inputs_[i];
-00144       inputs_[i] = inputs_[i-1];
-00145     }
-00146     *oSamples += b_[0] * inputs_[0];
-00147   }
-00148 
-00149   lastFrame_[0] = *(oSamples-oHop);
-00150   return iFrames;
-00151 }
-00152 
-00153 } // stk namespace
-00154 
-00155 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Flute_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Flute_8h_source.html deleted file mode 100644 index 9e1d203d5c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Flute_8h_source.html +++ /dev/null @@ -1,147 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Flute.h

00001 #ifndef STK_FLUTE_H
-00002 #define STK_FLUTE_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "JetTable.h"
-00006 #include "DelayL.h"
-00007 #include "OnePole.h"
-00008 #include "PoleZero.h"
-00009 #include "Noise.h"
-00010 #include "ADSR.h"
-00011 #include "SineWave.h"
-00012 
-00013 namespace stk {
-00014 
-00015 /***************************************************/
-00037 /***************************************************/
-00038 
-00039 class Flute : public Instrmnt
-00040 {
-00041  public:
-00043 
-00046   Flute( StkFloat lowestFrequency );
-00047 
-00049   ~Flute( void );
-00050 
-00052   void clear( void );
-00053 
-00055   void setFrequency( StkFloat frequency );
-00056 
-00058   void setJetReflection( StkFloat coefficient ) { jetReflection_ = coefficient; };
-00059 
-00061   void setEndReflection( StkFloat coefficient ) { endReflection_ = coefficient; };
-00062 
-00064   void setJetDelay( StkFloat aRatio );
-00065 
-00067   void startBlowing( StkFloat amplitude, StkFloat rate );
-00068 
-00070   void stopBlowing( StkFloat rate );
-00071 
-00073   void noteOn( StkFloat frequency, StkFloat amplitude );
-00074 
-00076   void noteOff( StkFloat amplitude );
-00077 
-00079   void controlChange( int number, StkFloat value );
-00080 
-00082   StkFloat tick( unsigned int channel = 0 );
-00083 
-00085 
-00092   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00093 
-00094  protected:
-00095 
-00096   DelayL   jetDelay_;
-00097   DelayL   boreDelay_;
-00098   JetTable jetTable_;
-00099   OnePole  filter_;
-00100   PoleZero dcBlock_;
-00101   Noise    noise_;
-00102   ADSR     adsr_;
-00103   SineWave vibrato_;
-00104 
-00105   StkFloat lastFrequency_;
-00106   StkFloat maxPressure_;
-00107   StkFloat jetReflection_;
-00108   StkFloat endReflection_;
-00109   StkFloat noiseGain_;
-00110   StkFloat vibratoGain_;
-00111   StkFloat outputGain_;
-00112   StkFloat jetRatio_;
-00113 
-00114 };
-00115 
-00116 inline StkFloat Flute :: tick( unsigned int )
-00117 {
-00118   StkFloat pressureDiff;
-00119   StkFloat breathPressure;
-00120 
-00121   // Calculate the breath pressure (envelope + noise + vibrato)
-00122   breathPressure = maxPressure_ * adsr_.tick();
-00123   breathPressure += breathPressure * ( noiseGain_ * noise_.tick() + vibratoGain_ * vibrato_.tick() );
-00124 
-00125   StkFloat temp = -filter_.tick( boreDelay_.lastOut() );
-00126   temp = dcBlock_.tick( temp ); // Block DC on reflection.
-00127 
-00128   pressureDiff = breathPressure - (jetReflection_ * temp);
-00129   pressureDiff = jetDelay_.tick( pressureDiff );
-00130   pressureDiff = jetTable_.tick( pressureDiff ) + (endReflection_ * temp);
-00131   lastFrame_[0] = (StkFloat) 0.3 * boreDelay_.tick( pressureDiff );
-00132 
-00133   lastFrame_[0] *= outputGain_;
-00134   return lastFrame_[0];
-00135 }
-00136 
-00137 inline StkFrames& Flute :: tick( StkFrames& frames, unsigned int channel )
-00138 {
-00139   unsigned int nChannels = lastFrame_.channels();
-00140 #if defined(_STK_DEBUG_)
-00141   if ( channel > frames.channels() - nChannels ) {
-00142     oStream_ << "Flute::tick(): channel and StkFrames arguments are incompatible!";
-00143     handleError( StkError::FUNCTION_ARGUMENT );
-00144   }
-00145 #endif
-00146 
-00147   StkFloat *samples = &frames[channel];
-00148   unsigned int j, hop = frames.channels() - nChannels;
-00149   if ( nChannels == 1 ) {
-00150     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00151       *samples++ = tick();
-00152   }
-00153   else {
-00154     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00155       *samples++ = tick();
-00156       for ( j=1; j<nChannels; j++ )
-00157         *samples++ = lastFrame_[j];
-00158     }
-00159   }
-00160 
-00161   return frames;
-00162 }
-00163 
-00164 } // stk namespace
-00165 
-00166 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/FormSwep_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/FormSwep_8h_source.html deleted file mode 100644 index 4620d31045..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/FormSwep_8h_source.html +++ /dev/null @@ -1,156 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

FormSwep.h

00001 #ifndef STK_FORMSWEP_H
-00002 #define STK_FORMSWEP_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class FormSwep : public Filter
-00021 {
-00022  public:
-00023 
-00025   FormSwep( void );
-00026 
-00028   ~FormSwep();
-00029 
-00031   void ignoreSampleRateChange( bool ignore = true ) { ignoreSampleRateChange_ = ignore; };
-00032 
-00034 
-00047   void setResonance( StkFloat frequency, StkFloat radius );
-00048 
-00050   void setStates( StkFloat frequency, StkFloat radius, StkFloat gain = 1.0 );
-00051 
-00053   void setTargets( StkFloat frequency, StkFloat radius, StkFloat gain = 1.0 );
-00054 
-00056 
-00064   void setSweepRate( StkFloat rate );
-00065 
-00067 
-00072   void setSweepTime( StkFloat time );
-00073 
-00075   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00076 
-00078   StkFloat tick( StkFloat input );
-00079 
-00081 
-00089   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00090 
-00092 
-00100   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00101 
-00102  protected:
-00103 
-00104   virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00105 
-00106   bool dirty_;
-00107   StkFloat frequency_;
-00108   StkFloat radius_;
-00109   StkFloat startFrequency_;
-00110   StkFloat startRadius_;
-00111   StkFloat startGain_;
-00112   StkFloat targetFrequency_;
-00113   StkFloat targetRadius_;
-00114   StkFloat targetGain_;
-00115   StkFloat deltaFrequency_;
-00116   StkFloat deltaRadius_;
-00117   StkFloat deltaGain_;
-00118   StkFloat sweepState_;
-00119   StkFloat sweepRate_;
-00120 
-00121 };
-00122 
-00123 inline StkFloat FormSwep :: tick( StkFloat input )
-00124 {                                     
-00125   if ( dirty_ )  {
-00126     sweepState_ += sweepRate_;
-00127     if ( sweepState_ >= 1.0 )   {
-00128       sweepState_ = 1.0;
-00129       dirty_ = false;
-00130       radius_ = targetRadius_;
-00131       frequency_ = targetFrequency_;
-00132       gain_ = targetGain_;
-00133     }
-00134     else {
-00135       radius_ = startRadius_ + (deltaRadius_ * sweepState_);
-00136       frequency_ = startFrequency_ + (deltaFrequency_ * sweepState_);
-00137       gain_ = startGain_ + (deltaGain_ * sweepState_);
-00138     }
-00139     this->setResonance( frequency_, radius_ );
-00140   }
-00141 
-00142   inputs_[0] = gain_ * input;
-00143   lastFrame_[0] = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
-00144   lastFrame_[0] -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
-00145   inputs_[2] = inputs_[1];
-00146   inputs_[1] = inputs_[0];
-00147   outputs_[2] = outputs_[1];
-00148   outputs_[1] = lastFrame_[0];
-00149 
-00150   return lastFrame_[0];
-00151 }
-00152 
-00153 inline StkFrames& FormSwep :: tick( StkFrames& frames, unsigned int channel )
-00154 {
-00155 #if defined(_STK_DEBUG_)
-00156   if ( channel >= frames.channels() ) {
-00157     oStream_ << "FormSwep::tick(): channel and StkFrames arguments are incompatible!";
-00158     handleError( StkError::FUNCTION_ARGUMENT );
-00159   }
-00160 #endif
-00161 
-00162   StkFloat *samples = &frames[channel];
-00163   unsigned int hop = frames.channels();
-00164   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00165     *samples = tick( *samples );
-00166 
-00167   return frames;
-00168 }
-00169 
-00170 inline StkFrames& FormSwep :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00171 {
-00172 #if defined(_STK_DEBUG_)
-00173   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00174     oStream_ << "FormSwep::tick(): channel and StkFrames arguments are incompatible!";
-00175     handleError( StkError::FUNCTION_ARGUMENT );
-00176   }
-00177 #endif
-00178 
-00179   StkFloat *iSamples = &iFrames[iChannel];
-00180   StkFloat *oSamples = &oFrames[oChannel];
-00181   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00182   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop )
-00183     *oSamples = tick( *iSamples );
-00184 
-00185   return iFrames;
-00186 }
-00187 
-00188 } // stk namespace
-00189 
-00190 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/FreeVerb_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/FreeVerb_8h_source.html deleted file mode 100644 index c55a80c3a5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/FreeVerb_8h_source.html +++ /dev/null @@ -1,212 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

FreeVerb.h

00001 #ifndef STK_FREEVERB_H
-00002 #define STK_FREEVERB_H
-00003 
-00004 #include "Effect.h"
-00005 #include "Delay.h"
-00006 #include "OnePole.h"
-00007 
-00008 namespace stk {
-00009 
-00010 /***********************************************************************/
-00024 /***********************************************************************/
-00025 
-00026 class FreeVerb : public Effect
-00027 {   
-00028  public:
-00030 
-00036   FreeVerb();
-00037 
-00039   ~FreeVerb();
-00040 
-00042   void setEffectMix( StkFloat mix );
-00043 
-00045   void setRoomSize( StkFloat value );
-00046 
-00048   StkFloat getRoomSize( void );
-00049 
-00051   void setDamping( StkFloat value );
-00052 
-00054   StkFloat getDamping( void );
-00055 
-00057   void setWidth( StkFloat value );
-00058 
-00060   StkFloat getWidth( void );
-00061 
-00063   void setMode( bool isFrozen );
-00064 
-00066   StkFloat getMode( void );
-00067 
-00069   void clear( void );
-00070 
-00072 
-00080   StkFloat lastOut( unsigned int channel = 0 );
-00081 
-00083 
-00090   StkFloat tick( StkFloat inputL, StkFloat inputR = 0.0, unsigned int channel = 0 );
-00091 
-00093 
-00103   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00104 
-00106 
-00117   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00118 
-00119  protected:
-00121   void update( void );
-00122 
-00123   // Clamp very small floats to zero, version from
-00124   // http://music.columbia.edu/pipermail/linux-audio-user/2004-July/013489.html .
-00125   // However, this is for 32-bit floats only.
-00126   //static inline StkFloat undenormalize( volatile StkFloat s ) { 
-00127   //  s += 9.8607615E-32f; 
-00128   //  return s - 9.8607615E-32f; 
-00129   //}
-00130     
-00131   static const int nCombs = 8;
-00132   static const int nAllpasses = 4;
-00133   static const int stereoSpread = 23;
-00134   static const StkFloat fixedGain;
-00135   static const StkFloat scaleWet;
-00136   static const StkFloat scaleDry;
-00137   static const StkFloat scaleDamp;
-00138   static const StkFloat scaleRoom;
-00139   static const StkFloat offsetRoom;
-00140 
-00141   // Delay line lengths for 44100Hz sampling rate.
-00142   static int cDelayLengths[nCombs];
-00143   static int aDelayLengths[nAllpasses];
-00144 
-00145   StkFloat g_;        // allpass coefficient
-00146   StkFloat gain_;
-00147   StkFloat roomSizeMem_, roomSize_;
-00148   StkFloat dampMem_, damp_;
-00149   StkFloat wet1_, wet2_;
-00150   StkFloat dry_;
-00151   StkFloat width_;
-00152   bool frozenMode_;
-00153 
-00154   // LBFC: Lowpass Feedback Comb Filters
-00155   Delay combDelayL_[nCombs];
-00156   Delay combDelayR_[nCombs];
-00157   OnePole combLPL_[nCombs];
-00158   OnePole combLPR_[nCombs];
-00159         
-00160   // AP: Allpass Filters
-00161   Delay allPassDelayL_[nAllpasses];
-00162   Delay allPassDelayR_[nAllpasses];
-00163 };
-00164 
-00165 inline StkFloat FreeVerb :: lastOut( unsigned int channel )
-00166 {
-00167 #if defined(_STK_DEBUG_)
-00168   if ( channel > 1 ) {
-00169     oStream_ << "FreeVerb::lastOut(): channel argument must be less than 2!";
-00170     handleError( StkError::FUNCTION_ARGUMENT );
-00171   }
-00172 #endif
-00173 
-00174   return lastFrame_[channel];
-00175 }
-00176 
-00177 inline StkFloat FreeVerb::tick( StkFloat inputL, StkFloat inputR, unsigned int channel )
-00178 {
-00179 #if defined(_STK_DEBUG_)
-00180   if ( channel > 1 ) {
-00181     oStream_ << "FreeVerb::tick(): channel argument must be less than 2!";
-00182     handleError(StkError::FUNCTION_ARGUMENT);
-00183   }
-00184 #endif
-00185 
-00186   if ( !inputR ) {
-00187     inputR = inputL;
-00188   }
-00189 
-00190   StkFloat fInput = (inputL + inputR) * gain_;
-00191   StkFloat outL = 0.0;
-00192   StkFloat outR = 0.0;
-00193 
-00194   // Parallel LBCF filters
-00195   for ( int i = 0; i < nCombs; i++ ) {
-00196     // Left channel
-00197     //StkFloat yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPL_[i].tick(FreeVerb::undenormalize(combDelayL_[i].nextOut()))));
-00198     StkFloat yn = fInput + (roomSize_ * combLPL_[i].tick( combDelayL_[i].nextOut() ) );
-00199     combDelayL_[i].tick(yn);
-00200     outL += yn;
-00201 
-00202     // Right channel
-00203     //yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPR_[i].tick(FreeVerb::undenormalize(combDelayR_[i].nextOut()))));
-00204     yn = fInput + (roomSize_ * combLPR_[i].tick( combDelayR_[i].nextOut() ) );
-00205     combDelayR_[i].tick(yn);
-00206     outR += yn;
-00207   }
-00208 
-00209   // Series allpass filters
-00210   for ( int i = 0; i < nAllpasses; i++ ) {
-00211     // Left channel
-00212     //StkFloat vn_m = FreeVerb::undenormalize(allPassDelayL_[i].nextOut());
-00213     StkFloat vn_m = allPassDelayL_[i].nextOut();
-00214     StkFloat vn = outL + (g_ * vn_m);
-00215     allPassDelayL_[i].tick(vn);
-00216         
-00217     // calculate output
-00218     outL = -vn + (1.0 + g_)*vn_m;
-00219 
-00220     // Right channel
-00221     //vn_m = FreeVerb::undenormalize(allPassDelayR_[i].nextOut());
-00222     vn_m = allPassDelayR_[i].nextOut();
-00223     vn = outR + (g_ * vn_m);
-00224     allPassDelayR_[i].tick(vn);
-00225 
-00226     // calculate output
-00227     outR = -vn + (1.0 + g_)*vn_m;
-00228   }
-00229 
-00230   // Mix output
-00231   lastFrame_[0] = outL*wet1_ + outR*wet2_ + inputL*dry_;
-00232   lastFrame_[1] = outR*wet1_ + outL*wet2_ + inputR*dry_;
-00233 
-00234   /*
-00235   // Hard limiter ... there's not much else we can do at this point
-00236   if ( lastFrame_[0] >= 1.0 ) {
-00237     lastFrame_[0] = 0.9999;
-00238   }
-00239   if ( lastFrame_[0] <= -1.0 ) {
-00240     lastFrame_[0] = -0.9999;
-00241   }
-00242   if ( lastFrame_[1] >= 1.0 ) {
-00243     lastFrame_[1] = 0.9999;
-00244   }
-00245   if ( lastFrame_[1] <= -1.0 ) {
-00246     lastFrame_[1] = -0.9999;
-00247   }
-00248   */
-00249 
-00250   return lastFrame_[channel];
-00251 }
-00252 
-00253 }
-00254 
-00255 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Function_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Function_8h_source.html deleted file mode 100644 index 4e7d9f8bbf..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Function_8h_source.html +++ /dev/null @@ -1,53 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Function.h

00001 #ifndef STK_FUNCTION_H
-00002 #define STK_FUNCTION_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class Function : public Stk
-00021 {
-00022  public:
-00024   Function( void ) { lastFrame_.resize( 1, 1, 0.0 ); };
-00025 
-00027   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00028 
-00030   virtual StkFloat tick( StkFloat input ) = 0;
-00031 
-00032  protected:
-00033 
-00034   StkFrames lastFrame_;
-00035 
-00036 };
-00037 
-00038 } // stk namespace
-00039 
-00040 #endif
-00041 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Generator_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Generator_8h_source.html deleted file mode 100644 index 60bd961747..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Generator_8h_source.html +++ /dev/null @@ -1,55 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Generator.h

00001 #ifndef STK_GENERATOR_H
-00002 #define STK_GENERATOR_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class Generator : public Stk
-00021 {
-00022  public:
-00023 
-00025   Generator( void ) { lastFrame_.resize( 1, 1, 0.0 ); };
-00026 
-00028   unsigned int channelsOut( void ) const { return lastFrame_.channels(); };
-00029 
-00031   const StkFrames& lastFrame( void ) const { return lastFrame_; };
-00032 
-00034 
-00041   virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0;
-00042 
-00043   protected:
-00044 
-00045   StkFrames lastFrame_;
-00046 };
-00047 
-00048 } // stk namespace
-00049 
-00050 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Granulate_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Granulate_8h_source.html deleted file mode 100644 index a69ea7ad67..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Granulate_8h_source.html +++ /dev/null @@ -1,158 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Granulate.h

00001 #ifndef STK_GRANULATE_H
-00002 #define STK_GRANULATE_H
-00003 
-00004 #include <vector>
-00005 #include "Generator.h"
-00006 #include "Envelope.h"
-00007 #include "Noise.h"
-00008 
-00009 namespace stk {
-00010 
-00011 /***************************************************/
-00026 /***************************************************/
-00027 
-00028 class Granulate: public Generator
-00029 {
-00030  public:
-00032   Granulate( void );
-00033 
-00035   Granulate( unsigned int nVoices, std::string fileName, bool typeRaw = false );
-00036 
-00038   ~Granulate( void );
-00039 
-00041 
-00045   void openFile( std::string fileName, bool typeRaw = false );
-00046 
-00048 
-00052   void reset( void );
-00053 
-00055 
-00060   void setVoices( unsigned int nVoices = 1 );
-00061 
-00063 
-00069   void setStretch( unsigned int stretchFactor = 1 );
-00070 
-00072 
-00087   void setGrainParameters( unsigned int duration = 30, unsigned int rampPercent = 50,
-00088                            int offset = 0, unsigned int delay = 0 );
-00089 
-00091 
-00099   void setRandomFactor( StkFloat randomness = 0.1 );
-00100 
-00102 
-00110   StkFloat lastOut( unsigned int channel = 0 );
-00111 
-00113   StkFloat tick( unsigned int channel = 0 );
-00114 
-00116 
-00123   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00124 
-00125   enum GrainState {
-00126     GRAIN_STOPPED,
-00127     GRAIN_FADEIN,
-00128     GRAIN_SUSTAIN,
-00129     GRAIN_FADEOUT
-00130   };
-00131 
-00132  protected:
-00133 
-00134   struct Grain {
-00135     StkFloat eScaler;
-00136     StkFloat eRate;
-00137     unsigned long attackCount;
-00138     unsigned long sustainCount;
-00139     unsigned long decayCount;
-00140     unsigned long delayCount;
-00141     unsigned long counter;
-00142     //unsigned long pointer;
-00143     StkFloat pointer;
-00144     unsigned long startPointer;
-00145     unsigned int repeats;
-00146     GrainState state;
-00147 
-00148     // Default constructor.
-00149     Grain()
-00150       :eScaler(0.0), eRate(0.0), attackCount(0), sustainCount(0), decayCount(0),
-00151        delayCount(0), counter(0), pointer(0), startPointer(0), repeats(0), state(GRAIN_STOPPED) {}
-00152   };
-00153 
-00154   void calculateGrain( Granulate::Grain& grain );
-00155 
-00156   StkFrames data_;
-00157   std::vector<Grain> grains_;
-00158   Noise noise;
-00159   //long gPointer_;
-00160   StkFloat gPointer_;
-00161 
-00162   // Global grain parameters.
-00163   unsigned int gDuration_;
-00164   unsigned int gRampPercent_;
-00165   unsigned int gDelay_;
-00166   unsigned int gStretch_;
-00167   unsigned int stretchCounter_;
-00168   int gOffset_;
-00169   StkFloat gRandomFactor_;
-00170   StkFloat gain_;
-00171 
-00172 };
-00173 
-00174 inline StkFloat Granulate :: lastOut( unsigned int channel )
-00175 {
-00176 #if defined(_STK_DEBUG_)
-00177   if ( channel >= lastFrame_.channels() ) {
-00178     oStream_ << "Granulate::lastOut(): channel argument is invalid!";
-00179     handleError( StkError::FUNCTION_ARGUMENT );
-00180   }
-00181 #endif
-00182 
-00183   return lastFrame_[channel];
-00184 }
-00185 
-00186 inline StkFrames& Granulate :: tick( StkFrames& frames, unsigned int channel )
-00187 {
-00188   unsigned int nChannels = lastFrame_.channels();
-00189 #if defined(_STK_DEBUG_)
-00190   if ( channel > frames.channels() - nChannels ) {
-00191     oStream_ << "Granulate::tick(): channel and StkFrames arguments are incompatible!";
-00192     handleError( StkError::FUNCTION_ARGUMENT );
-00193   }
-00194 #endif
-00195 
-00196   StkFloat *samples = &frames[channel];
-00197   unsigned int j, hop = frames.channels() - nChannels;
-00198   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00199     *samples++ = tick();
-00200     for ( j=1; j<nChannels; j++ )
-00201       *samples++ = lastFrame_[j];
-00202   }
-00203 
-00204   return frames;
-00205 }
-00206 
-00207 } // stk namespace
-00208 
-00209 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Guitar_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Guitar_8h_source.html deleted file mode 100644 index e2804945db..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Guitar_8h_source.html +++ /dev/null @@ -1,153 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Guitar.h

00001 #ifndef STK_GUITAR_H
-00002 #define STK_GUITAR_H
-00003 
-00004 #include "Stk.h"
-00005 #include "Twang.h"
-00006 #include "OnePole.h"
-00007 #include "OneZero.h"
-00008 
-00009 namespace stk {
-00010 
-00011 /***************************************************/
-00039 /***************************************************/
-00040 
-00041 class Guitar : public Stk
-00042 {
-00043  public:
-00045   Guitar( unsigned int nStrings = 6, std::string bodyfile = "" );
-00046 
-00048   void clear( void );
-00049 
-00051 
-00056   void setBodyFile( std::string bodyfile = "" );
-00057 
-00059 
-00063   void setPluckPosition( StkFloat position, int string = -1 );
-00064 
-00066 
-00070   void setLoopGain( StkFloat gain, int string = -1 );
-00071 
-00073   void setFrequency( StkFloat frequency, unsigned int string = 0 );
-00074 
-00076 
-00080   void noteOn( StkFloat frequency, StkFloat amplitude, unsigned int string = 0 );
-00081 
-00083   void noteOff( StkFloat amplitude, unsigned int string = 0 );
-00084 
-00086 
-00090   void controlChange( int number, StkFloat value, int string = -1 );
-00091 
-00093   StkFloat lastOut( void ) { return lastFrame_[0]; };
-00094 
-00096   StkFloat tick( StkFloat input = 0.0 );
-00097 
-00099 
-00107   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00108 
-00110 
-00118   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00119 
-00120  protected:
-00121 
-00122   std::vector< stk::Twang > strings_;
-00123   std::vector< int > stringState_; // 0 = off, 1 = decaying, 2 = on
-00124   std::vector< unsigned int > decayCounter_;
-00125   std::vector< unsigned int > filePointer_;
-00126   std::vector< StkFloat > pluckGains_;
-00127 
-00128   OnePole   pickFilter_;
-00129   OnePole   couplingFilter_;
-00130   StkFloat  couplingGain_;
-00131   StkFrames excitation_;
-00132   StkFrames lastFrame_;
-00133 };
-00134 
-00135 inline StkFloat Guitar :: tick( StkFloat input )
-00136 {
-00137   StkFloat temp, output = 0.0;
-00138   lastFrame_[0] /= strings_.size(); // evenly spread coupling across strings
-00139   for ( unsigned int i=0; i<strings_.size(); i++ ) {
-00140     if ( stringState_[i] ) {
-00141       temp = input;
-00142       // If pluckGain < 0.2, let string ring but don't pluck it.
-00143       if ( filePointer_[i] < excitation_.frames() && pluckGains_[i] > 0.2 )
-00144         temp += pluckGains_[i] * excitation_[filePointer_[i]++];
-00145       temp += couplingGain_ * couplingFilter_.tick( lastFrame_[0] ); // bridge coupling
-00146       output += strings_[i].tick( temp );
-00147       // Check if string energy has decayed sufficiently to turn it off.
-00148       if ( stringState_[i] == 1 ) {
-00149         if ( fabs( strings_[i].lastOut() ) < 0.001 ) decayCounter_[i]++;
-00150         else decayCounter_[i] = 0;
-00151         if ( decayCounter_[i] > (unsigned int) floor( 0.1 * Stk::sampleRate() ) ) {
-00152           stringState_[i] = 0;
-00153           decayCounter_[i] = 0;
-00154         }
-00155       }
-00156     }
-00157   }
-00158 
-00159   return lastFrame_[0] = output;
-00160 }
-00161 
-00162 inline StkFrames& Guitar :: tick( StkFrames& frames, unsigned int channel )
-00163 {
-00164 #if defined(_STK_DEBUG_)
-00165   if ( channel >= frames.channels() ) {
-00166     oStream_ << "Guitar::tick(): channel and StkFrames arguments are incompatible!";
-00167     handleError( StkError::FUNCTION_ARGUMENT );
-00168   }
-00169 #endif
-00170 
-00171   StkFloat *samples = &frames[channel];
-00172   unsigned int hop = frames.channels();
-00173   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00174     *samples = tick( *samples );
-00175 
-00176   return frames;
-00177 }
-00178 
-00179 inline StkFrames& Guitar :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00180 {
-00181 #if defined(_STK_DEBUG_)
-00182   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00183     oStream_ << "Guitar::tick(): channel and StkFrames arguments are incompatible!";
-00184     handleError( StkError::FUNCTION_ARGUMENT );
-00185   }
-00186 #endif
-00187 
-00188   StkFloat *iSamples = &iFrames[iChannel];
-00189   StkFloat *oSamples = &oFrames[oChannel];
-00190   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00191   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop )
-00192     *oSamples = tick( *iSamples );
-00193 
-00194   return iFrames;
-00195 }
-00196 
-00197 } // stk namespace
-00198 
-00199 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/HevyMetl_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/HevyMetl_8h_source.html deleted file mode 100644 index 47b409fa6e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/HevyMetl_8h_source.html +++ /dev/null @@ -1,110 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

HevyMetl.h

00001 #ifndef STK_HEVYMETL_H
-00002 #define STK_HEVYMETL_H
-00003 
-00004 #include "FM.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00036 /***************************************************/
-00037 
-00038 class HevyMetl : public FM
-00039 {
-00040  public:
-00042 
-00045   HevyMetl( void );
-00046 
-00048   ~HevyMetl( void );
-00049 
-00051   void noteOn( StkFloat frequency, StkFloat amplitude );
-00052 
-00054   StkFloat tick( unsigned int channel = 0 );
-00055 
-00057 
-00064   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00065 
-00066  protected:
-00067 
-00068 };
-00069 
-00070 inline StkFloat HevyMetl :: tick( unsigned int )
-00071 {
-00072   register StkFloat temp;
-00073 
-00074   temp = vibrato_.tick() * modDepth_ * 0.2;    
-00075   waves_[0]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[0]);
-00076   waves_[1]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[1]);
-00077   waves_[2]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[2]);
-00078   waves_[3]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[3]);
-00079     
-00080   temp = gains_[2] * adsr_[2]->tick() * waves_[2]->tick();
-00081   waves_[1]->addPhaseOffset( temp );
-00082     
-00083   waves_[3]->addPhaseOffset( twozero_.lastOut() );
-00084   temp = (1.0 - (control2_ * 0.5)) * gains_[3] * adsr_[3]->tick() * waves_[3]->tick();
-00085   twozero_.tick(temp);
-00086     
-00087   temp += control2_ * 0.5 * gains_[1] * adsr_[1]->tick() * waves_[1]->tick();
-00088   temp = temp * control1_;
-00089     
-00090   waves_[0]->addPhaseOffset( temp );
-00091   temp = gains_[0] * adsr_[0]->tick() * waves_[0]->tick();
-00092     
-00093   lastFrame_[0] = temp * 0.5;
-00094   return lastFrame_[0];
-00095 }
-00096 
-00097 inline StkFrames& HevyMetl :: tick( StkFrames& frames, unsigned int channel )
-00098 {
-00099   unsigned int nChannels = lastFrame_.channels();
-00100 #if defined(_STK_DEBUG_)
-00101   if ( channel > frames.channels() - nChannels ) {
-00102     oStream_ << "HevyMetl::tick(): channel and StkFrames arguments are incompatible!";
-00103     handleError( StkError::FUNCTION_ARGUMENT );
-00104   }
-00105 #endif
-00106 
-00107   StkFloat *samples = &frames[channel];
-00108   unsigned int j, hop = frames.channels() - nChannels;
-00109   if ( nChannels == 1 ) {
-00110     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00111       *samples++ = tick();
-00112   }
-00113   else {
-00114     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00115       *samples++ = tick();
-00116       for ( j=1; j<nChannels; j++ )
-00117         *samples++ = lastFrame_[j];
-00118     }
-00119   }
-00120 
-00121   return frames;
-00122 }
-00123 
-00124 } // stk namespace
-00125 
-00126 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Iir_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Iir_8h_source.html deleted file mode 100644 index 7e0756a63d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Iir_8h_source.html +++ /dev/null @@ -1,156 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Iir.h

00001 #ifndef STK_IIR_H
-00002 #define STK_IIR_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00032 /***************************************************/
-00033 
-00034 class Iir : public Filter
-00035 {
-00036 public:
-00038   Iir( void );
-00039 
-00041 
-00045   Iir( std::vector<StkFloat> &bCoefficients, std::vector<StkFloat> &aCoefficients );
-00046 
-00048   ~Iir( void );
-00049 
-00051 
-00058   void setCoefficients( std::vector<StkFloat> &bCoefficients, std::vector<StkFloat> &aCoefficients, bool clearState = false );
-00059 
-00061 
-00068   void setNumerator( std::vector<StkFloat> &bCoefficients, bool clearState = false );
-00069 
-00071 
-00080   void setDenominator( std::vector<StkFloat> &aCoefficients, bool clearState = false );
-00081 
-00083   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00084 
-00086   StkFloat tick( StkFloat input );
-00087 
-00089 
-00097   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00098 
-00100 
-00108   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00109 
-00110 protected:
-00111 
-00112 };
-00113 
-00114 inline StkFloat Iir :: tick( StkFloat input )
-00115 {
-00116   unsigned int i;
-00117 
-00118   outputs_[0] = 0.0;
-00119   inputs_[0] = gain_ * input;
-00120   for ( i=b_.size()-1; i>0; i-- ) {
-00121     outputs_[0] += b_[i] * inputs_[i];
-00122     inputs_[i] = inputs_[i-1];
-00123   }
-00124   outputs_[0] += b_[0] * inputs_[0];
-00125 
-00126   for ( i=a_.size()-1; i>0; i-- ) {
-00127     outputs_[0] += -a_[i] * outputs_[i];
-00128     outputs_[i] = outputs_[i-1];
-00129   }
-00130 
-00131   lastFrame_[0] = outputs_[0];
-00132   return lastFrame_[0];
-00133 }
-00134 
-00135 inline StkFrames& Iir :: tick( StkFrames& frames, unsigned int channel )
-00136 {
-00137 #if defined(_STK_DEBUG_)
-00138   if ( channel >= frames.channels() ) {
-00139     oStream_ << "Iir::tick(): channel and StkFrames arguments are incompatible!";
-00140     handleError( StkError::FUNCTION_ARGUMENT );
-00141   }
-00142 #endif
-00143 
-00144   StkFloat *samples = &frames[channel];
-00145   unsigned int i, hop = frames.channels();
-00146   for ( unsigned int j=0; j<frames.frames(); j++, samples += hop ) {
-00147     outputs_[0] = 0.0;
-00148     inputs_[0] = gain_ * *samples;
-00149     for ( i=b_.size()-1; i>0; i-- ) {
-00150       outputs_[0] += b_[i] * inputs_[i];
-00151       inputs_[i] = inputs_[i-1];
-00152     }
-00153     outputs_[0] += b_[0] * inputs_[0];
-00154 
-00155     for ( i=a_.size()-1; i>0; i-- ) {
-00156       outputs_[0] += -a_[i] * outputs_[i];
-00157       outputs_[i] = outputs_[i-1];
-00158     }
-00159 
-00160     *samples = outputs_[0];
-00161   }
-00162 
-00163   lastFrame_[0] = *(samples-hop);
-00164   return frames;
-00165 }
-00166 
-00167 inline StkFrames& Iir :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00168 {
-00169 #if defined(_STK_DEBUG_)
-00170   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00171     oStream_ << "Iir::tick(): channel and StkFrames arguments are incompatible!";
-00172     handleError( StkError::FUNCTION_ARGUMENT );
-00173   }
-00174 #endif
-00175 
-00176   StkFloat *iSamples = &iFrames[iChannel];
-00177   StkFloat *oSamples = &oFrames[oChannel];
-00178   unsigned int i, iHop = iFrames.channels(), oHop = oFrames.channels();
-00179   for ( unsigned int j=0; j<iFrames.frames(); j++, iSamples += iHop, oSamples += oHop ) {
-00180     outputs_[0] = 0.0;
-00181     inputs_[0] = gain_ * *iSamples;
-00182     for ( i=b_.size()-1; i>0; i-- ) {
-00183       outputs_[0] += b_[i] * inputs_[i];
-00184       inputs_[i] = inputs_[i-1];
-00185     }
-00186     outputs_[0] += b_[0] * inputs_[0];
-00187 
-00188     for ( i=a_.size()-1; i>0; i-- ) {
-00189       outputs_[0] += -a_[i] * outputs_[i];
-00190       outputs_[i] = outputs_[i-1];
-00191     }
-00192 
-00193     *oSamples = outputs_[0];
-00194   }
-00195 
-00196   lastFrame_[0] = *(oSamples-oHop);
-00197   return iFrames;
-00198 }
-00199 
-00200 } // stk namespace
-00201 
-00202 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/InetWvIn_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/InetWvIn_8h_source.html deleted file mode 100644 index b22a6ee97d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/InetWvIn_8h_source.html +++ /dev/null @@ -1,115 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

InetWvIn.h

00001 #ifndef STK_INETWVIN_H
-00002 #define STK_INETWVIN_H
-00003 
-00004 #include "WvIn.h"
-00005 #include "TcpServer.h"
-00006 #include "UdpSocket.h"
-00007 #include "Thread.h"
-00008 #include "Mutex.h"
-00009 
-00010 namespace stk {
-00011 
-00012 /***************************************************/
-00036 /***************************************************/
-00037 
-00038 typedef struct {
-00039   bool finished;
-00040   void *object;
-00041 } ThreadInfo;
-00042 
-00043 class InetWvIn : public WvIn
-00044 {
-00045 public:
-00047 
-00050   InetWvIn( unsigned long bufferFrames = 1024, unsigned int nBuffers = 8 );
-00051 
-00053   ~InetWvIn();
-00054 
-00056 
-00063   void listen( int port = 2006, unsigned int nChannels = 1,
-00064                Stk::StkFormat format = STK_SINT16,
-00065                Socket::ProtocolType protocol = Socket::PROTO_TCP );
-00066 
-00068 
-00072   bool isConnected( void );
-00073 
-00075 
-00084   StkFloat lastOut( unsigned int channel = 0 );
-00085 
-00087 
-00097   StkFloat tick( unsigned int channel = 0 );
-00098 
-00100 
-00109   StkFrames& tick( StkFrames& frames );
-00110 
-00111   // Called by the thread routine to receive data via the socket connection
-00112   // and fill the socket buffer.  This is not intended for general use but
-00113   // must be public for access from the thread.
-00114   void receive( void );
-00115 
-00116 protected:
-00117 
-00118   // Read buffered socket data into the data buffer ... will block if none available.
-00119   int readData( void );
-00120 
-00121   Socket *soket_;
-00122   Thread thread_;
-00123   Mutex mutex_;
-00124   char *buffer_;
-00125   unsigned long bufferFrames_;
-00126   unsigned long bufferBytes_;
-00127   unsigned long bytesFilled_;
-00128   unsigned int nBuffers_;
-00129   unsigned long writePoint_;
-00130   unsigned long readPoint_;
-00131   long bufferCounter_;
-00132   int dataBytes_;
-00133   bool connected_;
-00134   int fd_;
-00135   ThreadInfo threadInfo_;
-00136   Stk::StkFormat dataType_;
-00137 
-00138 };
-00139 
-00140 inline StkFloat InetWvIn :: lastOut( unsigned int channel )
-00141 {
-00142 #if defined(_STK_DEBUG_)
-00143   if ( channel >= data_.channels() ) {
-00144     oStream_ << "InetWvIn::lastOut(): channel argument and data stream are incompatible!";
-00145     handleError( StkError::FUNCTION_ARGUMENT );
-00146   }
-00147 #endif
-00148 
-00149   // If no connection and we've output all samples in the queue, return.
-00150   if ( !connected_ && bytesFilled_ == 0 && bufferCounter_ == 0 ) return 0.0;
-00151 
-00152   return lastFrame_[channel];
-00153 }
-00154 
-00155 } // stk namespace
-00156 
-00157 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/InetWvOut_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/InetWvOut_8h_source.html deleted file mode 100644 index efc7e526cf..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/InetWvOut_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

InetWvOut.h

00001 #ifndef STK_INETWVOUT_H
-00002 #define STK_INETWVOUT_H
-00003 
-00004 #include "WvOut.h"
-00005 #include "Socket.h"
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00030 /***************************************************/
-00031 
-00032 class InetWvOut : public WvOut
-00033 {
-00034  public:
-00036   InetWvOut( unsigned long packetFrames = 1024 );
-00037 
-00039 
-00042   InetWvOut( int port, Socket::ProtocolType protocol = Socket::PROTO_TCP,
-00043              std::string hostname = "localhost", unsigned int nChannels = 1, Stk::StkFormat format = STK_SINT16,
-00044              unsigned long packetFrames = 1024 );
-00045 
-00047   ~InetWvOut();
-00048 
-00050 
-00053   void connect( int port, Socket::ProtocolType protocol = Socket::PROTO_TCP,
-00054                 std::string hostname = "localhost", unsigned int nChannels = 1, Stk::StkFormat format = STK_SINT16 );
-00055 
-00057   void disconnect( void );
-00058 
-00060 
-00065   void tick( const StkFloat sample );
-00066 
-00068 
-00077   void tick( const StkFrames& frames );
-00078 
-00079  protected:
-00080 
-00081   void incrementFrame( void );
-00082 
-00083   // Write a buffer of length frames via the socket connection.
-00084   void writeData( unsigned long frames );
-00085 
-00086   char *buffer_;
-00087   Socket *soket_;
-00088   unsigned long bufferFrames_;
-00089   unsigned long bufferBytes_;
-00090   unsigned long bufferIndex_;
-00091   unsigned long iData_;
-00092   unsigned int dataBytes_;
-00093   Stk::StkFormat dataType_;
-00094 };
-00095 
-00096 } // stk namespace
-00097 
-00098 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Instrmnt_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Instrmnt_8h_source.html deleted file mode 100644 index 6e4103377f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Instrmnt_8h_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Instrmnt.h

00001 #ifndef STK_INSTRMNT_H
-00002 #define STK_INSTRMNT_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00017 /***************************************************/
-00018 
-00019 class Instrmnt : public Stk
-00020 {
-00021  public:
-00023   Instrmnt( void ) { lastFrame_.resize( 1, 1, 0.0 ); };
-00024 
-00026   virtual void noteOn( StkFloat frequency, StkFloat amplitude ) = 0;
-00027 
-00029   virtual void noteOff( StkFloat amplitude ) = 0;
-00030 
-00032   virtual void setFrequency( StkFloat frequency );
-00033 
-00035   virtual void controlChange(int number, StkFloat value);
-00036 
-00038   unsigned int channelsOut( void ) const { return lastFrame_.channels(); };
-00039 
-00041   const StkFrames& lastFrame( void ) const { return lastFrame_; };
-00042 
-00044 
-00052   StkFloat lastOut( unsigned int channel = 0 );
-00053 
-00055 
-00058   virtual StkFloat tick( unsigned int channel = 0 ) = 0;
-00059 
-00061 
-00068   virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0;
-00069 
-00070  protected:
-00071 
-00072   StkFrames lastFrame_;
-00073 
-00074 };
-00075 
-00076 inline void Instrmnt :: setFrequency( StkFloat frequency )
-00077 {
-00078   oStream_ << "Instrmnt::setFrequency: virtual setFrequency function call!";
-00079   handleError( StkError::WARNING );
-00080 }
-00081 
-00082 inline StkFloat Instrmnt :: lastOut( unsigned int channel )
-00083 {
-00084 #if defined(_STK_DEBUG_)
-00085   if ( channel >= lastFrame_.channels() ) {
-00086     oStream_ << "Instrmnt::lastOut(): channel argument is invalid!";
-00087     handleError( StkError::FUNCTION_ARGUMENT );
-00088   }
-00089 #endif
-00090 
-00091   return lastFrame_[channel];
-00092 }
-00093 
-00094 inline void Instrmnt :: controlChange( int number, StkFloat value )
-00095 {
-00096   oStream_ << "Instrmnt::controlChange: virtual function call!";
-00097   handleError( StkError::WARNING );
-00098 }
-00099 
-00100 } // stk namespace
-00101 
-00102 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/JCRev_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/JCRev_8h_source.html deleted file mode 100644 index bb18b0e974..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/JCRev_8h_source.html +++ /dev/null @@ -1,136 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

JCRev.h

00001 #ifndef STK_JCREV_H
-00002 #define STK_JCREV_H
-00003 
-00004 #include "Effect.h"
-00005 #include "Delay.h"
-00006 #include "OnePole.h"
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00029 /***************************************************/
-00030 
-00031 class JCRev : public Effect
-00032 {
-00033  public:
-00035   JCRev( StkFloat T60 = 1.0 );
-00036 
-00038   void clear( void );
-00039 
-00041   void setT60( StkFloat T60 );
-00042 
-00044 
-00052   StkFloat lastOut( unsigned int channel = 0 );
-00053 
-00055 
-00062   StkFloat tick( StkFloat input, unsigned int channel = 0 );
-00063 
-00065 
-00074   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00075 
-00077 
-00086   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00087 
-00088  protected:
-00089 
-00090   Delay allpassDelays_[3];
-00091   Delay combDelays_[4];
-00092   OnePole combFilters_[4];
-00093   Delay outLeftDelay_;
-00094   Delay outRightDelay_;
-00095   StkFloat allpassCoefficient_;
-00096   StkFloat combCoefficient_[4];
-00097 
-00098 };
-00099 
-00100 inline StkFloat JCRev :: lastOut( unsigned int channel )
-00101 {
-00102 #if defined(_STK_DEBUG_)
-00103   if ( channel > 1 ) {
-00104     oStream_ << "JCRev::lastOut(): channel argument must be less than 2!";
-00105     handleError( StkError::FUNCTION_ARGUMENT );
-00106   }
-00107 #endif
-00108 
-00109   return lastFrame_[channel];
-00110 }
-00111 
-00112 inline StkFloat JCRev :: tick( StkFloat input, unsigned int channel )
-00113 {
-00114 #if defined(_STK_DEBUG_)
-00115   if ( channel > 1 ) {
-00116     oStream_ << "JCRev::tick(): channel argument must be less than 2!";
-00117     handleError( StkError::FUNCTION_ARGUMENT );
-00118   }
-00119 #endif
-00120 
-00121   StkFloat temp, temp0, temp1, temp2, temp3, temp4, temp5, temp6;
-00122   StkFloat filtout;
-00123 
-00124   temp = allpassDelays_[0].lastOut();
-00125   temp0 = allpassCoefficient_ * temp;
-00126   temp0 += input;
-00127   allpassDelays_[0].tick(temp0);
-00128   temp0 = -(allpassCoefficient_ * temp0) + temp;
-00129     
-00130   temp = allpassDelays_[1].lastOut();
-00131   temp1 = allpassCoefficient_ * temp;
-00132   temp1 += temp0;
-00133   allpassDelays_[1].tick(temp1);
-00134   temp1 = -(allpassCoefficient_ * temp1) + temp;
-00135     
-00136   temp = allpassDelays_[2].lastOut();
-00137   temp2 = allpassCoefficient_ * temp;
-00138   temp2 += temp1;
-00139   allpassDelays_[2].tick(temp2);
-00140   temp2 = -(allpassCoefficient_ * temp2) + temp;
-00141     
-00142   temp3 = temp2 + ( combFilters_[0].tick( combCoefficient_[0] * combDelays_[0].lastOut() ) );
-00143   temp4 = temp2 + ( combFilters_[1].tick( combCoefficient_[1] * combDelays_[1].lastOut() ) );
-00144   temp5 = temp2 + ( combFilters_[2].tick( combCoefficient_[2] * combDelays_[2].lastOut() ) );
-00145   temp6 = temp2 + ( combFilters_[3].tick( combCoefficient_[3] * combDelays_[3].lastOut() ) );
-00146 
-00147   combDelays_[0].tick(temp3);
-00148   combDelays_[1].tick(temp4);
-00149   combDelays_[2].tick(temp5);
-00150   combDelays_[3].tick(temp6);
-00151 
-00152   filtout = temp3 + temp4 + temp5 + temp6;
-00153 
-00154   lastFrame_[0] = effectMix_ * (outLeftDelay_.tick(filtout));
-00155   lastFrame_[1] = effectMix_ * (outRightDelay_.tick(filtout));
-00156   temp = (1.0 - effectMix_) * input;
-00157   lastFrame_[0] += temp;
-00158   lastFrame_[1] += temp;
-00159     
-00160   return 0.7 * lastFrame_[channel];
-00161 }
-00162 
-00163 } // stk namespace
-00164 
-00165 #endif
-00166 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/JetTable_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/JetTable_8h_source.html deleted file mode 100644 index 0534a2672b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/JetTable_8h_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

JetTable.h

00001 #ifndef STK_JETTABL_H
-00002 #define STK_JETTABL_H
-00003 
-00004 #include "Function.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00021 /***************************************************/
-00022 
-00023 class JetTable : public Function
-00024 {
-00025 public:
-00026 
-00028   StkFloat tick( StkFloat input );
-00029 
-00031 
-00039   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00040 
-00042 
-00050   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00051 
-00052 };
-00053 
-00054 inline StkFloat JetTable :: tick( StkFloat input )
-00055 {
-00056   // Perform "table lookup" using a polynomial
-00057   // calculation (x^3 - x), which approximates
-00058   // the jet sigmoid behavior.
-00059   lastFrame_[0] = input * (input * input - 1.0);
-00060 
-00061   // Saturate at +/- 1.0.
-00062   if ( lastFrame_[0] > 1.0 ) lastFrame_[0] = 1.0;
-00063   if ( lastFrame_[0] < -1.0 ) lastFrame_[0] = -1.0; 
-00064   return lastFrame_[0];
-00065 }
-00066 
-00067 inline StkFrames& JetTable :: tick( StkFrames& frames, unsigned int channel )
-00068 {
-00069 #if defined(_STK_DEBUG_)
-00070   if ( channel >= frames.channels() ) {
-00071     oStream_ << "JetTable::tick(): channel and StkFrames arguments are incompatible!";
-00072     handleError( StkError::FUNCTION_ARGUMENT );
-00073   }
-00074 #endif
-00075 
-00076   StkFloat *samples = &frames[channel];
-00077   unsigned int hop = frames.channels();
-00078   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00079     *samples = *samples * (*samples * *samples - 1.0);
-00080     if ( *samples > 1.0) *samples = 1.0;
-00081     if ( *samples < -1.0) *samples = -1.0;
-00082   }
-00083 
-00084   lastFrame_[0] = *(samples-hop);
-00085   return frames;
-00086 }
-00087 
-00088 inline StkFrames& JetTable :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00089 {
-00090 #if defined(_STK_DEBUG_)
-00091   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00092     oStream_ << "JetTable::tick(): channel and StkFrames arguments are incompatible!";
-00093     handleError( StkError::FUNCTION_ARGUMENT );
-00094   }
-00095 #endif
-00096 
-00097   StkFloat *iSamples = &iFrames[iChannel];
-00098   StkFloat *oSamples = &oFrames[oChannel];
-00099   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00100   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00101     *oSamples = *oSamples * (*oSamples * *oSamples - 1.0);
-00102     if ( *oSamples > 1.0) *oSamples = 1.0;
-00103     if ( *oSamples < -1.0) *oSamples = -1.0;
-00104   }
-00105 
-00106   lastFrame_[0] = *(oSamples-oHop);
-00107   return iFrames;
-00108 }
-00109 
-00110 } // stk namespace
-00111 
-00112 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/LentPitShift_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/LentPitShift_8h_source.html deleted file mode 100644 index d8f9d5f1fd..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/LentPitShift_8h_source.html +++ /dev/null @@ -1,255 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

LentPitShift.h

00001 #ifndef STK_LENTPITSHIFT_H
-00002 #define STK_LENTPITSHIFT_H
-00003 
-00004 #include "Effect.h"
-00005 #include "Delay.h"
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class LentPitShift : public Effect
-00021 {
-00022  public:
-00024   LentPitShift( StkFloat periodRatio = 1.0, int tMax = RT_BUFFER_SIZE );
-00025 
-00026   ~LentPitShift( void ) {
-00027     delete window;
-00028     delete dt;
-00029     delete dpt;
-00030     delete cumDt;
-00031   }
-00032 
-00034   void clear( void );
-00035 
-00037   void setShift( StkFloat shift );
-00038 
-00040   StkFloat tick( StkFloat input );
-00041 
-00043 
-00051   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00052 
-00054 
-00062   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00063 
-00064  protected:
-00065 
-00067 
-00071   void process( );
-00072 
-00073   // Frame storage vectors for process function
-00074   StkFrames inputFrames;
-00075   StkFrames outputFrames;
-00076   int ptrFrames;          // writing pointer
-00077 
-00078   // Input delay line
-00079   Delay inputLine_;
-00080   int inputPtr;
-00081 
-00082   // Output delay line
-00083   Delay outputLine_;
-00084   double outputPtr;
-00085 
-00086   // Pitch tracker variables
-00087   unsigned long tMax_;    // Maximal period measurable by the pitch tracker.
-00088   // It is also the size of the window used by the pitch tracker and
-00089   // the size of the frames that can be computed by the tick function
-00090 
-00091   StkFloat threshold_; // Threshold of detection for the pitch tracker
-00092   unsigned long lastPeriod_;    // Result of the last pitch tracking loop
-00093   StkFloat* dt;        // Array containing the euclidian distance coefficients
-00094   StkFloat* cumDt;     // Array containing the cumulative sum of the coefficients in dt
-00095   StkFloat* dpt;       // Array containing the pitch tracking function coefficients
-00096 
-00097   // Pitch shifter variables
-00098   StkFloat env[2];     // Coefficients for the linear interpolation when modifying the output samples
-00099   StkFloat* window;    // Hamming window used for the input portion extraction
-00100   double periodRatio_; // Ratio of modification of the signal period
-00101   StkFrames zeroFrame; // Frame of tMax_ zero samples
-00102 
-00103 
-00104   // Coefficient delay line that could be used for a dynamic calculation of the pitch
-00105   //Delay* coeffLine_;
-00106 
-00107 };
-00108 
-00109 inline void LentPitShift::process()
-00110 {
-00111   StkFloat x_t;    // input coefficient
-00112   StkFloat x_t_T;  // previous input coefficient at T samples
-00113   StkFloat coeff;  // new coefficient for the difference function
-00114 
-00115   int alternativePitch = tMax_;  // Global minimum storage
-00116   lastPeriod_ = tMax_+1;         // Storage of the lowest local minimum under the threshold
-00117 
-00118   // Loop variables
-00119   unsigned long delay_;
-00120   unsigned int n;
-00121 
-00122   // Initialization of the dt coefficients.  Since the
-00123   // frames are of tMax_ length, there is no overlapping
-00124   // between the successive windows where pitch tracking
-00125   // is performed.
-00126   for ( delay_=1; delay_<=tMax_; delay_++ )
-00127     dt[delay_] = 0.;
-00128 
-00129   // Calculation of the dt coefficients and update of the input delay line.
-00130   for ( n=0; n<inputFrames.size(); n++ ) {
-00131     x_t = inputLine_.tick( inputFrames[ n ] );
-00132     for ( delay_=1; delay_<= tMax_; delay_++ ) {
-00133       x_t_T = inputLine_.tapOut( delay_ );
-00134       coeff = x_t - x_t_T;
-00135       dt[delay_] += coeff * coeff;
-00136     }
-00137   }
-00138 
-00139   // Calculation of the pitch tracking function and test for the minima.
-00140   for ( delay_=1; delay_<=tMax_; delay_++ ) {
-00141     cumDt[delay_] = dt[delay_] + cumDt[delay_-1];
-00142     dpt[delay_] = dt[delay_] * delay_ / cumDt[delay_];
-00143 
-00144     // Look for a minimum
-00145     if ( dpt[delay_-1]-dpt[delay_-2] < 0 && dpt[delay_]-dpt[delay_-1] > 0 ) {
-00146       // Check if the minimum is under the threshold
-00147       if ( dpt[delay_-1] < threshold_ ){
-00148         lastPeriod_ = delay_-1;
-00149         // If a minimum is found, we can stop the loop
-00150         break;
-00151       }
-00152       else if ( dpt[alternativePitch] > dpt[delay_-1] )
-00153         // Otherwise we store it if it is the current global minimum
-00154         alternativePitch = delay_-1;
-00155     }
-00156   }
-00157 
-00158   // Test for the last period length.
-00159   if ( dpt[delay_]-dpt[delay_-1] < 0 ) {
-00160     if ( dpt[delay_] < threshold_ )
-00161       lastPeriod_ = delay_;
-00162     else if ( dpt[alternativePitch] > dpt[delay_] )
-00163       alternativePitch = delay_;
-00164   }
-00165 
-00166   if ( lastPeriod_ == tMax_+1 )
-00167     // No period has been under the threshold so we used the global minimum
-00168     lastPeriod_ = alternativePitch;
-00169 
-00170   // We put the new zero output coefficients in the output delay line and 
-00171   // we get the previous calculated coefficients
-00172   outputLine_.tick( zeroFrame, outputFrames );
-00173 
-00174   // Initialization of the Hamming window used in the algorithm
-00175   for ( int n=-(int)lastPeriod_; n<(int)lastPeriod_; n++ )
-00176     window[n+lastPeriod_] = (1 + cos(PI*n/lastPeriod_)) / 2    ;
-00177 
-00178   int M;  // Index of reading in the input delay line
-00179   int N;  // Index of writing in the output delay line
-00180   double sample;  // Temporary storage for the new coefficient
-00181 
-00182   // We loop for all the frames of length lastPeriod_ presents between inputPtr and tMax_
-00183   for ( ; inputPtr<(int)(tMax_-lastPeriod_); inputPtr+=lastPeriod_ ) {
-00184     // Test for the decision of compression/expansion
-00185     while ( outputPtr < inputPtr ) {
-00186       // Coefficients for the linear interpolation
-00187       env[1] = fmod( outputPtr + tMax_, 1.0 );
-00188       env[0] = 1.0 - env[1];
-00189       M = tMax_ - inputPtr + lastPeriod_ - 1; // New reading pointer
-00190       N = 2*tMax_ - (unsigned long)floor(outputPtr + tMax_) + lastPeriod_ - 1; // New writing pointer
-00191       for ( unsigned int j=0; j<2*lastPeriod_; j++,M--,N-- ) {
-00192         sample = inputLine_.tapOut(M) * window[j] / 2.;
-00193         // Linear interpolation
-00194         outputLine_.addTo(env[0] * sample, N);
-00195         outputLine_.addTo(env[1] * sample, N-1);
-00196       }
-00197       outputPtr = outputPtr + lastPeriod_ * periodRatio_; // new output pointer
-00198     }
-00199   }
-00200   // Shifting of the pointers waiting for the new frame of length tMax_.
-00201   outputPtr -= tMax_;
-00202   inputPtr  -= tMax_;
-00203 }
-00204 
-00205 
-00206 inline StkFloat LentPitShift :: tick( StkFloat input )
-00207 {
-00208   StkFloat sample;
-00209 
-00210   inputFrames[ptrFrames] = input;
-00211 
-00212   sample = outputFrames[ptrFrames++];
-00213 
-00214   // Check for end condition
-00215   if ( ptrFrames == (int) inputFrames.size() ){
-00216     ptrFrames = 0;
-00217     process( );
-00218   }
-00219 
-00220   return sample;
-00221 }
-00222 
-00223 inline StkFrames& LentPitShift :: tick( StkFrames& frames, unsigned int channel )
-00224 {
-00225 #if defined(_STK_DEBUG_)
-00226   if ( channel >= frames.channels() ) {
-00227     oStream_ << "LentPitShift::tick(): channel and StkFrames arguments are incompatible!";
-00228     handleError( StkError::FUNCTION_ARGUMENT );
-00229   }
-00230 #endif
-00231 
-00232   StkFloat *samples = &frames[channel];
-00233   unsigned int hop = frames.channels();
-00234   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00235     *samples = tick( *samples );
-00236   }
-00237 
-00238   return frames;
-00239 }
-00240 
-00241 inline StkFrames& LentPitShift :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00242 {
-00243 #if defined(_STK_DEBUG_)
-00244   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00245     oStream_ << "LentPitShift::tick(): channel and StkFrames arguments are incompatible!";
-00246     handleError( StkError::FUNCTION_ARGUMENT );
-00247   }
-00248 #endif
-00249 
-00250   StkFloat *iSamples = &iFrames[iChannel];
-00251   StkFloat *oSamples = &oFrames[oChannel];
-00252   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00253   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00254     *oSamples = tick( *iSamples );
-00255   }
-00256 
-00257   return iFrames;
-00258 }
-00259 
-00260 } // stk namespace
-00261 
-00262 #endif
-00263 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Mandolin_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Mandolin_8h_source.html deleted file mode 100644 index 126a6bd3d3..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Mandolin_8h_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Mandolin.h

00001 #ifndef STK_MANDOLIN_H
-00002 #define STK_MANDOLIN_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "Twang.h"
-00006 #include "FileWvIn.h"
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00036 /***************************************************/
-00037 
-00038 class Mandolin : public Instrmnt
-00039 {
-00040  public:
-00042   Mandolin( StkFloat lowestFrequency );
-00043 
-00045   ~Mandolin( void );
-00046 
-00048   void clear( void );
-00049 
-00051   void setDetune( StkFloat detune );
-00052 
-00054   void setBodySize( StkFloat size );
-00055 
-00057   void setPluckPosition( StkFloat position );
-00058 
-00060   void setFrequency( StkFloat frequency );
-00061 
-00063   void pluck( StkFloat amplitude );
-00064 
-00066   void pluck( StkFloat amplitude,StkFloat position );
-00067 
-00069   void noteOn( StkFloat frequency, StkFloat amplitude );
-00070 
-00072   void noteOff( StkFloat amplitude );
-00073 
-00075   void controlChange( int number, StkFloat value );
-00076 
-00078   StkFloat tick( unsigned int channel = 0 );
-00079 
-00081 
-00088   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00089 
-00090   protected:
-00091 
-00092   Twang strings_[2];
-00093   FileWvIn soundfile_[12];
-00094 
-00095   int mic_;
-00096   StkFloat detuning_;
-00097   StkFloat frequency_;
-00098   StkFloat pluckAmplitude_;
-00099 };
-00100 
-00101 inline StkFloat Mandolin :: tick( unsigned int )
-00102 {
-00103   StkFloat temp = 0.0;
-00104   if ( !soundfile_[mic_].isFinished() )
-00105     temp = soundfile_[mic_].tick() * pluckAmplitude_;
-00106 
-00107   lastFrame_[0] = strings_[0].tick( temp );
-00108   lastFrame_[0] += strings_[1].tick( temp );
-00109   lastFrame_[0] *= 0.2;
-00110 
-00111   return lastFrame_[0];
-00112 }
-00113 
-00114 inline StkFrames& Mandolin :: tick( StkFrames& frames, unsigned int channel )
-00115 {
-00116   unsigned int nChannels = lastFrame_.channels();
-00117 #if defined(_STK_DEBUG_)
-00118   if ( channel > frames.channels() - nChannels ) {
-00119     oStream_ << "Mandolin::tick(): channel and StkFrames arguments are incompatible!";
-00120     handleError( StkError::FUNCTION_ARGUMENT );
-00121   }
-00122 #endif
-00123 
-00124   StkFloat *samples = &frames[channel];
-00125   unsigned int j, hop = frames.channels() - nChannels;
-00126   if ( nChannels == 1 ) {
-00127     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00128       *samples++ = tick();
-00129   }
-00130   else {
-00131     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00132       *samples++ = tick();
-00133       for ( j=1; j<nChannels; j++ )
-00134         *samples++ = lastFrame_[j];
-00135     }
-00136   }
-00137 
-00138   return frames;
-00139 }
-00140 
-00141 } // stk namespace
-00142 
-00143 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Mesh2D_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Mesh2D_8h_source.html deleted file mode 100644 index b3e0dffe53..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Mesh2D_8h_source.html +++ /dev/null @@ -1,125 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Mesh2D.h

00001 #ifndef STK_MESH2D_H
-00002 #define STK_MESH2D_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "OnePole.h"
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00033 /***************************************************/
-00034 
-00035 const unsigned short NXMAX = 12;
-00036 const unsigned short NYMAX = 12;
-00037 
-00038 class Mesh2D : public Instrmnt
-00039 {
-00040  public:
-00042   Mesh2D( unsigned short nX, unsigned short nY );
-00043 
-00045   ~Mesh2D( void );
-00046 
-00048   void clear( void );
-00049 
-00051   void setNX( unsigned short lenX );
-00052 
-00054   void setNY( unsigned short lenY );
-00055 
-00057   void setInputPosition( StkFloat xFactor, StkFloat yFactor );
-00058 
-00060   void setDecay( StkFloat decayFactor );
-00061 
-00063   void noteOn( StkFloat frequency, StkFloat amplitude );
-00064 
-00066   void noteOff( StkFloat amplitude );
-00067 
-00069   StkFloat energy( void );
-00070 
-00072   StkFloat inputTick( StkFloat input );
-00073 
-00075   void controlChange( int number, StkFloat value );
-00076 
-00078   StkFloat tick( unsigned int channel = 0 );
-00079 
-00081 
-00088   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00089 
-00090  protected:
-00091 
-00092   StkFloat tick0();
-00093   StkFloat tick1();
-00094   void clearMesh();
-00095 
-00096   unsigned short NX_, NY_;
-00097   unsigned short xInput_, yInput_;
-00098   OnePole  filterX_[NXMAX];
-00099   OnePole  filterY_[NYMAX];
-00100   StkFloat v_[NXMAX-1][NYMAX-1]; // junction velocities
-00101   StkFloat vxp_[NXMAX][NYMAX];   // positive-x velocity wave
-00102   StkFloat vxm_[NXMAX][NYMAX];   // negative-x velocity wave
-00103   StkFloat vyp_[NXMAX][NYMAX];   // positive-y velocity wave
-00104   StkFloat vym_[NXMAX][NYMAX];   // negative-y velocity wave
-00105 
-00106   // Alternate buffers
-00107   StkFloat vxp1_[NXMAX][NYMAX];  // positive-x velocity wave
-00108   StkFloat vxm1_[NXMAX][NYMAX];  // negative-x velocity wave
-00109   StkFloat vyp1_[NXMAX][NYMAX];  // positive-y velocity wave
-00110   StkFloat vym1_[NXMAX][NYMAX];  // negative-y velocity wave
-00111 
-00112   int counter_; // time in samples
-00113 };
-00114 
-00115 inline StkFrames& Mesh2D :: tick( StkFrames& frames, unsigned int channel )
-00116 {
-00117   unsigned int nChannels = lastFrame_.channels();
-00118 #if defined(_STK_DEBUG_)
-00119   if ( channel > frames.channels() - nChannels ) {
-00120     oStream_ << "Mesh2D::tick(): channel and StkFrames arguments are incompatible!";
-00121     handleError( StkError::FUNCTION_ARGUMENT );
-00122   }
-00123 #endif
-00124 
-00125   StkFloat *samples = &frames[channel];
-00126   unsigned int j, hop = frames.channels() - nChannels;
-00127   if ( nChannels == 1 ) {
-00128     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00129       *samples++ = tick();
-00130   }
-00131   else {
-00132     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00133       *samples++ = tick();
-00134       for ( j=1; j<nChannels; j++ )
-00135         *samples++ = lastFrame_[j];
-00136     }
-00137   }
-00138 
-00139   return frames;
-00140 }
-00141 
-00142 } // stk namespace
-00143 
-00144 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Messager_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Messager_8h_source.html deleted file mode 100644 index 900a7b0c65..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Messager_8h_source.html +++ /dev/null @@ -1,110 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Messager.h

00001 #ifndef STK_MESSAGER_H
-00002 #define STK_MESSAGER_H
-00003 
-00004 #include "Stk.h"
-00005 #include "Skini.h"
-00006 #include <queue>
-00007 
-00008 #if defined(__STK_REALTIME__)
-00009 
-00010 #include "Mutex.h"
-00011 #include "Thread.h"
-00012 #include "TcpServer.h"
-00013 #include "RtMidi.h"
-00014 
-00015 #endif // __STK_REALTIME__
-00016 
-00017 namespace stk {
-00018 
-00019 /***************************************************/
-00051 /***************************************************/
-00052 
-00053 const int DEFAULT_QUEUE_LIMIT = 200;
-00054 
-00055 class Messager : public Stk
-00056 {
-00057  public:
-00058 
-00059   // This structure is used to share data among the various realtime
-00060   // messager threads.  It must be public.
-00061   struct MessagerData {
-00062     Skini skini;
-00063     std::queue<Skini::Message> queue;
-00064     unsigned int queueLimit;
-00065     int sources;
-00066 
-00067 #if defined(__STK_REALTIME__)
-00068     Mutex mutex;
-00069     RtMidiIn *midi;
-00070     TcpServer *socket;
-00071     std::vector<int> fd;
-00072     fd_set mask;
-00073 #endif
-00074 
-00075     // Default constructor.
-00076     MessagerData()
-00077       :queueLimit(0), sources(0) {}
-00078   };
-00079 
-00081   Messager();
-00082 
-00084   ~Messager();
-00085 
-00087 
-00093   void popMessage( Skini::Message& message );
-00094 
-00096   void pushMessage( Skini::Message& message );
-00097 
-00099 
-00107   bool setScoreFile( const char* filename );
-00108 
-00109 #if defined(__STK_REALTIME__)
-00111 
-00120   bool startStdInput();
-00121 
-00123 
-00134   bool startSocketInput( int port=2001 );
-00135 
-00137 
-00149   bool startMidiInput( int port=0 );
-00150 
-00151 #endif
-00152 
-00153  protected:
-00154 
-00155   MessagerData data_;
-00156 
-00157 #if defined(__STK_REALTIME__)
-00158   Thread stdinThread_;
-00159   Thread socketThread_;
-00160 #endif
-00161 
-00162 };
-00163 
-00164 } // stk namespace
-00165 
-00166 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/MidiFileIn_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/MidiFileIn_8h_source.html deleted file mode 100644 index 81eff54172..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/MidiFileIn_8h_source.html +++ /dev/null @@ -1,100 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

MidiFileIn.h

00001 #ifndef STK_MIDIFILEIN_H
-00002 #define STK_MIDIFILEIN_H
-00003 
-00004 #include "Stk.h"
-00005 #include <string>
-00006 #include <vector>
-00007 #include <fstream>
-00008 #include <sstream>
-00009 
-00010 namespace stk {
-00011 
-00012 /**********************************************************************/
-00027 /**********************************************************************/
-00028 
-00029 class MidiFileIn : public Stk
-00030 {
-00031  public:
-00033 
-00037   MidiFileIn( std::string fileName );
-00038 
-00040   ~MidiFileIn();
-00041 
-00043   int getFileFormat() const { return format_; };
-00044 
-00046   unsigned int getNumberOfTracks() const { return nTracks_; };
-00047 
-00049 
-00054   int getDivision() const { return division_; };
-00055 
-00057 
-00061   void rewindTrack( unsigned int track = 0 );
-00062 
-00064 
-00071   double getTickSeconds( unsigned int track = 0 );
-00072 
-00074 
-00086   unsigned long getNextEvent( std::vector<unsigned char> *event, unsigned int track = 0 );
-00087 
-00089 
-00099   unsigned long getNextMidiEvent( std::vector<unsigned char> *midiEvent, unsigned int track = 0 );
-00100 
-00101  protected:
-00102 
-00103   // This protected class function is used for reading variable-length
-00104   // MIDI file values. It is assumed that this function is called with
-00105   // the file read pointer positioned at the start of a
-00106   // variable-length value.  The function returns true if the value is
-00107   // successfully parsed.  Otherwise, it returns false.
-00108   bool readVariableLength( unsigned long *value );
-00109 
-00110   std::ifstream file_;
-00111   unsigned int nTracks_;
-00112   int format_;
-00113   int division_;
-00114   bool usingTimeCode_;
-00115   std::vector<double> tickSeconds_;
-00116   std::vector<long> trackPointers_;
-00117   std::vector<long> trackOffsets_;
-00118   std::vector<long> trackLengths_;
-00119   std::vector<char> trackStatus_;
-00120 
-00121   // This structure and the following variables are used to save and
-00122   // keep track of a format 1 tempo map (and the initial tickSeconds
-00123   // parameter for formats 0 and 2).
-00124   struct TempoChange { 
-00125     unsigned long count;
-00126     double tickSeconds;
-00127   };
-00128   std::vector<TempoChange> tempoEvents_;
-00129   std::vector<unsigned long> trackCounters_;
-00130   std::vector<unsigned int> trackTempoIndex_;
-00131 };
-00132 
-00133 } // stk namespace
-00134 
-00135 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/ModalBar_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/ModalBar_8h_source.html deleted file mode 100644 index 29f53c089d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/ModalBar_8h_source.html +++ /dev/null @@ -1,55 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

ModalBar.h

00001 #ifndef STK_MODALBAR_H
-00002 #define STK_MODALBAR_H
-00003 
-00004 #include "Modal.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00036 /***************************************************/
-00037 
-00038 class ModalBar : public Modal
-00039 {
-00040 public:
-00042   ModalBar( void );
-00043 
-00045   ~ModalBar( void );
-00046 
-00048   void setStickHardness( StkFloat hardness );
-00049 
-00051   void setStrikePosition( StkFloat position );
-00052 
-00054   void setPreset( int preset );
-00055 
-00057   void setModulationDepth( StkFloat mDepth );
-00058 
-00060   void controlChange( int number, StkFloat value );
-00061 };
-00062 
-00063 } // stk namespace
-00064 
-00065 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Modal_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Modal_8h_source.html deleted file mode 100644 index ccc00609d0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Modal_8h_source.html +++ /dev/null @@ -1,145 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Modal.h

00001 #ifndef STK_MODAL_H
-00002 #define STK_MODAL_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "Envelope.h"
-00006 #include "FileLoop.h"
-00007 #include "SineWave.h"
-00008 #include "BiQuad.h"
-00009 #include "OnePole.h"
-00010 
-00011 namespace stk {
-00012 
-00013 /***************************************************/
-00024 /***************************************************/
-00025 
-00026 class Modal : public Instrmnt
-00027 {
-00028 public:
-00030 
-00033   Modal( unsigned int modes = 4 );
-00034 
-00036   virtual ~Modal( void );
-00037 
-00039   void clear( void );
-00040 
-00042   virtual void setFrequency( StkFloat frequency );
-00043 
-00045   void setRatioAndRadius( unsigned int modeIndex, StkFloat ratio, StkFloat radius );
-00046 
-00048   void setMasterGain( StkFloat aGain ) { masterGain_ = aGain; };
-00049 
-00051   void setDirectGain( StkFloat aGain ) { directGain_ = aGain; };
-00052 
-00054   void setModeGain( unsigned int modeIndex, StkFloat gain );
-00055 
-00057   virtual void strike( StkFloat amplitude );
-00058 
-00060   void damp( StkFloat amplitude );
-00061 
-00063   void noteOn( StkFloat frequency, StkFloat amplitude );
-00064 
-00066   void noteOff( StkFloat amplitude );
-00067 
-00069   virtual void controlChange( int number, StkFloat value ) = 0;
-00070 
-00072   StkFloat tick( unsigned int channel = 0 );
-00073 
-00075 
-00082   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00083 
-00084 protected:
-00085 
-00086   Envelope envelope_; 
-00087   FileWvIn *wave_;
-00088   BiQuad **filters_;
-00089   OnePole  onepole_;
-00090   SineWave vibrato_;
-00091 
-00092   unsigned int nModes_;
-00093   std::vector<StkFloat> ratios_;
-00094   std::vector<StkFloat> radii_;
-00095 
-00096   StkFloat vibratoGain_;
-00097   StkFloat masterGain_;
-00098   StkFloat directGain_;
-00099   StkFloat stickHardness_;
-00100   StkFloat strikePosition_;
-00101   StkFloat baseFrequency_;
-00102 };
-00103 
-00104 inline StkFloat Modal :: tick( unsigned int )
-00105 {
-00106   StkFloat temp = masterGain_ * onepole_.tick( wave_->tick() * envelope_.tick() );
-00107 
-00108   StkFloat temp2 = 0.0;
-00109   for ( unsigned int i=0; i<nModes_; i++ )
-00110     temp2 += filters_[i]->tick(temp);
-00111 
-00112   temp2  -= temp2 * directGain_;
-00113   temp2 += directGain_ * temp;
-00114 
-00115   if ( vibratoGain_ != 0.0 ) {
-00116     // Calculate AM and apply to master out
-00117     temp = 1.0 + ( vibrato_.tick() * vibratoGain_ );
-00118     temp2 = temp * temp2;
-00119   }
-00120     
-00121   lastFrame_[0] = temp2;
-00122   return lastFrame_[0];
-00123 }
-00124 
-00125 inline StkFrames& Modal :: tick( StkFrames& frames, unsigned int channel )
-00126 {
-00127   unsigned int nChannels = lastFrame_.channels();
-00128 #if defined(_STK_DEBUG_)
-00129   if ( channel > frames.channels() - nChannels ) {
-00130     oStream_ << "Modal::tick(): channel and StkFrames arguments are incompatible!";
-00131     handleError( StkError::FUNCTION_ARGUMENT );
-00132   }
-00133 #endif
-00134 
-00135   StkFloat *samples = &frames[channel];
-00136   unsigned int j, hop = frames.channels() - nChannels;
-00137   if ( nChannels == 1 ) {
-00138     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00139       *samples++ = tick();
-00140   }
-00141   else {
-00142     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00143       *samples++ = tick();
-00144       for ( j=1; j<nChannels; j++ )
-00145         *samples++ = lastFrame_[j];
-00146     }
-00147   }
-00148 
-00149   return frames;
-00150 }
-00151 
-00152 } // stk namespace
-00153 
-00154 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Modulate_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Modulate_8h_source.html deleted file mode 100644 index fa56c220ad..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Modulate_8h_source.html +++ /dev/null @@ -1,106 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Modulate.h

00001 #ifndef STK_MODULATE_H
-00002 #define STK_MODULATE_H
-00003 
-00004 #include "Generator.h"
-00005 #include "SineWave.h"
-00006 #include "Noise.h"
-00007 #include "OnePole.h"
-00008 
-00009 namespace stk {
-00010 
-00011 /***************************************************/
-00021 /***************************************************/
-00022 
-00023 class Modulate : public Generator
-00024 {
-00025  public:
-00027 
-00030   Modulate( void );
-00031 
-00033   ~Modulate( void );
-00034 
-00036   void reset( void ) { lastFrame_[0] = 0.0; };
-00037 
-00039   void setVibratoRate( StkFloat rate ) { vibrato_.setFrequency( rate ); };
-00040 
-00042   void setVibratoGain( StkFloat gain ) { vibratoGain_ = gain; };
-00043 
-00045   void setRandomGain( StkFloat gain );
-00046 
-00048   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00049 
-00051   StkFloat tick( void );
-00052 
-00054 
-00061   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00062 
-00063  protected:
-00064 
-00065   void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00066 
-00067   SineWave vibrato_;
-00068   Noise noise_;
-00069   OnePole  filter_;
-00070   StkFloat vibratoGain_;
-00071   StkFloat randomGain_;
-00072   unsigned int noiseRate_;
-00073   unsigned int noiseCounter_;
-00074 
-00075 };
-00076 
-00077 inline StkFloat Modulate :: tick( void )
-00078 {
-00079   // Compute periodic and random modulations.
-00080   lastFrame_[0] = vibratoGain_ * vibrato_.tick();
-00081   if ( noiseCounter_++ >= noiseRate_ ) {
-00082     noise_.tick();
-00083     noiseCounter_ = 0;
-00084   }
-00085   lastFrame_[0] += filter_.tick( noise_.lastOut() );
-00086   return lastFrame_[0];
-00087 }
-00088 
-00089 inline StkFrames& Modulate :: tick( StkFrames& frames, unsigned int channel )
-00090 {
-00091 #if defined(_STK_DEBUG_)
-00092   if ( channel >= frames.channels() ) {
-00093     oStream_ << "Modulate::tick(): channel and StkFrames arguments are incompatible!";
-00094     handleError( StkError::FUNCTION_ARGUMENT );
-00095   }
-00096 #endif
-00097 
-00098   StkFloat *samples = &frames[channel];
-00099   unsigned int hop = frames.channels();
-00100   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00101     *samples = Modulate::tick();
-00102 
-00103   return frames;
-00104 }
-00105 
-00106 } // stk namespace
-00107 
-00108 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Moog_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Moog_8h_source.html deleted file mode 100644 index 7aded63ad3..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Moog_8h_source.html +++ /dev/null @@ -1,115 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Moog.h

00001 #ifndef STK_MOOG_H
-00002 #define STK_MOOG_H
-00003 
-00004 #include "Sampler.h"
-00005 #include "FormSwep.h"
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00027 /***************************************************/
-00028 
-00029 class Moog : public Sampler
-00030 {
-00031  public:
-00033 
-00036   Moog( void );
-00037 
-00039   ~Moog( void );
-00040 
-00042   void setFrequency( StkFloat frequency );
-00043 
-00045   void noteOn( StkFloat frequency, StkFloat amplitude );
-00046 
-00048   void setModulationSpeed( StkFloat mSpeed ) { loops_[1]->setFrequency( mSpeed ); };
-00049 
-00051   void setModulationDepth( StkFloat mDepth ) { modDepth_ = mDepth * 0.5; };
-00052 
-00054   void controlChange( int number, StkFloat value );
-00055 
-00057   StkFloat tick( unsigned int channel = 0 );
-00058 
-00060 
-00067   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00068 
-00069  protected:
-00070 
-00071   FormSwep filters_[2];
-00072   StkFloat modDepth_;
-00073   StkFloat filterQ_;
-00074   StkFloat filterRate_;
-00075 
-00076 };
-00077 
-00078 inline StkFloat Moog :: tick( unsigned int )
-00079 {
-00080   StkFloat temp;
-00081 
-00082   if ( modDepth_ != 0.0 ) {
-00083     temp = loops_[1]->tick() * modDepth_;    
-00084     loops_[0]->setFrequency( baseFrequency_ * (1.0 + temp) );
-00085   }
-00086 
-00087   temp = attackGain_ * attacks_[0]->tick();
-00088   temp += loopGain_ * loops_[0]->tick();
-00089   temp = filter_.tick( temp );
-00090   temp *= adsr_.tick();
-00091   temp = filters_[0].tick( temp );
-00092   lastFrame_[0] = filters_[1].tick( temp );
-00093   return lastFrame_[0] * 6.0;
-00094 }
-00095 
-00096 inline StkFrames& Moog :: tick( StkFrames& frames, unsigned int channel )
-00097 {
-00098   unsigned int nChannels = lastFrame_.channels();
-00099 #if defined(_STK_DEBUG_)
-00100   if ( channel > frames.channels() - nChannels ) {
-00101     oStream_ << "Moog::tick(): channel and StkFrames arguments are incompatible!";
-00102     handleError( StkError::FUNCTION_ARGUMENT );
-00103   }
-00104 #endif
-00105 
-00106   StkFloat *samples = &frames[channel];
-00107   unsigned int j, hop = frames.channels() - nChannels;
-00108   if ( nChannels == 1 ) {
-00109     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00110       *samples++ = tick();
-00111   }
-00112   else {
-00113     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00114       *samples++ = tick();
-00115       for ( j=1; j<nChannels; j++ )
-00116         *samples++ = lastFrame_[j];
-00117     }
-00118   }
-00119 
-00120   return frames;
-00121 }
-00122 
-00123 } // stk namespace
-00124 
-00125 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Mutex_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Mutex_8h_source.html deleted file mode 100644 index d222ef311c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Mutex_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Mutex.h

00001 #ifndef STK_MUTEX_H
-00002 #define STK_MUTEX_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 #if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
-00007 
-00008   #include <pthread.h>
-00009   typedef pthread_mutex_t MUTEX;
-00010   typedef pthread_cond_t CONDITION;
-00011 
-00012 #elif defined(__OS_WINDOWS__)
-00013 
-00014   #include <windows.h>
-00015   #include <process.h>
-00016   typedef CRITICAL_SECTION MUTEX;
-00017   typedef HANDLE CONDITION;
-00018 
-00019 #endif
-00020 
-00021 namespace stk {
-00022 
-00023 /***************************************************/
-00034 /***************************************************/
-00035 
-00036 class Mutex : public Stk
-00037 {
-00038  public:
-00040   Mutex();
-00041 
-00043   ~Mutex();
-00044 
-00046   void lock(void);
-00047 
-00049   void unlock(void);
-00050 
-00052 
-00056   void wait(void);
-00057 
-00059 
-00063   void signal(void);
-00064 
-00065  protected:
-00066 
-00067   MUTEX mutex_;
-00068   CONDITION condition_;
-00069 
-00070 };
-00071 
-00072 } // stk namespace
-00073 
-00074 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/NRev_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/NRev_8h_source.html deleted file mode 100644 index 81249a23b4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/NRev_8h_source.html +++ /dev/null @@ -1,135 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

NRev.h

00001 #ifndef STK_NREV_H
-00002 #define STK_NREV_H
-00003 
-00004 #include "Effect.h"
-00005 #include "Delay.h"
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00023 /***************************************************/
-00024 
-00025 class NRev : public Effect
-00026 {
-00027  public:
-00029   NRev( StkFloat T60 = 1.0 );
-00030 
-00032   void clear( void );
-00033 
-00035   void setT60( StkFloat T60 );
-00036 
-00038 
-00046   StkFloat lastOut( unsigned int channel = 0 );
-00047 
-00049 
-00056   StkFloat tick( StkFloat input, unsigned int channel = 0 );
-00057 
-00059 
-00068   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00069 
-00071 
-00080   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00081 
-00082  protected:
-00083 
-00084   Delay allpassDelays_[8];
-00085   Delay combDelays_[6];
-00086   StkFloat allpassCoefficient_;
-00087   StkFloat combCoefficient_[6];
-00088          StkFloat lowpassState_;
-00089 
-00090 };
-00091 
-00092 inline StkFloat NRev :: lastOut( unsigned int channel )
-00093 {
-00094 #if defined(_STK_DEBUG_)
-00095   if ( channel > 1 ) {
-00096     oStream_ << "NRev::lastOut(): channel argument must be less than 2!";
-00097     handleError( StkError::FUNCTION_ARGUMENT );
-00098   }
-00099 #endif
-00100 
-00101   return lastFrame_[channel];
-00102 }
-00103 
-00104 inline StkFloat NRev :: tick( StkFloat input, unsigned int channel )
-00105 {
-00106 #if defined(_STK_DEBUG_)
-00107   if ( channel > 1 ) {
-00108     oStream_ << "NRev::tick(): channel argument must be less than 2!";
-00109     handleError( StkError::FUNCTION_ARGUMENT );
-00110   }
-00111 #endif
-00112 
-00113   StkFloat temp, temp0, temp1, temp2, temp3;
-00114   int i;
-00115 
-00116   temp0 = 0.0;
-00117   for ( i=0; i<6; i++ ) {
-00118     temp = input + (combCoefficient_[i] * combDelays_[i].lastOut());
-00119     temp0 += combDelays_[i].tick(temp);
-00120   }
-00121 
-00122   for ( i=0; i<3; i++ )    {
-00123     temp = allpassDelays_[i].lastOut();
-00124     temp1 = allpassCoefficient_ * temp;
-00125     temp1 += temp0;
-00126     allpassDelays_[i].tick(temp1);
-00127     temp0 = -(allpassCoefficient_ * temp1) + temp;
-00128   }
-00129 
-00130          // One-pole lowpass filter.
-00131   lowpassState_ = 0.7 * lowpassState_ + 0.3 * temp0;
-00132   temp = allpassDelays_[3].lastOut();
-00133   temp1 = allpassCoefficient_ * temp;
-00134   temp1 += lowpassState_;
-00135   allpassDelays_[3].tick( temp1 );
-00136   temp1 = -( allpassCoefficient_ * temp1 ) + temp;
-00137     
-00138   temp = allpassDelays_[4].lastOut();
-00139   temp2 = allpassCoefficient_ * temp;
-00140   temp2 += temp1;
-00141   allpassDelays_[4].tick( temp2 );
-00142   lastFrame_[0] = effectMix_*( -( allpassCoefficient_ * temp2 ) + temp );
-00143     
-00144   temp = allpassDelays_[5].lastOut();
-00145   temp3 = allpassCoefficient_ * temp;
-00146   temp3 += temp1;
-00147   allpassDelays_[5].tick( temp3 );
-00148   lastFrame_[1] = effectMix_*( - ( allpassCoefficient_ * temp3 ) + temp );
-00149 
-00150   temp = ( 1.0 - effectMix_ ) * input;
-00151   lastFrame_[0] += temp;
-00152   lastFrame_[1] += temp;
-00153     
-00154   return lastFrame_[channel];
-00155 }
-00156 
-00157 } // stk namespace
-00158 
-00159 #endif
-00160 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Noise_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Noise_8h_source.html deleted file mode 100644 index b5a31b934c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Noise_8h_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Noise.h

00001 #ifndef STK_NOISE_H
-00002 #define STK_NOISE_H
-00003 
-00004 #include "Generator.h"
-00005 #include <stdlib.h>
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00019 /***************************************************/
-00020 
-00021 class Noise : public Generator
-00022 {
-00023 public:
-00024 
-00026 
-00030   Noise( unsigned int seed = 0 );
-00031 
-00033 
-00037   void setSeed( unsigned int seed = 0 );
-00038 
-00040   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00041 
-00043   StkFloat tick( void );
-00044 
-00046 
-00053   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00054 
-00055 protected:
-00056 
-00057 };
-00058 
-00059 inline StkFloat Noise :: tick( void )
-00060 {
-00061   return lastFrame_[0] = (StkFloat) ( 2.0 * rand() / (RAND_MAX + 1.0) - 1.0 );
-00062 }
-00063 
-00064 inline StkFrames& Noise :: tick( StkFrames& frames, unsigned int channel )
-00065 {
-00066 #if defined(_STK_DEBUG_)
-00067   if ( channel >= frames.channels() ) {
-00068     oStream_ << "Noise::tick(): channel and StkFrames arguments are incompatible!";
-00069     handleError( StkError::FUNCTION_ARGUMENT );
-00070   }
-00071 #endif
-00072 
-00073   StkFloat *samples = &frames[channel];
-00074   unsigned int hop = frames.channels();
-00075   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00076     *samples = (StkFloat) ( 2.0 * rand() / (RAND_MAX + 1.0) - 1.0 );
-00077 
-00078   lastFrame_[0] = *(samples-hop);
-00079   return frames;
-00080 }
-00081 
-00082 } // stk namespace
-00083 
-00084 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/OnePole_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/OnePole_8h_source.html deleted file mode 100644 index 7261b53165..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/OnePole_8h_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

OnePole.h

00001 #ifndef STK_ONEPOLE_H
-00002 #define STK_ONEPOLE_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class OnePole : public Filter
-00021 {
-00022 public:
-00023 
-00025   OnePole( StkFloat thePole = 0.9 );
-00026 
-00028   ~OnePole();
-00029 
-00031   void setB0( StkFloat b0 ) { b_[0] = b0; };
-00032 
-00034   void setA1( StkFloat a1 ) { a_[1] = a1; };
-00035 
-00037   void setCoefficients( StkFloat b0, StkFloat a1, bool clearState = false );
-00038 
-00040 
-00048   void setPole( StkFloat thePole );
-00049 
-00051   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00052 
-00054   StkFloat tick( StkFloat input );
-00055 
-00057 
-00065   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00066 
-00068 
-00076   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00077 
-00078 };
-00079 
-00080 inline StkFloat OnePole :: tick( StkFloat input )
-00081 {
-00082   inputs_[0] = gain_ * input;
-00083   lastFrame_[0] = b_[0] * inputs_[0] - a_[1] * outputs_[1];
-00084   outputs_[1] = lastFrame_[0];
-00085 
-00086   return lastFrame_[0];
-00087 }
-00088 
-00089 inline StkFrames& OnePole :: tick( StkFrames& frames, unsigned int channel )
-00090 {
-00091 #if defined(_STK_DEBUG_)
-00092   if ( channel >= frames.channels() ) {
-00093     oStream_ << "OnePole::tick(): channel and StkFrames arguments are incompatible!";
-00094     handleError( StkError::FUNCTION_ARGUMENT );
-00095   }
-00096 #endif
-00097 
-00098   StkFloat *samples = &frames[channel];
-00099   unsigned int hop = frames.channels();
-00100   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00101     inputs_[0] = gain_ * *samples;
-00102     *samples = b_[0] * inputs_[0] - a_[1] * outputs_[1];
-00103     outputs_[1] = *samples;
-00104   }
-00105 
-00106   lastFrame_[0] = outputs_[1];
-00107   return frames;
-00108 }
-00109 
-00110 inline StkFrames& OnePole :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00111 {
-00112 #if defined(_STK_DEBUG_)
-00113   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00114     oStream_ << "OnePole::tick(): channel and StkFrames arguments are incompatible!";
-00115     handleError( StkError::FUNCTION_ARGUMENT );
-00116   }
-00117 #endif
-00118 
-00119   StkFloat *iSamples = &iFrames[iChannel];
-00120   StkFloat *oSamples = &oFrames[oChannel];
-00121   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00122   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00123     inputs_[0] = gain_ * *iSamples;
-00124     *oSamples = b_[0] * inputs_[0] - a_[1] * outputs_[1];
-00125     outputs_[1] = *oSamples;
-00126   }
-00127 
-00128   lastFrame_[0] = outputs_[1];
-00129   return iFrames;
-00130 }
-00131 
-00132 } // stk namespace
-00133 
-00134 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/OneZero_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/OneZero_8h_source.html deleted file mode 100644 index e43bf4446a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/OneZero_8h_source.html +++ /dev/null @@ -1,119 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

OneZero.h

00001 #ifndef STK_ONEZERO_H
-00002 #define STK_ONEZERO_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class OneZero : public Filter
-00021 {
-00022  public:
-00023 
-00025   OneZero( StkFloat theZero = -1.0 );
-00026 
-00028   ~OneZero();
-00029 
-00031   void setB0( StkFloat b0 ) { b_[0] = b0; };
-00032 
-00034   void setB1( StkFloat b1 ) { b_[1] = b1; };
-00035 
-00037   void setCoefficients( StkFloat b0, StkFloat b1, bool clearState = false );
-00038 
-00040 
-00047   void setZero( StkFloat theZero );
-00048 
-00050   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00051 
-00053   StkFloat tick( StkFloat input );
-00054 
-00056 
-00064   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00065 
-00067 
-00075   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00076 
-00077 };
-00078 
-00079 inline StkFloat OneZero :: tick( StkFloat input )
-00080 {
-00081   inputs_[0] = gain_ * input;
-00082   lastFrame_[0] = b_[1] * inputs_[1] + b_[0] * inputs_[0];
-00083   inputs_[1] = inputs_[0];
-00084 
-00085   return lastFrame_[0];
-00086 }
-00087 
-00088 inline StkFrames& OneZero :: tick( StkFrames& frames, unsigned int channel )
-00089 {
-00090 #if defined(_STK_DEBUG_)
-00091   if ( channel >= frames.channels() ) {
-00092     oStream_ << "OneZero::tick(): channel and StkFrames arguments are incompatible!";
-00093     handleError( StkError::FUNCTION_ARGUMENT );
-00094   }
-00095 #endif
-00096 
-00097   StkFloat *samples = &frames[channel];
-00098   unsigned int hop = frames.channels();
-00099   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00100     inputs_[0] = gain_ * *samples;
-00101     *samples = b_[1] * inputs_[1] + b_[0] * inputs_[0];
-00102     inputs_[1] = inputs_[0];
-00103   }
-00104 
-00105   lastFrame_[0] = *(samples-hop);
-00106   return frames;
-00107 }
-00108 
-00109 inline StkFrames& OneZero :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00110 {
-00111 #if defined(_STK_DEBUG_)
-00112   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00113     oStream_ << "OneZero::tick(): channel and StkFrames arguments are incompatible!";
-00114     handleError( StkError::FUNCTION_ARGUMENT );
-00115   }
-00116 #endif
-00117 
-00118   StkFloat *iSamples = &iFrames[iChannel];
-00119   StkFloat *oSamples = &oFrames[oChannel];
-00120   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00121   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00122     inputs_[0] = gain_ * *iSamples;
-00123     *oSamples = b_[1] * inputs_[1] + b_[0] * inputs_[0];
-00124     inputs_[1] = inputs_[0];
-00125   }
-00126 
-00127   lastFrame_[0] = *(oSamples-oHop);
-00128   return iFrames;
-00129 }
-00130 
-00131 } // stk namespace
-00132 
-00133 #endif
-00134 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/PRCRev_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/PRCRev_8h_source.html deleted file mode 100644 index ef4c19366c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/PRCRev_8h_source.html +++ /dev/null @@ -1,116 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

PRCRev.h

00001 #ifndef STK_PRCREV_H
-00002 #define STK_PRCREV_H
-00003 
-00004 #include "Effect.h"
-00005 #include "Delay.h"
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00022 /***************************************************/
-00023 
-00024 class PRCRev : public Effect
-00025 {
-00026 public:
-00028   PRCRev( StkFloat T60 = 1.0 );
-00029 
-00031   void clear( void );
-00032 
-00034   void setT60( StkFloat T60 );
-00035 
-00037 
-00045   StkFloat lastOut( unsigned int channel = 0 );
-00046 
-00048 
-00055   StkFloat tick( StkFloat input, unsigned int channel = 0 );
-00056 
-00058 
-00067   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00068 
-00070 
-00079   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00080 
-00081 protected:
-00082 
-00083   Delay    allpassDelays_[2];
-00084   Delay    combDelays_[2];
-00085   StkFloat allpassCoefficient_;
-00086   StkFloat combCoefficient_[2];
-00087 
-00088 };
-00089 
-00090 inline StkFloat PRCRev :: lastOut( unsigned int channel )
-00091 {
-00092 #if defined(_STK_DEBUG_)
-00093   if ( channel > 1 ) {
-00094     oStream_ << "PRCRev::lastOut(): channel argument must be less than 2!";
-00095     handleError( StkError::FUNCTION_ARGUMENT );
-00096   }
-00097 #endif
-00098 
-00099   return lastFrame_[channel];
-00100 }
-00101 
-00102  inline StkFloat PRCRev :: tick( StkFloat input, unsigned int channel )
-00103 {
-00104 #if defined(_STK_DEBUG_)
-00105   if ( channel > 1 ) {
-00106     oStream_ << "PRCRev::tick(): channel argument must be less than 2!";
-00107     handleError( StkError::FUNCTION_ARGUMENT );
-00108   }
-00109 #endif
-00110 
-00111   StkFloat temp, temp0, temp1, temp2, temp3;
-00112 
-00113   temp = allpassDelays_[0].lastOut();
-00114   temp0 = allpassCoefficient_ * temp;
-00115   temp0 += input;
-00116   allpassDelays_[0].tick(temp0);
-00117   temp0 = -(allpassCoefficient_ * temp0) + temp;
-00118     
-00119   temp = allpassDelays_[1].lastOut();
-00120   temp1 = allpassCoefficient_ * temp;
-00121   temp1 += temp0;
-00122   allpassDelays_[1].tick(temp1);
-00123   temp1 = -(allpassCoefficient_ * temp1) + temp;
-00124     
-00125   temp2 = temp1 + ( combCoefficient_[0] * combDelays_[0].lastOut() );
-00126   temp3 = temp1 + ( combCoefficient_[1] * combDelays_[1].lastOut() );
-00127 
-00128   lastFrame_[0] = effectMix_ * (combDelays_[0].tick(temp2));
-00129   lastFrame_[1] = effectMix_ * (combDelays_[1].tick(temp3));
-00130   temp = (1.0 - effectMix_) * input;
-00131   lastFrame_[0] += temp;
-00132   lastFrame_[1] += temp;
-00133 
-00134   return lastFrame_[channel];
-00135 }
-00136 
-00137 } // stk namespace
-00138 
-00139 #endif
-00140 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/PercFlut_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/PercFlut_8h_source.html deleted file mode 100644 index 662e0de63e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/PercFlut_8h_source.html +++ /dev/null @@ -1,112 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

PercFlut.h

00001 #ifndef STK_PERCFLUT_H
-00002 #define STK_PERCFLUT_H
-00003 
-00004 #include "FM.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00034 /***************************************************/
-00035 
-00036 class PercFlut : public FM
-00037 {
-00038  public:
-00040 
-00043   PercFlut( void );
-00044 
-00046   ~PercFlut( void );
-00047 
-00049   void setFrequency( StkFloat frequency );
-00050 
-00052   void noteOn( StkFloat frequency, StkFloat amplitude );
-00053 
-00055   StkFloat tick( unsigned int channel = 0 );
-00056 
-00058 
-00065   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00066 
-00067  protected:
-00068 
-00069 };
-00070 
-00071 inline StkFloat PercFlut :: tick( unsigned int )
-00072 {
-00073   register StkFloat temp;
-00074 
-00075   temp = vibrato_.tick() * modDepth_ * 0.2;    
-00076   waves_[0]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[0]);
-00077   waves_[1]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[1]);
-00078   waves_[2]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[2]);
-00079   waves_[3]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[3]);
-00080     
-00081   waves_[3]->addPhaseOffset( twozero_.lastOut() );
-00082   temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick();
-00083 
-00084   twozero_.tick(temp);
-00085   waves_[2]->addPhaseOffset( temp );
-00086   temp = (1.0 - (control2_ * 0.5)) * gains_[2] * adsr_[2]->tick() * waves_[2]->tick();
-00087 
-00088   temp += control2_ * 0.5 * gains_[1] * adsr_[1]->tick() * waves_[1]->tick();
-00089   temp = temp * control1_;
-00090 
-00091   waves_[0]->addPhaseOffset(temp);
-00092   temp = gains_[0] * adsr_[0]->tick() * waves_[0]->tick();
-00093     
-00094   lastFrame_[0] = temp * 0.5;
-00095   return lastFrame_[0];
-00096 }
-00097 
-00098 inline StkFrames& PercFlut :: tick( StkFrames& frames, unsigned int channel )
-00099 {
-00100   unsigned int nChannels = lastFrame_.channels();
-00101 #if defined(_STK_DEBUG_)
-00102   if ( channel > frames.channels() - nChannels ) {
-00103     oStream_ << "PercFlut::tick(): channel and StkFrames arguments are incompatible!";
-00104     handleError( StkError::FUNCTION_ARGUMENT );
-00105   }
-00106 #endif
-00107 
-00108   StkFloat *samples = &frames[channel];
-00109   unsigned int j, hop = frames.channels() - nChannels;
-00110   if ( nChannels == 1 ) {
-00111     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00112       *samples++ = tick();
-00113   }
-00114   else {
-00115     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00116       *samples++ = tick();
-00117       for ( j=1; j<nChannels; j++ )
-00118         *samples++ = lastFrame_[j];
-00119     }
-00120   }
-00121 
-00122   return frames;
-00123 }
-00124 
-00125 } // stk namespace
-00126 
-00127 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Phonemes_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Phonemes_8h_source.html deleted file mode 100644 index b7bdbcd4a3..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Phonemes_8h_source.html +++ /dev/null @@ -1,64 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Phonemes.h

00001 #ifndef STK_PHONEMES_H
-00002 #define STK_PHONEMES_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class Phonemes : public Stk
-00021 {
-00022 public:
-00023 
-00024   Phonemes( void );
-00025 
-00026   ~Phonemes( void );
-00027 
-00029   static const char *name( unsigned int index );
-00030 
-00032   static StkFloat voiceGain( unsigned int index );
-00033 
-00035   static StkFloat noiseGain( unsigned int index );
-00036 
-00038   static StkFloat formantFrequency( unsigned int index, unsigned int partial );
-00039 
-00041   static StkFloat formantRadius( unsigned int index, unsigned int partial );
-00042 
-00044   static StkFloat formantGain( unsigned int index, unsigned int partial );
-00045 
-00046 private:
-00047 
-00048   static const char phonemeNames[][4];
-00049   static const StkFloat phonemeGains[][2];
-00050   static const StkFloat phonemeParameters[][4][3];
-00051 };
-00052 
-00053 } // stk namespace
-00054 
-00055 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/PitShift_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/PitShift_8h_source.html deleted file mode 100644 index 318cf6ea66..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/PitShift_8h_source.html +++ /dev/null @@ -1,102 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

PitShift.h

00001 #ifndef STK_PITSHIFT_H
-00002 #define STK_PITSHIFT_H
-00003 
-00004 #include "Effect.h"
-00005 #include "DelayL.h"
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 const int maxDelay = 5024;
-00021 
-00022 class PitShift : public Effect
-00023 {
-00024  public:
-00026   PitShift( void );
-00027 
-00029   void clear( void );
-00030 
-00032   void setShift( StkFloat shift );
-00033 
-00035   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00036 
-00038   StkFloat tick( StkFloat input );
-00039 
-00041 
-00049   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00050 
-00052 
-00060   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00061 
-00062  protected:
-00063 
-00064   DelayL delayLine_[2];
-00065   StkFloat delay_[2];
-00066   StkFloat env_[2];
-00067   StkFloat rate_;
-00068   unsigned long delayLength_;
-00069   unsigned long halfLength_;
-00070 
-00071 };
-00072 
-00073 inline StkFloat PitShift :: tick( StkFloat input )
-00074 {
-00075   // Calculate the two delay length values, keeping them within the
-00076   // range 12 to maxDelay-12.
-00077   delay_[0] += rate_;
-00078   while ( delay_[0] > maxDelay-12 ) delay_[0] -= delayLength_;
-00079   while ( delay_[0] < 12 ) delay_[0] += delayLength_;
-00080 
-00081   delay_[1] = delay_[0] + halfLength_;
-00082   while ( delay_[1] > maxDelay-12 ) delay_[1] -= delayLength_;
-00083   while ( delay_[1] < 12 ) delay_[1] += delayLength_;
-00084 
-00085   // Set the new delay line lengths.
-00086   delayLine_[0].setDelay( delay_[0] );
-00087   delayLine_[1].setDelay( delay_[1] );
-00088 
-00089   // Calculate a triangular envelope.
-00090   env_[1] = fabs( ( delay_[0] - halfLength_ + 12 ) * ( 1.0 / (halfLength_ + 12 ) ) );
-00091   env_[0] = 1.0 - env_[1];
-00092 
-00093   // Delay input and apply envelope.
-00094   lastFrame_[0] =  env_[0] * delayLine_[0].tick( input );
-00095   lastFrame_[0] += env_[1] * delayLine_[1].tick( input );
-00096 
-00097   // Compute effect mix and output.
-00098   lastFrame_[0] *= effectMix_;
-00099   lastFrame_[0] += ( 1.0 - effectMix_ ) * input;
-00100 
-00101   return lastFrame_[0];
-00102 }
-00103 
-00104 } // stk namespace
-00105 
-00106 #endif
-00107 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Plucked_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Plucked_8h_source.html deleted file mode 100644 index 5125bbfa60..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Plucked_8h_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Plucked.h

00001 #ifndef STK_PLUCKED_H
-00002 #define STK_PLUCKED_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "DelayA.h"
-00006 #include "OneZero.h"
-00007 #include "OnePole.h"
-00008 #include "Noise.h"
-00009 
-00010 namespace stk {
-00011 
-00012 /***************************************************/
-00032 /***************************************************/
-00033 
-00034 class Plucked : public Instrmnt
-00035 {
-00036  public:
-00038   Plucked( StkFloat lowestFrequency = 10.0 );
-00039 
-00041   ~Plucked( void );
-00042 
-00044   void clear( void );
-00045 
-00047   void setFrequency( StkFloat frequency );
-00048 
-00050   void pluck( StkFloat amplitude );
-00051 
-00053   void noteOn( StkFloat frequency, StkFloat amplitude );
-00054 
-00056   void noteOff( StkFloat amplitude );
-00057 
-00059   StkFloat tick( unsigned int channel = 0 );
-00060 
-00062 
-00069   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00070 
-00071  protected:  
-00072 
-00073   DelayA   delayLine_;
-00074   OneZero  loopFilter_;
-00075   OnePole  pickFilter_;
-00076   Noise    noise_;
-00077 
-00078   StkFloat loopGain_;
-00079 };
-00080 
-00081 inline StkFloat Plucked :: tick( unsigned int )
-00082 {
-00083   // Here's the whole inner loop of the instrument!!
-00084   return lastFrame_[0] = 3.0 * delayLine_.tick( loopFilter_.tick( delayLine_.lastOut() * loopGain_ ) ); 
-00085 }
-00086 
-00087 inline StkFrames& Plucked :: tick( StkFrames& frames, unsigned int channel )
-00088 {
-00089   unsigned int nChannels = lastFrame_.channels();
-00090 #if defined(_STK_DEBUG_)
-00091   if ( channel > frames.channels() - nChannels ) {
-00092     oStream_ << "Plucked::tick(): channel and StkFrames arguments are incompatible!";
-00093     handleError( StkError::FUNCTION_ARGUMENT );
-00094   }
-00095 #endif
-00096 
-00097   StkFloat *samples = &frames[channel];
-00098   unsigned int j, hop = frames.channels() - nChannels;
-00099   if ( nChannels == 1 ) {
-00100     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00101       *samples++ = tick();
-00102   }
-00103   else {
-00104     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00105       *samples++ = tick();
-00106       for ( j=1; j<nChannels; j++ )
-00107         *samples++ = lastFrame_[j];
-00108     }
-00109   }
-00110 
-00111   return frames;
-00112 }
-00113 
-00114 } // stk namespace
-00115 
-00116 #endif
-00117 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/PoleZero_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/PoleZero_8h_source.html deleted file mode 100644 index ac5a6d0aca..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/PoleZero_8h_source.html +++ /dev/null @@ -1,100 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

PoleZero.h

00001 #ifndef STK_POLEZERO_H
-00002 #define STK_POLEZERO_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00019 /***************************************************/
-00020 
-00021 class PoleZero : public Filter
-00022 {
-00023  public:
-00024 
-00026   PoleZero();
-00027 
-00029   ~PoleZero();
-00030 
-00032   void setB0( StkFloat b0 ) { b_[0] = b0; };
-00033 
-00035   void setB1( StkFloat b1 ) { b_[1] = b1; };
-00036 
-00038   void setA1( StkFloat a1 ) { a_[1] = a1; };
-00039 
-00041   void setCoefficients( StkFloat b0, StkFloat b1, StkFloat a1, bool clearState = false );
-00042 
-00044 
-00050   void setAllpass( StkFloat coefficient );
-00051 
-00053 
-00059   void setBlockZero( StkFloat thePole = 0.99 );
-00060 
-00062   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00063 
-00065   StkFloat tick( StkFloat input );
-00066 
-00068 
-00075   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00076 
-00077 };
-00078 
-00079 inline StkFloat PoleZero :: tick( StkFloat input )
-00080 {
-00081   inputs_[0] = gain_ * input;
-00082   lastFrame_[0] = b_[0] * inputs_[0] + b_[1] * inputs_[1] - a_[1] * outputs_[1];
-00083   inputs_[1] = inputs_[0];
-00084   outputs_[1] = lastFrame_[0];
-00085 
-00086   return lastFrame_[0];
-00087 }
-00088 
-00089 inline StkFrames& PoleZero :: tick( StkFrames& frames, unsigned int channel )
-00090 {
-00091 #if defined(_STK_DEBUG_)
-00092   if ( channel >= frames.channels() ) {
-00093     oStream_ << "PoleZero::tick(): channel and StkFrames arguments are incompatible!";
-00094     handleError( StkError::FUNCTION_ARGUMENT );
-00095   }
-00096 #endif
-00097 
-00098   StkFloat *samples = &frames[channel];
-00099   unsigned int hop = frames.channels();
-00100   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00101     inputs_[0] = gain_ * *samples;
-00102     *samples = b_[0] * inputs_[0] + b_[1] * inputs_[1] - a_[1] * outputs_[1];
-00103     inputs_[1] = inputs_[0];
-00104     outputs_[1] = *samples;
-00105   }
-00106 
-00107   lastFrame_[0] = outputs_[1];
-00108   return frames;
-00109 }
-00110 
-00111 } // stk namespace
-00112 
-00113 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/ReedTable_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/ReedTable_8h_source.html deleted file mode 100644 index db5db83a3d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/ReedTable_8h_source.html +++ /dev/null @@ -1,123 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

ReedTable.h

00001 #ifndef STK_REEDTABLE_H
-00002 #define STK_REEDTABLE_H
-00003 
-00004 #include "Function.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00025 /***************************************************/
-00026 
-00027 class ReedTable : public Function
-00028 {
-00029 public:
-00031   ReedTable( void ) : offset_(0.6), slope_(-0.8) {};
-00032 
-00034 
-00039   void setOffset( StkFloat offset ) { offset_ = offset; };
-00040 
-00042 
-00047   void setSlope( StkFloat slope ) { slope_ = slope; };
-00048 
-00050   StkFloat tick( StkFloat input );
-00051 
-00053 
-00061   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00062 
-00064 
-00072   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00073 
-00074 protected:
-00075 
-00076   StkFloat offset_;
-00077   StkFloat slope_;
-00078 
-00079 };
-00080 
-00081 inline StkFloat ReedTable :: tick( StkFloat input )    
-00082 {
-00083   // The input is differential pressure across the reed.
-00084   lastFrame_[0] = offset_ + (slope_ * input);
-00085 
-00086   // If output is > 1, the reed has slammed shut and the
-00087   // reflection function value saturates at 1.0.
-00088   if ( lastFrame_[0] > 1.0) lastFrame_[0] = (StkFloat) 1.0;
-00089 
-00090   // This is nearly impossible in a physical system, but
-00091   // a reflection function value of -1.0 corresponds to
-00092   // an open end (and no discontinuity in bore profile).
-00093   if ( lastFrame_[0] < -1.0) lastFrame_[0] = (StkFloat) -1.0;
-00094 
-00095   return lastFrame_[0];
-00096 }
-00097 
-00098 inline StkFrames& ReedTable :: tick( StkFrames& frames, unsigned int channel )
-00099 {
-00100 #if defined(_STK_DEBUG_)
-00101   if ( channel >= frames.channels() ) {
-00102     oStream_ << "ReedTable::tick(): channel and StkFrames arguments are incompatible!";
-00103     handleError( StkError::FUNCTION_ARGUMENT );
-00104   }
-00105 #endif
-00106 
-00107   StkFloat *samples = &frames[channel];
-00108   unsigned int hop = frames.channels();
-00109   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00110     *samples = offset_ + (slope_ * *samples);
-00111     if ( *samples > 1.0) *samples = 1.0;
-00112     if ( *samples < -1.0) *samples = -1.0;
-00113   }
-00114 
-00115   lastFrame_[0] = *(samples-hop);
-00116   return frames;
-00117 }
-00118 
-00119 inline StkFrames& ReedTable :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00120 {
-00121 #if defined(_STK_DEBUG_)
-00122   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00123     oStream_ << "ReedTable::tick(): channel and StkFrames arguments are incompatible!";
-00124     handleError( StkError::FUNCTION_ARGUMENT );
-00125   }
-00126 #endif
-00127 
-00128   StkFloat *iSamples = &iFrames[iChannel];
-00129   StkFloat *oSamples = &oFrames[oChannel];
-00130   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00131   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00132     *oSamples = offset_ + (slope_ * *iSamples);
-00133     if ( *oSamples > 1.0) *oSamples = 1.0;
-00134     if ( *oSamples < -1.0) *oSamples = -1.0;
-00135   }
-00136 
-00137   lastFrame_[0] = *(oSamples-oHop);
-00138   return iFrames;
-00139 }
-00140 
-00141 } // stk namespace
-00142 
-00143 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Resonate_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Resonate_8h_source.html deleted file mode 100644 index 30732ad350..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Resonate_8h_source.html +++ /dev/null @@ -1,116 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Resonate.h

00001 #ifndef STK_RESONATE_H
-00002 #define STK_RESONATE_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "ADSR.h"
-00006 #include "BiQuad.h"
-00007 #include "Noise.h"
-00008 
-00009 namespace stk {
-00010 
-00011 /***************************************************/
-00028 /***************************************************/
-00029 
-00030 class Resonate : public Instrmnt
-00031 {
-00032  public:
-00034   Resonate( void );
-00035 
-00037   ~Resonate( void );
-00038 
-00040   void clear( void );
-00041 
-00043   void setResonance( StkFloat frequency, StkFloat radius );
-00044 
-00046   void setNotch( StkFloat frequency, StkFloat radius );
-00047 
-00049   void setEqualGainZeroes( void ) { filter_.setEqualGainZeroes(); };
-00050 
-00052   void keyOn( void ) { adsr_.keyOn(); };
-00053 
-00055   void keyOff( void ) { adsr_.keyOff(); };
-00056 
-00058   void noteOn( StkFloat frequency, StkFloat amplitude );
-00059 
-00061   void noteOff( StkFloat amplitude );
-00062 
-00064   void controlChange( int number, StkFloat value );
-00065 
-00067   StkFloat tick( unsigned int channel = 0 );
-00068 
-00070 
-00077   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00078 
-00079  protected:
-00080 
-00081   ADSR     adsr_;
-00082   BiQuad   filter_;
-00083   Noise    noise_;
-00084   StkFloat poleFrequency_;
-00085   StkFloat poleRadius_;
-00086   StkFloat zeroFrequency_;
-00087   StkFloat zeroRadius_;
-00088 
-00089 };
-00090 
-00091 inline StkFloat Resonate :: tick( unsigned int )
-00092 {
-00093   lastFrame_[0] = filter_.tick( noise_.tick() );
-00094   lastFrame_[0] *= adsr_.tick();
-00095   return lastFrame_[0];
-00096 }
-00097 
-00098 inline StkFrames& Resonate :: tick( StkFrames& frames, unsigned int channel )
-00099 {
-00100   unsigned int nChannels = lastFrame_.channels();
-00101 #if defined(_STK_DEBUG_)
-00102   if ( channel > frames.channels() - nChannels ) {
-00103     oStream_ << "Resonate::tick(): channel and StkFrames arguments are incompatible!";
-00104     handleError( StkError::FUNCTION_ARGUMENT );
-00105   }
-00106 #endif
-00107 
-00108   StkFloat *samples = &frames[channel];
-00109   unsigned int j, hop = frames.channels() - nChannels;
-00110   if ( nChannels == 1 ) {
-00111     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00112       *samples++ = tick();
-00113   }
-00114   else {
-00115     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00116       *samples++ = tick();
-00117       for ( j=1; j<nChannels; j++ )
-00118         *samples++ = lastFrame_[j];
-00119     }
-00120   }
-00121 
-00122   return frames;
-00123 }
-00124 
-00125 } // stk namespace
-00126 
-00127 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Rhodey_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Rhodey_8h_source.html deleted file mode 100644 index e54767086e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Rhodey_8h_source.html +++ /dev/null @@ -1,109 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Rhodey.h

00001 #ifndef STK_RHODEY_H
-00002 #define STK_RHODEY_H
-00003 
-00004 #include "FM.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00038 /***************************************************/
-00039 
-00040 class Rhodey : public FM
-00041 {
-00042  public:
-00044 
-00047   Rhodey( void );
-00048 
-00050   ~Rhodey( void );
-00051 
-00053   void setFrequency( StkFloat frequency );
-00054 
-00056   void noteOn( StkFloat frequency, StkFloat amplitude );
-00057 
-00059   StkFloat tick( unsigned int channel = 0 );
-00060 
-00062 
-00069   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00070 
-00071  protected:
-00072 
-00073 };
-00074 
-00075 inline StkFloat Rhodey :: tick( unsigned int )
-00076 {
-00077   StkFloat temp, temp2;
-00078 
-00079   temp = gains_[1] * adsr_[1]->tick() * waves_[1]->tick();
-00080   temp = temp * control1_;
-00081 
-00082   waves_[0]->addPhaseOffset( temp );
-00083   waves_[3]->addPhaseOffset( twozero_.lastOut() );
-00084   temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick();
-00085   twozero_.tick(temp);
-00086 
-00087   waves_[2]->addPhaseOffset( temp );
-00088   temp = ( 1.0 - (control2_ * 0.5)) * gains_[0] * adsr_[0]->tick() * waves_[0]->tick();
-00089   temp += control2_ * 0.5 * gains_[2] * adsr_[2]->tick() * waves_[2]->tick();
-00090 
-00091   // Calculate amplitude modulation and apply it to output.
-00092   temp2 = vibrato_.tick() * modDepth_;
-00093   temp = temp * (1.0 + temp2);
-00094     
-00095   lastFrame_[0] = temp * 0.5;
-00096   return lastFrame_[0];
-00097 }
-00098 
-00099 inline StkFrames& Rhodey :: tick( StkFrames& frames, unsigned int channel )
-00100 {
-00101   unsigned int nChannels = lastFrame_.channels();
-00102 #if defined(_STK_DEBUG_)
-00103   if ( channel > frames.channels() - nChannels ) {
-00104     oStream_ << "Rhodey::tick(): channel and StkFrames arguments are incompatible!";
-00105     handleError( StkError::FUNCTION_ARGUMENT );
-00106   }
-00107 #endif
-00108 
-00109   StkFloat *samples = &frames[channel];
-00110   unsigned int j, hop = frames.channels() - nChannels;
-00111   if ( nChannels == 1 ) {
-00112     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00113       *samples++ = tick();
-00114   }
-00115   else {
-00116     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00117       *samples++ = tick();
-00118       for ( j=1; j<nChannels; j++ )
-00119         *samples++ = lastFrame_[j];
-00120     }
-00121   }
-00122 
-00123   return frames;
-00124 }
-00125 
-00126 } // stk namespace
-00127 
-00128 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/RtAudio_8h.html b/source/StkUGens/stk-4.4.4/doc/html/RtAudio_8h.html deleted file mode 100644 index 932f1612ee..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/RtAudio_8h.html +++ /dev/null @@ -1,147 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

RtAudio.h File Reference

-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - -

Classes

class  RtAudio
 Realtime audio i/o C++ classes. More...
struct  RtAudio::DeviceInfo
 The public device information structure for returning queried values. More...
struct  RtAudio::StreamParameters
 The structure for specifying input or ouput stream parameters. More...
struct  RtAudio::StreamOptions
 The structure for specifying stream options. More...

Typedefs

typedef unsigned long RtAudioFormat
 RtAudio data format type.
typedef unsigned int RtAudioStreamFlags
 RtAudio stream option flags.
typedef unsigned int RtAudioStreamStatus
 RtAudio stream status (over- or underflow) flags.
typedef int(* RtAudioCallback )(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, RtAudioStreamStatus status, void *userData)
 RtAudio callback function prototype.
-

Detailed Description

-

Typedef Documentation

- -
-
- - - - -
typedef unsigned long RtAudioFormat
-
-
- -

RtAudio data format type.

-

Support for signed integers and floats. Audio data fed to/from an RtAudio stream is assumed to ALWAYS be in host byte order. The internal routines will automatically take care of any necessary byte-swapping between the host format and the soundcard. Thus, endian-ness is not a concern in the following format definitions. Note that 24-bit data is expected to be encapsulated in a 32-bit format.

-
    -
  • RTAUDIO_SINT8: 8-bit signed integer.
  • -
  • RTAUDIO_SINT16: 16-bit signed integer.
  • -
  • RTAUDIO_SINT24: Lower 3 bytes of 32-bit signed integer.
  • -
  • RTAUDIO_SINT32: 32-bit signed integer.
  • -
  • RTAUDIO_FLOAT32: Normalized between plus/minus 1.0.
  • -
  • RTAUDIO_FLOAT64: Normalized between plus/minus 1.0.
  • -
- -
-
- -
-
- - - - -
typedef unsigned long RtAudioStreamFlags
-
-
- -

RtAudio stream option flags.

-

The following flags can be OR'ed together to allow a client to make changes to the default stream behavior:

-
    -
  • RTAUDIO_NONINTERLEAVED: Use non-interleaved buffers (default = interleaved).
  • -
  • RTAUDIO_MINIMIZE_LATENCY: Attempt to set stream parameters for lowest possible latency.
  • -
  • RTAUDIO_HOG_DEVICE: Attempt grab device for exclusive use.
  • -
  • RTAUDIO_ALSA_USE_DEFAULT: Use the "default" PCM device (ALSA only).
  • -
-

By default, RtAudio streams pass and receive audio data from the client in an interleaved format. By passing the RTAUDIO_NONINTERLEAVED flag to the openStream() function, audio data will instead be presented in non-interleaved buffers. In this case, each buffer argument in the RtAudioCallback function will point to a single array of data, with nFrames samples for each channel concatenated back-to-back. For example, the first sample of data for the second channel would be located at index nFrames (assuming the buffer pointer was recast to the correct data type for the stream).

-

Certain audio APIs offer a number of parameters that influence the I/O latency of a stream. By default, RtAudio will attempt to set these parameters internally for robust (glitch-free) performance (though some APIs, like Windows Direct Sound, make this difficult). By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() function, internal stream settings will be influenced in an attempt to minimize stream latency, though possibly at the expense of stream performance.

-

If the RTAUDIO_HOG_DEVICE flag is set, RtAudio will attempt to open the input and/or output stream device(s) for exclusive use. Note that this is not possible with all supported audio APIs.

-

If the RTAUDIO_SCHEDULE_REALTIME flag is set, RtAudio will attempt to select realtime scheduling (round-robin) for the callback thread.

-

If the RTAUDIO_ALSA_USE_DEFAULT flag is set, RtAudio will attempt to open the "default" PCM device when using the ALSA API. Note that this will override any specified input or output device id.

- -
-
- -
-
- - - - -
typedef unsigned long RtAudioStreamStatus
-
-
- -

RtAudio stream status (over- or underflow) flags.

-

Notification of a stream over- or underflow is indicated by a non-zero stream status argument in the RtAudioCallback function. The stream status can be one of the following two options, depending on whether the stream is open for output and/or input:

-
    -
  • RTAUDIO_INPUT_OVERFLOW: Input data was discarded because of an overflow condition at the driver.
  • -
  • RTAUDIO_OUTPUT_UNDERFLOW: The output buffer ran low, likely producing a break in the output sound.
  • -
- -
-
- -
-
- - - - -
typedef int(* RtAudioCallback)(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, RtAudioStreamStatus status, void *userData)
-
-
- -

RtAudio callback function prototype.

-

All RtAudio clients must create a function of type RtAudioCallback to read and/or write data from/to the audio stream. When the underlying audio system is ready for new input or output data, this function will be invoked.

-
Parameters:
- - - - - - - -
outputBuffer For output (or duplex) streams, the client should write nFrames of audio sample frames into this buffer. This argument should be recast to the datatype specified when the stream was opened. For input-only streams, this argument will be NULL.
inputBuffer For input (or duplex) streams, this buffer will hold nFrames of input audio sample frames. This argument should be recast to the datatype specified when the stream was opened. For output-only streams, this argument will be NULL.
nFrames The number of sample frames of input or output data in the buffers. The actual buffer size in bytes is dependent on the data type and number of channels in use.
streamTime The number of seconds that have elapsed since the stream was started.
status If non-zero, this argument indicates a data overflow or underflow condition for the stream. The particular condition can be determined by comparison with the RtAudioStreamStatus flags.
userData A pointer to optional data provided by the client when opening the stream (default = NULL).
-
-
-

To continue normal stream operation, the RtAudioCallback function should return a value of zero. To stop the stream and drain the output buffer, the function should return a value of one. To abort the stream immediately, the client should return a value of two.

- -
-
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/RtAudio_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/RtAudio_8h_source.html deleted file mode 100644 index 4fba7d03b5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/RtAudio_8h_source.html +++ /dev/null @@ -1,680 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

RtAudio.h

Go to the documentation of this file.
00001 /************************************************************************/
-00039 /************************************************************************/
-00040 
-00045 // RtAudio: Version 4.0.11
-00046 
-00047 #ifndef __RTAUDIO_H
-00048 #define __RTAUDIO_H
-00049 
-00050 #include <string>
-00051 #include <vector>
-00052 #include "RtError.h"
-00053 
-00072 typedef unsigned long RtAudioFormat;
-00073 static const RtAudioFormat RTAUDIO_SINT8 = 0x1;    // 8-bit signed integer.
-00074 static const RtAudioFormat RTAUDIO_SINT16 = 0x2;   // 16-bit signed integer.
-00075 static const RtAudioFormat RTAUDIO_SINT24 = 0x4;   // Lower 3 bytes of 32-bit signed integer.
-00076 static const RtAudioFormat RTAUDIO_SINT32 = 0x8;   // 32-bit signed integer.
-00077 static const RtAudioFormat RTAUDIO_FLOAT32 = 0x10; // Normalized between plus/minus 1.0.
-00078 static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/minus 1.0.
-00079 
-00122 typedef unsigned int RtAudioStreamFlags;
-00123 static const RtAudioStreamFlags RTAUDIO_NONINTERLEAVED = 0x1;    // Use non-interleaved buffers (default = interleaved).
-00124 static const RtAudioStreamFlags RTAUDIO_MINIMIZE_LATENCY = 0x2;  // Attempt to set stream parameters for lowest possible latency.
-00125 static const RtAudioStreamFlags RTAUDIO_HOG_DEVICE = 0x4;        // Attempt grab device and prevent use by others.
-00126 static const RtAudioStreamFlags RTAUDIO_SCHEDULE_REALTIME = 0x8; // Try to select realtime scheduling for callback thread.
-00127 static const RtAudioStreamFlags RTAUDIO_ALSA_USE_DEFAULT = 0x10; // Use the "default" PCM device (ALSA only).
-00128 
-00140 typedef unsigned int RtAudioStreamStatus;
-00141 static const RtAudioStreamStatus RTAUDIO_INPUT_OVERFLOW = 0x1;    // Input data was discarded because of an overflow condition at the driver.
-00142 static const RtAudioStreamStatus RTAUDIO_OUTPUT_UNDERFLOW = 0x2;  // The output buffer ran low, likely causing a gap in the output sound.
-00143 
-00145 
-00183 typedef int (*RtAudioCallback)( void *outputBuffer, void *inputBuffer,
-00184                                 unsigned int nFrames,
-00185                                 double streamTime,
-00186                                 RtAudioStreamStatus status,
-00187                                 void *userData );
-00188 
-00189 
-00190 // **************************************************************** //
-00191 //
-00192 // RtAudio class declaration.
-00193 //
-00194 // RtAudio is a "controller" used to select an available audio i/o
-00195 // interface.  It presents a common API for the user to call but all
-00196 // functionality is implemented by the class RtApi and its
-00197 // subclasses.  RtAudio creates an instance of an RtApi subclass
-00198 // based on the user's API choice.  If no choice is made, RtAudio
-00199 // attempts to make a "logical" API selection.
-00200 //
-00201 // **************************************************************** //
-00202 
-00203 class RtApi;
-00204 
-00205 class RtAudio
-00206 {
-00207  public:
-00208 
-00210   enum Api {
-00211     UNSPECIFIED,    
-00212     LINUX_ALSA,     
-00213     LINUX_PULSE,    
-00214     LINUX_OSS,      
-00215     UNIX_JACK,      
-00216     MACOSX_CORE,    
-00217     WINDOWS_ASIO,   
-00218     WINDOWS_DS,     
-00219     RTAUDIO_DUMMY   
-00220   };
-00221 
-00223   struct DeviceInfo {
-00224     bool probed;                  
-00225     std::string name;             
-00226     unsigned int outputChannels;  
-00227     unsigned int inputChannels;   
-00228     unsigned int duplexChannels;  
-00229     bool isDefaultOutput;         
-00230     bool isDefaultInput;          
-00231     std::vector<unsigned int> sampleRates; 
-00232     RtAudioFormat nativeFormats;  
-00234     // Default constructor.
-00235     DeviceInfo()
-00236       :probed(false), outputChannels(0), inputChannels(0), duplexChannels(0),
-00237        isDefaultOutput(false), isDefaultInput(false), nativeFormats(0) {}
-00238   };
-00239 
-00241   struct StreamParameters {
-00242     unsigned int deviceId;     
-00243     unsigned int nChannels;    
-00244     unsigned int firstChannel; 
-00246     // Default constructor.
-00247     StreamParameters()
-00248       : deviceId(0), nChannels(0), firstChannel(0) {}
-00249   };
-00250 
-00252 
-00308   struct StreamOptions {
-00309     RtAudioStreamFlags flags;      
-00310     unsigned int numberOfBuffers;  
-00311     std::string streamName;        
-00312     int priority;                  
-00314     // Default constructor.
-00315     StreamOptions()
-00316     : flags(0), numberOfBuffers(0), priority(0) {}
-00317   };
-00318 
-00320 
-00325   static void getCompiledApi( std::vector<RtAudio::Api> &apis ) throw();
-00326 
-00328 
-00336   RtAudio( RtAudio::Api api=UNSPECIFIED ) throw();
-00337 
-00339 
-00343   ~RtAudio() throw();
-00344 
-00346   RtAudio::Api getCurrentApi( void ) throw();
-00347 
-00349 
-00354   unsigned int getDeviceCount( void ) throw();
-00355 
-00357 
-00367   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-00368 
-00370 
-00377   unsigned int getDefaultOutputDevice( void ) throw();
-00378 
-00380 
-00387   unsigned int getDefaultInputDevice( void ) throw();
-00388 
-00390 
-00427   void openStream( RtAudio::StreamParameters *outputParameters,
-00428                    RtAudio::StreamParameters *inputParameters,
-00429                    RtAudioFormat format, unsigned int sampleRate,
-00430                    unsigned int *bufferFrames, RtAudioCallback callback,
-00431                    void *userData = NULL, RtAudio::StreamOptions *options = NULL );
-00432 
-00434 
-00438   void closeStream( void ) throw();
-00439 
-00441 
-00447   void startStream( void );
-00448 
-00450 
-00456   void stopStream( void );
-00457 
-00459 
-00465   void abortStream( void );
-00466 
-00468   bool isStreamOpen( void ) const throw();
-00469 
-00471   bool isStreamRunning( void ) const throw();
-00472 
-00474 
-00477   double getStreamTime( void );
-00478 
-00480 
-00488   long getStreamLatency( void );
-00489 
-00491 
-00496   unsigned int getStreamSampleRate( void );
-00497 
-00499   void showWarnings( bool value = true ) throw();
-00500 
-00501  protected:
-00502 
-00503   void openRtApi( RtAudio::Api api );
-00504   RtApi *rtapi_;
-00505 };
-00506 
-00507 // Operating system dependent thread functionality.
-00508 #if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)
-00509   #include <windows.h>
-00510   #include <process.h>
-00511 
-00512   typedef unsigned long ThreadHandle;
-00513   typedef CRITICAL_SECTION StreamMutex;
-00514 
-00515 #elif defined(__LINUX_ALSA__) || defined(__LINUX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__)
-00516   // Using pthread library for various flavors of unix.
-00517   #include <pthread.h>
-00518 
-00519   typedef pthread_t ThreadHandle;
-00520   typedef pthread_mutex_t StreamMutex;
-00521 
-00522 #else // Setup for "dummy" behavior
-00523 
-00524   #define __RTAUDIO_DUMMY__
-00525   typedef int ThreadHandle;
-00526   typedef int StreamMutex;
-00527 
-00528 #endif
-00529 
-00530 // This global structure type is used to pass callback information
-00531 // between the private RtAudio stream structure and global callback
-00532 // handling functions.
-00533 struct CallbackInfo {
-00534   void *object;    // Used as a "this" pointer.
-00535   ThreadHandle thread;
-00536   void *callback;
-00537   void *userData;
-00538   void *apiInfo;   // void pointer for API specific callback information
-00539   bool isRunning;
-00540 
-00541   // Default constructor.
-00542   CallbackInfo()
-00543     :object(0), callback(0), userData(0), apiInfo(0), isRunning(false) {}
-00544 };
-00545 
-00546 // **************************************************************** //
-00547 //
-00548 // RtApi class declaration.
-00549 //
-00550 // Subclasses of RtApi contain all API- and OS-specific code necessary
-00551 // to fully implement the RtAudio API.
-00552 //
-00553 // Note that RtApi is an abstract base class and cannot be
-00554 // explicitly instantiated.  The class RtAudio will create an
-00555 // instance of an RtApi subclass (RtApiOss, RtApiAlsa,
-00556 // RtApiJack, RtApiCore, RtApiDs, or RtApiAsio).
-00557 //
-00558 // **************************************************************** //
-00559 
-00560 #if defined( HAVE_GETTIMEOFDAY )
-00561   #include <sys/time.h>
-00562 #endif
-00563 
-00564 #include <sstream>
-00565 
-00566 class RtApi
-00567 {
-00568 public:
-00569 
-00570   RtApi();
-00571   virtual ~RtApi();
-00572   virtual RtAudio::Api getCurrentApi( void ) = 0;
-00573   virtual unsigned int getDeviceCount( void ) = 0;
-00574   virtual RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) = 0;
-00575   virtual unsigned int getDefaultInputDevice( void );
-00576   virtual unsigned int getDefaultOutputDevice( void );
-00577   void openStream( RtAudio::StreamParameters *outputParameters,
-00578                    RtAudio::StreamParameters *inputParameters,
-00579                    RtAudioFormat format, unsigned int sampleRate,
-00580                    unsigned int *bufferFrames, RtAudioCallback callback,
-00581                    void *userData, RtAudio::StreamOptions *options );
-00582   virtual void closeStream( void );
-00583   virtual void startStream( void ) = 0;
-00584   virtual void stopStream( void ) = 0;
-00585   virtual void abortStream( void ) = 0;
-00586   long getStreamLatency( void );
-00587   unsigned int getStreamSampleRate( void );
-00588   virtual double getStreamTime( void );
-00589   bool isStreamOpen( void ) const { return stream_.state != STREAM_CLOSED; };
-00590   bool isStreamRunning( void ) const { return stream_.state == STREAM_RUNNING; };
-00591   void showWarnings( bool value ) { showWarnings_ = value; };
-00592 
-00593 
-00594 protected:
-00595 
-00596   static const unsigned int MAX_SAMPLE_RATES;
-00597   static const unsigned int SAMPLE_RATES[];
-00598 
-00599   enum { FAILURE, SUCCESS };
-00600 
-00601   enum StreamState {
-00602     STREAM_STOPPED,
-00603     STREAM_STOPPING,
-00604     STREAM_RUNNING,
-00605     STREAM_CLOSED = -50
-00606   };
-00607 
-00608   enum StreamMode {
-00609     OUTPUT,
-00610     INPUT,
-00611     DUPLEX,
-00612     UNINITIALIZED = -75
-00613   };
-00614 
-00615   // A protected structure used for buffer conversion.
-00616   struct ConvertInfo {
-00617     int channels;
-00618     int inJump, outJump;
-00619     RtAudioFormat inFormat, outFormat;
-00620     std::vector<int> inOffset;
-00621     std::vector<int> outOffset;
-00622   };
-00623 
-00624   // A protected structure for audio streams.
-00625   struct RtApiStream {
-00626     unsigned int device[2];    // Playback and record, respectively.
-00627     void *apiHandle;           // void pointer for API specific stream handle information
-00628     StreamMode mode;           // OUTPUT, INPUT, or DUPLEX.
-00629     StreamState state;         // STOPPED, RUNNING, or CLOSED
-00630     char *userBuffer[2];       // Playback and record, respectively.
-00631     char *deviceBuffer;
-00632     bool doConvertBuffer[2];   // Playback and record, respectively.
-00633     bool userInterleaved;
-00634     bool deviceInterleaved[2]; // Playback and record, respectively.
-00635     bool doByteSwap[2];        // Playback and record, respectively.
-00636     unsigned int sampleRate;
-00637     unsigned int bufferSize;
-00638     unsigned int nBuffers;
-00639     unsigned int nUserChannels[2];    // Playback and record, respectively.
-00640     unsigned int nDeviceChannels[2];  // Playback and record channels, respectively.
-00641     unsigned int channelOffset[2];    // Playback and record, respectively.
-00642     unsigned long latency[2];         // Playback and record, respectively.
-00643     RtAudioFormat userFormat;
-00644     RtAudioFormat deviceFormat[2];    // Playback and record, respectively.
-00645     StreamMutex mutex;
-00646     CallbackInfo callbackInfo;
-00647     ConvertInfo convertInfo[2];
-00648     double streamTime;         // Number of elapsed seconds since the stream started.
-00649 
-00650 #if defined(HAVE_GETTIMEOFDAY)
-00651     struct timeval lastTickTimestamp;
-00652 #endif
-00653 
-00654     RtApiStream()
-00655       :apiHandle(0), deviceBuffer(0) { device[0] = 11111; device[1] = 11111; }
-00656   };
-00657 
-00658   typedef signed short Int16;
-00659   typedef signed int Int32;
-00660   typedef float Float32;
-00661   typedef double Float64;
-00662 
-00663   std::ostringstream errorStream_;
-00664   std::string errorText_;
-00665   bool showWarnings_;
-00666   RtApiStream stream_;
-00667 
-00675   virtual bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
-00676                                 unsigned int firstChannel, unsigned int sampleRate,
-00677                                 RtAudioFormat format, unsigned int *bufferSize,
-00678                                 RtAudio::StreamOptions *options );
-00679 
-00681   void tickStreamTime( void );
-00682 
-00684   void clearStreamInfo();
-00685 
-00690   void verifyStream( void );
-00691 
-00693   void error( RtError::Type type );
-00694 
-00699   void convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info );
-00700 
-00702   void byteSwapBuffer( char *buffer, unsigned int samples, RtAudioFormat format );
-00703 
-00705   unsigned int formatBytes( RtAudioFormat format );
-00706 
-00708   void setConvertInfo( StreamMode mode, unsigned int firstChannel );
-00709 };
-00710 
-00711 // **************************************************************** //
-00712 //
-00713 // Inline RtAudio definitions.
-00714 //
-00715 // **************************************************************** //
-00716 
-00717 inline RtAudio::Api RtAudio :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); }
-00718 inline unsigned int RtAudio :: getDeviceCount( void ) throw() { return rtapi_->getDeviceCount(); }
-00719 inline RtAudio::DeviceInfo RtAudio :: getDeviceInfo( unsigned int device ) { return rtapi_->getDeviceInfo( device ); }
-00720 inline unsigned int RtAudio :: getDefaultInputDevice( void ) throw() { return rtapi_->getDefaultInputDevice(); }
-00721 inline unsigned int RtAudio :: getDefaultOutputDevice( void ) throw() { return rtapi_->getDefaultOutputDevice(); }
-00722 inline void RtAudio :: closeStream( void ) throw() { return rtapi_->closeStream(); }
-00723 inline void RtAudio :: startStream( void ) { return rtapi_->startStream(); }
-00724 inline void RtAudio :: stopStream( void )  { return rtapi_->stopStream(); }
-00725 inline void RtAudio :: abortStream( void ) { return rtapi_->abortStream(); }
-00726 inline bool RtAudio :: isStreamOpen( void ) const throw() { return rtapi_->isStreamOpen(); }
-00727 inline bool RtAudio :: isStreamRunning( void ) const throw() { return rtapi_->isStreamRunning(); }
-00728 inline long RtAudio :: getStreamLatency( void ) { return rtapi_->getStreamLatency(); }
-00729 inline unsigned int RtAudio :: getStreamSampleRate( void ) { return rtapi_->getStreamSampleRate(); };
-00730 inline double RtAudio :: getStreamTime( void ) { return rtapi_->getStreamTime(); }
-00731 inline void RtAudio :: showWarnings( bool value ) throw() { rtapi_->showWarnings( value ); }
-00732 
-00733 // RtApi Subclass prototypes.
-00734 
-00735 #if defined(__MACOSX_CORE__)
-00736 
-00737 #include <CoreAudio/AudioHardware.h>
-00738 
-00739 class RtApiCore: public RtApi
-00740 {
-00741 public:
-00742 
-00743   RtApiCore();
-00744   ~RtApiCore();
-00745   RtAudio::Api getCurrentApi( void ) { return RtAudio::MACOSX_CORE; };
-00746   unsigned int getDeviceCount( void );
-00747   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-00748   unsigned int getDefaultOutputDevice( void );
-00749   unsigned int getDefaultInputDevice( void );
-00750   void closeStream( void );
-00751   void startStream( void );
-00752   void stopStream( void );
-00753   void abortStream( void );
-00754   long getStreamLatency( void );
-00755 
-00756   // This function is intended for internal use only.  It must be
-00757   // public because it is called by the internal callback handler,
-00758   // which is not a member of RtAudio.  External use of this function
-00759   // will most likely produce highly undesireable results!
-00760   bool callbackEvent( AudioDeviceID deviceId,
-00761                       const AudioBufferList *inBufferList,
-00762                       const AudioBufferList *outBufferList );
-00763 
-00764   private:
-00765 
-00766   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
-00767                         unsigned int firstChannel, unsigned int sampleRate,
-00768                         RtAudioFormat format, unsigned int *bufferSize,
-00769                         RtAudio::StreamOptions *options );
-00770   static const char* getErrorCode( OSStatus code );
-00771 };
-00772 
-00773 #endif
-00774 
-00775 #if defined(__UNIX_JACK__)
-00776 
-00777 class RtApiJack: public RtApi
-00778 {
-00779 public:
-00780 
-00781   RtApiJack();
-00782   ~RtApiJack();
-00783   RtAudio::Api getCurrentApi( void ) { return RtAudio::UNIX_JACK; };
-00784   unsigned int getDeviceCount( void );
-00785   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-00786   void closeStream( void );
-00787   void startStream( void );
-00788   void stopStream( void );
-00789   void abortStream( void );
-00790   long getStreamLatency( void );
-00791 
-00792   // This function is intended for internal use only.  It must be
-00793   // public because it is called by the internal callback handler,
-00794   // which is not a member of RtAudio.  External use of this function
-00795   // will most likely produce highly undesireable results!
-00796   bool callbackEvent( unsigned long nframes );
-00797 
-00798   private:
-00799 
-00800   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
-00801                         unsigned int firstChannel, unsigned int sampleRate,
-00802                         RtAudioFormat format, unsigned int *bufferSize,
-00803                         RtAudio::StreamOptions *options );
-00804 };
-00805 
-00806 #endif
-00807 
-00808 #if defined(__WINDOWS_ASIO__)
-00809 
-00810 class RtApiAsio: public RtApi
-00811 {
-00812 public:
-00813 
-00814   RtApiAsio();
-00815   ~RtApiAsio();
-00816   RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_ASIO; };
-00817   unsigned int getDeviceCount( void );
-00818   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-00819   void closeStream( void );
-00820   void startStream( void );
-00821   void stopStream( void );
-00822   void abortStream( void );
-00823   long getStreamLatency( void );
-00824 
-00825   // This function is intended for internal use only.  It must be
-00826   // public because it is called by the internal callback handler,
-00827   // which is not a member of RtAudio.  External use of this function
-00828   // will most likely produce highly undesireable results!
-00829   bool callbackEvent( long bufferIndex );
-00830 
-00831   private:
-00832 
-00833   std::vector<RtAudio::DeviceInfo> devices_;
-00834   void saveDeviceInfo( void );
-00835   bool coInitialized_;
-00836   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
-00837                         unsigned int firstChannel, unsigned int sampleRate,
-00838                         RtAudioFormat format, unsigned int *bufferSize,
-00839                         RtAudio::StreamOptions *options );
-00840 };
-00841 
-00842 #endif
-00843 
-00844 #if defined(__WINDOWS_DS__)
-00845 
-00846 class RtApiDs: public RtApi
-00847 {
-00848 public:
-00849 
-00850   RtApiDs();
-00851   ~RtApiDs();
-00852   RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_DS; };
-00853   unsigned int getDeviceCount( void );
-00854   unsigned int getDefaultOutputDevice( void );
-00855   unsigned int getDefaultInputDevice( void );
-00856   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-00857   void closeStream( void );
-00858   void startStream( void );
-00859   void stopStream( void );
-00860   void abortStream( void );
-00861   long getStreamLatency( void );
-00862 
-00863   // This function is intended for internal use only.  It must be
-00864   // public because it is called by the internal callback handler,
-00865   // which is not a member of RtAudio.  External use of this function
-00866   // will most likely produce highly undesireable results!
-00867   void callbackEvent( void );
-00868 
-00869   private:
-00870 
-00871   bool coInitialized_;
-00872   bool buffersRolling;
-00873   long duplexPrerollBytes;
-00874   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
-00875                         unsigned int firstChannel, unsigned int sampleRate,
-00876                         RtAudioFormat format, unsigned int *bufferSize,
-00877                         RtAudio::StreamOptions *options );
-00878 };
-00879 
-00880 #endif
-00881 
-00882 #if defined(__LINUX_ALSA__)
-00883 
-00884 class RtApiAlsa: public RtApi
-00885 {
-00886 public:
-00887 
-00888   RtApiAlsa();
-00889   ~RtApiAlsa();
-00890   RtAudio::Api getCurrentApi() { return RtAudio::LINUX_ALSA; };
-00891   unsigned int getDeviceCount( void );
-00892   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-00893   void closeStream( void );
-00894   void startStream( void );
-00895   void stopStream( void );
-00896   void abortStream( void );
-00897 
-00898   // This function is intended for internal use only.  It must be
-00899   // public because it is called by the internal callback handler,
-00900   // which is not a member of RtAudio.  External use of this function
-00901   // will most likely produce highly undesireable results!
-00902   void callbackEvent( void );
-00903 
-00904   private:
-00905 
-00906   std::vector<RtAudio::DeviceInfo> devices_;
-00907   void saveDeviceInfo( void );
-00908   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
-00909                         unsigned int firstChannel, unsigned int sampleRate,
-00910                         RtAudioFormat format, unsigned int *bufferSize,
-00911                         RtAudio::StreamOptions *options );
-00912 };
-00913 
-00914 #endif
-00915 
-00916 #if defined(__LINUX_PULSE__)
-00917 
-00918 class RtApiPulse: public RtApi
-00919 {
-00920 public:
-00921   ~RtApiPulse();
-00922   RtAudio::Api getCurrentApi() { return RtAudio::LINUX_PULSE; };
-00923   unsigned int getDeviceCount( void );
-00924   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-00925   void closeStream( void );
-00926   void startStream( void );
-00927   void stopStream( void );
-00928   void abortStream( void );
-00929 
-00930   // This function is intended for internal use only.  It must be
-00931   // public because it is called by the internal callback handler,
-00932   // which is not a member of RtAudio.  External use of this function
-00933   // will most likely produce highly undesireable results!
-00934   void callbackEvent( void );
-00935 
-00936   private:
-00937 
-00938   std::vector<RtAudio::DeviceInfo> devices_;
-00939   void saveDeviceInfo( void );
-00940   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
-00941                         unsigned int firstChannel, unsigned int sampleRate,
-00942                         RtAudioFormat format, unsigned int *bufferSize,
-00943                         RtAudio::StreamOptions *options );
-00944 };
-00945 
-00946 #endif
-00947 
-00948 #if defined(__LINUX_OSS__)
-00949 
-00950 class RtApiOss: public RtApi
-00951 {
-00952 public:
-00953 
-00954   RtApiOss();
-00955   ~RtApiOss();
-00956   RtAudio::Api getCurrentApi() { return RtAudio::LINUX_OSS; };
-00957   unsigned int getDeviceCount( void );
-00958   RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
-00959   void closeStream( void );
-00960   void startStream( void );
-00961   void stopStream( void );
-00962   void abortStream( void );
-00963 
-00964   // This function is intended for internal use only.  It must be
-00965   // public because it is called by the internal callback handler,
-00966   // which is not a member of RtAudio.  External use of this function
-00967   // will most likely produce highly undesireable results!
-00968   void callbackEvent( void );
-00969 
-00970   private:
-00971 
-00972   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
-00973                         unsigned int firstChannel, unsigned int sampleRate,
-00974                         RtAudioFormat format, unsigned int *bufferSize,
-00975                         RtAudio::StreamOptions *options );
-00976 };
-00977 
-00978 #endif
-00979 
-00980 #if defined(__RTAUDIO_DUMMY__)
-00981 
-00982 class RtApiDummy: public RtApi
-00983 {
-00984 public:
-00985 
-00986   RtApiDummy() { errorText_ = "RtApiDummy: This class provides no functionality."; error( RtError::WARNING ); };
-00987   RtAudio::Api getCurrentApi( void ) { return RtAudio::RTAUDIO_DUMMY; };
-00988   unsigned int getDeviceCount( void ) { return 0; };
-00989   RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) { RtAudio::DeviceInfo info; return info; };
-00990   void closeStream( void ) {};
-00991   void startStream( void ) {};
-00992   void stopStream( void ) {};
-00993   void abortStream( void ) {};
-00994 
-00995   private:
-00996 
-00997   bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, 
-00998                         unsigned int firstChannel, unsigned int sampleRate,
-00999                         RtAudioFormat format, unsigned int *bufferSize,
-01000                         RtAudio::StreamOptions *options ) { return false; };
-01001 };
-01002 
-01003 #endif
-01004 
-01005 #endif
-01006 
-01007 // Indentation settings for Vim and Emacs
-01008 //
-01009 // Local Variables:
-01010 // c-basic-offset: 2
-01011 // indent-tabs-mode: nil
-01012 // End:
-01013 //
-01014 // vim: et sts=2 sw=2
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/RtError_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/RtError_8h_source.html deleted file mode 100644 index 3fe980205e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/RtError_8h_source.html +++ /dev/null @@ -1,69 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

RtError.h

00001 /************************************************************************/
-00010 /************************************************************************/
-00011 
-00012 #ifndef RTERROR_H
-00013 #define RTERROR_H
-00014 
-00015 #include <exception>
-00016 #include <iostream>
-00017 #include <string>
-00018 
-00019 class RtError : public std::exception
-00020 {
-00021  public:
-00023   enum Type {
-00024     WARNING,           
-00025     DEBUG_WARNING,     
-00026     UNSPECIFIED,       
-00027     NO_DEVICES_FOUND,  
-00028     INVALID_DEVICE,    
-00029     MEMORY_ERROR,      
-00030     INVALID_PARAMETER, 
-00031     INVALID_USE,       
-00032     DRIVER_ERROR,      
-00033     SYSTEM_ERROR,      
-00034     THREAD_ERROR       
-00035   };
-00036 
-00038   RtError( const std::string& message, Type type = RtError::UNSPECIFIED ) throw() : message_(message), type_(type) {}
-00039  
-00041   virtual ~RtError( void ) throw() {}
-00042 
-00044   virtual void printMessage( void ) const throw() { std::cerr << '\n' << message_ << "\n\n"; }
-00045 
-00047   virtual const Type& getType(void) const throw() { return type_; }
-00048 
-00050   virtual const std::string& getMessage(void) const throw() { return message_; }
-00051 
-00053   virtual const char* what( void ) const throw() { return message_.c_str(); }
-00054 
-00055  protected:
-00056   std::string message_;
-00057   Type type_;
-00058 };
-00059 
-00060 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/RtMidi_8h.html b/source/StkUGens/stk-4.4.4/doc/html/RtMidi_8h.html deleted file mode 100644 index 000548d068..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/RtMidi_8h.html +++ /dev/null @@ -1,36 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

RtMidi.h File Reference

-

Go to the source code of this file.

- - - - - - - - -

Classes

class  RtMidi
 An abstract base class for realtime MIDI input/output. More...
class  RtMidiIn
 A realtime MIDI input class. More...
class  RtMidiOut
 A realtime MIDI output class. More...
-

Detailed Description

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/RtMidi_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/RtMidi_8h_source.html deleted file mode 100644 index a183710def..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/RtMidi_8h_source.html +++ /dev/null @@ -1,535 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

RtMidi.h

Go to the documentation of this file.
00001 /**********************************************************************/
-00037 /**********************************************************************/
-00038 
-00043 // RtMidi: Version 2.0.1
-00044 
-00045 #ifndef RTMIDI_H
-00046 #define RTMIDI_H
-00047 
-00048 #include "RtError.h"
-00049 #include <string>
-00050 #include <vector>
-00051 
-00052 class RtMidi
-00053 {
-00054  public:
-00055 
-00057   enum Api {
-00058     UNSPECIFIED,    
-00059     MACOSX_CORE,    
-00060     LINUX_ALSA,     
-00061     UNIX_JACK,      
-00062     WINDOWS_MM,     
-00063     WINDOWS_KS,     
-00064     RTMIDI_DUMMY    
-00065   };
-00066 
-00068 
-00073   static void getCompiledApi( std::vector<RtMidi::Api> &apis ) throw();
-00074 
-00076   virtual void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi" ) ) = 0;
-00077 
-00079   virtual void openVirtualPort( const std::string portName = std::string( "RtMidi" ) ) = 0;
-00080 
-00082   virtual unsigned int getPortCount() = 0;
-00083 
-00085   virtual std::string getPortName( unsigned int portNumber = 0 ) = 0;
-00086 
-00088   virtual void closePort( void ) = 0;
-00089 
-00091   static void error( RtError::Type type, std::string errorString );
-00092 
-00093  protected:
-00094 
-00095   RtMidi() {};
-00096   virtual ~RtMidi() {};
-00097 };
-00098 
-00099 /**********************************************************************/
-00115 /**********************************************************************/
-00116 
-00117 // **************************************************************** //
-00118 //
-00119 // RtMidiIn and RtMidiOut class declarations.
-00120 //
-00121 // RtMidiIn / RtMidiOut are "controllers" used to select an available
-00122 // MIDI input or output interface.  They present common APIs for the
-00123 // user to call but all functionality is implemented by the classes
-00124 // MidiInApi, MidiOutApi and their subclasses.  RtMidiIn and RtMidiOut
-00125 // each create an instance of a MidiInApi or MidiOutApi subclass based
-00126 // on the user's API choice.  If no choice is made, they attempt to
-00127 // make a "logical" API selection.
-00128 //
-00129 // **************************************************************** //
-00130 
-00131 class MidiInApi;
-00132 class MidiOutApi;
-00133 
-00134 class RtMidiIn : public RtMidi
-00135 {
-00136  public:
-00137 
-00139   typedef void (*RtMidiCallback)( double timeStamp, std::vector<unsigned char> *message, void *userData);
-00140 
-00142 
-00153   RtMidiIn( RtMidi::Api api=UNSPECIFIED,
-00154             const std::string clientName = std::string( "RtMidi Input Client"),
-00155             unsigned int queueSizeLimit = 100 );
-00156 
-00158   ~RtMidiIn ( void ) throw();
-00159 
-00161   RtMidi::Api getCurrentApi( void ) throw();
-00162 
-00164 
-00168   void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi Input" ) );
-00169 
-00171 
-00177   void openVirtualPort( const std::string portName = std::string( "RtMidi Input" ) );
-00178 
-00180 
-00186   void setCallback( RtMidiCallback callback, void *userData = 0 );
-00187 
-00189 
-00193   void cancelCallback();
-00194 
-00196   void closePort( void );
-00197 
-00199   unsigned int getPortCount();
-00200 
-00202 
-00205   std::string getPortName( unsigned int portNumber = 0 );
-00206 
-00208 
-00215   void ignoreTypes( bool midiSysex = true, bool midiTime = true, bool midiSense = true );
-00216 
-00218 
-00225   double getMessage( std::vector<unsigned char> *message );
-00226 
-00227  protected:
-00228   void openMidiApi( RtMidi::Api api, const std::string clientName, unsigned int queueSizeLimit );
-00229   MidiInApi *rtapi_;
-00230 
-00231 };
-00232 
-00233 /**********************************************************************/
-00247 /**********************************************************************/
-00248 
-00249 class RtMidiOut : public RtMidi
-00250 {
-00251  public:
-00252 
-00254 
-00261   RtMidiOut( RtMidi::Api api=UNSPECIFIED,
-00262              const std::string clientName = std::string( "RtMidi Output Client") );
-00263 
-00265   ~RtMidiOut( void ) throw();
-00266 
-00268   RtMidi::Api getCurrentApi( void ) throw();
-00269 
-00271 
-00277   void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi Output" ) );
-00278 
-00280   void closePort( void );
-00281 
-00283 
-00291   void openVirtualPort( const std::string portName = std::string( "RtMidi Output" ) );
-00292 
-00294   unsigned int getPortCount( void );
-00295 
-00297 
-00300   std::string getPortName( unsigned int portNumber = 0 );
-00301 
-00303 
-00307   void sendMessage( std::vector<unsigned char> *message );
-00308 
-00309  protected:
-00310   void openMidiApi( RtMidi::Api api, const std::string clientName );
-00311   MidiOutApi *rtapi_;
-00312 };
-00313 
-00314 
-00315 // **************************************************************** //
-00316 //
-00317 // MidiInApi / MidiOutApi class declarations.
-00318 //
-00319 // Subclasses of MidiInApi and MidiOutApi contain all API- and
-00320 // OS-specific code necessary to fully implement the RtMidi API.
-00321 //
-00322 // Note that MidiInApi and MidiOutApi are abstract base classes and
-00323 // cannot be explicitly instantiated.  RtMidiIn and RtMidiOut will
-00324 // create instances of a MidiInApi or MidiOutApi subclass.
-00325 //
-00326 // **************************************************************** //
-00327 
-00328 class MidiInApi
-00329 {
-00330  public:
-00331 
-00332   MidiInApi( unsigned int queueSizeLimit );
-00333   virtual ~MidiInApi( void );
-00334   virtual RtMidi::Api getCurrentApi( void ) = 0;
-00335   virtual void openPort( unsigned int portNumber, const std::string portName ) = 0;
-00336   virtual void openVirtualPort( const std::string portName ) = 0;
-00337   virtual void closePort( void ) = 0;
-00338   void setCallback( RtMidiIn::RtMidiCallback callback, void *userData );
-00339   void cancelCallback( void );
-00340   virtual unsigned int getPortCount( void ) = 0;
-00341   virtual std::string getPortName( unsigned int portNumber ) = 0;
-00342   virtual void ignoreTypes( bool midiSysex, bool midiTime, bool midiSense );
-00343   double getMessage( std::vector<unsigned char> *message );
-00344 
-00345   // A MIDI structure used internally by the class to store incoming
-00346   // messages.  Each message represents one and only one MIDI message.
-00347   struct MidiMessage { 
-00348     std::vector<unsigned char> bytes; 
-00349     double timeStamp;
-00350 
-00351     // Default constructor.
-00352   MidiMessage()
-00353   :bytes(0), timeStamp(0.0) {}
-00354   };
-00355 
-00356   struct MidiQueue {
-00357     unsigned int front;
-00358     unsigned int back;
-00359     unsigned int size;
-00360     unsigned int ringSize;
-00361     MidiMessage *ring;
-00362 
-00363     // Default constructor.
-00364   MidiQueue()
-00365   :front(0), back(0), size(0), ringSize(0) {}
-00366   };
-00367 
-00368   // The RtMidiInData structure is used to pass private class data to
-00369   // the MIDI input handling function or thread.
-00370   struct RtMidiInData {
-00371     MidiQueue queue;
-00372     MidiMessage message;
-00373     unsigned char ignoreFlags;
-00374     bool doInput;
-00375     bool firstMessage;
-00376     void *apiData;
-00377     bool usingCallback;
-00378     void *userCallback;
-00379     void *userData;
-00380     bool continueSysex;
-00381 
-00382     // Default constructor.
-00383   RtMidiInData()
-00384   : ignoreFlags(7), doInput(false), firstMessage(true),
-00385       apiData(0), usingCallback(false), userCallback(0), userData(0),
-00386       continueSysex(false) {}
-00387   };
-00388 
-00389  protected:
-00390   virtual void initialize( const std::string& clientName ) = 0;
-00391   RtMidiInData inputData_;
-00392 
-00393   void *apiData_;
-00394   bool connected_;
-00395   std::string errorString_;
-00396 };
-00397 
-00398 class MidiOutApi
-00399 {
-00400  public:
-00401 
-00402   MidiOutApi( void );
-00403   virtual ~MidiOutApi( void );
-00404   virtual RtMidi::Api getCurrentApi( void ) = 0;
-00405   virtual void openPort( unsigned int portNumber, const std::string portName ) = 0;
-00406   virtual void openVirtualPort( const std::string portName ) = 0;
-00407   virtual void closePort( void ) = 0;
-00408   virtual unsigned int getPortCount( void ) = 0;
-00409   virtual std::string getPortName( unsigned int portNumber ) = 0;
-00410   virtual void sendMessage( std::vector<unsigned char> *message ) = 0;
-00411 
-00412  protected:
-00413   virtual void initialize( const std::string& clientName ) = 0;
-00414 
-00415   void *apiData_;
-00416   bool connected_;
-00417   std::string errorString_;
-00418 };
-00419 
-00420 // **************************************************************** //
-00421 //
-00422 // Inline RtMidiIn and RtMidiOut definitions.
-00423 //
-00424 // **************************************************************** //
-00425 
-00426 inline RtMidi::Api RtMidiIn :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); }
-00427 inline void RtMidiIn :: openPort( unsigned int portNumber, const std::string portName ) { return rtapi_->openPort( portNumber, portName ); }
-00428 inline void RtMidiIn :: openVirtualPort( const std::string portName ) { return rtapi_->openVirtualPort( portName ); }
-00429 inline void RtMidiIn :: closePort( void ) { return rtapi_->closePort(); }
-00430 inline void RtMidiIn :: setCallback( RtMidiCallback callback, void *userData ) { return rtapi_->setCallback( callback, userData ); }
-00431 inline void RtMidiIn :: cancelCallback( void ) { return rtapi_->cancelCallback(); }
-00432 inline unsigned int RtMidiIn :: getPortCount( void ) { return rtapi_->getPortCount(); }
-00433 inline std::string RtMidiIn :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); }
-00434 inline void RtMidiIn :: ignoreTypes( bool midiSysex, bool midiTime, bool midiSense ) { return rtapi_->ignoreTypes( midiSysex, midiTime, midiSense ); }
-00435 inline double RtMidiIn :: getMessage( std::vector<unsigned char> *message ) { return rtapi_->getMessage( message ); }
-00436 
-00437 inline RtMidi::Api RtMidiOut :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); }
-00438 inline void RtMidiOut :: openPort( unsigned int portNumber, const std::string portName ) { return rtapi_->openPort( portNumber, portName ); }
-00439 inline void RtMidiOut :: openVirtualPort( const std::string portName ) { return rtapi_->openVirtualPort( portName ); }
-00440 inline void RtMidiOut :: closePort( void ) { return rtapi_->closePort(); }
-00441 inline unsigned int RtMidiOut :: getPortCount( void ) { return rtapi_->getPortCount(); }
-00442 inline std::string RtMidiOut :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); }
-00443 inline void RtMidiOut :: sendMessage( std::vector<unsigned char> *message ) { return rtapi_->sendMessage( message ); }
-00444 
-00445 // **************************************************************** //
-00446 //
-00447 // MidiInApi and MidiOutApi subclass prototypes.
-00448 //
-00449 // **************************************************************** //
-00450 
-00451 #if !defined(__LINUX_ALSA__) && !defined(__UNIX_JACK__) && !defined(__MACOSX_CORE__) && !defined(__WINDOWS_MM__) && !defined(__WINDOWS_KS__)
-00452   #define __RTMIDI_DUMMY__
-00453 #endif
-00454 
-00455 #if defined(__MACOSX_CORE__)
-00456 
-00457 class MidiInCore: public MidiInApi
-00458 {
-00459  public:
-00460   MidiInCore( const std::string clientName, unsigned int queueSizeLimit );
-00461   ~MidiInCore( void );
-00462   RtMidi::Api getCurrentApi( void ) { return RtMidi::MACOSX_CORE; };
-00463   void openPort( unsigned int portNumber, const std::string portName );
-00464   void openVirtualPort( const std::string portName );
-00465   void closePort( void );
-00466   unsigned int getPortCount( void );
-00467   std::string getPortName( unsigned int portNumber );
-00468 
-00469  protected:
-00470   void initialize( const std::string& clientName );
-00471 };
-00472 
-00473 class MidiOutCore: public MidiOutApi
-00474 {
-00475  public:
-00476   MidiOutCore( const std::string clientName );
-00477   ~MidiOutCore( void );
-00478   RtMidi::Api getCurrentApi( void ) { return RtMidi::MACOSX_CORE; };
-00479   void openPort( unsigned int portNumber, const std::string portName );
-00480   void openVirtualPort( const std::string portName );
-00481   void closePort( void );
-00482   unsigned int getPortCount( void );
-00483   std::string getPortName( unsigned int portNumber );
-00484   void sendMessage( std::vector<unsigned char> *message );
-00485 
-00486  protected:
-00487   void initialize( const std::string& clientName );
-00488 };
-00489 
-00490 #endif
-00491 
-00492 #if defined(__UNIX_JACK__)
-00493 
-00494 class MidiInJack: public MidiInApi
-00495 {
-00496  public:
-00497   MidiInJack( const std::string clientName, unsigned int queueSizeLimit );
-00498   ~MidiInJack( void );
-00499   RtMidi::Api getCurrentApi( void ) { return RtMidi::UNIX_JACK; };
-00500   void openPort( unsigned int portNumber, const std::string portName );
-00501   void openVirtualPort( const std::string portName );
-00502   void closePort( void );
-00503   unsigned int getPortCount( void );
-00504   std::string getPortName( unsigned int portNumber );
-00505 
-00506  protected:
-00507   void initialize( const std::string& clientName );
-00508 };
-00509 
-00510 class MidiOutJack: public MidiOutApi
-00511 {
-00512  public:
-00513   MidiOutJack( const std::string clientName );
-00514   ~MidiOutJack( void );
-00515   RtMidi::Api getCurrentApi( void ) { return RtMidi::UNIX_JACK; };
-00516   void openPort( unsigned int portNumber, const std::string portName );
-00517   void openVirtualPort( const std::string portName );
-00518   void closePort( void );
-00519   unsigned int getPortCount( void );
-00520   std::string getPortName( unsigned int portNumber );
-00521   void sendMessage( std::vector<unsigned char> *message );
-00522 
-00523  protected:
-00524   void initialize( const std::string& clientName );
-00525 };
-00526 
-00527 #endif
-00528 
-00529 #if defined(__LINUX_ALSA__)
-00530 
-00531 class MidiInAlsa: public MidiInApi
-00532 {
-00533  public:
-00534   MidiInAlsa( const std::string clientName, unsigned int queueSizeLimit );
-00535   ~MidiInAlsa( void );
-00536   RtMidi::Api getCurrentApi( void ) { return RtMidi::LINUX_ALSA; };
-00537   void openPort( unsigned int portNumber, const std::string portName );
-00538   void openVirtualPort( const std::string portName );
-00539   void closePort( void );
-00540   unsigned int getPortCount( void );
-00541   std::string getPortName( unsigned int portNumber );
-00542 
-00543  protected:
-00544   void initialize( const std::string& clientName );
-00545 };
-00546 
-00547 class MidiOutAlsa: public MidiOutApi
-00548 {
-00549  public:
-00550   MidiOutAlsa( const std::string clientName );
-00551   ~MidiOutAlsa( void );
-00552   RtMidi::Api getCurrentApi( void ) { return RtMidi::LINUX_ALSA; };
-00553   void openPort( unsigned int portNumber, const std::string portName );
-00554   void openVirtualPort( const std::string portName );
-00555   void closePort( void );
-00556   unsigned int getPortCount( void );
-00557   std::string getPortName( unsigned int portNumber );
-00558   void sendMessage( std::vector<unsigned char> *message );
-00559 
-00560  protected:
-00561   void initialize( const std::string& clientName );
-00562 };
-00563 
-00564 #endif
-00565 
-00566 #if defined(__WINDOWS_MM__)
-00567 
-00568 class MidiInWinMM: public MidiInApi
-00569 {
-00570  public:
-00571   MidiInWinMM( const std::string clientName, unsigned int queueSizeLimit );
-00572   ~MidiInWinMM( void );
-00573   RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_MM; };
-00574   void openPort( unsigned int portNumber, const std::string portName );
-00575   void openVirtualPort( const std::string portName );
-00576   void closePort( void );
-00577   unsigned int getPortCount( void );
-00578   std::string getPortName( unsigned int portNumber );
-00579 
-00580  protected:
-00581   void initialize( const std::string& clientName );
-00582 };
-00583 
-00584 class MidiOutWinMM: public MidiOutApi
-00585 {
-00586  public:
-00587   MidiOutWinMM( const std::string clientName );
-00588   ~MidiOutWinMM( void );
-00589   RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_MM; };
-00590   void openPort( unsigned int portNumber, const std::string portName );
-00591   void openVirtualPort( const std::string portName );
-00592   void closePort( void );
-00593   unsigned int getPortCount( void );
-00594   std::string getPortName( unsigned int portNumber );
-00595   void sendMessage( std::vector<unsigned char> *message );
-00596 
-00597  protected:
-00598   void initialize( const std::string& clientName );
-00599 };
-00600 
-00601 #endif
-00602 
-00603 #if defined(__WINDOWS_KS__)
-00604 
-00605 class MidiInWinKS: public MidiInApi
-00606 {
-00607  public:
-00608   MidiInWinKS( const std::string clientName, unsigned int queueSizeLimit );
-00609   ~MidiInWinKS( void );
-00610   RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_KS; };
-00611   void openPort( unsigned int portNumber, const std::string portName );
-00612   void openVirtualPort( const std::string portName );
-00613   void closePort( void );
-00614   unsigned int getPortCount( void );
-00615   std::string getPortName( unsigned int portNumber );
-00616 
-00617  protected:
-00618   void initialize( const std::string& clientName );
-00619 };
-00620 
-00621 class MidiOutWinKS: public MidiOutApi
-00622 {
-00623  public:
-00624   MidiOutWinKS( const std::string clientName );
-00625   ~MidiOutWinKS( void );
-00626   RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_KS; };
-00627   void openPort( unsigned int portNumber, const std::string portName );
-00628   void openVirtualPort( const std::string portName );
-00629   void closePort( void );
-00630   unsigned int getPortCount( void );
-00631   std::string getPortName( unsigned int portNumber );
-00632   void sendMessage( std::vector<unsigned char> *message );
-00633 
-00634  protected:
-00635   void initialize( const std::string& clientName );
-00636 };
-00637 
-00638 #endif
-00639 
-00640 #if defined(__RTMIDI_DUMMY__)
-00641 
-00642 class MidiInDummy: public MidiInApi
-00643 {
-00644  public:
-00645  MidiInDummy( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) { errorString_ = "MidiInDummy: This class provides no functionality."; RtMidi::error( RtError::WARNING, errorString_ ); };
-00646   RtMidi::Api getCurrentApi( void ) { return RtMidi::RTMIDI_DUMMY; };
-00647   void openPort( unsigned int portNumber, const std::string portName ) {};
-00648   void openVirtualPort( const std::string portName ) {};
-00649   void closePort( void ) {};
-00650   unsigned int getPortCount( void ) { return 0; };
-00651   std::string getPortName( unsigned int portNumber ) { return ""; };
-00652 
-00653  protected:
-00654   void initialize( const std::string& clientName ) {};
-00655 };
-00656 
-00657 class MidiOutDummy: public MidiOutApi
-00658 {
-00659  public:
-00660   MidiOutDummy( const std::string clientName ) { errorString_ = "MidiOutDummy: This class provides no functionality."; RtMidi::error( RtError::WARNING, errorString_ ); };
-00661   RtMidi::Api getCurrentApi( void ) { return RtMidi::RTMIDI_DUMMY; };
-00662   void openPort( unsigned int portNumber, const std::string portName ) {};
-00663   void openVirtualPort( const std::string portName ) {};
-00664   void closePort( void ) {};
-00665   unsigned int getPortCount( void ) { return 0; };
-00666   std::string getPortName( unsigned int portNumber ) { return ""; };
-00667   void sendMessage( std::vector<unsigned char> *message ) {};
-00668 
-00669  protected:
-00670   void initialize( const std::string& clientName ) {};
-00671 };
-00672 
-00673 #endif
-00674 
-00675 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/RtWvIn_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/RtWvIn_8h_source.html deleted file mode 100644 index 1bb33505e0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/RtWvIn_8h_source.html +++ /dev/null @@ -1,90 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

RtWvIn.h

00001 #ifndef STK_RTWVIN_H
-00002 #define STK_RTWVIN_H
-00003 
-00004 #include "WvIn.h"
-00005 #include "RtAudio.h"
-00006 #include "Mutex.h"
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00029 /***************************************************/
-00030 
-00031 class RtWvIn : public WvIn
-00032 {
-00033 public:
-00035 
-00042   RtWvIn( unsigned int nChannels = 1, StkFloat sampleRate = Stk::sampleRate(),
-00043           int device = 0, int bufferFrames = RT_BUFFER_SIZE, int nBuffers = 20 );
-00044 
-00046   ~RtWvIn();
-00047 
-00049 
-00053   void start( void );
-00054 
-00056 
-00060   void stop( void );
-00061 
-00063 
-00072   StkFloat lastOut( unsigned int channel = 0 );
-00073 
-00075 
-00084   StkFloat tick( unsigned int channel = 0 );
-00085 
-00087 
-00094   StkFrames& tick( StkFrames& frames );
-00095 
-00096   // This function is not intended for general use but must be
-00097   // public for access from the audio callback function.
-00098   void fillBuffer( void *buffer, unsigned int nFrames );
-00099 
-00100 protected:
-00101 
-00102          RtAudio adc_;
-00103   Mutex mutex_;
-00104   bool stopped_;
-00105   unsigned int readIndex_;
-00106   unsigned int writeIndex_;
-00107   unsigned int framesFilled_;
-00108 
-00109 };
-00110 
-00111 inline StkFloat RtWvIn :: lastOut( unsigned int channel )
-00112 {
-00113 #if defined(_STK_DEBUG_)
-00114   if ( channel >= data_.channels() ) {
-00115     oStream_ << "RtWvIn::lastOut(): channel argument and audio stream are incompatible!";
-00116     handleError( StkError::FUNCTION_ARGUMENT );
-00117   }
-00118 #endif
-00119 
-00120   return lastFrame_[channel];
-00121 }
-00122 
-00123 } // stk namespace
-00124 
-00125 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/RtWvOut_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/RtWvOut_8h_source.html deleted file mode 100644 index 8789483ea4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/RtWvOut_8h_source.html +++ /dev/null @@ -1,77 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

RtWvOut.h

00001 #ifndef STK_RTWVOUT_H
-00002 #define STK_RTWVOUT_H
-00003 
-00004 #include "WvOut.h"
-00005 #include "RtAudio.h"
-00006 #include "Mutex.h"
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00028 /***************************************************/
-00029 
-00030 class RtWvOut : public WvOut
-00031 {
-00032  public:
-00033 
-00035 
-00042   RtWvOut( unsigned int nChannels = 1, StkFloat sampleRate = Stk::sampleRate(),
-00043            int device = 0, int bufferFrames = RT_BUFFER_SIZE, int nBuffers = 20 );
-00044 
-00046   ~RtWvOut();
-00047 
-00049 
-00053   void start( void );
-00054 
-00056 
-00060   void stop( void );
-00061 
-00063 
-00066   void tick( const StkFloat sample );
-00067 
-00069 
-00076   void tick( const StkFrames& frames );
-00077 
-00078   // This function is not intended for general use but must be
-00079   // public for access from the audio callback function.
-00080   int readBuffer( void *buffer, unsigned int frameCount );
-00081 
-00082  protected:
-00083 
-00084   RtAudio dac_;
-00085   Mutex mutex_;
-00086   bool stopped_;
-00087   unsigned int readIndex_;
-00088   unsigned int writeIndex_;
-00089   long framesFilled_;
-00090   unsigned int status_; // running = 0, emptying buffer = 1, finished = 2
-00091 
-00092 };
-00093 
-00094 } // stk namespace
-00095 
-00096 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Sampler_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Sampler_8h_source.html deleted file mode 100644 index 3376d5ec32..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Sampler_8h_source.html +++ /dev/null @@ -1,78 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Sampler.h

00001 #ifndef STK_SAMPLER_H
-00002 #define STK_SAMPLER_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "ADSR.h"
-00006 #include "FileLoop.h"
-00007 #include "OnePole.h"
-00008 
-00009 namespace stk {
-00010 
-00011 /***************************************************/
-00020 /***************************************************/
-00021 
-00022 class Sampler : public Instrmnt
-00023 {
-00024  public:
-00026   Sampler( void );
-00027 
-00029   virtual ~Sampler( void );
-00030 
-00032   void clear( void );
-00033 
-00035   virtual void setFrequency( StkFloat frequency ) = 0;
-00036 
-00038   void keyOn( void );
-00039 
-00041   void keyOff( void );
-00042 
-00044   virtual void noteOff( StkFloat amplitude );
-00045 
-00047   virtual void controlChange( int number, StkFloat value ) = 0;
-00048 
-00050   virtual StkFloat tick( unsigned int channel = 0 ) = 0;
-00051 
-00053 
-00060   virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0;
-00061 
-00062  protected:
-00063 
-00064   ADSR adsr_;
-00065   std::vector<FileWvIn *> attacks_;
-00066   std::vector<FileLoop *> loops_;
-00067   OnePole filter_;
-00068   StkFloat baseFrequency_;
-00069   std::vector<StkFloat> attackRatios_;
-00070   std::vector<StkFloat> loopRatios_;
-00071   StkFloat attackGain_;
-00072   StkFloat loopGain_;
-00073 
-00074 };
-00075 
-00076 } // stk namespace
-00077 
-00078 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Saxofony_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Saxofony_8h_source.html deleted file mode 100644 index a640045e57..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Saxofony_8h_source.html +++ /dev/null @@ -1,136 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Saxofony.h

00001 #ifndef STK_SAXOFONY_H
-00002 #define STK_SAXOFONY_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "DelayL.h"
-00006 #include "ReedTable.h"
-00007 #include "OneZero.h"
-00008 #include "Envelope.h"
-00009 #include "Noise.h"
-00010 #include "SineWave.h"
-00011 
-00012 namespace stk {
-00013 
-00014 /***************************************************/
-00049 /***************************************************/
-00050 
-00051 class Saxofony : public Instrmnt
-00052 {
-00053  public:
-00055 
-00058   Saxofony( StkFloat lowestFrequency );
-00059 
-00061   ~Saxofony( void );
-00062 
-00064   void clear( void );
-00065 
-00067   void setFrequency( StkFloat frequency );
-00068 
-00070   void setBlowPosition( StkFloat aPosition );
-00071 
-00073   void startBlowing( StkFloat amplitude, StkFloat rate );
-00074 
-00076   void stopBlowing( StkFloat rate );
-00077 
-00079   void noteOn( StkFloat frequency, StkFloat amplitude );
-00080 
-00082   void noteOff( StkFloat amplitude );
-00083 
-00085   void controlChange( int number, StkFloat value );
-00086 
-00088   StkFloat tick( unsigned int channel = 0 );
-00089 
-00091 
-00098   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00099 
-00100  protected:
-00101 
-00102   DelayL    delays_[2];
-00103   ReedTable reedTable_;
-00104   OneZero   filter_;
-00105   Envelope  envelope_;
-00106   Noise     noise_;
-00107   SineWave vibrato_;
-00108 
-00109   StkFloat outputGain_;
-00110   StkFloat noiseGain_;
-00111   StkFloat vibratoGain_;
-00112   StkFloat position_;
-00113 
-00114 };
-00115 
-00116 inline StkFloat Saxofony :: tick( unsigned int )
-00117 {
-00118   StkFloat pressureDiff;
-00119   StkFloat breathPressure;
-00120   StkFloat temp;
-00121 
-00122   // Calculate the breath pressure (envelope + noise + vibrato)
-00123   breathPressure = envelope_.tick(); 
-00124   breathPressure += breathPressure * noiseGain_ * noise_.tick();
-00125   breathPressure += breathPressure * vibratoGain_ * vibrato_.tick();
-00126 
-00127   temp = -0.95 * filter_.tick( delays_[0].lastOut() );
-00128   lastFrame_[0] = temp - delays_[1].lastOut();
-00129   pressureDiff = breathPressure - lastFrame_[0];
-00130   delays_[1].tick( temp );
-00131   delays_[0].tick( breathPressure - (pressureDiff * reedTable_.tick(pressureDiff)) - temp );
-00132 
-00133   lastFrame_[0] *= outputGain_;
-00134   return lastFrame_[0];
-00135 }
-00136 
-00137 inline StkFrames& Saxofony :: tick( StkFrames& frames, unsigned int channel )
-00138 {
-00139   unsigned int nChannels = lastFrame_.channels();
-00140 #if defined(_STK_DEBUG_)
-00141   if ( channel > frames.channels() - nChannels ) {
-00142     oStream_ << "Saxofony::tick(): channel and StkFrames arguments are incompatible!";
-00143     handleError( StkError::FUNCTION_ARGUMENT );
-00144   }
-00145 #endif
-00146 
-00147   StkFloat *samples = &frames[channel];
-00148   unsigned int j, hop = frames.channels() - nChannels;
-00149   if ( nChannels == 1 ) {
-00150     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00151       *samples++ = tick();
-00152   }
-00153   else {
-00154     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00155       *samples++ = tick();
-00156       for ( j=1; j<nChannels; j++ )
-00157         *samples++ = lastFrame_[j];
-00158     }
-00159   }
-00160 
-00161   return frames;
-00162 }
-00163 
-00164 } // stk namespace
-00165 
-00166 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Shakers_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Shakers_8h_source.html deleted file mode 100644 index bf1e5ed713..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Shakers_8h_source.html +++ /dev/null @@ -1,294 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Shakers.h

00001 #ifndef STK_SHAKERS_H
-00002 #define STK_SHAKERS_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include <cmath>
-00006 #include <stdlib.h>
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00058 /***************************************************/
-00059 
-00060 class Shakers : public Instrmnt
-00061 {
-00062  public:
-00064   Shakers( int type = 0 );
-00065 
-00067 
-00071   void noteOn( StkFloat instrument, StkFloat amplitude );
-00072 
-00074   void noteOff( StkFloat amplitude );
-00075 
-00077   void controlChange( int number, StkFloat value );
-00078 
-00080   StkFloat tick( unsigned int channel = 0 );
-00081 
-00083 
-00090   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00091 
-00092   struct BiQuad {
-00093     StkFloat gain;
-00094     StkFloat b[3];
-00095     StkFloat a[3]; // a0 term assumed equal to 1.0
-00096     StkFloat inputs[3];
-00097     StkFloat outputs[3];
-00098 
-00099     // Default constructor.
-00100     BiQuad()
-00101     {
-00102       gain = 0.0;
-00103       for ( int i=0; i<3; i++ ) {
-00104         b[i] = 0.0;
-00105         a[i] = 0.0;
-00106         inputs[i] = 0.0;
-00107         outputs[i] = 0.0;
-00108       }
-00109     }
-00110   };
-00111 
-00112  protected:
-00113 
-00114   void setType( int type );
-00115   void setResonance( BiQuad &filter, StkFloat frequency, StkFloat radius );
-00116   StkFloat tickResonance( BiQuad &filter, StkFloat input );
-00117   void setEqualization( StkFloat b0, StkFloat b1, StkFloat b2 );
-00118   StkFloat tickEqualize( StkFloat input );
-00119   int randomInt( int max );
-00120   StkFloat randomFloat( StkFloat max = 1.0 );
-00121   StkFloat noise( void );
-00122   void waterDrop( void );
-00123 
-00124   int shakerType_;
-00125   unsigned int nResonances_;
-00126   StkFloat shakeEnergy_;
-00127   StkFloat soundDecay_;
-00128   StkFloat systemDecay_;
-00129   StkFloat nObjects_;
-00130   StkFloat sndLevel_;
-00131   StkFloat baseGain_;
-00132   StkFloat currentGain_;
-00133   StkFloat baseDecay_;
-00134   StkFloat baseObjects_;
-00135   StkFloat decayScale_;
-00136   BiQuad equalizer_;
-00137   StkFloat ratchetCount_;
-00138   StkFloat ratchetDelta_;
-00139   StkFloat baseRatchetDelta_;
-00140   int lastRatchetValue_;
-00141 
-00142   std::vector< BiQuad > filters_;
-00143   std::vector< StkFloat > baseFrequencies_;
-00144   std::vector< StkFloat > baseRadii_;
-00145   std::vector< bool > doVaryFrequency_;
-00146   std::vector< StkFloat > tempFrequencies_;
-00147   StkFloat varyFactor_;
-00148 };
-00149 
-00150 inline void Shakers :: setResonance( BiQuad &filter, StkFloat frequency, StkFloat radius )
-00151 {
-00152   filter.a[1] = -2.0 * radius * cos( TWO_PI * frequency / Stk::sampleRate());
-00153   filter.a[2] = radius * radius;
-00154 }
-00155 
-00156 inline StkFloat Shakers :: tickResonance( BiQuad &filter, StkFloat input )
-00157 {
-00158   filter.outputs[0] = input * filter.gain * currentGain_;
-00159   filter.outputs[0] -= filter.a[1] * filter.outputs[1] + filter.a[2] * filter.outputs[2];
-00160   filter.outputs[2] = filter.outputs[1];
-00161   filter.outputs[1] = filter.outputs[0];
-00162   return filter.outputs[0];
-00163 }
-00164 
-00165 inline void Shakers :: setEqualization( StkFloat b0, StkFloat b1, StkFloat b2 )
-00166 {
-00167   equalizer_.b[0] = b0;
-00168   equalizer_.b[1] = b1;
-00169   equalizer_.b[2] = b2;
-00170 }
-00171 
-00172 inline StkFloat Shakers :: tickEqualize( StkFloat input )
-00173 {
-00174   equalizer_.inputs[0] = input;
-00175   equalizer_.outputs[0] = equalizer_.b[0] * equalizer_.inputs[0] + equalizer_.b[1] * equalizer_.inputs[1] + equalizer_.b[2] * equalizer_.inputs[2];
-00176   equalizer_.inputs[2] = equalizer_.inputs[1];
-00177   equalizer_.inputs[1] = equalizer_.inputs[0];
-00178   return equalizer_.outputs[0];
-00179 }
-00180 
-00181 inline int Shakers :: randomInt( int max ) //  Return random integer between 0 and max-1
-00182 {
-00183   return (int) ((float)max * rand() / (RAND_MAX + 1.0) );
-00184 }
-00185 
-00186 inline StkFloat Shakers :: randomFloat( StkFloat max ) // Return random float between 0.0 and max
-00187 {        
-00188   return (StkFloat) (max * rand() / (RAND_MAX + 1.0) );
-00189 }
-00190 
-00191 inline StkFloat Shakers :: noise( void ) //  Return random StkFloat float between -1.0 and 1.0
-00192 {
-00193   return ( (StkFloat) ( 2.0 * rand() / (RAND_MAX + 1.0) ) - 1.0 );
-00194 }
-00195 
-00196 const StkFloat MIN_ENERGY = 0.001;
-00197 const StkFloat WATER_FREQ_SWEEP = 1.0001;
-00198 
-00199 inline void Shakers :: waterDrop( void )
-00200 {
-00201   if ( randomInt( 32767 ) < nObjects_) {
-00202     sndLevel_ = shakeEnergy_;   
-00203     unsigned int j = randomInt( 3 );
-00204     if ( j == 0 && filters_[0].gain == 0.0 ) { // don't change unless fully decayed
-00205       tempFrequencies_[0] = baseFrequencies_[1] * (0.75 + (0.25 * noise()));
-00206       filters_[0].gain = fabs( noise() );
-00207     }
-00208     else if (j == 1 && filters_[1].gain == 0.0) {
-00209       tempFrequencies_[1] = baseFrequencies_[1] * (1.0 + (0.25 * noise()));
-00210       filters_[1].gain = fabs( noise() );
-00211     }
-00212     else if ( filters_[2].gain == 0.0 ) {
-00213       tempFrequencies_[2] = baseFrequencies_[1] * (1.25 + (0.25 * noise()));
-00214       filters_[2].gain = fabs( noise() );
-00215     }
-00216   }
-00217 
-00218   // Sweep center frequencies.
-00219   for ( unsigned int i=0; i<3; i++ ) { // WATER_RESONANCES = 3
-00220     filters_[i].gain *= baseRadii_[i];
-00221     if ( filters_[i].gain > 0.001 ) {
-00222       tempFrequencies_[i] *= WATER_FREQ_SWEEP;
-00223       filters_[i].a[1] = -2.0 * baseRadii_[i] * cos( TWO_PI * tempFrequencies_[i] / Stk::sampleRate() );
-00224     }
-00225     else
-00226       filters_[i].gain = 0.0;
-00227   }
-00228 }
-00229 
-00230 inline StkFloat Shakers :: tick( unsigned int )
-00231 {
-00232   unsigned int iTube = 0;
-00233   StkFloat input = 0.0;
-00234   if ( shakerType_ == 19 || shakerType_ == 20 ) {
-00235     if ( ratchetCount_ <= 0 ) return lastFrame_[0] = 0.0;
-00236 
-00237     shakeEnergy_ -= ( ratchetDelta_ + ( 0.002 * shakeEnergy_ ) );
-00238     if ( shakeEnergy_ < 0.0 ) {
-00239       shakeEnergy_ = 1.0;
-00240       ratchetCount_--;
-00241     }
-00242 
-00243     if ( randomFloat( 1024 ) < nObjects_ )
-00244       sndLevel_ += shakeEnergy_ * shakeEnergy_;
-00245 
-00246     // Sound is enveloped noise
-00247     input = sndLevel_ * noise() * shakeEnergy_;
-00248   }
-00249   else { 
-00250     if ( shakeEnergy_ < MIN_ENERGY ) return lastFrame_[0] = 0.0;
-00251 
-00252     // Exponential system decay
-00253     shakeEnergy_ *= systemDecay_;
-00254 
-00255     // Random events
-00256     if ( shakerType_ == 21 ) {
-00257       waterDrop();
-00258       input = sndLevel_;
-00259     }
-00260     else {
-00261       if ( randomFloat( 1024.0 ) < nObjects_ ) {
-00262         sndLevel_ += shakeEnergy_;
-00263         input = sndLevel_;
-00264         // Vary resonance frequencies if specified.
-00265         for ( unsigned int i=0; i<nResonances_; i++ ) {
-00266           if ( doVaryFrequency_[i] ) {
-00267             StkFloat tempRand = baseFrequencies_[i] * ( 1.0 + ( varyFactor_ * noise() ) );
-00268             filters_[i].a[1] = -2.0 * baseRadii_[i] * cos( TWO_PI * tempRand / Stk::sampleRate() );
-00269           }
-00270         }
-00271         if ( shakerType_ == 22 ) iTube = randomInt( 7 ); // ANGKLUNG_RESONANCES
-00272       }
-00273     }
-00274   }
-00275 
-00276   // Exponential sound decay
-00277   sndLevel_ *= soundDecay_;
-00278 
-00279   // Do resonance filtering
-00280   lastFrame_[0] = 0.0;
-00281   if ( shakerType_ == 22 ) {
-00282     for ( unsigned int i=0; i<nResonances_; i++ ) {
-00283       if ( i == iTube )
-00284         lastFrame_[0] += tickResonance( filters_[i], input );
-00285       else
-00286         lastFrame_[0] += tickResonance( filters_[i], 0.0 );
-00287     }
-00288   }
-00289   else {
-00290     for ( unsigned int i=0; i<nResonances_; i++ )
-00291       lastFrame_[0] += tickResonance( filters_[i], input );
-00292   }
-00293 
-00294   // Do final FIR filtering (lowpass or highpass)
-00295   lastFrame_[0] = tickEqualize( lastFrame_[0] );
-00296 
-00297   //if ( std::abs(lastFrame_[0]) > 1.0 )
-00298   //  std::cout << "lastOutput = " << lastFrame_[0] << std::endl;
-00299 
-00300   return lastFrame_[0];
-00301 }
-00302 
-00303 inline StkFrames& Shakers :: tick( StkFrames& frames, unsigned int channel )
-00304 {
-00305   unsigned int nChannels = lastFrame_.channels();
-00306 #if defined(_STK_DEBUG_)
-00307   if ( channel > frames.channels() - nChannels ) {
-00308     oStream_ << "Shakers::tick(): channel and StkFrames arguments are incompatible!";
-00309     handleError( StkError::FUNCTION_ARGUMENT );
-00310   }
-00311 #endif
-00312 
-00313   StkFloat *samples = &frames[channel];
-00314   unsigned int j, hop = frames.channels() - nChannels;
-00315   if ( nChannels == 1 ) {
-00316     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00317       *samples++ = tick();
-00318   }
-00319   else {
-00320     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00321       *samples++ = tick();
-00322       for ( j=1; j<nChannels; j++ )
-00323         *samples++ = lastFrame_[j];
-00324     }
-00325   }
-00326 
-00327   return frames;
-00328 }
-00329 
-00330 } // stk namespace
-00331 
-00332 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Simple_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Simple_8h_source.html deleted file mode 100644 index 7ce6179f97..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Simple_8h_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Simple.h

00001 #ifndef STK_SIMPLE_H
-00002 #define STK_SIMPLE_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "ADSR.h"
-00006 #include "FileLoop.h"
-00007 #include "OnePole.h"
-00008 #include "BiQuad.h"
-00009 #include "Noise.h"
-00010 
-00011 namespace stk {
-00012 
-00013 /***************************************************/
-00030 /***************************************************/
-00031 
-00032 class Simple : public Instrmnt
-00033 {
-00034  public:
-00036 
-00039   Simple( void );
-00040 
-00042   ~Simple( void );
-00043 
-00045   void clear( void );
-00046 
-00048   void setFrequency( StkFloat frequency );
-00049 
-00051   void keyOn( void );
-00052 
-00054   void keyOff( void );
-00055 
-00057   void noteOn( StkFloat frequency, StkFloat amplitude );
-00058 
-00060   void noteOff( StkFloat amplitude );
-00061 
-00063   void controlChange( int number, StkFloat value );
-00064 
-00066   StkFloat tick( unsigned int channel = 0 );
-00067 
-00069 
-00076   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00077 
-00078  protected:
-00079 
-00080   ADSR      adsr_; 
-00081   FileLoop *loop_;
-00082   OnePole   filter_;
-00083   BiQuad    biquad_;
-00084   Noise     noise_;
-00085   StkFloat  baseFrequency_;
-00086   StkFloat  loopGain_;
-00087 
-00088 };
-00089 
-00090 inline StkFloat Simple :: tick( unsigned int )
-00091 {
-00092   lastFrame_[0] = loopGain_ * loop_->tick();
-00093   biquad_.tick( noise_.tick() );
-00094   lastFrame_[0] += (1.0 - loopGain_) * biquad_.lastOut();
-00095   lastFrame_[0] = filter_.tick( lastFrame_[0] );
-00096   lastFrame_[0] *= adsr_.tick();
-00097   return lastFrame_[0];
-00098 }
-00099 
-00100 inline StkFrames& Simple :: tick( StkFrames& frames, unsigned int channel )
-00101 {
-00102   unsigned int nChannels = lastFrame_.channels();
-00103 #if defined(_STK_DEBUG_)
-00104   if ( channel > frames.channels() - nChannels ) {
-00105     oStream_ << "Simple::tick(): channel and StkFrames arguments are incompatible!";
-00106     handleError( StkError::FUNCTION_ARGUMENT );
-00107   }
-00108 #endif
-00109 
-00110   StkFloat *samples = &frames[channel];
-00111   unsigned int j, hop = frames.channels() - nChannels;
-00112   if ( nChannels == 1 ) {
-00113     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00114       *samples++ = tick();
-00115   }
-00116   else {
-00117     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00118       *samples++ = tick();
-00119       for ( j=1; j<nChannels; j++ )
-00120         *samples++ = lastFrame_[j];
-00121     }
-00122   }
-00123 
-00124   return frames;
-00125 }
-00126 
-00127 } // stk namespace
-00128 
-00129 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/SineWave_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/SineWave_8h_source.html deleted file mode 100644 index 3529d3f256..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/SineWave_8h_source.html +++ /dev/null @@ -1,140 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

SineWave.h

00001 #ifndef STK_SINEWAVE_H
-00002 #define STK_SINEWAVE_H
-00003 
-00004 const unsigned long TABLE_SIZE = 2048;
-00005 
-00006 #include "Generator.h"
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00023 /***************************************************/
-00024 
-00025 class SineWave : public Generator
-00026 {
-00027 public:
-00029   SineWave( void );
-00030 
-00032   ~SineWave( void );
-00033 
-00035   void reset( void );
-00036 
-00038 
-00041   void setRate( StkFloat rate ) { rate_ = rate; };
-00042 
-00044 
-00050   void setFrequency( StkFloat frequency );
-00051 
-00053   void addTime( StkFloat time );
-00054 
-00056 
-00061   void addPhase( StkFloat phase );
-00062 
-00064 
-00068   void addPhaseOffset( StkFloat phaseOffset );
-00069 
-00071   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00072 
-00074   StkFloat tick( void );
-00075 
-00077 
-00084   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00085 
-00086 protected:
-00087 
-00088   void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00089 
-00090   static StkFrames table_;
-00091   StkFloat time_;
-00092   StkFloat rate_;
-00093   StkFloat phaseOffset_;
-00094   unsigned int iIndex_;
-00095   StkFloat alpha_;
-00096 
-00097 };
-00098 
-00099 inline StkFloat SineWave :: tick( void )
-00100 {
-00101   // Check limits of time address ... if necessary, recalculate modulo
-00102   // TABLE_SIZE.
-00103   while ( time_ < 0.0 )
-00104     time_ += TABLE_SIZE;
-00105   while ( time_ >= TABLE_SIZE )
-00106     time_ -= TABLE_SIZE;
-00107 
-00108   iIndex_ = (unsigned int) time_;
-00109   alpha_ = time_ - iIndex_;
-00110   StkFloat tmp = table_[ iIndex_ ];
-00111   tmp += ( alpha_ * ( table_[ iIndex_ + 1 ] - tmp ) );
-00112 
-00113   // Increment time, which can be negative.
-00114   time_ += rate_;
-00115 
-00116   lastFrame_[0] = tmp;
-00117   return lastFrame_[0];
-00118 }
-00119 
-00120 inline StkFrames& SineWave :: tick( StkFrames& frames, unsigned int channel )
-00121 {
-00122 #if defined(_STK_DEBUG_)
-00123   if ( channel >= frames.channels() ) {
-00124     oStream_ << "SineWave::tick(): channel and StkFrames arguments are incompatible!";
-00125     handleError( StkError::FUNCTION_ARGUMENT );
-00126   }
-00127 #endif
-00128 
-00129   StkFloat *samples = &frames[channel];
-00130   StkFloat tmp = 0.0;
-00131 
-00132   unsigned int hop = frames.channels();
-00133   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00134 
-00135     // Check limits of time address ... if necessary, recalculate modulo
-00136     // TABLE_SIZE.
-00137     while ( time_ < 0.0 )
-00138       time_ += TABLE_SIZE;
-00139     while ( time_ >= TABLE_SIZE )
-00140       time_ -= TABLE_SIZE;
-00141 
-00142     iIndex_ = (unsigned int) time_;
-00143     alpha_ = time_ - iIndex_;
-00144     tmp = table_[ iIndex_ ];
-00145     tmp += ( alpha_ * ( table_[ iIndex_ + 1 ] - tmp ) );
-00146     *samples = tmp;
-00147 
-00148     // Increment time, which can be negative.
-00149     time_ += rate_;
-00150   }
-00151 
-00152   lastFrame_[0] = tmp;
-00153   return frames;
-00154 }
-00155 
-00156 } // stk namespace
-00157 
-00158 #endif
-00159 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/SingWave_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/SingWave_8h_source.html deleted file mode 100644 index 00346de546..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/SingWave_8h_source.html +++ /dev/null @@ -1,119 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

SingWave.h

00001 #ifndef STK_SINGWAVE_H
-00002 #define STK_SINGWAVE_H
-00003 
-00004 #include "FileLoop.h"
-00005 #include "Modulate.h"
-00006 #include "Envelope.h"
-00007 
-00008 namespace stk {
-00009 
-00010 /***************************************************/
-00023 /***************************************************/
-00024 
-00025 class SingWave : public Generator
-00026 {
-00027  public:
-00029 
-00036   SingWave( std::string fileName, bool raw = false );
-00037 
-00039   ~SingWave( void );
-00040 
-00042   void reset( void ) { wave_.reset(); lastFrame_[0] = 0.0; };
-00043 
-00045   void normalize( void ) { wave_.normalize(); };
-00046 
-00048   void normalize( StkFloat peak ) { wave_.normalize( peak ); };
-00049 
-00051   void setFrequency( StkFloat frequency );
-00052 
-00054   void setVibratoRate( StkFloat rate ) { modulator_.setVibratoRate( rate ); };
-00055 
-00057   void setVibratoGain( StkFloat gain ) { modulator_.setVibratoGain( gain ); };
-00058 
-00060   void setRandomGain( StkFloat gain ) { modulator_.setRandomGain( gain ); };
-00061 
-00063   void setSweepRate( StkFloat rate ) { sweepRate_ = rate; };
-00064 
-00066   void setGainRate( StkFloat rate ) { envelope_.setRate( rate ); };
-00067 
-00069   void setGainTarget( StkFloat target ) { envelope_.setTarget( target ); };
-00070 
-00072   void noteOn( void ) { envelope_.keyOn(); };
-00073 
-00075   void noteOff( void ) { envelope_.keyOff(); };
-00076 
-00078   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00079 
-00081   StkFloat tick( void );
-00082 
-00084 
-00091   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00092 
-00093  protected:
-00094 
-00095   FileLoop wave_;
-00096   Modulate modulator_;
-00097   Envelope envelope_;
-00098   Envelope pitchEnvelope_;
-00099   StkFloat rate_;
-00100   StkFloat sweepRate_;
-00101 
-00102 };
-00103 
-00104 inline StkFloat SingWave :: tick( void )
-00105 {
-00106   // Set the wave rate.
-00107   StkFloat newRate = pitchEnvelope_.tick();
-00108   newRate += newRate * modulator_.tick();
-00109   wave_.setRate( newRate );
-00110 
-00111   lastFrame_[0] = wave_.tick();
-00112   lastFrame_[0] *= envelope_.tick();
-00113 
-00114   return lastFrame_[0];
-00115 }
-00116 
-00117 inline StkFrames& SingWave :: tick( StkFrames& frames, unsigned int channel )
-00118 {
-00119 #if defined(_STK_DEBUG_)
-00120   if ( channel >= frames.channels() ) {
-00121     oStream_ << "SingWave::tick(): channel and StkFrames arguments are incompatible!";
-00122     handleError( StkError::FUNCTION_ARGUMENT );
-00123   }
-00124 #endif
-00125 
-00126   StkFloat *samples = &frames[channel];
-00127   unsigned int hop = frames.channels();
-00128   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00129     *samples = SingWave::tick();
-00130 
-00131   return frames;
-00132 }
-00133 
-00134 } // stk namespace
-00135 
-00136 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Sitar_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Sitar_8h_source.html deleted file mode 100644 index 342b1b11f9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Sitar_8h_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Sitar.h

00001 #ifndef STK_SITAR_H
-00002 #define STK_SITAR_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "DelayA.h"
-00006 #include "OneZero.h"
-00007 #include "Noise.h"
-00008 #include "ADSR.h"
-00009 #include <cmath>
-00010 
-00011 namespace stk {
-00012 
-00013 /***************************************************/
-00030 /***************************************************/
-00031 
-00032 class Sitar : public Instrmnt
-00033 {
-00034  public:
-00036   Sitar( StkFloat lowestFrequency = 8.0 );
-00037 
-00039   ~Sitar( void );
-00040 
-00042   void clear( void );
-00043 
-00045   void setFrequency( StkFloat frequency );
-00046 
-00048   void pluck( StkFloat amplitude );
-00049 
-00051   void noteOn( StkFloat frequency, StkFloat amplitude );
-00052 
-00054   void noteOff( StkFloat amplitude );
-00055 
-00057   StkFloat tick( unsigned int channel = 0 );
-00058 
-00060 
-00067   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00068 
-00069  protected:
-00070 
-00071   DelayA  delayLine_;
-00072   OneZero loopFilter_;
-00073   Noise   noise_;
-00074   ADSR    envelope_;
-00075 
-00076   StkFloat loopGain_;
-00077   StkFloat amGain_;
-00078   StkFloat delay_;
-00079   StkFloat targetDelay_;
-00080 
-00081 };
-00082 
-00083 inline StkFloat Sitar :: tick( unsigned int )
-00084 {
-00085   if ( fabs(targetDelay_ - delay_) > 0.001 ) {
-00086     if ( targetDelay_ < delay_ )
-00087       delay_ *= 0.99999;
-00088     else
-00089       delay_ *= 1.00001;
-00090     delayLine_.setDelay( delay_ );
-00091   }
-00092 
-00093   lastFrame_[0] = delayLine_.tick( loopFilter_.tick( delayLine_.lastOut() * loopGain_ ) + 
-00094                                 (amGain_ * envelope_.tick() * noise_.tick()));
-00095   
-00096   return lastFrame_[0];
-00097 }
-00098 
-00099 inline StkFrames& Sitar :: tick( StkFrames& frames, unsigned int channel )
-00100 {
-00101   unsigned int nChannels = lastFrame_.channels();
-00102 #if defined(_STK_DEBUG_)
-00103   if ( channel > frames.channels() - nChannels ) {
-00104     oStream_ << "Sitar::tick(): channel and StkFrames arguments are incompatible!";
-00105     handleError( StkError::FUNCTION_ARGUMENT );
-00106   }
-00107 #endif
-00108 
-00109   StkFloat *samples = &frames[channel];
-00110   unsigned int j, hop = frames.channels() - nChannels;
-00111   if ( nChannels == 1 ) {
-00112     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00113       *samples++ = tick();
-00114   }
-00115   else {
-00116     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00117       *samples++ = tick();
-00118       for ( j=1; j<nChannels; j++ )
-00119         *samples++ = lastFrame_[j];
-00120     }
-00121   }
-00122 
-00123   return frames;
-00124 }
-00125 
-00126 } // stk namespace
-00127 
-00128 #endif
-00129 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Skini_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Skini_8h_source.html deleted file mode 100644 index 97a44a4437..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Skini_8h_source.html +++ /dev/null @@ -1,101 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Skini.h

00001 #ifndef STK_SKINI_H
-00002 #define STK_SKINI_H
-00003 
-00004 #include "Stk.h"
-00005 #include <vector>
-00006 #include <string>
-00007 #include <fstream>
-00008 
-00009 namespace stk {
-00010 
-00011 /***************************************************/
-00036 /***************************************************/
-00037 
-00038 class Skini : public Stk
-00039 {
-00040  public:
-00041 
-00043   struct Message { 
-00044     long type;                         
-00045     long channel;                      
-00046     StkFloat time;                     
-00047     std::vector<StkFloat> floatValues; 
-00048     std::vector<long> intValues;       
-00049     std::string remainder;             
-00051     // Default constructor.
-00052     Message()
-00053       :type(0), channel(0), time(0.0), floatValues(2), intValues(2) {}
-00054   };
-00055 
-00057   Skini();
-00058 
-00060   ~Skini();
-00061 
-00063 
-00067   bool setFile( std::string fileName );
-00068 
-00070 
-00076   long nextMessage( Skini::Message& message );
-00077 
-00079 
-00083   long parseString( std::string& line, Skini::Message& message );
-00084 
-00086   static std::string whatsThisType(long type);
-00087 
-00089   static std::string whatsThisController(long number);
-00090 
-00091  protected:
-00092 
-00093   void tokenize( const std::string& str, std::vector<std::string>& tokens, const std::string& delimiters );
-00094 
-00095   std::ifstream file_;
-00096 };
-00097 
-00099 static const double Midi2Pitch[129] = {
-00100   8.176, 8.662, 9.177, 9.723, 10.301, 10.913, 11.562, 12.25,
-00101   12.978, 13.75, 14.568, 15.434, 16.352, 17.324, 18.354, 19.445,
-00102   20.602, 21.827, 23.125, 24.50, 25.957, 27.50, 29.135, 30.868,
-00103   32.703, 34.648, 36.708, 38.891, 41.203, 43.654, 46.249, 49.0,
-00104   51.913, 55.0, 58.271, 61.735, 65.406, 69.296, 73.416, 77.782,
-00105   82.407, 87.307, 92.499, 97.999, 103.826, 110.0, 116.541, 123.471,
-00106   130.813, 138.591, 146.832, 155.563, 164.814, 174.614, 184.997, 195.998,
-00107   207.652, 220.0, 233.082, 246.942, 261.626, 277.183, 293.665, 311.127,
-00108   329.628, 349.228, 369.994, 391.995, 415.305, 440.0, 466.164, 493.883,
-00109   523.251, 554.365, 587.33, 622.254, 659.255, 698.456, 739.989, 783.991,
-00110   830.609, 880.0, 932.328, 987.767, 1046.502, 1108.731, 1174.659, 1244.508,
-00111   1318.51, 1396.913, 1479.978, 1567.982, 1661.219, 1760.0, 1864.655, 1975.533,
-00112   2093.005, 2217.461, 2349.318, 2489.016, 2637.02, 2793.826, 2959.955, 3135.963,
-00113   3322.438, 3520.0, 3729.31, 3951.066, 4186.009, 4434.922, 4698.636, 4978.032,
-00114   5274.041, 5587.652, 5919.911, 6271.927, 6644.875, 7040.0, 7458.62, 7902.133,
-00115   8372.018, 8869.844, 9397.273, 9956.063, 10548.082, 11175.303, 11839.822, 12543.854,
-00116   13289.75};
-00117 
-00118 } // stk namespace
-00119 
-00120 #endif
-00121 
-00122 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Socket_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Socket_8h_source.html deleted file mode 100644 index 4b57b3a363..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Socket_8h_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Socket.h

00001 #ifndef STK_SOCKET_H
-00002 #define STK_SOCKET_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 #if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
-00007 
-00008   #include <sys/socket.h>
-00009   #include <sys/types.h>
-00010   #include <arpa/inet.h>
-00011   #include <netdb.h>
-00012   #include <unistd.h>
-00013   #include <fcntl.h>
-00014   #include <netinet/in.h>
-00015   #include <netinet/tcp.h>
-00016 
-00017 #elif defined(__OS_WINDOWS__)
-00018 
-00019   #include <winsock.h>
-00020 
-00021 #endif
-00022 
-00023 namespace stk {
-00024 
-00025 /***************************************************/
-00036 /***************************************************/
-00037 
-00038 class Socket : public Stk
-00039 {
-00040  public:
-00041 
-00042   enum ProtocolType {
-00043     PROTO_TCP,
-00044     PROTO_UDP
-00045   };
-00046 
-00048   Socket();
-00049 
-00051   virtual ~Socket();
-00052 
-00054   static void close( int socket );
-00055 
-00057   int id( void ) const { return soket_; };
-00058 
-00060   int port( void ) const { return port_; };
-00061 
-00063   static bool isValid( int socket ) { return socket != -1; };
-00064 
-00066   static void setBlocking( int socket, bool enable );
-00067 
-00069   virtual int writeBuffer(const void *buffer, long bufferSize, int flags = 0) = 0;
-00070 
-00072   virtual int readBuffer(void *buffer, long bufferSize, int flags = 0) = 0;
-00073 
-00075   static int writeBuffer(int socket, const void *buffer, long bufferSize, int flags );
-00076 
-00078   static int readBuffer(int socket, void *buffer, long bufferSize, int flags );
-00079 
-00080  protected:
-00081 
-00082   int soket_;
-00083   int port_;
-00084 
-00085 };
-00086 
-00087 } // stk namespace
-00088 
-00089 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Sphere_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Sphere_8h_source.html deleted file mode 100644 index b5d7407376..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Sphere_8h_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Sphere.h

00001 #ifndef STK_SPHERE_H
-00002 #define STK_SPHERE_H
-00003 
-00004 #include "Stk.h"
-00005 #include "Vector3D.h"
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class Sphere : public Stk
-00021 {
-00022 public:
-00024   Sphere( StkFloat radius = 1.0 ) { radius_ = radius; mass_ = 1.0; };
-00025 
-00027   void setPosition( StkFloat x, StkFloat y, StkFloat z ) { position_.setXYZ(x, y, z); };
-00028 
-00030   void setVelocity( StkFloat x, StkFloat y, StkFloat z ) { velocity_.setXYZ(x, y, z); };
-00031 
-00033   void setRadius( StkFloat radius ) { radius_ = radius; };
-00034 
-00036   void setMass( StkFloat mass ) { mass_ = mass; };
-00037 
-00039   Vector3D* getPosition( void ) { return &position_; };
-00040 
-00042   Vector3D* getRelativePosition( Vector3D *position );
-00043 
-00045   StkFloat getVelocity( Vector3D* velocity );
-00046 
-00048   StkFloat isInside( Vector3D *position );
-00049 
-00051   StkFloat getRadius( void ) { return radius_; };
-00052 
-00054   StkFloat getMass( void ) { return mass_; };
-00055 
-00057   void addVelocity( StkFloat x, StkFloat y, StkFloat z );
-00058 
-00060   void tick( StkFloat timeIncrement );
-00061    
-00062 private:
-00063   Vector3D position_;
-00064   Vector3D velocity_;
-00065   Vector3D workingVector_;
-00066   StkFloat radius_;
-00067   StkFloat mass_;
-00068 };
-00069 
-00070 inline void Sphere::tick( StkFloat timeIncrement )
-00071 {
-00072   position_.setX(position_.getX() + (timeIncrement * velocity_.getX()));
-00073   position_.setY(position_.getY() + (timeIncrement * velocity_.getY()));
-00074   position_.setZ(position_.getZ() + (timeIncrement * velocity_.getZ()));
-00075 };
-00076 
-00077 } // stk namespace
-00078 
-00079 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/StifKarp_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/StifKarp_8h_source.html deleted file mode 100644 index 394fc68b24..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/StifKarp_8h_source.html +++ /dev/null @@ -1,135 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

StifKarp.h

00001 #ifndef STK_STIFKARP_H
-00002 #define STK_STIFKARP_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "DelayL.h"
-00006 #include "DelayA.h"
-00007 #include "OneZero.h"
-00008 #include "Noise.h"
-00009 #include "BiQuad.h"
-00010 
-00011 namespace stk {
-00012 
-00013 /***************************************************/
-00034 /***************************************************/
-00035 
-00036 class StifKarp : public Instrmnt
-00037 {
-00038  public:
-00040   StifKarp( StkFloat lowestFrequency = 8.0 );
-00041 
-00043   ~StifKarp( void );
-00044 
-00046   void clear( void );
-00047 
-00049   void setFrequency( StkFloat frequency );
-00050 
-00052   void setStretch( StkFloat stretch );
-00053 
-00055   void setPickupPosition( StkFloat position );
-00056 
-00058 
-00063   void setBaseLoopGain( StkFloat aGain );
-00064 
-00066   void pluck( StkFloat amplitude );
-00067 
-00069   void noteOn( StkFloat frequency, StkFloat amplitude );
-00070 
-00072   void noteOff( StkFloat amplitude );
-00073 
-00075   void controlChange( int number, StkFloat value );
-00076 
-00078   StkFloat tick( unsigned int channel = 0 );
-00079 
-00081 
-00088   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00089 
-00090  protected:
-00091 
-00092   DelayA  delayLine_;
-00093   DelayL  combDelay_;
-00094   OneZero filter_;
-00095   Noise   noise_;
-00096   BiQuad  biquad_[4];
-00097 
-00098   unsigned long length_;
-00099   StkFloat loopGain_;
-00100   StkFloat baseLoopGain_;
-00101   StkFloat lastFrequency_;
-00102   StkFloat lastLength_;
-00103   StkFloat stretching_;
-00104   StkFloat pluckAmplitude_;
-00105   StkFloat pickupPosition_;
-00106 
-00107 };
-00108 
-00109 inline StkFloat StifKarp :: tick( unsigned int )
-00110 {
-00111   StkFloat temp = delayLine_.lastOut() * loopGain_;
-00112 
-00113   // Calculate allpass stretching.
-00114   for (int i=0; i<4; i++)
-00115     temp = biquad_[i].tick(temp);
-00116 
-00117   // Moving average filter.
-00118   temp = filter_.tick(temp);
-00119 
-00120   lastFrame_[0] = delayLine_.tick(temp);
-00121   lastFrame_[0] = lastFrame_[0] - combDelay_.tick( lastFrame_[0] );
-00122   return lastFrame_[0];
-00123 }
-00124 
-00125 inline StkFrames& StifKarp :: tick( StkFrames& frames, unsigned int channel )
-00126 {
-00127   unsigned int nChannels = lastFrame_.channels();
-00128 #if defined(_STK_DEBUG_)
-00129   if ( channel > frames.channels() - nChannels ) {
-00130     oStream_ << "StifKarp::tick(): channel and StkFrames arguments are incompatible!";
-00131     handleError( StkError::FUNCTION_ARGUMENT );
-00132   }
-00133 #endif
-00134 
-00135   StkFloat *samples = &frames[channel];
-00136   unsigned int j, hop = frames.channels() - nChannels;
-00137   if ( nChannels == 1 ) {
-00138     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00139       *samples++ = tick();
-00140   }
-00141   else {
-00142     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00143       *samples++ = tick();
-00144       for ( j=1; j<nChannels; j++ )
-00145         *samples++ = lastFrame_[j];
-00146     }
-00147   }
-00148 
-00149   return frames;
-00150 }
-00151 
-00152 } // stk namespace
-00153 
-00154 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Stk_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Stk_8h_source.html deleted file mode 100644 index 94479d6788..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Stk_8h_source.html +++ /dev/null @@ -1,371 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Stk.h

00001 #ifndef STK_STK_H
-00002 #define STK_STK_H
-00003 
-00004 #include <string>
-00005 #include <iostream>
-00006 #include <sstream>
-00007 #include <vector>
-00008 //#include <cstdlib>
-00009 
-00016 namespace stk {
-00017 
-00018 /***************************************************/
-00068 /***************************************************/
-00069 
-00070 //#define _STK_DEBUG_
-00071 
-00072 // Most data in STK is passed and calculated with the
-00073 // following user-definable floating-point type.  You
-00074 // can change this to "float" if you prefer or perhaps
-00075 // a "long double" in the future.
-00076 typedef double StkFloat;
-00077 
-00079 
-00084 class StkError
-00085 {
-00086 public:
-00087   enum Type {
-00088     STATUS,
-00089     WARNING,
-00090     DEBUG_PRINT,
-00091     MEMORY_ALLOCATION,
-00092     MEMORY_ACCESS,
-00093     FUNCTION_ARGUMENT,
-00094     FILE_NOT_FOUND,
-00095     FILE_UNKNOWN_FORMAT,
-00096     FILE_ERROR,
-00097     PROCESS_THREAD,
-00098     PROCESS_SOCKET,
-00099     PROCESS_SOCKET_IPADDR,
-00100     AUDIO_SYSTEM,
-00101     MIDI_SYSTEM,
-00102     UNSPECIFIED
-00103   };
-00104 
-00105 protected:
-00106   std::string message_;
-00107   Type type_;
-00108 
-00109 public:
-00111   StkError(const std::string& message, Type type = StkError::UNSPECIFIED)
-00112     : message_(message), type_(type) {}
-00113 
-00115   virtual ~StkError(void) {};
-00116 
-00118   virtual void printMessage(void) { std::cerr << '\n' << message_ << "\n\n"; }
-00119 
-00121   virtual const Type& getType(void) { return type_; }
-00122 
-00124   virtual const std::string& getMessage(void) { return message_; }
-00125 
-00127   virtual const char *getMessageCString(void) { return message_.c_str(); }
-00128 };
-00129 
-00130 
-00131 class Stk
-00132 {
-00133 public:
-00134 
-00135   typedef unsigned long StkFormat;
-00136   static const StkFormat STK_SINT8;   
-00137   static const StkFormat STK_SINT16;  
-00138   static const StkFormat STK_SINT24;  
-00139   static const StkFormat STK_SINT32;  
-00140   static const StkFormat STK_FLOAT32; 
-00141   static const StkFormat STK_FLOAT64; 
-00143 
-00144   static StkFloat sampleRate( void ) { return srate_; }
-00145 
-00147 
-00164   static void setSampleRate( StkFloat rate );
-00165 
-00167 
-00172   void ignoreSampleRateChange( bool ignore = true ) { ignoreSampleRateChange_ = ignore; };
-00173 
-00175   static std::string rawwavePath(void) { return rawwavepath_; }
-00176 
-00178   static void setRawwavePath( std::string path );
-00179 
-00181   static void swap16( unsigned char *ptr );
-00182 
-00184   static void swap32( unsigned char *ptr );
-00185 
-00187   static void swap64( unsigned char *ptr );
-00188 
-00190   static void sleep( unsigned long milliseconds );
-00191 
-00193   static bool inRange( StkFloat value, StkFloat min, StkFloat max ) {
-00194     if ( value < min ) return false;
-00195     else if ( value > max ) return false;
-00196     else return true;
-00197   }
-00198 
-00200   static void handleError( const char *message, StkError::Type type );
-00201 
-00203   static void handleError( std::string message, StkError::Type type );
-00204 
-00206   static void showWarnings( bool status ) { showWarnings_ = status; }
-00207 
-00209   static void printErrors( bool status ) { printErrors_ = status; }
-00210 
-00211 private:
-00212   static StkFloat srate_;
-00213   static std::string rawwavepath_;
-00214   static bool showWarnings_;
-00215   static bool printErrors_;
-00216   static std::vector<Stk *> alertList_;
-00217 
-00218 protected:
-00219 
-00220   static std::ostringstream oStream_;
-00221   bool ignoreSampleRateChange_;
-00222 
-00224   Stk( void );
-00225 
-00227   virtual ~Stk( void );
-00228 
-00230   virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00231 
-00233   void addSampleRateAlert( Stk *ptr );
-00234 
-00236   void removeSampleRateAlert( Stk *ptr );
-00237 
-00239   void handleError( StkError::Type type );
-00240 };
-00241 
-00242 
-00243 /***************************************************/
-00269 /***************************************************/
-00270 
-00271 class StkFrames
-00272 {
-00273 public:
-00274 
-00276   StkFrames( unsigned int nFrames = 0, unsigned int nChannels = 0 );
-00277 
-00279   StkFrames( const StkFloat& value, unsigned int nFrames, unsigned int nChannels );
-00280 
-00282   ~StkFrames();
-00283 
-00284   // A copy constructor.
-00285   StkFrames( const StkFrames& f );
-00286 
-00287   // Assignment operator that returns a reference to self.
-00288   StkFrames& operator= ( const StkFrames& f );
-00289 
-00291 
-00297   StkFloat& operator[] ( size_t n );
-00298 
-00300 
-00304   StkFloat operator[] ( size_t n ) const;
-00305 
-00307 
-00312   void operator+= ( StkFrames& f );
-00313 
-00315 
-00320   void operator*= ( StkFrames& f );
-00321 
-00323 
-00330   StkFloat& operator() ( size_t frame, unsigned int channel );
-00331 
-00333 
-00338   StkFloat operator() ( size_t frame, unsigned int channel ) const;
-00339 
-00341 
-00347   StkFloat interpolate( StkFloat frame, unsigned int channel = 0 ) const;
-00348 
-00350   size_t size() const { return size_; }; 
-00351 
-00353   bool empty() const;
-00354 
-00356 
-00363   void resize( size_t nFrames, unsigned int nChannels = 1 );
-00364 
-00366 
-00373   void resize( size_t nFrames, unsigned int nChannels, StkFloat value );
-00374 
-00376   unsigned int channels( void ) const { return nChannels_; };
-00377 
-00379   unsigned int frames( void ) const { return nFrames_; };
-00380 
-00382 
-00386   void setDataRate( StkFloat rate ) { dataRate_ = rate; };
-00387 
-00389 
-00393   StkFloat dataRate( void ) const { return dataRate_; };
-00394 
-00395 private:
-00396 
-00397   StkFloat *data_;
-00398   StkFloat dataRate_;
-00399   size_t nFrames_;
-00400   unsigned int nChannels_;
-00401   size_t size_;
-00402   size_t bufferSize_;
-00403 
-00404 };
-00405 
-00406 inline bool StkFrames :: empty() const
-00407 {
-00408   if ( size_ > 0 ) return false;
-00409   else return true;
-00410 }
-00411 
-00412 inline StkFloat& StkFrames :: operator[] ( size_t n )
-00413 {
-00414 #if defined(_STK_DEBUG_)
-00415   if ( n >= size_ ) {
-00416     std::ostringstream error;
-00417     error << "StkFrames::operator[]: invalid index (" << n << ") value!";
-00418     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00419   }
-00420 #endif
-00421 
-00422   return data_[n];
-00423 }
-00424 
-00425 inline StkFloat StkFrames :: operator[] ( size_t n ) const
-00426 {
-00427 #if defined(_STK_DEBUG_)
-00428   if ( n >= size_ ) {
-00429     std::ostringstream error;
-00430     error << "StkFrames::operator[]: invalid index (" << n << ") value!";
-00431     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00432   }
-00433 #endif
-00434 
-00435   return data_[n];
-00436 }
-00437 
-00438 inline StkFloat& StkFrames :: operator() ( size_t frame, unsigned int channel )
-00439 {
-00440 #if defined(_STK_DEBUG_)
-00441   if ( frame >= nFrames_ || channel >= nChannels_ ) {
-00442     std::ostringstream error;
-00443     error << "StkFrames::operator(): invalid frame (" << frame << ") or channel (" << channel << ") value!";
-00444     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00445   }
-00446 #endif
-00447 
-00448   return data_[ frame * nChannels_ + channel ];
-00449 }
-00450 
-00451 inline StkFloat StkFrames :: operator() ( size_t frame, unsigned int channel ) const
-00452 {
-00453 #if defined(_STK_DEBUG_)
-00454   if ( frame >= nFrames_ || channel >= nChannels_ ) {
-00455     std::ostringstream error;
-00456     error << "StkFrames::operator(): invalid frame (" << frame << ") or channel (" << channel << ") value!";
-00457     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00458   }
-00459 #endif
-00460 
-00461   return data_[ frame * nChannels_ + channel ];
-00462 }
-00463 
-00464 inline void StkFrames :: operator+= ( StkFrames& f )
-00465 {
-00466 #if defined(_STK_DEBUG_)
-00467   if ( f.frames() != nFrames_ || f.channels() != nChannels_ ) {
-00468     std::ostringstream error;
-00469     error << "StkFrames::operator+=: frames argument must be of equal dimensions!";
-00470     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00471   }
-00472 #endif
-00473 
-00474   StkFloat *fptr = &f[0];
-00475   StkFloat *dptr = data_;
-00476   for ( unsigned int i=0; i<size_; i++ )
-00477     *dptr++ += *fptr++;
-00478 }
-00479 
-00480 inline void StkFrames :: operator*= ( StkFrames& f )
-00481 {
-00482 #if defined(_STK_DEBUG_)
-00483   if ( f.frames() != nFrames_ || f.channels() != nChannels_ ) {
-00484     std::ostringstream error;
-00485     error << "StkFrames::operator*=: frames argument must be of equal dimensions!";
-00486     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00487   }
-00488 #endif
-00489 
-00490   StkFloat *fptr = &f[0];
-00491   StkFloat *dptr = data_;
-00492   for ( unsigned int i=0; i<size_; i++ )
-00493     *dptr++ *= *fptr++;
-00494 }
-00495 
-00496 // Here are a few other useful typedefs.
-00497 typedef unsigned short UINT16;
-00498 typedef unsigned int UINT32;
-00499 typedef signed short SINT16;
-00500 typedef signed int SINT32;
-00501 typedef float FLOAT32;
-00502 typedef double FLOAT64;
-00503 
-00504 // The default sampling rate.
-00505 const StkFloat SRATE = 44100.0;
-00506 
-00507 // The default real-time audio input and output buffer size.  If
-00508 // clicks are occuring in the input and/or output sound stream, a
-00509 // larger buffer size may help.  Larger buffer sizes, however, produce
-00510 // more latency.
-00511 const unsigned int RT_BUFFER_SIZE = 512;
-00512 
-00513 // The default rawwave path value is set with the preprocessor
-00514 // definition RAWWAVE_PATH.  This can be specified as an argument to
-00515 // the configure script, in an integrated development environment, or
-00516 // below.  The global STK rawwave path variable can be dynamically set
-00517 // with the Stk::setRawwavePath() function.  This value is
-00518 // concatenated to the beginning of all references to rawwave files in
-00519 // the various STK core classes (ex. Clarinet.cpp).  If you wish to
-00520 // move the rawwaves directory to a different location in your file
-00521 // system, you will need to set this path definition appropriately.
-00522 #if !defined(RAWWAVE_PATH)
-00523   #define RAWWAVE_PATH "../../rawwaves/"
-00524 #endif
-00525 
-00526 const StkFloat PI           = 3.14159265358979;
-00527 const StkFloat TWO_PI       = 2 * PI;
-00528 const StkFloat ONE_OVER_128 = 0.0078125;
-00529 
-00530 #if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) || defined(__WINDOWS_MM__)
-00531   #define __OS_WINDOWS__
-00532   #define __STK_REALTIME__
-00533 #elif defined(__LINUX_OSS__) || defined(__LINUX_ALSA__) || defined(__UNIX_JACK__)
-00534   #define __OS_LINUX__
-00535   #define __STK_REALTIME__
-00536 #elif defined(__IRIX_AL__)
-00537   #define __OS_IRIX__
-00538 #elif defined(__MACOSX_CORE__) || defined(__UNIX_JACK__)
-00539   #define __OS_MACOSX__
-00540   #define __STK_REALTIME__
-00541 #endif
-00542 
-00543 } // stk namespace
-00544 
-00545 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/TapDelay_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/TapDelay_8h_source.html deleted file mode 100644 index 50a0321054..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/TapDelay_8h_source.html +++ /dev/null @@ -1,173 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

TapDelay.h

00001 #ifndef STK_TAPDELAY_H
-00002 #define STK_TAPDELAY_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00022 /***************************************************/
-00023 
-00024 class TapDelay : public Filter
-00025 {
-00026  public:
-00027 
-00029 
-00034   TapDelay( std::vector<unsigned long> taps = std::vector<unsigned long>( 1, 0 ), unsigned long maxDelay = 4095 );
-00035 
-00037   ~TapDelay();
-00038 
-00040 
-00047   void setMaximumDelay( unsigned long delay );
-00048 
-00050 
-00053   void setTapDelays( std::vector<unsigned long> taps );
-00054 
-00056   std::vector<unsigned long> getTapDelays( void ) const { return delays_; };
-00057 
-00059 
-00067   StkFloat lastOut( unsigned int tap = 0 ) const;
-00068 
-00070 
-00079   StkFrames& tick( StkFloat input, StkFrames& outputs );
-00080 
-00082 
-00091   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00092 
-00094 
-00105   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0 );
-00106 
-00107  protected:
-00108 
-00109   unsigned long inPoint_;
-00110   std::vector<unsigned long> outPoint_;
-00111   std::vector<unsigned long> delays_;
-00112 
-00113 };
-00114 
-00115 inline StkFloat TapDelay :: lastOut( unsigned int tap ) const
-00116 {
-00117 #if defined(_STK_DEBUG_)
-00118   if ( tap >= lastFrame_.size() ) ) {
-00119     oStream_ << "TapDelay::lastOut(): tap argument and number of taps are incompatible!";
-00120     handleError( StkError::FUNCTION_ARGUMENT );
-00121   }
-00122 #endif
-00123 
-00124   return lastFrame_[tap];
-00125 }
-00126 
-00127 inline StkFrames& TapDelay :: tick( StkFloat input, StkFrames& outputs )
-00128 {
-00129 #if defined(_STK_DEBUG_)
-00130   if ( outputs.channels() < outPoint_.size() ) {
-00131     oStream_ << "TapDelay::tick(): number of taps > channels in StkFrames argument!";
-00132     handleError( StkError::FUNCTION_ARGUMENT );
-00133   }
-00134 #endif
-00135 
-00136   inputs_[inPoint_++] = input * gain_;
-00137 
-00138   // Check for end condition
-00139   if ( inPoint_ == inputs_.size() )
-00140     inPoint_ = 0;
-00141 
-00142   // Read out next values
-00143   StkFloat *outs = &outputs[0];
-00144   for ( unsigned int i=0; i<outPoint_.size(); i++ ) {
-00145     *outs++ = inputs_[outPoint_[i]];
-00146     lastFrame_[i] = *outs;
-00147     if ( ++outPoint_[i] == inputs_.size() )
-00148       outPoint_[i] = 0;
-00149   }
-00150 
-00151   return outputs;
-00152 }
-00153 
-00154 inline StkFrames& TapDelay :: tick( StkFrames& frames, unsigned int channel )
-00155 {
-00156 #if defined(_STK_DEBUG_)
-00157   if ( channel >= frames.channels() ) {
-00158     oStream_ << "TapDelay::tick(): channel and StkFrames arguments are incompatible!";
-00159     handleError( StkError::FUNCTION_ARGUMENT );
-00160   }
-00161   if ( frames.channels() < outPoint_.size() ) {
-00162     oStream_ << "TapDelay::tick(): number of taps > channels in StkFrames argument!";
-00163     handleError( StkError::FUNCTION_ARGUMENT );
-00164   }
-00165 #endif
-00166 
-00167   StkFloat *iSamples = &frames[channel];
-00168   StkFloat *oSamples = &frames[0];
-00169   unsigned int j, iHop = frames.channels(), oHop = frames.channels() - outPoint_.size();
-00170   for ( unsigned int i=0; i<frames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00171     inputs_[inPoint_++] = *iSamples * gain_;
-00172     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00173     for ( j=0; j<outPoint_.size(); j++ ) {
-00174       *oSamples++ = inputs_[outPoint_[j]];
-00175       if ( ++outPoint_[j] == inputs_.size() ) outPoint_[j] = 0;
-00176     }
-00177   }
-00178 
-00179   oSamples -= frames.channels();
-00180   for ( j=0; j<outPoint_.size(); j++ ) lastFrame_[j] = *oSamples++;
-00181   return frames;
-00182 }
-00183 
-00184 inline StkFrames& TapDelay :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel )
-00185 {
-00186 #if defined(_STK_DEBUG_)
-00187   if ( iChannel >= iFrames.channels() ) {
-00188     oStream_ << "TapDelay::tick(): channel and StkFrames arguments are incompatible!";
-00189     handleError( StkError::FUNCTION_ARGUMENT );
-00190   }
-00191   if ( oFrames.channels() < outPoint_.size() ) {
-00192     oStream_ << "TapDelay::tick(): number of taps > channels in output StkFrames argument!";
-00193     handleError( StkError::FUNCTION_ARGUMENT );
-00194   }
-00195 #endif
-00196 
-00197   StkFloat *iSamples = &iFrames[iChannel];
-00198   StkFloat *oSamples = &oFrames[0];
-00199   unsigned int j, iHop = iFrames.channels(), oHop = oFrames.channels() - outPoint_.size();
-00200   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00201     inputs_[inPoint_++] = *iSamples * gain_;
-00202     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00203     for ( j=0; j<outPoint_.size(); j++ ) {
-00204       *oSamples++ = inputs_[outPoint_[j]];
-00205       if ( ++outPoint_[j] == inputs_.size() ) outPoint_[j] = 0;
-00206     }
-00207   }
-00208 
-00209   oSamples -= oFrames.channels();
-00210   for ( j=0; j<outPoint_.size(); j++ ) lastFrame_[j] = *oSamples++;
-00211   return iFrames;
-00212 }
-00213 
-00214 #endif
-00215 
-00216 } // stk namespace
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/TcpClient_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/TcpClient_8h_source.html deleted file mode 100644 index f76d2f62fb..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/TcpClient_8h_source.html +++ /dev/null @@ -1,56 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

TcpClient.h

00001 #ifndef STK_TCPCLIENT_H
-00002 #define STK_TCPCLIENT_H
-00003 
-00004 #include "Socket.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00031 /***************************************************/
-00032 
-00033 class TcpClient : public Socket
-00034 {
-00035  public:
-00037 
-00040   TcpClient( int port, std::string hostname = "localhost" );
-00041 
-00043   ~TcpClient();
-00044 
-00046 
-00051   int connect( int port, std::string hostname = "localhost" );
-00052 
-00054   int writeBuffer(const void *buffer, long bufferSize, int flags = 0);
-00055 
-00057   int readBuffer(void *buffer, long bufferSize, int flags = 0);
-00058 
-00059  protected:
-00060 
-00061 };
-00062 
-00063 } // stk namespace
-00064 
-00065 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/TcpServer_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/TcpServer_8h_source.html deleted file mode 100644 index c4e98c05ce..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/TcpServer_8h_source.html +++ /dev/null @@ -1,56 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

TcpServer.h

00001 #ifndef STK_TCPSERVER_H
-00002 #define STK_TCPSERVER_H
-00003 
-00004 #include "Socket.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00031 /***************************************************/
-00032 
-00033 class TcpServer : public Socket
-00034 {
-00035  public:
-00037 
-00040   TcpServer( int port = 2006 );
-00041 
-00043   ~TcpServer();
-00044 
-00046 
-00051   int accept( void );
-00052 
-00054   int writeBuffer(const void *buffer, long bufferSize, int flags = 0);
-00055 
-00057   int readBuffer(void *buffer, long bufferSize, int flags = 0);
-00058 
-00059  protected:
-00060 
-00061 };
-00062 
-00063 } // stk namespace
-00064 
-00065 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Thread_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Thread_8h_source.html deleted file mode 100644 index 52a77d7e03..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Thread_8h_source.html +++ /dev/null @@ -1,81 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Thread.h

00001 #ifndef STK_THREAD_H
-00002 #define STK_THREAD_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 #if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
-00007 
-00008   #include <pthread.h>
-00009   #define THREAD_TYPE
-00010   typedef pthread_t THREAD_HANDLE;
-00011   typedef void * THREAD_RETURN;
-00012   typedef void * (*THREAD_FUNCTION)(void *);
-00013 
-00014 #elif defined(__OS_WINDOWS__)
-00015 
-00016   #include <windows.h>
-00017   #include <process.h>
-00018   #define THREAD_TYPE __stdcall
-00019   typedef unsigned long THREAD_HANDLE;
-00020   typedef unsigned THREAD_RETURN;
-00021   typedef unsigned (__stdcall *THREAD_FUNCTION)(void *);
-00022 
-00023 #endif
-00024 
-00025 namespace stk {
-00026 
-00027 /***************************************************/
-00047 /***************************************************/
-00048 
-00049 class Thread : public Stk
-00050 {
-00051  public:
-00053   Thread();
-00054 
-00056   ~Thread();
-00057 
-00059 
-00064   bool start( THREAD_FUNCTION routine, void * ptr = NULL );
-00065 
-00067 
-00074   bool cancel(void);
-00075 
-00077 
-00080   bool wait(void);
-00081 
-00083 
-00088   void testCancel(void);
-00089 
-00090  protected:
-00091 
-00092   THREAD_HANDLE thread_;
-00093 
-00094 };
-00095 
-00096 } // stk namespace
-00097 
-00098 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/TubeBell_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/TubeBell_8h_source.html deleted file mode 100644 index e37e56918c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/TubeBell_8h_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

TubeBell.h

00001 #ifndef STK_TUBEBELL_H
-00002 #define STK_TUBEBELL_H
-00003 
-00004 #include "FM.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00038 /***************************************************/
-00039 
-00040 class TubeBell : public FM
-00041 {
-00042  public:
-00044 
-00047   TubeBell( void );
-00048 
-00050   ~TubeBell( void );
-00051 
-00053   void noteOn( StkFloat frequency, StkFloat amplitude );
-00054 
-00056   StkFloat tick( unsigned int channel = 0 );
-00057 
-00059 
-00066   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00067 
-00068  protected:
-00069 
-00070 };
-00071 
-00072 inline StkFloat TubeBell :: tick( unsigned int )
-00073 {
-00074   StkFloat temp, temp2;
-00075 
-00076   temp = gains_[1] * adsr_[1]->tick() * waves_[1]->tick();
-00077   temp = temp * control1_;
-00078 
-00079   waves_[0]->addPhaseOffset( temp );
-00080   waves_[3]->addPhaseOffset( twozero_.lastOut() );
-00081   temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick();
-00082   twozero_.tick( temp );
-00083 
-00084   waves_[2]->addPhaseOffset( temp );
-00085   temp = ( 1.0 - (control2_ * 0.5)) * gains_[0] * adsr_[0]->tick() * waves_[0]->tick();
-00086   temp += control2_ * 0.5 * gains_[2] * adsr_[2]->tick() * waves_[2]->tick();
-00087 
-00088   // Calculate amplitude modulation and apply it to output.
-00089   temp2 = vibrato_.tick() * modDepth_;
-00090   temp = temp * (1.0 + temp2);
-00091     
-00092   lastFrame_[0] = temp * 0.5;
-00093   return lastFrame_[0];
-00094 }
-00095 
-00096 inline StkFrames& TubeBell :: tick( StkFrames& frames, unsigned int channel )
-00097 {
-00098   unsigned int nChannels = lastFrame_.channels();
-00099 #if defined(_STK_DEBUG_)
-00100   if ( channel > frames.channels() - nChannels ) {
-00101     oStream_ << "TubeBell::tick(): channel and StkFrames arguments are incompatible!";
-00102     handleError( StkError::FUNCTION_ARGUMENT );
-00103   }
-00104 #endif
-00105 
-00106   StkFloat *samples = &frames[channel];
-00107   unsigned int j, hop = frames.channels() - nChannels;
-00108   if ( nChannels == 1 ) {
-00109     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00110       *samples++ = tick();
-00111   }
-00112   else {
-00113     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00114       *samples++ = tick();
-00115       for ( j=1; j<nChannels; j++ )
-00116         *samples++ = lastFrame_[j];
-00117     }
-00118   }
-00119 
-00120   return frames;
-00121 }
-00122 
-00123 } // stk namespace
-00124 
-00125 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Twang_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Twang_8h_source.html deleted file mode 100644 index ee72b32336..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Twang_8h_source.html +++ /dev/null @@ -1,129 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Twang.h

00001 #ifndef STK_TWANG_H
-00002 #define STK_TWANG_H
-00003 
-00004 #include "Stk.h"
-00005 #include "DelayA.h"
-00006 #include "DelayL.h"
-00007 #include "Fir.h"
-00008 
-00009 namespace stk {
-00010 
-00011 /***************************************************/
-00032 /***************************************************/
-00033 
-00034 class Twang : public Stk
-00035 {
-00036  public:
-00038   Twang( StkFloat lowestFrequency = 50.0 );
-00039 
-00041   void clear( void );
-00042 
-00044   void setLowestFrequency( StkFloat frequency );
-00045 
-00047   void setFrequency( StkFloat frequency );
-00048 
-00050   void setPluckPosition( StkFloat position );
-00051 
-00053 
-00059   void setLoopGain( StkFloat loopGain );
-00060 
-00062 
-00067   void setLoopFilter( std::vector<StkFloat> coefficients );
-00068 
-00070   //const StkFrames& lastFrame( void ) const { return lastFrame_; };
-00071 
-00073   // StkFloat lastOut( void ) { return lastFrame_[0]; };
-00074   StkFloat lastOut( void ) { return lastOutput_; };
-00075 
-00077   StkFloat tick( StkFloat input );
-00078 
-00080 
-00088   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00089 
-00091 
-00099   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00100 
-00101  protected:  
-00102 
-00103   DelayA   delayLine_;
-00104   DelayL   combDelay_;
-00105   Fir      loopFilter_;
-00106 
-00107   StkFloat lastOutput_;
-00108   StkFloat frequency_;
-00109   StkFloat loopGain_;
-00110   StkFloat pluckPosition_;
-00111 };
-00112 
-00113 inline StkFloat Twang :: tick( StkFloat input )
-00114 {
-00115   lastOutput_ = delayLine_.tick( input + loopFilter_.tick( delayLine_.lastOut() ) );
-00116   lastOutput_ -= combDelay_.tick( lastOutput_ ); // comb filtering on output
-00117   lastOutput_ *= 0.5;
-00118 
-00119   return lastOutput_;
-00120 }
-00121 
-00122 inline StkFrames& Twang :: tick( StkFrames& frames, unsigned int channel )
-00123 {
-00124 #if defined(_STK_DEBUG_)
-00125   if ( channel >= frames.channels() ) {
-00126     oStream_ << "Twang::tick(): channel and StkFrames arguments are incompatible!";
-00127     handleError( StkError::FUNCTION_ARGUMENT );
-00128   }
-00129 #endif
-00130 
-00131   StkFloat *samples = &frames[channel];
-00132   unsigned int hop = frames.channels();
-00133   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00134     *samples = tick( *samples );
-00135 
-00136   return frames;
-00137 }
-00138 
-00139 inline StkFrames& Twang :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00140 {
-00141 #if defined(_STK_DEBUG_)
-00142   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00143     oStream_ << "Twang::tick(): channel and StkFrames arguments are incompatible!";
-00144     handleError( StkError::FUNCTION_ARGUMENT );
-00145   }
-00146 #endif
-00147 
-00148   StkFloat *iSamples = &iFrames[iChannel];
-00149   StkFloat *oSamples = &oFrames[oChannel];
-00150   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00151   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop )
-00152     *oSamples = tick( *iSamples );
-00153 
-00154   return iFrames;
-00155 }
-00156 
-00157 } // stk namespace
-00158 
-00159 #endif
-00160 
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/TwoPole_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/TwoPole_8h_source.html deleted file mode 100644 index 27c839bdb4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/TwoPole_8h_source.html +++ /dev/null @@ -1,128 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

TwoPole.h

00001 #ifndef STK_TWOPOLE_H
-00002 #define STK_TWOPOLE_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class TwoPole : public Filter
-00021 {
-00022  public:
-00023 
-00025   TwoPole( void );
-00026 
-00028   ~TwoPole();
-00029 
-00031   void ignoreSampleRateChange( bool ignore = true ) { ignoreSampleRateChange_ = ignore; };
-00032 
-00034   void setB0( StkFloat b0 ) { b_[0] = b0; };
-00035 
-00037   void setA1( StkFloat a1 ) { a_[1] = a1; };
-00038 
-00040   void setA2( StkFloat a2 ) { a_[2] = a2; };
-00041 
-00043   void setCoefficients( StkFloat b0, StkFloat a1, StkFloat a2, bool clearState = false );
-00044 
-00046 
-00061   void setResonance(StkFloat frequency, StkFloat radius, bool normalize = false);
-00062 
-00064   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00065 
-00067   StkFloat tick( StkFloat input );
-00068 
-00070 
-00078   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00079 
-00081 
-00089   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00090 
-00091  protected:
-00092 
-00093   virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00094 };
-00095 
-00096 inline StkFloat TwoPole :: tick( StkFloat input )
-00097 {
-00098   inputs_[0] = gain_ * input;
-00099   lastFrame_[0] = b_[0] * inputs_[0] - a_[1] * outputs_[1] - a_[2] * outputs_[2];
-00100   outputs_[2] = outputs_[1];
-00101   outputs_[1] = lastFrame_[0];
-00102 
-00103   return lastFrame_[0];
-00104 }
-00105 
-00106 inline StkFrames& TwoPole :: tick( StkFrames& frames, unsigned int channel )
-00107 {
-00108 #if defined(_STK_DEBUG_)
-00109   if ( channel >= frames.channels() ) {
-00110     oStream_ << "TwoPole::tick(): channel and StkFrames arguments are incompatible!";
-00111     handleError( StkError::FUNCTION_ARGUMENT );
-00112   }
-00113 #endif
-00114 
-00115   StkFloat *samples = &frames[channel];
-00116   unsigned int hop = frames.channels();
-00117   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00118     inputs_[0] = gain_ * *samples;
-00119     *samples = b_[0] * inputs_[0] - a_[1] * outputs_[1] - a_[2] * outputs_[2];
-00120     outputs_[2] = outputs_[1];
-00121     outputs_[1] = *samples;
-00122   }
-00123 
-00124   lastFrame_[0] = outputs_[1];
-00125   return frames;
-00126 }
-00127 
-00128 inline StkFrames& TwoPole :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00129 {
-00130 #if defined(_STK_DEBUG_)
-00131   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00132     oStream_ << "TwoPole::tick(): channel and StkFrames arguments are incompatible!";
-00133     handleError( StkError::FUNCTION_ARGUMENT );
-00134   }
-00135 #endif
-00136 
-00137   StkFloat *iSamples = &iFrames[iChannel];
-00138   StkFloat *oSamples = &oFrames[oChannel];
-00139   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00140   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00141     inputs_[0] = gain_ * *iSamples;
-00142     *oSamples = b_[0] * inputs_[0] - a_[1] * outputs_[1] - a_[2] * outputs_[2];
-00143     outputs_[2] = outputs_[1];
-00144     outputs_[1] = *oSamples;
-00145   }
-00146 
-00147   lastFrame_[0] = outputs_[1];
-00148   return iFrames;
-00149 }
-00150 
-00151 } // stk namespace
-00152 
-00153 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/TwoZero_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/TwoZero_8h_source.html deleted file mode 100644 index 6d44af3834..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/TwoZero_8h_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

TwoZero.h

00001 #ifndef STK_TWOZERO_H
-00002 #define STK_TWOZERO_H
-00003 
-00004 #include "Filter.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00018 /***************************************************/
-00019 
-00020 class TwoZero : public Filter
-00021 {
-00022  public:
-00024   TwoZero();
-00025 
-00027   ~TwoZero();
-00028 
-00030   void ignoreSampleRateChange( bool ignore = true ) { ignoreSampleRateChange_ = ignore; };
-00031 
-00033   void setB0( StkFloat b0 ) { b_[0] = b0; };
-00034 
-00036   void setB1( StkFloat b1 ) { b_[1] = b1; };
-00037 
-00039   void setB2( StkFloat b2 ) { b_[2] = b2; };
-00040 
-00042   void setCoefficients( StkFloat b0, StkFloat b1, StkFloat b2, bool clearState = false );
-00043 
-00045 
-00057   void setNotch( StkFloat frequency, StkFloat radius );
-00058 
-00060   StkFloat lastOut( void ) const { return lastFrame_[0]; };
-00061 
-00063   StkFloat tick( StkFloat input );
-00064 
-00066 
-00074   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00075 
-00077 
-00085   StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
-00086 
-00087  protected:
-00088 
-00089   void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
-00090 };
-00091 
-00092 inline StkFloat TwoZero :: tick( StkFloat input )
-00093 {
-00094   inputs_[0] = gain_ * input;
-00095   lastFrame_[0] = b_[2] * inputs_[2] + b_[1] * inputs_[1] + b_[0] * inputs_[0];
-00096   inputs_[2] = inputs_[1];
-00097   inputs_[1] = inputs_[0];
-00098 
-00099   return lastFrame_[0];
-00100 }
-00101 
-00102 inline StkFrames& TwoZero :: tick( StkFrames& frames, unsigned int channel )
-00103 {
-00104 #if defined(_STK_DEBUG_)
-00105   if ( channel >= frames.channels() ) {
-00106     oStream_ << "TwoZero::tick(): channel and StkFrames arguments are incompatible!";
-00107     handleError( StkError::FUNCTION_ARGUMENT );
-00108   }
-00109 #endif
-00110 
-00111   StkFloat *samples = &frames[channel];
-00112   unsigned int hop = frames.channels();
-00113   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00114     inputs_[0] = gain_ * *samples;
-00115     *samples = b_[2] * inputs_[2] + b_[1] * inputs_[1] + b_[0] * inputs_[0];
-00116     inputs_[2] = inputs_[1];
-00117     inputs_[1] = inputs_[0];
-00118   }
-00119 
-00120   lastFrame_[0] = *(samples-hop);
-00121   return frames;
-00122 }
-00123 
-00124 inline StkFrames& TwoZero :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel )
-00125 {
-00126 #if defined(_STK_DEBUG_)
-00127   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00128     oStream_ << "TwoZero::tick(): channel and StkFrames arguments are incompatible!";
-00129     handleError( StkError::FUNCTION_ARGUMENT );
-00130   }
-00131 #endif
-00132 
-00133   StkFloat *iSamples = &iFrames[iChannel];
-00134   StkFloat *oSamples = &oFrames[oChannel];
-00135   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00136   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00137     inputs_[0] = gain_ * *iSamples;
-00138     *oSamples = b_[2] * inputs_[2] + b_[1] * inputs_[1] + b_[0] * inputs_[0];
-00139     inputs_[2] = inputs_[1];
-00140     inputs_[1] = inputs_[0];
-00141   }
-00142 
-00143   lastFrame_[0] = *(oSamples-oHop);
-00144   return iFrames;
-00145 }
-00146 
-00147 } // stk namespace
-00148 
-00149 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/UdpSocket_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/UdpSocket_8h_source.html deleted file mode 100644 index 7503782fea..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/UdpSocket_8h_source.html +++ /dev/null @@ -1,65 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

UdpSocket.h

00001 #ifndef STK_UDPSOCKET_H
-00002 #define STK_UDPSOCKET_H
-00003 
-00004 #include "Socket.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00029 /***************************************************/
-00030 
-00031 class UdpSocket : public Socket
-00032 {
-00033  public:
-00035 
-00038   UdpSocket( int port = 2006 );
-00039 
-00041   ~UdpSocket();
-00042 
-00044 
-00047   void setDestination( int port = 2006, std::string hostname = "localhost" );
-00048 
-00050 
-00053   int writeBuffer(const void *buffer, long bufferSize, int flags = 0);
-00054 
-00056   int readBuffer(void *buffer, long bufferSize, int flags = 0);
-00057 
-00059   int writeBufferTo(const void *buffer, long bufferSize, int port, std::string hostname = "localhost", int flags = 0 );
-00060 
-00061  protected:
-00062 
-00064 
-00067   void setAddress( struct sockaddr_in *address, int port = 2006, std::string hostname = "localhost" );
-00068 
-00069   struct sockaddr_in address_;
-00070   bool validAddress_;
-00071 
-00072 };
-00073 
-00074 } // stk namespace
-00075 
-00076 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Vector3D_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Vector3D_8h_source.html deleted file mode 100644 index ef8a16d63b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Vector3D_8h_source.html +++ /dev/null @@ -1,76 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Vector3D.h

00001 #ifndef STK_VECTOR3D_H
-00002 #define STK_VECTOR3D_H
-00003 
-00004 #include "Stk.h"
-00005 #include <cmath>
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00017 /***************************************************/
-00018 
-00019 class Vector3D : public Stk
-00020 {
-00021 
-00022 public:
-00024   Vector3D( StkFloat x = 0.0, StkFloat y = 0.0, StkFloat z = 0.0 ) { setXYZ( x, y, z ); };
-00025 
-00027   StkFloat getX( void ) { return X_; };
-00028 
-00030   StkFloat getY( void ) { return Y_; };
-00031 
-00033   StkFloat getZ( void ) { return Z_; };
-00034 
-00036   StkFloat getLength( void );
-00037 
-00039   void setXYZ( StkFloat x, StkFloat y, StkFloat z ) { X_ = x; Y_ = y; Z_ = z; };
-00040 
-00042   void setX( StkFloat x ) { X_ = x; };
-00043 
-00045   void setY( StkFloat y ) { Y_ = y; };
-00046 
-00048   void setZ( StkFloat z ) { Z_ = z; };
-00049 
-00050 protected:
-00051   StkFloat X_;
-00052   StkFloat Y_;
-00053   StkFloat Z_;
-00054 };
-00055 
-00056 inline StkFloat Vector3D :: getLength( void )
-00057 {
-00058   StkFloat temp;
-00059   temp = X_ * X_;
-00060   temp += Y_ * Y_;
-00061   temp += Z_ * Z_;
-00062   temp = sqrt( temp );
-00063   return temp;
-00064 }
-00065 
-00066 } // stk namespace
-00067 
-00068 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/VoicForm_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/VoicForm_8h_source.html deleted file mode 100644 index 7a720d6c08..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/VoicForm_8h_source.html +++ /dev/null @@ -1,137 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

VoicForm.h

00001 #ifndef STK_VOICFORM_H
-00002 #define STK_VOICFORM_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "Envelope.h"
-00006 #include "Noise.h"
-00007 #include "SingWave.h"
-00008 #include "FormSwep.h"
-00009 #include "OnePole.h"
-00010 #include "OneZero.h"
-00011 
-00012 namespace stk {
-00013 
-00014 /***************************************************/
-00039 /***************************************************/
-00040 
-00041 class VoicForm : public Instrmnt
-00042 {
-00043   public:
-00045 
-00048   VoicForm( void );
-00049 
-00051   ~VoicForm( void );
-00052 
-00054   void clear( void );
-00055 
-00057   void setFrequency( StkFloat frequency );
-00058 
-00060   bool setPhoneme( const char* phoneme );
-00061 
-00063   void setVoiced( StkFloat vGain ) { voiced_->setGainTarget(vGain); };
-00064 
-00066   void setUnVoiced( StkFloat nGain ) { noiseEnv_.setTarget(nGain); };
-00067 
-00069   void setFilterSweepRate( unsigned int whichOne, StkFloat rate );
-00070 
-00072   void setPitchSweepRate( StkFloat rate ) { voiced_->setSweepRate(rate); };
-00073 
-00075   void speak( void ) { voiced_->noteOn(); };
-00076 
-00078   void quiet( void );
-00079 
-00081   void noteOn( StkFloat frequency, StkFloat amplitude );
-00082 
-00084   void noteOff( StkFloat amplitude ) { this->quiet(); };
-00085 
-00087   void controlChange( int number, StkFloat value );
-00088 
-00090   StkFloat tick( unsigned int channel = 0 );
-00091 
-00093 
-00100   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00101 
-00102 protected:
-00103 
-00104   SingWave *voiced_;
-00105   Noise    noise_;
-00106   Envelope noiseEnv_;
-00107   FormSwep filters_[4];
-00108   OnePole  onepole_;
-00109   OneZero  onezero_;
-00110 
-00111 };
-00112 
-00113 inline StkFloat VoicForm :: tick( unsigned int )
-00114 {
-00115   StkFloat temp;
-00116   temp = onepole_.tick( onezero_.tick( voiced_->tick() ) );
-00117   temp += noiseEnv_.tick() * noise_.tick();
-00118   lastFrame_[0] = filters_[0].tick(temp);
-00119   lastFrame_[0] += filters_[1].tick(temp);
-00120   lastFrame_[0] += filters_[2].tick(temp);
-00121   lastFrame_[0] += filters_[3].tick(temp);
-00122   /*
-00123     temp  += noiseEnv_.tick() * noise_.tick();
-00124     lastFrame_[0]  = filters_[0].tick(temp);
-00125     lastFrame_[0]  = filters_[1].tick(lastFrame_[0]);
-00126     lastFrame_[0]  = filters_[2].tick(lastFrame_[0]);
-00127     lastFrame_[0]  = filters_[3].tick(lastFrame_[0]);
-00128   */
-00129   return lastFrame_[0];
-00130 }
-00131 
-00132 inline StkFrames& VoicForm :: tick( StkFrames& frames, unsigned int channel )
-00133 {
-00134   unsigned int nChannels = lastFrame_.channels();
-00135 #if defined(_STK_DEBUG_)
-00136   if ( channel > frames.channels() - nChannels ) {
-00137     oStream_ << "VoicForm::tick(): channel and StkFrames arguments are incompatible!";
-00138     handleError( StkError::FUNCTION_ARGUMENT );
-00139   }
-00140 #endif
-00141 
-00142   StkFloat *samples = &frames[channel];
-00143   unsigned int j, hop = frames.channels() - nChannels;
-00144   if ( nChannels == 1 ) {
-00145     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00146       *samples++ = tick();
-00147   }
-00148   else {
-00149     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00150       *samples++ = tick();
-00151       for ( j=1; j<nChannels; j++ )
-00152         *samples++ = lastFrame_[j];
-00153     }
-00154   }
-00155 
-00156   return frames;
-00157 }
-00158 
-00159 } // stk namespace
-00160 
-00161 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Voicer_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Voicer_8h_source.html deleted file mode 100644 index 69b54f6d32..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Voicer_8h_source.html +++ /dev/null @@ -1,160 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Voicer.h

00001 #ifndef STK_VOICER_H
-00002 #define STK_VOICER_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include <vector>
-00006 
-00007 namespace stk {
-00008 
-00009 /***************************************************/
-00032 /***************************************************/
-00033 
-00034 class Voicer : public Stk
-00035 {
-00036  public:
-00038   Voicer( StkFloat decayTime = 0.2 );
-00039 
-00041 
-00045   void addInstrument( Instrmnt *instrument, int group=0 );
-00046 
-00048 
-00053   void removeInstrument( Instrmnt *instrument );
-00054 
-00056 
-00064   long noteOn( StkFloat noteNumber, StkFloat amplitude, int group=0 );
-00065 
-00067 
-00070   void noteOff( StkFloat noteNumber, StkFloat amplitude, int group=0 );
-00071 
-00073 
-00076   void noteOff( long tag, StkFloat amplitude );
-00077 
-00079 
-00082   void setFrequency( StkFloat noteNumber, int group=0 );
-00083 
-00085 
-00088   void setFrequency( long tag, StkFloat noteNumber );
-00089 
-00091   void pitchBend( StkFloat value, int group=0 );
-00092 
-00094   void pitchBend( long tag, StkFloat value );
-00095 
-00097   void controlChange( int number, StkFloat value, int group=0 );
-00098 
-00100   void controlChange( long tag, int number, StkFloat value );
-00101 
-00103   void silence( void );
-00104 
-00106   unsigned int channelsOut( void ) const { return lastFrame_.channels(); };
-00107 
-00109   const StkFrames& lastFrame( void ) const { return lastFrame_; };
-00110 
-00112 
-00120   StkFloat lastOut( unsigned int channel = 0 );
-00121 
-00123 
-00131   StkFloat tick( unsigned int channel = 0 );
-00132 
-00134 
-00142   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00143 
-00144  protected:
-00145 
-00146   struct Voice {
-00147     Instrmnt *instrument;
-00148     long tag;
-00149     StkFloat noteNumber;
-00150     StkFloat frequency;
-00151     int sounding;
-00152     int group;
-00153 
-00154     // Default constructor.
-00155     Voice()
-00156       :instrument(0), tag(0), noteNumber(-1.0), frequency(0.0), sounding(0), group(0) {}
-00157   };
-00158 
-00159   std::vector<Voice> voices_;
-00160   long tags_;
-00161   int muteTime_;
-00162   StkFrames lastFrame_;
-00163 };
-00164 
-00165 inline StkFloat Voicer :: lastOut( unsigned int channel )
-00166 {
-00167 #if defined(_STK_DEBUG_)
-00168   if ( channel >= lastFrame_.channels() ) {
-00169     oStream_ << "Voicer::lastOut(): channel argument is invalid!";
-00170     handleError( StkError::FUNCTION_ARGUMENT );
-00171   }
-00172 #endif
-00173 
-00174   return lastFrame_[channel];
-00175 }
-00176 
-00177 
-00178 inline StkFloat Voicer :: tick( unsigned int channel )
-00179 {
-00180   unsigned int j;
-00181   for ( j=0; j<lastFrame_.channels(); j++ ) lastFrame_[j] = 0.0;
-00182   for ( unsigned int i=0; i<voices_.size(); i++ ) {
-00183     if ( voices_[i].sounding != 0 ) {
-00184       voices_[i].instrument->tick();
-00185       for ( j=0; j<voices_[i].instrument->channelsOut(); j++ ) lastFrame_[j] += voices_[i].instrument->lastOut( j );
-00186     }
-00187     if ( voices_[i].sounding < 0 )
-00188       voices_[i].sounding++;
-00189     if ( voices_[i].sounding == 0 )
-00190       voices_[i].noteNumber = -1;
-00191   }
-00192 
-00193   return lastFrame_[channel];
-00194 }
-00195 
-00196 inline StkFrames& Voicer :: tick( StkFrames& frames, unsigned int channel )
-00197 {
-00198   unsigned int nChannels = lastFrame_.channels();
-00199 #if defined(_STK_DEBUG_)
-00200   if ( channel > frames.channels() - nChannels ) {
-00201     oStream_ << "Voicer::tick(): channel and StkFrames arguments are incompatible!";
-00202     handleError( StkError::FUNCTION_ARGUMENT );
-00203   }
-00204 #endif
-00205 
-00206   StkFloat *samples = &frames[channel];
-00207   unsigned int j, hop = frames.channels() - nChannels;
-00208   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00209     tick();
-00210     for ( j=0; j<nChannels; j++ )
-00211       *samples++ = lastFrame_[j];
-00212   }
-00213 
-00214   return frames;
-00215 }
-00216 
-00217 } // stk namespace
-00218 
-00219 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Whistle_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Whistle_8h_source.html deleted file mode 100644 index 67b59bf219..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Whistle_8h_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Whistle.h

00001 #ifndef STK_WHISTLE_H
-00002 #define STK_WHISTLE_H
-00003 
-00004 #include "Instrmnt.h"
-00005 #include "Sphere.h"
-00006 #include "Vector3D.h"
-00007 #include "Noise.h"
-00008 #include "SineWave.h"
-00009 #include "OnePole.h"
-00010 #include "Envelope.h"
-00011 
-00012 namespace stk {
-00013 
-00014 /***************************************************/
-00030 /***************************************************/
-00031 
-00032 class Whistle : public Instrmnt
-00033 {
-00034 public:
-00036 
-00039   Whistle( void );
-00040 
-00042   ~Whistle( void );
-00043 
-00045   void clear( void );
-00046 
-00048   void setFrequency( StkFloat frequency );
-00049 
-00051   void startBlowing( StkFloat amplitude, StkFloat rate );
-00052 
-00054   void stopBlowing( StkFloat rate );
-00055 
-00057   void noteOn( StkFloat frequency, StkFloat amplitude );
-00058 
-00060   void noteOff( StkFloat amplitude );
-00061 
-00063   void controlChange( int number, StkFloat value );
-00064 
-00066   StkFloat tick( unsigned int channel = 0 );
-00067 
-00069 
-00076   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00077 
-00078 protected:
-00079 
-00080          Vector3D *tempVectorP_;
-00081   Vector3D tempVector_;
-00082   OnePole onepole_;
-00083   Noise noise_;
-00084          Envelope envelope_;
-00085   Sphere can_;           // Declare a Spherical "can".
-00086   Sphere pea_, bumper_;  // One spherical "pea", and a spherical "bumper".
-00087 
-00088   SineWave sine_;
-00089 
-00090   StkFloat baseFrequency_;
-00091   StkFloat noiseGain_;
-00092   StkFloat fippleFreqMod_;
-00093          StkFloat fippleGainMod_;
-00094          StkFloat blowFreqMod_;
-00095          StkFloat tickSize_;
-00096          StkFloat canLoss_;
-00097          int subSample_, subSampCount_;
-00098 };
-00099 
-00100 inline StkFrames& Whistle :: tick( StkFrames& frames, unsigned int channel )
-00101 {
-00102   unsigned int nChannels = lastFrame_.channels();
-00103 #if defined(_STK_DEBUG_)
-00104   if ( channel > frames.channels() - nChannels ) {
-00105     oStream_ << "Whistle::tick(): channel and StkFrames arguments are incompatible!";
-00106     handleError( StkError::FUNCTION_ARGUMENT );
-00107   }
-00108 #endif
-00109 
-00110   StkFloat *samples = &frames[channel];
-00111   unsigned int j, hop = frames.channels() - nChannels;
-00112   if ( nChannels == 1 ) {
-00113     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00114       *samples++ = tick();
-00115   }
-00116   else {
-00117     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00118       *samples++ = tick();
-00119       for ( j=1; j<nChannels; j++ )
-00120         *samples++ = lastFrame_[j];
-00121     }
-00122   }
-00123 
-00124   return frames;
-00125 }
-00126 
-00127 } // stk namespace
-00128 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/Wurley_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/Wurley_8h_source.html deleted file mode 100644 index 0ad4f2b05b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/Wurley_8h_source.html +++ /dev/null @@ -1,109 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

Wurley.h

00001 #ifndef STK_WURLEY_H
-00002 #define STK_WURLEY_H
-00003 
-00004 #include "FM.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00038 /***************************************************/
-00039 
-00040 class Wurley : public FM
-00041 {
-00042  public:
-00044 
-00047   Wurley( void );
-00048 
-00050   ~Wurley( void );
-00051 
-00053   void setFrequency( StkFloat frequency );
-00054 
-00056   void noteOn( StkFloat frequency, StkFloat amplitude );
-00057 
-00059   StkFloat tick( unsigned int channel = 0 );
-00060 
-00062 
-00069   StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
-00070 
-00071  protected:
-00072 
-00073 };
-00074 
-00075 inline StkFloat Wurley :: tick( unsigned int )
-00076 {
-00077   StkFloat temp, temp2;
-00078 
-00079   temp = gains_[1] * adsr_[1]->tick() * waves_[1]->tick();
-00080   temp = temp * control1_;
-00081 
-00082   waves_[0]->addPhaseOffset( temp );
-00083   waves_[3]->addPhaseOffset( twozero_.lastOut() );
-00084   temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick();
-00085   twozero_.tick(temp);
-00086 
-00087   waves_[2]->addPhaseOffset( temp );
-00088   temp = ( 1.0 - (control2_ * 0.5)) * gains_[0] * adsr_[0]->tick() * waves_[0]->tick();
-00089   temp += control2_ * 0.5 * gains_[2] * adsr_[2]->tick() * waves_[2]->tick();
-00090 
-00091   // Calculate amplitude modulation and apply it to output.
-00092   temp2 = vibrato_.tick() * modDepth_;
-00093   temp = temp * (1.0 + temp2);
-00094     
-00095   lastFrame_[0] = temp * 0.5;
-00096   return lastFrame_[0];
-00097 }
-00098 
-00099 inline StkFrames& Wurley :: tick( StkFrames& frames, unsigned int channel )
-00100 {
-00101   unsigned int nChannels = lastFrame_.channels();
-00102 #if defined(_STK_DEBUG_)
-00103   if ( channel > frames.channels() - nChannels ) {
-00104     oStream_ << "Wurley::tick(): channel and StkFrames arguments are incompatible!";
-00105     handleError( StkError::FUNCTION_ARGUMENT );
-00106   }
-00107 #endif
-00108 
-00109   StkFloat *samples = &frames[channel];
-00110   unsigned int j, hop = frames.channels() - nChannels;
-00111   if ( nChannels == 1 ) {
-00112     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00113       *samples++ = tick();
-00114   }
-00115   else {
-00116     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00117       *samples++ = tick();
-00118       for ( j=1; j<nChannels; j++ )
-00119         *samples++ = lastFrame_[j];
-00120     }
-00121   }
-00122 
-00123   return frames;
-00124 }
-00125 
-00126 } // stk namespace
-00127 
-00128 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/WvIn_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/WvIn_8h_source.html deleted file mode 100644 index 22d1db8e25..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/WvIn_8h_source.html +++ /dev/null @@ -1,56 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

WvIn.h

00001 #ifndef STK_WVIN_H
-00002 #define STK_WVIN_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00017 /***************************************************/
-00018 
-00019 class WvIn : public Stk
-00020 {
-00021 public:
-00023   unsigned int channelsOut( void ) const { return data_.channels(); };
-00024 
-00026 
-00029   const StkFrames& lastFrame( void ) const { return lastFrame_; };
-00030 
-00032   virtual StkFloat tick( unsigned int channel = 0 ) = 0;
-00033 
-00035   virtual StkFrames& tick( StkFrames& frames ) = 0;
-00036 
-00037 protected:
-00038 
-00039   StkFrames data_;
-00040   StkFrames lastFrame_;
-00041 
-00042 };
-00043 
-00044 } // stk namespace
-00045 
-00046 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/WvOut_8h_source.html b/source/StkUGens/stk-4.4.4/doc/html/WvOut_8h_source.html deleted file mode 100644 index 3a05262858..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/WvOut_8h_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

WvOut.h

00001 #ifndef STK_WVOUT_H
-00002 #define STK_WVOUT_H
-00003 
-00004 #include "Stk.h"
-00005 
-00006 namespace stk {
-00007 
-00008 /***************************************************/
-00020 /***************************************************/
-00021 
-00022 class WvOut : public Stk
-00023 {
-00024  public:
-00025 
-00027   WvOut( void ) : frameCounter_(0), clipping_(false) {};
-00028 
-00030   unsigned long getFrameCount( void ) const { return frameCounter_; };
-00031 
-00033   StkFloat getTime( void ) const { return (StkFloat) frameCounter_ / Stk::sampleRate(); };
-00034 
-00036   bool clipStatus( void ) { return clipping_; };
-00037 
-00039   void resetClipStatus( void ) { clipping_ = false; };
-00040 
-00042 
-00045   virtual void tick( const StkFloat sample ) = 0;
-00046 
-00048   virtual void tick( const StkFrames& frames ) = 0;
-00049 
-00050  protected:
-00051 
-00052   // Check for sample clipping and clamp.
-00053   StkFloat& clipTest( StkFloat& sample );
-00054 
-00055   StkFrames data_;
-00056   unsigned long frameCounter_;
-00057   bool clipping_;
-00058 
-00059 };
-00060 
-00061 inline StkFloat& WvOut :: clipTest( StkFloat& sample )
-00062 {
-00063   bool clip = false;
-00064   if ( sample > 1.0 ) {
-00065     sample = 1.0;
-00066     clip = true;
-00067   }
-00068   else if ( sample < -1.0 ) {
-00069     sample = -1.0;
-00070     clip = true;
-00071   }
-00072 
-00073   if ( clip == true && clipping_ == false ) {
-00074     // First occurrence of clipping since instantiation or reset.
-00075     clipping_ = true;
-00076     oStream_ << "WvOut: data value(s) outside +-1.0 detected ... clamping at outer bound!";
-00077     handleError( StkError::WARNING );
-00078   }
-00079 
-00080   return sample;
-00081 }
-00082 
-00083 } // stk namespace
-00084 
-00085 #endif
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/_formulas.tex b/source/StkUGens/stk-4.4.4/doc/html/_formulas.tex deleted file mode 100644 index f7927c5438..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/_formulas.tex +++ /dev/null @@ -1,8 +0,0 @@ -\documentclass{article} -\usepackage{epsfig} -\pagestyle{empty} -\begin{document} -$output = gain * (a1 * input + a2 * input^2 + a3 * input^3)$ -\pagebreak - -\end{document} diff --git a/source/StkUGens/stk-4.4.4/doc/html/annotated.html b/source/StkUGens/stk-4.4.4/doc/html/annotated.html deleted file mode 100644 index bff7ceb5ef..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/annotated.html +++ /dev/null @@ -1,134 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

Class List

Here are the classes, structs, unions and interfaces with brief descriptions: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
stk::ADSRSTK ADSR envelope class
stk::AsympSTK asymptotic curve envelope class
stk::BandedWGBanded waveguide modeling class
stk::BeeThreeSTK Hammond-oid organ FM synthesis instrument
stk::BiQuadSTK biquad (two-pole, two-zero) filter class
stk::BlitSTK band-limited impulse train class
stk::BlitSawSTK band-limited sawtooth wave class
stk::BlitSquareSTK band-limited square wave class
stk::BlowBotlSTK blown bottle instrument class
stk::BlowHoleSTK clarinet physical model with one register hole and one tonehole
stk::BowedSTK bowed string instrument class
stk::BowTableSTK bowed string table class
stk::BrassSTK simple brass instrument class
stk::ChorusSTK chorus effect class
stk::ClarinetSTK clarinet physical model class
stk::CubicSTK cubic non-linearity class
stk::DelaySTK non-interpolating delay line class
stk::DelayASTK allpass interpolating delay line class
stk::DelayLSTK linear interpolating delay line class
RtAudio::DeviceInfoThe public device information structure for returning queried values
stk::DrummerSTK drum sample player class
stk::EchoSTK echo effect class
stk::EffectSTK abstract effects parent class
stk::EnvelopeSTK linear line envelope class
stk::FileLoopSTK file looping / oscillator class
stk::FileReadSTK audio file input class
stk::FileWriteSTK audio file output class
stk::FileWvInSTK audio file input class
stk::FileWvOutSTK audio file output class
stk::FilterSTK abstract filter class
stk::FirSTK general finite impulse response filter class
stk::FluteSTK flute physical model class
stk::FMSTK abstract FM synthesis base class
stk::FMVoicesSTK singing FM synthesis instrument
stk::FormSwepSTK sweepable formant filter class
stk::FreeVerbJezar at Dreampoint's FreeVerb, implemented in STK
stk::FunctionSTK abstract function parent class
stk::GeneratorSTK abstract unit generator parent class
stk::GranulateSTK granular synthesis class
stk::GuitarSTK guitar model class
stk::HevyMetlSTK heavy metal FM synthesis instrument
stk::IirSTK general infinite impulse response filter class
stk::InetWvInSTK internet streaming input class
stk::InetWvOutSTK internet streaming output class
stk::InstrmntSTK instrument abstract base class
stk::JCRevJohn Chowning's reverberator class
stk::JetTableSTK jet table class
stk::LentPitShiftPitch shifter effect class based on the Lent algorithm
stk::MandolinSTK mandolin instrument model class
stk::Mesh2DTwo-dimensional rectilinear waveguide mesh class
stk::Skini::MessageA message structure to store and pass parsed SKINI messages
stk::MessagerSTK input control message parser
stk::MidiFileInA standard MIDI file reading/parsing class
stk::ModalSTK resonance model abstract base class
stk::ModalBarSTK resonant bar instrument class
stk::ModulateSTK periodic/random modulator
stk::MoogSTK moog-like swept filter sampling synthesis class
stk::MutexSTK mutex class
stk::NoiseSTK noise generator
stk::NRevCCRMA's NRev reverberator class
stk::OnePoleSTK one-pole filter class
stk::OneZeroSTK one-zero filter class
stk::PercFlutSTK percussive flute FM synthesis instrument
stk::PhonemesSTK phonemes table
stk::PitShiftSTK simple pitch shifter effect class
stk::PluckedSTK basic plucked string class
stk::PoleZeroSTK one-pole, one-zero filter class
stk::PRCRevPerry's simple reverberator class
stk::ReedTableSTK reed table class
stk::ResonateSTK noise driven formant filter
stk::RhodeySTK Fender Rhodes electric piano FM synthesis instrument
RtAudioRealtime audio i/o C++ classes
RtErrorException handling class for RtAudio & RtMidi
RtMidiAn abstract base class for realtime MIDI input/output
RtMidiInA realtime MIDI input class
RtMidiOutA realtime MIDI output class
stk::RtWvInSTK realtime audio (blocking) input class
stk::RtWvOutSTK realtime audio (blocking) output class
stk::SamplerSTK sampling synthesis abstract base class
stk::SaxofonySTK faux conical bore reed instrument class
stk::ShakersPhISEM and PhOLIES class
stk::SimpleSTK wavetable/noise instrument
stk::SineWaveSTK sinusoid oscillator class
stk::SingWaveSTK "singing" looped soundfile class
stk::SitarSTK sitar string model class
stk::SkiniSTK SKINI parsing class
stk::SocketSTK internet socket abstract base class
stk::SphereSTK sphere class
stk::StifKarpSTK plucked stiff string instrument
stk::StkSTK base class
stk::StkErrorSTK error handling class
stk::StkFramesAn STK class to handle vectorized audio data
RtAudio::StreamOptionsThe structure for specifying stream options
RtAudio::StreamParametersThe structure for specifying input or ouput stream parameters
stk::TapDelaySTK non-interpolating tapped delay line class
stk::TcpClientSTK TCP socket client class
stk::TcpServerSTK TCP socket server class
stk::ThreadSTK thread class
stk::TubeBellSTK tubular bell (orchestral chime) FM synthesis instrument
stk::TwangSTK enhanced plucked string class
stk::TwoPoleSTK two-pole filter class
stk::TwoZeroSTK two-zero filter class
stk::UdpSocketSTK UDP socket server/client class
stk::Vector3DSTK 3D vector class
stk::VoicerSTK voice manager class
stk::VoicFormFour formant synthesis instrument
stk::WhistleSTK police/referee whistle instrument class
stk::WurleySTK Wurlitzer electric piano FM synthesis instrument
stk::WvInSTK audio input abstract base class
stk::WvOutSTK audio output abstract base class
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/ccrma.gif b/source/StkUGens/stk-4.4.4/doc/html/ccrma.gif deleted file mode 100644 index f8a138538a87e78406e2269977d110062b1f12ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8305 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 - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtAudio Member List

This is the complete list of members for RtAudio, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
abortStream(void)RtAudio [inline]
Api enum nameRtAudio
closeStream(void)RtAudio [inline]
getCompiledApi(std::vector< RtAudio::Api > &apis)RtAudio [static]
getCurrentApi(void)RtAudio [inline]
getDefaultInputDevice(void)RtAudio [inline]
getDefaultOutputDevice(void)RtAudio [inline]
getDeviceCount(void)RtAudio [inline]
getDeviceInfo(unsigned int device)RtAudio [inline]
getStreamLatency(void)RtAudio [inline]
getStreamSampleRate(void)RtAudio [inline]
getStreamTime(void)RtAudio [inline]
isStreamOpen(void) const RtAudio [inline]
isStreamRunning(void) const RtAudio [inline]
LINUX_ALSA enum valueRtAudio
LINUX_OSS enum valueRtAudio
LINUX_PULSE enum valueRtAudio
MACOSX_CORE enum valueRtAudio
openStream(RtAudio::StreamParameters *outputParameters, RtAudio::StreamParameters *inputParameters, RtAudioFormat format, unsigned int sampleRate, unsigned int *bufferFrames, RtAudioCallback callback, void *userData=NULL, RtAudio::StreamOptions *options=NULL)RtAudio
RtAudio(RtAudio::Api api=UNSPECIFIED)RtAudio
RTAUDIO_DUMMY enum valueRtAudio
showWarnings(bool value=true)RtAudio [inline]
startStream(void)RtAudio [inline]
stopStream(void)RtAudio [inline]
UNIX_JACK enum valueRtAudio
UNSPECIFIED enum valueRtAudio
WINDOWS_ASIO enum valueRtAudio
WINDOWS_DS enum valueRtAudio
~RtAudio()RtAudio
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtAudio.html b/source/StkUGens/stk-4.4.4/doc/html/classRtAudio.html deleted file mode 100644 index 308fd37f69..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classRtAudio.html +++ /dev/null @@ -1,581 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtAudio Class Reference

-

Realtime audio i/o C++ classes. -More...

- -

#include <RtAudio.h>

- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Classes

struct  DeviceInfo
 The public device information structure for returning queried values. More...
struct  StreamOptions
 The structure for specifying stream options. More...
struct  StreamParameters
 The structure for specifying input or ouput stream parameters. More...

Public Types

enum  Api {
-  UNSPECIFIED, -LINUX_ALSA, -LINUX_PULSE, -LINUX_OSS, -
-  UNIX_JACK, -MACOSX_CORE, -WINDOWS_ASIO, -WINDOWS_DS, -
-  RTAUDIO_DUMMY -
- }
 

Audio API specifier arguments.

- More...

Public Member Functions

 RtAudio (RtAudio::Api api=UNSPECIFIED) throw ()
 The class constructor.
 ~RtAudio () throw ()
 The destructor.
-RtAudio::Api getCurrentApi (void) throw ()
 Returns the audio API specifier for the current instance of RtAudio.
unsigned int getDeviceCount (void) throw ()
 A public function that queries for the number of audio devices available.
RtAudio::DeviceInfo getDeviceInfo (unsigned int device)
 Return an RtAudio::DeviceInfo structure for a specified device number.
unsigned int getDefaultOutputDevice (void) throw ()
 A function that returns the index of the default output device.
unsigned int getDefaultInputDevice (void) throw ()
 A function that returns the index of the default input device.
void openStream (RtAudio::StreamParameters *outputParameters, RtAudio::StreamParameters *inputParameters, RtAudioFormat format, unsigned int sampleRate, unsigned int *bufferFrames, RtAudioCallback callback, void *userData=NULL, RtAudio::StreamOptions *options=NULL)
 A public function for opening a stream with the specified parameters.
void closeStream (void) throw ()
 A function that closes a stream and frees any associated stream memory.
void startStream (void)
 A function that starts a stream.
void stopStream (void)
 Stop a stream, allowing any samples remaining in the output queue to be played.
void abortStream (void)
 Stop a stream, discarding any samples remaining in the input/output queue.
-bool isStreamOpen (void) const throw ()
 Returns true if a stream is open and false if not.
-bool isStreamRunning (void) const throw ()
 Returns true if the stream is running and false if it is stopped or not open.
double getStreamTime (void)
 Returns the number of elapsed seconds since the stream was started.
long getStreamLatency (void)
 Returns the internal stream latency in sample frames.
unsigned int getStreamSampleRate (void)
 Returns actual sample rate in use by the stream.
-void showWarnings (bool value=true) throw ()
 Specify whether warning messages should be printed to stderr.

Static Public Member Functions

static void getCompiledApi (std::vector< RtAudio::Api > &apis) throw ()
 A static function to determine the available compiled audio APIs.
-

Detailed Description

-

Realtime audio i/o C++ classes.

-

RtAudio provides a common API (Application Programming Interface) for realtime audio input/output across Linux (native ALSA, Jack, and OSS), Macintosh OS X (CoreAudio and Jack), and Windows (DirectSound and ASIO) operating systems.

-

RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/

-

RtAudio: realtime audio i/o C++ classes Copyright (c) 2001-2012 Gary P. Scavone

-

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

-

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

-

Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. This is, however, not a binding provision of this license.

-

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

-

Member Enumeration Documentation

- -
-
- - - - -
enum RtAudio::Api
-
-
- -

Audio API specifier arguments.

-
Enumerator:
- - - - - - - - - -
UNSPECIFIED  -

Search for a working compiled API.

-
LINUX_ALSA  -

The Advanced Linux Sound Architecture API.

-
LINUX_PULSE  -

The Linux PulseAudio API.

-
LINUX_OSS  -

The Linux Open Sound System API.

-
UNIX_JACK  -

The Jack Low-Latency Audio Server API.

-
MACOSX_CORE  -

Macintosh OS-X Core Audio API.

-
WINDOWS_ASIO  -

The Steinberg Audio Stream I/O API.

-
WINDOWS_DS  -

The Microsoft Direct Sound API.

-
RTAUDIO_DUMMY  -

A compilable but non-functional API.

-
-
-
- -

00210            {
-00211     UNSPECIFIED,    
-00212     LINUX_ALSA,     
-00213     LINUX_PULSE,    
-00214     LINUX_OSS,      
-00215     UNIX_JACK,      
-00216     MACOSX_CORE,    
-00217     WINDOWS_ASIO,   
-00218     WINDOWS_DS,     
-00219     RTAUDIO_DUMMY   
-00220   };
-

- -
-
-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
RtAudio::RtAudio (RtAudio::Api  api = UNSPECIFIED )  throw ()
-
-
- -

The class constructor.

-

The constructor performs minor initialization tasks. No exceptions can be thrown.

-

If no API argument is specified and multiple API support has been compiled, the default order of use is JACK, ALSA, OSS (Linux systems) and ASIO, DS (Windows systems).

- -
-
- -
-
- - - - - - - - -
RtAudio::~RtAudio ( )  throw ()
-
-
- -

The destructor.

-

If a stream is running or open, it will be stopped and closed automatically.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
static void RtAudio::getCompiledApi (std::vector< RtAudio::Api > &  apis )  throw () [static]
-
-
- -

A static function to determine the available compiled audio APIs.

-

The values returned in the std::vector can be compared against the enumerated list values. Note that there can be more than one API compiled for certain operating systems.

- -
-
- -
-
- - - - - - - - - -
unsigned int RtAudio::getDeviceCount (void  )  throw () [inline]
-
-
- -

A public function that queries for the number of audio devices available.

-

This function performs a system query of available devices each time it is called, thus supporting devices connected after instantiation. If a system error occurs during processing, a warning will be issued.

- -

00718 { return rtapi_->getDeviceCount(); }
-

- -
-
- -
-
- - - - - - - - - -
RtAudio::DeviceInfo RtAudio::getDeviceInfo (unsigned int  device )  [inline]
-
-
- -

Return an RtAudio::DeviceInfo structure for a specified device number.

-

Any device integer between 0 and getDeviceCount() - 1 is valid. If an invalid argument is provided, an RtError (type = INVALID_USE) will be thrown. If a device is busy or otherwise unavailable, the structure member "probed" will have a value of "false" and all other members are undefined. If the specified device is the current default input or output device, the corresponding "isDefault" member will have a value of "true".

- -

00719 { return rtapi_->getDeviceInfo( device ); }
-

- -
-
- -
-
- - - - - - - - - -
unsigned int RtAudio::getDefaultOutputDevice (void  )  throw () [inline]
-
-
- -

A function that returns the index of the default output device.

-

If the underlying audio API does not provide a "default - device", or if no devices are available, the return value will be 0. Note that this is a valid device identifier and it is the client's responsibility to verify that a device is available before attempting to open a stream.

- -

00721 { return rtapi_->getDefaultOutputDevice(); }
-

- -
-
- -
-
- - - - - - - - - -
unsigned int RtAudio::getDefaultInputDevice (void  )  throw () [inline]
-
-
- -

A function that returns the index of the default input device.

-

If the underlying audio API does not provide a "default - device", or if no devices are available, the return value will be 0. Note that this is a valid device identifier and it is the client's responsibility to verify that a device is available before attempting to open a stream.

- -

00720 { return rtapi_->getDefaultInputDevice(); }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RtAudio::openStream (RtAudio::StreamParameters outputParameters,
RtAudio::StreamParameters inputParameters,
RtAudioFormat  format,
unsigned int  sampleRate,
unsigned int *  bufferFrames,
RtAudioCallback  callback,
void *  userData = NULL,
RtAudio::StreamOptions options = NULL 
)
-
-
- -

A public function for opening a stream with the specified parameters.

-

An RtError (type = SYSTEM_ERROR) is thrown if a stream cannot be opened with the specified parameters or an error occurs during processing. An RtError (type = INVALID_USE) is thrown if any invalid device ID or channel number parameters are specified.

-
Parameters:
- - - - - - - - - -
outputParameters Specifies output stream parameters to use when opening a stream, including a device ID, number of channels, and starting channel number. For input-only streams, this argument should be NULL. The device ID is an index value between 0 and getDeviceCount() - 1.
inputParameters Specifies input stream parameters to use when opening a stream, including a device ID, number of channels, and starting channel number. For output-only streams, this argument should be NULL. The device ID is an index value between 0 and getDeviceCount() - 1.
format An RtAudioFormat specifying the desired sample data format.
sampleRate The desired sample rate (sample frames per second).
*bufferFrames A pointer to a value indicating the desired internal buffer size in sample frames. The actual value used by the device is returned via the same pointer. A value of zero can be specified, in which case the lowest allowable value is determined.
callback A client-defined function that will be invoked when input data is available and/or output data is needed.
userData An optional pointer to data that can be accessed from within the callback function.
options An optional pointer to a structure containing various global stream options, including a list of OR'ed RtAudioStreamFlags and a suggested number of stream buffers that can be used to control stream latency. More buffers typically result in more robust performance, though at a cost of greater latency. If a value of zero is specified, a system-specific median value is chosen. If the RTAUDIO_MINIMIZE_LATENCY flag bit is set, the lowest allowable value is used. The actual value used is returned via the structure argument. The parameter is API dependent.
-
-
- -
-
- -
-
- - - - - - - - - -
void RtAudio::closeStream (void  )  throw () [inline]
-
-
- -

A function that closes a stream and frees any associated stream memory.

-

If a stream is not open, this function issues a warning and returns (no exception is thrown).

- -

00722 { return rtapi_->closeStream(); }
-

- -
-
- -
-
- - - - - - - - - -
void RtAudio::startStream (void  )  [inline]
-
-
- -

A function that starts a stream.

-

An RtError (type = SYSTEM_ERROR) is thrown if an error occurs during processing. An RtError (type = INVALID_USE) is thrown if a stream is not open. A warning is issued if the stream is already running.

- -

00723 { return rtapi_->startStream(); }
-

- -
-
- -
-
- - - - - - - - - -
void RtAudio::stopStream (void  )  [inline]
-
-
- -

Stop a stream, allowing any samples remaining in the output queue to be played.

-

An RtError (type = SYSTEM_ERROR) is thrown if an error occurs during processing. An RtError (type = INVALID_USE) is thrown if a stream is not open. A warning is issued if the stream is already stopped.

- -

00724 { return rtapi_->stopStream(); }
-

- -
-
- -
-
- - - - - - - - - -
void RtAudio::abortStream (void  )  [inline]
-
-
- -

Stop a stream, discarding any samples remaining in the input/output queue.

-

An RtError (type = SYSTEM_ERROR) is thrown if an error occurs during processing. An RtError (type = INVALID_USE) is thrown if a stream is not open. A warning is issued if the stream is already stopped.

- -

00725 { return rtapi_->abortStream(); }
-

- -
-
- -
-
- - - - - - - - - -
double RtAudio::getStreamTime (void  )  [inline]
-
-
- -

Returns the number of elapsed seconds since the stream was started.

-

If a stream is not open, an RtError (type = INVALID_USE) will be thrown.

- -

00730 { return rtapi_->getStreamTime(); }
-

- -
-
- -
-
- - - - - - - - - -
long RtAudio::getStreamLatency (void  )  [inline]
-
-
- -

Returns the internal stream latency in sample frames.

-

The stream latency refers to delay in audio input and/or output caused by internal buffering by the audio system and/or hardware. For duplex streams, the returned value will represent the sum of the input and output latencies. If a stream is not open, an RtError (type = INVALID_USE) will be thrown. If the API does not report latency, the return value will be zero.

- -

00728 { return rtapi_->getStreamLatency(); }
-

- -
-
- -
-
- - - - - - - - - -
unsigned int RtAudio::getStreamSampleRate (void  )  [inline]
-
-
- -

Returns actual sample rate in use by the stream.

-

On some systems, the sample rate used may be slightly different than that specified in the stream parameters. If a stream is not open, an RtError (type = INVALID_USE) will be thrown.

- -

00729 { return rtapi_->getStreamSampleRate(); };
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtError-members.html b/source/StkUGens/stk-4.4.4/doc/html/classRtError-members.html deleted file mode 100644 index fe24e1b1ac..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classRtError-members.html +++ /dev/null @@ -1,41 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtError Member List

This is the complete list of members for RtError, including all inherited members. - - - - - - - - - - - - - - - - - - -
DEBUG_WARNING enum valueRtError
DRIVER_ERROR enum valueRtError
getMessage(void) const RtError [inline, virtual]
getType(void) const RtError [inline, virtual]
INVALID_DEVICE enum valueRtError
INVALID_PARAMETER enum valueRtError
INVALID_USE enum valueRtError
MEMORY_ERROR enum valueRtError
NO_DEVICES_FOUND enum valueRtError
printMessage(void) const RtError [inline, virtual]
RtError(const std::string &message, Type type=RtError::UNSPECIFIED)RtError [inline]
SYSTEM_ERROR enum valueRtError
THREAD_ERROR enum valueRtError
Type enum nameRtError
UNSPECIFIED enum valueRtError
WARNING enum valueRtError
what(void) const RtError [inline, virtual]
~RtError(void)RtError [inline, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtError.html b/source/StkUGens/stk-4.4.4/doc/html/classRtError.html deleted file mode 100644 index 26a9a72e2f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classRtError.html +++ /dev/null @@ -1,145 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtError Class Reference

-

Exception handling class for RtAudio & RtMidi. -More...

- -

#include <RtError.h>

- -

Inherits std::exception.

- -

List of all members.

- - - - - - - - - - - - - - - - - -

Public Types

enum  Type {
-  WARNING, -DEBUG_WARNING, -UNSPECIFIED, -NO_DEVICES_FOUND, -
-  INVALID_DEVICE, -MEMORY_ERROR, -INVALID_PARAMETER, -INVALID_USE, -
-  DRIVER_ERROR, -SYSTEM_ERROR, -THREAD_ERROR -
- }
 

Defined RtError types.

- More...

Public Member Functions

RtError (const std::string &message, Type type=RtError::UNSPECIFIED) throw ()
 The constructor.
-virtual ~RtError (void) throw ()
 The destructor.
-virtual void printMessage (void) const throw ()
 Prints thrown error message to stderr.
-virtual const TypegetType (void) const throw ()
 Returns the thrown error message type.
-virtual const std::string & getMessage (void) const throw ()
 Returns the thrown error message string.
-virtual const char * what (void) const throw ()
 Returns the thrown error message as a c-style string.
-

Detailed Description

-

Exception handling class for RtAudio & RtMidi.

-

The RtError class is quite simple but it does allow errors to be "caught" by RtError::Type. See the RtAudio and RtMidi documentation to know which methods can throw an RtError.

-

Member Enumeration Documentation

- -
-
- - - - -
enum RtError::Type
-
-
- -

Defined RtError types.

-
Enumerator:
- - - - - - - - - - - -
WARNING  -

A non-critical error.

-
DEBUG_WARNING  -

A non-critical error which might be useful for debugging.

-
UNSPECIFIED  -

The default, unspecified error type.

-
NO_DEVICES_FOUND  -

No devices found on system.

-
INVALID_DEVICE  -

An invalid device ID was specified.

-
MEMORY_ERROR  -

An error occured during memory allocation.

-
INVALID_PARAMETER  -

An invalid parameter was specified to a function.

-
INVALID_USE  -

The function was called incorrectly.

-
DRIVER_ERROR  -

A system driver error occured.

-
SYSTEM_ERROR  -

A system error occured.

-
THREAD_ERROR  -

A thread error occured.

-
-
-
- -

00023             {
-00024     WARNING,           
-00025     DEBUG_WARNING,     
-00026     UNSPECIFIED,       
-00027     NO_DEVICES_FOUND,  
-00028     INVALID_DEVICE,    
-00029     MEMORY_ERROR,      
-00030     INVALID_PARAMETER, 
-00031     INVALID_USE,       
-00032     DRIVER_ERROR,      
-00033     SYSTEM_ERROR,      
-00034     THREAD_ERROR       
-00035   };
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidi-members.html b/source/StkUGens/stk-4.4.4/doc/html/classRtMidi-members.html deleted file mode 100644 index 70199aea1d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classRtMidi-members.html +++ /dev/null @@ -1,38 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtMidi Member List

This is the complete list of members for RtMidi, including all inherited members. - - - - - - - - - - - - - - - -
Api enum nameRtMidi
closePort(void)=0RtMidi [pure virtual]
error(RtError::Type type, std::string errorString)RtMidi [static]
getCompiledApi(std::vector< RtMidi::Api > &apis)RtMidi [static]
getPortCount()=0RtMidi [pure virtual]
getPortName(unsigned int portNumber=0)=0RtMidi [pure virtual]
LINUX_ALSA enum valueRtMidi
MACOSX_CORE enum valueRtMidi
openPort(unsigned int portNumber=0, const std::string portName=std::string("RtMidi"))=0RtMidi [pure virtual]
openVirtualPort(const std::string portName=std::string("RtMidi"))=0RtMidi [pure virtual]
RTMIDI_DUMMY enum valueRtMidi
UNIX_JACK enum valueRtMidi
UNSPECIFIED enum valueRtMidi
WINDOWS_KS enum valueRtMidi
WINDOWS_MM enum valueRtMidi
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidi.gif b/source/StkUGens/stk-4.4.4/doc/html/classRtMidi.gif deleted file mode 100644 index 7caa12bf559a33d909827cf28b74f7368dc2d2a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmVgMh73-9al^7Z!j`TO|$?EU`E0SqW^AVF^i4?;_*kQu{<$R0vWN3WvA zix@L%+=%}1-$9ASKo;~!P^2)E2uTJ+xr^mOmHu4PlIaj8Kb!ezqS6@=r#+sPfO7Mx z51r7HMg}Nd%CxD|r%eq&ol4c|hpJeqO3ljEserFw!-^eCwyfE+X9rwG%eJlCw@Tm2 zojX@;gaLH(>Ma|0uiw3PA>jQ>xbEP>h}i~ya5%AJvV9**4!hVv zL4yt}`ZL|i4K54dY(qdtMrhs-dSk13Vx1JE&cI@AE*8<-?ySG{2t~;Majytq& z+Pq22<_)`a^t8ftD~Iko`e^FJfq!3p{cH2#$*pe>?|rvyzS)(_S8uv{@$}A<;}?5g zI>T+^H?qxgd??<+vnv z2coBBh5I%6UV_r4=Uac671rVcNOtKLmtv0jW0{1JiDq73DiG$HhQXOwn*h8ir(0^? uiRYPm#@VNtQU0k{o`SN-XQ7JOiRf5#D!QnRT}3MCq*qO9>7`R80028MhK5=I diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidi.html b/source/StkUGens/stk-4.4.4/doc/html/classRtMidi.html deleted file mode 100644 index b7f0050c02..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classRtMidi.html +++ /dev/null @@ -1,164 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtMidi Class Reference

-

An abstract base class for realtime MIDI input/output. -More...

- -

#include <RtMidi.h>

-
-Inheritance diagram for RtMidi:
-
-
- - -RtMidiIn -RtMidiOut - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Types

enum  Api {
-  UNSPECIFIED, -MACOSX_CORE, -LINUX_ALSA, -UNIX_JACK, -
-  WINDOWS_MM, -WINDOWS_KS, -RTMIDI_DUMMY -
- }
 

MIDI API specifier arguments.

- More...

Public Member Functions

-virtual void openPort (unsigned int portNumber=0, const std::string portName=std::string("RtMidi"))=0
 Pure virtual openPort() function.
-virtual void openVirtualPort (const std::string portName=std::string("RtMidi"))=0
 Pure virtual openVirtualPort() function.
-virtual unsigned int getPortCount ()=0
 Pure virtual getPortCount() function.
-virtual std::string getPortName (unsigned int portNumber=0)=0
 Pure virtual getPortName() function.
-virtual void closePort (void)=0
 Pure virtual closePort() function.

Static Public Member Functions

static void getCompiledApi (std::vector< RtMidi::Api > &apis) throw ()
 A static function to determine the available compiled MIDI APIs.
-static void error (RtError::Type type, std::string errorString)
 A basic error reporting function for RtMidi classes.
-

Detailed Description

-

An abstract base class for realtime MIDI input/output.

-

This class implements some common functionality for the realtime MIDI input/output subclasses RtMidiIn and RtMidiOut.

-

RtMidi WWW site: http://music.mcgill.ca/~gary/rtmidi/

-

RtMidi: realtime MIDI i/o C++ classes Copyright (c) 2003-2012 Gary P. Scavone

-

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

-

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

-

Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. This is, however, not a binding provision of this license.

-

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

-

Member Enumeration Documentation

- -
-
- - - - -
enum RtMidi::Api
-
-
- -

MIDI API specifier arguments.

-
Enumerator:
- - - - - - - -
UNSPECIFIED  -

Search for a working compiled API.

-
MACOSX_CORE  -

Macintosh OS-X Core Midi API.

-
LINUX_ALSA  -

The Advanced Linux Sound Architecture API.

-
UNIX_JACK  -

The Jack Low-Latency MIDI Server API.

-
WINDOWS_MM  -

The Microsoft Multimedia MIDI API.

-
WINDOWS_KS  -

The Microsoft Kernel Streaming MIDI API.

-
RTMIDI_DUMMY  -

A compilable but non-functional API.

-
-
-
- -

00057            {
-00058     UNSPECIFIED,    
-00059     MACOSX_CORE,    
-00060     LINUX_ALSA,     
-00061     UNIX_JACK,      
-00062     WINDOWS_MM,     
-00063     WINDOWS_KS,     
-00064     RTMIDI_DUMMY    
-00065   };
-

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
static void RtMidi::getCompiledApi (std::vector< RtMidi::Api > &  apis )  throw () [static]
-
-
- -

A static function to determine the available compiled MIDI APIs.

-

The values returned in the std::vector can be compared against the enumerated list values. Note that there can be more than one API compiled for certain operating systems.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidi.png b/source/StkUGens/stk-4.4.4/doc/html/classRtMidi.png deleted file mode 100644 index 09220298c2c9a3bbb089359eff6a8d00911ae46d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmeAS@N?(olHy`uVBq!ia0vp^6M#5?gBeI3Ea0&NQW60^A+G=b{|7Sv|35H)ega4Z z7#}!rp!(4NCqOPoNswPKP#O%bo(eHyU|@9fba4!+V0?S`;<`f$0xTE!)c*We|Lq_? zE$U9FfWb`P9?_kLUvh0<-@g7r{JE)n7VrvjD81OOU}>Rof2y~s1%HT`o&OfA8|B^p zOpF&4mVCb|>(%#1^YXQ~3%N5Q+fUuvWhGcsOq^mxD1 z`KLE`%99mkOLxAvRuTTXHZ1%c-_~NSfW^+gw(n - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtMidiIn Member List

This is the complete list of members for RtMidiIn, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - -
Api enum nameRtMidi
cancelCallback()RtMidiIn [inline]
closePort(void)RtMidiIn [inline, virtual]
error(RtError::Type type, std::string errorString)RtMidi [static]
getCompiledApi(std::vector< RtMidi::Api > &apis)RtMidi [static]
getCurrentApi(void)RtMidiIn [inline]
getMessage(std::vector< unsigned char > *message)RtMidiIn [inline]
getPortCount()RtMidiIn [inline, virtual]
getPortName(unsigned int portNumber=0)RtMidiIn [inline, virtual]
ignoreTypes(bool midiSysex=true, bool midiTime=true, bool midiSense=true)RtMidiIn [inline]
LINUX_ALSA enum valueRtMidi
MACOSX_CORE enum valueRtMidi
openPort(unsigned int portNumber=0, const std::string portName=std::string("RtMidi Input"))RtMidiIn [inline, virtual]
openVirtualPort(const std::string portName=std::string("RtMidi Input"))RtMidiIn [inline, virtual]
RTMIDI_DUMMY enum valueRtMidi
RtMidiCallback typedefRtMidiIn
RtMidiIn(RtMidi::Api api=UNSPECIFIED, const std::string clientName=std::string("RtMidi Input Client"), unsigned int queueSizeLimit=100)RtMidiIn
setCallback(RtMidiCallback callback, void *userData=0)RtMidiIn [inline]
UNIX_JACK enum valueRtMidi
UNSPECIFIED enum valueRtMidi
WINDOWS_KS enum valueRtMidi
WINDOWS_MM enum valueRtMidi
~RtMidiIn(void)RtMidiIn
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn.gif b/source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn.gif deleted file mode 100644 index f4c5298b2935c203b697f0d549bd587b522bc39f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|(cNk%w1VL1R$0P+9;|Ns9000960z@MLBkN^MxkN^MxkifveA^8LW00000 zEC2ui0673q000C2IJ(^aFv=yWy*TU5yXs&la^Gm4-2R&WyA0d0emd zsN8sTd1rMPcW{Jpigaj8hJP`UR*;gF7KfHCn3*e^oF|^2BcY-)l%<*zs;jII0I#sI zva_@Xw70mqy1KTzzQ4c*!obAEv%3N%g?#Z$T zYPavW>1zfasH%f z(uPl&H*FTR$rR?%Svi|Fy%}?<)2kzsW`#Pm%+9M$wSL8_ljYE|V#R`0Ta_zRpk%{N zmCClP%d=zK&c#|+>fN_Ht*)hORV~=RDUl{tyclugr;np1mYkCENsgE^YtEPe06W7c B^hE#w diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn.html b/source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn.html deleted file mode 100644 index 792d2c1f9f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn.html +++ /dev/null @@ -1,327 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtMidiIn Class Reference

-

A realtime MIDI input class. -More...

- -

#include <RtMidi.h>

-
-Inheritance diagram for RtMidiIn:
-
-
- - -RtMidi - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Types

-typedef void(* RtMidiCallback )(double timeStamp, std::vector< unsigned char > *message, void *userData)
 User callback function type definition.

Public Member Functions

 RtMidiIn (RtMidi::Api api=UNSPECIFIED, const std::string clientName=std::string("RtMidi Input Client"), unsigned int queueSizeLimit=100)
 Default constructor that allows an optional api, client name and queue size.
~RtMidiIn (void) throw ()
 If a MIDI connection is still open, it will be closed by the destructor.
-RtMidi::Api getCurrentApi (void) throw ()
 Returns the MIDI API specifier for the current instance of RtMidiIn.
void openPort (unsigned int portNumber=0, const std::string portName=std::string("RtMidi Input"))
 Open a MIDI input connection.
void openVirtualPort (const std::string portName=std::string("RtMidi Input"))
 Create a virtual input port, with optional name, to allow software connections (OS X and ALSA only).
void setCallback (RtMidiCallback callback, void *userData=0)
 Set a callback function to be invoked for incoming MIDI messages.
void cancelCallback ()
 Cancel use of the current callback function (if one exists).
-void closePort (void)
 Close an open MIDI connection (if one exists).
-unsigned int getPortCount ()
 Return the number of available MIDI input ports.
std::string getPortName (unsigned int portNumber=0)
 Return a string identifier for the specified MIDI input port number.
void ignoreTypes (bool midiSysex=true, bool midiTime=true, bool midiSense=true)
 Specify whether certain MIDI message types should be queued or ignored during input.
double getMessage (std::vector< unsigned char > *message)
 Fill the user-provided vector with the data bytes for the next available MIDI message in the input queue and return the event delta-time in seconds.
-

Detailed Description

-

A realtime MIDI input class.

-

This class provides a common, platform-independent API for realtime MIDI input. It allows access to a single MIDI input port. Incoming MIDI messages are either saved to a queue for retrieval using the getMessage() function or immediately passed to a user-specified callback function. Create multiple instances of this class to connect to more than one MIDI device at the same time. With the OS-X and Linux ALSA MIDI APIs, it is also possible to open a virtual input port to which other MIDI software clients can connect.

-

by Gary P. Scavone, 2003-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
RtMidiIn::RtMidiIn (RtMidi::Api  api = UNSPECIFIED,
const std::string  clientName = std::string("RtMidi Input Client"),
unsigned int  queueSizeLimit = 100 
)
-
-
- -

Default constructor that allows an optional api, client name and queue size.

-

An exception will be thrown if a MIDI system initialization error occurs. The queue size defines the maximum number of messages that can be held in the MIDI queue (when not using a callback function). If the queue size limit is reached, incoming messages will be ignored.

-

If no API argument is specified and multiple API support has been compiled, the default order of use is JACK, ALSA (Linux) and CORE, Jack (OS-X).

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void RtMidiIn::openPort (unsigned int  portNumber = 0,
const std::string  portName = std::string( "RtMidi Input" ) 
) [inline, virtual]
-
-
- -

Open a MIDI input connection.

-

An optional port number greater than 0 can be specified. Otherwise, the default or first port found is opened.

- -

Implements RtMidi.

- -

00427 { return rtapi_->openPort( portNumber, portName ); }
-

- -
-
- -
-
- - - - - - - - - -
void RtMidiIn::openVirtualPort (const std::string  portName = std::string( "RtMidi Input" ) )  [inline, virtual]
-
-
- -

Create a virtual input port, with optional name, to allow software connections (OS X and ALSA only).

-

This function creates a virtual MIDI input port to which other software applications can connect. This type of functionality is currently only supported by the Macintosh OS-X and Linux ALSA APIs (the function does nothing for the other APIs).

- -

Implements RtMidi.

- -

00428 { return rtapi_->openVirtualPort( portName ); }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void RtMidiIn::setCallback (RtMidiCallback  callback,
void *  userData = 0 
) [inline]
-
-
- -

Set a callback function to be invoked for incoming MIDI messages.

-

The callback function will be called whenever an incoming MIDI message is received. While not absolutely necessary, it is best to set the callback function before opening a MIDI port to avoid leaving some messages in the queue.

- -

00430 { return rtapi_->setCallback( callback, userData ); }
-

- -
-
- -
-
- - - - - - - - - -
void RtMidiIn::cancelCallback (void  )  [inline]
-
-
- -

Cancel use of the current callback function (if one exists).

-

Subsequent incoming MIDI messages will be written to the queue and can be retrieved with the getMessage function.

- -

00431 { return rtapi_->cancelCallback(); }
-

- -
-
- -
-
- - - - - - - - - -
std::string RtMidiIn::getPortName (unsigned int  portNumber = 0 )  [inline, virtual]
-
-
- -

Return a string identifier for the specified MIDI input port number.

-

An empty string is returned if an invalid port specifier is provided.

- -

Implements RtMidi.

- -

00433 { return rtapi_->getPortName( portNumber ); }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void RtMidiIn::ignoreTypes (bool  midiSysex = true,
bool  midiTime = true,
bool  midiSense = true 
) [inline]
-
-
- -

Specify whether certain MIDI message types should be queued or ignored during input.

-

o By default, MIDI timing and active sensing messages are ignored during message input because of their relative high data rates. MIDI sysex messages are ignored by default as well. Variable values of "true" imply that the respective message type will be ignored.

- -

00434 { return rtapi_->ignoreTypes( midiSysex, midiTime, midiSense ); }
-

- -
-
- -
-
- - - - - - - - - -
double RtMidiIn::getMessage (std::vector< unsigned char > *  message )  [inline]
-
-
- -

Fill the user-provided vector with the data bytes for the next available MIDI message in the input queue and return the event delta-time in seconds.

-

This function returns immediately whether a new message is available or not. A valid message is indicated by a non-zero vector size. An exception is thrown if an error occurs during message retrieval or an input connection was not previously established.

- -

00435 { return rtapi_->getMessage( message ); }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn.png b/source/StkUGens/stk-4.4.4/doc/html/classRtMidiIn.png deleted file mode 100644 index 11c83167d8431c683742b6bdca8d9aaf590bdedc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^mOvc9!3-p)*y^eRDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPYfMRDnT^vIy7~kH#$ah$QgEc_U_s@U-d(5I2 zwqD(&>#e2I?PnQu=34r#MUK+PlYBWD64DG7>%F|9E9Y^#A?0mz9-j(>zT)E&U&dd) z=V!dwJo)jgX-~NC?Of=e5?psBed<y(1+KjSMKc=nsFUljB1pUX6%rHPSVQ;t22 ze`l6@YKmrXU7(Uw%Y)B4>Q8rdI8;sZO}%!_;H6PYrhG}U0%HZIlQsJU{(n1*7f)UOxFF5j%nYV(@hJb6Mw< G&;$V1eTW7C diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut-members.html b/source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut-members.html deleted file mode 100644 index 61e3688ee9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut-members.html +++ /dev/null @@ -1,42 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtMidiOut Member List

This is the complete list of members for RtMidiOut, including all inherited members. - - - - - - - - - - - - - - - - - - - -
Api enum nameRtMidi
closePort(void)RtMidiOut [inline, virtual]
error(RtError::Type type, std::string errorString)RtMidi [static]
getCompiledApi(std::vector< RtMidi::Api > &apis)RtMidi [static]
getCurrentApi(void)RtMidiOut [inline]
getPortCount(void)RtMidiOut [inline, virtual]
getPortName(unsigned int portNumber=0)RtMidiOut [inline, virtual]
LINUX_ALSA enum valueRtMidi
MACOSX_CORE enum valueRtMidi
openPort(unsigned int portNumber=0, const std::string portName=std::string("RtMidi Output"))RtMidiOut [inline, virtual]
openVirtualPort(const std::string portName=std::string("RtMidi Output"))RtMidiOut [inline, virtual]
RTMIDI_DUMMY enum valueRtMidi
RtMidiOut(RtMidi::Api api=UNSPECIFIED, const std::string clientName=std::string("RtMidi Output Client"))RtMidiOut
sendMessage(std::vector< unsigned char > *message)RtMidiOut [inline]
UNIX_JACK enum valueRtMidi
UNSPECIFIED enum valueRtMidi
WINDOWS_KS enum valueRtMidi
WINDOWS_MM enum valueRtMidi
~RtMidiOut(void)RtMidiOut
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut.gif b/source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut.gif deleted file mode 100644 index 5041efa0d547b1ff8b937e1eaf24b1c20416b4b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmVt^gLtMM1y_Z3*X*7ukn zs^$R-ghyktqcjar#vN`ML@uo(A~VSA0;Sy}4=d7gaJewptJZ~`Pcb<%E-*kxyr=O(#X)u)7Qe)(b(L++uh*L;p5`u z=E>*h-|5}!?AY$_)A91o^!3d5_{aMD#r^(*0Sx$SAi-V+50+Dyk72Wf4u?ggHj!UN zV-P21jJUSZVMm4^fuR{mvZTqAC{voeDC`EyU@l+&iYc=f&6>Gx(i&MSz|NdMZ}|i; zbSI9PxO5V=HMD6_qc)Q=_4O30(5Xjt#w_ZxY0#-le;#F8HEd9?T*G=Ly0+|EwMpHg z=_!_OTe@(sntj{TE#AC7@9sS-b+FmKg$ctIoHj4m#&Qz_{>%97Q^)xF*0RTILdIC`Z diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut.html b/source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut.html deleted file mode 100644 index f613a999ed..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut.html +++ /dev/null @@ -1,215 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtMidiOut Class Reference

-

A realtime MIDI output class. -More...

- -

#include <RtMidi.h>

-
-Inheritance diagram for RtMidiOut:
-
-
- - -RtMidi - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 RtMidiOut (RtMidi::Api api=UNSPECIFIED, const std::string clientName=std::string("RtMidi Output Client"))
 Default constructor that allows an optional client name.
~RtMidiOut (void) throw ()
 The destructor closes any open MIDI connections.
-RtMidi::Api getCurrentApi (void) throw ()
 Returns the MIDI API specifier for the current instance of RtMidiOut.
void openPort (unsigned int portNumber=0, const std::string portName=std::string("RtMidi Output"))
 Open a MIDI output connection.
-void closePort (void)
 Close an open MIDI connection (if one exists).
void openVirtualPort (const std::string portName=std::string("RtMidi Output"))
 Create a virtual output port, with optional name, to allow software connections (OS X and ALSA only).
-unsigned int getPortCount (void)
 Return the number of available MIDI output ports.
std::string getPortName (unsigned int portNumber=0)
 Return a string identifier for the specified MIDI port type and number.
void sendMessage (std::vector< unsigned char > *message)
 Immediately send a single message out an open MIDI output port.
-

Detailed Description

-

A realtime MIDI output class.

-

This class provides a common, platform-independent API for MIDI output. It allows one to probe available MIDI output ports, to connect to one such port, and to send MIDI bytes immediately over the connection. Create multiple instances of this class to connect to more than one MIDI device at the same time. With the OS-X and Linux ALSA MIDI APIs, it is also possible to open a virtual port to which other MIDI software clients can connect.

-

by Gary P. Scavone, 2003-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
RtMidiOut::RtMidiOut (RtMidi::Api  api = UNSPECIFIED,
const std::string  clientName = std::string("RtMidi Output Client") 
)
-
-
- -

Default constructor that allows an optional client name.

-

An exception will be thrown if a MIDI system initialization error occurs.

-

If no API argument is specified and multiple API support has been compiled, the default order of use is JACK, ALSA (Linux) and CORE, Jack (OS-X).

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void RtMidiOut::openPort (unsigned int  portNumber = 0,
const std::string  portName = std::string( "RtMidi Output" ) 
) [inline, virtual]
-
-
- -

Open a MIDI output connection.

-

An optional port number greater than 0 can be specified. Otherwise, the default or first port found is opened. An exception is thrown if an error occurs while attempting to make the port connection.

- -

Implements RtMidi.

- -

00438 { return rtapi_->openPort( portNumber, portName ); }
-

- -
-
- -
-
- - - - - - - - - -
void RtMidiOut::openVirtualPort (const std::string  portName = std::string( "RtMidi Output" ) )  [inline, virtual]
-
-
- -

Create a virtual output port, with optional name, to allow software connections (OS X and ALSA only).

-

This function creates a virtual MIDI output port to which other software applications can connect. This type of functionality is currently only supported by the Macintosh OS-X and Linux ALSA APIs (the function does nothing with the other APIs). An exception is thrown if an error occurs while attempting to create the virtual port.

- -

Implements RtMidi.

- -

00439 { return rtapi_->openVirtualPort( portName ); }
-

- -
-
- -
-
- - - - - - - - - -
std::string RtMidiOut::getPortName (unsigned int  portNumber = 0 )  [inline, virtual]
-
-
- -

Return a string identifier for the specified MIDI port type and number.

-

An empty string is returned if an invalid port specifier is provided.

- -

Implements RtMidi.

- -

00442 { return rtapi_->getPortName( portNumber ); }
-

- -
-
- -
-
- - - - - - - - - -
void RtMidiOut::sendMessage (std::vector< unsigned char > *  message )  [inline]
-
-
- -

Immediately send a single message out an open MIDI output port.

-

An exception is thrown if an error occurs during output or an output connection was not previously established.

- -

00443 { return rtapi_->sendMessage( message ); }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut.png b/source/StkUGens/stk-4.4.4/doc/html/classRtMidiOut.png deleted file mode 100644 index ae613f8cba1a5f109fc6d374fd15b1d20fecf549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^&OjW%!3-oz!z@aGlth3}i0l9V|AEZ^{}0TcpD+Q) z0^^rQ$!xF$h@yCDvd(DPr z5kZqALT!1br`&v)`O4%~Xy2bni&MmVmohSFEL|XSBWyqKYvxr-gg+U~bKUG@5ec~8{m z6KspG*=#!eW9D;hd>l_xrb* j+lcQgHhJb&_m|OY62JaQx1J+FKQnl``njxgN@xNAxo(=P diff --git a/source/StkUGens/stk-4.4.4/doc/html/classes.html b/source/StkUGens/stk-4.4.4/doc/html/classes.html deleted file mode 100644 index 775e9887c7..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classes.html +++ /dev/null @@ -1,46 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

Class Index

A | B | C | D | E | F | G | H | I | J | L | M | N | O | P | R | S | T | U | V | W
- -
  A  
-
Effect (stk)   Instrmnt (stk)   PitShift (stk)   StifKarp (stk)   
ADSR (stk)   Envelope (stk)   
  J  
-
Plucked (stk)   Stk (stk)   
Asymp (stk)   
  F  
-
JCRev (stk)   PoleZero (stk)   StkError (stk)   
  B  
-
FileLoop (stk)   JetTable (stk)   PRCRev (stk)   StkFrames (stk)   
BandedWG (stk)   FileRead (stk)   
  L  
-
  R  
-
RtAudio::StreamOptions   
BeeThree (stk)   FileWrite (stk)   LentPitShift (stk)   ReedTable (stk)   RtAudio::StreamParameters   
BiQuad (stk)   FileWvIn (stk)   
  M  
-
Resonate (stk)   
  T  
-
Blit (stk)   FileWvOut (stk)   Mandolin (stk)   Rhodey (stk)   TapDelay (stk)   
BlitSaw (stk)   Filter (stk)   Mesh2D (stk)   RtAudio   TcpClient (stk)   
BlitSquare (stk)   Fir (stk)   Skini::Message (stk)   RtError   TcpServer (stk)   
BlowBotl (stk)   Flute (stk)   Messager (stk)   RtMidi   Thread (stk)   
BlowHole (stk)   FM (stk)   MidiFileIn (stk)   RtMidiIn   TubeBell (stk)   
Bowed (stk)   FMVoices (stk)   Modal (stk)   RtMidiOut   Twang (stk)   
BowTable (stk)   FormSwep (stk)   ModalBar (stk)   RtWvIn (stk)   TwoPole (stk)   
Brass (stk)   FreeVerb (stk)   Modulate (stk)   RtWvOut (stk)   TwoZero (stk)   
  C  
-
Function (stk)   Moog (stk)   
  S  
-
  U  
-
Chorus (stk)   
  G  
-
Mutex (stk)   Sampler (stk)   UdpSocket (stk)   
Clarinet (stk)   Generator (stk)   
  N  
-
Saxofony (stk)   
  V  
-
Cubic (stk)   Granulate (stk)   Noise (stk)   Shakers (stk)   Vector3D (stk)   
  D  
-
Guitar (stk)   NRev (stk)   Simple (stk)   Voicer (stk)   
Delay (stk)   
  H  
-
  O  
-
SineWave (stk)   VoicForm (stk)   
DelayA (stk)   HevyMetl (stk)   OnePole (stk)   SingWave (stk)   
  W  
-
DelayL (stk)   
  I  
-
OneZero (stk)   Sitar (stk)   Whistle (stk)   
RtAudio::DeviceInfo   Iir (stk)   
  P  
-
Skini (stk)   Wurley (stk)   
Drummer (stk)   InetWvIn (stk)   PercFlut (stk)   Socket (stk)   WvIn (stk)   
  E  
-
InetWvOut (stk)   Phonemes (stk)   Sphere (stk)   WvOut (stk)   
Echo (stk)   
A | B | C | D | E | F | G | H | I | J | L | M | N | O | P | R | S | T | U | V | W
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR-members.html deleted file mode 100644 index 9485e1511e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR-members.html +++ /dev/null @@ -1,75 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::ADSR Member List

This is the complete list of members for stk::ADSR, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
ADSR(void)stk::ADSR
ATTACK enum valuestk::ADSR
channelsOut(void) const stk::Generator [inline]
DECAY enum valuestk::ADSR
Generator(void)stk::Generator [inline]
getState(void) const stk::ADSR [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
IDLE enum valuestk::ADSR
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
keyOff(void)stk::ADSR
keyOn(void)stk::ADSR
lastFrame(void) const stk::Generator [inline]
lastOut(void) const stk::ADSR [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
RELEASE enum valuestk::ADSR
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
setAllTimes(StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime)stk::ADSR
setAttackRate(StkFloat rate)stk::ADSR
setAttackTarget(StkFloat target)stk::ADSR
setAttackTime(StkFloat time)stk::ADSR
setDecayRate(StkFloat rate)stk::ADSR
setDecayTime(StkFloat time)stk::ADSR
setRawwavePath(std::string path)stk::Stk [static]
setReleaseRate(StkFloat rate)stk::ADSR
setReleaseTime(StkFloat time)stk::ADSR
setSampleRate(StkFloat rate)stk::Stk [static]
setSustainLevel(StkFloat level)stk::ADSR
setTarget(StkFloat target)stk::ADSR
setValue(StkFloat value)stk::ADSR
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
SUSTAIN enum valuestk::ADSR
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(void)stk::ADSR [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::ADSR [inline, virtual]
~ADSR(void)stk::ADSR
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR.html deleted file mode 100644 index 98c22952f3..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR.html +++ /dev/null @@ -1,214 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::ADSR Class Reference

-

STK ADSR envelope class. -More...

- -

#include <ADSR.h>

-
-Inheritance diagram for stk::ADSR:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Types

enum  {
-  ATTACK, -DECAY, -SUSTAIN, -RELEASE, -
-  IDLE -
- }
 

ADSR envelope states.

- More...

Public Member Functions

ADSR (void)
 Default constructor.
~ADSR (void)
 Class destructor.
-void keyOn (void)
 Set target = 1, state = ADSR::ATTACK.
-void keyOff (void)
 Set target = 0, state = ADSR::RELEASE.
-void setAttackRate (StkFloat rate)
 Set the attack rate (gain / sample).
-void setAttackTarget (StkFloat target)
 Set the target value for the attack (default = 1.0).
-void setDecayRate (StkFloat rate)
 Set the decay rate (gain / sample).
-void setSustainLevel (StkFloat level)
 Set the sustain level.
-void setReleaseRate (StkFloat rate)
 Set the release rate (gain / sample).
-void setAttackTime (StkFloat time)
 Set the attack rate based on a time duration (seconds).
-void setDecayTime (StkFloat time)
 Set the decay rate based on a time duration (seconds).
-void setReleaseTime (StkFloat time)
 Set the release rate based on a time duration (seconds).
-void setAllTimes (StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime)
 Set sustain level and attack, decay, and release time durations (seconds).
-void setTarget (StkFloat target)
 Set a sustain target value and attack or decay from current value to target.
-int getState (void) const
 Return the current envelope state (ATTACK, DECAY, SUSTAIN, RELEASE, IDLE).
-void setValue (StkFloat value)
 Set to state = ADSR::SUSTAIN with current and target values of value.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (void)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK ADSR envelope class.

-

This class implements a traditional ADSR (Attack, Decay, Sustain, Release) envelope. It responds to simple keyOn and keyOff messages, keeping track of its state. The state = ADSR::IDLE before being triggered and after the envelope value reaches 0.0 in the ADSR::RELEASE state. All rate, target and level settings must be non-negative. All time settings are in seconds and must be positive.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Enumeration Documentation

- -
-
- - - - -
anonymous enum
-
-
- -

ADSR envelope states.

-
Enumerator:
- - - - - -
ATTACK  -

Attack

-
DECAY  -

Decay

-
SUSTAIN  -

Sustain

-
RELEASE  -

Release

-
IDLE  -

Before attack / after release

-
-
-
- -

00029        {
-00030     ATTACK,   
-00031     DECAY,    
-00032     SUSTAIN,  
-00033     RELEASE,  
-00034     IDLE      
-00035   };
-

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::ADSR::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00161 {
-00162 #if defined(_STK_DEBUG_)
-00163   if ( channel >= frames.channels() ) {
-00164     oStream_ << "ADSR::tick(): channel and StkFrames arguments are incompatible!";
-00165     handleError( StkError::FUNCTION_ARGUMENT );
-00166   }
-00167 #endif
-00168 
-00169   StkFloat *samples = &frames[channel];
-00170   unsigned int hop = frames.channels();
-00171   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00172     *samples = ADSR::tick();
-00173 
-00174   return frames;
-00175 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ADSR.png deleted file mode 100644 index 4efe476ea497784074d39c3aecca41b073901737..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)NklP{v-9X$)9gh0OK%8i(xgd~CQX|3CuyX$f~*sg zz5|UiPqkqyzV$-jGObJdKkJO>2^uIx@1>jdw4Yj`+cwywD*jJ=;t13U9gnv zwqvHPYK{&^I$1`akohQ~vsgx#>oNNvUcVtlzg%`tTmj~Ly+ZRFLi+pZwDtqb93|p5 SvMsOx0000 - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Asymp Member List

This is the complete list of members for stk::Asymp, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
Asymp(void)stk::Asymp
channelsOut(void) const stk::Generator [inline]
Generator(void)stk::Generator [inline]
getState(void) const stk::Asymp [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
keyOff(void)stk::Asymp
keyOn(void)stk::Asymp
lastFrame(void) const stk::Generator [inline]
lastOut(void) const stk::Asymp [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setT60(StkFloat t60)stk::Asymp
setTarget(StkFloat target)stk::Asymp
setTau(StkFloat tau)stk::Asymp
setTime(StkFloat time)stk::Asymp
setValue(StkFloat value)stk::Asymp
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(void)stk::Asymp [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Asymp [inline, virtual]
~Asymp(void)stk::Asymp
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Asymp.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Asymp.html deleted file mode 100644 index 93e05bd1d3..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Asymp.html +++ /dev/null @@ -1,162 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Asymp Class Reference

-

STK asymptotic curve envelope class. -More...

- -

#include <Asymp.h>

-
-Inheritance diagram for stk::Asymp:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Asymp (void)
 Default constructor.
~Asymp (void)
 Class destructor.
-void keyOn (void)
 Set target = 1.
-void keyOff (void)
 Set target = 0.
void setTau (StkFloat tau)
 Set the asymptotic rate via the time factor tau (must be > 0).
-void setTime (StkFloat time)
 Set the asymptotic rate based on a time duration (must be > 0).
-void setT60 (StkFloat t60)
 Set the asymptotic rate such that the target value is perceptually reached (to within -60dB of the target) in t60 seconds.
-void setTarget (StkFloat target)
 Set the target value.
-void setValue (StkFloat value)
 Set current and target values to value.
-int getState (void) const
 Return the current envelope state (0 = at target, 1 otherwise).
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (void)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK asymptotic curve envelope class.

-

This class implements a simple envelope generator which asymptotically approaches a target value. The algorithm used is of the form:

-

y[n] = a y[n-1] + (1-a) target,

-

where a = exp(-T/tau), T is the sample period, and tau is a time constant. The user can set the time constant (default value = 0.3) and target value. Theoretically, this recursion never reaches its target, though the calculations in this class are stopped when the current value gets within a small threshold value of the target (at which time the current value is set to the target). It responds to keyOn and keyOff messages by ramping to 1.0 on keyOn and to 0.0 on keyOff.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::Asymp::setTau (StkFloat  tau ) 
-
-
- -

Set the asymptotic rate via the time factor tau (must be > 0).

-

The rate is computed as described above. The value of tau must be greater than zero. Values of tau close to zero produce fast approach rates, while values greater than 1.0 produce rather slow rates.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Asymp::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00128 {
-00129 #if defined(_STK_DEBUG_)
-00130   if ( channel >= frames.channels() ) {
-00131     oStream_ << "Asymp::tick(): channel and StkFrames arguments are incompatible!";
-00132     handleError( StkError::FUNCTION_ARGUMENT );
-00133   }
-00134 #endif
-00135 
-00136   StkFloat *samples = &frames[channel];
-00137   unsigned int hop = frames.channels();
-00138   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00139     *samples = Asymp::tick();
-00140 
-00141   return frames;
-00142 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Asymp.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Asymp.png deleted file mode 100644 index 4c78cec6fd1a180b22820104cdb94f011d62c946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^Q9#_m!3-n=8hAv2lth3}i0l9V|AEZ^{}0TcpD+Q) z0^PIUZ}kWwo6&9LWjBX5)6 zg^CH=+SpteEPl-k;N#b{&Cpiep=Ooet>Vvcfvbua=esL^l|Jo0!)^U` z^Aij~msaL{%Tib%>rnet^7tY5lFoIV)kVx()KzQ`1@33h@cwe|*ZVG$qv@^y)z?dN52&i(Au g - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::BandedWG Member List

This is the complete list of members for stk::BandedWG, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
BandedWG(void)stk::BandedWG
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::BandedWG
controlChange(int number, StkFloat value)stk::BandedWG [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::BandedWG [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::BandedWG [virtual]
pluck(StkFloat amp)stk::BandedWG
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::BandedWG [virtual]
setPreset(int preset)stk::BandedWG
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setStrikePosition(StkFloat position)stk::BandedWG
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
startBowing(StkFloat amplitude, StkFloat rate)stk::BandedWG
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stopBowing(StkFloat rate)stk::BandedWG
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::BandedWG [virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::BandedWG [inline, virtual]
~BandedWG(void)stk::BandedWG
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BandedWG.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BandedWG.html deleted file mode 100644 index 602879709e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BandedWG.html +++ /dev/null @@ -1,170 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::BandedWG Class Reference

-

Banded waveguide modeling class. -More...

- -

#include <BandedWG.h>

-
-Inheritance diagram for stk::BandedWG:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

BandedWG (void)
 Class constructor.
~BandedWG (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setStrikePosition (StkFloat position)
 Set strike position (0.0 - 1.0).
-void setPreset (int preset)
 Select a preset.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void startBowing (StkFloat amplitude, StkFloat rate)
 Apply bow velocity/pressure to instrument with given amplitude and rate of increase.
-void stopBowing (StkFloat rate)
 Decrease bow velocity/breath pressure with given rate of decrease.
-void pluck (StkFloat amp)
 Pluck the instrument with given amplitude.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

Banded waveguide modeling class.

-

This class uses banded waveguide techniques to model a variety of sounds, including bowed bars, glasses, and bowls. For more information, see Essl, G. and Cook, P. "Banded Waveguides: Towards Physical Modelling of Bar Percussion Instruments", Proceedings of the 1999 International Computer Music Conference.

-

Control Change Numbers:

-
    -
  • Bow Pressure = 2
  • -
  • Bow Motion = 4
  • -
  • Strike Position = 8 (not implemented)
  • -
  • Vibrato Frequency = 11
  • -
  • Gain = 1
  • -
  • Bow Velocity = 128
  • -
  • Set Striking = 64
  • -
  • Instrument Presets = 16
      -
    • Uniform Bar = 0
    • -
    • Tuned Bar = 1
    • -
    • Glass Harmonica = 2
    • -
    • Tibetan Bowl = 3
    • -
    -
  • -
-

by Georg Essl, 1999 - 2004. Modified for STK 4.0 by Gary Scavone.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::BandedWG::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00125 {
-00126   unsigned int nChannels = lastFrame_.channels();
-00127 #if defined(_STK_DEBUG_)
-00128   if ( channel > frames.channels() - nChannels ) {
-00129     oStream_ << "BandedWG::tick(): channel and StkFrames arguments are incompatible!";
-00130     handleError( StkError::FUNCTION_ARGUMENT );
-00131   }
-00132 #endif
-00133 
-00134   StkFloat *samples = &frames[channel];
-00135   unsigned int j, hop = frames.channels() - nChannels;
-00136   if ( nChannels == 1 ) {
-00137     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00138       *samples++ = tick();
-00139   }
-00140   else {
-00141     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00142       *samples++ = tick();
-00143       for ( j=1; j<nChannels; j++ )
-00144         *samples++ = lastFrame_[j];
-00145     }
-00146   }
-00147 
-00148   return frames;
-00149 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BandedWG.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BandedWG.png deleted file mode 100644 index 6029f70d317600dc52ee3b9ddf7c4f124f1aa4e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Pz!3-qz1Ld9qDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J8gc)B=-R4~4sd$I3`0*C8flaK%HE9G5S zw_YyWrE>ROYT71kE_VGR&$qBf-%`24@k5)TeQp5;W_)aoP+UCm$mHfQgbI|%=FYRlYXEYW%6^M%eURL7FGL(b!K%(Pu@G*pOukC zhOtREc5990qr`?e&72oO#KQ)0A3;VI0S5*UaUh#9dc#s*r``s3W(B7GGTXl&l4D?S zVX$CxQE0d;_QGAERQ&0QbcfChEM=Kyr~C@DH1F0kEvP*EGA#YR+=tC;Vp(gUomax0UIgc}yYAw;oxhXMf--Nb33_Cip>~@!+&|QTt>*8aSLg*pdMv3J!2D z>tJBwP-p-V54JL}L_57{<*bllIJx$;#G1!qiC?Gt++a*NSIU-f*owi!^Y}K`?UR=( zEeV>zw|&~plf!^kzr~{;ukirsd^A}u3qR%@_HLj6UH8w;7 z4Bc`Soi+*EzieE+Y_IZxF9~^{rc_>RUiibd^Ob6L%4`w+4>qpr_CFJR8tuZs_>{G8 at9(R~#+F|{ilzhOlfl!~&t;ucLK6TKH{|dD diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree-members.html deleted file mode 100644 index 434a36f8e9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree-members.html +++ /dev/null @@ -1,73 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::BeeThree Member List

This is the complete list of members for stk::BeeThree, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
BeeThree(void)stk::BeeThree
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::FM
controlChange(int number, StkFloat value)stk::FM [virtual]
FM(unsigned int operators=4)stk::FM
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::FM
keyOn(void)stk::FM
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
loadWaves(const char **filenames)stk::FM
noteOff(StkFloat amplitude)stk::FM [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::BeeThree [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setControl1(StkFloat cVal)stk::FM [inline]
setControl2(StkFloat cVal)stk::FM [inline]
setFrequency(StkFloat frequency)stk::FM [virtual]
setGain(unsigned int waveIndex, StkFloat gain)stk::FM
setModulationDepth(StkFloat mDepth)stk::FM [inline]
setModulationSpeed(StkFloat mSpeed)stk::FM [inline]
setRatio(unsigned int waveIndex, StkFloat ratio)stk::FM
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::BeeThree [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::BeeThree [inline, virtual]
~BeeThree(void)stk::BeeThree
~FM(void)stk::FM [virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree.html deleted file mode 100644 index 28b4ff2be4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree.html +++ /dev/null @@ -1,163 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::BeeThree Class Reference

-

STK Hammond-oid organ FM synthesis instrument. -More...

- -

#include <BeeThree.h>

-
-Inheritance diagram for stk::BeeThree:
-
-
- - -stk::FM -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - -

Public Member Functions

 BeeThree (void)
 Class constructor.
~BeeThree (void)
 Class destructor.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK Hammond-oid organ FM synthesis instrument.

-

This class implements a simple 4 operator topology, also referred to as algorithm 8 of the TX81Z.

-
    Algorithm 8 is :
-                     1 --.
-                     2 -\|
-                         +-> Out
-                     3 -/|
-                     4 --
-

Control Change Numbers:

-
    -
  • Operator 4 (feedback) Gain = 2
  • -
  • Operator 3 Gain = 4
  • -
  • LFO Speed = 11
  • -
  • LFO Depth = 1
  • -
  • ADSR 2 & 4 Target = 128
  • -
-

The basic Chowning/Stanford FM patent expired in 1995, but there exist follow-on patents, mostly assigned to Yamaha. If you are of the type who should worry about this (making money) worry away.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::BeeThree::BeeThree (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::BeeThree::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::FM.

- -

00099 {
-00100   unsigned int nChannels = lastFrame_.channels();
-00101 #if defined(_STK_DEBUG_)
-00102   if ( channel > frames.channels() - nChannels ) {
-00103     oStream_ << "BeeThree::tick(): channel and StkFrames arguments are incompatible!";
-00104     handleError( StkError::FUNCTION_ARGUMENT );
-00105   }
-00106 #endif
-00107 
-00108   StkFloat *samples = &frames[channel];
-00109   unsigned int j, hop = frames.channels() - nChannels;
-00110   if ( nChannels == 1 ) {
-00111     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00112       *samples++ = tick();
-00113   }
-00114   else {
-00115     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00116       *samples++ = tick();
-00117       for ( j=1; j<nChannels; j++ )
-00118         *samples++ = lastFrame_[j];
-00119     }
-00120   }
-00121 
-00122   return frames;
-00123 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BeeThree.png deleted file mode 100644 index afd133e3771594bbee52ae34ef6b31208de9afee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YLAP)eA>N zz_ljHS#YgMavJ==Q$d(8VZww76DE8bTT+xwQiAXeV2Hpr0l?&J-)Hc+f&E&90TBSs z{s!DUh(KVQ+Szg!VfD<_TH=r32F|cu&Q$+}&9kNW9&BnHY@YeMSPE0k>HJ=X`K%!P zAUNywzY=w6^bO!zljJP8)+9L%e&DGfOqeiX!h{JEJ`E&ALC)d`|2mA~+HHH|WAtW5 zZ{YDUUlr#=7$`+2GA - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::BiQuad Member List

This is the complete list of members for stk::BiQuad, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
BiQuad()stk::BiQuad
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
getGain(void) const stk::Filter [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::BiQuad [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::BiQuad [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
setA1(StkFloat a1)stk::BiQuad [inline]
setA2(StkFloat a2)stk::BiQuad [inline]
setB0(StkFloat b0)stk::BiQuad [inline]
setB1(StkFloat b1)stk::BiQuad [inline]
setB2(StkFloat b2)stk::BiQuad [inline]
setCoefficients(StkFloat b0, StkFloat b1, StkFloat b2, StkFloat a1, StkFloat a2, bool clearState=false)stk::BiQuad
setEqualGainZeroes(void)stk::BiQuad
setGain(StkFloat gain)stk::Filter [inline]
setNotch(StkFloat frequency, StkFloat radius)stk::BiQuad
setRawwavePath(std::string path)stk::Stk [static]
setResonance(StkFloat frequency, StkFloat radius, bool normalize=false)stk::BiQuad
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::BiQuad [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::BiQuad [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::BiQuad [inline]
~BiQuad()stk::BiQuad
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BiQuad.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BiQuad.html deleted file mode 100644 index b6e5ac23d2..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BiQuad.html +++ /dev/null @@ -1,308 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::BiQuad Class Reference

-

STK biquad (two-pole, two-zero) filter class. -More...

- -

#include <BiQuad.h>

-
-Inheritance diagram for stk::BiQuad:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

BiQuad ()
 Default constructor creates a second-order pass-through filter.
~BiQuad ()
 Class destructor.
-void ignoreSampleRateChange (bool ignore=true)
 A function to enable/disable the automatic updating of class data when the STK sample rate changes.
-void setCoefficients (StkFloat b0, StkFloat b1, StkFloat b2, StkFloat a1, StkFloat a2, bool clearState=false)
 Set all filter coefficients.
-void setB0 (StkFloat b0)
 Set the b[0] coefficient value.
-void setB1 (StkFloat b1)
 Set the b[1] coefficient value.
-void setB2 (StkFloat b2)
 Set the b[2] coefficient value.
-void setA1 (StkFloat a1)
 Set the a[1] coefficient value.
-void setA2 (StkFloat a2)
 Set the a[2] coefficient value.
void setResonance (StkFloat frequency, StkFloat radius, bool normalize=false)
 Sets the filter coefficients for a resonance at frequency (in Hz).
void setNotch (StkFloat frequency, StkFloat radius)
 Set the filter coefficients for a notch at frequency (in Hz).
void setEqualGainZeroes (void)
 Sets the filter zeroes for equal resonance gain.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return a reference to one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK biquad (two-pole, two-zero) filter class.

-

This class implements a two-pole, two-zero digital filter. Methods are provided for creating a resonance or notch in the frequency response while maintaining a constant filter gain.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void stk::BiQuad::setResonance (StkFloat  frequency,
StkFloat  radius,
bool  normalize = false 
)
-
-
- -

Sets the filter coefficients for a resonance at frequency (in Hz).

-

This method determines the filter coefficients corresponding to two complex-conjugate poles with the given frequency (in Hz) and radius from the z-plane origin. If normalize is true, the filter zeros are placed at z = 1, z = -1, and the coefficients are then normalized to produce a constant unity peak gain (independent of the filter gain parameter). The resulting filter frequency response has a resonance at the given frequency. The closer the poles are to the unit-circle (radius close to one), the narrower the resulting resonance width. An unstable filter will result for radius >= 1.0. The frequency value should be between zero and half the sample rate.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void stk::BiQuad::setNotch (StkFloat  frequency,
StkFloat  radius 
)
-
-
- -

Set the filter coefficients for a notch at frequency (in Hz).

-

This method determines the filter coefficients corresponding to two complex-conjugate zeros with the given frequency (in Hz) and radius from the z-plane origin. No filter normalization is attempted. The frequency value should be between zero and half the sample rate. The radius value should be positive.

- -
-
- -
-
- - - - - - - - - -
void stk::BiQuad::setEqualGainZeroes (void  ) 
-
-
- -

Sets the filter zeroes for equal resonance gain.

-

When using the filter as a resonator, zeroes places at z = 1, z = -1 will result in a constant gain at resonance of 1 / (1 - R), where R is the pole radius setting.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::BiQuad::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00133 {
-00134 #if defined(_STK_DEBUG_)
-00135   if ( channel >= frames.channels() ) {
-00136     oStream_ << "BiQuad::tick(): channel and StkFrames arguments are incompatible!";
-00137     handleError( StkError::FUNCTION_ARGUMENT );
-00138   }
-00139 #endif
-00140 
-00141   StkFloat *samples = &frames[channel];
-00142   unsigned int hop = frames.channels();
-00143   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00144     inputs_[0] = gain_ * *samples;
-00145     *samples = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
-00146     *samples -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
-00147     inputs_[2] = inputs_[1];
-00148     inputs_[1] = inputs_[0];
-00149     outputs_[2] = outputs_[1];
-00150     outputs_[1] = *samples;
-00151   }
-00152 
-00153   lastFrame_[0] = outputs_[1];
-00154   return frames;
-00155 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::BiQuad::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00158 {
-00159 #if defined(_STK_DEBUG_)
-00160   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00161     oStream_ << "BiQuad::tick(): channel and StkFrames arguments are incompatible!";
-00162     handleError( StkError::FUNCTION_ARGUMENT );
-00163   }
-00164 #endif
-00165 
-00166   StkFloat *iSamples = &iFrames[iChannel];
-00167   StkFloat *oSamples = &oFrames[oChannel];
-00168   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00169   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00170     inputs_[0] = gain_ * *iSamples;
-00171     *oSamples = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
-00172     *oSamples -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
-00173     inputs_[2] = inputs_[1];
-00174     inputs_[1] = inputs_[0];
-00175     outputs_[2] = outputs_[1];
-00176     outputs_[1] = *oSamples;
-00177   }
-00178 
-00179   lastFrame_[0] = outputs_[1];
-00180   return iFrames;
-00181 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BiQuad.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BiQuad.png deleted file mode 100644 index a98c790fc6db2c3a4ca88cebe9c0287ea457001a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmeAS@N?(olHy`uVBq!ia0vp^-ay>J!3-p4ym@vANJ#|vgt-3y{~yTw|Np@J`3Vz% zEHFNB;6U}E|4)Eij*=k1V4yS@Ts;+H#K6E<FF^h!7EY?g8y1t<#r!s>R?!5Gq2~NcG&Oo z2?4E>?jO3X<9EsOtbX*9sKqmnJiV8g+1vJgyUD5ktH*QSM<$od^5z>gTGA0{rPeZ!cXHlLTsgV6?kH2xqx2=ISN_O7mh_rC$9z+iTPMeXCRIO4oqHlyE%C*% z$Go!UMC{TteH=GKXYIvrt9M%dUGv9i@B7*(xBUMk^}W`!Ttxz_?-XboFyt=akR{0C0!tF#rGn diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit-members.html deleted file mode 100644 index 05d7ff04a5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit-members.html +++ /dev/null @@ -1,62 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Blit Member List

This is the complete list of members for stk::Blit, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
Blit(StkFloat frequency=220.0)stk::Blit
channelsOut(void) const stk::Generator [inline]
Generator(void)stk::Generator [inline]
getPhase() const stk::Blit [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Generator [inline]
lastOut(void) const stk::Blit [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
reset()stk::Blit
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Blit
setHarmonics(unsigned int nHarmonics=0)stk::Blit
setPhase(StkFloat phase)stk::Blit [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(void)stk::Blit [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Blit [inline, virtual]
~Blit()stk::Blit
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit.html deleted file mode 100644 index 20fc8759cc..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit.html +++ /dev/null @@ -1,199 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Blit Class Reference

-

STK band-limited impulse train class. -More...

- -

#include <Blit.h>

-
-Inheritance diagram for stk::Blit:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Blit (StkFloat frequency=220.0)
 Default constructor that initializes BLIT frequency to 220 Hz.
~Blit ()
 Class destructor.
-void reset ()
 Resets the oscillator state and phase to 0.
void setPhase (StkFloat phase)
 Set the phase of the signal.
StkFloat getPhase () const
 Get the current phase of the signal.
-void setFrequency (StkFloat frequency)
 Set the impulse train rate in terms of a frequency in Hz.
void setHarmonics (unsigned int nHarmonics=0)
 Set the number of harmonics generated in the signal.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (void)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK band-limited impulse train class.

-

This class generates a band-limited impulse train using a closed-form algorithm reported by Stilson and Smith in "Alias-Free - Digital Synthesis of Classic Analog Waveforms", 1996. The user can specify both the fundamental frequency of the impulse train and the number of harmonics contained in the resulting signal.

-

The signal is normalized so that the peak value is +/-1.0.

-

If nHarmonics is 0, then the signal will contain all harmonics up to half the sample rate. Note, however, that this setting may produce aliasing in the signal when the frequency is changing (no automatic modification of the number of harmonics is performed by the setFrequency() function).

-

Original code by Robin Davies, 2005. Revisions by Gary Scavone for STK, 2005.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::Blit::setPhase (StkFloat  phase )  [inline]
-
-
- -

Set the phase of the signal.

-

Set the phase of the signal, in the range 0 to 1.

- -

00049 { phase_ = PI * phase; };
-

- -
-
- -
-
- - - - - - - - -
StkFloat stk::Blit::getPhase ( )  const [inline]
-
-
- -

Get the current phase of the signal.

-

Get the phase of the signal, in the range [0 to 1.0).

- -

00055 { return phase_ / PI; };
-

- -
-
- -
-
- - - - - - - - - -
void stk::Blit::setHarmonics (unsigned int  nHarmonics = 0 ) 
-
-
- -

Set the number of harmonics generated in the signal.

-

This function sets the number of harmonics contained in the resulting signal. It is equivalent to (2 * M) + 1 in the BLIT algorithm. The default value of 0 sets the algorithm for maximum harmonic content (harmonics up to half the sample rate). This parameter is not checked against the current sample rate and fundamental frequency. Thus, aliasing can result if one or more harmonics for a given fundamental frequency exceeds fs / 2. This behavior was chosen over the potentially more problematic solution of automatically modifying the M parameter, which can produce audible clicks in the signal.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Blit::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00133 {
-00134 #if defined(_STK_DEBUG_)
-00135   if ( channel >= frames.channels() ) {
-00136     oStream_ << "Blit::tick(): channel and StkFrames arguments are incompatible!";
-00137     handleError( StkError::FUNCTION_ARGUMENT );
-00138   }
-00139 #endif
-00140 
-00141   StkFloat *samples = &frames[channel];
-00142   unsigned int hop = frames.channels();
-00143   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00144     *samples = Blit::tick();
-00145 
-00146   return frames;
-00147 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Blit.png deleted file mode 100644 index 1e16c3102ba5a91ba6ba13deb34802658d62e4e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501 zcmeAS@N?(olHy`uVBq!ia0vp^Q9#_m!3-n=8hAv2lth3}i0l9V|AEZ^{}0TcpD+Q) z0^fOUZ%k6v@A-H;7z%p+S#D#0`7KXC zn33!Ht<77c=4C|AS1XeBxPIa2odvZDb946ycl`b8cjAp%mO`oUZL?oy`xTe`my`|5 zT=D6~hx7}U?KcZc&Lx&9{JkXXG|MFO(h|?fYI`T$JEWB>6tZN$n={KhJBIr|0_Hl3 zo7nkCFJ=^E@Vl=*WqSJ*(-%Rf9#~y0)s1zzV*R$Lp6$!Wx2xi29o$;IFgnkC^lDwqahIuo~oP7S}wOA|u zX`Arxa!JI}g{P7a&v$$-lXmZY>2nNl8}{29_|8A~=baPC^Wv&TqqhV|twMrjuot(l$pQZ+xRT)aj3Wk5S3j3^P6 - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::BlitSaw Member List

This is the complete list of members for stk::BlitSaw, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
BlitSaw(StkFloat frequency=220.0)stk::BlitSaw
channelsOut(void) const stk::Generator [inline]
Generator(void)stk::Generator [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Generator [inline]
lastOut(void) const stk::BlitSaw [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
reset()stk::BlitSaw
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::BlitSaw
setHarmonics(unsigned int nHarmonics=0)stk::BlitSaw
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(void)stk::BlitSaw [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::BlitSaw [inline, virtual]
~BlitSaw()stk::BlitSaw
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSaw.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSaw.html deleted file mode 100644 index 4a9e2eba05..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSaw.html +++ /dev/null @@ -1,148 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::BlitSaw Class Reference

-

STK band-limited sawtooth wave class. -More...

- -

#include <BlitSaw.h>

-
-Inheritance diagram for stk::BlitSaw:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - -

Public Member Functions

BlitSaw (StkFloat frequency=220.0)
 Class constructor.
~BlitSaw ()
 Class destructor.
-void reset ()
 Resets the oscillator state and phase to 0.
-void setFrequency (StkFloat frequency)
 Set the sawtooth oscillator rate in terms of a frequency in Hz.
void setHarmonics (unsigned int nHarmonics=0)
 Set the number of harmonics generated in the signal.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (void)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK band-limited sawtooth wave class.

-

This class generates a band-limited sawtooth waveform using a closed-form algorithm reported by Stilson and Smith in "Alias-Free - Digital Synthesis of Classic Analog Waveforms", 1996. The user can specify both the fundamental frequency of the sawtooth and the number of harmonics contained in the resulting signal.

-

If nHarmonics is 0, then the signal will contain all harmonics up to half the sample rate. Note, however, that this setting may produce aliasing in the signal when the frequency is changing (no automatic modification of the number of harmonics is performed by the setFrequency() function).

-

Based on initial code of Robin Davies, 2005. Modified algorithm code by Gary Scavone, 2005.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::BlitSaw::setHarmonics (unsigned int  nHarmonics = 0 ) 
-
-
- -

Set the number of harmonics generated in the signal.

-

This function sets the number of harmonics contained in the resulting signal. It is equivalent to (2 * M) + 1 in the BLIT algorithm. The default value of 0 sets the algorithm for maximum harmonic content (harmonics up to half the sample rate). This parameter is not checked against the current sample rate and fundamental frequency. Thus, aliasing can result if one or more harmonics for a given fundamental frequency exceeds fs / 2. This behavior was chosen over the potentially more problematic solution of automatically modifying the M parameter, which can produce audible clicks in the signal.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::BlitSaw::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00129 {
-00130 #if defined(_STK_DEBUG_)
-00131   if ( channel >= frames.channels() ) {
-00132     oStream_ << "BlitSaw::tick(): channel and StkFrames arguments are incompatible!";
-00133     handleError( StkError::FUNCTION_ARGUMENT );
-00134   }
-00135 #endif
-00136 
-00137 
-00138   StkFloat *samples = &frames[channel];
-00139   unsigned int hop = frames.channels();
-00140   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00141     *samples = BlitSaw::tick();
-00142 
-00143   return frames;
-00144 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSaw.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSaw.png deleted file mode 100644 index d8463524e5251a84adcce8081f228f9daae982ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmeAS@N?(olHy`uVBq!ia0vp^Q9#_m!3-n=8hAv2lth3}i0l9V|AEZ^{}0TcpD+Q) z0^KebWC4WlBjl_EkEGIZh-{)NNU;6HZ@Y@-U6~fWdJJ;M7xM=Uz z-fLod>dvR?3rkyW7M5rxmMQ#QYVNWnTGK z9WUyA3As!vQCaa-%OZO}<-omWcTR6OWomNu&wSx(e`d{_OLKx{dFSUm-n4$*q(+(I+RAZ9RX9Kpi^>& - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::BlitSquare Member List

This is the complete list of members for stk::BlitSquare, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
BlitSquare(StkFloat frequency=220.0)stk::BlitSquare
channelsOut(void) const stk::Generator [inline]
Generator(void)stk::Generator [inline]
getPhase() const stk::BlitSquare [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Generator [inline]
lastOut(void) const stk::BlitSquare [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
reset()stk::BlitSquare
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::BlitSquare
setHarmonics(unsigned int nHarmonics=0)stk::BlitSquare
setPhase(StkFloat phase)stk::BlitSquare [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(void)stk::BlitSquare [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::BlitSquare [inline, virtual]
~BlitSquare()stk::BlitSquare
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSquare.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSquare.html deleted file mode 100644 index cd54f28761..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSquare.html +++ /dev/null @@ -1,198 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::BlitSquare Class Reference

-

STK band-limited square wave class. -More...

- -

#include <BlitSquare.h>

-
-Inheritance diagram for stk::BlitSquare:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

BlitSquare (StkFloat frequency=220.0)
 Default constructor that initializes BLIT frequency to 220 Hz.
~BlitSquare ()
 Class destructor.
-void reset ()
 Resets the oscillator state and phase to 0.
void setPhase (StkFloat phase)
 Set the phase of the signal.
StkFloat getPhase () const
 Get the current phase of the signal.
-void setFrequency (StkFloat frequency)
 Set the impulse train rate in terms of a frequency in Hz.
void setHarmonics (unsigned int nHarmonics=0)
 Set the number of harmonics generated in the signal.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (void)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK band-limited square wave class.

-

This class generates a band-limited square wave signal. It is derived in part from the approach reported by Stilson and Smith in "Alias-Free Digital Synthesis of Classic Analog Waveforms", 1996. The algorithm implemented in this class uses a SincM function with an even M value to achieve a bipolar bandlimited impulse train. This signal is then integrated to achieve a square waveform. The integration process has an associated DC offset so a DC blocking filter is applied at the output.

-

The user can specify both the fundamental frequency of the waveform and the number of harmonics contained in the resulting signal.

-

If nHarmonics is 0, then the signal will contain all harmonics up to half the sample rate. Note, however, that this setting may produce aliasing in the signal when the frequency is changing (no automatic modification of the number of harmonics is performed by the setFrequency() function). Also note that the harmonics of a square wave fall at odd integer multiples of the fundamental, so aliasing will happen with a lower fundamental than with the other Blit waveforms. This class is not guaranteed to be well behaved in the presence of significant aliasing.

-

Based on initial code of Robin Davies, 2005. Modified algorithm code by Gary Scavone, 2005 - 2006.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::BlitSquare::setPhase (StkFloat  phase )  [inline]
-
-
- -

Set the phase of the signal.

-

Set the phase of the signal, in the range 0 to 1.

- -

00058 { phase_ = PI * phase; };
-

- -
-
- -
-
- - - - - - - - -
StkFloat stk::BlitSquare::getPhase ( )  const [inline]
-
-
- -

Get the current phase of the signal.

-

Get the phase of the signal, in the range [0 to 1.0).

- -

00064 { return phase_ / PI; };
-

- -
-
- -
-
- - - - - - - - - -
void stk::BlitSquare::setHarmonics (unsigned int  nHarmonics = 0 ) 
-
-
- -

Set the number of harmonics generated in the signal.

-

This function sets the number of harmonics contained in the resulting signal. It is equivalent to (2 * M) + 1 in the BLIT algorithm. The default value of 0 sets the algorithm for maximum harmonic content (harmonics up to half the sample rate). This parameter is not checked against the current sample rate and fundamental frequency. Thus, aliasing can result if one or more harmonics for a given fundamental frequency exceeds fs / 2. This behavior was chosen over the potentially more problematic solution of automatically modifying the M parameter, which can produce audible clicks in the signal.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::BlitSquare::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00152 {
-00153 #if defined(_STK_DEBUG_)
-00154   if ( channel >= frames.channels() ) {
-00155     oStream_ << "BlitSquare::tick(): channel and StkFrames arguments are incompatible!";
-00156     handleError( StkError::FUNCTION_ARGUMENT );
-00157   }
-00158 #endif
-00159 
-00160   StkFloat *samples = &frames[channel];
-00161   unsigned int hop = frames.channels();
-00162   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00163     *samples = BlitSquare::tick();
-00164 
-00165   return frames;
-00166 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSquare.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlitSquare.png deleted file mode 100644 index f3025b745ed289037f16cbca80bd26cabc40a939..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 558 zcmeAS@N?(olHy`uVBq!ia0vp^Q9#_m!3-n=8hAv2lth3}i0l9V|AEZ^{}0TcpD+Q) z0^}cz=o&x`OIc`?4&bWVlt-_s0Gp||a${d}(F888!(~D4(xm(2geLGrrADrcLLi_)= m4femv7k#e&t5GuJFT - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::BlowBotl Member List

This is the complete list of members for stk::BlowBotl, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
BlowBotl(void)stk::BlowBotl
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::BlowBotl
controlChange(int number, StkFloat value)stk::BlowBotl [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::BlowBotl [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::BlowBotl [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::BlowBotl [virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
startBlowing(StkFloat amplitude, StkFloat rate)stk::BlowBotl
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stopBlowing(StkFloat rate)stk::BlowBotl
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::BlowBotl [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::BlowBotl [inline, virtual]
~BlowBotl(void)stk::BlowBotl
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowBotl.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowBotl.html deleted file mode 100644 index 37a815bed9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowBotl.html +++ /dev/null @@ -1,172 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::BlowBotl Class Reference

-

STK blown bottle instrument class. -More...

- -

#include <BlowBotl.h>

-
-Inheritance diagram for stk::BlowBotl:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 BlowBotl (void)
 Class constructor.
~BlowBotl (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void startBlowing (StkFloat amplitude, StkFloat rate)
 Apply breath velocity to instrument with given amplitude and rate of increase.
-void stopBlowing (StkFloat rate)
 Decrease breath velocity with given rate of decrease.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK blown bottle instrument class.

-

This class implements a helmholtz resonator (biquad filter) with a polynomial jet excitation (a la Cook).

-

Control Change Numbers:

-
    -
  • Noise Gain = 4
  • -
  • Vibrato Frequency = 11
  • -
  • Vibrato Gain = 1
  • -
  • Volume = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::BlowBotl::BlowBotl (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::BlowBotl::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00116 {
-00117   unsigned int nChannels = lastFrame_.channels();
-00118 #if defined(_STK_DEBUG_)
-00119   if ( channel > frames.channels() - nChannels ) {
-00120     oStream_ << "BlowBotl::tick(): channel and StkFrames arguments are incompatible!";
-00121     handleError( StkError::FUNCTION_ARGUMENT );
-00122   }
-00123 #endif
-00124 
-00125   StkFloat *samples = &frames[channel];
-00126   unsigned int j, hop = frames.channels() - nChannels;
-00127   if ( nChannels == 1 ) {
-00128     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00129       *samples++ = tick();
-00130   }
-00131   else {
-00132     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00133       *samples++ = tick();
-00134       for ( j=1; j<nChannels; j++ )
-00135         *samples++ = lastFrame_[j];
-00136     }
-00137   }
-00138 
-00139   return frames;
-00140 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowBotl.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowBotl.png deleted file mode 100644 index d33a7d855fbdf95d45efd1b5664296c91c5d5028..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^fk52B!3-op#^B zh-yUVI2alVS;rj+nfjxXIibB;Yf z9uU)GuK)VW9vMx=Stp~O%(0nU*_V}i`>I7!e9k1%w{lm1C-f^VRI=W<_u8s!=fAst zE#GiFtkk~d`G#AC9npLzT7T~K`}qCHi;wIHZP=< diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole-members.html deleted file mode 100644 index 0f3fcbb3ac..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole-members.html +++ /dev/null @@ -1,66 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::BlowHole Member List

This is the complete list of members for stk::BlowHole, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
BlowHole(StkFloat lowestFrequency)stk::BlowHole
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::BlowHole
controlChange(int number, StkFloat value)stk::BlowHole [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::BlowHole [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::BlowHole [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::BlowHole [virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setTonehole(StkFloat newValue)stk::BlowHole
setVent(StkFloat newValue)stk::BlowHole
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
startBlowing(StkFloat amplitude, StkFloat rate)stk::BlowHole
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stopBlowing(StkFloat rate)stk::BlowHole
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::BlowHole [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::BlowHole [inline, virtual]
~BlowHole(void)stk::BlowHole
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole.html deleted file mode 100644 index 03c171c219..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole.html +++ /dev/null @@ -1,181 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::BlowHole Class Reference

-

STK clarinet physical model with one register hole and one tonehole. -More...

- -

#include <BlowHole.h>

-
-Inheritance diagram for stk::BlowHole:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 BlowHole (StkFloat lowestFrequency)
 Class constructor.
~BlowHole (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void setTonehole (StkFloat newValue)
 Set the tonehole state (0.0 = closed, 1.0 = fully open).
-void setVent (StkFloat newValue)
 Set the register hole state (0.0 = closed, 1.0 = fully open).
-void startBlowing (StkFloat amplitude, StkFloat rate)
 Apply breath pressure to instrument with given amplitude and rate of increase.
-void stopBlowing (StkFloat rate)
 Decrease breath pressure with given rate of decrease.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK clarinet physical model with one register hole and one tonehole.

-

This class is based on the clarinet model, with the addition of a two-port register hole and a three-port dynamic tonehole implementation, as discussed by Scavone and Cook (1998).

-

In this implementation, the distances between the reed/register hole and tonehole/bell are fixed. As a result, both the tonehole and register hole will have variable influence on the playing frequency, which is dependent on the length of the air column. In addition, the highest playing freqeuency is limited by these fixed lengths.

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others.

-

Control Change Numbers:

-
    -
  • Reed Stiffness = 2
  • -
  • Noise Gain = 4
  • -
  • Tonehole State = 11
  • -
  • Register State = 1
  • -
  • Breath Pressure = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::BlowHole::BlowHole (StkFloat  lowestFrequency ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::BlowHole::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00157 {
-00158   unsigned int nChannels = lastFrame_.channels();
-00159 #if defined(_STK_DEBUG_)
-00160   if ( channel > frames.channels() - nChannels ) {
-00161     oStream_ << "BlowHole::tick(): channel and StkFrames arguments are incompatible!";
-00162     handleError( StkError::FUNCTION_ARGUMENT );
-00163   }
-00164 #endif
-00165 
-00166   StkFloat *samples = &frames[channel];
-00167   unsigned int j, hop = frames.channels() - nChannels;
-00168   if ( nChannels == 1 ) {
-00169     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00170       *samples++ = tick();
-00171   }
-00172   else {
-00173     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00174       *samples++ = tick();
-00175       for ( j=1; j<nChannels; j++ )
-00176         *samples++ = lastFrame_[j];
-00177     }
-00178   }
-00179 
-00180   return frames;
-00181 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BlowHole.png deleted file mode 100644 index 34eb9954df33de518ea71707a9b742da991a90b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmeAS@N?(olHy`uVBq!ia0vp^VL;r$!3-q5_Pm(|q$C1-LR|m<{|{vT|9@cq{DcWW z78oBmaG?6o|0h5$M@f)hFi;u{uAT}pVqjpL=IP=XQo;E4?!|S76*$-u>Sz7<*I%RO z!m{;lNuuxhg54R8`$G-x=32$LS)E8^saEDzno-R#`9r%-RL*qP4hD%P{a+uLw9m5y z-F923vgh!ps@*YJ)q$_s!X~jbrk(w_=X<>FSBgQ)60g8D!4nJ#MXdqyFfx zKMVDH_89%lGfNl0-hTGx(b6ROGNC43vl|J`Kq5YwfBHneB8h`_(^&=I#4XDYU6kTAL4Lte|Hx}sWGa_UdskPYb7u+1^EFGt zBcodyx9uU6U=}NO}X|r19erlR~L@ZK4)vmzEb+g0XfYT}q z*YQMOTj2I2EZ)m&bJ@0x-luzR^{rYP8EY0c>3Yt?s%`aApJnU%W?c)I$ztaD0e F0suMb=9B;c diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable-members.html deleted file mode 100644 index 9c30733e92..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable-members.html +++ /dev/null @@ -1,59 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::BowTable Member List

This is the complete list of members for stk::BowTable, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
BowTable(void)stk::BowTable [inline]
Function(void)stk::Function [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastOut(void) const stk::Function [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setMaxOutput(StkFloat maximum)stk::BowTable [inline]
setMinOutput(StkFloat minimum)stk::BowTable [inline]
setOffset(StkFloat offset)stk::BowTable [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setSlope(StkFloat slope)stk::BowTable [inline]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::BowTable [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::BowTable [inline]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::BowTable [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable.html deleted file mode 100644 index 87e71a3693..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable.html +++ /dev/null @@ -1,240 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::BowTable Class Reference

-

STK bowed string table class. -More...

- -

#include <BowTable.h>

-
-Inheritance diagram for stk::BowTable:
-
-
- - -stk::Function -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - -

Public Member Functions

BowTable (void)
 Default constructor.
void setOffset (StkFloat offset)
 Set the table offset value.
void setSlope (StkFloat slope)
 Set the table slope value.
-void setMinOutput (StkFloat minimum)
 Set the minimum table output value (0.0 - 1.0).
-void setMaxOutput (StkFloat maximum)
 Set the maximum table output value (0.0 - 1.0).
-StkFloat tick (StkFloat input)
 Take one sample input and map to one sample of output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the table and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the table and write outputs to the oFrames object.
-

Detailed Description

-

STK bowed string table class.

-

This class implements a simple bowed string non-linear function, as described by Smith (1986). The output is an instantaneous reflection coefficient value.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::BowTable::setOffset (StkFloat  offset )  [inline]
-
-
- -

Set the table offset value.

-

The table offset is a bias which controls the symmetry of the friction. If you want the friction to vary with direction, use a non-zero value for the offset. The default value is zero.

- -

00035 { offset_ = offset; };
-

- -
-
- -
-
- - - - - - - - - -
void stk::BowTable::setSlope (StkFloat  slope )  [inline]
-
-
- -

Set the table slope value.

-

The table slope controls the width of the friction pulse, which is related to bow force.

- -

00042 { slope_ = slope; };
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::BowTable::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline]
-
-
- -

Take a channel of the StkFrames object as inputs to the table and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00102 {
-00103 #if defined(_STK_DEBUG_)
-00104   if ( channel >= frames.channels() ) {
-00105     oStream_ << "BowTable::tick(): channel and StkFrames arguments are incompatible!";
-00106     handleError( StkError::FUNCTION_ARGUMENT );
-00107   }
-00108 #endif
-00109 
-00110   StkFloat *samples = &frames[channel];
-00111   unsigned int hop = frames.channels();
-00112   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00113     *samples = *samples + offset_;
-00114     *samples *= slope_;
-00115     *samples = (StkFloat) fabs( (double) *samples ) + 0.75;
-00116     *samples = (StkFloat) pow( *samples, (StkFloat) -4.0 );
-00117     if ( *samples > 1.0) *samples = 1.0;
-00118   }
-00119 
-00120   lastFrame_[0] = *(samples-hop);
-00121   return frames;
-00122 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::BowTable::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the table and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00125 {
-00126 #if defined(_STK_DEBUG_)
-00127   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00128     oStream_ << "BowTable::tick(): channel and StkFrames arguments are incompatible!";
-00129     handleError( StkError::FUNCTION_ARGUMENT );
-00130   }
-00131 #endif
-00132 
-00133   StkFloat *iSamples = &iFrames[iChannel];
-00134   StkFloat *oSamples = &oFrames[oChannel];
-00135   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00136   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00137     *oSamples = *iSamples + offset_;
-00138     *oSamples *= slope_;
-00139     *oSamples = (StkFloat) fabs( (double) *oSamples ) + 0.75;
-00140     *oSamples = (StkFloat) pow( *oSamples, (StkFloat) -4.0 );
-00141     if ( *oSamples > 1.0) *oSamples = 1.0;
-00142   }
-00143 
-00144   lastFrame_[0] = *(oSamples-oHop);
-00145   return iFrames;
-00146 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1BowTable.png deleted file mode 100644 index 15e5e97a4beee0e9798fa953e69e8269dcae81d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 zcmeAS@N?(olHy`uVBq!ia0vp^5kTC*!3-orO7Ca_DTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J9rdAc};R4~4sd$H(<0*C9~v}6DOKe1cD z*0by4G_#j6W#v5`?t2VwUN5kSv{=+F_=m+HsbwbfiyixUkG;Ij&TPnJFyYUIUDFSk z>bsOya;(|){lLrw#?Z$z#pIX15c=f0?O<4!-^XuDFWip{eWY*ILIOlBK+SLY$|XOSN@@YphK{Vi{X}GXDsvi zOS5#O371Qz4zpZcUcbAt}sekg5jz01g~_~hH>oeo83 z_+L%G%c#hIH1WVD!K1;;OV|7pj$yhQH+BC`558yr=cUCX8OeAU&> z%XU>nbumWRtrZE|wei^XN2RCAq95zHY6cc>HHs*Bx2Q7wL#*S6-3R@?vCjCbnz}OU SY%4Gp89ZJ6T-G@yGywo_-0r&o diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed-members.html deleted file mode 100644 index 72e2dc39d2..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed-members.html +++ /dev/null @@ -1,65 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Bowed Member List

This is the complete list of members for stk::Bowed, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
Bowed(StkFloat lowestFrequency=8.0)stk::Bowed
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Bowed
controlChange(int number, StkFloat value)stk::Bowed [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Bowed [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Bowed [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Bowed [virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setVibrato(StkFloat gain)stk::Bowed [inline]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
startBowing(StkFloat amplitude, StkFloat rate)stk::Bowed
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stopBowing(StkFloat rate)stk::Bowed
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Bowed [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Bowed [inline, virtual]
~Bowed(void)stk::Bowed
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed.html deleted file mode 100644 index ac3e4946aa..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed.html +++ /dev/null @@ -1,158 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Bowed Class Reference

-

STK bowed string instrument class. -More...

- -

#include <Bowed.h>

-
-Inheritance diagram for stk::Bowed:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Bowed (StkFloat lowestFrequency=8.0)
 Class constructor, taking the lowest desired playing frequency.
~Bowed (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void setVibrato (StkFloat gain)
 Set vibrato gain.
-void startBowing (StkFloat amplitude, StkFloat rate)
 Apply breath pressure to instrument with given amplitude and rate of increase.
-void stopBowing (StkFloat rate)
 Decrease breath pressure with given rate of decrease.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK bowed string instrument class.

-

This class implements a bowed string model, a la Smith (1986), after McIntyre, Schumacher, Woodhouse (1983).

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others.

-

Control Change Numbers:

-
    -
  • Bow Pressure = 2
  • -
  • Bow Position = 4
  • -
  • Vibrato Frequency = 11
  • -
  • Vibrato Gain = 1
  • -
  • Bow Velocity = 100
  • -
  • Frequency = 101
  • -
  • Volume = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012. Contributions by Esteban Maestre, 2011.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Bowed::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00129 {
-00130   unsigned int nChannels = lastFrame_.channels();
-00131 #if defined(_STK_DEBUG_)
-00132   if ( channel > frames.channels() - nChannels ) {
-00133     oStream_ << "Bowed::tick(): channel and StkFrames arguments are incompatible!";
-00134     handleError( StkError::FUNCTION_ARGUMENT );
-00135   }
-00136 #endif
-00137 
-00138   StkFloat *samples = &frames[channel];
-00139   unsigned int j, hop = frames.channels() - nChannels;
-00140   if ( nChannels == 1 ) {
-00141     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00142       *samples++ = tick();
-00143   }
-00144   else {
-00145     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00146       *samples++ = tick();
-00147       for ( j=1; j<nChannels; j++ )
-00148         *samples++ = lastFrame_[j];
-00149     }
-00150   }
-00151 
-00152   return frames;
-00153 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Bowed.png deleted file mode 100644 index 3bd7e93172d9bc79a9de7a2fb5298e98228584cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmeAS@N?(olHy`uVBq!ia0vp^K0w^T!3-p;4F2v0QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%PTd%8G=R4~51dvH>-0uS4RKZR}I>z~*P zC^@dV(Ysr&?v|f-1HbdDimAFAPcF;sjnHEYZLw?c{GrWL{YH*$1rrDN+v5`Zj?~m= zOqbAl@UZku*iqNIw9hv7ODtnk#cQ~`GyS*<^w0jYUHznwpq1(GhC^{&xrm#yi$^<>{|-YXNOw&Z^Q(J=Gk(?`GGA3hxRFe7Q!^BMf> z6AjNYi#_Gev6+=T%iQ4fV%h(Nd*%P}NUu66J@>}uh-Zu6?e+g+x>_Y`W`t&El-9RL zSwhNgJs>x@xUh8kPALC*M99FSgTe~DWM4fmt5rk diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass-members.html deleted file mode 100644 index 4cf1c8301e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass-members.html +++ /dev/null @@ -1,65 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Brass Member List

This is the complete list of members for stk::Brass, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
Brass(StkFloat lowestFrequency=8.0)stk::Brass
channelsOut(void) const stk::Instrmnt [inline]
clear()stk::Brass
controlChange(int number, StkFloat value)stk::Brass [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Brass [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Brass [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Brass [virtual]
setLip(StkFloat frequency)stk::Brass
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
startBlowing(StkFloat amplitude, StkFloat rate)stk::Brass
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stopBlowing(StkFloat rate)stk::Brass
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Brass [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Brass [inline, virtual]
~Brass()stk::Brass
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass.html deleted file mode 100644 index a40908b5d4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass.html +++ /dev/null @@ -1,177 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Brass Class Reference

-

STK simple brass instrument class. -More...

- -

#include <Brass.h>

-
-Inheritance diagram for stk::Brass:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 Brass (StkFloat lowestFrequency=8.0)
 Class constructor, taking the lowest desired playing frequency.
~Brass ()
 Class destructor.
-void clear ()
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void setLip (StkFloat frequency)
 Set the lips frequency.
-void startBlowing (StkFloat amplitude, StkFloat rate)
 Apply breath pressure to instrument with given amplitude and rate of increase.
-void stopBlowing (StkFloat rate)
 Decrease breath pressure with given rate of decrease.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK simple brass instrument class.

-

This class implements a simple brass instrument waveguide model, a la Cook (TBone, HosePlayer).

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others.

-

Control Change Numbers:

-
    -
  • Lip Tension = 2
  • -
  • Slide Length = 4
  • -
  • Vibrato Frequency = 11
  • -
  • Vibrato Gain = 1
  • -
  • Volume = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Brass::Brass (StkFloat  lowestFrequency = 8.0 ) 
-
-
- -

Class constructor, taking the lowest desired playing frequency.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Brass::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00119 {
-00120   unsigned int nChannels = lastFrame_.channels();
-00121 #if defined(_STK_DEBUG_)
-00122   if ( channel > frames.channels() - nChannels ) {
-00123     oStream_ << "Brass::tick(): channel and StkFrames arguments are incompatible!";
-00124     handleError( StkError::FUNCTION_ARGUMENT );
-00125   }
-00126 #endif
-00127 
-00128   StkFloat *samples = &frames[channel];
-00129   unsigned int j, hop = frames.channels() - nChannels;
-00130   if ( nChannels == 1 ) {
-00131     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00132       *samples++ = tick();
-00133   }
-00134   else {
-00135     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00136       *samples++ = tick();
-00137       for ( j=1; j<nChannels; j++ )
-00138         *samples++ = lastFrame_[j];
-00139     }
-00140   }
-00141 
-00142   return frames;
-00143 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Brass.png deleted file mode 100644 index ffc40bad1e7e4b2247d4554a5ee67d13a458b23b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^K0w^T!3-p;4F2v0QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%RJdb&7&CV#TZ;$eXl-+tH43mzyxIFQYDayE|@GYBXRmWw6XFo;i zIhaEjS@>54B*cW>nD2C3>y@hP>eXc*Eo8-BdGX%Lt*$wAMxyBB@9$4vhAlKPJez%H z`gfr9oZX+;bM($yo|T^Q^x~=dd+(3NCkC7UTp(O626V#S@4frdr@H70YpVu&AC0@? zn{=c@5a@;(9UTgV9H099b=aF*65a-jJ(D*#bU0F{FIT>%?X~9d^W1BsG7{%YrA>ag z>ZQi>o>zaxO|uQnpWPA9oVQ`#vWwN3e3oAd4#>pHzT1>`n(fZ2nLxkiUvHnaH7 - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Chorus Member List

This is the complete list of members for stk::Chorus, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Effect [inline]
Chorus(StkFloat baseDelay=6000)stk::Chorus
clear(void)stk::Chorus [virtual]
Effect(void)stk::Effect [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Effect [inline]
lastOut(unsigned int channel=0)stk::Chorus [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setEffectMix(StkFloat mix)stk::Effect [inline, virtual]
setModDepth(StkFloat depth)stk::Chorus
setModFrequency(StkFloat frequency)stk::Chorus
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input, unsigned int channel=0)stk::Chorus [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Chorus [inline]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::Chorus [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Chorus.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Chorus.html deleted file mode 100644 index e98485d927..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Chorus.html +++ /dev/null @@ -1,293 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Chorus Class Reference

-

STK chorus effect class. -More...

- -

#include <Chorus.h>

-
-Inheritance diagram for stk::Chorus:
-
-
- - -stk::Effect -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - -

Public Member Functions

 Chorus (StkFloat baseDelay=6000)
 Class constructor, taking the median desired delay length.
-void clear (void)
 Reset and clear all internal state.
-void setModDepth (StkFloat depth)
 Set modulation depth in range 0.0 - 1.0.
-void setModFrequency (StkFloat frequency)
 Set modulation frequency.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed stereo frame.
StkFloat tick (StkFloat input, unsigned int channel=0)
 Input one sample to the effect and return the specified channel value of the computed stereo frame.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the effect and replace with stereo outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the effect and write stereo outputs to the oFrames object.
-

Detailed Description

-

STK chorus effect class.

-

This class implements a chorus effect. It takes a monophonic input signal and produces a stereo output signal.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Chorus::Chorus (StkFloat  baseDelay = 6000 ) 
-
-
- -

Class constructor, taking the median desired delay length.

-

An StkError can be thrown if the rawwave path is incorrect.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
StkFloat stk::Chorus::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed stereo frame.

-

Use the lastFrame() function to get both values of the last computed stereo frame. The channel argument must be 0 or 1 (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00094 {
-00095 #if defined(_STK_DEBUG_)
-00096   if ( channel > 1 ) {
-00097     oStream_ << "Chorus::lastOut(): channel argument must be less than 2!";
-00098     handleError( StkError::FUNCTION_ARGUMENT );
-00099   }
-00100 #endif
-00101 
-00102   return lastFrame_[channel];
-00103 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFloat stk::Chorus::tick (StkFloat  input,
unsigned int  channel = 0 
) [inline]
-
-
- -

Input one sample to the effect and return the specified channel value of the computed stereo frame.

-

Use the lastFrame() function to get both values of the computed stereo output frame. The channel argument must be 0 or 1 (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00106 {
-00107 #if defined(_STK_DEBUG_)
-00108   if ( channel > 1 ) {
-00109     oStream_ << "Chorus::tick(): channel argument must be less than 2!";
-00110     handleError( StkError::FUNCTION_ARGUMENT );
-00111   }
-00112 #endif
-00113 
-00114   delayLine_[0].setDelay( baseLength_ * 0.707 * ( 1.0 + modDepth_ * mods_[0].tick() ) );
-00115   delayLine_[1].setDelay( baseLength_  * 0.5 *  ( 1.0 - modDepth_ * mods_[1].tick() ) );
-00116   lastFrame_[0] = effectMix_ * ( delayLine_[0].tick( input ) - input ) + input;
-00117   lastFrame_[1] = effectMix_ * ( delayLine_[1].tick( input ) - input ) + input;
-00118   return lastFrame_[channel];
-00119 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Chorus::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline]
-
-
- -

Take a channel of the StkFrames object as inputs to the effect and replace with stereo outputs.

-

The StkFrames argument reference is returned. The stereo outputs are written to the StkFrames argument starting at the specified channel. Therefore, the channel argument must be less than ( channels() - 1 ) of the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00122 {
-00123 #if defined(_STK_DEBUG_)
-00124   if ( channel >= frames.channels() - 1 ) {
-00125     oStream_ << "Chorus::tick(): channel and StkFrames arguments are incompatible!";
-00126     handleError( StkError::FUNCTION_ARGUMENT );
-00127   }
-00128 #endif
-00129 
-00130   StkFloat *samples = &frames[channel];
-00131   unsigned int hop = frames.channels() - 1;
-00132   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00133     delayLine_[0].setDelay( baseLength_ * 0.707 * ( 1.0 + modDepth_ * mods_[0].tick() ) );
-00134     delayLine_[1].setDelay( baseLength_  * 0.5 *  ( 1.0 - modDepth_ * mods_[1].tick() ) );
-00135     *samples = effectMix_ * ( delayLine_[0].tick( *samples ) - *samples ) + *samples;
-00136     samples++;
-00137     *samples = effectMix_ * ( delayLine_[1].tick( *samples ) - *samples ) + *samples;
-00138   }
-00139 
-00140   lastFrame_[0] = *(samples-hop);
-00141   lastFrame_[1] = *(samples-hop+1);
-00142   return frames;
-00143 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::Chorus::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the effect and write stereo outputs to the oFrames object.

-

The iFrames object reference is returned. The iChannel argument must be less than the number of channels in the iFrames argument (the first channel is specified by 0). The oChannel argument must be less than ( channels() - 1 ) of the oFrames argument. However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00146 {
-00147 #if defined(_STK_DEBUG_)
-00148   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() - 1 ) {
-00149     oStream_ << "Chorus::tick(): channel and StkFrames arguments are incompatible!";
-00150     handleError( StkError::FUNCTION_ARGUMENT );
-00151   }
-00152 #endif
-00153 
-00154   StkFloat *iSamples = &iFrames[iChannel];
-00155   StkFloat *oSamples = &oFrames[oChannel];
-00156   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00157   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00158     delayLine_[0].setDelay( baseLength_ * 0.707 * ( 1.0 + modDepth_ * mods_[0].tick() ) );
-00159     delayLine_[1].setDelay( baseLength_  * 0.5 *  ( 1.0 - modDepth_ * mods_[1].tick() ) );
-00160     *oSamples = effectMix_ * ( delayLine_[0].tick( *iSamples ) - *iSamples ) + *iSamples;
-00161     *(oSamples+1) = effectMix_ * ( delayLine_[1].tick( *iSamples ) - *iSamples ) + *iSamples;
-00162   }
-00163 
-00164   lastFrame_[0] = *(oSamples-oHop);
-00165   lastFrame_[1] = *(oSamples-oHop+1);
-00166   return iFrames;
-00167 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Chorus.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Chorus.png deleted file mode 100644 index d18bb19c8810c174a6862395f422476d4dcfd19e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmeAS@N?(olHy`uVBq!ia0vp^UO?Qz!3-qJ^?LsRDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#JAqJY5_^Dj471y*Q~^frm99Z_dO2_LcG; z1`7+Xn%#a`rkA{2;-N=V-}+qb?A*zV+*Y+TaU8O2Q2E2sYFpOMr~Y3B`YRYbvAMQ(PVINY4{k; zet*H8|6G5adZm>!ZZRrsvx+$ItN)6C0#kIeac=1Esi}XpmonesSRLv#SM`U(+SRw7 z-aq|L*k(ZzXTR{5CRVbFwWs6h6RcBR&r#)XO zaZ0GB$xEo@H1EV@aw``njxgN@xNA+NR_j diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet-members.html deleted file mode 100644 index 9e68995eba..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet-members.html +++ /dev/null @@ -1,64 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Clarinet Member List

This is the complete list of members for stk::Clarinet, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
Clarinet(StkFloat lowestFrequency=8.0)stk::Clarinet
clear(void)stk::Clarinet
controlChange(int number, StkFloat value)stk::Clarinet [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Clarinet [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Clarinet [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Clarinet [virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
startBlowing(StkFloat amplitude, StkFloat rate)stk::Clarinet
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stopBlowing(StkFloat rate)stk::Clarinet
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Clarinet [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Clarinet [inline, virtual]
~Clarinet(void)stk::Clarinet
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet.html deleted file mode 100644 index f11cbac66f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet.html +++ /dev/null @@ -1,174 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Clarinet Class Reference

-

STK clarinet physical model class. -More...

- -

#include <Clarinet.h>

-
-Inheritance diagram for stk::Clarinet:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 Clarinet (StkFloat lowestFrequency=8.0)
 Class constructor, taking the lowest desired playing frequency.
~Clarinet (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void startBlowing (StkFloat amplitude, StkFloat rate)
 Apply breath pressure to instrument with given amplitude and rate of increase.
-void stopBlowing (StkFloat rate)
 Decrease breath pressure with given rate of decrease.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK clarinet physical model class.

-

This class implements a simple clarinet physical model, as discussed by Smith (1986), McIntyre, Schumacher, Woodhouse (1983), and others.

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others.

-

Control Change Numbers:

-
    -
  • Reed Stiffness = 2
  • -
  • Noise Gain = 4
  • -
  • Vibrato Frequency = 11
  • -
  • Vibrato Gain = 1
  • -
  • Breath Pressure = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Clarinet::Clarinet (StkFloat  lowestFrequency = 8.0 ) 
-
-
- -

Class constructor, taking the lowest desired playing frequency.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Clarinet::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00124 {
-00125   unsigned int nChannels = lastFrame_.channels();
-00126 #if defined(_STK_DEBUG_)
-00127   if ( channel > frames.channels() - nChannels ) {
-00128     oStream_ << "Clarinet::tick(): channel and StkFrames arguments are incompatible!";
-00129     handleError( StkError::FUNCTION_ARGUMENT );
-00130   }
-00131 #endif
-00132 
-00133   StkFloat *samples = &frames[channel];
-00134   unsigned int j, hop = frames.channels() - nChannels;
-00135   if ( nChannels == 1 ) {
-00136     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00137       *samples++ = tick();
-00138   }
-00139   else {
-00140     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00141       *samples++ = tick();
-00142       for ( j=1; j<nChannels; j++ )
-00143         *samples++ = lastFrame_[j];
-00144     }
-00145   }
-00146 
-00147   return frames;
-00148 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Clarinet.png deleted file mode 100644 index 4ff3d41b079116c92db9807f8931549ad4501f77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmV5sHY@eNtDbIj z!76P%=v|0uzNgfFuBCnf??t`2?gv_}nOv$?YbKYgJ-VmVs8ORvjT*JfI5MLgk{8rc zG>9M$L(Jnj|0xX+0T4ilKmb22upfc6S?Cg{>9no(LpPx_nzZ|l{Hz(`%IPN<)6>1; z(}|V7*822KEmnHcBK=OAAJ4hc9nDHnN~?kP2D)TmLTM(r|?83l*>p@%L%Nq?3O=+#+TTku#T4wwK)*c|`qEyz800000NkvXXu0mjf3`yma diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic-members.html deleted file mode 100644 index 4725df1993..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic-members.html +++ /dev/null @@ -1,60 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Cubic Member List

This is the complete list of members for stk::Cubic, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
Cubic(void)stk::Cubic [inline]
Function(void)stk::Function [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastOut(void) const stk::Function [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setA1(StkFloat a1)stk::Cubic [inline]
setA2(StkFloat a2)stk::Cubic [inline]
setA3(StkFloat a3)stk::Cubic [inline]
setGain(StkFloat gain)stk::Cubic [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setThreshold(StkFloat threshold)stk::Cubic [inline]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::Cubic [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Cubic [inline]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::Cubic [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic.html deleted file mode 100644 index 8f5014ff7d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic.html +++ /dev/null @@ -1,190 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Cubic Class Reference

-

STK cubic non-linearity class. -More...

- -

#include <Cubic.h>

-
-Inheritance diagram for stk::Cubic:
-
-
- - -stk::Function -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Cubic (void)
 Default constructor.
-void setA1 (StkFloat a1)
 Set the a1 coefficient value.
-void setA2 (StkFloat a2)
 Set the a2 coefficient value.
-void setA3 (StkFloat a3)
 Set the a3 coefficient value.
-void setGain (StkFloat gain)
 Set the gain value.
-void setThreshold (StkFloat threshold)
 Set the threshold value.
-StkFloat tick (StkFloat input)
 Input one sample to the function and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the function and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the function and write outputs to the oFrames object.
-

Detailed Description

-

STK cubic non-linearity class.

-

This class implements the cubic non-linearity that was used in SynthBuilder.

-

The formula implemented is:

-
    output = gain * (a1 * input + a2 * input^2 + a3 * input^3)
-

followed by a limiter for values outside +-threshold.

-

Ported to STK by Nick Porcaro, 2007. Updated for inclusion in STK distribution by Gary Scavone, 2011.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Cubic::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline]
-
-
- -

Take a channel of the StkFrames object as inputs to the function and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00100 {
-00101 #if defined(_STK_DEBUG_)
-00102   if ( channel >= frames.channels() ) {
-00103     oStream_ << "Cubic::tick(): channel and StkFrames arguments are incompatible!";
-00104     handleError( StkError::FUNCTION_ARGUMENT );
-00105   }
-00106 #endif
-00107 
-00108   StkFloat *samples = &frames[channel];
-00109   unsigned int hop = frames.channels();
-00110   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00111     *samples = tick( *samples );
-00112 
-00113   lastFrame_[0] = *(samples-hop);
-00114   return frames;
-00115 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::Cubic::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the function and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00118 {
-00119 #if defined(_STK_DEBUG_)
-00120   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00121     oStream_ << "Cubic::tick(): channel and StkFrames arguments are incompatible!";
-00122     handleError( StkError::FUNCTION_ARGUMENT );
-00123   }
-00124 #endif
-00125 
-00126   StkFloat *iSamples = &iFrames[iChannel];
-00127   StkFloat *oSamples = &oFrames[oChannel];
-00128   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00129   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop )
-00130     *oSamples = tick( *iSamples );
-00131 
-00132   lastFrame_[0] = *(oSamples-oHop);
-00133   return iFrames;
-00134 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Cubic.png deleted file mode 100644 index 9970726b2e62fe0c998037e3bafecb331541d302..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmeAS@N?(olHy`uVBq!ia0vp^Al$*h3?!YyeI5WQi2$Dv*Z=?j1DXH-ADBNsVFHi^ z#s>}@s6O=n36RTC666;Qlm>&Vr$USv7#JHpT^vIy7~kIY?K`Z%!n#YqM@Q=CEwyd2cgmK5)rI*{)PnL84FR$tNC9&EeQf7k9U%eU~q`pZ0X<-9k- z@yfN21effc6Il5wb?)7#m5;Vs?7e%BB{(JiW8$MfHx+&=8U6Dw-?jAT()r54T;`8Y zPC0az{e=EX3#dCj)v6qttzacRsekeWJ-!1hUgb5jJcZ(RoO$EHr1bP@R`5DzK@Knf zJ1>u?O#5VJ{bfmHsm14xJKN{Z|MX$QeIb4|u=PvN=^T8zTc`8-qmUi@rhg5MSZPsj f=CQAtC*R(SU1`r<+b6NW2x9Pb^>bP0l+XkK+Ysj2 diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay-members.html deleted file mode 100644 index 4eb7e944ac..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay-members.html +++ /dev/null @@ -1,72 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Delay Member List

This is the complete list of members for stk::Delay, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
addTo(StkFloat value, unsigned long tapDelay)stk::Delay
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Delay(unsigned long delay=0, unsigned long maxDelay=4095)stk::Delay
energy(void) const stk::Delay
Filter(void)stk::Filter [inline]
getDelay(void) const stk::Delay [inline]
getGain(void) const stk::Filter [inline]
getMaximumDelay(void)stk::Delay [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::Delay [inline]
nextOut(void)stk::Delay [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setDelay(unsigned long delay)stk::Delay
setGain(StkFloat gain)stk::Filter [inline]
setMaximumDelay(unsigned long delay)stk::Delay
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tapIn(StkFloat value, unsigned long tapDelay)stk::Delay
tapOut(unsigned long tapDelay)stk::Delay
tick(StkFloat input)stk::Delay [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Delay [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::Delay [inline]
~Delay()stk::Delay
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay.html deleted file mode 100644 index 5211c945ff..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay.html +++ /dev/null @@ -1,358 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Delay Class Reference

-

STK non-interpolating delay line class. -More...

- -

#include <Delay.h>

-
-Inheritance diagram for stk::Delay:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 Delay (unsigned long delay=0, unsigned long maxDelay=4095)
 The default constructor creates a delay-line with maximum length of 4095 samples and zero delay.
~Delay ()
 Class destructor.
-unsigned long getMaximumDelay (void)
 Get the maximum delay-line length.
void setMaximumDelay (unsigned long delay)
 Set the maximum delay-line length.
void setDelay (unsigned long delay)
 Set the delay-line length.
-unsigned long getDelay (void) const
 Return the current delay-line length.
StkFloat tapOut (unsigned long tapDelay)
 Return the value at tapDelay samples from the delay-line input.
-void tapIn (StkFloat value, unsigned long tapDelay)
 Set the value at tapDelay samples from the delay-line input.
StkFloat addTo (StkFloat value, unsigned long tapDelay)
 Sum the provided value into the delay line at tapDelay samples from the input.
-StkFloat lastOut (void) const
 Return the last computed output value.
StkFloat nextOut (void)
 Return the value that will be output by the next call to tick().
-StkFloat energy (void) const
 Calculate and return the signal energy in the delay-line.
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK non-interpolating delay line class.

-

This class implements a non-interpolating digital delay-line. If the delay and maximum length are not specified during instantiation, a fixed maximum length of 4095 and a delay of zero is set.

-

A non-interpolating delay line is typically used in fixed delay-length applications, such as for reverberation.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
stk::Delay::Delay (unsigned long  delay = 0,
unsigned long  maxDelay = 4095 
)
-
-
- -

The default constructor creates a delay-line with maximum length of 4095 samples and zero delay.

-

An StkError will be thrown if the delay parameter is less than zero, the maximum delay parameter is less than one, or the delay parameter is greater than the maxDelay value.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::Delay::setMaximumDelay (unsigned long  delay ) 
-
-
- -

Set the maximum delay-line length.

-

This method should generally only be used during initial setup of the delay line. If it is used between calls to the tick() function, without a call to clear(), a signal discontinuity will likely occur. If the current maximum length is greater than the new length, no memory allocation change is made.

- -
-
- -
-
- - - - - - - - - -
void stk::Delay::setDelay (unsigned long  delay ) 
-
-
- -

Set the delay-line length.

-

The valid range for delay is from 0 to the maximum delay-line length.

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::Delay::tapOut (unsigned long  tapDelay ) 
-
-
- -

Return the value at tapDelay samples from the delay-line input.

-

The tap point is determined modulo the delay-line length and is relative to the last input value (i.e., a tapDelay of zero returns the last input value).

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFloat stk::Delay::addTo (StkFloat  value,
unsigned long  tapDelay 
)
-
-
- -

Sum the provided value into the delay line at tapDelay samples from the input.

-

The new value is returned. The tap point is determined modulo the delay-line length and is relative to the last input value (i.e., a tapDelay of zero sums into the last input value).

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::Delay::nextOut (void  )  [inline]
-
-
- -

Return the value that will be output by the next call to tick().

-

This method is valid only for delay settings greater than zero!

- -

00087 { return inputs_[outPoint_]; };
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Delay::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00142 {
-00143 #if defined(_STK_DEBUG_)
-00144   if ( channel >= frames.channels() ) {
-00145     oStream_ << "Delay::tick(): channel and StkFrames arguments are incompatible!";
-00146     handleError( StkError::FUNCTION_ARGUMENT );
-00147   }
-00148 #endif
-00149 
-00150   StkFloat *samples = &frames[channel];
-00151   unsigned int hop = frames.channels();
-00152   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00153     inputs_[inPoint_++] = *samples * gain_;
-00154     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00155     *samples = inputs_[outPoint_++];
-00156     if ( outPoint_ == inputs_.size() ) outPoint_ = 0;
-00157   }
-00158 
-00159   lastFrame_[0] = *(samples-hop);
-00160   return frames;
-00161 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::Delay::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00164 {
-00165 #if defined(_STK_DEBUG_)
-00166   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00167     oStream_ << "Delay::tick(): channel and StkFrames arguments are incompatible!";
-00168     handleError( StkError::FUNCTION_ARGUMENT );
-00169   }
-00170 #endif
-00171 
-00172   StkFloat *iSamples = &iFrames[iChannel];
-00173   StkFloat *oSamples = &oFrames[oChannel];
-00174   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00175   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00176     inputs_[inPoint_++] = *iSamples * gain_;
-00177     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00178     *oSamples = inputs_[outPoint_++];
-00179     if ( outPoint_ == inputs_.size() ) outPoint_ = 0;
-00180   }
-00181 
-00182   lastFrame_[0] = *(oSamples-oHop);
-00183   return iFrames;
-00184 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Delay.png deleted file mode 100644 index 3edec252ae5f05858b2ebd8178c412fa771f6f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmeAS@N?(olHy`uVBq!ia0vp^PC(qj!3-o*exBt3QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%O|dAc};R4~4sd$I3`0*C8flaK%HE9D)y zyRJs=I+?>X^Q6WjLA|#>qSkGg+TAp*Lzl_LpqQcWH#1A#eNH9?ri4SO2D`*N>cl*j z^4+_3*Sh7%tqbdphIGbvNNb;zRmf57o1@LUih{VdzU zzAM)EuP{B+p`68Q9OqEu=`J*}!$n0&u(M*5cFxm93sfI5GAg~$WY~}&Vd<_D9>e0m za^T1|#tw%${0I8BEfLU)eerUK#{If3SC2L4<}ED{IPIi%WXjRAB~P!kt`V4gZl4&p zr9XFO(ypRceNVEdb?_?HasKJ&-gwPGxesV>1>;9mSx*-wu&s|y3T$i2nARDg6mVt^ ztNCep<+fUBmVhpko$j9)=A5^Y64)br_VV)btnIJ=NeXVVP|Y)6C%C7yGa+`Vz}!Vs zgT)`EB=(1=TSxH}X?>k12=r_4qu<4e){CZe*vu_#5qne4ae3RH{T1SZ+vG1N%S>>4 Rbrcj;44$rjF6*2UngF9r%yIw# diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA-members.html deleted file mode 100644 index 4c6afa9fd8..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA-members.html +++ /dev/null @@ -1,70 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::DelayA Member List

This is the complete list of members for stk::DelayA, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::DelayA [virtual]
DelayA(StkFloat delay=0.5, unsigned long maxDelay=4095)stk::DelayA
Filter(void)stk::Filter [inline]
getDelay(void) const stk::DelayA [inline]
getGain(void) const stk::Filter [inline]
getMaximumDelay(void)stk::DelayA [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::DelayA [inline]
nextOut(void)stk::DelayA [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setDelay(StkFloat delay)stk::DelayA
setGain(StkFloat gain)stk::Filter [inline]
setMaximumDelay(unsigned long delay)stk::DelayA
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tapIn(StkFloat value, unsigned long tapDelay)stk::DelayA
tapOut(unsigned long tapDelay)stk::DelayA
tick(StkFloat input)stk::DelayA [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::DelayA [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::DelayA [inline]
~DelayA()stk::DelayA
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA.html deleted file mode 100644 index cff9f9d086..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA.html +++ /dev/null @@ -1,339 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::DelayA Class Reference

-

STK allpass interpolating delay line class. -More...

- -

#include <DelayA.h>

-
-Inheritance diagram for stk::DelayA:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 DelayA (StkFloat delay=0.5, unsigned long maxDelay=4095)
 Default constructor creates a delay-line with maximum length of 4095 samples and delay = 0.5.
~DelayA ()
 Class destructor.
-void clear (void)
 Clears all internal states of the delay line.
-unsigned long getMaximumDelay (void)
 Get the maximum delay-line length.
void setMaximumDelay (unsigned long delay)
 Set the maximum delay-line length.
void setDelay (StkFloat delay)
 Set the delay-line length.
-StkFloat getDelay (void) const
 Return the current delay-line length.
StkFloat tapOut (unsigned long tapDelay)
 Return the value at tapDelay samples from the delay-line input.
-void tapIn (StkFloat value, unsigned long tapDelay)
 Set the value at tapDelay samples from the delay-line input.
-StkFloat lastOut (void) const
 Return the last computed output value.
StkFloat nextOut (void)
 Return the value which will be output by the next call to tick().
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK allpass interpolating delay line class.

-

This class implements a fractional-length digital delay-line using a first-order allpass filter. If the delay and maximum length are not specified during instantiation, a fixed maximum length of 4095 and a delay of 0.5 is set.

-

An allpass filter has unity magnitude gain but variable phase delay properties, making it useful in achieving fractional delays without affecting a signal's frequency magnitude response. In order to achieve a maximally flat phase delay response, the minimum delay possible in this implementation is limited to a value of 0.5.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
stk::DelayA::DelayA (StkFloat  delay = 0.5,
unsigned long  maxDelay = 4095 
)
-
-
- -

Default constructor creates a delay-line with maximum length of 4095 samples and delay = 0.5.

-

An StkError will be thrown if the delay parameter is less than zero, the maximum delay parameter is less than one, or the delay parameter is greater than the maxDelay value.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::DelayA::setMaximumDelay (unsigned long  delay ) 
-
-
- -

Set the maximum delay-line length.

-

This method should generally only be used during initial setup of the delay line. If it is used between calls to the tick() function, without a call to clear(), a signal discontinuity will likely occur. If the current maximum length is greater than the new length, no memory allocation change is made.

- -
-
- -
-
- - - - - - - - - -
void stk::DelayA::setDelay (StkFloat  delay ) 
-
-
- -

Set the delay-line length.

-

The valid range for delay is from 0.5 to the maximum delay-line length.

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::DelayA::tapOut (unsigned long  tapDelay ) 
-
-
- -

Return the value at tapDelay samples from the delay-line input.

-

The tap point is determined modulo the delay-line length and is relative to the last input value (i.e., a tapDelay of zero returns the last input value).

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::DelayA::nextOut (void  )  [inline]
-
-
- -

Return the value which will be output by the next call to tick().

-

This method is valid only for delay settings greater than zero!

- -

00126 {
-00127   if ( doNextOut_ ) {
-00128     // Do allpass interpolation delay.
-00129     nextOutput_ = -coeff_ * lastFrame_[0];
-00130     nextOutput_ += apInput_ + ( coeff_ * inputs_[outPoint_] );
-00131     doNextOut_ = false;
-00132   }
-00133 
-00134   return nextOutput_;
-00135 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::DelayA::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00157 {
-00158 #if defined(_STK_DEBUG_)
-00159   if ( channel >= frames.channels() ) {
-00160     oStream_ << "DelayA::tick(): channel and StkFrames arguments are incompatible!";
-00161     handleError( StkError::FUNCTION_ARGUMENT );
-00162   }
-00163 #endif
-00164 
-00165   StkFloat *samples = &frames[channel];
-00166   unsigned int hop = frames.channels();
-00167   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00168     inputs_[inPoint_++] = *samples * gain_;
-00169     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00170     *samples = nextOut();
-00171     lastFrame_[0] = *samples;
-00172     doNextOut_ = true;
-00173     apInput_ = inputs_[outPoint_++];
-00174     if ( outPoint_ == inputs_.size() ) outPoint_ = 0;
-00175   }
-00176 
-00177   return frames;
-00178 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::DelayA::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00181 {
-00182 #if defined(_STK_DEBUG_)
-00183   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00184     oStream_ << "DelayA::tick(): channel and StkFrames arguments are incompatible!";
-00185     handleError( StkError::FUNCTION_ARGUMENT );
-00186   }
-00187 #endif
-00188 
-00189   StkFloat *iSamples = &iFrames[iChannel];
-00190   StkFloat *oSamples = &oFrames[oChannel];
-00191   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00192   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00193     inputs_[inPoint_++] = *iSamples * gain_;
-00194     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00195     *oSamples = nextOut();
-00196     lastFrame_[0] = *oSamples;
-00197     doNextOut_ = true;
-00198     apInput_ = inputs_[outPoint_++];
-00199     if ( outPoint_ == inputs_.size() ) outPoint_ = 0;
-00200   }
-00201 
-00202   return iFrames;
-00203 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayA.png deleted file mode 100644 index 39e2c9b5112ceced142b2c217cc20e7a1e1011cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^-ay>J!3-p4ym@vANJ#|vgt-3y{~yTw|Np@J`3Vz% zEHFNB;6U}E|4)Eij*=k1V4yS@Ts;+H#K6GV>gnPbQo;E4?%lk@3OuX{eaavI_3z>4 zxsec*v35;R?=9WN4`=O97R}b%KT+?KRN~G^g(fTZ1fTuM3(w0&G6*tk?dL!CGCb_} zYlVrTr~aAk&Hbphclp)RenoQ^@9aEmyRoFt?QMV26#3Qtx3@l*$$lFB_G^hvf1+)! z<-W_?-0tmulc}9kQ}l<#+7!i=pD)R7&Ec4R zjX`1>!!N}NLid%Ew*J%k$m_1XT406o+b!(3m;YLy$0rtV`gBPv?`jF})h3O_B95ou zow#*crgz7&hANNT(skDZswbXWcGU8kcSZ7Phwp(U7q^^yU$i~_#lLNTr*!>~|DXM{ a*Z$;l1uJ8#luN)!V(@hJb6Mw<&;$TbCh^Sx diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL-members.html deleted file mode 100644 index 35eb704382..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL-members.html +++ /dev/null @@ -1,70 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::DelayL Member List

This is the complete list of members for stk::DelayL, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
DelayL(StkFloat delay=0.0, unsigned long maxDelay=4095)stk::DelayL
Filter(void)stk::Filter [inline]
getDelay(void) const stk::DelayL [inline]
getGain(void) const stk::Filter [inline]
getMaximumDelay(void)stk::DelayL [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::DelayL [inline]
nextOut(void)stk::DelayL [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setDelay(StkFloat delay)stk::DelayL
setGain(StkFloat gain)stk::Filter [inline]
setMaximumDelay(unsigned long delay)stk::DelayL
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tapIn(StkFloat value, unsigned long tapDelay)stk::DelayL
tapOut(unsigned long tapDelay)stk::DelayL
tick(StkFloat input)stk::DelayL [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::DelayL [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::DelayL [inline]
~DelayL()stk::DelayL
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL.html deleted file mode 100644 index 56499224f8..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL.html +++ /dev/null @@ -1,338 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::DelayL Class Reference

-

STK linear interpolating delay line class. -More...

- -

#include <DelayL.h>

-
-Inheritance diagram for stk::DelayL:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 DelayL (StkFloat delay=0.0, unsigned long maxDelay=4095)
 Default constructor creates a delay-line with maximum length of 4095 samples and zero delay.
~DelayL ()
 Class destructor.
-unsigned long getMaximumDelay (void)
 Get the maximum delay-line length.
void setMaximumDelay (unsigned long delay)
 Set the maximum delay-line length.
void setDelay (StkFloat delay)
 Set the delay-line length.
-StkFloat getDelay (void) const
 Return the current delay-line length.
StkFloat tapOut (unsigned long tapDelay)
 Return the value at tapDelay samples from the delay-line input.
-void tapIn (StkFloat value, unsigned long tapDelay)
 Set the value at tapDelay samples from the delay-line input.
-StkFloat lastOut (void) const
 Return the last computed output value.
StkFloat nextOut (void)
 Return the value which will be output by the next call to tick().
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK linear interpolating delay line class.

-

This class implements a fractional-length digital delay-line using first-order linear interpolation. If the delay and maximum length are not specified during instantiation, a fixed maximum length of 4095 and a delay of zero is set.

-

Linear interpolation is an efficient technique for achieving fractional delay lengths, though it does introduce high-frequency signal attenuation to varying degrees depending on the fractional delay setting. The use of higher order Lagrange interpolators can typically improve (minimize) this attenuation characteristic.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
stk::DelayL::DelayL (StkFloat  delay = 0.0,
unsigned long  maxDelay = 4095 
)
-
-
- -

Default constructor creates a delay-line with maximum length of 4095 samples and zero delay.

-

An StkError will be thrown if the delay parameter is less than zero, the maximum delay parameter is less than one, or the delay parameter is greater than the maxDelay value.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::DelayL::setMaximumDelay (unsigned long  delay ) 
-
-
- -

Set the maximum delay-line length.

-

This method should generally only be used during initial setup of the delay line. If it is used between calls to the tick() function, without a call to clear(), a signal discontinuity will likely occur. If the current maximum length is greater than the new length, no memory allocation change is made.

- -
-
- -
-
- - - - - - - - - -
void stk::DelayL::setDelay (StkFloat  delay ) 
-
-
- -

Set the delay-line length.

-

The valid range for delay is from 0 to the maximum delay-line length.

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::DelayL::tapOut (unsigned long  tapDelay ) 
-
-
- -

Return the value at tapDelay samples from the delay-line input.

-

The tap point is determined modulo the delay-line length and is relative to the last input value (i.e., a tapDelay of zero returns the last input value).

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::DelayL::nextOut (void  )  [inline]
-
-
- -

Return the value which will be output by the next call to tick().

-

This method is valid only for delay settings greater than zero!

- -

00121 {
-00122   if ( doNextOut_ ) {
-00123     // First 1/2 of interpolation
-00124     nextOutput_ = inputs_[outPoint_] * omAlpha_;
-00125     // Second 1/2 of interpolation
-00126     if (outPoint_+1 < inputs_.size())
-00127       nextOutput_ += inputs_[outPoint_+1] * alpha_;
-00128     else
-00129       nextOutput_ += inputs_[0] * alpha_;
-00130     doNextOut_ = false;
-00131   }
-00132 
-00133   return nextOutput_;
-00134 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::DelayL::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00155 {
-00156 #if defined(_STK_DEBUG_)
-00157   if ( channel >= frames.channels() ) {
-00158     oStream_ << "DelayL::tick(): channel and StkFrames arguments are incompatible!";
-00159     handleError( StkError::FUNCTION_ARGUMENT );
-00160   }
-00161 #endif
-00162 
-00163   StkFloat *samples = &frames[channel];
-00164   unsigned int hop = frames.channels();
-00165   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00166     inputs_[inPoint_++] = *samples * gain_;
-00167     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00168     *samples = nextOut();
-00169     doNextOut_ = true;
-00170     if ( ++outPoint_ == inputs_.size() ) outPoint_ = 0;
-00171   }
-00172 
-00173   lastFrame_[0] = *(samples-hop);
-00174   return frames;
-00175 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::DelayL::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00178 {
-00179 #if defined(_STK_DEBUG_)
-00180   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00181     oStream_ << "DelayL::tick(): channel and StkFrames arguments are incompatible!";
-00182     handleError( StkError::FUNCTION_ARGUMENT );
-00183   }
-00184 #endif
-00185 
-00186   StkFloat *iSamples = &iFrames[iChannel];
-00187   StkFloat *oSamples = &oFrames[oChannel];
-00188   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00189   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00190     inputs_[inPoint_++] = *iSamples * gain_;
-00191     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00192     *oSamples = nextOut();
-00193     doNextOut_ = true;
-00194     if ( ++outPoint_ == inputs_.size() ) outPoint_ = 0;
-00195   }
-00196 
-00197   lastFrame_[0] = *(oSamples-oHop);
-00198   return iFrames;
-00199 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1DelayL.png deleted file mode 100644 index cbb333cd914e6f744ad6eb46c82e539029f5a6db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^o}@s6O=n36RTC666;Qlm>&Vr$USv7#JHoT^vIy7~jsln0MHK!?m{a$^ZXPY#n4a zYLj7}}qWV^7upf1qROihkct)yW@;?7VQ+GQubui4(+WF#gcF^zB z3QO5z?p~U$qPbD@ta|vpkh#%HYu`;?V|Dza^s6t&XWw1+c+tBryDjrB|GcC6^6Zig z+pqXtS-bn+l#px@tsW53_hsT{@1RMOrYuoWefiqcJ!DFAl9K0nPlcv9CWhy`=H6cN z@>~~-0HcBGbJh-rJF*8jd$+1AWvsfHf9m=d^9f5_ypv|jT+%LO&V2FGX}!$#S7}QM zMYQLu_1zCC|Mk{tUHWwYf=Ty0xT?KtU*6txO(R5NC6JJLshmC?Xrrd5r`M(HlLbUs z9c$HJ3UVG@Q>m7=TmQZ)Z~6NP4M9&rw$$!pC^wJ$sp9we%$BF2g-hS`J5M_6cs5{% znqi_>(reebFV7XntS+uHIvb<5rskE*cDDU$ox47>X=Xn^d2XHKmB#A2W50JDS9w0c kPPsSq=l_@T9)Ta3S - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Drummer Member List

This is the complete list of members for stk::Drummer, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
controlChange(int number, StkFloat value)stk::Instrmnt [inline, virtual]
Drummer(void)stk::Drummer
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Drummer [virtual]
noteOn(StkFloat instrument, StkFloat amplitude)stk::Drummer [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Instrmnt [inline, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Drummer [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Drummer [inline, virtual]
~Drummer(void)stk::Drummer
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Drummer.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Drummer.html deleted file mode 100644 index 8e7a07cca3..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Drummer.html +++ /dev/null @@ -1,181 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Drummer Class Reference

-

STK drum sample player class. -More...

- -

#include <Drummer.h>

-
-Inheritance diagram for stk::Drummer:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - -

Public Member Functions

 Drummer (void)
 Class constructor.
~Drummer (void)
 Class destructor.
void noteOn (StkFloat instrument, StkFloat amplitude)
 Start a note with the given drum type and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK drum sample player class.

-

This class implements a drum sampling synthesizer using WvIn objects and one-pole filters. The drum rawwave files are sampled at 22050 Hz, but will be appropriately interpolated for other sample rates. You can specify the maximum polyphony (maximum number of simultaneous voices) via a define in the Drummer.h.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Drummer::Drummer (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Drummer::noteOn (StkFloat  instrument,
StkFloat  amplitude 
) [virtual]
-
-
- -

Start a note with the given drum type and amplitude.

-

Use general MIDI drum instrument numbers, converted to frequency values as if MIDI note numbers, to select a particular instrument. An StkError will be thrown if the rawwave path is incorrectly set.

- -

Implements stk::Instrmnt.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Drummer::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00101 {
-00102   unsigned int nChannels = lastFrame_.channels();
-00103 #if defined(_STK_DEBUG_)
-00104   if ( channel > frames.channels() - nChannels ) {
-00105     oStream_ << "Drummer::tick(): channel and StkFrames arguments are incompatible!";
-00106     handleError( StkError::FUNCTION_ARGUMENT );
-00107   }
-00108 #endif
-00109 
-00110   StkFloat *samples = &frames[channel];
-00111   unsigned int j, hop = frames.channels() - nChannels;
-00112   if ( nChannels == 1 ) {
-00113     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00114       *samples++ = tick();
-00115   }
-00116   else {
-00117     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00118       *samples++ = tick();
-00119       for ( j=1; j<nChannels; j++ )
-00120         *samples++ = lastFrame_[j];
-00121     }
-00122   }
-00123 
-00124   return frames;
-00125 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Drummer.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Drummer.png deleted file mode 100644 index 72e2627e7d7c59a41510d5b010397a4ace0b4104..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^Awb;0!3-q*JZ+W(DTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J8kJY5_^Dj471y_g^JiEhQ%&_r7=@*m2-1qfguamPazTof!og_%3wU{V>b= z&Ya1#*uiX1->ba+H|M=9{TKhpzdXA^_sa44B3b%%zh{Nk?+uXJKkX#f)ApY?)qka# zJktJEcbYqUf7dga1#Sy0*;gpO=w9VNMI&&LOQ%q+Z57l)_kfNA<-cEMW*@U}U{Ye3 z!!5{h!H@fkyF#g0>dB62p}SVTH4{!<#`Egq^B=6M!Zsgz_k7N~J{h^2691*PzBIjZ zTt1-wknfiIlH@zopr0J|yhg#Z8m diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo-members.html deleted file mode 100644 index 47249748cc..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo-members.html +++ /dev/null @@ -1,61 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Echo Member List

This is the complete list of members for stk::Echo, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Effect [inline]
clear()stk::Echo [virtual]
Echo(unsigned long maximumDelay=(unsigned long) Stk::sampleRate())stk::Echo
Effect(void)stk::Effect [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Effect [inline]
lastOut(void) const stk::Echo [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setDelay(unsigned long delay)stk::Echo
setEffectMix(StkFloat mix)stk::Effect [inline, virtual]
setMaximumDelay(unsigned long delay)stk::Echo
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::Echo [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Echo [inline]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::Echo [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo.html deleted file mode 100644 index 65276b8eb7..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo.html +++ /dev/null @@ -1,207 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Echo Class Reference

-

STK echo effect class. -More...

- -

#include <Echo.h>

-
-Inheritance diagram for stk::Echo:
-
-
- - -stk::Effect -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - -

Public Member Functions

 Echo (unsigned long maximumDelay=(unsigned long) Stk::sampleRate())
 Class constructor, taking the longest desired delay length (one second default value).
-void clear ()
 Reset and clear all internal state.
-void setMaximumDelay (unsigned long delay)
 Set the maximum delay line length in samples.
-void setDelay (unsigned long delay)
 Set the delay line length in samples.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the effect and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the effect and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the effect and write outputs to the oFrames object.
-

Detailed Description

-

STK echo effect class.

-

This class implements an echo effect.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Echo::Echo (unsigned long  maximumDelay = (unsigned long) Stk::sampleRate() ) 
-
-
- -

Class constructor, taking the longest desired delay length (one second default value).

-

The default delay value is set to 1/2 the maximum delay length.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Echo::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline]
-
-
- -

Take a channel of the StkFrames object as inputs to the effect and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00079 {
-00080 #if defined(_STK_DEBUG_)
-00081   if ( channel >= frames.channels() ) {
-00082     oStream_ << "Echo::tick(): channel and StkFrames arguments are incompatible!";
-00083     handleError( StkError::FUNCTION_ARGUMENT );
-00084   }
-00085 #endif
-00086 
-00087   StkFloat *samples = &frames[channel];
-00088   unsigned int hop = frames.channels();
-00089   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00090     *samples = effectMix_ * ( delayLine_.tick( *samples ) - *samples ) + *samples;
-00091   }
-00092 
-00093   lastFrame_[0] = *(samples-hop);
-00094   return frames;
-00095 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::Echo::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the effect and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00098 {
-00099 #if defined(_STK_DEBUG_)
-00100   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00101     oStream_ << "Echo::tick(): channel and StkFrames arguments are incompatible!";
-00102     handleError( StkError::FUNCTION_ARGUMENT );
-00103   }
-00104 #endif
-00105 
-00106   StkFloat *iSamples = &iFrames[iChannel];
-00107   StkFloat *oSamples = &oFrames[oChannel];
-00108   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00109   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00110     *oSamples = effectMix_ * ( delayLine_.tick( *iSamples ) - *iSamples ) + *iSamples;
-00111   }
-00112 
-00113   lastFrame_[0] = *(oSamples-oHop);
-00114   return iFrames;
-00115 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Echo.png deleted file mode 100644 index 1441e0d5528e49e9d4fb25f3690461be4bb6725a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477 zcmeAS@N?(olHy`uVBq!ia0vp^PC(qj!3-o*exBt3QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%RZc)B=-R4~4sd-2?11&&r*laGJpf9@9$ z5y>|HrXJ1oGRXB$%VDYf)1upo0xt*^x-@X4@f|4K-*DiAts{dAgO3G&+IO~#=b2Vs zxwx(LJLkcTW?Qm1hCC8~bgZa|UtpVn`#JU27sp?p@buGjIr63`s=O|(v!bCRp2>an z^9ldmuSlgG5!~7)Deq9@=`J*}!$n0&uye;|?VP8J7N{n5GYEbWVQ_G9_$~SPC*#6< z#s?g?G$&}-FgQ%&J)-!yF~i!C#WHxKO83S^VWv&uA;%WAHs284r0`6K?c(%c@lB2q zo!6YcY<7RM^?{R%PnvJkj6RQ(KWC~YH3J>6zfkcSR@;qR)+)?ORmv04ICgl}>Z{iU zPruS-(rCSXXKpgXmV%y}O&QjT`|RFoe9)|Yrs#HO4eM^U+pb&I8Xwx{&k=pXnq%ov xt>t&CHC&FQO#7q1METEW>q+w?l}wa!>MJ(O6e{Jn^8(|7!PC{xWt~$(696@c%8LL1 diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect-members.html deleted file mode 100644 index ba4509a0fe..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect-members.html +++ /dev/null @@ -1,54 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Effect Member List

This is the complete list of members for stk::Effect, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Effect [inline]
clear()=0stk::Effect [pure virtual]
Effect(void)stk::Effect [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Effect [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setEffectMix(StkFloat mix)stk::Effect [inline, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect.html deleted file mode 100644 index ee780341cc..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect.html +++ /dev/null @@ -1,74 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Effect Class Reference

-

STK abstract effects parent class. -More...

- -

#include <Effect.h>

-
-Inheritance diagram for stk::Effect:
-
-
- - -stk::Stk -stk::Chorus -stk::Echo -stk::FreeVerb -stk::JCRev -stk::LentPitShift -stk::NRev -stk::PitShift -stk::PRCRev - -
-
- -

List of all members.

- - - - - - - - - - - - -

Public Member Functions

Effect (void)
 Class constructor.
-unsigned int channelsOut (void) const
 Return the number of output channels for the class.
-const StkFrameslastFrame (void) const
 Return an StkFrames reference to the last output sample frame.
-virtual void clear ()=0
 Reset and clear all internal state.
-virtual void setEffectMix (StkFloat mix)
 Set the mixture of input and "effected" levels in the output (0.0 = input only, 1.0 = effect only).
-

Detailed Description

-

STK abstract effects parent class.

-

This class provides common functionality for STK effects subclasses. It is general enough to support both monophonic and polyphonic input/output classes.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Effect.png deleted file mode 100644 index 8c9278f31e4c4f01a01e0684bffb339093b4685e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1761 zcmb7_c~BEq0LBAKD~F;Iv1H`}S?7m*;`? zO52oBDAanKt22m5V*Iz6QBI7!>M@Se)}dpC9Gk3XaB)8LOOso+K(Ck>&O(ko9Hm;|*D6du|)! zG-G>TeY?43aZV+NA$<|(v_=VSlmG^meN#|lfz@?Mjy9wQ83N3s=DdLpptG9Rm80nugdD)US$yQ2fk}m+_)Un1bEZPwz^sM(W!V$EwvaHXKl#>cTHVEgyKk@VO_NvP zY653p?&r#~V_ppZP2ftT+d3&mqf-&4=GS7=_aO_A_j+AfTDcTuayE>GrX*GcTMyZ^{m0;nQ;ZI5VKd1b>iY@V<{mU1@N_kPU+rD*JcwMe%(ZK#6dKTxkCps;RQ2eeuX6ld?$W0zSq=3#82nM~zX+*WKMB%v{= z7h!mOIo0YzL52sMSua?{I5t|5jdN5)PW>$27b8JZ9%-bJsg4;1J_ zrBiqOL_XGKW$1f_n;qJ{dfH>KB&CV{+(*PGb;*|QAQJBlcC+78Mc>o}2KhFH@3fR1 zL@`2Q#@|6utmL>_;5?D8*#WyP5ttY`mk_ZNPOSF42c8PY?1VpLhL$ZEdwBHmVAbI$ zvz*|niVW35)V)@3>=S!hBAQx7^;l0f`%XZCZ=9_TxZsH;ku|BUzwc^~m>Fz2BL^o< zOeb~6W>o#SAuOSVQX+7CQW9R{v58$%#dmEB z0Z-*4JVwR0;PEs1J?}r7o4TfwqY1p0|38{(@&>k_>W7b~cA+!)m+1QJ(UAjh-9Sy& z^=TJt(J8wjHFW-U?fCGmZ`nedDN;D*`~;^~RC6ajzxvgbX{8d}z1zryOz`x9+^JU29U7*}}}NdW3F!gy=(aJZCX zj?{%Q5&`4ovpuEnQOz}|JFL|fFd#jcwnkgKdxS+*3U4%H6j&SUpehUHKwWLC9!2il z2bM6oAnirdE0D_}zKa^|IXh&MYSS%7e;<(;^R$%Q0mQ5{wdnJjx@ozoqJd{KU&fWtXG?gYDWmo@@z!Vo{folz-9Hwbj5seg!NxZopjbH93I?gmS zt5_e*chrsr;G~7C!bLjzy(Efpm*c4H?!H9OzA#+SDB+HqK8r$*JcJi<-)Eu28Da8t z@VQb`zhlR@Q5gdx&iJLX`vi|3v*l)V|CZUWS^CBnwfA{H>jlalIkCeUi+RocK=cl6 z)J i{_rv7E)NYYnOv`F^Tu99-F)PKgu=OaI{)EFPX7m`o*eN2 diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope-members.html deleted file mode 100644 index 43266c4e69..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope-members.html +++ /dev/null @@ -1,64 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Envelope Member List

This is the complete list of members for stk::Envelope, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Generator [inline]
Envelope(void)stk::Envelope
Generator(void)stk::Generator [inline]
getState(void) const stk::Envelope [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
keyOff(void)stk::Envelope [inline]
keyOn(void)stk::Envelope [inline]
lastFrame(void) const stk::Generator [inline]
lastOut(void) const stk::Envelope [inline]
operator=(const Envelope &e)stk::Envelope
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
setRate(StkFloat rate)stk::Envelope
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setTarget(StkFloat target)stk::Envelope
setTime(StkFloat time)stk::Envelope
setValue(StkFloat value)stk::Envelope
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(void)stk::Envelope [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Envelope [inline, virtual]
~Envelope(void)stk::Envelope
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope.html deleted file mode 100644 index 5176bd5b00..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope.html +++ /dev/null @@ -1,180 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Envelope Class Reference

-

STK linear line envelope class. -More...

- -

#include <Envelope.h>

-
-Inheritance diagram for stk::Envelope:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Envelope (void)
 Default constructor.
~Envelope (void)
 Class destructor.
-Envelopeoperator= (const Envelope &e)
 Assignment operator.
-void keyOn (void)
 Set target = 1.
-void keyOff (void)
 Set target = 0.
void setRate (StkFloat rate)
 Set the rate.
void setTime (StkFloat time)
 Set the rate based on a positive time duration (seconds).
-void setTarget (StkFloat target)
 Set the target value.
-void setValue (StkFloat value)
 Set current and target values to value.
-int getState (void) const
 Return the current envelope state (0 = at target, 1 otherwise).
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (void)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK linear line envelope class.

-

This class implements a simple linear line envelope generator which is capable of ramping to an arbitrary target value by a specified rate. It also responds to simple keyOn and keyOff messages, ramping to 1.0 on keyOn and to 0.0 on keyOff.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::Envelope::setRate (StkFloat  rate ) 
-
-
- -

Set the rate.

-

The rate must be positive (though a value of 0.0 is allowed).

- -
-
- -
-
- - - - - - - - - -
void stk::Envelope::setTime (StkFloat  time ) 
-
-
- -

Set the rate based on a positive time duration (seconds).

-

The rate is calculated such that the envelope will ramp from a value of 0.0 to 1.0 in the specified time duration.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Envelope::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00112 {
-00113 #if defined(_STK_DEBUG_)
-00114   if ( channel >= frames.channels() ) {
-00115     oStream_ << "Envelope::tick(): channel and StkFrames arguments are incompatible!";
-00116     handleError( StkError::FUNCTION_ARGUMENT );
-00117   }
-00118 #endif
-00119 
-00120   StkFloat *samples = &frames[channel];
-00121   unsigned int hop = frames.channels();
-00122   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00123     *samples = tick();
-00124 
-00125   return frames;
-00126 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Envelope.png deleted file mode 100644 index c90e7e83a7147126f745e5f2ce1ee66de3f8468c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^Q9#_m!3-n=8hAv2lth3}i0l9V|AEZ^{}0TcpD+Q) z0^ZXBZSl=RQ8!gqsQwK!adD_+nEZ)5PX{BLZv zX6n+g>uvRHvDq_Z-LFffv0sX>a+>64^>WE%5E1X0pSU(h=*pxzXYXS3 zyIc~X?Y(v#?|+_M*9@%t)|sB+TeAO4i^|-ROP=Z=V*ez!2eSmt<6ZZQ?;W$75Ik$!9DBV@^Kuu*{oX%yjj2GjzU-OE-+gQ5PN=@WXM_H) i@=HIf|CU*;`ODB~r6v%;)K?9RPzFy|KbLh*2~7ZleD-+& diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM-members.html deleted file mode 100644 index 0646f7ce8b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM-members.html +++ /dev/null @@ -1,71 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::FM Member List

This is the complete list of members for stk::FM, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::FM
controlChange(int number, StkFloat value)stk::FM [virtual]
FM(unsigned int operators=4)stk::FM
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::FM
keyOn(void)stk::FM
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
loadWaves(const char **filenames)stk::FM
noteOff(StkFloat amplitude)stk::FM [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)=0stk::Instrmnt [pure virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setControl1(StkFloat cVal)stk::FM [inline]
setControl2(StkFloat cVal)stk::FM [inline]
setFrequency(StkFloat frequency)stk::FM [virtual]
setGain(unsigned int waveIndex, StkFloat gain)stk::FM
setModulationDepth(StkFloat mDepth)stk::FM [inline]
setModulationSpeed(StkFloat mSpeed)stk::FM [inline]
setRatio(unsigned int waveIndex, StkFloat ratio)stk::FM
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int)=0stk::FM [pure virtual]
tick(StkFrames &frames, unsigned int channel=0)=0stk::FM [pure virtual]
~FM(void)stk::FM [virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM.html deleted file mode 100644 index bb1f1e5bd4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM.html +++ /dev/null @@ -1,174 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::FM Class Reference

-

STK abstract FM synthesis base class. -More...

- -

#include <FM.h>

-
-Inheritance diagram for stk::FM:
-
-
- - -stk::Instrmnt -stk::Stk -stk::BeeThree -stk::FMVoices -stk::HevyMetl -stk::PercFlut -stk::Rhodey -stk::TubeBell -stk::Wurley - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 FM (unsigned int operators=4)
 Class constructor, taking the number of wave/envelope operators to control.
-virtual ~FM (void)
 Class destructor.
-void clear (void)
 Reset and clear all wave and envelope states.
-void loadWaves (const char **filenames)
 Load the rawwave filenames in waves.
-virtual void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void setRatio (unsigned int waveIndex, StkFloat ratio)
 Set the frequency ratio for the specified wave.
-void setGain (unsigned int waveIndex, StkFloat gain)
 Set the gain for the specified wave.
-void setModulationSpeed (StkFloat mSpeed)
 Set the modulation speed in Hz.
-void setModulationDepth (StkFloat mDepth)
 Set the modulation depth.
-void setControl1 (StkFloat cVal)
 Set the value of control1.
-void setControl2 (StkFloat cVal)
 Set the value of control1.
-void keyOn (void)
 Start envelopes toward "on" targets.
-void keyOff (void)
 Start envelopes toward "off" targets.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-virtual void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-virtual StkFloat tick (unsigned int)=0
 Compute and return one output sample.
virtual StkFramestick (StkFrames &frames, unsigned int channel=0)=0
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK abstract FM synthesis base class.

-

This class controls an arbitrary number of waves and envelopes, determined via a constructor argument.

-

Control Change Numbers:

-
    -
  • Control One = 2
  • -
  • Control Two = 4
  • -
  • LFO Speed = 11
  • -
  • LFO Depth = 1
  • -
  • ADSR 2 & 4 Target = 128
  • -
-

The basic Chowning/Stanford FM patent expired in 1995, but there exist follow-on patents, mostly assigned to Yamaha. If you are of the type who should worry about this (making money) worry away.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::FM::FM (unsigned int  operators = 4 ) 
-
-
- -

Class constructor, taking the number of wave/envelope operators to control.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
virtual StkFrames& stk::FM::tick (StkFrames frames,
unsigned int  channel = 0 
) [pure virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

Implemented in stk::BeeThree, stk::FMVoices, stk::HevyMetl, stk::PercFlut, stk::Rhodey, stk::TubeBell, and stk::Wurley.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FM.png deleted file mode 100644 index 1005fbb8d07d7b2a56f06ff8fc8e3494dfc5e2b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1685 zcmZ`)dpJ~S7$5CJF3D)KYCP4NNl#2BMm02*l1o#XgiX0KA#%wciE3P0$|dQB8H`aG zRv5J|<1|P#h%?nH)Xp(UIh$r@$|ah_?4kB)_m4f#bAG?~J>T~|@B4e-_dH*^3*AXq z8>fxIV03A_>|HUK1t4m-Xnuzxg`8Q6(lQrkcL$Y9g__A`dfi&$bVZx_Bc)LP$>B93_H8Tg5&G9Knm@1gV~t z;gscxQDF9NfWpNG-7*QMjSzYo@6kJkEr4h$a90Dk=bZ%llfKa)5Ai*R43SQUsj+k# z_rm+$o&j5?@AF8g_sGW_1E|fX`!D<=;J;{L2&uDlzF^^>uQqQm^vEyZpFtzFcw6M5 z^!_+N;H}k@J=uFR8bKo@&+9afDp_iZx8(%Ru6OW!*dC(=jOrqEvxmXRx##I4&<1O2 zbC#9iiy+0i@Y0ueY9h;s)#Ejgh{B>Smux(-RqPEz@ZNTD8w9&DPz?w|=Hq{eBpV7~ zfKZxEYj3LTc6tK4qNT_}nz3kH3@ZE^wd@f$Ef$M>K0aMwVHj7?z6->gd{vdSkSj4@WN{L)W7qN5eh~`mSSnuf2 zwlHh+8yCp|>|w;M0$=eW_DCcn3|Du4W;0nZo+AC2$QH&jW^i7y>7ds~53#&sLtcj} zU$X2}IoNvz7xG8bCk=q$nlI@2nJ234MCx+0AN>;AY$Ysq+fKQ0Ii!jqIoOr7vGh4F z0h%mPMk%}6Y9xAngY4XhfpV$Y{+Oe+8VfCDt1Fq$bK+Xz19rZ6yU5D(-X zyQN{I6#)o(U+Cdj68hT$iTP@Z0PY|H-F<>7_+&sWFD#^Rlb~5X=-}(;*H}|i0>gII zgmTB>r5Vh7@C|loLXb%j{H!8HQ6!ld3OAW4$#t8tBLn@R-HDDu+ZBK;g6X&2mLbrr zexc)Gxwpx*#o}B4rJ5!W1Qp6a9^6xg8?k0 z#e2%1JcgAQg7BG?kln-mQuxyux|;ZWGB`e7D(otJ*)Gj`P~`q@mBcS$`k0yHaOK_F zb&P5K4^-gR?Ww>q&}X`5?Wjdb&aL|Jm7UXm@uQIBM#0sx-XOWo12NO)RbG39-Q-?n zc~0T4^0EW1uxiPahj=Qxvc!^>D21(tW^XEI({pOqJSZZ*E<5|?G8W0#p8E$ - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::FMVoices Member List

This is the complete list of members for stk::FMVoices, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::FM
controlChange(int number, StkFloat value)stk::FMVoices [virtual]
FM(unsigned int operators=4)stk::FM
FMVoices(void)stk::FMVoices
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::FM
keyOn(void)stk::FM
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
loadWaves(const char **filenames)stk::FM
noteOff(StkFloat amplitude)stk::FM [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::FMVoices [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setControl1(StkFloat cVal)stk::FM [inline]
setControl2(StkFloat cVal)stk::FM [inline]
setFrequency(StkFloat frequency)stk::FMVoices [virtual]
setGain(unsigned int waveIndex, StkFloat gain)stk::FM
setModulationDepth(StkFloat mDepth)stk::FM [inline]
setModulationSpeed(StkFloat mSpeed)stk::FM [inline]
setRatio(unsigned int waveIndex, StkFloat ratio)stk::FM
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::FMVoices [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::FMVoices [inline, virtual]
~FM(void)stk::FM [virtual]
~FMVoices(void)stk::FMVoices
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FMVoices.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FMVoices.html deleted file mode 100644 index 7fcd169c24..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FMVoices.html +++ /dev/null @@ -1,167 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::FMVoices Class Reference

-

STK singing FM synthesis instrument. -More...

- -

#include <FMVoices.h>

-
-Inheritance diagram for stk::FMVoices:
-
-
- - -stk::FM -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

 FMVoices (void)
 Class constructor.
~FMVoices (void)
 Class destructor.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK singing FM synthesis instrument.

-

This class implements 3 carriers and a common modulator, also referred to as algorithm 6 of the TX81Z.

-
    Algorithm 6 is :
-                        /->1 -\
-                     4-|-->2 - +-> Out
-                        \->3 -/
-

Control Change Numbers:

-
    -
  • Vowel = 2
  • -
  • Spectral Tilt = 4
  • -
  • LFO Speed = 11
  • -
  • LFO Depth = 1
  • -
  • ADSR 2 & 4 Target = 128
  • -
-

The basic Chowning/Stanford FM patent expired in 1995, but there exist follow-on patents, mostly assigned to Yamaha. If you are of the type who should worry about this (making money) worry away.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::FMVoices::FMVoices (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::FMVoices::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::FM.

- -

00107 {
-00108   unsigned int nChannels = lastFrame_.channels();
-00109 #if defined(_STK_DEBUG_)
-00110   if ( channel > frames.channels() - nChannels ) {
-00111     oStream_ << "FMVoices::tick(): channel and StkFrames arguments are incompatible!";
-00112     handleError( StkError::FUNCTION_ARGUMENT );
-00113   }
-00114 #endif
-00115 
-00116   StkFloat *samples = &frames[channel];
-00117   unsigned int j, hop = frames.channels() - nChannels;
-00118   if ( nChannels == 1 ) {
-00119     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00120       *samples++ = tick();
-00121   }
-00122   else {
-00123     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00124       *samples++ = tick();
-00125       for ( j=1; j<nChannels; j++ )
-00126         *samples++ = lastFrame_[j];
-00127     }
-00128   }
-00129 
-00130   return frames;
-00131 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FMVoices.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FMVoices.png deleted file mode 100644 index ffcd4a84746accb452c836aa50212160d75f2123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YLAP)9@<@aqR-9o#& zZMwN~U&mK9d2QSDDZ8#oXV({+v)i)vH92qVL$96eIqT!d-rpyDpV0m?J1){xwga`zFsFNjk-d559TJEcMF^`AQn>KCQv}x1+gpIgJ2zyA{e`+IDV{NzP?B}*< z=hl9)?HYDy?L+qsq@;V&&K%fj{U&U~GH-|0E+p2B4c#i6@n2n49gN&;opaBtX>_IKKG Z@dMf1IWH|p&qM$K002ovPDHLkV1j0vK8*kX diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop-members.html deleted file mode 100644 index 7e9774a99a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop-members.html +++ /dev/null @@ -1,74 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::FileLoop Member List

This is the complete list of members for stk::FileLoop, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addPhase(StkFloat angle)stk::FileLoop
addPhaseOffset(StkFloat angle)stk::FileLoop
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
addTime(StkFloat time)stk::FileLoop [virtual]
channelsOut(void) const stk::FileLoop [inline]
closeFile(void)stk::FileLoop [inline, virtual]
FileLoop(unsigned long chunkThreshold=1000000, unsigned long chunkSize=1024)stk::FileLoop
FileLoop(std::string fileName, bool raw=false, bool doNormalize=true, unsigned long chunkThreshold=1000000, unsigned long chunkSize=1024)stk::FileLoop
FileWvIn(unsigned long chunkThreshold=1000000, unsigned long chunkSize=1024)stk::FileWvIn [protected]
FileWvIn(std::string fileName, bool raw=false, bool doNormalize=true, unsigned long chunkThreshold=1000000, unsigned long chunkSize=1024)stk::FileWvIn [protected]
getFileRate(void) const stk::FileLoop [inline, virtual]
getSize(void) const stk::FileLoop [inline, virtual]
handleError(const char *message, StkError::Type type)stk::Stk [protected, static]
handleError(std::string message, StkError::Type type)stk::Stk [protected, static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline, protected]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, protected, static]
isFinished(void) const stk::FileWvIn [inline, protected]
isOpen(void)stk::FileWvIn [inline, protected]
lastFrame(void) const stk::WvIn [inline, protected]
lastOut(unsigned int channel=0)stk::FileLoop [inline]
normalize(void)stk::FileLoop [inline, virtual]
normalize(StkFloat peak)stk::FileLoop [inline, virtual]
openFile(std::string fileName, bool raw=false, bool doNormalize=true)stk::FileLoop [virtual]
printErrors(bool status)stk::Stk [inline, protected, static]
rawwavePath(void)stk::Stk [inline, protected, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
reset(void)stk::FileLoop [inline, virtual]
sampleRate(void)stk::Stk [inline, protected, static]
setFrequency(StkFloat frequency)stk::FileLoop [inline]
setInterpolate(bool doInterpolate)stk::FileWvIn [inline, protected]
setRate(StkFloat rate)stk::FileLoop [virtual]
setRawwavePath(std::string path)stk::Stk [protected, static]
setSampleRate(StkFloat rate)stk::Stk [protected, static]
showWarnings(bool status)stk::Stk [inline, protected, static]
sleep(unsigned long milliseconds)stk::Stk [protected, static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [protected, static]
STK_FLOAT64stk::Stk [protected, static]
STK_SINT16stk::Stk [protected, static]
STK_SINT24stk::Stk [protected, static]
STK_SINT32stk::Stk [protected, static]
STK_SINT8stk::Stk [protected, static]
swap16(unsigned char *ptr)stk::Stk [protected, static]
swap32(unsigned char *ptr)stk::Stk [protected, static]
swap64(unsigned char *ptr)stk::Stk [protected, static]
tick(unsigned int channel=0)stk::FileLoop [virtual]
tick(StkFrames &frames)stk::FileLoop [virtual]
~FileLoop(void)stk::FileLoop
~FileWvIn(void)stk::FileWvIn [protected]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop.html deleted file mode 100644 index 253c554c43..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop.html +++ /dev/null @@ -1,378 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::FileLoop Class Reference

-

STK file looping / oscillator class. -More...

- -

#include <FileLoop.h>

-
-Inheritance diagram for stk::FileLoop:
-
-
- - -stk::FileWvIn -stk::WvIn -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

FileLoop (unsigned long chunkThreshold=1000000, unsigned long chunkSize=1024)
 Default constructor.
FileLoop (std::string fileName, bool raw=false, bool doNormalize=true, unsigned long chunkThreshold=1000000, unsigned long chunkSize=1024)
 Class constructor that opens a specified file.
~FileLoop (void)
 Class destructor.
void openFile (std::string fileName, bool raw=false, bool doNormalize=true)
 Open the specified file and load its data.
-void closeFile (void)
 Close a file if one is open.
-void reset (void)
 Clear outputs and reset time (file) pointer to zero.
-unsigned int channelsOut (void) const
 Return the number of audio channels in the data or stream.
void normalize (void)
 Normalize data to a maximum of +-1.0.
void normalize (StkFloat peak)
 Normalize data to a maximum of +-peak.
-unsigned long getSize (void) const
 Return the file size in sample frames.
StkFloat getFileRate (void) const
 Return the input file sample rate in Hz (not the data read rate).
void setRate (StkFloat rate)
 Set the data read rate in samples. The rate can be negative.
void setFrequency (StkFloat frequency)
 Set the data interpolation rate based on a looping frequency.
-void addTime (StkFloat time)
 Increment the read pointer by time samples, modulo file size.
void addPhase (StkFloat angle)
 Increment current read pointer by angle, relative to a looping frequency.
void addPhaseOffset (StkFloat angle)
 Add a phase offset to the current read pointer.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed frame.
StkFloat tick (unsigned int channel=0)
 Compute a sample frame and return the specified channel value.
StkFramestick (StkFrames &frames)
 Fill the StkFrames argument with computed frames and return the same reference.
-

Detailed Description

-

STK file looping / oscillator class.

-

This class provides audio file looping functionality. Any audio file that can be loaded by FileRead can be looped using this class.

-

FileLoop supports multi-channel data. It is important to distinguish the tick() method that computes a single frame (and returns only the specified sample of a multi-channel frame) from the overloaded one that takes an StkFrames object for multi-channel and/or multi-frame data.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void stk::FileLoop::openFile (std::string  fileName,
bool  raw = false,
bool  doNormalize = true 
) [virtual]
-
-
- -

Open the specified file and load its data.

-

Data from a previously opened file will be overwritten by this function. An StkError will be thrown if the file is not found, its format is unknown, or a read error occurs. If the file data is to be loaded incrementally from disk and normalization is specified, a scaling will be applied with respect to fixed-point limits. If the data format is floating-point, no scaling is performed.

- -

Reimplemented from stk::FileWvIn.

- -
-
- -
-
- - - - - - - - - -
void stk::FileLoop::normalize (void  )  [inline, virtual]
-
-
- -

Normalize data to a maximum of +-1.0.

-

This function has no effect when data is incrementally loaded from disk.

- -

Reimplemented from stk::FileWvIn.

- -

00065 { FileWvIn::normalize( 1.0 ); };
-

- -
-
- -
-
- - - - - - - - - -
void stk::FileLoop::normalize (StkFloat  peak )  [inline, virtual]
-
-
- -

Normalize data to a maximum of +-peak.

-

This function has no effect when data is incrementally loaded from disk.

- -

Reimplemented from stk::FileWvIn.

- -

00072 { FileWvIn::normalize( peak ); };
-

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::FileLoop::getFileRate (void  )  const [inline, virtual]
-
-
- -

Return the input file sample rate in Hz (not the data read rate).

-

WAV, SND, and AIF formatted files specify a sample rate in their headers. STK RAW files have a sample rate of 22050 Hz by definition. MAT-files are assumed to have a rate of 44100 Hz.

- -

Reimplemented from stk::FileWvIn.

- -

00083 { return data_.dataRate(); };
-

- -
-
- -
-
- - - - - - - - - -
void stk::FileLoop::setRate (StkFloat  rate )  [virtual]
-
-
- -

Set the data read rate in samples. The rate can be negative.

-

If the rate value is negative, the data is read in reverse order.

- -

Reimplemented from stk::FileWvIn.

- -
-
- -
-
- - - - - - - - - -
void stk::FileLoop::setFrequency (StkFloat  frequency )  [inline]
-
-
- -

Set the data interpolation rate based on a looping frequency.

-

This function determines the interpolation rate based on the file size and the current Stk::sampleRate. The frequency value corresponds to file cycles per second. The frequency can be negative, in which case the loop is read in reverse order.

- -

00098 { this->setRate( file_.fileSize() * frequency / Stk::sampleRate() ); };
-

- -
-
- -
-
- - - - - - - - - -
void stk::FileLoop::addPhase (StkFloat  angle ) 
-
-
- -

Increment current read pointer by angle, relative to a looping frequency.

-

This function increments the read pointer based on the file size and the current Stk::sampleRate. The anAngle value is a multiple of file size.

- -
-
- -
-
- - - - - - - - - -
void stk::FileLoop::addPhaseOffset (StkFloat  angle ) 
-
-
- -

Add a phase offset to the current read pointer.

-

This function determines a time offset based on the file size and the current Stk::sampleRate. The angle value is a multiple of file size.

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::FileLoop::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed frame.

-

For multi-channel files, use the lastFrame() function to get all values from the last computed frame. If no file data is loaded, the returned value is 0.0. The channel argument must be less than the number of channels in the file data (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Reimplemented from stk::FileWvIn.

- -

00129 { return FileWvIn::lastOut( channel ); };
-

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::FileLoop::tick (unsigned int  channel = 0 )  [virtual]
-
-
- -

Compute a sample frame and return the specified channel value.

-

For multi-channel files, use the lastFrame() function to get all values from the computed frame. If no file data is loaded, the returned value is 0.0. The channel argument must be less than the number of channels in the file data (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Reimplemented from stk::FileWvIn.

- -
-
- -
-
- - - - - - - - - -
StkFrames& stk::FileLoop::tick (StkFrames frames )  [virtual]
-
-
- -

Fill the StkFrames argument with computed frames and return the same reference.

-

The number of channels in the StkFrames argument should equal the number of channels in the file data. However, this is only checked if _STK_DEBUG_ is defined during compilation, in which case an incompatibility will trigger an StkError exception. If no file data is loaded, the function does nothing (a warning will be issued if _STK_DEBUG_ is defined during compilation and Stk::showWarnings() has been set to true).

- -

Reimplemented from stk::FileWvIn.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileLoop.png deleted file mode 100644 index 4587e18b4747df6ff243e39c026a3f93641b0fc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 642 zcmeAS@N?(olHy`uVBq!ia0vp^Abfy>8AvXOIr0!lNd)+Wxc>kDAISXw|G@nD2@`-U zFg|eLK=q;jPk>yGk|4iepfngEakt!T5IW-D%AVJS{UTp8S=s)c@f< zMeA0?*EdVvMshrvd~!{dwAy!$$rkJr?VX)i()bok{>Rig&AOSzg<-}gn}}uX6Tj*R zsETq1Uv{6k^V+m)adjd4boWHh=C5bUY%PCdsT@;Z-6y|Qom>A|NOjJv?-mpFoqp{v zX;<#c-^(w#*!r?Okoe5>#9Kyvl7~{K3XquJKIe|I&m$R^e+-<0H!}ZjJu}zCfu&)g zR?2T?NA^38)80189XTTwv~9x96I%ZB@39_h$yW$pF2Bj0JHG5QPteyO@fE*nt{pyf zI+E*$wu-#8iygzu|CeO@EcSi1OX+#%Qx7E0a8J-LoCCG7vqr9{sNbNoSfEl;Na;c_ zgU8NkZNIjjG1z1-yhoL>`V>^^~P`Pif2tWo${7kz3psN(Af$6Timv}UOsJ@V!cmvpVO`2 zu=Q*c!z#oxC;j%gdfNY+%-dA4xHB(r2A|R8y;uC_b@Z{nZ8hwZ&YxaA;oV1ewpYf! U2Sxan0uu~_r>mdKI;Vst0K8Nrl>h($ diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead-members.html deleted file mode 100644 index 395e82e28a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead-members.html +++ /dev/null @@ -1,60 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::FileRead Member List

This is the complete list of members for stk::FileRead, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channels(void) const stk::FileRead [inline]
close(void)stk::FileRead
fileRate(void) const stk::FileRead [inline]
FileRead(void)stk::FileRead
FileRead(std::string fileName, bool typeRaw=false, unsigned int nChannels=1, StkFormat format=STK_SINT16, StkFloat rate=22050.0)stk::FileRead
fileSize(void) const stk::FileRead [inline]
format(void) const stk::FileRead [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
isOpen(void)stk::FileRead
open(std::string fileName, bool typeRaw=false, unsigned int nChannels=1, StkFormat format=STK_SINT16, StkFloat rate=22050.0)stk::FileRead
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
read(StkFrames &buffer, unsigned long startFrame=0, bool doNormalize=true)stk::FileRead
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
~FileRead(void)stk::FileRead
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead.html deleted file mode 100644 index 1913dbfec5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead.html +++ /dev/null @@ -1,240 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::FileRead Class Reference

-

STK audio file input class. -More...

- -

#include <FileRead.h>

-
-Inheritance diagram for stk::FileRead:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

FileRead (void)
 Default constructor.
 FileRead (std::string fileName, bool typeRaw=false, unsigned int nChannels=1, StkFormat format=STK_SINT16, StkFloat rate=22050.0)
 Overloaded constructor that opens a file during instantiation.
~FileRead (void)
 Class destructor.
void open (std::string fileName, bool typeRaw=false, unsigned int nChannels=1, StkFormat format=STK_SINT16, StkFloat rate=22050.0)
 Open the specified file and determine its formatting.
-void close (void)
 If a file is open, close it.
-bool isOpen (void)
 Returns true if a file is currently open.
-unsigned long fileSize (void) const
 Return the file size in sample frames.
-unsigned int channels (void) const
 Return the number of audio channels in the file.
-StkFormat format (void) const
 Return the data format of the file.
StkFloat fileRate (void) const
 Return the file sample rate in Hz.
void read (StkFrames &buffer, unsigned long startFrame=0, bool doNormalize=true)
 Read sample frames from the file into an StkFrames object.
-

Detailed Description

-

STK audio file input class.

-

This class provides input support for various audio file formats. Multi-channel (>2) soundfiles are supported. The file data is returned via an external StkFrames object passed to the read() function. This class does not store its own copy of the file data, rather the data is read directly from disk.

-

FileRead currently supports uncompressed WAV, AIFF/AIFC, SND (AU), MAT-file (Matlab), and STK RAW file formats. Signed integer (8-, 16-, 24-, and 32-bit) and floating-point (32- and 64-bit) data types are supported. Compressed data types are not supported.

-

STK RAW files have no header and are assumed to contain a monophonic stream of 16-bit signed integers in big-endian byte order at a sample rate of 22050 Hz. MAT-file data should be saved in an array with each data channel filling a matrix row. The sample rate for MAT-files should be specified in a variable named "fs". If no such variable is found, the sample rate is assumed to be 44100 Hz.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
stk::FileRead::FileRead (std::string  fileName,
bool  typeRaw = false,
unsigned int  nChannels = 1,
StkFormat  format = STK_SINT16,
StkFloat  rate = 22050.0 
)
-
-
- -

Overloaded constructor that opens a file during instantiation.

-

An StkError will be thrown if the file is not found or its format is unknown or unsupported. The optional arguments allow a headerless file type to be supported. If typeRaw is false (the default), the subsequent parameters are ignored.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void stk::FileRead::open (std::string  fileName,
bool  typeRaw = false,
unsigned int  nChannels = 1,
StkFormat  format = STK_SINT16,
StkFloat  rate = 22050.0 
)
-
-
- -

Open the specified file and determine its formatting.

-

An StkError will be thrown if the file is not found or its format is unknown or unsupported. The optional arguments allow a headerless file type to be supported. If typeRaw is false (the default), the subsequent parameters are ignored.

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::FileRead::fileRate (void  )  const [inline]
-
-
- -

Return the file sample rate in Hz.

-

WAV, SND, and AIF formatted files specify a sample rate in their headers. By definition, STK RAW files have a sample rate of 22050 Hz. MAT-files are assumed to have a rate of 44100 Hz.

- -

00091 { return fileRate_; };
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void stk::FileRead::read (StkFrames buffer,
unsigned long  startFrame = 0,
bool  doNormalize = true 
)
-
-
- -

Read sample frames from the file into an StkFrames object.

-

The number of sample frames to read will be determined from the number of frames of the StkFrames argument. If this size is larger than the available data in the file (given the file size and starting frame index), the extra frames will be unaffected (the StkFrames object will not be resized). Optional parameters are provided to specify the starting sample frame within the file (default = 0) and whether to normalize the data with respect to fixed-point limits (default = true). An StkError will be thrown if a file error occurs or if the number of channels in the StkFrames argument is not equal to that in the file.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileRead.png deleted file mode 100644 index 48d3eb4d3d84cdf916a15242d7c4bf47b33e3f53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^!9X0q!3-pWe(anBq$C1-LR|m<{|{vT|9@cq{DcWW z78oBmaG?6o|0h5$M@f)hFi;u{uAT}pVqjq8_H=O!sbG9N_aWaQ1)dhmX&?Uezv1^f zeztEzR>gOuguH zgXeP8qXMG@Ce4$Zm-1GHO)s@eJ+bP0l+XkKf(){X diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite-members.html deleted file mode 100644 index a4fb6fd01b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite-members.html +++ /dev/null @@ -1,61 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::FileWrite Member List

This is the complete list of members for stk::FileWrite, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
close(void)stk::FileWrite
FILE_AIFstk::FileWrite [static]
FILE_MATstk::FileWrite [static]
FILE_RAWstk::FileWrite [static]
FILE_SNDstk::FileWrite [static]
FILE_WAVstk::FileWrite [static]
FileWrite(void)stk::FileWrite
FileWrite(std::string fileName, unsigned int nChannels=1, FILE_TYPE type=FILE_WAV, Stk::StkFormat format=STK_SINT16)stk::FileWrite
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
isOpen(void)stk::FileWrite
open(std::string fileName, unsigned int nChannels=1, FileWrite::FILE_TYPE type=FILE_WAV, Stk::StkFormat format=STK_SINT16)stk::FileWrite
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
write(StkFrames &buffer)stk::FileWrite
~FileWrite()stk::FileWrite [virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite.html deleted file mode 100644 index 8ba4b84c1f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite.html +++ /dev/null @@ -1,255 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::FileWrite Class Reference

-

STK audio file output class. -More...

- -

#include <FileWrite.h>

-
-Inheritance diagram for stk::FileWrite:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

FileWrite (void)
 Default constructor.
 FileWrite (std::string fileName, unsigned int nChannels=1, FILE_TYPE type=FILE_WAV, Stk::StkFormat format=STK_SINT16)
 Overloaded constructor used to specify a file name, type, and data format with this object.
-virtual ~FileWrite ()
 Class destructor.
void open (std::string fileName, unsigned int nChannels=1, FileWrite::FILE_TYPE type=FILE_WAV, Stk::StkFormat format=STK_SINT16)
 Create a file of the specified type and name and output samples to it in the given data format.
-void close (void)
 If a file is open, write out samples in the queue and then close it.
-bool isOpen (void)
 Returns true if a file is currently open.
void write (StkFrames &buffer)
 Write sample frames from the StkFrames object to the file.

Static Public Attributes

static const FILE_TYPE FILE_RAW
static const FILE_TYPE FILE_WAV
static const FILE_TYPE FILE_SND
static const FILE_TYPE FILE_AIF
static const FILE_TYPE FILE_MAT
-

Detailed Description

-

STK audio file output class.

-

This class provides output support for various audio file formats.

-

FileWrite writes samples to an audio file. It supports multi-channel data.

-

FileWrite currently supports uncompressed WAV, AIFF, AIFC, SND (AU), MAT-file (Matlab), and STK RAW file formats. Signed integer (8-, 16-, 24-, and 32-bit) and floating- point (32- and 64-bit) data types are supported. STK RAW files use 16-bit integers by definition. MAT-files will always be written as 64-bit floats. If a data type specification does not match the specified file type, the data type will automatically be modified. Compressed data types are not supported.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
stk::FileWrite::FileWrite (std::string  fileName,
unsigned int  nChannels = 1,
FILE_TYPE  type = FILE_WAV,
Stk::StkFormat  format = STK_SINT16 
)
-
-
- -

Overloaded constructor used to specify a file name, type, and data format with this object.

-

An StkError is thrown for invalid argument values or if an error occurs when initializing the output file.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void stk::FileWrite::open (std::string  fileName,
unsigned int  nChannels = 1,
FileWrite::FILE_TYPE  type = FILE_WAV,
Stk::StkFormat  format = STK_SINT16 
)
-
-
- -

Create a file of the specified type and name and output samples to it in the given data format.

-

An StkError is thrown for invalid argument values or if an error occurs when initializing the output file.

- -
-
- -
-
- - - - - - - - - -
void stk::FileWrite::write (StkFrames buffer ) 
-
-
- -

Write sample frames from the StkFrames object to the file.

-

An StkError will be thrown if the number of channels in the StkFrames argument does not agree with the number of channels specified when opening the file.

- -
-
-

Member Data Documentation

- -
-
- - - - -
const FILE_TYPE stk::FileWrite::FILE_RAW [static]
-
-
-

STK RAW file type.

- -
-
- -
-
- - - - -
const FILE_TYPE stk::FileWrite::FILE_WAV [static]
-
-
-

WAV file type.

- -
-
- -
-
- - - - -
const FILE_TYPE stk::FileWrite::FILE_SND [static]
-
-
-

SND (AU) file type.

- -
-
- -
-
- - - - -
const FILE_TYPE stk::FileWrite::FILE_AIF [static]
-
-
-

AIFF file type.

- -
-
- -
-
- - - - -
const FILE_TYPE stk::FileWrite::FILE_MAT [static]
-
-
-

Matlab MAT-file type.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWrite.png deleted file mode 100644 index b1161bf5b283714f59a04a3da7e4bd14a6cfe014..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^!9X0q!3-pWe(anBq$C1-LR|m<{|{vT|9@cq{DcWW z78oBmaG?6o|0h5$M@f)hFi;u{uAT}pVqjq8^K@|xsbG9N_afgR0}j{f-An%eKWW#% zqj5EN+bf|9s=Bi2G3&b5r_Pp7UAwQ<_*k_qal@)@;3;wW!Ws ZXZAA^>b~jUaT*v}44$rjF6*2UngAaJuGjzo diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn-members.html deleted file mode 100644 index d4c0230dc2..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn-members.html +++ /dev/null @@ -1,68 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::FileWvIn Member List

This is the complete list of members for stk::FileWvIn, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
addTime(StkFloat time)stk::FileWvIn [virtual]
channelsOut(void) const stk::WvIn [inline]
closeFile(void)stk::FileWvIn [virtual]
FileWvIn(unsigned long chunkThreshold=1000000, unsigned long chunkSize=1024)stk::FileWvIn
FileWvIn(std::string fileName, bool raw=false, bool doNormalize=true, unsigned long chunkThreshold=1000000, unsigned long chunkSize=1024)stk::FileWvIn
getFileRate(void) const stk::FileWvIn [inline, virtual]
getSize(void) const stk::FileWvIn [inline, virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
isFinished(void) const stk::FileWvIn [inline]
isOpen(void)stk::FileWvIn [inline]
lastFrame(void) const stk::WvIn [inline]
lastOut(unsigned int channel=0)stk::FileWvIn [inline]
normalize(void)stk::FileWvIn [virtual]
normalize(StkFloat peak)stk::FileWvIn [virtual]
openFile(std::string fileName, bool raw=false, bool doNormalize=true)stk::FileWvIn [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
reset(void)stk::FileWvIn [virtual]
sampleRate(void)stk::Stk [inline, static]
setInterpolate(bool doInterpolate)stk::FileWvIn [inline]
setRate(StkFloat rate)stk::FileWvIn [virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::FileWvIn [virtual]
tick(StkFrames &frames)stk::FileWvIn [virtual]
~FileWvIn(void)stk::FileWvIn
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn.html deleted file mode 100644 index bd2cc08f88..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn.html +++ /dev/null @@ -1,417 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::FileWvIn Class Reference

-

STK audio file input class. -More...

- -

#include <FileWvIn.h>

-
-Inheritance diagram for stk::FileWvIn:
-
-
- - -stk::WvIn -stk::Stk -stk::FileLoop - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

FileWvIn (unsigned long chunkThreshold=1000000, unsigned long chunkSize=1024)
 Default constructor.
 FileWvIn (std::string fileName, bool raw=false, bool doNormalize=true, unsigned long chunkThreshold=1000000, unsigned long chunkSize=1024)
 Overloaded constructor for file input.
~FileWvIn (void)
 Class destructor.
virtual void openFile (std::string fileName, bool raw=false, bool doNormalize=true)
 Open the specified file and load its data.
-virtual void closeFile (void)
 Close a file if one is open.
-virtual void reset (void)
 Clear outputs and reset time (file) pointer to zero.
virtual void normalize (void)
 Normalize data to a maximum of +-1.0.
virtual void normalize (StkFloat peak)
 Normalize data to a maximum of +-peak.
-virtual unsigned long getSize (void) const
 Return the file size in sample frames.
virtual StkFloat getFileRate (void) const
 Return the input file sample rate in Hz (not the data read rate).
-bool isOpen (void)
 Query whether a file is open.
-bool isFinished (void) const
 Query whether reading is complete.
virtual void setRate (StkFloat rate)
 Set the data read rate in samples. The rate can be negative.
virtual void addTime (StkFloat time)
 Increment the read pointer by time samples.
void setInterpolate (bool doInterpolate)
 Turn linear interpolation on/off.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed frame.
virtual StkFloat tick (unsigned int channel=0)
 Compute a sample frame and return the specified channel value.
virtual StkFramestick (StkFrames &frames)
 Fill the StkFrames argument with computed frames and return the same reference.
-

Detailed Description

-

STK audio file input class.

-

This class inherits from WvIn. It provides a "tick-level" interface to the FileRead class. It also provides variable-rate playback functionality. Audio file support is provided by the FileRead class. Linear interpolation is used for fractional read rates.

-

FileWvIn supports multi-channel data. It is important to distinguish the tick() method that computes a single frame (and returns only the specified sample of a multi-channel frame) from the overloaded one that takes an StkFrames object for multi-channel and/or multi-frame data.

-

FileWvIn will either load the entire content of an audio file into local memory or incrementally read file data from disk in chunks. This behavior is controlled by the optional constructor arguments chunkThreshold and chunkSize. File sizes greater than chunkThreshold (in sample frames) will be read incrementally in chunks of chunkSize each (also in sample frames).

-

When the file end is reached, subsequent calls to the tick() functions return zeros and isFinished() returns true.

-

See the FileRead class for a description of the supported audio file formats.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
stk::FileWvIn::FileWvIn (std::string  fileName,
bool  raw = false,
bool  doNormalize = true,
unsigned long  chunkThreshold = 1000000,
unsigned long  chunkSize = 1024 
)
-
-
- -

Overloaded constructor for file input.

-

An StkError will be thrown if the file is not found, its format is unknown, or a read error occurs.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
virtual void stk::FileWvIn::openFile (std::string  fileName,
bool  raw = false,
bool  doNormalize = true 
) [virtual]
-
-
- -

Open the specified file and load its data.

-

Data from a previously opened file will be overwritten by this function. An StkError will be thrown if the file is not found, its format is unknown, or a read error occurs. If the file data is to be loaded incrementally from disk and normalization is specified, a scaling will be applied with respect to fixed-point limits. If the data format is floating-point, no scaling is performed.

- -

Reimplemented in stk::FileLoop.

- -
-
- -
-
- - - - - - - - - -
virtual void stk::FileWvIn::normalize (void  )  [virtual]
-
-
- -

Normalize data to a maximum of +-1.0.

-

This function has no effect when data is incrementally loaded from disk.

- -

Reimplemented in stk::FileLoop.

- -
-
- -
-
- - - - - - - - - -
virtual void stk::FileWvIn::normalize (StkFloat  peak )  [virtual]
-
-
- -

Normalize data to a maximum of +-peak.

-

This function has no effect when data is incrementally loaded from disk.

- -

Reimplemented in stk::FileLoop.

- -
-
- -
-
- - - - - - - - - -
virtual StkFloat stk::FileWvIn::getFileRate (void  )  const [inline, virtual]
-
-
- -

Return the input file sample rate in Hz (not the data read rate).

-

WAV, SND, and AIF formatted files specify a sample rate in their headers. STK RAW files have a sample rate of 22050 Hz by definition. MAT-files are assumed to have a rate of 44100 Hz.

- -

Reimplemented in stk::FileLoop.

- -

00100 { return data_.dataRate(); };
-

- -
-
- -
-
- - - - - - - - - -
virtual void stk::FileWvIn::setRate (StkFloat  rate )  [virtual]
-
-
- -

Set the data read rate in samples. The rate can be negative.

-

If the rate value is negative, the data is read in reverse order.

- -

Reimplemented in stk::FileLoop.

- -
-
- -
-
- - - - - - - - - -
virtual void stk::FileWvIn::addTime (StkFloat  time )  [virtual]
-
-
- -

Increment the read pointer by time samples.

-

Note that this function will not modify the interpolation flag status.

- -

Reimplemented in stk::FileLoop.

- -
-
- -
-
- - - - - - - - - -
void stk::FileWvIn::setInterpolate (bool  doInterpolate )  [inline]
-
-
- -

Turn linear interpolation on/off.

-

Interpolation is automatically off when the read rate is an integer value. If interpolation is turned off for a fractional rate, the time index is truncated to an integer value.

- -

00127 { interpolate_ = doInterpolate; };
-

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::FileWvIn::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed frame.

-

If no file is loaded, the returned value is 0.0. The channel argument must be less than the number of output channels, which can be determined with the channelsOut() function (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

-
See also:
lastFrame()
- -

Reimplemented in stk::FileLoop.

- -

00182 {
-00183 #if defined(_STK_DEBUG_)
-00184   if ( channel >= data_.channels() ) {
-00185     oStream_ << "FileWvIn::lastOut(): channel argument and soundfile data are incompatible!";
-00186     handleError( StkError::FUNCTION_ARGUMENT );
-00187   }
-00188 #endif
-00189 
-00190   if ( finished_ ) return 0.0;
-00191   return lastFrame_[channel];
-00192 }
-

- -
-
- -
-
- - - - - - - - - -
virtual StkFloat stk::FileWvIn::tick (unsigned int  channel = 0 )  [virtual]
-
-
- -

Compute a sample frame and return the specified channel value.

-

For multi-channel files, use the lastFrame() function to get all values from the computed frame. If no file data is loaded, the returned value is 0.0. The channel argument must be less than the number of channels in the file data (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::WvIn.

- -

Reimplemented in stk::FileLoop.

- -
-
- -
-
- - - - - - - - - -
virtual StkFrames& stk::FileWvIn::tick (StkFrames frames )  [virtual]
-
-
- -

Fill the StkFrames argument with computed frames and return the same reference.

-

The number of channels in the StkFrames argument must equal the number of channels in the file data. However, this is only checked if _STK_DEBUG_ is defined during compilation, in which case an incompatibility will trigger an StkError exception. If no file data is loaded, the function does nothing (a warning will be issued if _STK_DEBUG_ is defined during compilation).

- -

Implements stk::WvIn.

- -

Reimplemented in stk::FileLoop.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvIn.png deleted file mode 100644 index f2c8704dfc6e83f169cfdc676db1bfd7d9464588..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 641 zcmeAS@N?(olHy`uVBq!ia0vp^Abfy>8AvXOIr0!lNd)+Wxc>kDAISXw|G@nD2@`-U zFg|eLK=q;jPk>yGk|4iepfngEakt!T5IW#c9n7JT7x9p8U73l;@bB zu{Gmyn7?|izh_If+UD%|<(4+fBAc2|)H^$|=&@hWtZ#5xJ=c**iQ!IR?3&ZfCvI^c z@o+tM%?o_7r$q_`s{p%s)w@G=Qy^%pZD1PZQ#SBbF%vNKiAJW!LInY zzNB5bH~+7k(b9r68zAwF^+dacpUOlRAx|K2kKeNWxQTaxz)yaUjswfTUe>zr0<=!% zs={q?7TE&!$ZgzJ0@K$nd87DsLioJ+z0y6L_Z{KTtWVk1=L2NN_&+<$xd6Ol=PjGigsGP zIBhULOw#S!w8tI^v%d7N%3FC|gsEHGwRUmtwa}^4wc~P6|1q7s^{&{;>uYb>oZ?m4 zUuAxSCC68wqIvh@4uXSEhO*uW_MY6_fH!gpRAqm z(SFzAjV`BmGVRoPc&6gXrWRv;2fHI5+gZ|2Mixz*qY9+{UD0{|VMZD!AJ9=wEM}|? zG1;lRAF^!PF5?agjjcLc*bay_eq%j3(>1K}#PZnVy4kLi9i?w6-F7uUZJ3gMpBv<$ ztE(NCh~IPF^{9Hu%%|GbedmH&#fz)Hi4>o1xNrF{QG&US`{eVdp(j54V4m4(?A{v3 SxCWSB7(8A5T-G@yGywo - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::FileWvOut Member List

This is the complete list of members for stk::FileWvOut, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
clipStatus(void)stk::WvOut [inline]
closeFile(void)stk::FileWvOut
FileWvOut(unsigned int bufferFrames=1024)stk::FileWvOut
FileWvOut(std::string fileName, unsigned int nChannels=1, FileWrite::FILE_TYPE type=FileWrite::FILE_WAV, Stk::StkFormat format=STK_SINT16, unsigned int bufferFrames=1024)stk::FileWvOut
getFrameCount(void) const stk::WvOut [inline]
getTime(void) const stk::WvOut [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
openFile(std::string fileName, unsigned int nChannels, FileWrite::FILE_TYPE type, Stk::StkFormat format)stk::FileWvOut
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
resetClipStatus(void)stk::WvOut [inline]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(const StkFloat sample)stk::FileWvOut [virtual]
tick(const StkFrames &frames)stk::FileWvOut [virtual]
WvOut(void)stk::WvOut [inline]
~FileWvOut()stk::FileWvOut [virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvOut.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvOut.html deleted file mode 100644 index 1f6b276dd0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvOut.html +++ /dev/null @@ -1,250 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::FileWvOut Class Reference

-

STK audio file output class. -More...

- -

#include <FileWvOut.h>

-
-Inheritance diagram for stk::FileWvOut:
-
-
- - -stk::WvOut -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

 FileWvOut (unsigned int bufferFrames=1024)
 Default constructor with optional output buffer size argument.
 FileWvOut (std::string fileName, unsigned int nChannels=1, FileWrite::FILE_TYPE type=FileWrite::FILE_WAV, Stk::StkFormat format=STK_SINT16, unsigned int bufferFrames=1024)
 Overloaded constructor used to specify a file name, type, and data format with this object.
-virtual ~FileWvOut ()
 Class destructor.
void openFile (std::string fileName, unsigned int nChannels, FileWrite::FILE_TYPE type, Stk::StkFormat format)
 Open a new file with the specified parameters.
void closeFile (void)
 Close a file if one is open.
void tick (const StkFloat sample)
 Output a single sample to all channels in a sample frame.
void tick (const StkFrames &frames)
 Output the StkFrames data.
-

Detailed Description

-

STK audio file output class.

-

This class inherits from WvOut. It provides a "tick-level" interface to the FileWrite class.

-

FileWvOut writes samples to an audio file and supports multi-channel data. It is important to distinguish the tick() method that outputs a single sample to all channels in a sample frame from the overloaded one that takes a reference to an StkFrames object for multi-channel and/or multi-frame data.

-

See the FileWrite class for a description of the supported audio file formats.

-

Currently, FileWvOut is non-interpolating and the output rate is always Stk::sampleRate().

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::FileWvOut::FileWvOut (unsigned int  bufferFrames = 1024 ) 
-
-
- -

Default constructor with optional output buffer size argument.

-

The output buffer size defines the number of frames that are accumulated between writes to disk.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
stk::FileWvOut::FileWvOut (std::string  fileName,
unsigned int  nChannels = 1,
FileWrite::FILE_TYPE  type = FileWrite::FILE_WAV,
Stk::StkFormat  format = STK_SINT16,
unsigned int  bufferFrames = 1024 
)
-
-
- -

Overloaded constructor used to specify a file name, type, and data format with this object.

-

An StkError is thrown for invalid argument values or if an error occurs when initializing the output file.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void stk::FileWvOut::openFile (std::string  fileName,
unsigned int  nChannels,
FileWrite::FILE_TYPE  type,
Stk::StkFormat  format 
)
-
-
- -

Open a new file with the specified parameters.

-

If a file was previously open, it will be closed. An StkError will be thrown if any of the specified arguments are invalid or a file error occurs during opening.

- -
-
- -
-
- - - - - - - - - -
void stk::FileWvOut::closeFile (void  ) 
-
-
- -

Close a file if one is open.

-

Any data remaining in the internal buffer will be written to the file before closing.

- -
-
- -
-
- - - - - - - - - -
void stk::FileWvOut::tick (const StkFloat  sample )  [virtual]
-
-
- -

Output a single sample to all channels in a sample frame.

-

An StkError is thrown if an output error occurs.

- -

Implements stk::WvOut.

- -
-
- -
-
- - - - - - - - - -
void stk::FileWvOut::tick (const StkFrames frames )  [virtual]
-
-
- -

Output the StkFrames data.

-

An StkError will be thrown if an output error occurs. An StkError will also be thrown if _STK_DEBUG_ is defined during compilation and there is an incompatability between the number of channels in the FileWvOut object and that in the StkFrames object.

- -

Implements stk::WvOut.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvOut.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FileWvOut.png deleted file mode 100644 index ef9d680c733ecfebc2eba85cf31dea622046c5f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)C?FF58?`e23q<$u1Z9#=CA8=pe$2G4|EHUWtm*)y|VcCtXr;M zsFtN)r(I}F^VvfDzvGEf&P6>r|1o&2iFzhpYoeZt|KV;SPMkP#;>3v){~*33Mp+~+ zh(8F22;$H_mIKBqZ^JQ&$8bOdK=2*z{`f>Z#vb0LLj+rHSYx)@uei>Rb!o4gctiJb zx5foLmSwE^J>1oNY=#x|-J*v)QwgAK7L|k4&bw|6CCr&D-M*R zt!dNjH|5~ro^+Nb`Y{Z*!?#SV#X5?=?ckf8_qB>Io|b&WwbyaHp(7r5ZcBCCt??R< zWtrmRl^(`j&G#bhXS*FM*F8@h$h7UJKHC&mvl<0lrB9V31K O0000 - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Filter Member List

This is the complete list of members for stk::Filter, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
getGain(void) const stk::Filter [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setGain(StkFloat gain)stk::Filter [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFrames &frames, unsigned int channel=0)=0stk::Filter [pure virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Filter.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Filter.html deleted file mode 100644 index 036777a290..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Filter.html +++ /dev/null @@ -1,195 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Filter Class Reference

-

STK abstract filter class. -More...

- -

#include <Filter.h>

-
-Inheritance diagram for stk::Filter:
-
-
- - -stk::Stk -stk::BiQuad -stk::Delay -stk::DelayA -stk::DelayL -stk::Fir -stk::FormSwep -stk::Iir -stk::OnePole -stk::OneZero -stk::PoleZero -stk::TapDelay -stk::TwoPole -stk::TwoZero - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Filter (void)
 Class constructor.
-unsigned int channelsIn (void) const
 Return the number of input channels for the class.
-unsigned int channelsOut (void) const
 Return the number of output channels for the class.
-virtual void clear (void)
 Clears all internal states of the filter.
void setGain (StkFloat gain)
 Set the filter gain.
-StkFloat getGain (void) const
 Return the current filter gain.
StkFloat phaseDelay (StkFloat frequency)
 Return the filter phase delay at the specified frequency.
-const StkFrameslastFrame (void) const
 Return an StkFrames reference to the last output sample frame.
virtual StkFramestick (StkFrames &frames, unsigned int channel=0)=0
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
-

Detailed Description

-

STK abstract filter class.

-

This class provides limited common functionality for STK digital filter subclasses. It is general enough to support both monophonic and polyphonic input/output classes.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::Filter::setGain (StkFloat  gain )  [inline]
-
-
- -

Set the filter gain.

-

The gain is applied at the filter input and does not affect the coefficient values. The default gain value is 1.0.

- -

00042 { gain_ = gain; };
-

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::Filter::phaseDelay (StkFloat  frequency )  [inline]
-
-
- -

Return the filter phase delay at the specified frequency.

-

Note that the phase delay calculation accounts for the filter gain. The frequency value should be greater than 0.0 and less than or equal to one-half the sample rate.

- -

00094 {
-00095   if ( frequency <= 0.0 || frequency > 0.5 * Stk::sampleRate() ) {
-00096     oStream_ << "Filter::phaseDelay: argument (" << frequency << ") is out of range!";
-00097     handleError( StkError::WARNING ); return 0.0;
-00098   }
-00099 
-00100   StkFloat omegaT = 2 * PI * frequency / Stk::sampleRate();
-00101   StkFloat real = 0.0, imag = 0.0;
-00102   for ( unsigned int i=0; i<b_.size(); i++ ) {
-00103     real += b_[i] * std::cos( i * omegaT );
-00104     imag -= b_[i] * std::sin( i * omegaT );
-00105   }
-00106   real *= gain_;
-00107   imag *= gain_;
-00108 
-00109   StkFloat phase = atan2( imag, real );
-00110 
-00111   real = 0.0, imag = 0.0;
-00112   for ( unsigned int i=0; i<a_.size(); i++ ) {
-00113     real += a_[i] * std::cos( i * omegaT );
-00114     imag -= a_[i] * std::sin( i * omegaT );
-00115   }
-00116 
-00117   phase -= std::atan2( imag, real );
-00118   phase = std::fmod( -phase, 2 * PI );
-00119   return phase / omegaT;
-00120 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
virtual StkFrames& stk::Filter::tick (StkFrames frames,
unsigned int  channel = 0 
) [pure virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implemented in stk::BiQuad, stk::Delay, stk::DelayA, stk::DelayL, stk::Fir, stk::FormSwep, stk::Iir, stk::OnePole, stk::OneZero, stk::PoleZero, stk::TapDelay, stk::TwoPole, and stk::TwoZero.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Filter.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Filter.png deleted file mode 100644 index c92bd085560ad47d1031a75edfdcfc53ed8ff609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2607 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 - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Fir Member List

This is the complete list of members for stk::Fir, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
Fir(void)stk::Fir
Fir(std::vector< StkFloat > &coefficients)stk::Fir
getGain(void) const stk::Filter [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::Fir [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setCoefficients(std::vector< StkFloat > &coefficients, bool clearState=false)stk::Fir
setGain(StkFloat gain)stk::Filter [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::Fir [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Fir [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::Fir [inline]
~Fir(void)stk::Fir
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Fir.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Fir.html deleted file mode 100644 index c4a1c512da..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Fir.html +++ /dev/null @@ -1,255 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Fir Class Reference

-

STK general finite impulse response filter class. -More...

- -

#include <Fir.h>

-
-Inheritance diagram for stk::Fir:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - -

Public Member Functions

Fir (void)
 Default constructor creates a zero-order pass-through "filter".
 Fir (std::vector< StkFloat > &coefficients)
 Overloaded constructor which takes filter coefficients.
~Fir (void)
 Class destructor.
void setCoefficients (std::vector< StkFloat > &coefficients, bool clearState=false)
 Set filter coefficients.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK general finite impulse response filter class.

-

This class provides a generic digital filter structure that can be used to implement FIR filters. For filters with feedback terms, the Iir class should be used.

-

In particular, this class implements the standard difference equation:

-

y[n] = b[0]*x[n] + ... + b[nb]*x[n-nb]

-

The gain parameter is applied at the filter input and does not affect the coefficient values. The default gain value is 1.0. This structure results in one extra multiply per computed sample, but allows easy control of the overall filter gain.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Fir::Fir (std::vector< StkFloat > &  coefficients ) 
-
-
- -

Overloaded constructor which takes filter coefficients.

-

An StkError can be thrown if the coefficient vector size is zero.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Fir::setCoefficients (std::vector< StkFloat > &  coefficients,
bool  clearState = false 
)
-
-
- -

Set filter coefficients.

-

An StkError can be thrown if the coefficient vector size is zero. The internal state of the filter is not cleared unless the clearState flag is true.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Fir::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00101 {
-00102 #if defined(_STK_DEBUG_)
-00103   if ( channel >= frames.channels() ) {
-00104     oStream_ << "Fir::tick(): channel and StkFrames arguments are incompatible!";
-00105     handleError( StkError::FUNCTION_ARGUMENT );
-00106   }
-00107 #endif
-00108 
-00109   StkFloat *samples = &frames[channel];
-00110   unsigned int i, hop = frames.channels();
-00111   for ( unsigned int j=0; j<frames.frames(); j++, samples += hop ) {
-00112     inputs_[0] = gain_ * *samples;
-00113     *samples = 0.0;
-00114 
-00115     for ( i=b_.size()-1; i>0; i-- ) {
-00116       *samples += b_[i] * inputs_[i];
-00117       inputs_[i] = inputs_[i-1];
-00118     }
-00119     *samples += b_[0] * inputs_[0];
-00120   }
-00121 
-00122   lastFrame_[0] = *(samples-hop);
-00123   return frames;
-00124 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::Fir::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00127 {
-00128 #if defined(_STK_DEBUG_)
-00129   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00130     oStream_ << "Fir::tick(): channel and StkFrames arguments are incompatible!";
-00131     handleError( StkError::FUNCTION_ARGUMENT );
-00132   }
-00133 #endif
-00134 
-00135   StkFloat *iSamples = &iFrames[iChannel];
-00136   StkFloat *oSamples = &oFrames[oChannel];
-00137   unsigned int i, iHop = iFrames.channels(), oHop = oFrames.channels();
-00138   for ( unsigned int j=0; j<iFrames.frames(); j++, iSamples += iHop, oSamples += oHop ) {
-00139     inputs_[0] = gain_ * *iSamples;
-00140     *oSamples = 0.0;
-00141 
-00142     for ( i=b_.size()-1; i>0; i-- ) {
-00143       *oSamples += b_[i] * inputs_[i];
-00144       inputs_[i] = inputs_[i-1];
-00145     }
-00146     *oSamples += b_[0] * inputs_[0];
-00147   }
-00148 
-00149   lastFrame_[0] = *(oSamples-oHop);
-00150   return iFrames;
-00151 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Fir.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Fir.png deleted file mode 100644 index 1ebadbed91ea84c4f03cadf20af9147cf2b1c0fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^c0k<0!3-jMR>%P}@s6O=n36RTC666;Qlm>&Vr$USv7#LkWT^vIy7~jr4*mqcg$3@cp(SQ3&eu=CD zosp5D+iz_Q;>@u(@?qUMO;!ua?ftwXa8#}f8^cSkmvXLgn)nC6~`+p9?q>; zt7+GMeb%GNKicQ2`^~W^e00B${r-Q2Q>vW`c1%hef*CS)E-h-iA7&;az-aLGE2E2o zFZ%_dwI&71f@QnJzAhK-&YmB7XWP36>wfUwzxOXHfAhJn{fDPFZT~L)+V4pDerF3p)!8WCl-HKbLh*2~7Y(%FSp1 diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute-members.html deleted file mode 100644 index 0d17ca3a8d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Flute Member List

This is the complete list of members for stk::Flute, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Flute
controlChange(int number, StkFloat value)stk::Flute [virtual]
Flute(StkFloat lowestFrequency)stk::Flute
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Flute [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Flute [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setEndReflection(StkFloat coefficient)stk::Flute [inline]
setFrequency(StkFloat frequency)stk::Flute [virtual]
setJetDelay(StkFloat aRatio)stk::Flute
setJetReflection(StkFloat coefficient)stk::Flute [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
startBlowing(StkFloat amplitude, StkFloat rate)stk::Flute
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stopBlowing(StkFloat rate)stk::Flute
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Flute [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Flute [inline, virtual]
~Flute(void)stk::Flute
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute.html deleted file mode 100644 index eb6d713771..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute.html +++ /dev/null @@ -1,183 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Flute Class Reference

-

STK flute physical model class. -More...

- -

#include <Flute.h>

-
-Inheritance diagram for stk::Flute:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 Flute (StkFloat lowestFrequency)
 Class constructor, taking the lowest desired playing frequency.
~Flute (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void setJetReflection (StkFloat coefficient)
 Set the reflection coefficient for the jet delay (-1.0 - 1.0).
-void setEndReflection (StkFloat coefficient)
 Set the reflection coefficient for the air column delay (-1.0 - 1.0).
-void setJetDelay (StkFloat aRatio)
 Set the length of the jet delay in terms of a ratio of jet delay to air column delay lengths.
-void startBlowing (StkFloat amplitude, StkFloat rate)
 Apply breath velocity to instrument with given amplitude and rate of increase.
-void stopBlowing (StkFloat rate)
 Decrease breath velocity with given rate of decrease.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK flute physical model class.

-

This class implements a simple flute physical model, as discussed by Karjalainen, Smith, Waryznyk, etc. The jet model uses a polynomial, a la Cook.

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others.

-

Control Change Numbers:

-
    -
  • Jet Delay = 2
  • -
  • Noise Gain = 4
  • -
  • Vibrato Frequency = 11
  • -
  • Vibrato Gain = 1
  • -
  • Breath Pressure = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Flute::Flute (StkFloat  lowestFrequency ) 
-
-
- -

Class constructor, taking the lowest desired playing frequency.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Flute::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00138 {
-00139   unsigned int nChannels = lastFrame_.channels();
-00140 #if defined(_STK_DEBUG_)
-00141   if ( channel > frames.channels() - nChannels ) {
-00142     oStream_ << "Flute::tick(): channel and StkFrames arguments are incompatible!";
-00143     handleError( StkError::FUNCTION_ARGUMENT );
-00144   }
-00145 #endif
-00146 
-00147   StkFloat *samples = &frames[channel];
-00148   unsigned int j, hop = frames.channels() - nChannels;
-00149   if ( nChannels == 1 ) {
-00150     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00151       *samples++ = tick();
-00152   }
-00153   else {
-00154     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00155       *samples++ = tick();
-00156       for ( j=1; j<nChannels; j++ )
-00157         *samples++ = lastFrame_[j];
-00158     }
-00159   }
-00160 
-00161   return frames;
-00162 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Flute.png deleted file mode 100644 index 7993440c7e4a22f3e5f3e98b584e09f713190280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmeAS@N?(olHy`uVBq!ia0vp^K0w^T!3-p;4F2v0QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%Qedb&7b_U^e!InQ_F6QpbLylOOOy29 zsX?rF^Ko&RV8K$k-Cu{hxn;xFQ%9ebZ)lV4aODx$SnqS*f~V9!y0q`=*NjfP-Wk73 z8*dhgZ&%*k8=7)tS$SHxMSg?+XP(`84c43ec{kXfteW}u2S4wID^cb@7YJ8#c+1!a XrYOV;RA=!3BZa}!)z4*}Q$iB}kNMfM diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep-members.html deleted file mode 100644 index d9d8c07339..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::FormSwep Member List

This is the complete list of members for stk::FormSwep, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
FormSwep(void)stk::FormSwep
getGain(void) const stk::Filter [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::FormSwep [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::FormSwep [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
setGain(StkFloat gain)stk::Filter [inline]
setRawwavePath(std::string path)stk::Stk [static]
setResonance(StkFloat frequency, StkFloat radius)stk::FormSwep
setSampleRate(StkFloat rate)stk::Stk [static]
setStates(StkFloat frequency, StkFloat radius, StkFloat gain=1.0)stk::FormSwep
setSweepRate(StkFloat rate)stk::FormSwep
setSweepTime(StkFloat time)stk::FormSwep
setTargets(StkFloat frequency, StkFloat radius, StkFloat gain=1.0)stk::FormSwep
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::FormSwep [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::FormSwep [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::FormSwep [inline]
~FormSwep()stk::FormSwep
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep.html deleted file mode 100644 index 3c8a2c877d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep.html +++ /dev/null @@ -1,265 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::FormSwep Class Reference

-

STK sweepable formant filter class. -More...

- -

#include <FormSwep.h>

-
-Inheritance diagram for stk::FormSwep:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

FormSwep (void)
 Default constructor creates a second-order pass-through filter.
~FormSwep ()
 Class destructor.
-void ignoreSampleRateChange (bool ignore=true)
 A function to enable/disable the automatic updating of class data when the STK sample rate changes.
void setResonance (StkFloat frequency, StkFloat radius)
 Sets the filter coefficients for a resonance at frequency (in Hz).
-void setStates (StkFloat frequency, StkFloat radius, StkFloat gain=1.0)
 Set both the current and target resonance parameters.
-void setTargets (StkFloat frequency, StkFloat radius, StkFloat gain=1.0)
 Set target resonance parameters.
void setSweepRate (StkFloat rate)
 Set the sweep rate (between 0.0 - 1.0).
void setSweepTime (StkFloat time)
 Set the sweep rate in terms of a time value in seconds.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return a reference to one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK sweepable formant filter class.

-

This class implements a formant (resonance) which can be "swept" over time from one frequency setting to another. It provides methods for controlling the sweep rate and target frequency.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void stk::FormSwep::setResonance (StkFloat  frequency,
StkFloat  radius 
)
-
-
- -

Sets the filter coefficients for a resonance at frequency (in Hz).

-

This method determines the filter coefficients corresponding to two complex-conjugate poles with the given frequency (in Hz) and radius from the z-plane origin. The filter zeros are placed at z = 1, z = -1, and the coefficients are then normalized to produce a constant unity gain (independent of the filter gain parameter). The resulting filter frequency response has a resonance at the given frequency. The closer the poles are to the unit-circle (radius close to one), the narrower the resulting resonance width. An unstable filter will result for radius >= 1.0. The frequency value should be between zero and half the sample rate.

- -
-
- -
-
- - - - - - - - - -
void stk::FormSwep::setSweepRate (StkFloat  rate ) 
-
-
- -

Set the sweep rate (between 0.0 - 1.0).

-

The formant parameters are varied in increments of the sweep rate between their current and target values. A sweep rate of 1.0 will produce an immediate change in resonance parameters from their current values to the target values. A sweep rate of 0.0 will produce no change in resonance parameters.

- -
-
- -
-
- - - - - - - - - -
void stk::FormSwep::setSweepTime (StkFloat  time ) 
-
-
- -

Set the sweep rate in terms of a time value in seconds.

-

This method adjusts the sweep rate based on a given time for the formant parameters to reach their target values.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::FormSwep::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00154 {
-00155 #if defined(_STK_DEBUG_)
-00156   if ( channel >= frames.channels() ) {
-00157     oStream_ << "FormSwep::tick(): channel and StkFrames arguments are incompatible!";
-00158     handleError( StkError::FUNCTION_ARGUMENT );
-00159   }
-00160 #endif
-00161 
-00162   StkFloat *samples = &frames[channel];
-00163   unsigned int hop = frames.channels();
-00164   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00165     *samples = tick( *samples );
-00166 
-00167   return frames;
-00168 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::FormSwep::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00171 {
-00172 #if defined(_STK_DEBUG_)
-00173   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00174     oStream_ << "FormSwep::tick(): channel and StkFrames arguments are incompatible!";
-00175     handleError( StkError::FUNCTION_ARGUMENT );
-00176   }
-00177 #endif
-00178 
-00179   StkFloat *iSamples = &iFrames[iChannel];
-00180   StkFloat *oSamples = &oFrames[oChannel];
-00181   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00182   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop )
-00183     *oSamples = tick( *iSamples );
-00184 
-00185   return iFrames;
-00186 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FormSwep.png deleted file mode 100644 index d336132b3069706442fa90190734b2feaaa068ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 zcmeAS@N?(olHy`uVBq!ia0vp^u|V9x!3-of#fawuDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J9rdAc};R4~4sdvRTh0*{Ne>BIl_KkWiG zgqBQS?Rz6-m0G}qDSi{vZyNcUoi)C6eW|nPLjHsYb?tq3zfa&>!Nj4GEpzwtmwnDF zE;CKNahLx^Tj!K@zu7bQ1*COsoHFm?Vx#6&b|J_1FE;+XVAV38)tT$FN?aj zv#vV5?`z(Pht@jI47;2d`gi6-TW716vvX#u6^E%k*LTrZ6`t<}BE0{C)*N+&A!VTc#`C_+^UKUOmUp zU-DEOSOk81M;-b0RYGsmZ6|r2UB~~n?#M0pF8le@sW~r>@9p1o>;A6kindyxS@*sa z>UyXa_o8myE8V{)Ru}G0$=qt$#wnWf(*6D2nU$Z}&+g%@n|bbcEo;@Xzl?tB>V0oC StQ>){$l&Sf=d#Wzp$PyeUI6w0 diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb-members.html deleted file mode 100644 index 345ef95c97..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb-members.html +++ /dev/null @@ -1,69 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::FreeVerb Member List

This is the complete list of members for stk::FreeVerb, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Effect [inline]
clear(void)stk::FreeVerb [virtual]
Effect(void)stk::Effect [inline]
FreeVerb()stk::FreeVerb
getDamping(void)stk::FreeVerb
getMode(void)stk::FreeVerb
getRoomSize(void)stk::FreeVerb
getWidth(void)stk::FreeVerb
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Effect [inline]
lastOut(unsigned int channel=0)stk::FreeVerb [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setDamping(StkFloat value)stk::FreeVerb
setEffectMix(StkFloat mix)stk::FreeVerb [virtual]
setMode(bool isFrozen)stk::FreeVerb
setRawwavePath(std::string path)stk::Stk [static]
setRoomSize(StkFloat value)stk::FreeVerb
setSampleRate(StkFloat rate)stk::Stk [static]
setWidth(StkFloat value)stk::FreeVerb
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat inputL, StkFloat inputR=0.0, unsigned int channel=0)stk::FreeVerb [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::FreeVerb
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::FreeVerb
update(void)stk::FreeVerb [protected]
~FreeVerb()stk::FreeVerb
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb.html deleted file mode 100644 index 99fb7e1b0c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb.html +++ /dev/null @@ -1,338 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::FreeVerb Class Reference

-

Jezar at Dreampoint's FreeVerb, implemented in STK. -More...

- -

#include <FreeVerb.h>

-
-Inheritance diagram for stk::FreeVerb:
-
-
- - -stk::Effect -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 FreeVerb ()
 FreeVerb Constructor.
~FreeVerb ()
 Destructor.
-void setEffectMix (StkFloat mix)
 Set the effect mix [0 = mostly dry, 1 = mostly wet].
-void setRoomSize (StkFloat value)
 Set the room size (comb filter feedback gain) parameter [0,1].
-StkFloat getRoomSize (void)
 Get the room size (comb filter feedback gain) parameter.
-void setDamping (StkFloat value)
 Set the damping parameter [0=low damping, 1=higher damping].
-StkFloat getDamping (void)
 Get the damping parameter.
-void setWidth (StkFloat value)
 Set the width (left-right mixing) parameter [0,1].
-StkFloat getWidth (void)
 Get the width (left-right mixing) parameter.
-void setMode (bool isFrozen)
 Set the mode [frozen = 1, unfrozen = 0].
-StkFloat getMode (void)
 Get the current freeze mode [frozen = 1, unfrozen = 0].
-void clear (void)
 Clears delay lines, etc.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed stereo frame.
StkFloat tick (StkFloat inputL, StkFloat inputR=0.0, unsigned int channel=0)
 Input one or two samples to the effect and return the specified channel value of the computed stereo frame.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take two channels of the StkFrames object as inputs to the effect and replace with stereo outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take one or two channels of the iFrames object as inputs to the effect and write stereo outputs to the oFrames object.

Protected Member Functions

-void update (void)
 Update interdependent parameters.
-

Detailed Description

-

Jezar at Dreampoint's FreeVerb, implemented in STK.

-

Freeverb is a free and open-source Schroeder reverberator originally implemented in C++. The parameters of the reverberation model are exceptionally well tuned. FreeVerb uses 8 lowpass-feedback-comb-filters in parallel, followed by 4 Schroeder allpass filters in series. The input signal can be either mono or stereo, and the output signal is stereo. The delay lengths are optimized for a sample rate of 44100 Hz.

-

Ported to STK by Gregory Burlet, 2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - -
stk::FreeVerb::FreeVerb ( ) 
-
-
- -

FreeVerb Constructor.

-

Initializes the effect with default parameters. Note that these defaults are slightly different than those in the original implementation of FreeVerb [Effect Mix: 0.75; Room Size: 0.75; Damping: 0.25; Width: 1.0; Mode: freeze mode off].

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
StkFloat stk::FreeVerb::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed stereo frame.

-

Use the lastFrame() function to get both values of the last computed stereo frame. The channel argument must be 0 or 1 (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00166 {
-00167 #if defined(_STK_DEBUG_)
-00168   if ( channel > 1 ) {
-00169     oStream_ << "FreeVerb::lastOut(): channel argument must be less than 2!";
-00170     handleError( StkError::FUNCTION_ARGUMENT );
-00171   }
-00172 #endif
-00173 
-00174   return lastFrame_[channel];
-00175 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
StkFloat stk::FreeVerb::tick (StkFloat  inputL,
StkFloat  inputR = 0.0,
unsigned int  channel = 0 
) [inline]
-
-
- -

Input one or two samples to the effect and return the specified channel value of the computed stereo frame.

-

Use the lastFrame() function to get both values of the computed stereo output frame. The channel argument must be 0 or 1 (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00178 {
-00179 #if defined(_STK_DEBUG_)
-00180   if ( channel > 1 ) {
-00181     oStream_ << "FreeVerb::tick(): channel argument must be less than 2!";
-00182     handleError(StkError::FUNCTION_ARGUMENT);
-00183   }
-00184 #endif
-00185 
-00186   if ( !inputR ) {
-00187     inputR = inputL;
-00188   }
-00189 
-00190   StkFloat fInput = (inputL + inputR) * gain_;
-00191   StkFloat outL = 0.0;
-00192   StkFloat outR = 0.0;
-00193 
-00194   // Parallel LBCF filters
-00195   for ( int i = 0; i < nCombs; i++ ) {
-00196     // Left channel
-00197     //StkFloat yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPL_[i].tick(FreeVerb::undenormalize(combDelayL_[i].nextOut()))));
-00198     StkFloat yn = fInput + (roomSize_ * combLPL_[i].tick( combDelayL_[i].nextOut() ) );
-00199     combDelayL_[i].tick(yn);
-00200     outL += yn;
-00201 
-00202     // Right channel
-00203     //yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPR_[i].tick(FreeVerb::undenormalize(combDelayR_[i].nextOut()))));
-00204     yn = fInput + (roomSize_ * combLPR_[i].tick( combDelayR_[i].nextOut() ) );
-00205     combDelayR_[i].tick(yn);
-00206     outR += yn;
-00207   }
-00208 
-00209   // Series allpass filters
-00210   for ( int i = 0; i < nAllpasses; i++ ) {
-00211     // Left channel
-00212     //StkFloat vn_m = FreeVerb::undenormalize(allPassDelayL_[i].nextOut());
-00213     StkFloat vn_m = allPassDelayL_[i].nextOut();
-00214     StkFloat vn = outL + (g_ * vn_m);
-00215     allPassDelayL_[i].tick(vn);
-00216         
-00217     // calculate output
-00218     outL = -vn + (1.0 + g_)*vn_m;
-00219 
-00220     // Right channel
-00221     //vn_m = FreeVerb::undenormalize(allPassDelayR_[i].nextOut());
-00222     vn_m = allPassDelayR_[i].nextOut();
-00223     vn = outR + (g_ * vn_m);
-00224     allPassDelayR_[i].tick(vn);
-00225 
-00226     // calculate output
-00227     outR = -vn + (1.0 + g_)*vn_m;
-00228   }
-00229 
-00230   // Mix output
-00231   lastFrame_[0] = outL*wet1_ + outR*wet2_ + inputL*dry_;
-00232   lastFrame_[1] = outR*wet1_ + outL*wet2_ + inputR*dry_;
-00233 
-00234   /*
-00235   // Hard limiter ... there's not much else we can do at this point
-00236   if ( lastFrame_[0] >= 1.0 ) {
-00237     lastFrame_[0] = 0.9999;
-00238   }
-00239   if ( lastFrame_[0] <= -1.0 ) {
-00240     lastFrame_[0] = -0.9999;
-00241   }
-00242   if ( lastFrame_[1] >= 1.0 ) {
-00243     lastFrame_[1] = 0.9999;
-00244   }
-00245   if ( lastFrame_[1] <= -1.0 ) {
-00246     lastFrame_[1] = -0.9999;
-00247   }
-00248   */
-00249 
-00250   return lastFrame_[channel];
-00251 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames& stk::FreeVerb::tick (StkFrames frames,
unsigned int  channel = 0 
)
-
-
- -

Take two channels of the StkFrames object as inputs to the effect and replace with stereo outputs.

-

The StkFrames argument reference is returned. The stereo inputs are taken from (and written back to) the StkFrames argument starting at the specified channel. Therefore, the channel argument must be less than ( channels() - 1 ) of the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames& stk::FreeVerb::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
)
-
-
- -

Take one or two channels of the iFrames object as inputs to the effect and write stereo outputs to the oFrames object.

-

The iFrames object reference is returned. The iChannel argument must be less than the number of channels in the iFrames argument (the first channel is specified by 0). If more than one channel of data exists in iFrames starting from iChannel, stereo data is input to the effect. The oChannel argument must be less than ( channels() - 1 ) of the oFrames argument. However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1FreeVerb.png deleted file mode 100644 index d8070fb253fc5b6e17247d17a5f9f5a2e11de29b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmV+u0_^>XP)HsFq zzlPDkF<|e#P3c=P30Ae$THQ4nlc=sRzo1YuOX58PjKiro9&ElV2!9Kl_4B_{ z>Qe7FfNM>Xv*22jVzlt%61MDw! z6gQY9VUNz?7{v^p<=*ROu*-P5d50+c-;nb>3fsEb2=P>O!f(UzRPbFv__N`p@&km0 VC2ZZ;x-9?z002ovPDHLkV1n+H{Wbsq diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function-members.html deleted file mode 100644 index 4209f160e9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function-members.html +++ /dev/null @@ -1,52 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Function Member List

This is the complete list of members for stk::Function, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
Function(void)stk::Function [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastOut(void) const stk::Function [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)=0stk::Function [pure virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function.html deleted file mode 100644 index d6bf417b1a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function.html +++ /dev/null @@ -1,64 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Function Class Reference

-

STK abstract function parent class. -More...

- -

#include <Function.h>

-
-Inheritance diagram for stk::Function:
-
-
- - -stk::Stk -stk::BowTable -stk::Cubic -stk::JetTable -stk::ReedTable - -
-
- -

List of all members.

- - - - - - - - -

Public Member Functions

Function (void)
 Class constructor.
-StkFloat lastOut (void) const
 Return the last computed output sample.
-virtual StkFloat tick (StkFloat input)=0
 Take one sample input and compute one sample of output.
-

Detailed Description

-

STK abstract function parent class.

-

This class provides common functionality for STK classes that implement tables or other types of input to output function mappings.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Function.png deleted file mode 100644 index f58e5783a15096b577e07490156de842d6a5b365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmeAS@N?(olHy`uVBq!ia0y~yV4MVGcW^KR$zN%68-bKWfKQ0)|NsAi%>Vxn%%7hy z0muU50|yRNANv0U$mJ*r@(Tt^gTd8PAw~=g%-NnUjv*C{Z|~mjd#u3I@Nkw_?SJ=s z+iUPs?^K4;$!%m+sA7k?=;G*d1pPjrIe9VWr70}khn9&#Yy0EoQu@y z2{pYg+e|&ysS9#Cy7>IOtpC+WW%`6EyA>R_YIX9YN>0l540@aU^0ba*iJr$blXYot zFF$R3!u>ebeBH5%<%PBR(?TBC?&mo3A;%AGOAx9b-MY73d>9k33WFS&wb`yYJ~V zri4B|b$IW#liDAT+pJ#Bt5Pg|ef~{psK0;?ZDg4wuM{acrMz~J2BXRmhbOI^Dn~q6 zggrQpS*x(9Oc0ph-~@zBoQ$3C9~_bX$bH}SQh>IH$6-YUMP8K&Ag1$LAaiR|i-`=A z&?SdYr!(g*e^mOe@Y0^i&m^z4+OcHb$y_0-vIG>6YLh)U7Txdas9QgMJO3s9-R!aL zD~yhvJ$wA@-n*G)zh8fUWP8d{D*oi1lWi(@i{8weeN8Cq16TJ2_Km zqJYbhB^tXsmZbijJgvFq%OvqRDtCKSv+MKuJ+tep7i{|eLgTH;<4G&UeTydeOgxgC zEcoU2r>JY@lm0CD6|qKAEAv zz_)tRl8J@o-enQ$9^Za{_h55>IkCbktxQ^NwRHGqhp+Otxg%Hl|1r_?>pl2zEc=*sny^YZGOAIIK5#OL`ZJpO>+&0~-EPA(Mk%&)(EsK))}QcJy= zvJdyAyp7y6KeYFtUFozf{UZBQjnhsxewh<_N%yAuW|g~#Y*wz~o*J*?Dc~vY9vl8& zH#7CjbgTLcw{PFyvFh*H##8qeFP1S~w<=|+-?pM%yJb{2_hy&%NQ-Am!NVGya{t*+ hn!1qBQ7Zorv*G%bIZQc^W&pDygQu&X%Q~loCIH_Ryo>+< diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator-members.html deleted file mode 100644 index 0810c50e57..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator-members.html +++ /dev/null @@ -1,53 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Generator Member List

This is the complete list of members for stk::Generator, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Generator [inline]
Generator(void)stk::Generator [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Generator [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFrames &frames, unsigned int channel=0)=0stk::Generator [pure virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator.html deleted file mode 100644 index 63891997b6..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator.html +++ /dev/null @@ -1,106 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Generator Class Reference

-

STK abstract unit generator parent class. -More...

- -

#include <Generator.h>

-
-Inheritance diagram for stk::Generator:
-
-
- - -stk::Stk -stk::ADSR -stk::Asymp -stk::Blit -stk::BlitSaw -stk::BlitSquare -stk::Envelope -stk::Granulate -stk::Modulate -stk::Noise -stk::SineWave -stk::SingWave - -
-
- -

List of all members.

- - - - - - - - - - -

Public Member Functions

Generator (void)
 Class constructor.
-unsigned int channelsOut (void) const
 Return the number of output channels for the class.
-const StkFrameslastFrame (void) const
 Return an StkFrames reference to the last output sample frame.
virtual StkFramestick (StkFrames &frames, unsigned int channel=0)=0
 Fill the StkFrames object with computed sample frames, starting at the specified channel.
-

Detailed Description

-

STK abstract unit generator parent class.

-

This class provides limited common functionality for STK unit generator sample-source subclasses. It is general enough to support both monophonic and polyphonic output classes.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
virtual StkFrames& stk::Generator::tick (StkFrames frames,
unsigned int  channel = 0 
) [pure virtual]
-
-
- -

Fill the StkFrames object with computed sample frames, starting at the specified channel.

-

The channel argument plus the number of output channels must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implemented in stk::ADSR, stk::Asymp, stk::Blit, stk::BlitSaw, stk::BlitSquare, stk::Envelope, stk::Granulate, stk::Modulate, stk::Noise, stk::SineWave, and stk::SingWave.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Generator.png deleted file mode 100644 index 148db29c93b9f59d15b04e4f7aed429b3d35e1c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2289 zcmb7Ge^gR=7Pp+K$xS&;mT4v1l#=5QMroT=lxcD@e9QCvk?M+s4oNmB_^vEaRVc-oq6|LUFd&iB6i-Z}SkKlgq< z=cNY*c$=D7nHU)vnfmPWBETol$Y}YK&y3+nA6J(T9~%PwgTI3y2o52riNiVeBOEQ= zO-)Vbn;`}K_}OVfKoIFVzYc7ao=K3=kpd)v#3tjx4rOn z55PPTRZf3tY%8E&Q%^}qq13K_u}n?0YB^fj>0gL`9;Mwvt*w?WX0z{p)0F`v?EzAr zy0Dyl6>g0focq?AajpG zfdsw4s_V_rfyRZcdYX1-p-3+p=gYF@aW_Q*W27e)E^7GfT>zf^d#F&3o3?_-`QL-OyN4DhYlm#@(AD$4lKoCa z_S%dM;x(4HwO@UWvm>KD z=72}?5syoja)rF&FH3mn`rJt8G^i+P#``s-md$v-;dIgX$SK+`4s+!@!0!WHv`$iW zy`^sVGNh+&9hLq3tM5-_i^C$1k$40?kh^!I^b(rwGjV8S5gZ`vyn>d+ltGF^B=S>H zY?hm5_R>@WuIwC87TksipA84Qv`6Y(hZ-DLWtjR&l)&-L;`1DAUO>SkV|gL6TQAi@ z&EXbH#c87mhMg{A`FkWEuuAhd+VZ`bY{jQ=UNswC($ao$@pUzA4bg=uuDGo(Zd}`O zysTnubU@9#H)7RONb<{LB@1iQbXOQf%09%Z_*vk-T}$j11gKD3VVf4>pB{a>&0cr5;^m)DnEhC(>3%~ zbI=K9=mU)ZT>-vzWu!Ab{-U89zeN}3j4xsHJf+|l#PRT18;nonr*>5q>V9EoTSNS!~1!B zxVdui+EvF0-K|IMSDrCAWoC)O6bjCP#89}Z@$8CAkO_2xdM}(c;?1j6VkIKk7Yn$Y z=~d9SS&1#atgSqwp5xsi7|Z+R?JN=FA2G|)m(jMe+`De&Sj{G2gM9`Atfvb638DWS zdoWyH6NHZUxpAG=x*X`rx}Sg;Lg8;sp$5(u|C~xZEK>kHj%W98D;Gn- zwX9LVw~UZ-Kf!5I9Fa^^-rRiyk15UyUk{CiEk5~f+J*#NmY7)@Kv_9(hpAG%EFFV6 z9Wv~Dp$^sx->>PA*gI4!NMN8ooes|o>0+{tysyeZK>`> zXq_%_{N+!(r#ZP~vZPX)fJ5Pvd6wph{6p;kN)$i(!qf-}P8n(k8vICRGx9&K^Jk=z zvA;Qtt4{^OtJ>xc|N`uAn-Vv#q0N zV2;r_Hua1?U74#Jb@HH!|KTik3n`>aZAGMHZHv?LG+Lksnn&wT!YOTNden|x`tK2f`K zJKPZN8XD6|elq`a%|L)oEMQd_47_T&C}iT1rIG+t2}7Il8`y$DU-#5?=Tk_QxIM#L zu}TWdL+iTd98gPB*xLle4yz1|mY@JOGTdFkvzN}hDuDX9T&(lZW?TUlG|Kj$8yyF?RY{4tzm zpfPE@yE`@&t+pn|wT9?_D}YVf#D2ReTadFpsICYY-FIVWK1VDVe7q$*C&XfyUVuE@ z6yN=$z7(sZZBeb)e~ky^&08E2HHg$#;kiBUA&P)-u|o#S(q211VXqgfxxz> z6AC*~RUVo3W-jVvH}y!pb$rB<5#g?Wj4M55vA-n}tTGR*Kz#jp^Z{^6^j1E?C|^by zW}=iFIJsYi3QBlLAVkhfx3U^m)KZ-gid#MKaJP5(E`QI!c`uI#;WNZMl;bBgCv3vo~*4pgG8Sb})Z7 mA_1FC^Dt~-4$c8Iwtw|PVP)g*4F8`P`Ft1P_3+zc7ybaT;oeUG diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate-members.html deleted file mode 100644 index c2f4e3d3d2..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate-members.html +++ /dev/null @@ -1,64 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Granulate Member List

This is the complete list of members for stk::Granulate, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Generator [inline]
Generator(void)stk::Generator [inline]
Granulate(void)stk::Granulate
Granulate(unsigned int nVoices, std::string fileName, bool typeRaw=false)stk::Granulate
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Generator [inline]
lastOut(unsigned int channel=0)stk::Granulate [inline]
openFile(std::string fileName, bool typeRaw=false)stk::Granulate
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
reset(void)stk::Granulate
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setGrainParameters(unsigned int duration=30, unsigned int rampPercent=50, int offset=0, unsigned int delay=0)stk::Granulate
setRandomFactor(StkFloat randomness=0.1)stk::Granulate
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setStretch(unsigned int stretchFactor=1)stk::Granulate
setVoices(unsigned int nVoices=1)stk::Granulate
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Granulate
tick(StkFrames &frames, unsigned int channel=0)stk::Granulate [inline, virtual]
~Granulate(void)stk::Granulate
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate.html deleted file mode 100644 index c797bdddf6..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate.html +++ /dev/null @@ -1,325 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Granulate Class Reference

-

STK granular synthesis class. -More...

- -

#include <Granulate.h>

-
-Inheritance diagram for stk::Granulate:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Granulate (void)
 Default constructor.
Granulate (unsigned int nVoices, std::string fileName, bool typeRaw=false)
 Constructor taking input audio file and number of voices arguments.
~Granulate (void)
 Class destructor.
void openFile (std::string fileName, bool typeRaw=false)
 Load a monophonic soundfile to be "granulated".
void reset (void)
 Reset the file pointer and all existing grains to the file start.
void setVoices (unsigned int nVoices=1)
 Set the number of simultaneous grain "voices" to use.
void setStretch (unsigned int stretchFactor=1)
 Set the stretch factor used for grain playback (1 - 1000).
void setGrainParameters (unsigned int duration=30, unsigned int rampPercent=50, int offset=0, unsigned int delay=0)
 Set global grain parameters used to determine individual grain settings.
void setRandomFactor (StkFloat randomness=0.1)
 This factor is used when setting individual grain parameters (0.0 - 1.0).
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed frame.
-StkFloat tick (unsigned int channel=0)
 Compute one sample frame and return the specified channel value.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill the StkFrames object with computed sample frames, starting at the specified channel.
-

Detailed Description

-

STK granular synthesis class.

-

This class implements a real-time granular synthesis algorithm that operates on an input soundfile. Multi-channel files are supported. Various functions are provided to allow control over voice and grain parameters.

-

The functionality of this class is based on the program MacPod by Chris Rolfe and Damian Keller, though there are likely to be a number of differences in the actual implementation.

-

by Gary Scavone, 2005 - 2010.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Granulate::openFile (std::string  fileName,
bool  typeRaw = false 
)
-
-
- -

Load a monophonic soundfile to be "granulated".

-

An StkError will be thrown if the file is not found, its format is unknown or unsupported, or the file has more than one channel.

- -
-
- -
-
- - - - - - - - - -
void stk::Granulate::reset (void  ) 
-
-
- -

Reset the file pointer and all existing grains to the file start.

-

Multiple grains are offset from one another in time by grain duration / nVoices.

- -
-
- -
-
- - - - - - - - - -
void stk::Granulate::setVoices (unsigned int  nVoices = 1 ) 
-
-
- -

Set the number of simultaneous grain "voices" to use.

-

Multiple grains are offset from one another in time by grain duration / nVoices. For this reason, it is best to set the grain parameters before calling this function (during initialization).

- -
-
- -
-
- - - - - - - - - -
void stk::Granulate::setStretch (unsigned int  stretchFactor = 1 ) 
-
-
- -

Set the stretch factor used for grain playback (1 - 1000).

-

Granular synthesis allows for time-stetching without affecting the original pitch of a sound. A stretch factor of 4 will produce a resulting sound of length 4 times the orignal sound. The default parameter of 1 produces no stretching.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void stk::Granulate::setGrainParameters (unsigned int  duration = 30,
unsigned int  rampPercent = 50,
int  offset = 0,
unsigned int  delay = 0 
)
-
-
- -

Set global grain parameters used to determine individual grain settings.

-

Each grain is defined as having a length of duration milliseconds which must be greater than zero. For values of rampPercent (0 - 100) greater than zero, a linear envelope will be applied to each grain. If rampPercent = 100, the resultant grain "window" is triangular while rampPercent = 50 produces a trapezoidal window. In addition, each grain can have a time delay of length delay and a grain pointer increment of length offset, which can be negative, before the next ramp onset (in milliseconds). The offset parameter controls grain pointer jumps between enveloped grain segments, while the delay parameter causes grain calculations to pause between grains. The actual values calculated for each grain will be randomized by a factor set using the setRandomFactor() function.

- -
-
- -
-
- - - - - - - - - -
void stk::Granulate::setRandomFactor (StkFloat  randomness = 0.1 ) 
-
-
- -

This factor is used when setting individual grain parameters (0.0 - 1.0).

-

This random factor is applied when all grain state durations are calculated. If set to 0.0, no randomness occurs. When randomness = 1.0, a grain segment of length duration will be randomly augmented by up to +- duration seconds (i.e., a 30 millisecond length will be augmented by an extra length of up to +30 or -30 milliseconds).

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::Granulate::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed frame.

-

The channel argument must be less than the number of output channels, which can be determined with the channelsOut() function (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

-
See also:
lastFrame()
- -

00175 {
-00176 #if defined(_STK_DEBUG_)
-00177   if ( channel >= lastFrame_.channels() ) {
-00178     oStream_ << "Granulate::lastOut(): channel argument is invalid!";
-00179     handleError( StkError::FUNCTION_ARGUMENT );
-00180   }
-00181 #endif
-00182 
-00183   return lastFrame_[channel];
-00184 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Granulate::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill the StkFrames object with computed sample frames, starting at the specified channel.

-

The channel argument plus the number of output channels must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00187 {
-00188   unsigned int nChannels = lastFrame_.channels();
-00189 #if defined(_STK_DEBUG_)
-00190   if ( channel > frames.channels() - nChannels ) {
-00191     oStream_ << "Granulate::tick(): channel and StkFrames arguments are incompatible!";
-00192     handleError( StkError::FUNCTION_ARGUMENT );
-00193   }
-00194 #endif
-00195 
-00196   StkFloat *samples = &frames[channel];
-00197   unsigned int j, hop = frames.channels() - nChannels;
-00198   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00199     *samples++ = tick();
-00200     for ( j=1; j<nChannels; j++ )
-00201       *samples++ = lastFrame_[j];
-00202   }
-00203 
-00204   return frames;
-00205 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Granulate.png deleted file mode 100644 index 546c97cbf7eb590949f0378b5a13cfaae5cac073..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I$HP)Q zpwV*g&_K=r93u~7dXcuZA$KJ}nxMcQ&u zkp38roZ;RB@QIz6bULB2Gi;3pat7e^HlQvZx$Z%>QakHFm+k2)Lf=@k%>kL-TH5S7 zYj&jDa3^}eA+C&L))!<(OVZ6ChpWXoqkTa}+SkRG>1@?qtq1$KAWzUz5IsblK<_GZUZwP79q)C$|O`7zTG{PbwYKNph zMh64X9`ONL#-CgHMjJFUX9Zn3Jc&S`T)AXoK`ztwqp7)Cu$p)-`Mv l>m~WU8^Ui0>7Sy*;t!bKCKXGp9I5~S002ovPDHLkV1h251`GfI diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar-members.html deleted file mode 100644 index c5b96ca0cc..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar-members.html +++ /dev/null @@ -1,62 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Guitar Member List

This is the complete list of members for stk::Guitar, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
clear(void)stk::Guitar
controlChange(int number, StkFloat value, int string=-1)stk::Guitar
Guitar(unsigned int nStrings=6, std::string bodyfile="")stk::Guitar
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastOut(void)stk::Guitar [inline]
noteOff(StkFloat amplitude, unsigned int string=0)stk::Guitar
noteOn(StkFloat frequency, StkFloat amplitude, unsigned int string=0)stk::Guitar
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setBodyFile(std::string bodyfile="")stk::Guitar
setFrequency(StkFloat frequency, unsigned int string=0)stk::Guitar
setLoopGain(StkFloat gain, int string=-1)stk::Guitar
setPluckPosition(StkFloat position, int string=-1)stk::Guitar
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input=0.0)stk::Guitar [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Guitar [inline]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::Guitar [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar.html deleted file mode 100644 index 770dcdb60a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar.html +++ /dev/null @@ -1,354 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Guitar Class Reference

-

STK guitar model class. -More...

- -

#include <Guitar.h>

-
-Inheritance diagram for stk::Guitar:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Guitar (unsigned int nStrings=6, std::string bodyfile="")
 Class constructor, specifying an arbitrary number of strings (default = 6).
-void clear (void)
 Reset and clear all internal state.
void setBodyFile (std::string bodyfile="")
 Set the string excitation, using either a soundfile or computed noise.
void setPluckPosition (StkFloat position, int string=-1)
 Set the pluck position for one or all strings.
void setLoopGain (StkFloat gain, int string=-1)
 Set the loop gain for one or all strings.
-void setFrequency (StkFloat frequency, unsigned int string=0)
 Set instrument parameters for a particular frequency.
void noteOn (StkFloat frequency, StkFloat amplitude, unsigned int string=0)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude, unsigned int string=0)
 Stop a note with the given amplitude (speed of decay).
void controlChange (int number, StkFloat value, int string=-1)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat lastOut (void)
 Return the last computed output value.
-StkFloat tick (StkFloat input=0.0)
 Take an optional input sample and compute one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the iFrames object as inputs to the class and write outputs to the oFrames object.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the effect and write outputs to the oFrames object.
-

Detailed Description

-

STK guitar model class.

-

This class implements a guitar model with an arbitrary number of strings (specified during instantiation). Each string is represented by an stk::Twang object. The model supports commuted synthesis, as discussed by Smith and Karjalainen. It also includes a basic body coupling model and supports feedback.

-

This class does not attempt voice management. Rather, most functions support a parameter to specify a particular string number and string (voice) management is assumed to occur externally. Note that this class does not inherit from stk::Instrmnt because of API inconsistencies.

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others.

-

Control Change Numbers:

-
    -
  • Bridge Coupling Gain = 2
  • -
  • Pluck Position = 4
  • -
  • Loop Gain = 11
  • -
  • Coupling Filter Pole = 1
  • -
  • Pick Filter Pole = 128
  • -
-

by Gary P. Scavone, 2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::Guitar::setBodyFile (std::string  bodyfile = "" ) 
-
-
- -

Set the string excitation, using either a soundfile or computed noise.

-

If no argument is provided, the std::string is empty, or an error occurs reading the file data, an enveloped noise signal will be generated for use as the pluck excitation.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Guitar::setPluckPosition (StkFloat  position,
int  string = -1 
)
-
-
- -

Set the pluck position for one or all strings.

-

If the string argument is < 0, the pluck position is set for all strings.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Guitar::setLoopGain (StkFloat  gain,
int  string = -1 
)
-
-
- -

Set the loop gain for one or all strings.

-

If the string argument is < 0, the loop gain is set for all strings.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void stk::Guitar::noteOn (StkFloat  frequency,
StkFloat  amplitude,
unsigned int  string = 0 
)
-
-
- -

Start a note with the given frequency and amplitude.

-

If the amplitude parameter is less than 0.2, the string will be undamped but it will not be "plucked."

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void stk::Guitar::controlChange (int  number,
StkFloat  value,
int  string = -1 
)
-
-
- -

Perform the control change specified by number and value (0.0 - 128.0).

-

If the string argument is < 0, then the control change is applied to all strings (if appropriate).

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Guitar::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the class and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00163 {
-00164 #if defined(_STK_DEBUG_)
-00165   if ( channel >= frames.channels() ) {
-00166     oStream_ << "Guitar::tick(): channel and StkFrames arguments are incompatible!";
-00167     handleError( StkError::FUNCTION_ARGUMENT );
-00168   }
-00169 #endif
-00170 
-00171   StkFloat *samples = &frames[channel];
-00172   unsigned int hop = frames.channels();
-00173   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00174     *samples = tick( *samples );
-00175 
-00176   return frames;
-00177 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::Guitar::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the effect and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00180 {
-00181 #if defined(_STK_DEBUG_)
-00182   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00183     oStream_ << "Guitar::tick(): channel and StkFrames arguments are incompatible!";
-00184     handleError( StkError::FUNCTION_ARGUMENT );
-00185   }
-00186 #endif
-00187 
-00188   StkFloat *iSamples = &iFrames[iChannel];
-00189   StkFloat *oSamples = &oFrames[oChannel];
-00190   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00191   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop )
-00192     *oSamples = tick( *iSamples );
-00193 
-00194   return iFrames;
-00195 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Guitar.png deleted file mode 100644 index ab3099cd221515c36b822cba60b2f9ace319d8e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^&OjW%!3-oz!z@aGlth3}i0l9V|AEZ^{}0TcpD+Q) z0^u%hyXp@gAKc zmpgyiavrhjwcnCWgsVA^*6a~&`!4jQm*SbVMzl8oDbDzcM zRQD%b*~MSk82H-m3GcD{XH+Fmdbk-)n%I*safAQRH^<3^rx{9p7}N~+#3efHk9pR` zDDZJj=yNdzCdZVt^+va@E!*5L>%8f~D%%tQq6?XQ_i4Sq_Bwj5| zk7#Y*ApUb_;s)`TD<(V%dv&1czopr0Q_p6 A761SM diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl-members.html deleted file mode 100644 index 6fd3aa610c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl-members.html +++ /dev/null @@ -1,73 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::HevyMetl Member List

This is the complete list of members for stk::HevyMetl, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::FM
controlChange(int number, StkFloat value)stk::FM [virtual]
FM(unsigned int operators=4)stk::FM
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
HevyMetl(void)stk::HevyMetl
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::FM
keyOn(void)stk::FM
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
loadWaves(const char **filenames)stk::FM
noteOff(StkFloat amplitude)stk::FM [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::HevyMetl [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setControl1(StkFloat cVal)stk::FM [inline]
setControl2(StkFloat cVal)stk::FM [inline]
setFrequency(StkFloat frequency)stk::FM [virtual]
setGain(unsigned int waveIndex, StkFloat gain)stk::FM
setModulationDepth(StkFloat mDepth)stk::FM [inline]
setModulationSpeed(StkFloat mSpeed)stk::FM [inline]
setRatio(unsigned int waveIndex, StkFloat ratio)stk::FM
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::HevyMetl [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::HevyMetl [inline, virtual]
~FM(void)stk::FM [virtual]
~HevyMetl(void)stk::HevyMetl
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl.html deleted file mode 100644 index 68114edfe3..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl.html +++ /dev/null @@ -1,159 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::HevyMetl Class Reference

-

STK heavy metal FM synthesis instrument. -More...

- -

#include <HevyMetl.h>

-
-Inheritance diagram for stk::HevyMetl:
-
-
- - -stk::FM -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - -

Public Member Functions

 HevyMetl (void)
 Class constructor.
~HevyMetl (void)
 Class destructor.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK heavy metal FM synthesis instrument.

-

This class implements 3 cascade operators with feedback modulation, also referred to as algorithm 3 of the TX81Z.

-
    Algorithm 3 is :    4--\
-                    3-->2-- + -->1-->Out
-

Control Change Numbers:

-
    -
  • Total Modulator Index = 2
  • -
  • Modulator Crossfade = 4
  • -
  • LFO Speed = 11
  • -
  • LFO Depth = 1
  • -
  • ADSR 2 & 4 Target = 128
  • -
-

The basic Chowning/Stanford FM patent expired in 1995, but there exist follow-on patents, mostly assigned to Yamaha. If you are of the type who should worry about this (making money) worry away.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::HevyMetl::HevyMetl (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::HevyMetl::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::FM.

- -

00098 {
-00099   unsigned int nChannels = lastFrame_.channels();
-00100 #if defined(_STK_DEBUG_)
-00101   if ( channel > frames.channels() - nChannels ) {
-00102     oStream_ << "HevyMetl::tick(): channel and StkFrames arguments are incompatible!";
-00103     handleError( StkError::FUNCTION_ARGUMENT );
-00104   }
-00105 #endif
-00106 
-00107   StkFloat *samples = &frames[channel];
-00108   unsigned int j, hop = frames.channels() - nChannels;
-00109   if ( nChannels == 1 ) {
-00110     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00111       *samples++ = tick();
-00112   }
-00113   else {
-00114     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00115       *samples++ = tick();
-00116       for ( j=1; j<nChannels; j++ )
-00117         *samples++ = lastFrame_[j];
-00118     }
-00119   }
-00120 
-00121   return frames;
-00122 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1HevyMetl.png deleted file mode 100644 index 5dbff2acc962d5b7b0e709844fb8469c40859d46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 642 zcmV-|0)737P) zRTn+C?E)eIoS_F}dc|#51u=JyVzu;^tAL;1>iez`ztv$1=xyw}z7CUh+pdHCH`@!x+6tJc=dr}=)M`#;^F@BBjKmBIJBImf_3Zq6}ql>4~-K$k9Ex^(H%rCZ{NiF8Or z(EYv(5%}iVJq?%tk_(6ca5O|9fbACOpFnCa%8;pB2I@T9G##a@V?Za>haOP4NPx^(H5IAS6l5)pLobs+-V1OSt>eV5$k+n+TT5CP!m zKX3~N5eRHkJ4CW*3JCitAnZJuy1!=z8~m5 z!43M(FGOA$e7~D>3>@U<90NzWkJ}G)>C&Z3mo8npB@hz{A-6{Nt1gmjm*ZDwuKC{I zr(bfl`@IXKr2DQ7>@I+M)PIZ%Gu^pmIBKRfy)^uk1J^Ne-Bs9U@rtXrGr0X^wGb1! z_s`eO)?sx0_A&gRy{qqJ-Rh#Xj9JBx>fmcO?gx8e&aM09ydPE{r;z9P_c>ec2UGZ- ce5@N2KLMdO))}O-_W%F@07*qoM6N<$f)8Li-2eap diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir-members.html deleted file mode 100644 index 4467019823..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Iir Member List

This is the complete list of members for stk::Iir, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
getGain(void) const stk::Filter [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
Iir(void)stk::Iir
Iir(std::vector< StkFloat > &bCoefficients, std::vector< StkFloat > &aCoefficients)stk::Iir
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::Iir [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setCoefficients(std::vector< StkFloat > &bCoefficients, std::vector< StkFloat > &aCoefficients, bool clearState=false)stk::Iir
setDenominator(std::vector< StkFloat > &aCoefficients, bool clearState=false)stk::Iir
setGain(StkFloat gain)stk::Filter [inline]
setNumerator(std::vector< StkFloat > &bCoefficients, bool clearState=false)stk::Iir
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::Iir [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Iir [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::Iir [inline]
~Iir(void)stk::Iir
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir.html deleted file mode 100644 index 2638d1b900..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir.html +++ /dev/null @@ -1,347 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Iir Class Reference

-

STK general infinite impulse response filter class. -More...

- -

#include <Iir.h>

-
-Inheritance diagram for stk::Iir:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Iir (void)
 Default constructor creates a zero-order pass-through "filter".
 Iir (std::vector< StkFloat > &bCoefficients, std::vector< StkFloat > &aCoefficients)
 Overloaded constructor which takes filter coefficients.
~Iir (void)
 Class destructor.
void setCoefficients (std::vector< StkFloat > &bCoefficients, std::vector< StkFloat > &aCoefficients, bool clearState=false)
 Set filter coefficients.
void setNumerator (std::vector< StkFloat > &bCoefficients, bool clearState=false)
 Set numerator coefficients.
void setDenominator (std::vector< StkFloat > &aCoefficients, bool clearState=false)
 Set denominator coefficients.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK general infinite impulse response filter class.

-

This class provides a generic digital filter structure that can be used to implement IIR filters. For filters containing only feedforward terms, the Fir class is slightly more efficient.

-

In particular, this class implements the standard difference equation:

-

a[0]*y[n] = b[0]*x[n] + ... + b[nb]*x[n-nb] - a[1]*y[n-1] - ... - a[na]*y[n-na]

-

If a[0] is not equal to 1, the filter coeffcients are normalized by a[0].

-

The gain parameter is applied at the filter input and does not affect the coefficient values. The default gain value is 1.0. This structure results in one extra multiply per computed sample, but allows easy control of the overall filter gain.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
stk::Iir::Iir (std::vector< StkFloat > &  bCoefficients,
std::vector< StkFloat > &  aCoefficients 
)
-
-
- -

Overloaded constructor which takes filter coefficients.

-

An StkError can be thrown if either of the coefficient vector sizes is zero, or if the a[0] coefficient is equal to zero.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void stk::Iir::setCoefficients (std::vector< StkFloat > &  bCoefficients,
std::vector< StkFloat > &  aCoefficients,
bool  clearState = false 
)
-
-
- -

Set filter coefficients.

-

An StkError can be thrown if either of the coefficient vector sizes is zero, or if the a[0] coefficient is equal to zero. If a[0] is not equal to 1, the filter coeffcients are normalized by a[0]. The internal state of the filter is not cleared unless the clearState flag is true.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Iir::setNumerator (std::vector< StkFloat > &  bCoefficients,
bool  clearState = false 
)
-
-
- -

Set numerator coefficients.

-

An StkError can be thrown if coefficient vector is empty. Any previously set denominator coefficients are left unaffected. Note that the default constructor sets the single denominator coefficient a[0] to 1.0. The internal state of the filter is not cleared unless the clearState flag is true.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Iir::setDenominator (std::vector< StkFloat > &  aCoefficients,
bool  clearState = false 
)
-
-
- -

Set denominator coefficients.

-

An StkError can be thrown if the coefficient vector is empty or if the a[0] coefficient is equal to zero. Previously set numerator coefficients are unaffected unless a[0] is not equal to 1, in which case all coeffcients are normalized by a[0]. Note that the default constructor sets the single numerator coefficient b[0] to 1.0. The internal state of the filter is not cleared unless the clearState flag is true.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Iir::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00136 {
-00137 #if defined(_STK_DEBUG_)
-00138   if ( channel >= frames.channels() ) {
-00139     oStream_ << "Iir::tick(): channel and StkFrames arguments are incompatible!";
-00140     handleError( StkError::FUNCTION_ARGUMENT );
-00141   }
-00142 #endif
-00143 
-00144   StkFloat *samples = &frames[channel];
-00145   unsigned int i, hop = frames.channels();
-00146   for ( unsigned int j=0; j<frames.frames(); j++, samples += hop ) {
-00147     outputs_[0] = 0.0;
-00148     inputs_[0] = gain_ * *samples;
-00149     for ( i=b_.size()-1; i>0; i-- ) {
-00150       outputs_[0] += b_[i] * inputs_[i];
-00151       inputs_[i] = inputs_[i-1];
-00152     }
-00153     outputs_[0] += b_[0] * inputs_[0];
-00154 
-00155     for ( i=a_.size()-1; i>0; i-- ) {
-00156       outputs_[0] += -a_[i] * outputs_[i];
-00157       outputs_[i] = outputs_[i-1];
-00158     }
-00159 
-00160     *samples = outputs_[0];
-00161   }
-00162 
-00163   lastFrame_[0] = *(samples-hop);
-00164   return frames;
-00165 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::Iir::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00168 {
-00169 #if defined(_STK_DEBUG_)
-00170   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00171     oStream_ << "Iir::tick(): channel and StkFrames arguments are incompatible!";
-00172     handleError( StkError::FUNCTION_ARGUMENT );
-00173   }
-00174 #endif
-00175 
-00176   StkFloat *iSamples = &iFrames[iChannel];
-00177   StkFloat *oSamples = &oFrames[oChannel];
-00178   unsigned int i, iHop = iFrames.channels(), oHop = oFrames.channels();
-00179   for ( unsigned int j=0; j<iFrames.frames(); j++, iSamples += iHop, oSamples += oHop ) {
-00180     outputs_[0] = 0.0;
-00181     inputs_[0] = gain_ * *iSamples;
-00182     for ( i=b_.size()-1; i>0; i-- ) {
-00183       outputs_[0] += b_[i] * inputs_[i];
-00184       inputs_[i] = inputs_[i-1];
-00185     }
-00186     outputs_[0] += b_[0] * inputs_[0];
-00187 
-00188     for ( i=a_.size()-1; i>0; i-- ) {
-00189       outputs_[0] += -a_[i] * outputs_[i];
-00190       outputs_[i] = outputs_[i-1];
-00191     }
-00192 
-00193     *oSamples = outputs_[0];
-00194   }
-00195 
-00196   lastFrame_[0] = *(oSamples-oHop);
-00197   return iFrames;
-00198 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Iir.png deleted file mode 100644 index 56ad6019f03ed916b0b0b7014dd6e59b693fa25a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 429 zcmeAS@N?(olHy`uVBq!ia0vp^c0k<0!3-jMR>%P}@s6O=n36RTC666;Qlm>&Vr$USv7#M9lT^vIy7~jr4n0G{h$3@cp(SQ4$>^#}c z!WnC`cE5^<`NOLXH4c9uQ+Nog2>hj<xt!Gl}DovI3JeYs0kJTIoM>Qx7rqxwHK{m$Nd)Jppw-+Zo%H}lt63*PVLUc33+ z=Tm=*ZN4x1cUpdBRB#R7defuoAI+`(=YZ_9mvz_TGP>2_UKu`Pnf(F(a(1ta^(9wI z_LQuzcslYYMT@l?fi6zopr0753aW&i*H diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn-members.html deleted file mode 100644 index d91c5d2e5e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn-members.html +++ /dev/null @@ -1,58 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::InetWvIn Member List

This is the complete list of members for stk::InetWvIn, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::WvIn [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
InetWvIn(unsigned long bufferFrames=1024, unsigned int nBuffers=8)stk::InetWvIn
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
isConnected(void)stk::InetWvIn
lastFrame(void) const stk::WvIn [inline]
lastOut(unsigned int channel=0)stk::InetWvIn [inline]
listen(int port=2006, unsigned int nChannels=1, Stk::StkFormat format=STK_SINT16, Socket::ProtocolType protocol=Socket::PROTO_TCP)stk::InetWvIn
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::InetWvIn [virtual]
tick(StkFrames &frames)stk::InetWvIn [virtual]
~InetWvIn()stk::InetWvIn
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn.html deleted file mode 100644 index 5b6cffbc85..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn.html +++ /dev/null @@ -1,246 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::InetWvIn Class Reference

-

STK internet streaming input class. -More...

- -

#include <InetWvIn.h>

-
-Inheritance diagram for stk::InetWvIn:
-
-
- - -stk::WvIn -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

 InetWvIn (unsigned long bufferFrames=1024, unsigned int nBuffers=8)
 Default constructor.
~InetWvIn ()
 Class destructor.
void listen (int port=2006, unsigned int nChannels=1, Stk::StkFormat format=STK_SINT16, Socket::ProtocolType protocol=Socket::PROTO_TCP)
 Wait for a (new) socket connection with specified protocol, port, data channels and format.
bool isConnected (void)
 Returns true is an input connection exists or input data remains in the queue.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed frame.
StkFloat tick (unsigned int channel=0)
 Compute a sample frame and return the specified channel value.
StkFramestick (StkFrames &frames)
 Fill the StkFrames argument with computed frames and return the same reference.
-

Detailed Description

-

STK internet streaming input class.

-

This Wvin subclass reads streamed audio data over a network via a TCP or UDP socket connection. The data is assumed in big-endian, or network, byte order. Only a single socket connection is supported.

-

InetWvIn supports multi-channel data. It is important to distinguish the tick() method that computes a single frame (and returns only the specified sample of a multi-channel frame) from the overloaded one that takes an StkFrames object for multi-channel and/or multi-frame data.

-

This class implements a socket server. When using the TCP protocol, the server "listens" for a single remote connection within the InetWvIn::start() function. For the UDP protocol, no attempt is made to verify packet delivery or order. The default data type for the incoming stream is signed 16-bit integers, though any of the defined StkFormats are permissible.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
stk::InetWvIn::InetWvIn (unsigned long  bufferFrames = 1024,
unsigned int  nBuffers = 8 
)
-
-
- -

Default constructor.

-

An StkError will be thrown if an error occurs while initializing the input thread.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void stk::InetWvIn::listen (int  port = 2006,
unsigned int  nChannels = 1,
Stk::StkFormat  format = STK_SINT16,
Socket::ProtocolType  protocol = Socket::PROTO_TCP 
)
-
-
- -

Wait for a (new) socket connection with specified protocol, port, data channels and format.

-

For the UDP protocol, this function will create a socket instance and return. For the TCP protocol, this function will block until a connection is established. An StkError will be thrown if a socket error occurs or an invalid function argument is provided.

- -
-
- -
-
- - - - - - - - - -
bool stk::InetWvIn::isConnected (void  ) 
-
-
- -

Returns true is an input connection exists or input data remains in the queue.

-

This method will not return false after an input connection has been closed until all buffered input data has been read out.

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::InetWvIn::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed frame.

-

For multi-channel files, use the lastFrame() function to get all values from the last computed frame. If no connection exists, the returned value is 0.0. The channel argument must be less than the number of channels in the data stream (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00141 {
-00142 #if defined(_STK_DEBUG_)
-00143   if ( channel >= data_.channels() ) {
-00144     oStream_ << "InetWvIn::lastOut(): channel argument and data stream are incompatible!";
-00145     handleError( StkError::FUNCTION_ARGUMENT );
-00146   }
-00147 #endif
-00148 
-00149   // If no connection and we've output all samples in the queue, return.
-00150   if ( !connected_ && bytesFilled_ == 0 && bufferCounter_ == 0 ) return 0.0;
-00151 
-00152   return lastFrame_[channel];
-00153 }
-

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::InetWvIn::tick (unsigned int  channel = 0 )  [virtual]
-
-
- -

Compute a sample frame and return the specified channel value.

-

For multi-channel files, use the lastFrame() function to get all values from the computed frame. If no connection exists, the returned value is 0.0 (and a warning will be issued if _STK_DEBUG_ is defined during compilation). The channel argument must be less than the number of channels in the data stream (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::WvIn.

- -
-
- -
-
- - - - - - - - - -
StkFrames& stk::InetWvIn::tick (StkFrames frames )  [virtual]
-
-
- -

Fill the StkFrames argument with computed frames and return the same reference.

-

The number of channels in the StkFrames argument must equal the number of channels specified in the listen() function. However, this is only checked if _STK_DEBUG_ is defined during compilation, in which case an incompatibility will trigger an StkError exception. If no connection exists, the function does nothing (a warning will be issued if _STK_DEBUG_ is defined during compilation).

- -

Implements stk::WvIn.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvIn.png deleted file mode 100644 index 06fb592bdf6c35c5fd1cf2add9fff677e8d32620..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmeAS@N?(olHy`uVBq!ia0vp^fk52B!3-oLfKIM=9`uB88 zY+!a)DL$noyKBYM_uA_3Zrv_%*3konkD0|)g`opXU ze%~es$XP@I2w-KDEO~=PW*1@liX=ccPMOmxyN29SymQy0SvIHTLN^vFwXpZ??&w z#f8D*O2=EyrhBp-saq3LcHC1v;c~^+?%Pj^pWZ9glghtMJ$2*Cb?cuFCf_fvGr#?H zNqO+}$s*tNmG*0DC zX|i*xn_i{#sOPQA^yT8UuP#cSUbn4QYu4|Il|Jmd-%d83xAOFEtG{zD{w$q%Uqs}8 dtHj+p1`c7RZJEmRE&$_&!PC{xWt~$(695;Z;ywTX diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut-members.html deleted file mode 100644 index 5ca2f6e2a1..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut-members.html +++ /dev/null @@ -1,61 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::InetWvOut Member List

This is the complete list of members for stk::InetWvOut, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
clipStatus(void)stk::WvOut [inline]
connect(int port, Socket::ProtocolType protocol=Socket::PROTO_TCP, std::string hostname="localhost", unsigned int nChannels=1, Stk::StkFormat format=STK_SINT16)stk::InetWvOut
disconnect(void)stk::InetWvOut
getFrameCount(void) const stk::WvOut [inline]
getTime(void) const stk::WvOut [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
InetWvOut(unsigned long packetFrames=1024)stk::InetWvOut
InetWvOut(int port, Socket::ProtocolType protocol=Socket::PROTO_TCP, std::string hostname="localhost", unsigned int nChannels=1, Stk::StkFormat format=STK_SINT16, unsigned long packetFrames=1024)stk::InetWvOut
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
resetClipStatus(void)stk::WvOut [inline]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(const StkFloat sample)stk::InetWvOut [virtual]
tick(const StkFrames &frames)stk::InetWvOut [virtual]
WvOut(void)stk::WvOut [inline]
~InetWvOut()stk::InetWvOut
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut.html deleted file mode 100644 index 20d800e20e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut.html +++ /dev/null @@ -1,221 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::InetWvOut Class Reference

-

STK internet streaming output class. -More...

- -

#include <InetWvOut.h>

-
-Inheritance diagram for stk::InetWvOut:
-
-
- - -stk::WvOut -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

InetWvOut (unsigned long packetFrames=1024)
 Default constructor ... the socket is not instantiated.
 InetWvOut (int port, Socket::ProtocolType protocol=Socket::PROTO_TCP, std::string hostname="localhost", unsigned int nChannels=1, Stk::StkFormat format=STK_SINT16, unsigned long packetFrames=1024)
 Overloaded constructor which opens a network connection during instantiation.
~InetWvOut ()
 Class destructor.
void connect (int port, Socket::ProtocolType protocol=Socket::PROTO_TCP, std::string hostname="localhost", unsigned int nChannels=1, Stk::StkFormat format=STK_SINT16)
 Connect to the specified host and port and prepare to stream nChannels of data in the given data format.
-void disconnect (void)
 If a connection is open, write out remaining samples in the queue and then disconnect.
void tick (const StkFloat sample)
 Output a single sample to all channels in a sample frame.
void tick (const StkFrames &frames)
 Output the StkFrames data.
-

Detailed Description

-

STK internet streaming output class.

-

This WvOut subclass can stream data over a network via a TCP or UDP socket connection. The data is converted to big-endian byte order, if necessary, before being transmitted.

-

InetWvOut supports multi-channel data. It is important to distinguish the tick() method that outputs a single sample to all channels in a sample frame from the overloaded one that takes a reference to an StkFrames object for multi-channel and/or multi-frame data.

-

This class connects to a socket server, the port and IP address of which must be specified as constructor arguments. The default data type is signed 16-bit integers but any of the defined StkFormats are permissible.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
stk::InetWvOut::InetWvOut (int  port,
Socket::ProtocolType  protocol = Socket::PROTO_TCP,
std::string  hostname = "localhost",
unsigned int  nChannels = 1,
Stk::StkFormat  format = STK_SINT16,
unsigned long  packetFrames = 1024 
)
-
-
- -

Overloaded constructor which opens a network connection during instantiation.

-

An StkError is thrown if a socket error occurs or an invalid argument is specified.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void stk::InetWvOut::connect (int  port,
Socket::ProtocolType  protocol = Socket::PROTO_TCP,
std::string  hostname = "localhost",
unsigned int  nChannels = 1,
Stk::StkFormat  format = STK_SINT16 
)
-
-
- -

Connect to the specified host and port and prepare to stream nChannels of data in the given data format.

-

An StkError is thrown if a socket error occurs or an invalid argument is specified.

- -
-
- -
-
- - - - - - - - - -
void stk::InetWvOut::tick (const StkFloat  sample )  [virtual]
-
-
- -

Output a single sample to all channels in a sample frame.

-

An StkError is thrown if an output error occurs. If a socket connection does not exist, the function does nothing (a warning will be issued if _STK_DEBUG_ is defined during compilation).

- -

Implements stk::WvOut.

- -
-
- -
-
- - - - - - - - - -
void stk::InetWvOut::tick (const StkFrames frames )  [virtual]
-
-
- -

Output the StkFrames data.

-

An StkError will be thrown if an output error occurs. An StkError will also be thrown if _STK_DEBUG_ is defined during compilation and there is an incompatability between the number of channels in the FileWvOut object and that in the StkFrames object. If a socket connection does not exist, the function does nothing (a warning will be issued if _STK_DEBUG_ is defined during compilation).

- -

Implements stk::WvOut.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1InetWvOut.png deleted file mode 100644 index c145fdd78a6d4338d4d5559071b91bf09655e71d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmV+m0`&cfP)f~X1-5o|5rOM(o*EL;dilfj>7}(oa69F`_I-1ZQ8VH)22(GbC?byLhHduHokpOo^sW*76= zHdCzIJ|}&~FWDyFeHrYYtrOkiLQd-H>QjTg*SFTxi8|r?g!VVtagmlHuMNM8opT%> zXy+V((a(K#n-Hdg2lbqC*xOqyC_D}4+zO~M}I^p|-_IKKG@dLeUCbHCgXWjq+ N002ovPDHLkV1lWa1Rwwa diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt-members.html deleted file mode 100644 index 0c598117f9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt-members.html +++ /dev/null @@ -1,59 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Instrmnt Member List

This is the complete list of members for stk::Instrmnt, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
controlChange(int number, StkFloat value)stk::Instrmnt [inline, virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)=0stk::Instrmnt [pure virtual]
noteOn(StkFloat frequency, StkFloat amplitude)=0stk::Instrmnt [pure virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Instrmnt [inline, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)=0stk::Instrmnt [pure virtual]
tick(StkFrames &frames, unsigned int channel=0)=0stk::Instrmnt [pure virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt.html deleted file mode 100644 index 7e164119a4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt.html +++ /dev/null @@ -1,190 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Instrmnt Class Reference

-

STK instrument abstract base class. -More...

- -

#include <Instrmnt.h>

-
-Inheritance diagram for stk::Instrmnt:
-
-
- - -stk::Stk -stk::BandedWG -stk::BlowBotl -stk::BlowHole -stk::Bowed -stk::Brass -stk::Clarinet -stk::Drummer -stk::Flute -stk::FM -stk::Mandolin -stk::Mesh2D -stk::Modal -stk::Plucked -stk::Resonate -stk::Sampler -stk::Saxofony -stk::Shakers -stk::Simple -stk::Sitar -stk::StifKarp -stk::VoicForm -stk::Whistle - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Instrmnt (void)
 Class constructor.
-virtual void noteOn (StkFloat frequency, StkFloat amplitude)=0
 Start a note with the given frequency and amplitude.
-virtual void noteOff (StkFloat amplitude)=0
 Stop a note with the given amplitude (speed of decay).
-virtual void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-virtual void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-unsigned int channelsOut (void) const
 Return the number of output channels for the class.
-const StkFrameslastFrame (void) const
 Return an StkFrames reference to the last output sample frame.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed frame.
virtual StkFloat tick (unsigned int channel=0)=0
 Compute one sample frame and return the specified channel value.
virtual StkFramestick (StkFrames &frames, unsigned int channel=0)=0
 Fill the StkFrames object with computed sample frames, starting at the specified channel.
-

Detailed Description

-

STK instrument abstract base class.

-

This class provides a common interface for all STK instruments.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
StkFloat stk::Instrmnt::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed frame.

-

The channel argument must be less than the number of output channels, which can be determined with the channelsOut() function (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

-
See also:
lastFrame()
- -

00083 {
-00084 #if defined(_STK_DEBUG_)
-00085   if ( channel >= lastFrame_.channels() ) {
-00086     oStream_ << "Instrmnt::lastOut(): channel argument is invalid!";
-00087     handleError( StkError::FUNCTION_ARGUMENT );
-00088   }
-00089 #endif
-00090 
-00091   return lastFrame_[channel];
-00092 }
-

- -
-
- -
-
- - - - - - - - - -
virtual StkFloat stk::Instrmnt::tick (unsigned int  channel = 0 )  [pure virtual]
-
- -
- -
-
- - - - - - - - - - - - - - - - - - -
virtual StkFrames& stk::Instrmnt::tick (StkFrames frames,
unsigned int  channel = 0 
) [pure virtual]
-
-
- -

Fill the StkFrames object with computed sample frames, starting at the specified channel.

-

The channel argument plus the number of output channels must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implemented in stk::BandedWG, stk::BeeThree, stk::BlowBotl, stk::BlowHole, stk::Bowed, stk::Brass, stk::Clarinet, stk::Drummer, stk::Flute, stk::FM, stk::FMVoices, stk::HevyMetl, stk::Mandolin, stk::Mesh2D, stk::Modal, stk::Moog, stk::PercFlut, stk::Plucked, stk::Resonate, stk::Rhodey, stk::Sampler, stk::Saxofony, stk::Shakers, stk::Simple, stk::Sitar, stk::StifKarp, stk::TubeBell, stk::VoicForm, stk::Whistle, and stk::Wurley.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Instrmnt.png deleted file mode 100644 index f5f8754dca904fd336636339a30b61ff33de9100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4149 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 F{|~ - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::JCRev Member List

This is the complete list of members for stk::JCRev, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Effect [inline]
clear(void)stk::JCRev [virtual]
Effect(void)stk::Effect [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
JCRev(StkFloat T60=1.0)stk::JCRev
lastFrame(void) const stk::Effect [inline]
lastOut(unsigned int channel=0)stk::JCRev [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setEffectMix(StkFloat mix)stk::Effect [inline, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setT60(StkFloat T60)stk::JCRev
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input, unsigned int channel=0)stk::JCRev [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::JCRev
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::JCRev
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JCRev.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JCRev.html deleted file mode 100644 index 200ab4167f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JCRev.html +++ /dev/null @@ -1,257 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::JCRev Class Reference

-

John Chowning's reverberator class. -More...

- -

#include <JCRev.h>

-
-Inheritance diagram for stk::JCRev:
-
-
- - -stk::Effect -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

JCRev (StkFloat T60=1.0)
 Class constructor taking a T60 decay time argument (one second default value).
-void clear (void)
 Reset and clear all internal state.
-void setT60 (StkFloat T60)
 Set the reverberation T60 decay time.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed stereo frame.
StkFloat tick (StkFloat input, unsigned int channel=0)
 Input one sample to the effect and return the specified channel value of the computed stereo frame.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the effect and replace with stereo outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the effect and write stereo outputs to the oFrames object.
-

Detailed Description

-

John Chowning's reverberator class.

-

This class takes a monophonic input signal and produces a stereo output signal. It is derived from the CLM JCRev function, which is based on the use of networks of simple allpass and comb delay filters. This class implements three series allpass units, followed by four parallel comb filters, and two decorrelation delay lines in parallel at the output.

-

Although not in the original JC reverberator, one-pole lowpass filters have been added inside the feedback comb filters.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
StkFloat stk::JCRev::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed stereo frame.

-

Use the lastFrame() function to get both values of the last computed stereo frame. The channel argument must be 0 or 1 (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00101 {
-00102 #if defined(_STK_DEBUG_)
-00103   if ( channel > 1 ) {
-00104     oStream_ << "JCRev::lastOut(): channel argument must be less than 2!";
-00105     handleError( StkError::FUNCTION_ARGUMENT );
-00106   }
-00107 #endif
-00108 
-00109   return lastFrame_[channel];
-00110 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFloat stk::JCRev::tick (StkFloat  input,
unsigned int  channel = 0 
) [inline]
-
-
- -

Input one sample to the effect and return the specified channel value of the computed stereo frame.

-

Use the lastFrame() function to get both values of the computed stereo output frame. The channel argument must be 0 or 1 (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00113 {
-00114 #if defined(_STK_DEBUG_)
-00115   if ( channel > 1 ) {
-00116     oStream_ << "JCRev::tick(): channel argument must be less than 2!";
-00117     handleError( StkError::FUNCTION_ARGUMENT );
-00118   }
-00119 #endif
-00120 
-00121   StkFloat temp, temp0, temp1, temp2, temp3, temp4, temp5, temp6;
-00122   StkFloat filtout;
-00123 
-00124   temp = allpassDelays_[0].lastOut();
-00125   temp0 = allpassCoefficient_ * temp;
-00126   temp0 += input;
-00127   allpassDelays_[0].tick(temp0);
-00128   temp0 = -(allpassCoefficient_ * temp0) + temp;
-00129     
-00130   temp = allpassDelays_[1].lastOut();
-00131   temp1 = allpassCoefficient_ * temp;
-00132   temp1 += temp0;
-00133   allpassDelays_[1].tick(temp1);
-00134   temp1 = -(allpassCoefficient_ * temp1) + temp;
-00135     
-00136   temp = allpassDelays_[2].lastOut();
-00137   temp2 = allpassCoefficient_ * temp;
-00138   temp2 += temp1;
-00139   allpassDelays_[2].tick(temp2);
-00140   temp2 = -(allpassCoefficient_ * temp2) + temp;
-00141     
-00142   temp3 = temp2 + ( combFilters_[0].tick( combCoefficient_[0] * combDelays_[0].lastOut() ) );
-00143   temp4 = temp2 + ( combFilters_[1].tick( combCoefficient_[1] * combDelays_[1].lastOut() ) );
-00144   temp5 = temp2 + ( combFilters_[2].tick( combCoefficient_[2] * combDelays_[2].lastOut() ) );
-00145   temp6 = temp2 + ( combFilters_[3].tick( combCoefficient_[3] * combDelays_[3].lastOut() ) );
-00146 
-00147   combDelays_[0].tick(temp3);
-00148   combDelays_[1].tick(temp4);
-00149   combDelays_[2].tick(temp5);
-00150   combDelays_[3].tick(temp6);
-00151 
-00152   filtout = temp3 + temp4 + temp5 + temp6;
-00153 
-00154   lastFrame_[0] = effectMix_ * (outLeftDelay_.tick(filtout));
-00155   lastFrame_[1] = effectMix_ * (outRightDelay_.tick(filtout));
-00156   temp = (1.0 - effectMix_) * input;
-00157   lastFrame_[0] += temp;
-00158   lastFrame_[1] += temp;
-00159     
-00160   return 0.7 * lastFrame_[channel];
-00161 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames& stk::JCRev::tick (StkFrames frames,
unsigned int  channel = 0 
)
-
-
- -

Take a channel of the StkFrames object as inputs to the effect and replace with stereo outputs.

-

The StkFrames argument reference is returned. The stereo outputs are written to the StkFrames argument starting at the specified channel. Therefore, the channel argument must be less than ( channels() - 1 ) of the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames& stk::JCRev::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
)
-
-
- -

Take a channel of the iFrames object as inputs to the effect and write stereo outputs to the oFrames object.

-

The iFrames object reference is returned. The iChannel argument must be less than the number of channels in the iFrames argument (the first channel is specified by 0). The oChannel argument must be less than ( channels() - 1 ) of the oFrames argument. However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JCRev.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JCRev.png deleted file mode 100644 index a71e1c59a6e7d2b3a290ddd0774b871bd8fc9da4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmV54wU57ngeAyk2^0qbm-8bL+5$Ul{3mE8H3J; z4n*L80suq=Xn*tMQ^$SJ%Fbz9B2an(KrAm9enEhhnx^QJ#qmvvdesXyVoTnG4^()rR!dhh(d_j0W{P?A$? z4wU6Q?!4&Gp+kobo##2o83idR)A`6jd2wNfYG?a})2#7*=K!VX|G}2-j;1%%?zHK! z$XLB{+>C{zH>bRVV}05?ZT&lEl%>=AYS#>3S6H{KYszBLpT+*udHLA7F6**Q)+$|J hVw}$@og^n``~Vzg9(p=hj diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable-members.html deleted file mode 100644 index 0416e57b20..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable-members.html +++ /dev/null @@ -1,54 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::JetTable Member List

This is the complete list of members for stk::JetTable, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
Function(void)stk::Function [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastOut(void) const stk::Function [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::JetTable [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::JetTable [inline]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::JetTable [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable.html deleted file mode 100644 index 7137dec5bb..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable.html +++ /dev/null @@ -1,176 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::JetTable Class Reference

-

STK jet table class. -More...

- -

#include <JetTable.h>

-
-Inheritance diagram for stk::JetTable:
-
-
- - -stk::Function -stk::Stk - -
-
- -

List of all members.

- - - - - - - - -

Public Member Functions

-StkFloat tick (StkFloat input)
 Take one sample input and map to one sample of output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the table and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the table and write outputs to the oFrames object.
-

Detailed Description

-

STK jet table class.

-

This class implements a flue jet non-linear function, computed by a polynomial calculation. Contrary to the name, this is not a "table".

-

Consult Fletcher and Rossing, Karjalainen, Cook, and others for more information.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::JetTable::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline]
-
-
- -

Take a channel of the StkFrames object as inputs to the table and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00068 {
-00069 #if defined(_STK_DEBUG_)
-00070   if ( channel >= frames.channels() ) {
-00071     oStream_ << "JetTable::tick(): channel and StkFrames arguments are incompatible!";
-00072     handleError( StkError::FUNCTION_ARGUMENT );
-00073   }
-00074 #endif
-00075 
-00076   StkFloat *samples = &frames[channel];
-00077   unsigned int hop = frames.channels();
-00078   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00079     *samples = *samples * (*samples * *samples - 1.0);
-00080     if ( *samples > 1.0) *samples = 1.0;
-00081     if ( *samples < -1.0) *samples = -1.0;
-00082   }
-00083 
-00084   lastFrame_[0] = *(samples-hop);
-00085   return frames;
-00086 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::JetTable::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the table and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00089 {
-00090 #if defined(_STK_DEBUG_)
-00091   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00092     oStream_ << "JetTable::tick(): channel and StkFrames arguments are incompatible!";
-00093     handleError( StkError::FUNCTION_ARGUMENT );
-00094   }
-00095 #endif
-00096 
-00097   StkFloat *iSamples = &iFrames[iChannel];
-00098   StkFloat *oSamples = &oFrames[oChannel];
-00099   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00100   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00101     *oSamples = *oSamples * (*oSamples * *oSamples - 1.0);
-00102     if ( *oSamples > 1.0) *oSamples = 1.0;
-00103     if ( *oSamples < -1.0) *oSamples = -1.0;
-00104   }
-00105 
-00106   lastFrame_[0] = *(oSamples-oHop);
-00107   return iFrames;
-00108 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1JetTable.png deleted file mode 100644 index 1e6df77690b381ddbea3c836ef19be94170374fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^Al$*h3?!YyeI5WQi2$Dv*Z=?j1DXH-ADBNsVFHi^ z#s>}@s6O=n36RTC666;Qlm>&Vr$USv7#L@Gx;TbZFut98u`dh)Rt1ZvU&42daVxoOZ z&;N_DeS7ZxvQ0Vn@Jt1Wke*=w$YP?4kf#ce_-XS*OfGZs1BFj!DlQ4r84`rm_pUy% z`L>LxHOSf(zZh)S#z-#Pt`l`qiF@Un&ED;AA}{B8D{m6NtMgX(t)p^%yUq$hORoKG zUk)ixD6=rGE{Sm8Y$LYrS;^8dhLDZXENt{+=0X% z#-GZ4!eCbbiSy1%HbRT83RFr9WtO|dJKyhHX!2%9o6NWUPE49tr)SxyI(A20em`4Fs diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift-members.html deleted file mode 100644 index c369520aad..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift-members.html +++ /dev/null @@ -1,60 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::LentPitShift Member List

This is the complete list of members for stk::LentPitShift, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Effect [inline]
clear(void)stk::LentPitShift [virtual]
Effect(void)stk::Effect [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Effect [inline]
LentPitShift(StkFloat periodRatio=1.0, int tMax=RT_BUFFER_SIZE)stk::LentPitShift
printErrors(bool status)stk::Stk [inline, static]
process()stk::LentPitShift [inline, protected]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setEffectMix(StkFloat mix)stk::Effect [inline, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setShift(StkFloat shift)stk::LentPitShift
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::LentPitShift [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::LentPitShift [inline]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::LentPitShift [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift.html deleted file mode 100644 index 192d1152f0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift.html +++ /dev/null @@ -1,297 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::LentPitShift Class Reference

-

Pitch shifter effect class based on the Lent algorithm. -More...

- -

#include <LentPitShift.h>

-
-Inheritance diagram for stk::LentPitShift:
-
-
- - -stk::Effect -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - -

Public Member Functions

LentPitShift (StkFloat periodRatio=1.0, int tMax=RT_BUFFER_SIZE)
 Class constructor.
-void clear (void)
 Reset and clear all internal state.
-void setShift (StkFloat shift)
 Set the pitch shift factor (1.0 produces no shift).
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

Protected Member Functions

void process ()
 Apply the effect on the input samples and store it.
-

Detailed Description

-

Pitch shifter effect class based on the Lent algorithm.

-

This class implements a pitch shifter using pitch tracking and sample windowing and shifting.

-

by Francois Germain, 2009.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::LentPitShift::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00224 {
-00225 #if defined(_STK_DEBUG_)
-00226   if ( channel >= frames.channels() ) {
-00227     oStream_ << "LentPitShift::tick(): channel and StkFrames arguments are incompatible!";
-00228     handleError( StkError::FUNCTION_ARGUMENT );
-00229   }
-00230 #endif
-00231 
-00232   StkFloat *samples = &frames[channel];
-00233   unsigned int hop = frames.channels();
-00234   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00235     *samples = tick( *samples );
-00236   }
-00237 
-00238   return frames;
-00239 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::LentPitShift::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00242 {
-00243 #if defined(_STK_DEBUG_)
-00244   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00245     oStream_ << "LentPitShift::tick(): channel and StkFrames arguments are incompatible!";
-00246     handleError( StkError::FUNCTION_ARGUMENT );
-00247   }
-00248 #endif
-00249 
-00250   StkFloat *iSamples = &iFrames[iChannel];
-00251   StkFloat *oSamples = &oFrames[oChannel];
-00252   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00253   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00254     *oSamples = tick( *iSamples );
-00255   }
-00256 
-00257   return iFrames;
-00258 }
-

- -
-
- -
-
- - - - - - - - -
void stk::LentPitShift::process ( )  [inline, protected]
-
-
- -

Apply the effect on the input samples and store it.

-

The samples stored in the input frame vector are processed and the delayed result are stored in the output frame vector.

- -

00110 {
-00111   StkFloat x_t;    // input coefficient
-00112   StkFloat x_t_T;  // previous input coefficient at T samples
-00113   StkFloat coeff;  // new coefficient for the difference function
-00114 
-00115   int alternativePitch = tMax_;  // Global minimum storage
-00116   lastPeriod_ = tMax_+1;         // Storage of the lowest local minimum under the threshold
-00117 
-00118   // Loop variables
-00119   unsigned long delay_;
-00120   unsigned int n;
-00121 
-00122   // Initialization of the dt coefficients.  Since the
-00123   // frames are of tMax_ length, there is no overlapping
-00124   // between the successive windows where pitch tracking
-00125   // is performed.
-00126   for ( delay_=1; delay_<=tMax_; delay_++ )
-00127     dt[delay_] = 0.;
-00128 
-00129   // Calculation of the dt coefficients and update of the input delay line.
-00130   for ( n=0; n<inputFrames.size(); n++ ) {
-00131     x_t = inputLine_.tick( inputFrames[ n ] );
-00132     for ( delay_=1; delay_<= tMax_; delay_++ ) {
-00133       x_t_T = inputLine_.tapOut( delay_ );
-00134       coeff = x_t - x_t_T;
-00135       dt[delay_] += coeff * coeff;
-00136     }
-00137   }
-00138 
-00139   // Calculation of the pitch tracking function and test for the minima.
-00140   for ( delay_=1; delay_<=tMax_; delay_++ ) {
-00141     cumDt[delay_] = dt[delay_] + cumDt[delay_-1];
-00142     dpt[delay_] = dt[delay_] * delay_ / cumDt[delay_];
-00143 
-00144     // Look for a minimum
-00145     if ( dpt[delay_-1]-dpt[delay_-2] < 0 && dpt[delay_]-dpt[delay_-1] > 0 ) {
-00146       // Check if the minimum is under the threshold
-00147       if ( dpt[delay_-1] < threshold_ ){
-00148         lastPeriod_ = delay_-1;
-00149         // If a minimum is found, we can stop the loop
-00150         break;
-00151       }
-00152       else if ( dpt[alternativePitch] > dpt[delay_-1] )
-00153         // Otherwise we store it if it is the current global minimum
-00154         alternativePitch = delay_-1;
-00155     }
-00156   }
-00157 
-00158   // Test for the last period length.
-00159   if ( dpt[delay_]-dpt[delay_-1] < 0 ) {
-00160     if ( dpt[delay_] < threshold_ )
-00161       lastPeriod_ = delay_;
-00162     else if ( dpt[alternativePitch] > dpt[delay_] )
-00163       alternativePitch = delay_;
-00164   }
-00165 
-00166   if ( lastPeriod_ == tMax_+1 )
-00167     // No period has been under the threshold so we used the global minimum
-00168     lastPeriod_ = alternativePitch;
-00169 
-00170   // We put the new zero output coefficients in the output delay line and 
-00171   // we get the previous calculated coefficients
-00172   outputLine_.tick( zeroFrame, outputFrames );
-00173 
-00174   // Initialization of the Hamming window used in the algorithm
-00175   for ( int n=-(int)lastPeriod_; n<(int)lastPeriod_; n++ )
-00176     window[n+lastPeriod_] = (1 + cos(PI*n/lastPeriod_)) / 2    ;
-00177 
-00178   int M;  // Index of reading in the input delay line
-00179   int N;  // Index of writing in the output delay line
-00180   double sample;  // Temporary storage for the new coefficient
-00181 
-00182   // We loop for all the frames of length lastPeriod_ presents between inputPtr and tMax_
-00183   for ( ; inputPtr<(int)(tMax_-lastPeriod_); inputPtr+=lastPeriod_ ) {
-00184     // Test for the decision of compression/expansion
-00185     while ( outputPtr < inputPtr ) {
-00186       // Coefficients for the linear interpolation
-00187       env[1] = fmod( outputPtr + tMax_, 1.0 );
-00188       env[0] = 1.0 - env[1];
-00189       M = tMax_ - inputPtr + lastPeriod_ - 1; // New reading pointer
-00190       N = 2*tMax_ - (unsigned long)floor(outputPtr + tMax_) + lastPeriod_ - 1; // New writing pointer
-00191       for ( unsigned int j=0; j<2*lastPeriod_; j++,M--,N-- ) {
-00192         sample = inputLine_.tapOut(M) * window[j] / 2.;
-00193         // Linear interpolation
-00194         outputLine_.addTo(env[0] * sample, N);
-00195         outputLine_.addTo(env[1] * sample, N-1);
-00196       }
-00197       outputPtr = outputPtr + lastPeriod_ * periodRatio_; // new output pointer
-00198     }
-00199   }
-00200   // Shifting of the pointers waiting for the new frame of length tMax_.
-00201   outputPtr -= tMax_;
-00202   inputPtr  -= tMax_;
-00203 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1LentPitShift.png deleted file mode 100644 index f7c3cc65c41a5f34a994d35448187407714ea30d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Pz!3-qz1Ld9qDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J8gdb&7C2a6eH>-?@ni^ zo+qHr6?NfmE&m1OqYl;lc9~zMx}5gdyWw_&#>GV^zpH*apVjrwbf@%#h-)wh~iAIx$Q zPFQoGB7D{xRV#)g*XB$;VSl_~we1U`%x>$<7mhO){giLMuf)V*K-eh^lh!J1PhgT` zci?=jDpULE&5pHSCh?wkZOGjEcu|zguy;AD#O$q3*)%eO3!OBNBf_eBAe9 z-k}-A;wk>|z(tCah3LFt7X=X?3CEn+_`@-f=wz - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Mandolin Member List

This is the complete list of members for stk::Mandolin, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Mandolin
controlChange(int number, StkFloat value)stk::Mandolin [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
Mandolin(StkFloat lowestFrequency)stk::Mandolin
noteOff(StkFloat amplitude)stk::Mandolin [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Mandolin [virtual]
pluck(StkFloat amplitude)stk::Mandolin
pluck(StkFloat amplitude, StkFloat position)stk::Mandolin
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setBodySize(StkFloat size)stk::Mandolin
setDetune(StkFloat detune)stk::Mandolin
setFrequency(StkFloat frequency)stk::Mandolin [virtual]
setPluckPosition(StkFloat position)stk::Mandolin
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Mandolin [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Mandolin [inline, virtual]
~Mandolin(void)stk::Mandolin
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mandolin.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mandolin.html deleted file mode 100644 index 4e47031c5b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mandolin.html +++ /dev/null @@ -1,163 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Mandolin Class Reference

-

STK mandolin instrument model class. -More...

- -

#include <Mandolin.h>

-
-Inheritance diagram for stk::Mandolin:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Mandolin (StkFloat lowestFrequency)
 Class constructor, taking the lowest desired playing frequency.
~Mandolin (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setDetune (StkFloat detune)
 Detune the two strings by the given factor. A value of 1.0 produces unison strings.
-void setBodySize (StkFloat size)
 Set the body size (a value of 1.0 produces the "default" size).
-void setPluckPosition (StkFloat position)
 Set the pluck or "excitation" position along the string (0.0 - 1.0).
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void pluck (StkFloat amplitude)
 Pluck the strings with the given amplitude (0.0 - 1.0) using the current frequency.
-void pluck (StkFloat amplitude, StkFloat position)
 Pluck the strings with the given amplitude (0.0 - 1.0) and position (0.0 - 1.0).
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude (0.0 - 1.0).
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK mandolin instrument model class.

-

This class uses two "twang" models and "commuted - synthesis" techniques to model a mandolin instrument.

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others. Commuted Synthesis, in particular, is covered by patents, granted, pending, and/or applied-for. All are assigned to the Board of Trustees, Stanford University. For information, contact the Office of Technology Licensing, Stanford University.

-

Control Change Numbers:

-
    -
  • Body Size = 2
  • -
  • Pluck Position = 4
  • -
  • String Sustain = 11
  • -
  • String Detuning = 1
  • -
  • Microphone Position = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Mandolin::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00115 {
-00116   unsigned int nChannels = lastFrame_.channels();
-00117 #if defined(_STK_DEBUG_)
-00118   if ( channel > frames.channels() - nChannels ) {
-00119     oStream_ << "Mandolin::tick(): channel and StkFrames arguments are incompatible!";
-00120     handleError( StkError::FUNCTION_ARGUMENT );
-00121   }
-00122 #endif
-00123 
-00124   StkFloat *samples = &frames[channel];
-00125   unsigned int j, hop = frames.channels() - nChannels;
-00126   if ( nChannels == 1 ) {
-00127     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00128       *samples++ = tick();
-00129   }
-00130   else {
-00131     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00132       *samples++ = tick();
-00133       for ( j=1; j<nChannels; j++ )
-00134         *samples++ = lastFrame_[j];
-00135     }
-00136   }
-00137 
-00138   return frames;
-00139 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mandolin.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mandolin.png deleted file mode 100644 index 1bf1315e457c5419e17854559c0493d8da310dec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^p+MZh!3-o9c8AXdQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%Pr_jGX#sbGA2_hM0t0uO6I-kgX3?RWCC zcqr_8mAA!e;q7%S77ht-vZHLgqF#Jgy;2<_;CPi$;^F&{FE>0z6_^&V)JYuveRZ4C zgd4_PR}QI%$gOkVz9(2GI zD*btW@BSyuwfSMi-x6Z4%(0D-{~B1Xa3#Q**Az(9uH98JWy^*4-YcfBRA^e)cQ$R} zN9~XXj)o>j7N!*A#(IvB=)hePSuc+*P6;)cGEL~o&*~cARG*Se?N?_H&ndq4jAza2 zwLcfEGB#LQ)wTE4jD42O=^^)$Y*$NWsi&^YE>{4$;$QvMr}p3fP2&HuH}dSw=F&i* zQ);ic-))3Cg7@oIEgP?PV?av{aGtNT%WdUTbP3CzRb1LLjwO5 z^{h|fo#sD#@5-&M%D-l&Go9C+f8@YExs~4vtJDvlc^1C@jO2{ajR7yNz777mPQA4E zc35h%{n~%l*6c=Gs_hRbZ3UIC+x!PC{xWt~$( F69BR*@pAwG diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D-members.html deleted file mode 100644 index f19a803988..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D-members.html +++ /dev/null @@ -1,68 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Mesh2D Member List

This is the complete list of members for stk::Mesh2D, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Mesh2D
controlChange(int number, StkFloat value)stk::Mesh2D [virtual]
energy(void)stk::Mesh2D
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inputTick(StkFloat input)stk::Mesh2D
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
Mesh2D(unsigned short nX, unsigned short nY)stk::Mesh2D
noteOff(StkFloat amplitude)stk::Mesh2D [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Mesh2D [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setDecay(StkFloat decayFactor)stk::Mesh2D
setFrequency(StkFloat frequency)stk::Instrmnt [inline, virtual]
setInputPosition(StkFloat xFactor, StkFloat yFactor)stk::Mesh2D
setNX(unsigned short lenX)stk::Mesh2D
setNY(unsigned short lenY)stk::Mesh2D
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Mesh2D [virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Mesh2D [inline, virtual]
~Mesh2D(void)stk::Mesh2D
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D.html deleted file mode 100644 index 19c004c5b4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D.html +++ /dev/null @@ -1,162 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Mesh2D Class Reference

-

Two-dimensional rectilinear waveguide mesh class. -More...

- -

#include <Mesh2D.h>

-
-Inheritance diagram for stk::Mesh2D:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Mesh2D (unsigned short nX, unsigned short nY)
 Class constructor, taking the x and y dimensions in samples.
~Mesh2D (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setNX (unsigned short lenX)
 Set the x dimension size in samples.
-void setNY (unsigned short lenY)
 Set the y dimension size in samples.
-void setInputPosition (StkFloat xFactor, StkFloat yFactor)
 Set the x, y input position on a 0.0 - 1.0 scale.
-void setDecay (StkFloat decayFactor)
 Set the loss filters gains (0.0 - 1.0).
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Impulse the mesh with the given amplitude (frequency ignored).
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay) ... currently ignored.
-StkFloat energy (void)
 Calculate and return the signal energy stored in the mesh.
-StkFloat inputTick (StkFloat input)
 Input a sample to the mesh and compute one output sample.
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

Two-dimensional rectilinear waveguide mesh class.

-

This class implements a rectilinear, two-dimensional digital waveguide mesh structure. For details, see Van Duyne and Smith, "Physical Modeling with the 2-D Digital - Waveguide Mesh", Proceedings of the 1993 International Computer Music Conference.

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others.

-

Control Change Numbers:

-
    -
  • X Dimension = 2
  • -
  • Y Dimension = 4
  • -
  • Mesh Decay = 11
  • -
  • X-Y Input Position = 1
  • -
-

by Julius Smith, 2000 - 2002. Revised by Gary Scavone for STK, 2002.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Mesh2D::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00116 {
-00117   unsigned int nChannels = lastFrame_.channels();
-00118 #if defined(_STK_DEBUG_)
-00119   if ( channel > frames.channels() - nChannels ) {
-00120     oStream_ << "Mesh2D::tick(): channel and StkFrames arguments are incompatible!";
-00121     handleError( StkError::FUNCTION_ARGUMENT );
-00122   }
-00123 #endif
-00124 
-00125   StkFloat *samples = &frames[channel];
-00126   unsigned int j, hop = frames.channels() - nChannels;
-00127   if ( nChannels == 1 ) {
-00128     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00129       *samples++ = tick();
-00130   }
-00131   else {
-00132     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00133       *samples++ = tick();
-00134       for ( j=1; j<nChannels; j++ )
-00135         *samples++ = lastFrame_[j];
-00136     }
-00137   }
-00138 
-00139   return frames;
-00140 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mesh2D.png deleted file mode 100644 index fbd7d40b9ff7dda52822feea390b3774a2c3d4eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmeAS@N?(olHy`uVBq!ia0vp^0YKcr!3-qb7tOf~q$C1-LR|m<{|{vT|9@cq{DcWW z78oBmaG?6o|0h5$M@f)hFi;u{uAT}pVqjpL>gnPbQo;E4?%lk@3OuX{eaavI_3z>C z*~t0!&=Zr@B^m0fe`=2H@Xk9u@y;p5mAwz{D!2%|W7OI8pC{?d+vWz2h7A$=&)#`2 zc+31~l8f`2YW^!z3m49PxO&e0WqV>)O5bNoKGnVG&GI+Jx?esJ51Fap*u=sqr1FFDgGb)e30K@cun8!2Z2$aW zQ{?}(3JOdLGXxqL>LM1%H+~7+qA8eTT++C|lsR`vY1WI2`x&klR^GHb_CX}iYMJHJ z>kD|}*^^JH8@v)f@N>mE&HScW!TKj}ZfII_z;)`+0)-zcGyY2X)?c(|#qI!slWP^s z1)E+fc*#;ly2l5`@(T(t;9z6En*jE%Uy}x@>=llvgiqdYwO(~)U928 zY|eo_ETx^N^Es=IrCK-JPUkdPJHKXr*{$20J(=?k?krgR{_K~^Wp#i diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager-members.html deleted file mode 100644 index 237da82e1b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager-members.html +++ /dev/null @@ -1,57 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Messager Member List

This is the complete list of members for stk::Messager, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Messager()stk::Messager
popMessage(Skini::Message &message)stk::Messager
printErrors(bool status)stk::Stk [inline, static]
pushMessage(Skini::Message &message)stk::Messager
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setScoreFile(const char *filename)stk::Messager
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
startMidiInput(int port=0)stk::Messager
startSocketInput(int port=2001)stk::Messager
startStdInput()stk::Messager
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
~Messager()stk::Messager
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager.html deleted file mode 100644 index f0134c576b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager.html +++ /dev/null @@ -1,178 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Messager Class Reference

-

STK input control message parser. -More...

- -

#include <Messager.h>

-
-Inheritance diagram for stk::Messager:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - -

Public Member Functions

Messager ()
 Default constructor.
~Messager ()
 Class destructor.
void popMessage (Skini::Message &message)
 Pop the next message from the queue and write it to the referenced message structure.
-void pushMessage (Skini::Message &message)
 Push the referenced message onto the message stack.
bool setScoreFile (const char *filename)
 Specify a SKINI formatted scorefile from which messages should be read.
bool startStdInput ()
 Initiate the "realtime" retreival from stdin of control messages into the queue.
bool startSocketInput (int port=2001)
 Start a socket server, accept connections, and read "realtime" control messages into the message queue.
bool startMidiInput (int port=0)
 Start MIDI input, with optional device and port identifiers.
-

Detailed Description

-

STK input control message parser.

-

This class reads and parses control messages from a variety of sources, such as a scorefile, MIDI port, socket connection, or stdin. MIDI messages are retrieved using the RtMidi class. All other input sources (scorefile, socket, or stdin) are assumed to provide SKINI formatted messages. This class can be compiled with generic, non-realtime support, in which case only scorefile reading is possible.

-

The various realtime message acquisition mechanisms (from MIDI, socket, or stdin) take place asynchronously, filling the message queue. A call to popMessage() will pop the next available control message from the queue and return it via the referenced Message structure. When a non-realtime scorefile is set, it is not possible to start reading realtime input messages (from MIDI, socket, or stdin). Likewise, it is not possible to read from a scorefile when a realtime input mechanism is running.

-

When MIDI input is started, input is also automatically read from stdin. This allows for program termination via the terminal window. An __SK_Exit_ message is pushed onto the stack whenever an "exit" or "Exit" message is received from stdin or when all socket connections close and no stdin thread is running.

-

This class is primarily for use in STK example programs but it is generic enough to work in many other contexts.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::Messager::popMessage (Skini::Message message ) 
-
-
- -

Pop the next message from the queue and write it to the referenced message structure.

-

Invalid messages (or an empty queue) are indicated by type values of zero, in which case all other message structure values are undefined. The user MUST verify the returned message type is valid before reading other message values.

- -
-
- -
-
- - - - - - - - - -
bool stk::Messager::setScoreFile (const char *  filename ) 
-
-
- -

Specify a SKINI formatted scorefile from which messages should be read.

-

A return value of true indicates the call was successful. A return value of false can occur if the file is not found, cannot be opened, another file is currently still open, or if a realtime input mechanism is running. Scorefile input is considered to be a non-realtime control mechanism that cannot run concurrently with realtime input.

- -
-
- -
-
- - - - - - - - -
bool stk::Messager::startStdInput ( ) 
-
-
- -

Initiate the "realtime" retreival from stdin of control messages into the queue.

-

This function initiates a thread for asynchronous retrieval of SKINI formatted messages from stdin. A return value of true indicates the call was successful. A return value of false can occur if a scorefile is being read, a stdin thread is already running, or a thread error occurs during startup. Stdin input is considered to be a realtime control mechanism that cannot run concurrently with non-realtime scorefile input.

- -
-
- -
-
- - - - - - - - - -
bool stk::Messager::startSocketInput (int  port = 2001 ) 
-
-
- -

Start a socket server, accept connections, and read "realtime" control messages into the message queue.

-

This function creates a socket server on the optional port (default = 2001) and starts a thread for asynchronous retrieval of SKINI formatted messages from socket connections. A return value of true indicates the call was successful. A return value of false can occur if a scorefile is being read, a socket thread is already running, or an error occurs during the socket server or thread initialization stages. Socket input is considered to be a realtime control mechanism that cannot run concurrently with non-realtime scorefile input.

- -
-
- -
-
- - - - - - - - - -
bool stk::Messager::startMidiInput (int  port = 0 ) 
-
-
- -

Start MIDI input, with optional device and port identifiers.

-

This function creates an RtMidiIn instance for MIDI input. The RtMidiIn class invokes a local callback function to read incoming messages into the queue. If port = -1, RtMidiIn will open a virtual port to which other software applications can connect (OS X and Linux only). A return value of true indicates the call was successful. A return value of false can occur if a scorefile is being read, MIDI input is already running, or an error occurs during RtMidiIn construction. Midi input is considered to be a realtime control mechanism that cannot run concurrently with non-realtime scorefile input.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Messager.png deleted file mode 100644 index a68eb8640287e87d2caee8a8d04bcc0c800df0d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^kw6^4!3-o_Z)t`CDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J8OJzX3_Dj46+z022Zz|m?Md+B@qlh`Rr zTXN26-IPzsa{Q*r{>Jp~qMkg}W0U@9rc7aa%v^Bj`NL(mD8F*U7lYdA=-s5q- z+V3{`gVIdFX$n^MQrgo(w_f>i>6!@ zT;0COz9}YK#Ht5G^!=H-dEyflb<2~Uenpce?{RUPBG~lG`&0A@g~#8&p1NFq;_SoI zT9OKnG({$;Ew=o2M|SRkdhsIWMec8A&0kj3cHx<4PO~w=x-5O3Zkfdff6;Nto=NzU!rR3)(`%((PyT9y8rs_|p7^gPuY*r`|pD hh_*Yf_5Cub - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::MidiFileIn Member List

This is the complete list of members for stk::MidiFileIn, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
getDivision() const stk::MidiFileIn [inline]
getFileFormat() const stk::MidiFileIn [inline]
getNextEvent(std::vector< unsigned char > *event, unsigned int track=0)stk::MidiFileIn
getNextMidiEvent(std::vector< unsigned char > *midiEvent, unsigned int track=0)stk::MidiFileIn
getNumberOfTracks() const stk::MidiFileIn [inline]
getTickSeconds(unsigned int track=0)stk::MidiFileIn
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
MidiFileIn(std::string fileName)stk::MidiFileIn
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
rewindTrack(unsigned int track=0)stk::MidiFileIn
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
~MidiFileIn()stk::MidiFileIn
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1MidiFileIn.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1MidiFileIn.html deleted file mode 100644 index 0992f86645..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1MidiFileIn.html +++ /dev/null @@ -1,220 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::MidiFileIn Class Reference

-

A standard MIDI file reading/parsing class. -More...

- -

#include <MidiFileIn.h>

-
-Inheritance diagram for stk::MidiFileIn:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 MidiFileIn (std::string fileName)
 Default constructor.
~MidiFileIn ()
 Class destructor.
-int getFileFormat () const
 Return the MIDI file format (0, 1, or 2).
-unsigned int getNumberOfTracks () const
 Return the number of tracks in the MIDI file.
int getDivision () const
 Return the MIDI file division value from the file header.
void rewindTrack (unsigned int track=0)
 Move the specified track event reader to the beginning of its track.
double getTickSeconds (unsigned int track=0)
 Get the current value, in seconds, of delta-time ticks for the specified track.
unsigned long getNextEvent (std::vector< unsigned char > *event, unsigned int track=0)
 Fill the user-provided vector with the next event in the specified track and return the event delta-time in ticks.
unsigned long getNextMidiEvent (std::vector< unsigned char > *midiEvent, unsigned int track=0)
 Fill the user-provided vector with the next MIDI channel event in the specified track and return the event delta time in ticks.
-

Detailed Description

-

A standard MIDI file reading/parsing class.

-

This class can be used to read events from a standard MIDI file. Event bytes are copied to a C++ vector and must be subsequently interpreted by the user. The function getNextMidiEvent() skips meta and sysex events, returning only MIDI channel messages. Event delta-times are returned in the form of "ticks" and a function is provided to determine the current "seconds per tick". Tempo changes are internally tracked by the class and reflected in the values returned by the function getTickSeconds().

-

by Gary P. Scavone, 2003 - 2010.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::MidiFileIn::MidiFileIn (std::string  fileName ) 
-
-
- -

Default constructor.

-

If an error occurs while opening or parsing the file header, an StkError exception will be thrown.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - -
int stk::MidiFileIn::getDivision ( )  const [inline]
-
-
- -

Return the MIDI file division value from the file header.

-

Note that this value must be "parsed" in accordance with the MIDI File Specification. In particular, if the MSB is set, the file uses time-code representations for delta-time values.

- -

00054 { return division_; };
-

- -
-
- -
-
- - - - - - - - - -
void stk::MidiFileIn::rewindTrack (unsigned int  track = 0 ) 
-
-
- -

Move the specified track event reader to the beginning of its track.

-

The relevant track tempo value is reset as well. If an invalid track number is specified, an StkError exception will be thrown.

- -
-
- -
-
- - - - - - - - - -
double stk::MidiFileIn::getTickSeconds (unsigned int  track = 0 ) 
-
-
- -

Get the current value, in seconds, of delta-time ticks for the specified track.

-

This value can change as events are read (via "Set Tempo" Meta-Events). Therefore, one should call this function after every call to getNextEvent() or getNextMidiEvent(). If an invalid track number is specified, an StkError exception will be thrown.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
unsigned long stk::MidiFileIn::getNextEvent (std::vector< unsigned char > *  event,
unsigned int  track = 0 
)
-
-
- -

Fill the user-provided vector with the next event in the specified track and return the event delta-time in ticks.

-

MIDI File events consist of a delta time and a sequence of event bytes. This function returns the delta-time value and writes the subsequent event bytes directly to the event vector. The user must parse the event bytes in accordance with the MIDI File Specification. All returned MIDI channel events are complete ... a status byte is provided even when running status is used in the file. If the track has reached its end, no bytes will be written and the event vector size will be zero. If an invalid track number is specified or an error occurs while reading the file, an StkError exception will be thrown.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
unsigned long stk::MidiFileIn::getNextMidiEvent (std::vector< unsigned char > *  midiEvent,
unsigned int  track = 0 
)
-
-
- -

Fill the user-provided vector with the next MIDI channel event in the specified track and return the event delta time in ticks.

-

All returned MIDI events are complete ... a status byte is provided even when running status is used in the file. Meta and sysex events in the track are skipped though "Set Tempo" events are properly parsed for use by the getTickSeconds() function. If the track has reached its end, no bytes will be written and the event vector size will be zero. If an invalid track number is specified or an error occurs while reading the file, an StkError exception will be thrown.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1MidiFileIn.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1MidiFileIn.png deleted file mode 100644 index 5a7dd3e685314201257809a2914e9baf30b1aec8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^5kMTk!3-o6@{|S)GQ4-`A43q|gtEWPY7#J9NJY5_^Dj471y|}JfL4YNIP59sc$-fyk zS(i<9+T3gAU8TIHf~ooAzGY`uF4f(=rQtn;a{2{{hQNPPZC9=(Dx@>CY&o~lhV^@? z;_9=DllJamGjD91_c2uLu!hgV+!V=Y8a;=j`y> z_5J@o+QFOi8Kyr{sXn;W;$+?j=KEa@%zPFPz{F{`<!sC(39qQI@5jTP?hJ Uxln8!Fsv9nUHx3vIVCg!0B#(v1ONa4 diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal-members.html deleted file mode 100644 index 3c23508eb3..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal-members.html +++ /dev/null @@ -1,68 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Modal Member List

This is the complete list of members for stk::Modal, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Modal
controlChange(int number, StkFloat value)=0stk::Modal [pure virtual]
damp(StkFloat amplitude)stk::Modal
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
Modal(unsigned int modes=4)stk::Modal
noteOff(StkFloat amplitude)stk::Modal [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Modal [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setDirectGain(StkFloat aGain)stk::Modal [inline]
setFrequency(StkFloat frequency)stk::Modal [virtual]
setMasterGain(StkFloat aGain)stk::Modal [inline]
setModeGain(unsigned int modeIndex, StkFloat gain)stk::Modal
setRatioAndRadius(unsigned int modeIndex, StkFloat ratio, StkFloat radius)stk::Modal
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
strike(StkFloat amplitude)stk::Modal [virtual]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Modal [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Modal [inline, virtual]
~Modal(void)stk::Modal [virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal.html deleted file mode 100644 index c10ed92bf2..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal.html +++ /dev/null @@ -1,178 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Modal Class Reference

-

STK resonance model abstract base class. -More...

- -

#include <Modal.h>

-
-Inheritance diagram for stk::Modal:
-
-
- - -stk::Instrmnt -stk::Stk -stk::ModalBar - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 Modal (unsigned int modes=4)
 Class constructor, taking the desired number of modes to create.
-virtual ~Modal (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-virtual void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void setRatioAndRadius (unsigned int modeIndex, StkFloat ratio, StkFloat radius)
 Set the ratio and radius for a specified mode filter.
-void setMasterGain (StkFloat aGain)
 Set the master gain.
-void setDirectGain (StkFloat aGain)
 Set the direct gain.
-void setModeGain (unsigned int modeIndex, StkFloat gain)
 Set the gain for a specified mode filter.
-virtual void strike (StkFloat amplitude)
 Initiate a strike with the given amplitude (0.0 - 1.0).
-void damp (StkFloat amplitude)
 Damp modes with a given decay factor (0.0 - 1.0).
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-virtual void controlChange (int number, StkFloat value)=0
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK resonance model abstract base class.

-

This class contains an excitation wavetable, an envelope, an oscillator, and N resonances (non-sweeping BiQuad filters), where N is set during instantiation.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Modal::Modal (unsigned int  modes = 4 ) 
-
-
- -

Class constructor, taking the desired number of modes to create.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Modal::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00126 {
-00127   unsigned int nChannels = lastFrame_.channels();
-00128 #if defined(_STK_DEBUG_)
-00129   if ( channel > frames.channels() - nChannels ) {
-00130     oStream_ << "Modal::tick(): channel and StkFrames arguments are incompatible!";
-00131     handleError( StkError::FUNCTION_ARGUMENT );
-00132   }
-00133 #endif
-00134 
-00135   StkFloat *samples = &frames[channel];
-00136   unsigned int j, hop = frames.channels() - nChannels;
-00137   if ( nChannels == 1 ) {
-00138     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00139       *samples++ = tick();
-00140   }
-00141   else {
-00142     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00143       *samples++ = tick();
-00144       for ( j=1; j<nChannels; j++ )
-00145         *samples++ = lastFrame_[j];
-00146     }
-00147   }
-00148 
-00149   return frames;
-00150 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modal.png deleted file mode 100644 index 2b548c2e67db40dfd0d5305104dd4eb828bd818f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662 zcmeAS@N?(olHy`uVBq!ia0vp^5kP!^gBeI}uM5!tQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%Qxdb&7b~5t=`#i2gEu6w?J~Ip+p0=2@NM@2y%YTkGj-+BA zedRCzrFc3RILurW8vME6_$%mg%Wi5bU2^xuY`uk&Z?|a9`76GmGB0HQ^_g;V*3}v^c;{NIcY{&+HjEVY9`ddXB{{KD+xCpTD-`PTSVRc>cr%BGw(YFB3Bk z_pRFY?!c>sPakcyJ!9qknlGn0Hj8t6b^f7k_XOX)VqngFWNvm||3B-VaIXKBuZ;s| zo90E!uX^?1=*kGc{`Xvm;u+Kb{(0|mHZoQYhZ`Q>=-6er4HOpjvcRw~uIbn9U~urc z-?Y{6j^x9i2bpKsrufsjLd4+eqcj&IL zeYR$!H{a4357+T+D00@kRuJ=#`^O>? - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::ModalBar Member List

This is the complete list of members for stk::ModalBar, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Modal
controlChange(int number, StkFloat value)stk::ModalBar [virtual]
damp(StkFloat amplitude)stk::Modal
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
Modal(unsigned int modes=4)stk::Modal
ModalBar(void)stk::ModalBar
noteOff(StkFloat amplitude)stk::Modal [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Modal [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setDirectGain(StkFloat aGain)stk::Modal [inline]
setFrequency(StkFloat frequency)stk::Modal [virtual]
setMasterGain(StkFloat aGain)stk::Modal [inline]
setModeGain(unsigned int modeIndex, StkFloat gain)stk::Modal
setModulationDepth(StkFloat mDepth)stk::ModalBar
setPreset(int preset)stk::ModalBar
setRatioAndRadius(unsigned int modeIndex, StkFloat ratio, StkFloat radius)stk::Modal
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setStickHardness(StkFloat hardness)stk::ModalBar
setStrikePosition(StkFloat position)stk::ModalBar
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
strike(StkFloat amplitude)stk::Modal [virtual]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Modal [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Modal [inline, virtual]
~Modal(void)stk::Modal [virtual]
~ModalBar(void)stk::ModalBar
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ModalBar.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ModalBar.html deleted file mode 100644 index 5bfac77a96..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ModalBar.html +++ /dev/null @@ -1,95 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::ModalBar Class Reference

-

STK resonant bar instrument class. -More...

- -

#include <ModalBar.h>

-
-Inheritance diagram for stk::ModalBar:
-
-
- - -stk::Modal -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

ModalBar (void)
 Class constructor.
~ModalBar (void)
 Class destructor.
-void setStickHardness (StkFloat hardness)
 Set stick hardness (0.0 - 1.0).
-void setStrikePosition (StkFloat position)
 Set stick position (0.0 - 1.0).
-void setPreset (int preset)
 Select a bar preset (currently modulo 9).
-void setModulationDepth (StkFloat mDepth)
 Set the modulation (vibrato) depth.
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-

Detailed Description

-

STK resonant bar instrument class.

-

This class implements a number of different struck bar instruments. It inherits from the Modal class.

-

Control Change Numbers:

-
    -
  • Stick Hardness = 2
  • -
  • Stick Position = 4
  • -
  • Vibrato Gain = 1
  • -
  • Vibrato Frequency = 11
  • -
  • Direct Stick Mix = 8
  • -
  • Volume = 128
  • -
  • Modal Presets = 16
      -
    • Marimba = 0
    • -
    • Vibraphone = 1
    • -
    • Agogo = 2
    • -
    • Wood1 = 3
    • -
    • Reso = 4
    • -
    • Wood2 = 5
    • -
    • Beats = 6
    • -
    • Two Fixed = 7
    • -
    • Clump = 8
    • -
    -
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ModalBar.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ModalBar.png deleted file mode 100644 index 36d2c6b55bb965b16008da8593110811bc0dde8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 654 zcmeAS@N?(olHy`uVBq!ia0vp^5kP!^gBeI}uM5!tQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%R6db&7>qL&fRir=goIl7~~WUzLiE!PKs1j<+#t-#^J=5aN$qBMD*=a2?0g{f!!}=FMnXB z-w|yil704ig0RwsteTMS?Mo%NwoN!)pmQ|g^SbGW>fM$hVgbV!3 zwRru!UhUMC7t#los+^20(DW>l`g0)IafU(Sp%zYIwHk@+Af44qSRU#h6mazU{VuWP zTmQiZj)nwh7N#G0jej|pd~<5=NtDer|8=D_qu=b7$hL3HH*CyToy~szPHwmU{S6}P zA6~QNKOXev!H+4NJM^FK6A@30&c3^A?^Uxr7Wp|``?NXiMbG{EIlt4$^cNe*0b(&; zljgA5e+Us!^MSZS{@5&$(^{I2Ke`QE1TKHLo4&D@?b?xjdWS$Rsg{`ag5&hL1Fsy9 zI>MN<>hnuZy$NnkoD~0t^9KHh~o>k9m!^1W0;or>{Yq( zy7Qc`N#o%T_QzSH&0@>3SI$M)WRmivEs_Mb%}8&}nR`4{qH mMbzVWE+1nZf4Dzb@`L%Yy1CcWOc785WAJqKb6Mw<&;$S?_AcuH diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate-members.html deleted file mode 100644 index 5b24da98d8..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate-members.html +++ /dev/null @@ -1,60 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Modulate Member List

This is the complete list of members for stk::Modulate, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Generator [inline]
Generator(void)stk::Generator [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Generator [inline]
lastOut(void) const stk::Modulate [inline]
Modulate(void)stk::Modulate
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
reset(void)stk::Modulate [inline]
sampleRate(void)stk::Stk [inline, static]
setRandomGain(StkFloat gain)stk::Modulate
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setVibratoGain(StkFloat gain)stk::Modulate [inline]
setVibratoRate(StkFloat rate)stk::Modulate [inline]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(void)stk::Modulate [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Modulate [inline, virtual]
~Modulate(void)stk::Modulate
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate.html deleted file mode 100644 index 11d0631ae4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate.html +++ /dev/null @@ -1,149 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Modulate Class Reference

-

STK periodic/random modulator. -More...

- -

#include <Modulate.h>

-
-Inheritance diagram for stk::Modulate:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 Modulate (void)
 Class constructor.
~Modulate (void)
 Class destructor.
-void reset (void)
 Reset internal state.
-void setVibratoRate (StkFloat rate)
 Set the periodic (vibrato) rate or frequency in Hz.
-void setVibratoGain (StkFloat gain)
 Set the periodic (vibrato) gain.
-void setRandomGain (StkFloat gain)
 Set the random modulation gain.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (void)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK periodic/random modulator.

-

This class combines random and periodic modulations to give a nice, natural human modulation function.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Modulate::Modulate (void  ) 
-
-
- -

Class constructor.

-

An StkError can be thrown if the rawwave path is incorrect.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Modulate::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00090 {
-00091 #if defined(_STK_DEBUG_)
-00092   if ( channel >= frames.channels() ) {
-00093     oStream_ << "Modulate::tick(): channel and StkFrames arguments are incompatible!";
-00094     handleError( StkError::FUNCTION_ARGUMENT );
-00095   }
-00096 #endif
-00097 
-00098   StkFloat *samples = &frames[channel];
-00099   unsigned int hop = frames.channels();
-00100   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00101     *samples = Modulate::tick();
-00102 
-00103   return frames;
-00104 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Modulate.png deleted file mode 100644 index 000efdef97846a978161e03785a415495b584942..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532 zcmeAS@N?(olHy`uVBq!ia0vp^Q9#_m!3-n=8hAv2lth3}i0l9V|AEZ^{}0TcpD+Q) z0^?M~Qj{?~q6-OP4iYf{auGN;ZY(B=I_SF1BME3d%4(Av;HlB;v=dr!q z`JIx()2N@3w|LZ|uJH?7@}*?mNQzrvIpL()J|U0)v*%7o-+qzlqi@db6REY%F8__K z)-3g28#B9(f7cWP>pnfzGki<-e`)Cu(~a7aadDCB{>gC=EB_h-t^CJ+pmna<%o2y> z=i9PPCKxkZx-R|dwDNV+8$qv9_D@`88|(VRK6i&5^S2*npAyY)u2$ZA&rgZDC7>sH zD)Y>XVN29+Jgc&BH(@urG>7|m$(L)f*P8!YOc36}`e^nG{td>L{XC}IpIsolD8J*y z{AGuuc3nBO_2u^k-kh5szX&??#^IN@e+S4_-9YDkvCeGS+Ok5l>z_iei|G5$Yf4RC z&t3ZZfS&(l2d^@j=#9$**%rfl<^?Vf*cvflA6Ypa&b z-tE1(E%AQO+}t - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Moog Member List

This is the complete list of members for stk::Moog, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Sampler
controlChange(int number, StkFloat value)stk::Moog [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::Sampler
keyOn(void)stk::Sampler
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
Moog(void)stk::Moog
noteOff(StkFloat amplitude)stk::Sampler [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Moog [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
Sampler(void)stk::Sampler
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Moog [virtual]
setModulationDepth(StkFloat mDepth)stk::Moog [inline]
setModulationSpeed(StkFloat mSpeed)stk::Moog [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Moog [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Moog [inline, virtual]
~Moog(void)stk::Moog
~Sampler(void)stk::Sampler [virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Moog.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Moog.html deleted file mode 100644 index 96cf447c38..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Moog.html +++ /dev/null @@ -1,168 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Moog Class Reference

-

STK moog-like swept filter sampling synthesis class. -More...

- -

#include <Moog.h>

-
-Inheritance diagram for stk::Moog:
-
-
- - -stk::Sampler -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 Moog (void)
 Class constructor.
~Moog (void)
 Class destructor.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void setModulationSpeed (StkFloat mSpeed)
 Set the modulation (vibrato) speed in Hz.
-void setModulationDepth (StkFloat mDepth)
 Set the modulation (vibrato) depth.
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK moog-like swept filter sampling synthesis class.

-

This instrument uses one attack wave, one looped wave, and an ADSR envelope (inherited from the Sampler class) and adds two sweepable formant (FormSwep) filters.

-

Control Change Numbers:

-
    -
  • Filter Q = 2
  • -
  • Filter Sweep Rate = 4
  • -
  • Vibrato Frequency = 11
  • -
  • Vibrato Gain = 1
  • -
  • Gain = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Moog::Moog (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Moog::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Sampler.

- -

00097 {
-00098   unsigned int nChannels = lastFrame_.channels();
-00099 #if defined(_STK_DEBUG_)
-00100   if ( channel > frames.channels() - nChannels ) {
-00101     oStream_ << "Moog::tick(): channel and StkFrames arguments are incompatible!";
-00102     handleError( StkError::FUNCTION_ARGUMENT );
-00103   }
-00104 #endif
-00105 
-00106   StkFloat *samples = &frames[channel];
-00107   unsigned int j, hop = frames.channels() - nChannels;
-00108   if ( nChannels == 1 ) {
-00109     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00110       *samples++ = tick();
-00111   }
-00112   else {
-00113     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00114       *samples++ = tick();
-00115       for ( j=1; j<nChannels; j++ )
-00116         *samples++ = lastFrame_[j];
-00117     }
-00118   }
-00119 
-00120   return frames;
-00121 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Moog.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Moog.png deleted file mode 100644 index 94af547f7f6a94238e899f49f97eaedae9194fd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t$3P)8hgUqi3P_V7iebZBo-Xw3Z2ztjewFWZp{pWGpp}b zJv8514XcMAj{7&f=XvD!+N zxE@5{yM1`tZ2X5FAOgUV5P<+~SfGCbsZo?E&MOmie%oyVB~k|U%;)&%DbplnS8;~B zvvqsa<$LW}c-iy$4xY!~d;KeZcj7n}l9_xLCE~0U`h#c^&{FVnK-Z zYovr)ugpY^)P-eM9f9Zxo7rxn^K6mdLAMo7X}xK_6VI}`@U&v1=kxXTaMv?jU%S(@ z{p;#6^Tz$V$hTI*>Y?QWY_Q}o)c2eF)7FWK+&d%T>vAlb{A3$ne( z*EhWI!V53F@WNwy;I;&68sYuILvq9Qc;VD*Ug_x9o(H6)KO>8@9!kf)y7gn - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Mutex Member List

This is the complete list of members for stk::Mutex, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lock(void)stk::Mutex
Mutex()stk::Mutex
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
signal(void)stk::Mutex
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
unlock(void)stk::Mutex
wait(void)stk::Mutex
~Mutex()stk::Mutex
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mutex.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mutex.html deleted file mode 100644 index 07c9616bb6..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mutex.html +++ /dev/null @@ -1,110 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Mutex Class Reference

-

STK mutex class. -More...

- -

#include <Mutex.h>

-
-Inheritance diagram for stk::Mutex:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - -

Public Member Functions

Mutex ()
 Default constructor.
~Mutex ()
 Class destructor.
-void lock (void)
 Lock the mutex.
-void unlock (void)
 Unlock the mutex.
void wait (void)
 Wait indefinitely on the mutex condition variable.
void signal (void)
 Signal the condition variable.
-

Detailed Description

-

STK mutex class.

-

This class provides a uniform interface for cross-platform mutex use. On Linux and IRIX systems, the pthread library is used. Under Windows, critical sections are used.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::Mutex::wait (void  ) 
-
-
- -

Wait indefinitely on the mutex condition variable.

-

The mutex must be locked before calling this function, and then subsequently unlocked after this function returns.

- -
-
- -
-
- - - - - - - - - -
void stk::Mutex::signal (void  ) 
-
-
- -

Signal the condition variable.

-

The mutex must be locked before calling this function, and then subsequently unlocked after this function returns.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mutex.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Mutex.png deleted file mode 100644 index 64bad2bff31c300546ed04c6eb7fd6310f850c83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^&OjW%!3-oz!z@aGlth3}i0l9V|AEZ^{}0TcpD+Q) z0^&Ja<@uqt({z<6rqoaRsNR z;lD5I>~6@J`RJv(%%wNmVm@kw_qrMNNvse}<3HeOpP2BZPr_j>L(e?%?_c71cJhXX z@>ls?ie~Fx8}?_$?2pxjM`P}B9{%>IqUuWbzl!3URj2lrxE~FkeXd+j(qBUVk9p4G zx2pFOwurUwIgp{tSK0j0xY*OpXwt-<6qU#JJVzEQ#AFyv;}O~X{`JJqd3Ovl4%=6= z1#q2@YUyGWDi_WCvBTaW^Gi=GcXHfaiJE1nVh!6ad^0j;Ss=lXnclXx{^*X|?|&|| wk&Rzhu;X>bsl5^GBF+8NicbQqw^Npre~`|v>3ml+1{eekp00i_>zopr0CHWLr2qf` diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev-members.html deleted file mode 100644 index ba3f5bc80d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev-members.html +++ /dev/null @@ -1,60 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::NRev Member List

This is the complete list of members for stk::NRev, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Effect [inline]
clear(void)stk::NRev [virtual]
Effect(void)stk::Effect [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Effect [inline]
lastOut(unsigned int channel=0)stk::NRev [inline]
NRev(StkFloat T60=1.0)stk::NRev
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setEffectMix(StkFloat mix)stk::Effect [inline, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setT60(StkFloat T60)stk::NRev
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input, unsigned int channel=0)stk::NRev [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::NRev
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::NRev
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev.html deleted file mode 100644 index 2bda1bebbc..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev.html +++ /dev/null @@ -1,258 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::NRev Class Reference

-

CCRMA's NRev reverberator class. -More...

- -

#include <NRev.h>

-
-Inheritance diagram for stk::NRev:
-
-
- - -stk::Effect -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

NRev (StkFloat T60=1.0)
 Class constructor taking a T60 decay time argument (one second default value).
-void clear (void)
 Reset and clear all internal state.
-void setT60 (StkFloat T60)
 Set the reverberation T60 decay time.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed stereo frame.
StkFloat tick (StkFloat input, unsigned int channel=0)
 Input one sample to the effect and return the specified channel value of the computed stereo frame.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the effect and replace with stereo outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the effect and write stereo outputs to the oFrames object.
-

Detailed Description

-

CCRMA's NRev reverberator class.

-

This class takes a monophonic input signal and produces a stereo output signal. It is derived from the CLM NRev function, which is based on the use of networks of simple allpass and comb delay filters. This particular arrangement consists of 6 comb filters in parallel, followed by 3 allpass filters, a lowpass filter, and another allpass in series, followed by two allpass filters in parallel with corresponding right and left outputs.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
StkFloat stk::NRev::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed stereo frame.

-

Use the lastFrame() function to get both values of the last computed stereo frame. The channel argument must be 0 or 1 (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00093 {
-00094 #if defined(_STK_DEBUG_)
-00095   if ( channel > 1 ) {
-00096     oStream_ << "NRev::lastOut(): channel argument must be less than 2!";
-00097     handleError( StkError::FUNCTION_ARGUMENT );
-00098   }
-00099 #endif
-00100 
-00101   return lastFrame_[channel];
-00102 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFloat stk::NRev::tick (StkFloat  input,
unsigned int  channel = 0 
) [inline]
-
-
- -

Input one sample to the effect and return the specified channel value of the computed stereo frame.

-

Use the lastFrame() function to get both values of the computed stereo output frame. The channel argument must be 0 or 1 (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00105 {
-00106 #if defined(_STK_DEBUG_)
-00107   if ( channel > 1 ) {
-00108     oStream_ << "NRev::tick(): channel argument must be less than 2!";
-00109     handleError( StkError::FUNCTION_ARGUMENT );
-00110   }
-00111 #endif
-00112 
-00113   StkFloat temp, temp0, temp1, temp2, temp3;
-00114   int i;
-00115 
-00116   temp0 = 0.0;
-00117   for ( i=0; i<6; i++ ) {
-00118     temp = input + (combCoefficient_[i] * combDelays_[i].lastOut());
-00119     temp0 += combDelays_[i].tick(temp);
-00120   }
-00121 
-00122   for ( i=0; i<3; i++ )    {
-00123     temp = allpassDelays_[i].lastOut();
-00124     temp1 = allpassCoefficient_ * temp;
-00125     temp1 += temp0;
-00126     allpassDelays_[i].tick(temp1);
-00127     temp0 = -(allpassCoefficient_ * temp1) + temp;
-00128   }
-00129 
-00130          // One-pole lowpass filter.
-00131   lowpassState_ = 0.7 * lowpassState_ + 0.3 * temp0;
-00132   temp = allpassDelays_[3].lastOut();
-00133   temp1 = allpassCoefficient_ * temp;
-00134   temp1 += lowpassState_;
-00135   allpassDelays_[3].tick( temp1 );
-00136   temp1 = -( allpassCoefficient_ * temp1 ) + temp;
-00137     
-00138   temp = allpassDelays_[4].lastOut();
-00139   temp2 = allpassCoefficient_ * temp;
-00140   temp2 += temp1;
-00141   allpassDelays_[4].tick( temp2 );
-00142   lastFrame_[0] = effectMix_*( -( allpassCoefficient_ * temp2 ) + temp );
-00143     
-00144   temp = allpassDelays_[5].lastOut();
-00145   temp3 = allpassCoefficient_ * temp;
-00146   temp3 += temp1;
-00147   allpassDelays_[5].tick( temp3 );
-00148   lastFrame_[1] = effectMix_*( - ( allpassCoefficient_ * temp3 ) + temp );
-00149 
-00150   temp = ( 1.0 - effectMix_ ) * input;
-00151   lastFrame_[0] += temp;
-00152   lastFrame_[1] += temp;
-00153     
-00154   return lastFrame_[channel];
-00155 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames& stk::NRev::tick (StkFrames frames,
unsigned int  channel = 0 
)
-
-
- -

Take a channel of the StkFrames object as inputs to the effect and replace with stereo outputs.

-

The StkFrames argument reference is returned. The stereo outputs are written to the StkFrames argument starting at the specified channel. Therefore, the channel argument must be less than ( channels() - 1 ) of the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames& stk::NRev::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
)
-
-
- -

Take a channel of the iFrames object as inputs to the effect and write stereo outputs to the oFrames object.

-

The iFrames object reference is returned. The iChannel argument must be less than the number of channels in the iFrames argument (the first channel is specified by 0). The oChannel argument must be less than ( channels() - 1 ) of the oFrames argument. However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1NRev.png deleted file mode 100644 index eed2923807fed1f4972da40a0bc9d5e4a6f7cbe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmeAS@N?(olHy`uVBq!ia0vp^PC(qj!3-o*exBt3QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%O|dAc};R4~518=H4TfrlmG*u)+GC;nzo zGn+Bt+S)BskDbaAuCv<^IOTfL(#0{8c!b=UlnTx>G(F1~*m3)wKm!MZ`JVe{&Ppe( zVKt0)pKUhF-$nj)dta2!%p;vG$-ke)3D`|sFehJVV|aU*N}7Jc>CEmOM|aFI zo5=gndy87qdfScbUHx6UZ?0V__Rhs5bzho_8PNU@_I4dxm-X5NX5ae3`pDU@1!T3y zgbJ=DixqZz3so~6HQiGErTDib<82A)Hizglnrm+h>|x>pR0H#*(2jtaojSo zewW$1gmO>Juv?*dGxO~3lY-m46ce)&cW*tnPwZRCG?y(6*P{GWoIjWjW@H7(8A5T-G@yGywoTO3k - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Noise Member List

This is the complete list of members for stk::Noise, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Generator [inline]
Generator(void)stk::Generator [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Generator [inline]
lastOut(void) const stk::Noise [inline]
Noise(unsigned int seed=0)stk::Noise
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setSeed(unsigned int seed=0)stk::Noise
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(void)stk::Noise [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Noise [inline, virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Noise.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Noise.html deleted file mode 100644 index e207071503..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Noise.html +++ /dev/null @@ -1,158 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Noise Class Reference

-

STK noise generator. -More...

- -

#include <Noise.h>

-
-Inheritance diagram for stk::Noise:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - -

Public Member Functions

 Noise (unsigned int seed=0)
 Default constructor that can also take a specific seed value.
void setSeed (unsigned int seed=0)
 Seed the random number generator with a specific seed value.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (void)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK noise generator.

-

Generic random number generation using the C rand() function. The quality of the rand() function varies from one OS to another.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Noise::Noise (unsigned int  seed = 0 ) 
-
-
- -

Default constructor that can also take a specific seed value.

-

If the seed value is zero (the default value), the random number generator is seeded with the system time.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::Noise::setSeed (unsigned int  seed = 0 ) 
-
-
- -

Seed the random number generator with a specific seed value.

-

If no seed is provided or the seed value is zero, the random number generator is seeded with the current system time.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Noise::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00065 {
-00066 #if defined(_STK_DEBUG_)
-00067   if ( channel >= frames.channels() ) {
-00068     oStream_ << "Noise::tick(): channel and StkFrames arguments are incompatible!";
-00069     handleError( StkError::FUNCTION_ARGUMENT );
-00070   }
-00071 #endif
-00072 
-00073   StkFloat *samples = &frames[channel];
-00074   unsigned int hop = frames.channels();
-00075   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00076     *samples = (StkFloat) ( 2.0 * rand() / (RAND_MAX + 1.0) - 1.0 );
-00077 
-00078   lastFrame_[0] = *(samples-hop);
-00079   return frames;
-00080 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Noise.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Noise.png deleted file mode 100644 index d21401da13b84c80312bff606e8b87a2c7d74d0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmV+o0`mQdP)gnYV< z8c5y5wvE2c-w@LOj1H@`RC#UqJ?Nan>^M5-FguWb=m{ZBnlx$Bq)C(hCcTAK+9aq* z{~8SuxaRJInV diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole-members.html deleted file mode 100644 index 06ce4e0622..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::OnePole Member List

This is the complete list of members for stk::OnePole, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
getGain(void) const stk::Filter [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::OnePole [inline]
OnePole(StkFloat thePole=0.9)stk::OnePole
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setA1(StkFloat a1)stk::OnePole [inline]
setB0(StkFloat b0)stk::OnePole [inline]
setCoefficients(StkFloat b0, StkFloat a1, bool clearState=false)stk::OnePole
setGain(StkFloat gain)stk::Filter [inline]
setPole(StkFloat thePole)stk::OnePole
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::OnePole [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::OnePole [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::OnePole [inline]
~OnePole()stk::OnePole
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole.html deleted file mode 100644 index 55a46c45cc..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole.html +++ /dev/null @@ -1,218 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::OnePole Class Reference

-

STK one-pole filter class. -More...

- -

#include <OnePole.h>

-
-Inheritance diagram for stk::OnePole:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

OnePole (StkFloat thePole=0.9)
 The default constructor creates a low-pass filter (pole at z = 0.9).
~OnePole ()
 Class destructor.
-void setB0 (StkFloat b0)
 Set the b[0] coefficient value.
-void setA1 (StkFloat a1)
 Set the a[1] coefficient value.
-void setCoefficients (StkFloat b0, StkFloat a1, bool clearState=false)
 Set all filter coefficients.
void setPole (StkFloat thePole)
 Set the pole position in the z-plane.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK one-pole filter class.

-

This class implements a one-pole digital filter. A method is provided for setting the pole position along the real axis of the z-plane while maintaining a constant peak filter gain.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::OnePole::setPole (StkFloat  thePole ) 
-
-
- -

Set the pole position in the z-plane.

-

This method sets the pole position along the real-axis of the z-plane and normalizes the coefficients for a maximum gain of one. A positive pole value produces a low-pass filter, while a negative pole value produces a high-pass filter. This method does not affect the filter gain value. The argument magnitude should be less than one to maintain filter stability.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::OnePole::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00090 {
-00091 #if defined(_STK_DEBUG_)
-00092   if ( channel >= frames.channels() ) {
-00093     oStream_ << "OnePole::tick(): channel and StkFrames arguments are incompatible!";
-00094     handleError( StkError::FUNCTION_ARGUMENT );
-00095   }
-00096 #endif
-00097 
-00098   StkFloat *samples = &frames[channel];
-00099   unsigned int hop = frames.channels();
-00100   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00101     inputs_[0] = gain_ * *samples;
-00102     *samples = b_[0] * inputs_[0] - a_[1] * outputs_[1];
-00103     outputs_[1] = *samples;
-00104   }
-00105 
-00106   lastFrame_[0] = outputs_[1];
-00107   return frames;
-00108 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::OnePole::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00111 {
-00112 #if defined(_STK_DEBUG_)
-00113   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00114     oStream_ << "OnePole::tick(): channel and StkFrames arguments are incompatible!";
-00115     handleError( StkError::FUNCTION_ARGUMENT );
-00116   }
-00117 #endif
-00118 
-00119   StkFloat *iSamples = &iFrames[iChannel];
-00120   StkFloat *oSamples = &oFrames[oChannel];
-00121   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00122   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00123     inputs_[0] = gain_ * *iSamples;
-00124     *oSamples = b_[0] * inputs_[0] - a_[1] * outputs_[1];
-00125     outputs_[1] = *oSamples;
-00126   }
-00127 
-00128   lastFrame_[0] = outputs_[1];
-00129   return iFrames;
-00130 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OnePole.png deleted file mode 100644 index 16d591910f0d5529e63e76b739b625147446bb77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511 zcmeAS@N?(olHy`uVBq!ia0vp^Al$*h3?!YyeI5WQi2$Dv*Z=?j1DXH-ADBNsVFHi^ z#s>}@s6O=n36RTC666;Qlm>&Vr$USv7#RCJT^vIy7~jsl-FH}l$3@cp(SQ3&`7=lF z1kEbF?IN{0wD}-A|74T(4-5JWI*J8;nyR>5=wbA^^xt98vvmrLf(*WuyIx$Lec}@L z5s%g+uV1k#t8%?hN9s+T&prRzvS<1V(GP{I*Kus0KlAbXTa#PTi@R)dXPvj0$nW%P zf5~>`clv*2joiwY*#n7Z>=XD4=XfY}s!ReBd*nYstz=bkNoZ$Suru$ORgvZ9Ru&fq zldV6Qlmy<2UvN1;U!m9LMxy=9ea^>=Q&w%w`l_LRBKIM4(Th#*Hm3HA?sMwfmpk|A zp?RwhZMF=qUh}x-SZ58#rT)b?WL#?hvMCkRL@-w92~c%m4#0zjkvAnp_;i-_Sw!^ zCw`_ym}O1eT5&D)^W<}%WLB=2?vWbW%NohM`CG(8^;jwUHsz?fspoT4Z?Q%L-E*{g q$#TKIb=|s8+oDn19YhWuZ^k8~*@fi^0>?&t;ucLK6VDB<0Ki diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero-members.html deleted file mode 100644 index d54418f508..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::OneZero Member List

This is the complete list of members for stk::OneZero, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
getGain(void) const stk::Filter [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::OneZero [inline]
OneZero(StkFloat theZero=-1.0)stk::OneZero
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setB0(StkFloat b0)stk::OneZero [inline]
setB1(StkFloat b1)stk::OneZero [inline]
setCoefficients(StkFloat b0, StkFloat b1, bool clearState=false)stk::OneZero
setGain(StkFloat gain)stk::Filter [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setZero(StkFloat theZero)stk::OneZero
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::OneZero [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::OneZero [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::OneZero [inline]
~OneZero()stk::OneZero
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero.html deleted file mode 100644 index 93cb13b090..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero.html +++ /dev/null @@ -1,218 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::OneZero Class Reference

-

STK one-zero filter class. -More...

- -

#include <OneZero.h>

-
-Inheritance diagram for stk::OneZero:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

OneZero (StkFloat theZero=-1.0)
 The default constructor creates a low-pass filter (zero at z = -1.0).
~OneZero ()
 Class destructor.
-void setB0 (StkFloat b0)
 Set the b[0] coefficient value.
-void setB1 (StkFloat b1)
 Set the b[1] coefficient value.
-void setCoefficients (StkFloat b0, StkFloat b1, bool clearState=false)
 Set all filter coefficients.
void setZero (StkFloat theZero)
 Set the zero position in the z-plane.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK one-zero filter class.

-

This class implements a one-zero digital filter. A method is provided for setting the zero position along the real axis of the z-plane while maintaining a constant filter gain.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::OneZero::setZero (StkFloat  theZero ) 
-
-
- -

Set the zero position in the z-plane.

-

This method sets the zero position along the real-axis of the z-plane and normalizes the coefficients for a maximum gain of one. A positive zero value produces a high-pass filter, while a negative zero value produces a low-pass filter. This method does not affect the filter gain value.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::OneZero::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00089 {
-00090 #if defined(_STK_DEBUG_)
-00091   if ( channel >= frames.channels() ) {
-00092     oStream_ << "OneZero::tick(): channel and StkFrames arguments are incompatible!";
-00093     handleError( StkError::FUNCTION_ARGUMENT );
-00094   }
-00095 #endif
-00096 
-00097   StkFloat *samples = &frames[channel];
-00098   unsigned int hop = frames.channels();
-00099   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00100     inputs_[0] = gain_ * *samples;
-00101     *samples = b_[1] * inputs_[1] + b_[0] * inputs_[0];
-00102     inputs_[1] = inputs_[0];
-00103   }
-00104 
-00105   lastFrame_[0] = *(samples-hop);
-00106   return frames;
-00107 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::OneZero::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00110 {
-00111 #if defined(_STK_DEBUG_)
-00112   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00113     oStream_ << "OneZero::tick(): channel and StkFrames arguments are incompatible!";
-00114     handleError( StkError::FUNCTION_ARGUMENT );
-00115   }
-00116 #endif
-00117 
-00118   StkFloat *iSamples = &iFrames[iChannel];
-00119   StkFloat *oSamples = &oFrames[oChannel];
-00120   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00121   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00122     inputs_[0] = gain_ * *iSamples;
-00123     *oSamples = b_[1] * inputs_[1] + b_[0] * inputs_[0];
-00124     inputs_[1] = inputs_[0];
-00125   }
-00126 
-00127   lastFrame_[0] = *(oSamples-oHop);
-00128   return iFrames;
-00129 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1OneZero.png deleted file mode 100644 index de49840acbcb19bd8857595d8877f4904c199867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^p+MZh!3-o9c8AXdQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%Pr@pN$vsbG9N_by+v0#B=@>BGPBmEwOy zb%aarJ}Q!WzGSKV(@Gq{O8>QW} z!d7|Ws^3he%fH_Yy>2cfqmi)exo*tjZ(I_0cdcmHx5l_&VRU5UrPa6A-aGr9VP(Bz z>Cd9|(Kd$Pk6)3n-Jk~|?5?=aWeoCEof-lpzUHr--QMbJm%pTLHkaTFMFy4o0y|yj zx`nN5;Aqg>YvaH&X%*X~|c85Fq2G~>#Oh;9EY_SdQ!cY>jwqqr@b>2 - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::PRCRev Member List

This is the complete list of members for stk::PRCRev, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Effect [inline]
clear(void)stk::PRCRev [virtual]
Effect(void)stk::Effect [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Effect [inline]
lastOut(unsigned int channel=0)stk::PRCRev [inline]
PRCRev(StkFloat T60=1.0)stk::PRCRev
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setEffectMix(StkFloat mix)stk::Effect [inline, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setT60(StkFloat T60)stk::PRCRev
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input, unsigned int channel=0)stk::PRCRev [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::PRCRev
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::PRCRev
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PRCRev.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PRCRev.html deleted file mode 100644 index 92df092e17..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PRCRev.html +++ /dev/null @@ -1,240 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::PRCRev Class Reference

-

Perry's simple reverberator class. -More...

- -

#include <PRCRev.h>

-
-Inheritance diagram for stk::PRCRev:
-
-
- - -stk::Effect -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

PRCRev (StkFloat T60=1.0)
 Class constructor taking a T60 decay time argument (one second default value).
-void clear (void)
 Reset and clear all internal state.
-void setT60 (StkFloat T60)
 Set the reverberation T60 decay time.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed stereo frame.
StkFloat tick (StkFloat input, unsigned int channel=0)
 Input one sample to the effect and return the specified channel value of the computed stereo frame.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the effect and replace with stereo outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the effect and write stereo outputs to the oFrames object.
-

Detailed Description

-

Perry's simple reverberator class.

-

This class takes a monophonic input signal and produces a stereo output signal. It is based on some of the famous Stanford/CCRMA reverbs (NRev, KipRev), which were based on the Chowning/Moorer/Schroeder reverberators using networks of simple allpass and comb delay filters. This class implements two series allpass units and two parallel comb filters.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
StkFloat stk::PRCRev::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed stereo frame.

-

Use the lastFrame() function to get both values of the last computed stereo frame. The channel argument must be 0 or 1 (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00091 {
-00092 #if defined(_STK_DEBUG_)
-00093   if ( channel > 1 ) {
-00094     oStream_ << "PRCRev::lastOut(): channel argument must be less than 2!";
-00095     handleError( StkError::FUNCTION_ARGUMENT );
-00096   }
-00097 #endif
-00098 
-00099   return lastFrame_[channel];
-00100 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFloat stk::PRCRev::tick (StkFloat  input,
unsigned int  channel = 0 
) [inline]
-
-
- -

Input one sample to the effect and return the specified channel value of the computed stereo frame.

-

Use the lastFrame() function to get both values of the computed stereo output frame. The channel argument must be 0 or 1 (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00103 {
-00104 #if defined(_STK_DEBUG_)
-00105   if ( channel > 1 ) {
-00106     oStream_ << "PRCRev::tick(): channel argument must be less than 2!";
-00107     handleError( StkError::FUNCTION_ARGUMENT );
-00108   }
-00109 #endif
-00110 
-00111   StkFloat temp, temp0, temp1, temp2, temp3;
-00112 
-00113   temp = allpassDelays_[0].lastOut();
-00114   temp0 = allpassCoefficient_ * temp;
-00115   temp0 += input;
-00116   allpassDelays_[0].tick(temp0);
-00117   temp0 = -(allpassCoefficient_ * temp0) + temp;
-00118     
-00119   temp = allpassDelays_[1].lastOut();
-00120   temp1 = allpassCoefficient_ * temp;
-00121   temp1 += temp0;
-00122   allpassDelays_[1].tick(temp1);
-00123   temp1 = -(allpassCoefficient_ * temp1) + temp;
-00124     
-00125   temp2 = temp1 + ( combCoefficient_[0] * combDelays_[0].lastOut() );
-00126   temp3 = temp1 + ( combCoefficient_[1] * combDelays_[1].lastOut() );
-00127 
-00128   lastFrame_[0] = effectMix_ * (combDelays_[0].tick(temp2));
-00129   lastFrame_[1] = effectMix_ * (combDelays_[1].tick(temp3));
-00130   temp = (1.0 - effectMix_) * input;
-00131   lastFrame_[0] += temp;
-00132   lastFrame_[1] += temp;
-00133 
-00134   return lastFrame_[channel];
-00135 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames& stk::PRCRev::tick (StkFrames frames,
unsigned int  channel = 0 
)
-
-
- -

Take a channel of the StkFrames object as inputs to the effect and replace with stereo outputs.

-

The StkFrames argument reference is returned. The stereo outputs are written to the StkFrames argument starting at the specified channel. Therefore, the channel argument must be less than ( channels() - 1 ) of the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames& stk::PRCRev::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
)
-
-
- -

Take a channel of the iFrames object as inputs to the effect and write stereo outputs to the oFrames object.

-

The iFrames object reference is returned. The iChannel argument must be less than the number of channels in the iFrames argument (the first channel is specified by 0). The oChannel argument must be less than ( channels() - 1 ) of the oFrames argument. However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PRCRev.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PRCRev.png deleted file mode 100644 index c60db5395658201054e291390349879403ac9e93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmV6{NAM^Ig^mQ@4T1>f8o(s{ zZx9mO2LU1gW-*`m@GWrc1Ei8fLq>QH - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::PercFlut Member List

This is the complete list of members for stk::PercFlut, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::FM
controlChange(int number, StkFloat value)stk::FM [virtual]
FM(unsigned int operators=4)stk::FM
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::FM
keyOn(void)stk::FM
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
loadWaves(const char **filenames)stk::FM
noteOff(StkFloat amplitude)stk::FM [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::PercFlut [virtual]
PercFlut(void)stk::PercFlut
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setControl1(StkFloat cVal)stk::FM [inline]
setControl2(StkFloat cVal)stk::FM [inline]
setFrequency(StkFloat frequency)stk::PercFlut [virtual]
setGain(unsigned int waveIndex, StkFloat gain)stk::FM
setModulationDepth(StkFloat mDepth)stk::FM [inline]
setModulationSpeed(StkFloat mSpeed)stk::FM [inline]
setRatio(unsigned int waveIndex, StkFloat ratio)stk::FM
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::PercFlut [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::PercFlut [inline, virtual]
~FM(void)stk::FM [virtual]
~PercFlut(void)stk::PercFlut
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PercFlut.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PercFlut.html deleted file mode 100644 index 7c56ca229e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PercFlut.html +++ /dev/null @@ -1,162 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::PercFlut Class Reference

-

STK percussive flute FM synthesis instrument. -More...

- -

#include <PercFlut.h>

-
-Inheritance diagram for stk::PercFlut:
-
-
- - -stk::FM -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - -

Public Member Functions

 PercFlut (void)
 Class constructor.
~PercFlut (void)
 Class destructor.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK percussive flute FM synthesis instrument.

-

This class implements algorithm 4 of the TX81Z.

-
    Algorithm 4 is :   4->3--\
-                          2-- + -->1-->Out
-

Control Change Numbers:

-
    -
  • Total Modulator Index = 2
  • -
  • Modulator Crossfade = 4
  • -
  • LFO Speed = 11
  • -
  • LFO Depth = 1
  • -
  • ADSR 2 & 4 Target = 128
  • -
-

The basic Chowning/Stanford FM patent expired in 1995, but there exist follow-on patents, mostly assigned to Yamaha. If you are of the type who should worry about this (making money) worry away.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::PercFlut::PercFlut (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::PercFlut::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::FM.

- -

00099 {
-00100   unsigned int nChannels = lastFrame_.channels();
-00101 #if defined(_STK_DEBUG_)
-00102   if ( channel > frames.channels() - nChannels ) {
-00103     oStream_ << "PercFlut::tick(): channel and StkFrames arguments are incompatible!";
-00104     handleError( StkError::FUNCTION_ARGUMENT );
-00105   }
-00106 #endif
-00107 
-00108   StkFloat *samples = &frames[channel];
-00109   unsigned int j, hop = frames.channels() - nChannels;
-00110   if ( nChannels == 1 ) {
-00111     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00112       *samples++ = tick();
-00113   }
-00114   else {
-00115     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00116       *samples++ = tick();
-00117       for ( j=1; j<nChannels; j++ )
-00118         *samples++ = lastFrame_[j];
-00119     }
-00120   }
-00121 
-00122   return frames;
-00123 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PercFlut.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PercFlut.png deleted file mode 100644 index 59eb46ec823709fe129c5393bee81bcc919ffe6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmeAS@N?(olHy`uVBq!ia0vp^fk1qKgBeJAXV*UhQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%Q(c)B=-R4~51dvVfc1s>J}zc~;8%KzN2 zkR((n{^#=6b24StQ(5eJH@?lixyk*eN_oH^Zb7AjVut1qwSw+%+BiBG3esOY@|^Gd z>!+~H&tz%4xU22e`8U6R-1J6%wcNZ_+xO}HTE#whXW-Vq@?Wbq8b^J-H~pTZ{Iln? z9&sP}5`X<>;PP-gwQI9{mvwJVoBZ>Uc9ri$CD$$y&7hiqJ5U=Za0vd$^x;1)_Ig=`P|`7TP03Rquz#C?&|vMqJ$?p87S??Tr6ihA>s^SGi6sqw%JVmeT%LG zZC~OsQRyiAQQhh(zD4Xu?FAH>tXUa^H}9OCH2v*uurprNck(uIu#~MjDHbg%YP9^N z**)ReBCgR6Hy+PCcVm^X%jW*(b2F}IT}?ZFsCb9or`b)9oRfa7fBj~~Wo>!k?6Yc@ zk49}iS@ThJ?=qlWATQf#C{>H7TzC4YtkgAo`@O#(I&M6z`qG^dHZSk!etwq)BDJ%A ztOZ z`=@&GP4bH~3tnBeoAq2HZ0~o~OV#UtZ`?h@j`>ea@EOah(w#K^6zkS$%X@tSk L)z4*}Q$iB}?CB(R diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes-members.html deleted file mode 100644 index 8a4ce02b1a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes-members.html +++ /dev/null @@ -1,55 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Phonemes Member List

This is the complete list of members for stk::Phonemes, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
formantFrequency(unsigned int index, unsigned int partial)stk::Phonemes [static]
formantGain(unsigned int index, unsigned int partial)stk::Phonemes [static]
formantRadius(unsigned int index, unsigned int partial)stk::Phonemes [static]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
name(unsigned int index)stk::Phonemes [static]
noiseGain(unsigned int index)stk::Phonemes [static]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
voiceGain(unsigned int index)stk::Phonemes [static]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes.html deleted file mode 100644 index 17e14d1582..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes.html +++ /dev/null @@ -1,69 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Phonemes Class Reference

-

STK phonemes table. -More...

- -

#include <Phonemes.h>

-
-Inheritance diagram for stk::Phonemes:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - -

Static Public Member Functions

-static const char * name (unsigned int index)
 Returns the phoneme name for the given index (0-31).
-static StkFloat voiceGain (unsigned int index)
 Returns the voiced component gain for the given phoneme index (0-31).
-static StkFloat noiseGain (unsigned int index)
 Returns the unvoiced component gain for the given phoneme index (0-31).
-static StkFloat formantFrequency (unsigned int index, unsigned int partial)
 Returns the formant frequency for the given phoneme index (0-31) and partial (0-3).
-static StkFloat formantRadius (unsigned int index, unsigned int partial)
 Returns the formant radius for the given phoneme index (0-31) and partial (0-3).
-static StkFloat formantGain (unsigned int index, unsigned int partial)
 Returns the formant gain for the given phoneme index (0-31) and partial (0-3).
-

Detailed Description

-

STK phonemes table.

-

This class does nothing other than declare a set of 32 static phoneme formant parameters and provide access to those values.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Phonemes.png deleted file mode 100644 index d7923ef2246a1fcb5b1a3d5afcf539f6637c12e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^(Lfx)!3-oF^?zmnDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J9NJY5_^Dj471y~x+Bz{7eW&gaK}|9i}= zQ7>WwcJEw!#3l1VhxjAo+`8UvPp%%?H@A1nf?o_hpG3{7-cI3N!s1~0$6#9c+ig}V z6PdcMpK8x_+j8;KJ^rVqYHEk(7azMeQ=+<3OSm%f`I8TEMQWw$x8q(F{qaBaFZ}lU zi$SNe55G@({-)jfmgVn<^S)i5H+jQhKI=DNqWs2(Y?kf)Jiiy4d3-&c_xe`qwm|D7 zW|tZ@>8rU@-2Zhg3}?UgDPub0(TR79-p8)K9zopr0EsZOz5oCK diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift-members.html deleted file mode 100644 index 2ccf026f3c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift-members.html +++ /dev/null @@ -1,60 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::PitShift Member List

This is the complete list of members for stk::PitShift, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Effect [inline]
clear(void)stk::PitShift [virtual]
Effect(void)stk::Effect [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Effect [inline]
lastOut(void) const stk::PitShift [inline]
PitShift(void)stk::PitShift
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setEffectMix(StkFloat mix)stk::Effect [inline, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setShift(StkFloat shift)stk::PitShift
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::PitShift [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::PitShift
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::PitShift
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift.html deleted file mode 100644 index 86a395c5a6..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift.html +++ /dev/null @@ -1,144 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::PitShift Class Reference

-

STK simple pitch shifter effect class. -More...

- -

#include <PitShift.h>

-
-Inheritance diagram for stk::PitShift:
-
-
- - -stk::Effect -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

PitShift (void)
 Class constructor.
-void clear (void)
 Reset and clear all internal state.
-void setShift (StkFloat shift)
 Set the pitch shift factor (1.0 produces no shift).
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the effect and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the effect and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the effect and write outputs to the oFrames object.
-

Detailed Description

-

STK simple pitch shifter effect class.

-

This class implements a simple pitch shifter using delay lines.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames& stk::PitShift::tick (StkFrames frames,
unsigned int  channel = 0 
)
-
-
- -

Take a channel of the StkFrames object as inputs to the effect and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames& stk::PitShift::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
)
-
-
- -

Take a channel of the iFrames object as inputs to the effect and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PitShift.png deleted file mode 100644 index a0790b0156307e59c3e6a1c456a20e09fa72a988..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501 zcmeAS@N?(olHy`uVBq!ia0vp^9zfi|!3-peZ^s@4QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%Q;c)B=-R4~4s8{2nSfu}{%{n0=7d+aXa^+^s`ziZj1O&Am1ArqvBcp31m%F#!oK=GuoV1ziLjSp;1!Bs+u$cu#LJX|e;_SH{60Ah_Vp<44I8 ze##q02iz3tTPn*Cr0vXm$YTI?FzaM7${$>h4lOSf>EL|?yLuAraGx+(3xSMeo#wv}75wyLj6 n`Ydx+{lN5T3nT&pelyB0ko&X$cXBu|ju<>${an^LB{Ts54FA*M diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked-members.html deleted file mode 100644 index 086089ad95..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked-members.html +++ /dev/null @@ -1,63 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Plucked Member List

This is the complete list of members for stk::Plucked, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Plucked
controlChange(int number, StkFloat value)stk::Instrmnt [inline, virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Plucked [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Plucked [virtual]
pluck(StkFloat amplitude)stk::Plucked
Plucked(StkFloat lowestFrequency=10.0)stk::Plucked
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Plucked [virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Plucked [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Plucked [inline, virtual]
~Plucked(void)stk::Plucked
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked.html deleted file mode 100644 index 411571f039..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked.html +++ /dev/null @@ -1,140 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Plucked Class Reference

-

STK basic plucked string class. -More...

- -

#include <Plucked.h>

-
-Inheritance diagram for stk::Plucked:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Plucked (StkFloat lowestFrequency=10.0)
 Class constructor, taking the lowest desired playing frequency.
~Plucked (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void pluck (StkFloat amplitude)
 Pluck the string with the given amplitude using the current frequency.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK basic plucked string class.

-

This class implements a simple plucked string physical model based on the Karplus-Strong algorithm.

-

For a more advanced plucked string implementation, see the stk::Twang class.

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others. There exist at least two patents, assigned to Stanford, bearing the names of Karplus and/or Strong.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Plucked::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00088 {
-00089   unsigned int nChannels = lastFrame_.channels();
-00090 #if defined(_STK_DEBUG_)
-00091   if ( channel > frames.channels() - nChannels ) {
-00092     oStream_ << "Plucked::tick(): channel and StkFrames arguments are incompatible!";
-00093     handleError( StkError::FUNCTION_ARGUMENT );
-00094   }
-00095 #endif
-00096 
-00097   StkFloat *samples = &frames[channel];
-00098   unsigned int j, hop = frames.channels() - nChannels;
-00099   if ( nChannels == 1 ) {
-00100     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00101       *samples++ = tick();
-00102   }
-00103   else {
-00104     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00105       *samples++ = tick();
-00106       for ( j=1; j<nChannels; j++ )
-00107         *samples++ = lastFrame_[j];
-00108     }
-00109   }
-00110 
-00111   return frames;
-00112 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Plucked.png deleted file mode 100644 index 130115d7bb6294e39d044e16f983f8016387a7cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^en8y8!3-qpj_S4nDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#JA4JY5_^Dj471J-F$R0uO6Ip4H+1^_#ez zJQ%i?E-EXmoO@C2%ajRryLH`PX|${G6~#YNXe!`K5dJsea7XM@20@00L4S?f{R_6S zb!hYVZulVTx4wJ&&3m>hzlCnR{kr6$_|Awo%S6MwzaC$=IXr6N(Qj@M+DSA1Z+?<@ z_~||g|GuiSNA^3Sg7?O(yB4B9b9ZI>$%)GDeKM9s^9!IhR?4^t_&@(r_T|TS3kMbl z0YxUpny3Z!OfMt1XwJ*7ocqo{c2R0nK)%f*?&V#pPh2y&bouNfHs7Om&vk02bsyD> z*>b<=v)J0BagVmly4Ml9!R*bBrJMh7Dtr&t`+juBpIiU9!?RaSKYex9E7fB2_d1qE zPfh@x@J^U-^(DoquB0(LT~YPcXLl4O}bxrF~V|td9d~&w$|F(jpb1} t`*TZbPszE|3VoaV)SqGJ{i2nR8SM`#1|0jpLoWiV diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero-members.html deleted file mode 100644 index e1dc4d2122..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero-members.html +++ /dev/null @@ -1,68 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::PoleZero Member List

This is the complete list of members for stk::PoleZero, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
getGain(void) const stk::Filter [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::PoleZero [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
PoleZero()stk::PoleZero
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setA1(StkFloat a1)stk::PoleZero [inline]
setAllpass(StkFloat coefficient)stk::PoleZero
setB0(StkFloat b0)stk::PoleZero [inline]
setB1(StkFloat b1)stk::PoleZero [inline]
setBlockZero(StkFloat thePole=0.99)stk::PoleZero
setCoefficients(StkFloat b0, StkFloat b1, StkFloat a1, bool clearState=false)stk::PoleZero
setGain(StkFloat gain)stk::Filter [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::PoleZero [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::PoleZero [inline, virtual]
~PoleZero()stk::PoleZero
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero.html deleted file mode 100644 index d0455b95f9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero.html +++ /dev/null @@ -1,179 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::PoleZero Class Reference

-

STK one-pole, one-zero filter class. -More...

- -

#include <PoleZero.h>

-
-Inheritance diagram for stk::PoleZero:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

PoleZero ()
 Default constructor creates a first-order pass-through filter.
~PoleZero ()
 Class destructor.
-void setB0 (StkFloat b0)
 Set the b[0] coefficient value.
-void setB1 (StkFloat b1)
 Set the b[1] coefficient value.
-void setA1 (StkFloat a1)
 Set the a[1] coefficient value.
-void setCoefficients (StkFloat b0, StkFloat b1, StkFloat a1, bool clearState=false)
 Set all filter coefficients.
void setAllpass (StkFloat coefficient)
 Set the filter for allpass behavior using coefficient.
void setBlockZero (StkFloat thePole=0.99)
 Create a DC blocking filter with the given pole position in the z-plane.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
-

Detailed Description

-

STK one-pole, one-zero filter class.

-

This class implements a one-pole, one-zero digital filter. A method is provided for creating an allpass filter with a given coefficient. Another method is provided to create a DC blocking filter.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::PoleZero::setAllpass (StkFloat  coefficient ) 
-
-
- -

Set the filter for allpass behavior using coefficient.

-

This method uses coefficient to create an allpass filter, which has unity gain at all frequencies. Note that the coefficient magnitude must be less than one to maintain filter stability.

- -
-
- -
-
- - - - - - - - - -
void stk::PoleZero::setBlockZero (StkFloat  thePole = 0.99 ) 
-
-
- -

Create a DC blocking filter with the given pole position in the z-plane.

-

This method sets the given pole position, together with a zero at z=1, to create a DC blocking filter. The argument magnitude should be close to (but less than) one to minimize low-frequency attenuation.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::PoleZero::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00090 {
-00091 #if defined(_STK_DEBUG_)
-00092   if ( channel >= frames.channels() ) {
-00093     oStream_ << "PoleZero::tick(): channel and StkFrames arguments are incompatible!";
-00094     handleError( StkError::FUNCTION_ARGUMENT );
-00095   }
-00096 #endif
-00097 
-00098   StkFloat *samples = &frames[channel];
-00099   unsigned int hop = frames.channels();
-00100   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00101     inputs_[0] = gain_ * *samples;
-00102     *samples = b_[0] * inputs_[0] + b_[1] * inputs_[1] - a_[1] * outputs_[1];
-00103     inputs_[1] = inputs_[0];
-00104     outputs_[1] = *samples;
-00105   }
-00106 
-00107   lastFrame_[0] = outputs_[1];
-00108   return frames;
-00109 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1PoleZero.png deleted file mode 100644 index ad99c099808ae19421f194a97ac1edf5bd4d8b71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmeAS@N?(olHy`uVBq!ia0vp^VL;r$!3-q5_Pm(|q$C1-LR|m<{|{vT|9@cq{DcWW z78oBmaG?6o|0h5$M@f)hFi;u{uAT}pVqjpL=;`7ZQo;CkZuGg=3Op^6?n(c>?fCET z%((3E)IQ5P>@tgV{ec@^afhEKJrrVB{^qFTa-o+|;+^@%jD5j63QP-}pR`}x+qky6 zX+^T~!d1UnW`F+uW!2mIkP6kNne+JzJKnk)c$H~2{fnGi5VT3hNi#w>^8GXG#vAJo z{i?ZOuJg{PPD*+)_jPsLGkEM%{3KT< zxwDtmg`woTs#?Bu`jc3V%Lf9%+cLthU9iPA%L5$XaUn?cs^ zZ)@#lt(en&!~U>R$>Wd^*|)c!i&!66_T+kmLd%_k(yF7&=5AFN^?f`gJXv&hhQ>Ur zHQ%3QO6K+$E>mBsnx3nh^ILwsXA9@*caqUsp`U)YrswD%63TWt7OTHS)+?>^!r2{) wPMSAP$XhM^y7tHf=naiPj4LA5E%fDy*v>FVdQ&MBb@01&0;`2YX_ diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable-members.html deleted file mode 100644 index fabce23c4b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable-members.html +++ /dev/null @@ -1,57 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::ReedTable Member List

This is the complete list of members for stk::ReedTable, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
Function(void)stk::Function [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastOut(void) const stk::Function [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
ReedTable(void)stk::ReedTable [inline]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setOffset(StkFloat offset)stk::ReedTable [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setSlope(StkFloat slope)stk::ReedTable [inline]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::ReedTable [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::ReedTable [inline]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::ReedTable [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable.html deleted file mode 100644 index d55ee104dd..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable.html +++ /dev/null @@ -1,231 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::ReedTable Class Reference

-

STK reed table class. -More...

- -

#include <ReedTable.h>

-
-Inheritance diagram for stk::ReedTable:
-
-
- - -stk::Function -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - -

Public Member Functions

ReedTable (void)
 Default constructor.
void setOffset (StkFloat offset)
 Set the table offset value.
void setSlope (StkFloat slope)
 Set the table slope value.
-StkFloat tick (StkFloat input)
 Take one sample input and map to one sample of output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the table and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the table and write outputs to the oFrames object.
-

Detailed Description

-

STK reed table class.

-

This class implements a simple one breakpoint, non-linear reed function, as described by Smith (1986). This function is based on a memoryless non-linear spring model of the reed (the reed mass is ignored) which saturates when the reed collides with the mouthpiece facing.

-

See McIntyre, Schumacher, & Woodhouse (1983), Smith (1986), Hirschman, Cook, Scavone, and others for more information.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::ReedTable::setOffset (StkFloat  offset )  [inline]
-
-
- -

Set the table offset value.

-

The table offset roughly corresponds to the size of the initial reed tip opening (a greater offset represents a smaller opening).

- -

00039 { offset_ = offset; };
-

- -
-
- -
-
- - - - - - - - - -
void stk::ReedTable::setSlope (StkFloat  slope )  [inline]
-
-
- -

Set the table slope value.

-

The table slope roughly corresponds to the reed stiffness (a greater slope represents a harder reed).

- -

00047 { slope_ = slope; };
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::ReedTable::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline]
-
-
- -

Take a channel of the StkFrames object as inputs to the table and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00099 {
-00100 #if defined(_STK_DEBUG_)
-00101   if ( channel >= frames.channels() ) {
-00102     oStream_ << "ReedTable::tick(): channel and StkFrames arguments are incompatible!";
-00103     handleError( StkError::FUNCTION_ARGUMENT );
-00104   }
-00105 #endif
-00106 
-00107   StkFloat *samples = &frames[channel];
-00108   unsigned int hop = frames.channels();
-00109   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00110     *samples = offset_ + (slope_ * *samples);
-00111     if ( *samples > 1.0) *samples = 1.0;
-00112     if ( *samples < -1.0) *samples = -1.0;
-00113   }
-00114 
-00115   lastFrame_[0] = *(samples-hop);
-00116   return frames;
-00117 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::ReedTable::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the table and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00120 {
-00121 #if defined(_STK_DEBUG_)
-00122   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00123     oStream_ << "ReedTable::tick(): channel and StkFrames arguments are incompatible!";
-00124     handleError( StkError::FUNCTION_ARGUMENT );
-00125   }
-00126 #endif
-00127 
-00128   StkFloat *iSamples = &iFrames[iChannel];
-00129   StkFloat *oSamples = &oFrames[oChannel];
-00130   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00131   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00132     *oSamples = offset_ + (slope_ * *iSamples);
-00133     if ( *oSamples > 1.0) *oSamples = 1.0;
-00134     if ( *oSamples < -1.0) *oSamples = -1.0;
-00135   }
-00136 
-00137   lastFrame_[0] = *(oSamples-oHop);
-00138   return iFrames;
-00139 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1ReedTable.png deleted file mode 100644 index 0dc999c9994cfb681cf65dc8c4b39cff7f13e5e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmV+$0_6RPP)Ojr_oFxB@!_RfyA+pH=Rn*}Zx-eeR+%KZJk<65lBfZmoGLx#lOve7r?#zp- zN;0jcT2(*H-x=!EMUQOhSt}3cFQk_e$%pEtMDnrvuf8+XsZ*y;ojP^u3+h{BOIwa> z)Ys9GGi(f%XsD!u239b8AOm9q1LUgzY-LkDBTB)rsEc zx!mpE?V96KXL?mfeN5(K-6!*9-3B?UY76!#_gl%dnvTopT{73i- zr|&;FdUK%zDaj4>8$vyVoJFP@y$&MDLuXmNqG%)9)u(&ND!RCA&dwV3K5fi>rw_^a zl_$C$%<28C5}a&tNM<;fMq{gLlkvIxl6iff+N7#Bwp~?U=Pt>#n)<3<-Wgon8UD^t d{~vl}`vIT^Cv - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Resonate Member List

This is the complete list of members for stk::Resonate, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Resonate
controlChange(int number, StkFloat value)stk::Resonate [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::Resonate [inline]
keyOn(void)stk::Resonate [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Resonate [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Resonate [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
Resonate(void)stk::Resonate
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setEqualGainZeroes(void)stk::Resonate [inline]
setFrequency(StkFloat frequency)stk::Instrmnt [inline, virtual]
setNotch(StkFloat frequency, StkFloat radius)stk::Resonate
setRawwavePath(std::string path)stk::Stk [static]
setResonance(StkFloat frequency, StkFloat radius)stk::Resonate
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Resonate [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Resonate [inline, virtual]
~Resonate(void)stk::Resonate
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Resonate.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Resonate.html deleted file mode 100644 index 30560c638f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Resonate.html +++ /dev/null @@ -1,158 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Resonate Class Reference

-

STK noise driven formant filter. -More...

- -

#include <Resonate.h>

-
-Inheritance diagram for stk::Resonate:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Resonate (void)
 Class constructor.
~Resonate (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setResonance (StkFloat frequency, StkFloat radius)
 Set the filter for a resonance at the given frequency (Hz) and radius.
-void setNotch (StkFloat frequency, StkFloat radius)
 Set the filter for a notch at the given frequency (Hz) and radius.
-void setEqualGainZeroes (void)
 Set the filter zero coefficients for contant resonance gain.
-void keyOn (void)
 Initiate the envelope with a key-on event.
-void keyOff (void)
 Signal a key-off event to the envelope.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK noise driven formant filter.

-

This instrument contains a noise source, which excites a biquad resonance filter, with volume controlled by an ADSR.

-

Control Change Numbers:

-
    -
  • Resonance Frequency (0-Nyquist) = 2
  • -
  • Pole Radii = 4
  • -
  • Notch Frequency (0-Nyquist) = 11
  • -
  • Zero Radii = 1
  • -
  • Envelope Gain = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Resonate::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00099 {
-00100   unsigned int nChannels = lastFrame_.channels();
-00101 #if defined(_STK_DEBUG_)
-00102   if ( channel > frames.channels() - nChannels ) {
-00103     oStream_ << "Resonate::tick(): channel and StkFrames arguments are incompatible!";
-00104     handleError( StkError::FUNCTION_ARGUMENT );
-00105   }
-00106 #endif
-00107 
-00108   StkFloat *samples = &frames[channel];
-00109   unsigned int j, hop = frames.channels() - nChannels;
-00110   if ( nChannels == 1 ) {
-00111     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00112       *samples++ = tick();
-00113   }
-00114   else {
-00115     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00116       *samples++ = tick();
-00117       for ( j=1; j<nChannels; j++ )
-00118         *samples++ = lastFrame_[j];
-00119     }
-00120   }
-00121 
-00122   return frames;
-00123 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Resonate.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Resonate.png deleted file mode 100644 index 5d031e6ee7612aa57cc461fb168ecf01dea8a0d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^p+MZh!3-o9c8AXdQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%RB@N{tusbG9N_ij;(0#B=DVcYlmCvgHy zjW@J*UwozVcFnW*%>EL4eP_2X?cJB}xVN24NkhIt@Lx}tSo9Jm7Y32W{9_*qSH0o5 zVr$Ihd5AkC@A}NaAtXRKb zSIy4;XuH5_W7Bm0HQXSA|7&2n!U{*;tbk^zD+~5b+f^BH>&0)eE2mc|G?g9Sl3DwQ zOUr@9q0y0r>6c04e~ysN8meqtrxb?2FYBD7=@_^F==T*ouf0;-b#2#Jt~S%&;6L?? z=c=%TMXyx*g4}eR|5xh8zk58*|H?g|vp1PvJAnx2 z+AESA5I3-yu2{eH&|x8&d0H!`2TYt2|E#j7xXH?V&JrfgkDil-7Ji!cTHh=E^R516 zViH*{F+0mxpDwc9DZO%S)s?MVv(oQebkW^1@fM55%f!xEkKHCNm>;&j;ace$L;WoC z&FemI@rl)a)yGsCRu%P4GGk?tT#vE9`^E)!&94&e1!k)loN0gm85nO2p00i_>zopr E0L-`S3IG5A diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey-members.html deleted file mode 100644 index 1e2851ce28..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey-members.html +++ /dev/null @@ -1,73 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Rhodey Member List

This is the complete list of members for stk::Rhodey, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::FM
controlChange(int number, StkFloat value)stk::FM [virtual]
FM(unsigned int operators=4)stk::FM
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::FM
keyOn(void)stk::FM
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
loadWaves(const char **filenames)stk::FM
noteOff(StkFloat amplitude)stk::FM [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Rhodey [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
Rhodey(void)stk::Rhodey
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setControl1(StkFloat cVal)stk::FM [inline]
setControl2(StkFloat cVal)stk::FM [inline]
setFrequency(StkFloat frequency)stk::Rhodey [virtual]
setGain(unsigned int waveIndex, StkFloat gain)stk::FM
setModulationDepth(StkFloat mDepth)stk::FM [inline]
setModulationSpeed(StkFloat mSpeed)stk::FM [inline]
setRatio(unsigned int waveIndex, StkFloat ratio)stk::FM
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Rhodey [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Rhodey [inline, virtual]
~FM(void)stk::FM [virtual]
~Rhodey(void)stk::Rhodey
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey.html deleted file mode 100644 index 9a8329619b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey.html +++ /dev/null @@ -1,163 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Rhodey Class Reference

-

STK Fender Rhodes electric piano FM synthesis instrument. -More...

- -

#include <Rhodey.h>

-
-Inheritance diagram for stk::Rhodey:
-
-
- - -stk::FM -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - -

Public Member Functions

 Rhodey (void)
 Class constructor.
~Rhodey (void)
 Class destructor.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK Fender Rhodes electric piano FM synthesis instrument.

-

This class implements two simple FM Pairs summed together, also referred to as algorithm 5 of the TX81Z.

-
    Algorithm 5 is :  4->3--\
-                             + --> Out
-                      2->1--/
-

Control Change Numbers:

-
    -
  • Modulator Index One = 2
  • -
  • Crossfade of Outputs = 4
  • -
  • LFO Speed = 11
  • -
  • LFO Depth = 1
  • -
  • ADSR 2 & 4 Target = 128
  • -
-

The basic Chowning/Stanford FM patent expired in 1995, but there exist follow-on patents, mostly assigned to Yamaha. If you are of the type who should worry about this (making money) worry away.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Rhodey::Rhodey (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Rhodey::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::FM.

- -

00100 {
-00101   unsigned int nChannels = lastFrame_.channels();
-00102 #if defined(_STK_DEBUG_)
-00103   if ( channel > frames.channels() - nChannels ) {
-00104     oStream_ << "Rhodey::tick(): channel and StkFrames arguments are incompatible!";
-00105     handleError( StkError::FUNCTION_ARGUMENT );
-00106   }
-00107 #endif
-00108 
-00109   StkFloat *samples = &frames[channel];
-00110   unsigned int j, hop = frames.channels() - nChannels;
-00111   if ( nChannels == 1 ) {
-00112     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00113       *samples++ = tick();
-00114   }
-00115   else {
-00116     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00117       *samples++ = tick();
-00118       for ( j=1; j<nChannels; j++ )
-00119         *samples++ = lastFrame_[j];
-00120     }
-00121   }
-00122 
-00123   return frames;
-00124 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Rhodey.png deleted file mode 100644 index c6de1b86087e7c79a912237a269fb029dc197579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^K0thcgBeK9v@YERq$C1-LR|m<{|{vT|9@cq{DcWW z78oBmaG?6o|0h5$M@f)hFi;u{uAT}pVqjqW=jq}YQo;E4?!mGx3OuY2?o{x-|9|4Y zlA!Ps*%dG2#izfNVSRE~CHd~Dz#C64Y;s#8)~ppIe<06U2UDo(XJa`J*96SxWl1slX`oG zqOw?i^@->0Oh*jnCn}~-W@>rwHbc?+@cV4;$IX6gWPtwN`@MHx+E%BvLfLBrw2#Kc z_yRpD2()iTN5_H?}^eb$U%{Bcy$JCO&B@`anPpx~}deHBD^Mdb(=9Zt~ ziI&)1wr5w}v?}8_Q5L6f=KeGXT0Cw4;e%ydnVqa1iTAh-YEeVDy~*m? - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::RtWvIn Member List

This is the complete list of members for stk::RtWvIn, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::WvIn [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::WvIn [inline]
lastOut(unsigned int channel=0)stk::RtWvIn [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
RtWvIn(unsigned int nChannels=1, StkFloat sampleRate=Stk::sampleRate(), int device=0, int bufferFrames=RT_BUFFER_SIZE, int nBuffers=20)stk::RtWvIn
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
start(void)stk::RtWvIn
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stop(void)stk::RtWvIn
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::RtWvIn [virtual]
tick(StkFrames &frames)stk::RtWvIn [virtual]
~RtWvIn()stk::RtWvIn
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvIn.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvIn.html deleted file mode 100644 index ef6c766ec5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvIn.html +++ /dev/null @@ -1,239 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::RtWvIn Class Reference

-

STK realtime audio (blocking) input class. -More...

- -

#include <RtWvIn.h>

-
-Inheritance diagram for stk::RtWvIn:
-
-
- - -stk::WvIn -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

 RtWvIn (unsigned int nChannels=1, StkFloat sampleRate=Stk::sampleRate(), int device=0, int bufferFrames=RT_BUFFER_SIZE, int nBuffers=20)
 Default constructor.
~RtWvIn ()
 Class destructor.
void start (void)
 Start the audio input stream.
void stop (void)
 Stop the audio input stream.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed frame.
StkFloat tick (unsigned int channel=0)
 Compute a sample frame and return the specified channel value.
StkFramestick (StkFrames &frames)
 Fill the StkFrames argument with computed frames and return the same reference.
-

Detailed Description

-

STK realtime audio (blocking) input class.

-

This class provides a simplified interface to RtAudio for realtime audio input. It is a subclass of WvIn. This class makes use of RtAudio's callback functionality by creating a large ring-buffer from which data is read. This class should not be used when low-latency is desired.

-

RtWvIn supports multi-channel data in both interleaved and non-interleaved formats. It is important to distinguish the tick() method that computes a single frame (and returns only the specified sample of a multi-channel frame) from the overloaded one that takes an StkFrames object for multi-channel and/or multi-frame data.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
stk::RtWvIn::RtWvIn (unsigned int  nChannels = 1,
StkFloat  sampleRate = Stk::sampleRate(),
int  device = 0,
int  bufferFrames = RT_BUFFER_SIZE,
int  nBuffers = 20 
)
-
-
- -

Default constructor.

-

The default device argument value (zero) will select the default input device on your system. The first device enumerated by the underlying audio API is specified with a value of one. The default buffer size of RT_BUFFER_SIZE is defined in Stk.h. An StkError will be thrown if an error occurs duing instantiation.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::RtWvIn::start (void  ) 
-
-
- -

Start the audio input stream.

-

The stream is started automatically, if necessary, when a tick() or tickFrame() method is called.

- -
-
- -
-
- - - - - - - - - -
void stk::RtWvIn::stop (void  ) 
-
-
- -

Stop the audio input stream.

-

It may be necessary to use this method to avoid audio underflow problems if you wish to temporarily stop audio input.

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::RtWvIn::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed frame.

-

For multi-channel files, use the lastFrame() function to get all values from the last computed frame. If the device is stopped, the returned value is 0.0. The channel argument must be less than the number of channels in the audio stream (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00112 {
-00113 #if defined(_STK_DEBUG_)
-00114   if ( channel >= data_.channels() ) {
-00115     oStream_ << "RtWvIn::lastOut(): channel argument and audio stream are incompatible!";
-00116     handleError( StkError::FUNCTION_ARGUMENT );
-00117   }
-00118 #endif
-00119 
-00120   return lastFrame_[channel];
-00121 }
-

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::RtWvIn::tick (unsigned int  channel = 0 )  [virtual]
-
-
- -

Compute a sample frame and return the specified channel value.

-

For multi-channel files, use the lastFrame() function to get all values from the computed frame. If the device is "stopped", it is "started". The channel argument must be less than the number of channels in the audio stream (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::WvIn.

- -
-
- -
-
- - - - - - - - - -
StkFrames& stk::RtWvIn::tick (StkFrames frames )  [virtual]
-
-
- -

Fill the StkFrames argument with computed frames and return the same reference.

-

If the device is "stopped", it is "started". The number of channels in the StkFrames argument must equal the number of channels specified during instantiation. However, this is only checked if _STK_DEBUG_ is defined during compilation, in which case an incompatibility will trigger an StkError exception.

- -

Implements stk::WvIn.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvIn.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvIn.png deleted file mode 100644 index 97b9665199b9e9f7db29ad3d9f5afc4583cd38b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmeAS@N?(olHy`uVBq!ia0vp^9zfi|!3-peZ^s@4QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%P@db&7hO`xE>+HjWG>ZKlhvJcJb3f{t1FLotzEe_=zG%dM7!)3JLc5A zeM)QF(rN`)nR=dT%JQ9bX@R_rsZ$GwppwfA!wVCyoKn>6y*o zt9Li!$AzjT;-{))Z9h$o&7L%c_3A8@rH=L$SzwDgE+i|cY;Bt3D_kY%RQUI^#jk?h zzwTI+^d41QAhK8Xmq_ca*hl8=pO*{1di`yN8sEZo^*bZquEs z3fo^wep=~!bX#Ebi7Ode-#B`=MlZc4Cf#K#^H1!Nv-b;Kjg@~HB|gjZ?)da^DKH`! NJYD@<);T3K0RRYJ)A;}Z diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut-members.html deleted file mode 100644 index 16d2f8d6b0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut-members.html +++ /dev/null @@ -1,60 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::RtWvOut Member List

This is the complete list of members for stk::RtWvOut, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
clipStatus(void)stk::WvOut [inline]
getFrameCount(void) const stk::WvOut [inline]
getTime(void) const stk::WvOut [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
resetClipStatus(void)stk::WvOut [inline]
RtWvOut(unsigned int nChannels=1, StkFloat sampleRate=Stk::sampleRate(), int device=0, int bufferFrames=RT_BUFFER_SIZE, int nBuffers=20)stk::RtWvOut
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
start(void)stk::RtWvOut
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stop(void)stk::RtWvOut
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(const StkFloat sample)stk::RtWvOut [virtual]
tick(const StkFrames &frames)stk::RtWvOut [virtual]
WvOut(void)stk::WvOut [inline]
~RtWvOut()stk::RtWvOut
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut.html deleted file mode 100644 index 4f94e23afc..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut.html +++ /dev/null @@ -1,204 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::RtWvOut Class Reference

-

STK realtime audio (blocking) output class. -More...

- -

#include <RtWvOut.h>

-
-Inheritance diagram for stk::RtWvOut:
-
-
- - -stk::WvOut -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - -

Public Member Functions

 RtWvOut (unsigned int nChannels=1, StkFloat sampleRate=Stk::sampleRate(), int device=0, int bufferFrames=RT_BUFFER_SIZE, int nBuffers=20)
 Default constructor.
~RtWvOut ()
 Class destructor.
void start (void)
 Start the audio output stream.
void stop (void)
 Stop the audio output stream.
void tick (const StkFloat sample)
 Output a single sample to all channels in a sample frame.
void tick (const StkFrames &frames)
 Output the StkFrames data.
-

Detailed Description

-

STK realtime audio (blocking) output class.

-

This class provides a simplified interface to RtAudio for realtime audio output. It is a subclass of WvOut. This class makes use of RtAudio's callback functionality by creating a large ring-buffer into which data is written. This class should not be used when low-latency is desired.

-

RtWvOut supports multi-channel data in interleaved format. It is important to distinguish the tick() method that outputs a single sample to all channels in a sample frame from the overloaded one that takes a reference to an StkFrames object for multi-channel and/or multi-frame data.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
stk::RtWvOut::RtWvOut (unsigned int  nChannels = 1,
StkFloat  sampleRate = Stk::sampleRate(),
int  device = 0,
int  bufferFrames = RT_BUFFER_SIZE,
int  nBuffers = 20 
)
-
-
- -

Default constructor.

-

The default device argument value (zero) will select the default output device on your system. The first device enumerated by the underlying audio API is specified with a value of one. The default buffer size of RT_BUFFER_SIZE is defined in Stk.h. An StkError will be thrown if an error occurs duing instantiation.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::RtWvOut::start (void  ) 
-
-
- -

Start the audio output stream.

-

The stream is started automatically, if necessary, when a tick() method is called.

- -
-
- -
-
- - - - - - - - - -
void stk::RtWvOut::stop (void  ) 
-
-
- -

Stop the audio output stream.

-

It may be necessary to use this method to avoid undesireable audio buffer cycling if you wish to temporarily stop audio output.

- -
-
- -
-
- - - - - - - - - -
void stk::RtWvOut::tick (const StkFloat  sample )  [virtual]
-
-
- -

Output a single sample to all channels in a sample frame.

-

If the device is "stopped", it is "started".

- -

Implements stk::WvOut.

- -
-
- -
-
- - - - - - - - - -
void stk::RtWvOut::tick (const StkFrames frames )  [virtual]
-
-
- -

Output the StkFrames data.

-

If the device is "stopped", it is "started". The number of channels in the StkFrames argument must equal the number of channels specified during instantiation. However, this is only checked if _STK_DEBUG_ is defined during compilation, in which case an incompatibility will trigger an StkError exception.

- -

Implements stk::WvOut.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1RtWvOut.png deleted file mode 100644 index fb9ba662ee515198ee1f532c4175cb3a662917d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 513 zcmeAS@N?(olHy`uVBq!ia0vp^Al$*h3?!YyeI5WQi2$Dv*Z=?j1DXH-ADBNsVFHi^ z#s>}@s6O=n36RTC666;Qlm>&Vr$USv7#Jsbx;TbZFuuKeanfN04%PtunIHe#SIWDv zEQ+12db@<}wvV}spX;WV*_MagEj21se&(xmB%EXPIaIG;m=x~Oz|r9O+`gt_@|3L& zAuBU_TJEb_USD=9PEWf&_J_%I@%qLst^T))mlph;SNiAfw}OXzEicJQpZot&Wq(J{ z|BH9!O6y-eKM{5KY{jN)1)teId0Wj(ndGT96G+(g+d!8!g z6$h3BE4o7DtrDi^oHXNfu~7D#S9`qaiRHFW-*&l}W%+7V&fe1c`|cj6ReQhi%J#go z5dTvBuvWMBQ>V;#)%&uq`<^E&pFBR{qy4Vii{JVGm5I#WA?bfjD({{{o#*k%K1L^1 zK*aNj9P+Feuc}l^cP5>SW>&q!Uwcz6e}b}^;_s`foKp^&PxX1cq;CC9*6st1`%)BB zbtm23%=75U&+;Da8pr8I-!?VG|4vzKliBB|_0u$y+kUINdHUp#>dLHs_2YWHd9fAo r4cYy>TYt5i>{Q(Wc2fGphmYCY)+%#m@f@rN#utO9tDnm{r-UW|OswYN diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler-members.html deleted file mode 100644 index 0f42bdd938..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler-members.html +++ /dev/null @@ -1,64 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Sampler Member List

This is the complete list of members for stk::Sampler, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Sampler
controlChange(int number, StkFloat value)=0stk::Sampler [pure virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::Sampler
keyOn(void)stk::Sampler
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Sampler [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)=0stk::Instrmnt [pure virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
Sampler(void)stk::Sampler
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)=0stk::Sampler [pure virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)=0stk::Sampler [pure virtual]
tick(StkFrames &frames, unsigned int channel=0)=0stk::Sampler [pure virtual]
~Sampler(void)stk::Sampler [virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler.html deleted file mode 100644 index fe6dcacc8d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler.html +++ /dev/null @@ -1,117 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Sampler Class Reference

-

STK sampling synthesis abstract base class. -More...

- -

#include <Sampler.h>

-
-Inheritance diagram for stk::Sampler:
-
-
- - -stk::Instrmnt -stk::Stk -stk::Moog - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Sampler (void)
 Default constructor.
-virtual ~Sampler (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-virtual void setFrequency (StkFloat frequency)=0
 Set instrument parameters for a particular frequency.
-void keyOn (void)
 Initiate the envelopes with a key-on event and reset the attack waves.
-void keyOff (void)
 Signal a key-off event to the envelopes.
-virtual void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-virtual void controlChange (int number, StkFloat value)=0
 Perform the control change specified by number and value (0.0 - 128.0).
-virtual StkFloat tick (unsigned int channel=0)=0
 Compute and return one output sample.
virtual StkFramestick (StkFrames &frames, unsigned int channel=0)=0
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK sampling synthesis abstract base class.

-

This instrument provides an ADSR envelope, a one-pole filter, and structures for an arbitrary number of attack and looped files.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
virtual StkFrames& stk::Sampler::tick (StkFrames frames,
unsigned int  channel = 0 
) [pure virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

Implemented in stk::Moog.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sampler.png deleted file mode 100644 index 135b91ee72daaa83e6e3525980422a0d1dd7950c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)0{N;F-zDFMt0#%uGMj@XtCiEQ+~=s^Uo4`4F< zR}bgdwg-p+aBKCZA71fn7my}H6vKwMJYDG5+4)^1e3$QZp>BKE^Z8Edv7K-GJFD+j zJv8514XcMA=I58*`@G=yWu^@3lh5(dQ>IDEc5zO3 zPwUR8%lF!|>1EI7J9r-d-RqBO%y-YzglaWL!fG+|#`^O6fZiis@cT0Qeg2G>b1WF_ z}887EpFxbmE7L4{@ zUtfCk=+UD`k6xsAthKxtmkx<+^uFOi1itI8AA6;vmpu;<0pQ5iL+RM1+jQ?01|lWU z-|I8nrQ7tx)6gdF&iiG5npE!@w(a>GKlYmQYwB_S?VevPqC2t1+pX_@i}aT2u?6;@ f8Gc{A&Wmk7;SDj}yCQ>e00000NkvXXu0mjfM$bxj diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony-members.html deleted file mode 100644 index 0c837b65d1..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony-members.html +++ /dev/null @@ -1,65 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Saxofony Member List

This is the complete list of members for stk::Saxofony, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Saxofony
controlChange(int number, StkFloat value)stk::Saxofony [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Saxofony [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Saxofony [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
Saxofony(StkFloat lowestFrequency)stk::Saxofony
setBlowPosition(StkFloat aPosition)stk::Saxofony
setFrequency(StkFloat frequency)stk::Saxofony [virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
startBlowing(StkFloat amplitude, StkFloat rate)stk::Saxofony
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stopBlowing(StkFloat rate)stk::Saxofony
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Saxofony [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Saxofony [inline, virtual]
~Saxofony(void)stk::Saxofony
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony.html deleted file mode 100644 index eb5956c0c1..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony.html +++ /dev/null @@ -1,179 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Saxofony Class Reference

-

STK faux conical bore reed instrument class. -More...

- -

#include <Saxofony.h>

-
-Inheritance diagram for stk::Saxofony:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 Saxofony (StkFloat lowestFrequency)
 Class constructor, taking the lowest desired playing frequency.
~Saxofony (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void setBlowPosition (StkFloat aPosition)
 Set the "blowing" position between the air column terminations (0.0 - 1.0).
-void startBlowing (StkFloat amplitude, StkFloat rate)
 Apply breath pressure to instrument with given amplitude and rate of increase.
-void stopBlowing (StkFloat rate)
 Decrease breath pressure with given rate of decrease.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK faux conical bore reed instrument class.

-

This class implements a "hybrid" digital waveguide instrument that can generate a variety of wind-like sounds. It has also been referred to as the "blowed string" model. The waveguide section is essentially that of a string, with one rigid and one lossy termination. The non-linear function is a reed table. The string can be "blown" at any point between the terminations, though just as with strings, it is impossible to excite the system at either end. If the excitation is placed at the string mid-point, the sound is that of a clarinet. At points closer to the "bridge", the sound is closer to that of a saxophone. See Scavone (2002) for more details.

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others.

-

Control Change Numbers:

-
    -
  • Reed Stiffness = 2
  • -
  • Reed Aperture = 26
  • -
  • Noise Gain = 4
  • -
  • Blow Position = 11
  • -
  • Vibrato Frequency = 29
  • -
  • Vibrato Gain = 1
  • -
  • Breath Pressure = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Saxofony::Saxofony (StkFloat  lowestFrequency ) 
-
-
- -

Class constructor, taking the lowest desired playing frequency.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Saxofony::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00138 {
-00139   unsigned int nChannels = lastFrame_.channels();
-00140 #if defined(_STK_DEBUG_)
-00141   if ( channel > frames.channels() - nChannels ) {
-00142     oStream_ << "Saxofony::tick(): channel and StkFrames arguments are incompatible!";
-00143     handleError( StkError::FUNCTION_ARGUMENT );
-00144   }
-00145 #endif
-00146 
-00147   StkFloat *samples = &frames[channel];
-00148   unsigned int j, hop = frames.channels() - nChannels;
-00149   if ( nChannels == 1 ) {
-00150     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00151       *samples++ = tick();
-00152   }
-00153   else {
-00154     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00155       *samples++ = tick();
-00156       for ( j=1; j<nChannels; j++ )
-00157         *samples++ = lastFrame_[j];
-00158     }
-00159   }
-00160 
-00161   return frames;
-00162 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Saxofony.png deleted file mode 100644 index 9675ce8725a878d044f674834fecb9cfccab6ca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)j)Mm9ycGAVRnGNcRg3Z3B!=WdR}phTsq9@B%Aq0;z4IP!ir@dA^-4x&0*zS4kMo=S^&~HVK20?IuD0j!wc( z$v6qMU{W$0j(0+^|BChbLSJZkW$>rjoLyWWHfI;tiGA2f2sYSYgAF#=V84w$Tv|HF zp#^&{3nJLtbN8_6_&qE@1i;830s*?4z&`}4y(mLQY#GPX^sVYBJtfEsXz?k_ni?Z( zYTc)Y_K6!LVa`hTDr=L_vGy4+v*#4{N!Vg}m$hKMB;^{h(~}VIgkT@T`h1};w7fF- z(`?Qzt`D2Di|fQb>?8ymY_P!w8*H%O#=@l~c4rp z6rBWHva2M>$BxyrY{_IE-z~Ac!8%JyR&oMxwdEx6L+lYy>v`vYnGdUr@;+8c@nU=; b>(YJzoG2uaKam6n00000NkvXXu0mjfVAu3m diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers-members.html deleted file mode 100644 index 19bbdbcaad..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers-members.html +++ /dev/null @@ -1,60 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Shakers Member List

This is the complete list of members for stk::Shakers, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
controlChange(int number, StkFloat value)stk::Shakers [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Shakers [virtual]
noteOn(StkFloat instrument, StkFloat amplitude)stk::Shakers [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Instrmnt [inline, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
Shakers(int type=0)stk::Shakers
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Shakers [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Shakers [inline, virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers.html deleted file mode 100644 index 2c9d507428..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers.html +++ /dev/null @@ -1,193 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Shakers Class Reference

-

PhISEM and PhOLIES class. -More...

- -

#include <Shakers.h>

-
-Inheritance diagram for stk::Shakers:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - -

Public Member Functions

Shakers (int type=0)
 Class constructor taking instrument type argument.
void noteOn (StkFloat instrument, StkFloat amplitude)
 Start a note with the given instrument and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

PhISEM and PhOLIES class.

-

PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects. This class is a meta-model that can simulate a Maraca, Sekere, Cabasa, Bamboo Wind Chimes, Water Drops, Tambourine, Sleighbells, and a Guiro.

-

PhOLIES (Physically-Oriented Library of Imitated Environmental Sounds) is a similar approach for the synthesis of environmental sounds. This class implements simulations of breaking sticks, crunchy snow (or not), a wrench, sandpaper, and more.

-

Control Change Numbers:

-
    -
  • Shake Energy = 2
  • -
  • System Decay = 4
  • -
  • Number Of Objects = 11
  • -
  • Resonance Frequency = 1
  • -
  • Shake Energy = 128
  • -
  • Instrument Selection = 1071
  • -
  • Maraca = 0
  • -
  • Cabasa = 1
  • -
  • Sekere = 2
  • -
  • Tambourine = 3
  • -
  • Sleigh Bells = 4
  • -
  • Bamboo Chimes = 5
  • -
  • Sand Paper = 6
  • -
  • Coke Can = 7
  • -
  • Sticks = 8
  • -
  • Crunch = 9
  • -
  • Big Rocks = 10
  • -
  • Little Rocks = 11
  • -
  • Next Mug = 12
  • -
  • Penny + Mug = 13
  • -
  • Nickle + Mug = 14
  • -
  • Dime + Mug = 15
  • -
  • Quarter + Mug = 16
  • -
  • Franc + Mug = 17
  • -
  • Peso + Mug = 18
  • -
  • Guiro = 19
  • -
  • Wrench = 20
  • -
  • Water Drops = 21
  • -
  • Tuned Bamboo Chimes = 22
  • -
-

by Perry R. Cook with updates by Gary Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Shakers::noteOn (StkFloat  instrument,
StkFloat  amplitude 
) [virtual]
-
-
- -

Start a note with the given instrument and amplitude.

-

Use the instrument numbers above, converted to frequency values as if MIDI note numbers, to select a particular instrument.

- -

Implements stk::Instrmnt.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Shakers::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00304 {
-00305   unsigned int nChannels = lastFrame_.channels();
-00306 #if defined(_STK_DEBUG_)
-00307   if ( channel > frames.channels() - nChannels ) {
-00308     oStream_ << "Shakers::tick(): channel and StkFrames arguments are incompatible!";
-00309     handleError( StkError::FUNCTION_ARGUMENT );
-00310   }
-00311 #endif
-00312 
-00313   StkFloat *samples = &frames[channel];
-00314   unsigned int j, hop = frames.channels() - nChannels;
-00315   if ( nChannels == 1 ) {
-00316     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00317       *samples++ = tick();
-00318   }
-00319   else {
-00320     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00321       *samples++ = tick();
-00322       for ( j=1; j<nChannels; j++ )
-00323         *samples++ = lastFrame_[j];
-00324     }
-00325   }
-00326 
-00327   return frames;
-00328 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Shakers.png deleted file mode 100644 index 89f37fa5214103d56cf34d75abf23d458beac471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^{y^Np!3-oPvb*g7QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%Rpd%8G=R4~4sdv?=d1&&tRlw;rPpX?S8 zyz=cB-`tYI46%vx{ri@j+!nJlOz))0r+p`yISxr3IQCbQ|8V&kW*3H*sJ%1qmRDS3 zJ)-H7JmYuA^45*#&b^=dpuB2(>#c8^`mgSuc^t8Rf7xf-S?#ahUfxjYV*Y>slfQEM zKdUP*zq)%Qy<+P#rpc8+VsoXvef*~r%KbJ#LVt4k)2N*)mrtC2>c~=P*}gsPpZ+HX zK?X)nL5>H9nf`JvalaVEv|cr1U;HkIZju@7r$#Yn zyqobwk$<;s-lvA3FF!Xjb&HymycgS+(NgxhQkU~?vT3sZ*Bw0GlC~A|()=IQtUb?h zM!d@0=KhSn<6HV8*H+Da@}Sd6eeb&-^QymJ=ZRPG^&eQX{k?6P#Cf^AxW_WztA5%k fyl0GC_m}bV6UD7@v+@Lh(Z%5D>gTe~DWM4f+l} - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Simple Member List

This is the complete list of members for stk::Simple, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Simple
controlChange(int number, StkFloat value)stk::Simple [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::Simple
keyOn(void)stk::Simple
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Simple [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Simple [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Simple [virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
Simple(void)stk::Simple
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Simple [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Simple [inline, virtual]
~Simple(void)stk::Simple
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Simple.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Simple.html deleted file mode 100644 index d23cc2579e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Simple.html +++ /dev/null @@ -1,172 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Simple Class Reference

-

STK wavetable/noise instrument. -More...

- -

#include <Simple.h>

-
-Inheritance diagram for stk::Simple:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 Simple (void)
 Class constructor.
~Simple (void)
 Class destructor.
-void clear (void)
 Clear internal states.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void keyOn (void)
 Start envelope toward "on" target.
-void keyOff (void)
 Start envelope toward "off" target.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK wavetable/noise instrument.

-

This class combines a looped wave, a noise source, a biquad resonance filter, a one-pole filter, and an ADSR envelope to create some interesting sounds.

-

Control Change Numbers:

-
    -
  • Filter Pole Position = 2
  • -
  • Noise/Pitched Cross-Fade = 4
  • -
  • Envelope Rate = 11
  • -
  • Gain = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Simple::Simple (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Simple::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00101 {
-00102   unsigned int nChannels = lastFrame_.channels();
-00103 #if defined(_STK_DEBUG_)
-00104   if ( channel > frames.channels() - nChannels ) {
-00105     oStream_ << "Simple::tick(): channel and StkFrames arguments are incompatible!";
-00106     handleError( StkError::FUNCTION_ARGUMENT );
-00107   }
-00108 #endif
-00109 
-00110   StkFloat *samples = &frames[channel];
-00111   unsigned int j, hop = frames.channels() - nChannels;
-00112   if ( nChannels == 1 ) {
-00113     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00114       *samples++ = tick();
-00115   }
-00116   else {
-00117     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00118       *samples++ = tick();
-00119       for ( j=1; j<nChannels; j++ )
-00120         *samples++ = lastFrame_[j];
-00121     }
-00122   }
-00123 
-00124   return frames;
-00125 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Simple.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Simple.png deleted file mode 100644 index a6b15f1717b6f4e0f07d6ac3ad1bb8938d1fe3e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^K0w^T!3-p;4F2v0QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%Q8dAc};R4~4sd%CPufycG@QPiLR>g5g{ zEE}C>-?p;&$fwdjcY56NB9$(gS!yj$4=v~_U^58(&(RjVot-&^vBhDx{r%^*|~rAHLQ5H+w(^KK_mOp z>>#nf|760vlyrqbgy^?Nxk7Fdi7kRaLP-f~<6kMZ&?CtcKH9vnX93#BA{VmIAwTTK z(hF&>rIv|Tv(Ek9XdL1l8g(n!{y@*guaAEEf1aS#qqeP*zxcD1&bG=%*H6qjGH17* z<(={M;<5VP?+?!>95(y8NcdZ1#Ixn^_QroP4f9-*ddSOj$ - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::SineWave Member List

This is the complete list of members for stk::SineWave, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addPhase(StkFloat phase)stk::SineWave
addPhaseOffset(StkFloat phaseOffset)stk::SineWave
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
addTime(StkFloat time)stk::SineWave
channelsOut(void) const stk::Generator [inline]
Generator(void)stk::Generator [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Generator [inline]
lastOut(void) const stk::SineWave [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
reset(void)stk::SineWave
sampleRate(void)stk::Stk [inline, static]
setFrequency(StkFloat frequency)stk::SineWave
setRate(StkFloat rate)stk::SineWave [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
SineWave(void)stk::SineWave
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(void)stk::SineWave [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::SineWave [inline, virtual]
~SineWave(void)stk::SineWave
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SineWave.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SineWave.html deleted file mode 100644 index e5faa82a35..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SineWave.html +++ /dev/null @@ -1,237 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::SineWave Class Reference

-

STK sinusoid oscillator class. -More...

- -

#include <SineWave.h>

-
-Inheritance diagram for stk::SineWave:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

SineWave (void)
 Default constructor.
~SineWave (void)
 Class destructor.
-void reset (void)
 Clear output and reset time pointer to zero.
void setRate (StkFloat rate)
 Set the data read rate in samples. The rate can be negative.
void setFrequency (StkFloat frequency)
 Set the data interpolation rate based on a looping frequency.
-void addTime (StkFloat time)
 Increment the read pointer by time in samples, modulo the table size.
void addPhase (StkFloat phase)
 Increment the read pointer by a normalized phase value.
void addPhaseOffset (StkFloat phaseOffset)
 Add a normalized phase offset to the read pointer.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (void)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK sinusoid oscillator class.

-

This class computes and saves a static sine "table" that can be shared by multiple instances. It has an interface similar to the WaveLoop class but inherits from the Generator class. Output values are computed using linear interpolation.

-

The "table" length, set in SineWave.h, is 2048 samples by default.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::SineWave::setRate (StkFloat  rate )  [inline]
-
-
- -

Set the data read rate in samples. The rate can be negative.

-

If the rate value is negative, the data is read in reverse order.

- -

00041 { rate_ = rate; };
-

- -
-
- -
-
- - - - - - - - - -
void stk::SineWave::setFrequency (StkFloat  frequency ) 
-
-
- -

Set the data interpolation rate based on a looping frequency.

-

This function determines the interpolation rate based on the file size and the current Stk::sampleRate. The frequency value corresponds to file cycles per second. The frequency can be negative, in which case the loop is read in reverse order.

- -
-
- -
-
- - - - - - - - - -
void stk::SineWave::addPhase (StkFloat  phase ) 
-
-
- -

Increment the read pointer by a normalized phase value.

-

This function increments the read pointer by a normalized phase value, such that phase = 1.0 corresponds to a 360 degree phase shift. Positive or negative values are possible.

- -
-
- -
-
- - - - - - - - - -
void stk::SineWave::addPhaseOffset (StkFloat  phaseOffset ) 
-
-
- -

Add a normalized phase offset to the read pointer.

-

A phaseOffset = 1.0 corresponds to a 360 degree phase offset. Positive or negative values are possible.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::SineWave::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00121 {
-00122 #if defined(_STK_DEBUG_)
-00123   if ( channel >= frames.channels() ) {
-00124     oStream_ << "SineWave::tick(): channel and StkFrames arguments are incompatible!";
-00125     handleError( StkError::FUNCTION_ARGUMENT );
-00126   }
-00127 #endif
-00128 
-00129   StkFloat *samples = &frames[channel];
-00130   StkFloat tmp = 0.0;
-00131 
-00132   unsigned int hop = frames.channels();
-00133   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00134 
-00135     // Check limits of time address ... if necessary, recalculate modulo
-00136     // TABLE_SIZE.
-00137     while ( time_ < 0.0 )
-00138       time_ += TABLE_SIZE;
-00139     while ( time_ >= TABLE_SIZE )
-00140       time_ -= TABLE_SIZE;
-00141 
-00142     iIndex_ = (unsigned int) time_;
-00143     alpha_ = time_ - iIndex_;
-00144     tmp = table_[ iIndex_ ];
-00145     tmp += ( alpha_ * ( table_[ iIndex_ + 1 ] - tmp ) );
-00146     *samples = tmp;
-00147 
-00148     // Increment time, which can be negative.
-00149     time_ += rate_;
-00150   }
-00151 
-00152   lastFrame_[0] = tmp;
-00153   return frames;
-00154 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SineWave.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SineWave.png deleted file mode 100644 index 68f4673cab463f4ce9e44f5b28381f51cf6e2e86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmeAS@N?(olHy`uVBq!ia0vp^Q9#_m!3-n=8hAv2lth3}i0l9V|AEZ^{}0TcpD+Q) z0^*DfrlkP?EHuS^Y1V_ zZD={7+Nb8Zd&^4}NjZhU`IiN+U7FZD>qY;fiN-7V69nrRd*yaJF^-&&cvTUBm{NTXc zZ4xC;kI!wfl{z8G@UqtFu1%3`v+Pp7JYh|%OQ9~+kM8bc%c*?7^_{^E*YsWf>Ju5A zG!BS{7+rKO!|#Moah!#3`fj-*+nfEupSW)cUFy0aw!!+bdCCd<-UZT& z$~#`z`?hc0a`n``59b$nb8de8BIwW?hhN_L9UxbA1D*FpJF{hL%L?JHI_X}MuZ&kd z*sQIexAPSBoQd0ARn_%83MZ$(;f z+CNpazdJU^{#L?YezmHOFVBM|kGB*^R)&XoSg~I%o%(uZkGV - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::SingWave Member List

This is the complete list of members for stk::SingWave, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Generator [inline]
Generator(void)stk::Generator [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Generator [inline]
lastOut(void) const stk::SingWave [inline]
normalize(void)stk::SingWave [inline]
normalize(StkFloat peak)stk::SingWave [inline]
noteOff(void)stk::SingWave [inline]
noteOn(void)stk::SingWave [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
reset(void)stk::SingWave [inline]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::SingWave
setGainRate(StkFloat rate)stk::SingWave [inline]
setGainTarget(StkFloat target)stk::SingWave [inline]
setRandomGain(StkFloat gain)stk::SingWave [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setSweepRate(StkFloat rate)stk::SingWave [inline]
setVibratoGain(StkFloat gain)stk::SingWave [inline]
setVibratoRate(StkFloat rate)stk::SingWave [inline]
showWarnings(bool status)stk::Stk [inline, static]
SingWave(std::string fileName, bool raw=false)stk::SingWave
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(void)stk::SingWave [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::SingWave [inline, virtual]
~SingWave(void)stk::SingWave
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SingWave.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SingWave.html deleted file mode 100644 index e1eee886a4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SingWave.html +++ /dev/null @@ -1,182 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::SingWave Class Reference

-

STK "singing" looped soundfile class. -More...

- -

#include <SingWave.h>

-
-Inheritance diagram for stk::SingWave:
-
-
- - -stk::Generator -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 SingWave (std::string fileName, bool raw=false)
 Class constructor taking filename argument.
~SingWave (void)
 Class destructor.
-void reset (void)
 Reset file to beginning.
-void normalize (void)
 Normalize the file to a maximum of +-1.0.
-void normalize (StkFloat peak)
 Normalize the file to a maximum of +- peak.
-void setFrequency (StkFloat frequency)
 Set looping parameters for a particular frequency.
-void setVibratoRate (StkFloat rate)
 Set the vibrato frequency in Hz.
-void setVibratoGain (StkFloat gain)
 Set the vibrato gain.
-void setRandomGain (StkFloat gain)
 Set the random-ness amount.
-void setSweepRate (StkFloat rate)
 Set the sweep rate.
-void setGainRate (StkFloat rate)
 Set the gain rate.
-void setGainTarget (StkFloat target)
 Set the gain target value.
-void noteOn (void)
 Start a note.
-void noteOff (void)
 Stop a note.
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (void)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK "singing" looped soundfile class.

-

This class loops a specified soundfile and modulates it both periodically and randomly to produce a pitched musical sound, like a simple voice or violin. In general, it is not be used alone because of "munchkinification" effects from pitch shifting. Within STK, it is used as an excitation source for other instruments.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
stk::SingWave::SingWave (std::string  fileName,
bool  raw = false 
)
-
-
- -

Class constructor taking filename argument.

-

An StkError will be thrown if the file is not found, its format is unknown, or a read error occurs. If the soundfile has no header, the second argument should be true and the file data will be assumed to consist of 16-bit signed integers in big-endian byte order at a sample rate of 22050 Hz.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::SingWave::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Generator.

- -

00118 {
-00119 #if defined(_STK_DEBUG_)
-00120   if ( channel >= frames.channels() ) {
-00121     oStream_ << "SingWave::tick(): channel and StkFrames arguments are incompatible!";
-00122     handleError( StkError::FUNCTION_ARGUMENT );
-00123   }
-00124 #endif
-00125 
-00126   StkFloat *samples = &frames[channel];
-00127   unsigned int hop = frames.channels();
-00128   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00129     *samples = SingWave::tick();
-00130 
-00131   return frames;
-00132 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SingWave.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1SingWave.png deleted file mode 100644 index bc7d17ead0ac3938175cfe93c5156f486148b9ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^Q9#_m!3-n=8hAv2lth3}i0l9V|AEZ^{}0TcpD+Q) z0^p3p{KkIkmreT*tZikf{-*H)?7xK=# zBcnELnpVeOqM4Ut4R=P(M~<$CpK;%m7SZPT5iL0jCzm2OFwu4P}cx9aTMNzo-P(UyXe4g!-3 zdp0Q;Z(&*4%(K0-xFyZe&E)kVBiXgPE>|Vki$7uA!f~nXhSZ6f7lkjq^p`Agdc?>1 zWxpE{PJ5Wf8E4J&<@g1UX8r|j$Bll^b9Vk8>%^>iGVuyi?Q|ibEakHo*5{qEak~EJ z)P|?ta!WSbMOvj^4y)Q?=)Cj@O5$ - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Sitar Member List

This is the complete list of members for stk::Sitar, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Sitar
controlChange(int number, StkFloat value)stk::Instrmnt [inline, virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Sitar [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Sitar [virtual]
pluck(StkFloat amplitude)stk::Sitar
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Sitar [virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
Sitar(StkFloat lowestFrequency=8.0)stk::Sitar
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Sitar [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Sitar [inline, virtual]
~Sitar(void)stk::Sitar
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sitar.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sitar.html deleted file mode 100644 index 59421c52fb..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sitar.html +++ /dev/null @@ -1,139 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Sitar Class Reference

-

STK sitar string model class. -More...

- -

#include <Sitar.h>

-
-Inheritance diagram for stk::Sitar:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Sitar (StkFloat lowestFrequency=8.0)
 Class constructor, taking the lowest desired playing frequency.
~Sitar (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void pluck (StkFloat amplitude)
 Pluck the string with the given amplitude using the current frequency.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK sitar string model class.

-

This class implements a sitar plucked string physical model based on the Karplus-Strong algorithm.

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others. There exist at least two patents, assigned to Stanford, bearing the names of Karplus and/or Strong.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Sitar::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00100 {
-00101   unsigned int nChannels = lastFrame_.channels();
-00102 #if defined(_STK_DEBUG_)
-00103   if ( channel > frames.channels() - nChannels ) {
-00104     oStream_ << "Sitar::tick(): channel and StkFrames arguments are incompatible!";
-00105     handleError( StkError::FUNCTION_ARGUMENT );
-00106   }
-00107 #endif
-00108 
-00109   StkFloat *samples = &frames[channel];
-00110   unsigned int j, hop = frames.channels() - nChannels;
-00111   if ( nChannels == 1 ) {
-00112     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00113       *samples++ = tick();
-00114   }
-00115   else {
-00116     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00117       *samples++ = tick();
-00118       for ( j=1; j<nChannels; j++ )
-00119         *samples++ = lastFrame_[j];
-00120     }
-00121   }
-00122 
-00123   return frames;
-00124 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sitar.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sitar.png deleted file mode 100644 index 801982a4ee0532865154ccfb5bb5dbc8fbacc2ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmeAS@N?(olHy`uVBq!ia0vp^K0w^T!3-p;4F2v0QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%Qedb&70WZ zc`K7Pu8Ioz&8s4wRBwCt*>(15t=$i!BXWuj8>(~r=3h1W&YqCF?d^BQBL?$*lm54+ z?tAqu?5558*AbeXQEFjci>7tiR?IrmA*k%uBVi~gXel&ZX4bZjzmm;bj}jw3e-!yI zz_x;kLoQ_Dff->p<~v1;eVx*GbYDgRPaFy{d%_`3cw3ZvP8TUY+>)rpmWeox;Bi Yrt1{K&DXxp14asir>mdKI;Vst06^{CnE(I) diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini-members.html deleted file mode 100644 index 696b648702..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini-members.html +++ /dev/null @@ -1,56 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Skini Member List

This is the complete list of members for stk::Skini, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
nextMessage(Skini::Message &message)stk::Skini
parseString(std::string &line, Skini::Message &message)stk::Skini
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFile(std::string fileName)stk::Skini
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
Skini()stk::Skini
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
whatsThisController(long number)stk::Skini [static]
whatsThisType(long type)stk::Skini [static]
~Skini()stk::Skini
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini.html deleted file mode 100644 index fafd236cf8..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini.html +++ /dev/null @@ -1,149 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Skini Class Reference

-

STK SKINI parsing class. -More...

- -

#include <Skini.h>

-
-Inheritance diagram for stk::Skini:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Classes

struct  Message
 A message structure to store and pass parsed SKINI messages. More...

Public Member Functions

Skini ()
 Default constructor.
~Skini ()
 Class destructor.
bool setFile (std::string fileName)
 Set a SKINI formatted file for reading.
long nextMessage (Skini::Message &message)
 Parse the next file message (if a file is loaded) and return the message type.
long parseString (std::string &line, Skini::Message &message)
 Attempt to parse the given string and returning the message type.

Static Public Member Functions

-static std::string whatsThisType (long type)
 Return the SKINI type string for the given type value.
-static std::string whatsThisController (long number)
 Return the SKINI controller string for the given controller number.
-

Detailed Description

-

STK SKINI parsing class.

-

This class parses SKINI formatted text messages. It can be used to parse individual messages or it can be passed an entire file. The SKINI specification is Perry's and his alone, but it's all text so it shouldn't be too hard to figure out.

-

SKINI (Synthesis toolKit Instrument Network Interface) is like MIDI, but allows for floating-point control changes, note numbers, etc. The following example causes a sharp middle C to be played with a velocity of 111.132:

-
    noteOn  60.01  111.132
-
See also:
Synthesis toolKit Instrument Network Interface (SKINI)
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
bool stk::Skini::setFile (std::string  fileName ) 
-
-
- -

Set a SKINI formatted file for reading.

-

If the file is successfully opened, this function returns true. Otherwise, false is returned.

- -
-
- -
-
- - - - - - - - - -
long stk::Skini::nextMessage (Skini::Message message ) 
-
-
- -

Parse the next file message (if a file is loaded) and return the message type.

-

This function skips over lines in a file which cannot be parsed. A type value equal to zero in the referenced message structure (and the returned value) indicates the file end is reached or no file is open for reading.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
long stk::Skini::parseString (std::string &  line,
Skini::Message message 
)
-
-
- -

Attempt to parse the given string and returning the message type.

-

A type value equal to zero in the referenced message structure indicates an invalid message.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Skini.png deleted file mode 100644 index 7ba6be55957781b28d52a32fcd4a5477e271307c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5M}!3-peM4lxADTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPYfMQQPT^vIy7~jr)$alzqqh+Vw%is2!?5_nm zbfq0Rqmg2G`{H`ryqWu7dWgurEfTE}i)yZ7dvGHEU_=xT^IFCL?&G~v=O^5g_mw!x zxnWQHajo15>DM+T-;O-m<`i+ejHx^K^l9&E`5PN-A3r*H>-q|`Xe;|EXZ^wfsZoMC`6I8ki?uH#?F*?uSH?#g|EYIQF7px@}q}KOcFUpTS zbh0V6Uba26B5Ti?L#x*>duIEr?cABm{f(_+2X1ZS_30Bjm&3Gq?%ubRZ0yHg>g9f) g_j>iOSc^dZRhxL1rV31v0s5E0)78&qol`;+0Ob&y2><{9 diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket-members.html deleted file mode 100644 index c34cb525f1..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket-members.html +++ /dev/null @@ -1,60 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Socket Member List

This is the complete list of members for stk::Socket, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
close(int socket)stk::Socket [static]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
id(void) const stk::Socket [inline]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
isValid(int socket)stk::Socket [inline, static]
port(void) const stk::Socket [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
readBuffer(void *buffer, long bufferSize, int flags=0)=0stk::Socket [pure virtual]
readBuffer(int socket, void *buffer, long bufferSize, int flags)stk::Socket [static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setBlocking(int socket, bool enable)stk::Socket [static]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Socket()stk::Socket
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
writeBuffer(const void *buffer, long bufferSize, int flags=0)=0stk::Socket [pure virtual]
writeBuffer(int socket, const void *buffer, long bufferSize, int flags)stk::Socket [static]
~Socket()stk::Socket [virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket.html deleted file mode 100644 index 6126353b03..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket.html +++ /dev/null @@ -1,88 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Socket Class Reference

-

STK internet socket abstract base class. -More...

- -

#include <Socket.h>

-
-Inheritance diagram for stk::Socket:
-
-
- - -stk::Stk -stk::TcpClient -stk::TcpServer -stk::UdpSocket - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Socket ()
 Class constructor.
-virtual ~Socket ()
 Class destructor.
-int id (void) const
 Return the socket descriptor.
-int port (void) const
 Return the socket port number.
-virtual int writeBuffer (const void *buffer, long bufferSize, int flags=0)=0
 Write a buffer over the socket connection. Returns the number of bytes written or -1 if an error occurs.
-virtual int readBuffer (void *buffer, long bufferSize, int flags=0)=0
 Read an input buffer, up to length bufferSize. Returns the number of bytes read or -1 if an error occurs.

Static Public Member Functions

-static void close (int socket)
 Close the socket.
-static bool isValid (int socket)
 Returns true if the socket descriptor is valid.
-static void setBlocking (int socket, bool enable)
 If enable = false, the socket is set to non-blocking mode. When first created, sockets are by default in blocking mode.
-static int writeBuffer (int socket, const void *buffer, long bufferSize, int flags)
 Write a buffer via the specified socket. Returns the number of bytes written or -1 if an error occurs.
-static int readBuffer (int socket, void *buffer, long bufferSize, int flags)
 Read a buffer via the specified socket. Returns the number of bytes read or -1 if an error occurs.
-

Detailed Description

-

STK internet socket abstract base class.

-

This class provides common functionality for TCP and UDP internet socket server and client subclasses. This class also provides a number of static functions for use with external socket descriptors.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Socket.png deleted file mode 100644 index de9b20d576160f4bc2df64de65860801127ac40a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 894 zcmeAS@N?(olHy`uVBq!ia0y~yVAKY(J2;p@WUFlvkdg@S332`Z|38rV|Nnvc^Ajcj zSzvtNz=7&R|DOQ493?@1!9Zy+xOytYh=GBb*VDx@q=ND7-HYp%DDX5So>tlSUwJ+^ zOVkQMHTK6R?!QSZpRn<=e^mbV*^i8k-)TM4TWz4f;SiVhnhjN}rnV?N+uUJsI%2Cv z(6tRl?iwtDhI+^AUp>9L_S4IW3wHS}@{c>VN=EUd&95Dnr@t)dE|M`{v&T$FD{b55 z=5u>irB(0t;g{QNvn^@f+cL@3|2ft`Og_Z5T6JyOvD0ggCB^TmT9X#|HX+fpnM-HQ zjJFYqt)gKpVPGmk5JDxoCIAIN>_#Bv%Rf^xfAg=4)yZH%)42YS>36Qry4yJQ*0ncB zy;5$w94VOk|Hxy}|CVJQzm64!2|8@^RdV@s;`ZgPTNk&yu?lnl_$|uH^VCy|x1$;%%KiUY`vOHgh%+bAH{xbWB=D>5|QW%_Y{P&M&n& z5ES~qLbW*^uPm21`@PR~x8?l@t2)-nuhP(8+w7hno*MdhtJd3>TNf(b z`TgQlTGY=xxX{GveS3l?MQxpYG;K}iF?tC+nKAg7|NG@Ts!Bg)x`VFzx=I*&R$qy_WgT8 zdf%$HOJQ?uZ!G)x{OZbt;E9);JFlFH{oU8Kd~+@Twd4P`SXLFuXrA(3f3M - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Sphere Member List

This is the complete list of members for stk::Sphere, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
addVelocity(StkFloat x, StkFloat y, StkFloat z)stk::Sphere
getMass(void)stk::Sphere [inline]
getPosition(void)stk::Sphere [inline]
getRadius(void)stk::Sphere [inline]
getRelativePosition(Vector3D *position)stk::Sphere
getVelocity(Vector3D *velocity)stk::Sphere
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
isInside(Vector3D *position)stk::Sphere
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setMass(StkFloat mass)stk::Sphere [inline]
setPosition(StkFloat x, StkFloat y, StkFloat z)stk::Sphere [inline]
setRadius(StkFloat radius)stk::Sphere [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setVelocity(StkFloat x, StkFloat y, StkFloat z)stk::Sphere [inline]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Sphere(StkFloat radius=1.0)stk::Sphere [inline]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat timeIncrement)stk::Sphere [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sphere.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sphere.html deleted file mode 100644 index f523195a1d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sphere.html +++ /dev/null @@ -1,90 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Sphere Class Reference

-

STK sphere class. -More...

- -

#include <Sphere.h>

-
-Inheritance diagram for stk::Sphere:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Sphere (StkFloat radius=1.0)
 Constructor taking an initial radius value.
-void setPosition (StkFloat x, StkFloat y, StkFloat z)
 Set the 3D center position of the sphere.
-void setVelocity (StkFloat x, StkFloat y, StkFloat z)
 Set the 3D velocity of the sphere.
-void setRadius (StkFloat radius)
 Set the radius of the sphere.
-void setMass (StkFloat mass)
 Set the mass of the sphere.
-Vector3DgetPosition (void)
 Get the current position of the sphere as a 3D vector.
-Vector3DgetRelativePosition (Vector3D *position)
 Get the relative position of the given point to the sphere as a 3D vector.
-StkFloat getVelocity (Vector3D *velocity)
 Set the velcoity of the sphere as a 3D vector.
-StkFloat isInside (Vector3D *position)
 Returns the distance from the sphere boundary to the given position (< 0 if inside).
-StkFloat getRadius (void)
 Get the current sphere radius.
-StkFloat getMass (void)
 Get the current sphere mass.
-void addVelocity (StkFloat x, StkFloat y, StkFloat z)
 Increase the current sphere velocity by the given 3D components.
-void tick (StkFloat timeIncrement)
 Move the sphere for the given time increment.
-

Detailed Description

-

STK sphere class.

-

This class implements a spherical ball with radius, mass, position, and velocity parameters.

-

by Perry R. Cook, 1995-2012.

-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sphere.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Sphere.png deleted file mode 100644 index 114a71ad18dd00238a1f08b4a2af97a5c968a773..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^UO*hc!3-ojorU)SDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J9NJzX3_Dj46+y~uZ1fx~sD*~kC(mHbMq zsjJPFWQv`b6goxud(`%Dt3yqFLL!}9jtfO*7&55WGPfFUZ)WmhOgQx;(I2duz?~^|EE1Z!!bMdp@PC(6guo&z|0}s784}D{f2yzF*N8Zv#ij6Q zy0ceGU&H6_9ap!7-4Y8?UXU(v;`M>xO&)5$KQ|;bO+ENFqwUlVjg^uCe2ec+x;Inf z%C_vrYu|RRw#z5`@8 diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp-members.html deleted file mode 100644 index 022df5ed09..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp-members.html +++ /dev/null @@ -1,66 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::StifKarp Member List

This is the complete list of members for stk::StifKarp, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::StifKarp
controlChange(int number, StkFloat value)stk::StifKarp [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::StifKarp [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::StifKarp [virtual]
pluck(StkFloat amplitude)stk::StifKarp
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setBaseLoopGain(StkFloat aGain)stk::StifKarp
setFrequency(StkFloat frequency)stk::StifKarp [virtual]
setPickupPosition(StkFloat position)stk::StifKarp
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setStretch(StkFloat stretch)stk::StifKarp
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
StifKarp(StkFloat lowestFrequency=8.0)stk::StifKarp
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::StifKarp [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::StifKarp [inline, virtual]
~StifKarp(void)stk::StifKarp
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp.html deleted file mode 100644 index fea1ea0354..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp.html +++ /dev/null @@ -1,177 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::StifKarp Class Reference

-

STK plucked stiff string instrument. -More...

- -

#include <StifKarp.h>

-
-Inheritance diagram for stk::StifKarp:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

StifKarp (StkFloat lowestFrequency=8.0)
 Class constructor, taking the lowest desired playing frequency.
~StifKarp (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void setStretch (StkFloat stretch)
 Set the stretch "factor" of the string (0.0 - 1.0).
-void setPickupPosition (StkFloat position)
 Set the pluck or "excitation" position along the string (0.0 - 1.0).
void setBaseLoopGain (StkFloat aGain)
 Set the base loop gain.
-void pluck (StkFloat amplitude)
 Pluck the string with the given amplitude using the current frequency.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK plucked stiff string instrument.

-

This class implements a simple plucked string algorithm (Karplus Strong) with enhancements (Jaffe-Smith, Smith, and others), including string stiffness and pluck position controls. The stiffness is modeled with allpass filters.

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others.

-

Control Change Numbers:

-
    -
  • Pickup Position = 4
  • -
  • String Sustain = 11
  • -
  • String Stretch = 1
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::StifKarp::setBaseLoopGain (StkFloat  aGain ) 
-
-
- -

Set the base loop gain.

-

The actual loop gain is set according to the frequency. Because of high-frequency loop filter roll-off, higher frequency settings have greater loop gains.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::StifKarp::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00126 {
-00127   unsigned int nChannels = lastFrame_.channels();
-00128 #if defined(_STK_DEBUG_)
-00129   if ( channel > frames.channels() - nChannels ) {
-00130     oStream_ << "StifKarp::tick(): channel and StkFrames arguments are incompatible!";
-00131     handleError( StkError::FUNCTION_ARGUMENT );
-00132   }
-00133 #endif
-00134 
-00135   StkFloat *samples = &frames[channel];
-00136   unsigned int j, hop = frames.channels() - nChannels;
-00137   if ( nChannels == 1 ) {
-00138     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00139       *samples++ = tick();
-00140   }
-00141   else {
-00142     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00143       *samples++ = tick();
-00144       for ( j=1; j<nChannels; j++ )
-00145         *samples++ = lastFrame_[j];
-00146     }
-00147   }
-00148 
-00149   return frames;
-00150 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StifKarp.png deleted file mode 100644 index 404a75156d10e606c0493e1ec55785b7287dd042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 522 zcmV+l0`>igP)r|bN(c6KM#UKP7sr<>m7e6fpG>=xVquR6Qa z3N5xaqP4<@dC!u24Hx@hygBmSiQnLI4)tQWoI|}}?&X~&M~)mha^%Q8;f~Oe4hbCO z;y8%FUykYJsPWHnfCvC5LIeWzX@UL;q-Ig3^jyj7^!~C-luQZg2U~pNROu>ed$9EI zVg7)IV$ZpjzRUSyC(hfya^n%r#cpw0O>M+1v^K1`sk8hEAos6a?1M4*vHcY;=TI+} z%Q@5w=3d@ea^%R7BS((h6AqyxA+iQ?VI0zM4Zy;+apya@=IY`SQ~0VL3Nxn!H)b_#vXoUZe=bZ1wVTe>fP^v6q}Lc4~!j zr>~Q<8(J}O6TLV)Ew(noj>^Ke3;!ipb@orULg-EQZjQfqQC#Tw0a>CUSN3cJfdBvi M07*qoM6N<$f*DBvKL7v# diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk-members.html deleted file mode 100644 index a886022ced..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk-members.html +++ /dev/null @@ -1,49 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Stk Member List

This is the complete list of members for stk::Stk, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk.html deleted file mode 100644 index 830e73b3cf..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk.html +++ /dev/null @@ -1,277 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Stk Class Reference

-

STK base class. -More...

- -

#include <Stk.h>

-
-Inheritance diagram for stk::Stk:
-
-
- - -stk::Effect -stk::FileRead -stk::FileWrite -stk::Filter -stk::Function -stk::Generator -stk::Guitar -stk::Instrmnt -stk::Messager -stk::MidiFileIn -stk::Mutex -stk::Phonemes -stk::Skini -stk::Socket -stk::Sphere -stk::Thread -stk::Twang -stk::Vector3D -stk::Voicer -stk::WvIn -stk::WvOut - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

void ignoreSampleRateChange (bool ignore=true)
 A function to enable/disable the automatic updating of class data when the STK sample rate changes.

Static Public Member Functions

-static StkFloat sampleRate (void)
 Static method that returns the current STK sample rate.
static void setSampleRate (StkFloat rate)
 Static method that sets the STK sample rate.
-static std::string rawwavePath (void)
 Static method that returns the current rawwave path.
-static void setRawwavePath (std::string path)
 Static method that sets the STK rawwave path.
-static void swap16 (unsigned char *ptr)
 Static method that byte-swaps a 16-bit data type.
-static void swap32 (unsigned char *ptr)
 Static method that byte-swaps a 32-bit data type.
-static void swap64 (unsigned char *ptr)
 Static method that byte-swaps a 64-bit data type.
-static void sleep (unsigned long milliseconds)
 Static cross-platform method to sleep for a number of milliseconds.
-static bool inRange (StkFloat value, StkFloat min, StkFloat max)
 Static method to check whether a value is within a specified range.
-static void handleError (const char *message, StkError::Type type)
 Static function for error reporting and handling using c-strings.
-static void handleError (std::string message, StkError::Type type)
 Static function for error reporting and handling using c++ strings.
-static void showWarnings (bool status)
 Toggle display of WARNING and STATUS messages.
-static void printErrors (bool status)
 Toggle display of error messages before throwing exceptions.

Static Public Attributes

static const StkFormat STK_SINT8
static const StkFormat STK_SINT16
static const StkFormat STK_SINT24
static const StkFormat STK_SINT32
static const StkFormat STK_FLOAT32
static const StkFormat STK_FLOAT64

Protected Member Functions

Stk (void)
 Default constructor.
-virtual ~Stk (void)
 Class destructor.
-virtual void sampleRateChanged (StkFloat newRate, StkFloat oldRate)
 This function should be implemented in subclasses that depend on the sample rate.
-void addSampleRateAlert (Stk *ptr)
 Add class pointer to list for sample rate change notification.
-void removeSampleRateAlert (Stk *ptr)
 Remove class pointer from list for sample rate change notification.
-void handleError (StkError::Type type)
 Internal function for error reporting that assumes message in oStream_ variable.
-

Detailed Description

-

STK base class.

-

Nearly all STK classes inherit from this class. The global sample rate and rawwave path variables can be queried and modified via Stk. In addition, this class provides error handling and byte-swapping functions.

-

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. STK currently runs with realtime support (audio and MIDI) on Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler.

-

STK WWW site: http://ccrma.stanford.edu/software/stk/

-

The Synthesis ToolKit in C++ (STK) Copyright (c) 1995-2012 Perry R. Cook and Gary P. Scavone

-

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

-

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

-

Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. This is, however, not a binding provision of this license.

-

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

-

Member Function Documentation

- -
-
- - - - - - - - - -
static void stk::Stk::setSampleRate (StkFloat  rate )  [static]
-
-
- -

Static method that sets the STK sample rate.

-

The sample rate set using this method is queried by all STK classes that depend on its value. It is initialized to the default SRATE set in Stk.h. Many STK classes use the sample rate during instantiation. Therefore, if you wish to use a rate that is different from the default rate, it is imperative that it be set BEFORE STK objects are instantiated. A few classes that make use of the global STK sample rate are automatically notified when the rate changes so that internal class data can be appropriately updated. However, this has not been fully implemented. Specifically, classes that appropriately update their own data when either a setFrequency() or noteOn() function is called do not currently receive the automatic notification of rate change. If the user wants a specific class instance to ignore such notifications, perhaps in a multi-rate context, the function Stk::ignoreSampleRateChange() should be called.

- -
-
- -
-
- - - - - - - - - -
void stk::Stk::ignoreSampleRateChange (bool  ignore = true )  [inline]
-
-
- -

A function to enable/disable the automatic updating of class data when the STK sample rate changes.

-

This function allows the user to enable or disable class data updates in response to global sample rate changes on a class by class basis.

- -

Reimplemented in stk::BiQuad, stk::FormSwep, stk::TwoPole, and stk::TwoZero.

- -

00172 { ignoreSampleRateChange_ = ignore; };
-

- -
-
-

Member Data Documentation

- -
-
- - - - -
const StkFormat stk::Stk::STK_SINT8 [static]
-
-
-

-128 to +127

- -
-
- -
-
- - - - -
const StkFormat stk::Stk::STK_SINT16 [static]
-
-
-

-32768 to +32767

- -
-
- -
-
- - - - -
const StkFormat stk::Stk::STK_SINT24 [static]
-
-
-

Lower 3 bytes of 32-bit signed integer.

- -
-
- -
-
- - - - -
const StkFormat stk::Stk::STK_SINT32 [static]
-
-
-

-2147483648 to +2147483647.

- -
-
- -
-
- - - - -
const StkFormat stk::Stk::STK_FLOAT32 [static]
-
-
-

Normalized between plus/minus 1.0.

- -
-
- -
-
- - - - -
const StkFormat stk::Stk::STK_FLOAT64 [static]
-
-
-

Normalized between plus/minus 1.0.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Stk.png deleted file mode 100644 index 3ff4bdc19b3319f6d9844bf8c570f729f818a311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3746 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 - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::StkError Member List

This is the complete list of members for stk::StkError, including all inherited members. - - - - - - -
getMessage(void)stk::StkError [inline, virtual]
getMessageCString(void)stk::StkError [inline, virtual]
getType(void)stk::StkError [inline, virtual]
printMessage(void)stk::StkError [inline, virtual]
StkError(const std::string &message, Type type=StkError::UNSPECIFIED)stk::StkError [inline]
~StkError(void)stk::StkError [inline, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkError.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkError.html deleted file mode 100644 index 5a138d6fd9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkError.html +++ /dev/null @@ -1,58 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::StkError Class Reference

-

STK error handling class. -More...

- -

#include <Stk.h>

- -

List of all members.

- - - - - - - - - - - - - - -

Public Member Functions

StkError (const std::string &message, Type type=StkError::UNSPECIFIED)
 The constructor.
-virtual ~StkError (void)
 The destructor.
-virtual void printMessage (void)
 Prints thrown error message to stderr.
-virtual const Type & getType (void)
 Returns the thrown error message type.
-virtual const std::string & getMessage (void)
 Returns the thrown error message string.
-virtual const char * getMessageCString (void)
 Returns the thrown error message as a C string.
-

Detailed Description

-

STK error handling class.

-

This is a fairly abstract exception handling class. There could be sub-classes to take care of more specific error conditions ... or not.

-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkFrames-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkFrames-members.html deleted file mode 100644 index 9b412db6b9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkFrames-members.html +++ /dev/null @@ -1,41 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::StkFrames Member List

This is the complete list of members for stk::StkFrames, including all inherited members. - - - - - - - - - - - - - - - - - - -
channels(void) const stk::StkFrames [inline]
dataRate(void) const stk::StkFrames [inline]
empty() const stk::StkFrames [inline]
frames(void) const stk::StkFrames [inline]
interpolate(StkFloat frame, unsigned int channel=0) const stk::StkFrames
operator()(size_t frame, unsigned int channel)stk::StkFrames [inline]
operator()(size_t frame, unsigned int channel) const stk::StkFrames [inline]
operator*=(StkFrames &f)stk::StkFrames [inline]
operator+=(StkFrames &f)stk::StkFrames [inline]
operator[](size_t n)stk::StkFrames [inline]
operator[](size_t n) const stk::StkFrames [inline]
resize(size_t nFrames, unsigned int nChannels=1)stk::StkFrames
resize(size_t nFrames, unsigned int nChannels, StkFloat value)stk::StkFrames
setDataRate(StkFloat rate)stk::StkFrames [inline]
size() const stk::StkFrames [inline]
StkFrames(unsigned int nFrames=0, unsigned int nChannels=0)stk::StkFrames
StkFrames(const StkFloat &value, unsigned int nFrames, unsigned int nChannels)stk::StkFrames
~StkFrames()stk::StkFrames
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkFrames.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkFrames.html deleted file mode 100644 index 2f2ae1c2f5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1StkFrames.html +++ /dev/null @@ -1,461 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::StkFrames Class Reference

-

An STK class to handle vectorized audio data. -More...

- -

#include <Stk.h>

- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

StkFrames (unsigned int nFrames=0, unsigned int nChannels=0)
 The default constructor initializes the frame data structure to size zero.
StkFrames (const StkFloat &value, unsigned int nFrames, unsigned int nChannels)
 Overloaded constructor that initializes the frame data to the specified size with value.
~StkFrames ()
 The destructor.
StkFloat & operator[] (size_t n)
 Subscript operator that returns a reference to element n of self.
StkFloat operator[] (size_t n) const
 Subscript operator that returns the value at element n of self.
void operator+= (StkFrames &f)
 Assignment by sum operator into self.
void operator*= (StkFrames &f)
 Assignment by product operator into self.
StkFloat & operator() (size_t frame, unsigned int channel)
 Channel / frame subscript operator that returns a reference.
StkFloat operator() (size_t frame, unsigned int channel) const
 Channel / frame subscript operator that returns a value.
StkFloat interpolate (StkFloat frame, unsigned int channel=0) const
 Return an interpolated value at the fractional frame index and channel.
-size_t size () const
 Returns the total number of audio samples represented by the object.
-bool empty () const
 Returns true if the object size is zero and false otherwise.
void resize (size_t nFrames, unsigned int nChannels=1)
 Resize self to represent the specified number of channels and frames.
void resize (size_t nFrames, unsigned int nChannels, StkFloat value)
 Resize self to represent the specified number of channels and frames and perform element initialization.
-unsigned int channels (void) const
 Return the number of channels represented by the data.
-unsigned int frames (void) const
 Return the number of sample frames represented by the data.
void setDataRate (StkFloat rate)
 Set the sample rate associated with the StkFrames data.
StkFloat dataRate (void) const
 Return the sample rate associated with the StkFrames data.
-

Detailed Description

-

An STK class to handle vectorized audio data.

-

This class can hold single- or multi-channel audio data. The data type is always StkFloat and the channel format is always interleaved. In an effort to maintain efficiency, no out-of-bounds checks are performed in this class unless _STK_DEBUG_ is defined.

-

Internally, the data is stored in a one-dimensional C array. An indexing operator is available to set and retrieve data values. Alternately, one can use pointers to access the data, using the index operator to get an address for a particular location in the data:

-

StkFloat* ptr = &myStkFrames[0];

-

Note that this class can also be used as a table with interpolating lookup.

-

Possible future improvements in this class could include functions to convert to and return other data types.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
StkFloat & stk::StkFrames::operator[] (size_t  n )  [inline]
-
-
- -

Subscript operator that returns a reference to element n of self.

-

The result can be used as an lvalue. This reference is valid until the resize function is called or the array is destroyed. The index n must be between 0 and size less one. No range checking is performed unless _STK_DEBUG_ is defined.

- -

00413 {
-00414 #if defined(_STK_DEBUG_)
-00415   if ( n >= size_ ) {
-00416     std::ostringstream error;
-00417     error << "StkFrames::operator[]: invalid index (" << n << ") value!";
-00418     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00419   }
-00420 #endif
-00421 
-00422   return data_[n];
-00423 }
-

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::StkFrames::operator[] (size_t  n )  const [inline]
-
-
- -

Subscript operator that returns the value at element n of self.

-

The index n must be between 0 and size less one. No range checking is performed unless _STK_DEBUG_ is defined.

- -

00426 {
-00427 #if defined(_STK_DEBUG_)
-00428   if ( n >= size_ ) {
-00429     std::ostringstream error;
-00430     error << "StkFrames::operator[]: invalid index (" << n << ") value!";
-00431     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00432   }
-00433 #endif
-00434 
-00435   return data_[n];
-00436 }
-

- -
-
- -
-
- - - - - - - - - -
void stk::StkFrames::operator+= (StkFrames f )  [inline]
-
-
- -

Assignment by sum operator into self.

-

The dimensions of the argument are expected to be the same as self. No range checking is performed unless _STK_DEBUG_ is defined.

- -

00465 {
-00466 #if defined(_STK_DEBUG_)
-00467   if ( f.frames() != nFrames_ || f.channels() != nChannels_ ) {
-00468     std::ostringstream error;
-00469     error << "StkFrames::operator+=: frames argument must be of equal dimensions!";
-00470     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00471   }
-00472 #endif
-00473 
-00474   StkFloat *fptr = &f[0];
-00475   StkFloat *dptr = data_;
-00476   for ( unsigned int i=0; i<size_; i++ )
-00477     *dptr++ += *fptr++;
-00478 }
-

- -
-
- -
-
- - - - - - - - - -
void stk::StkFrames::operator*= (StkFrames f )  [inline]
-
-
- -

Assignment by product operator into self.

-

The dimensions of the argument are expected to be the same as self. No range checking is performed unless _STK_DEBUG_ is defined.

- -

00481 {
-00482 #if defined(_STK_DEBUG_)
-00483   if ( f.frames() != nFrames_ || f.channels() != nChannels_ ) {
-00484     std::ostringstream error;
-00485     error << "StkFrames::operator*=: frames argument must be of equal dimensions!";
-00486     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00487   }
-00488 #endif
-00489 
-00490   StkFloat *fptr = &f[0];
-00491   StkFloat *dptr = data_;
-00492   for ( unsigned int i=0; i<size_; i++ )
-00493     *dptr++ *= *fptr++;
-00494 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFloat & stk::StkFrames::operator() (size_t  frame,
unsigned int  channel 
) [inline]
-
-
- -

Channel / frame subscript operator that returns a reference.

-

The result can be used as an lvalue. This reference is valid until the resize function is called or the array is destroyed. The frame index must be between 0 and frames() - 1. The channel index must be between 0 and channels() - 1. No range checking is performed unless _STK_DEBUG_ is defined.

- -

00439 {
-00440 #if defined(_STK_DEBUG_)
-00441   if ( frame >= nFrames_ || channel >= nChannels_ ) {
-00442     std::ostringstream error;
-00443     error << "StkFrames::operator(): invalid frame (" << frame << ") or channel (" << channel << ") value!";
-00444     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00445   }
-00446 #endif
-00447 
-00448   return data_[ frame * nChannels_ + channel ];
-00449 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFloat stk::StkFrames::operator() (size_t  frame,
unsigned int  channel 
) const [inline]
-
-
- -

Channel / frame subscript operator that returns a value.

-

The frame index must be between 0 and frames() - 1. The channel index must be between 0 and channels() - 1. No range checking is performed unless _STK_DEBUG_ is defined.

- -

00452 {
-00453 #if defined(_STK_DEBUG_)
-00454   if ( frame >= nFrames_ || channel >= nChannels_ ) {
-00455     std::ostringstream error;
-00456     error << "StkFrames::operator(): invalid frame (" << frame << ") or channel (" << channel << ") value!";
-00457     Stk::handleError( error.str(), StkError::MEMORY_ACCESS );
-00458   }
-00459 #endif
-00460 
-00461   return data_[ frame * nChannels_ + channel ];
-00462 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFloat stk::StkFrames::interpolate (StkFloat  frame,
unsigned int  channel = 0 
) const
-
-
- -

Return an interpolated value at the fractional frame index and channel.

-

This function performs linear interpolation. The frame index must be between 0.0 and frames() - 1. The channel index must be between 0 and channels() - 1. No range checking is performed unless _STK_DEBUG_ is defined.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void stk::StkFrames::resize (size_t  nFrames,
unsigned int  nChannels = 1 
)
-
-
- -

Resize self to represent the specified number of channels and frames.

-

Changes the size of self based on the number of frames and channels. No element assignment is performed. No memory deallocation occurs if the new size is smaller than the previous size. Further, no new memory is allocated when the new size is smaller or equal to a previously allocated size.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void stk::StkFrames::resize (size_t  nFrames,
unsigned int  nChannels,
StkFloat  value 
)
-
-
- -

Resize self to represent the specified number of channels and frames and perform element initialization.

-

Changes the size of self based on the number of frames and channels, and assigns value to every element. No memory deallocation occurs if the new size is smaller than the previous size. Further, no new memory is allocated when the new size is smaller or equal to a previously allocated size.

- -
-
- -
-
- - - - - - - - - -
void stk::StkFrames::setDataRate (StkFloat  rate )  [inline]
-
-
- -

Set the sample rate associated with the StkFrames data.

-

By default, this value is set equal to the current STK sample rate at the time of instantiation.

- -

00386 { dataRate_ = rate; };
-

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::StkFrames::dataRate (void  )  const [inline]
-
-
- -

Return the sample rate associated with the StkFrames data.

-

By default, this value is set equal to the current STK sample rate at the time of instantiation.

- -

00393 { return dataRate_; };
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay-members.html deleted file mode 100644 index 95117c6864..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay-members.html +++ /dev/null @@ -1,66 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::TapDelay Member List

This is the complete list of members for stk::TapDelay, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
getGain(void) const stk::Filter [inline]
getTapDelays(void) const stk::TapDelay [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(unsigned int tap=0) const stk::TapDelay [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setGain(StkFloat gain)stk::Filter [inline]
setMaximumDelay(unsigned long delay)stk::TapDelay
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setTapDelays(std::vector< unsigned long > taps)stk::TapDelay
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
TapDelay(std::vector< unsigned long > taps=std::vector< unsigned long >(1, 0), unsigned long maxDelay=4095)stk::TapDelay
tick(StkFloat input, StkFrames &outputs)stk::TapDelay [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::TapDelay [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0)stk::TapDelay [inline]
~Stk(void)stk::Stk [protected, virtual]
~TapDelay()stk::TapDelay
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay.html deleted file mode 100644 index 5a9734ab4a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay.html +++ /dev/null @@ -1,365 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::TapDelay Class Reference

-

STK non-interpolating tapped delay line class. -More...

- -

#include <TapDelay.h>

-
-Inheritance diagram for stk::TapDelay:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 TapDelay (std::vector< unsigned long > taps=std::vector< unsigned long >(1, 0), unsigned long maxDelay=4095)
 The default constructor creates a delay-line with maximum length of 4095 samples and a single tap at delay = 0.
~TapDelay ()
 Class destructor.
void setMaximumDelay (unsigned long delay)
 Set the maximum delay-line length.
void setTapDelays (std::vector< unsigned long > taps)
 Set the delay-line tap lengths.
-std::vector< unsigned long > getTapDelays (void) const
 Return the current delay-line length.
StkFloat lastOut (unsigned int tap=0) const
 Return the specified tap value of the last computed frame.
StkFramestick (StkFloat input, StkFrames &outputs)
 Input one sample to the delayline and return outputs at all tap positions.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and write outputs back to the same object.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK non-interpolating tapped delay line class.

-

This class implements a non-interpolating digital delay-line with an arbitrary number of output "taps". If the maximum length and tap delays are not specified during instantiation, a fixed maximum length of 4095 and a single tap delay of zero is set.

-

A non-interpolating delay line is typically used in fixed delay-length applications, such as for reverberation.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
stk::TapDelay::TapDelay (std::vector< unsigned long >  taps = std::vector< unsigned long >(1, 0),
unsigned long  maxDelay = 4095 
)
-
-
- -

The default constructor creates a delay-line with maximum length of 4095 samples and a single tap at delay = 0.

-

An StkError will be thrown if any tap delay parameter is less than zero, the maximum delay parameter is less than one, or any tap delay parameter is greater than the maxDelay value.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::TapDelay::setMaximumDelay (unsigned long  delay ) 
-
-
- -

Set the maximum delay-line length.

-

This method should generally only be used during initial setup of the delay line. If it is used between calls to the tick() function, without a call to clear(), a signal discontinuity will likely occur. If the current maximum length is greater than the new length, no change will be made.

- -
-
- -
-
- - - - - - - - - -
void stk::TapDelay::setTapDelays (std::vector< unsigned long >  taps ) 
-
-
- -

Set the delay-line tap lengths.

-

The valid range for each tap length is from 0 to the maximum delay-line length.

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::TapDelay::lastOut (unsigned int  tap = 0 )  const [inline]
-
-
- -

Return the specified tap value of the last computed frame.

-

Use the lastFrame() function to get all tap values from the last computed frame. The tap argument must be less than the number of delayline taps (the first tap is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00116 {
-00117 #if defined(_STK_DEBUG_)
-00118   if ( tap >= lastFrame_.size() ) ) {
-00119     oStream_ << "TapDelay::lastOut(): tap argument and number of taps are incompatible!";
-00120     handleError( StkError::FUNCTION_ARGUMENT );
-00121   }
-00122 #endif
-00123 
-00124   return lastFrame_[tap];
-00125 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::TapDelay::tick (StkFloat  input,
StkFrames outputs 
) [inline]
-
-
- -

Input one sample to the delayline and return outputs at all tap positions.

-

The StkFrames argument reference is returned. The output values are ordered according to the tap positions set using the setTapDelays() function (no sorting is performed). The StkFrames argument must contain at least as many channels as the number of taps. However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00128 {
-00129 #if defined(_STK_DEBUG_)
-00130   if ( outputs.channels() < outPoint_.size() ) {
-00131     oStream_ << "TapDelay::tick(): number of taps > channels in StkFrames argument!";
-00132     handleError( StkError::FUNCTION_ARGUMENT );
-00133   }
-00134 #endif
-00135 
-00136   inputs_[inPoint_++] = input * gain_;
-00137 
-00138   // Check for end condition
-00139   if ( inPoint_ == inputs_.size() )
-00140     inPoint_ = 0;
-00141 
-00142   // Read out next values
-00143   StkFloat *outs = &outputs[0];
-00144   for ( unsigned int i=0; i<outPoint_.size(); i++ ) {
-00145     *outs++ = inputs_[outPoint_[i]];
-00146     lastFrame_[i] = *outs;
-00147     if ( ++outPoint_[i] == inputs_.size() )
-00148       outPoint_[i] = 0;
-00149   }
-00150 
-00151   return outputs;
-00152 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::TapDelay::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and write outputs back to the same object.

-

The StkFrames argument reference is returned. The output values are ordered according to the tap positions set using the setTapDelays() function (no sorting is performed). The StkFrames argument must contain at least as many channels as the number of taps. However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00155 {
-00156 #if defined(_STK_DEBUG_)
-00157   if ( channel >= frames.channels() ) {
-00158     oStream_ << "TapDelay::tick(): channel and StkFrames arguments are incompatible!";
-00159     handleError( StkError::FUNCTION_ARGUMENT );
-00160   }
-00161   if ( frames.channels() < outPoint_.size() ) {
-00162     oStream_ << "TapDelay::tick(): number of taps > channels in StkFrames argument!";
-00163     handleError( StkError::FUNCTION_ARGUMENT );
-00164   }
-00165 #endif
-00166 
-00167   StkFloat *iSamples = &frames[channel];
-00168   StkFloat *oSamples = &frames[0];
-00169   unsigned int j, iHop = frames.channels(), oHop = frames.channels() - outPoint_.size();
-00170   for ( unsigned int i=0; i<frames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00171     inputs_[inPoint_++] = *iSamples * gain_;
-00172     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00173     for ( j=0; j<outPoint_.size(); j++ ) {
-00174       *oSamples++ = inputs_[outPoint_[j]];
-00175       if ( ++outPoint_[j] == inputs_.size() ) outPoint_[j] = 0;
-00176     }
-00177   }
-00178 
-00179   oSamples -= frames.channels();
-00180   for ( j=0; j<outPoint_.size(); j++ ) lastFrame_[j] = *oSamples++;
-00181   return frames;
-00182 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::TapDelay::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. The output values are ordered according to the tap positions set using the setTapDelays() function (no sorting is performed). The iChannel argument must be less than the number of channels in the iFrames argument (the first channel is specified by 0). The oFrames argument must contain at least as many channels as the number of taps. However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00185 {
-00186 #if defined(_STK_DEBUG_)
-00187   if ( iChannel >= iFrames.channels() ) {
-00188     oStream_ << "TapDelay::tick(): channel and StkFrames arguments are incompatible!";
-00189     handleError( StkError::FUNCTION_ARGUMENT );
-00190   }
-00191   if ( oFrames.channels() < outPoint_.size() ) {
-00192     oStream_ << "TapDelay::tick(): number of taps > channels in output StkFrames argument!";
-00193     handleError( StkError::FUNCTION_ARGUMENT );
-00194   }
-00195 #endif
-00196 
-00197   StkFloat *iSamples = &iFrames[iChannel];
-00198   StkFloat *oSamples = &oFrames[0];
-00199   unsigned int j, iHop = iFrames.channels(), oHop = oFrames.channels() - outPoint_.size();
-00200   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00201     inputs_[inPoint_++] = *iSamples * gain_;
-00202     if ( inPoint_ == inputs_.size() ) inPoint_ = 0;
-00203     for ( j=0; j<outPoint_.size(); j++ ) {
-00204       *oSamples++ = inputs_[outPoint_[j]];
-00205       if ( ++outPoint_[j] == inputs_.size() ) outPoint_[j] = 0;
-00206     }
-00207   }
-00208 
-00209   oSamples -= oFrames.channels();
-00210   for ( j=0; j<outPoint_.size(); j++ ) lastFrame_[j] = *oSamples++;
-00211   return iFrames;
-00212 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TapDelay.png deleted file mode 100644 index 8498388644ac459cfb7a2f68befb0168228a6b1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmeAS@N?(olHy`uVBq!ia0vp^;XvHM!3-pq*0nDIQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%PL@^oe#pvTH$S@@2< zS{+uFT&tJs7iu4P_x{&Dp+|H1^cKiH*1G=c!H=>?_P-y0J)D#u+Wsu+``KkbYZShl z?{s|sv-O0w`2F)|E!kv_fQX~DG4>O@^>#j)1R|#0fLeL1mE(&DgV(zapA^e?70m-# z+F;heu_T0VN=vcu^woacwzhiL)`$P@iDvxu!8NXZ_p-wWWMAFQFS%#F_Hd82R8`#l z&V2co7h;NQFaJI8oO$Q|38bf`lIJa?a;dGHh0;PD^@&ezOS~nuF{gNWxp>|JJomnPGES< z`ndL+=j--+`?twY*_FM2yKp#L;nwi@CsOf0=G17ItNmm6!KA7(z102|Fa{YsUHx3v IIVCg!05lBxpa1{> diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient-members.html deleted file mode 100644 index 1414bb09ab..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient-members.html +++ /dev/null @@ -1,63 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::TcpClient Member List

This is the complete list of members for stk::TcpClient, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
close(int socket)stk::Socket [static]
connect(int port, std::string hostname="localhost")stk::TcpClient
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
id(void) const stk::Socket [inline]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
isValid(int socket)stk::Socket [inline, static]
port(void) const stk::Socket [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
readBuffer(void *buffer, long bufferSize, int flags=0)stk::TcpClient [virtual]
stk::Socket::readBuffer(int socket, void *buffer, long bufferSize, int flags)stk::Socket [static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setBlocking(int socket, bool enable)stk::Socket [static]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Socket()stk::Socket
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
TcpClient(int port, std::string hostname="localhost")stk::TcpClient
writeBuffer(const void *buffer, long bufferSize, int flags=0)stk::TcpClient [virtual]
stk::Socket::writeBuffer(int socket, const void *buffer, long bufferSize, int flags)stk::Socket [static]
~Socket()stk::Socket [virtual]
~Stk(void)stk::Stk [protected, virtual]
~TcpClient()stk::TcpClient
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient.html deleted file mode 100644 index 747b3c803b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient.html +++ /dev/null @@ -1,129 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::TcpClient Class Reference

-

STK TCP socket client class. -More...

- -

#include <TcpClient.h>

-
-Inheritance diagram for stk::TcpClient:
-
-
- - -stk::Socket -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - -

Public Member Functions

 TcpClient (int port, std::string hostname="localhost")
 Default class constructor creates a socket client connection to the specified host and port.
~TcpClient ()
 The class destructor closes the socket instance, breaking any existing connections.
int connect (int port, std::string hostname="localhost")
 Connect the socket client to the specified host and port and returns the resulting socket descriptor.
-int writeBuffer (const void *buffer, long bufferSize, int flags=0)
 Write a buffer over the socket connection. Returns the number of bytes written or -1 if an error occurs.
-int readBuffer (void *buffer, long bufferSize, int flags=0)
 Read a buffer from the socket connection, up to length bufferSize. Returns the number of bytes read or -1 if an error occurs.
-

Detailed Description

-

STK TCP socket client class.

-

This class provides a uniform cross-platform TCP socket client interface. Methods are provided for reading or writing data buffers to/from connections.

-

TCP sockets are reliable and connection-oriented. A TCP socket client must be connected to a TCP server before data can be sent or received. Data delivery is guaranteed in order, without loss, error, or duplication. That said, TCP transmissions tend to be slower than those using the UDP protocol and data sent with multiple write() calls can be arbitrarily combined by the underlying system.

-

The user is responsible for checking the values returned by the read/write methods. Values less than or equal to zero indicate a closed or lost connection or the occurence of an error.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
stk::TcpClient::TcpClient (int  port,
std::string  hostname = "localhost" 
)
-
-
- -

Default class constructor creates a socket client connection to the specified host and port.

-

An StkError will be thrown if a socket error occurs during instantiation.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
int stk::TcpClient::connect (int  port,
std::string  hostname = "localhost" 
)
-
-
- -

Connect the socket client to the specified host and port and returns the resulting socket descriptor.

-

If the socket client is already connected, that connection is terminated and a new connection is attempted. An StkError will be thrown if a socket error occurs.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpClient.png deleted file mode 100644 index 58481a4a7de56d79f184f775da23b417288f4c23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534 zcmeAS@N?(olHy`uVBq!ia0vp^VL;r$!3-q5_Pm(|q$C1-LR|m<{|{vT|9@cq{DcWW z78oBmaG?6o|0h5$M@f)hFi;u{uAT}pVqjog>gnPbQo;Ck?%hp?6*yXAjUNBD|FkoJ z!{wIC`3qmzmtS^kUBAP7((O&HJ(~g#c)aP25IA^-(c<*~BT4bmN10q0coxOWOjq9! zBP&a z-pYmkJyyas=G(3bf(lpH^P%0S&Z4w%xRYM z(Mx)$;+Mpz#L%`Ue#@fU{{0N;Hix%G2rPVBuV|LEg+u-x6jXoweY!Qi1C3+pAc=`DJ8j27jJ8;RgTlV|y;B zyUpd?Cmo&5Va^63IDRM2op9rbni<$x^}O8^0tE`!9ofgzz3BOyRo88tH!%2ZtiG}1 znW3#tfLFdntikl_N!1gVvF$yXE}YZNxZWUU--Z7b2X@Vt+Wo$t{aT59w%J+^?;B|k zl-GzRuDg|Z`EuEYGpCkYKU~F;Gh^eKvO^p5Qx~bs*?C&+-SPKFpMCxoyFu|W{|^b3 V`Ap{|B!H2~;OXk;vd$@?2>=%s@>&1@ diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer-members.html deleted file mode 100644 index 372ca4b1d1..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer-members.html +++ /dev/null @@ -1,63 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::TcpServer Member List

This is the complete list of members for stk::TcpServer, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
accept(void)stk::TcpServer
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
close(int socket)stk::Socket [static]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
id(void) const stk::Socket [inline]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
isValid(int socket)stk::Socket [inline, static]
port(void) const stk::Socket [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
readBuffer(void *buffer, long bufferSize, int flags=0)stk::TcpServer [virtual]
stk::Socket::readBuffer(int socket, void *buffer, long bufferSize, int flags)stk::Socket [static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setBlocking(int socket, bool enable)stk::Socket [static]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Socket()stk::Socket
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
TcpServer(int port=2006)stk::TcpServer
writeBuffer(const void *buffer, long bufferSize, int flags=0)stk::TcpServer [virtual]
stk::Socket::writeBuffer(int socket, const void *buffer, long bufferSize, int flags)stk::Socket [static]
~Socket()stk::Socket [virtual]
~Stk(void)stk::Stk [protected, virtual]
~TcpServer()stk::TcpServer
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer.html deleted file mode 100644 index 338676ebd1..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer.html +++ /dev/null @@ -1,111 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::TcpServer Class Reference

-

STK TCP socket server class. -More...

- -

#include <TcpServer.h>

-
-Inheritance diagram for stk::TcpServer:
-
-
- - -stk::Socket -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - -

Public Member Functions

 TcpServer (int port=2006)
 Default constructor creates a local socket server on port 2006 (or the specified port number).
~TcpServer ()
 The class destructor closes the socket instance, breaking any existing connections.
int accept (void)
 Extract the first pending connection request from the queue and create a new connection, returning the descriptor for the accepted socket.
-int writeBuffer (const void *buffer, long bufferSize, int flags=0)
 Write a buffer over the socket connection. Returns the number of bytes written or -1 if an error occurs.
-int readBuffer (void *buffer, long bufferSize, int flags=0)
 Read a buffer from the socket connection, up to length bufferSize. Returns the number of bytes read or -1 if an error occurs.
-

Detailed Description

-

STK TCP socket server class.

-

This class provides a uniform cross-platform TCP socket server interface. Methods are provided for reading or writing data buffers to/from connections.

-

TCP sockets are reliable and connection-oriented. A TCP socket server must accept a connection from a TCP client before data can be sent or received. Data delivery is guaranteed in order, without loss, error, or duplication. That said, TCP transmissions tend to be slower than those using the UDP protocol and data sent with multiple write() calls can be arbitrarily combined by the underlying system.

-

The user is responsible for checking the values returned by the read/write methods. Values less than or equal to zero indicate a closed or lost connection or the occurence of an error.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::TcpServer::TcpServer (int  port = 2006 ) 
-
-
- -

Default constructor creates a local socket server on port 2006 (or the specified port number).

-

An StkError will be thrown if a socket error occurs during instantiation.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - -
int stk::TcpServer::accept (void  ) 
-
-
- -

Extract the first pending connection request from the queue and create a new connection, returning the descriptor for the accepted socket.

-

If no connection requests are pending and the socket has not been set non-blocking, this function will block until a connection is present. If an error occurs, -1 is returned.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TcpServer.png deleted file mode 100644 index 8e1efb38f3355ca818035119c11519b8fea4bfd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^u|V9x!3-of#fawuDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J9Lc)B=-R4~4s8`#gR$k8He_VNG!C)EKW zF}K&OH=am;>H0Y3*>Co2JqzQbSG4agu1;5r-TSiV@0qk`ZsDtqZ(Y6?s{eVe;@mG@ z{XJX6Dh=zEtIkdQ5db10el1RKE4k#UJ{LsPI{y-sd^ur$ldC|xHWfQBCM)cGRet}0*=JeFKuYYM5zuI(3RljJ};W_KF zy0?9~^zn4;)^k7B@qKxA=IJ`A`|azhc6mpYy1jl?oY=PXywAo9U*^8&dHH|3oMfi% zr=)*wU*;%(TnHjIesMp~^K!{#KPwRNs|^?oP7i!N?>F_OT)*|>iY#8S9_nlVC4$^(({e~>z^q1@ZE2gPP`{sEM4{RE#Kk!vGeBc z^jhDU74g_2^Tn#tXS}hh#S=bWK6~iQ_u%lo@2BORDOy|cu; - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Thread Member List

This is the complete list of members for stk::Thread, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
cancel(void)stk::Thread
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
start(THREAD_FUNCTION routine, void *ptr=NULL)stk::Thread
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
testCancel(void)stk::Thread
Thread()stk::Thread
wait(void)stk::Thread
~Stk(void)stk::Stk [protected, virtual]
~Thread()stk::Thread
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Thread.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Thread.html deleted file mode 100644 index 5d8bf34c26..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Thread.html +++ /dev/null @@ -1,162 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Thread Class Reference

-

STK thread class. -More...

- -

#include <Thread.h>

-
-Inheritance diagram for stk::Thread:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - -

Public Member Functions

Thread ()
 Default constructor.
~Thread ()
 The class destructor does not attempt to cancel or join a thread.
bool start (THREAD_FUNCTION routine, void *ptr=NULL)
 Begin execution of the thread routine. Upon success, true is returned.
bool cancel (void)
 Signal cancellation of a thread routine, returning true on success.
bool wait (void)
 Block the calling routine indefinitely until the thread terminates.
void testCancel (void)
 Create a cancellation point within a thread routine.
-

Detailed Description

-

STK thread class.

-

This class provides a uniform interface for cross-platform threads. On unix systems, the pthread library is used. Under Windows, the C runtime threadex functions are used.

-

Each instance of the Thread class can be used to control a single thread process. Routines are provided to signal cancelation and/or joining with a thread, though it is not possible for this class to know the running status of a thread once it is started.

-

For cross-platform compatability, thread functions should be declared as follows:

-

THREAD_RETURN THREAD_TYPE thread_function(void *ptr)

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
bool stk::Thread::start (THREAD_FUNCTION  routine,
void *  ptr = NULL 
)
-
-
- -

Begin execution of the thread routine. Upon success, true is returned.

-

A data pointer can be supplied to the thread routine via the optional ptr argument. If the thread cannot be created, the return value is false.

- -
-
- -
-
- - - - - - - - - -
bool stk::Thread::cancel (void  ) 
-
-
- -

Signal cancellation of a thread routine, returning true on success.

-

This function only signals thread cancellation. It does not wait to verify actual routine termination. A true return value only signifies that the cancellation signal was properly executed, not thread cancellation. A thread routine may need to make use of the testCancel() function to specify a cancellation point.

- -
-
- -
-
- - - - - - - - - -
bool stk::Thread::wait (void  ) 
-
-
- -

Block the calling routine indefinitely until the thread terminates.

-

This function suspends execution of the calling routine until the thread has terminated. It will return immediately if the thread was already terminated. A true return value signifies successful termination. A false return value indicates a problem with the wait call.

- -
-
- -
-
- - - - - - - - - -
void stk::Thread::testCancel (void  ) 
-
-
- -

Create a cancellation point within a thread routine.

-

This function call checks for thread cancellation, allowing the thread to be terminated if a cancellation request was previously signaled.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Thread.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Thread.png deleted file mode 100644 index 6de26be6272d4f481282282425405cf51e6e1f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^o=OzQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)0mc4!x;TbZFut98k?)WJhimojCIA1Qv||u8 z%UR*PnDfX|*=FVM*N$EC%W2}?Cky`#_4;1p7iNDm-)Rt45BanV1^V(@(I52p+`njxgN@xNA Dw5_3> diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell-members.html deleted file mode 100644 index e9c4bc4b8c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell-members.html +++ /dev/null @@ -1,73 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::TubeBell Member List

This is the complete list of members for stk::TubeBell, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::FM
controlChange(int number, StkFloat value)stk::FM [virtual]
FM(unsigned int operators=4)stk::FM
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::FM
keyOn(void)stk::FM
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
loadWaves(const char **filenames)stk::FM
noteOff(StkFloat amplitude)stk::FM [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::TubeBell [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setControl1(StkFloat cVal)stk::FM [inline]
setControl2(StkFloat cVal)stk::FM [inline]
setFrequency(StkFloat frequency)stk::FM [virtual]
setGain(unsigned int waveIndex, StkFloat gain)stk::FM
setModulationDepth(StkFloat mDepth)stk::FM [inline]
setModulationSpeed(StkFloat mSpeed)stk::FM [inline]
setRatio(unsigned int waveIndex, StkFloat ratio)stk::FM
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::TubeBell [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::TubeBell [inline, virtual]
TubeBell(void)stk::TubeBell
~FM(void)stk::FM [virtual]
~Stk(void)stk::Stk [protected, virtual]
~TubeBell(void)stk::TubeBell
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell.html deleted file mode 100644 index 8c84e1664c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell.html +++ /dev/null @@ -1,160 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::TubeBell Class Reference

-

STK tubular bell (orchestral chime) FM synthesis instrument. -More...

- -

#include <TubeBell.h>

-
-Inheritance diagram for stk::TubeBell:
-
-
- - -stk::FM -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - -

Public Member Functions

 TubeBell (void)
 Class constructor.
~TubeBell (void)
 Class destructor.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK tubular bell (orchestral chime) FM synthesis instrument.

-

This class implements two simple FM Pairs summed together, also referred to as algorithm 5 of the TX81Z.

-
    Algorithm 5 is :  4->3--\
-                             + --> Out
-                      2->1--/
-

Control Change Numbers:

-
    -
  • Modulator Index One = 2
  • -
  • Crossfade of Outputs = 4
  • -
  • LFO Speed = 11
  • -
  • LFO Depth = 1
  • -
  • ADSR 2 & 4 Target = 128
  • -
-

The basic Chowning/Stanford FM patent expired in 1995, but there exist follow-on patents, mostly assigned to Yamaha. If you are of the type who should worry about this (making money) worry away.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::TubeBell::TubeBell (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::TubeBell::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::FM.

- -

00097 {
-00098   unsigned int nChannels = lastFrame_.channels();
-00099 #if defined(_STK_DEBUG_)
-00100   if ( channel > frames.channels() - nChannels ) {
-00101     oStream_ << "TubeBell::tick(): channel and StkFrames arguments are incompatible!";
-00102     handleError( StkError::FUNCTION_ARGUMENT );
-00103   }
-00104 #endif
-00105 
-00106   StkFloat *samples = &frames[channel];
-00107   unsigned int j, hop = frames.channels() - nChannels;
-00108   if ( nChannels == 1 ) {
-00109     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00110       *samples++ = tick();
-00111   }
-00112   else {
-00113     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00114       *samples++ = tick();
-00115       for ( j=1; j<nChannels; j++ )
-00116         *samples++ = lastFrame_[j];
-00117     }
-00118   }
-00119 
-00120   return frames;
-00121 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TubeBell.png deleted file mode 100644 index e3f3d665f4dd60a3341272219d824bbdd1211282..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 632 zcmeAS@N?(olHy`uVBq!ia0vp^Abfy>8AvXOIr0!lNd)+Wxc>kDAISXw|G@nD2@`-U zFg|eLK=q;jPk>yGk|4iepfngEakt!T9#>#lFW1Jgfohlt2ETZ^K`9 zK;V+%%F8O3Qq#9}^DdW2zkPj6OaB&+4+=kxg_JU$F|a+<_qcLHQb>UDLeBR3FAqI8 z&0&4y)oP?#GiA%(x7UiM@19z(SF__fUwu;!xBQmpJ`ew;U-`KB?Z!jbpH2C;CGnrU z`cEaJf8OO)Pkt`_KGCv$_Q#ZS51+9<@wW1tq~ZxeHF7&4R#vKV3U0Yrvvk>R^Edk0!9VOGFS(!C z_JQ~2ui%vW)Z2&nCx_jg%=H!G zFBL+a@Z|Fe)tV))P3$M*CkiyqXKLvFc_(tyg@38DSX>xPUX?HL5@v`^w07z-zCZ$dF@BZT)q>#3g1sT+kN+`-O4K>E5j^PXY$>8%>DoQ z6urwackadZ-CBIsx@>ybk6Uw=*^0fh+GjU?H#iK^Cq8`4&$Zq7+6ViutANRb!PC{x JWt~$(695zrE-wH8 diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang-members.html deleted file mode 100644 index d66ec52371..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang-members.html +++ /dev/null @@ -1,60 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Twang Member List

This is the complete list of members for stk::Twang, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
clear(void)stk::Twang
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastOut(void)stk::Twang [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Twang
setLoopFilter(std::vector< StkFloat > coefficients)stk::Twang
setLoopGain(StkFloat loopGain)stk::Twang
setLowestFrequency(StkFloat frequency)stk::Twang
setPluckPosition(StkFloat position)stk::Twang
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::Twang [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Twang [inline]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::Twang [inline]
Twang(StkFloat lowestFrequency=50.0)stk::Twang
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang.html deleted file mode 100644 index c98e4966d5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang.html +++ /dev/null @@ -1,254 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Twang Class Reference

-

STK enhanced plucked string class. -More...

- -

#include <Twang.h>

-
-Inheritance diagram for stk::Twang:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Twang (StkFloat lowestFrequency=50.0)
 Class constructor, taking the lowest desired playing frequency.
-void clear (void)
 Reset and clear all internal state.
-void setLowestFrequency (StkFloat frequency)
 Set the delayline parameters to allow frequencies as low as specified.
-void setFrequency (StkFloat frequency)
 Set the delayline parameters for a particular frequency.
-void setPluckPosition (StkFloat position)
 Set the pluck or "excitation" position along the string (0.0 - 1.0).
void setLoopGain (StkFloat loopGain)
 Set the nominal loop gain.
void setLoopFilter (std::vector< StkFloat > coefficients)
 Set the loop filter coefficients.
StkFloat lastOut (void)
 Return an StkFrames reference to the last output sample frame.
-StkFloat tick (StkFloat input)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the iFrames object as inputs to the class and write outputs to the oFrames object.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the effect and write outputs to the oFrames object.
-

Detailed Description

-

STK enhanced plucked string class.

-

This class implements an enhanced plucked-string physical model, a la Jaffe-Smith, Smith, Karjalainen and others. It includes a comb filter to simulate pluck position. The tick() function takes an input sample, which is added to the delayline input. This can be used to implement commuted synthesis (if the input samples are derived from the impulse response of a body filter) and/or feedback (as in an electric guitar model).

-

This is a digital waveguide model, making its use possibly subject to patents held by Stanford University, Yamaha, and others.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
void stk::Twang::setLoopGain (StkFloat  loopGain ) 
-
-
- -

Set the nominal loop gain.

-

The actual loop gain is based on the value set with this function, but scaled slightly according to the frequency. Higher frequency settings have greater loop gains because of high-frequency loop-filter roll-off.

- -
-
- -
-
- - - - - - - - - -
void stk::Twang::setLoopFilter (std::vector< StkFloat >  coefficients ) 
-
-
- -

Set the loop filter coefficients.

-

The loop filter can be any arbitrary FIR filter. By default, the coefficients are set for a first-order lowpass filter with coefficients b = [0.5 0.5].

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::Twang::lastOut (void  )  [inline]
-
-
- -

Return an StkFrames reference to the last output sample frame.

-

Return the last computed output value.

- -

00074 { return lastOutput_; };
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Twang::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the class and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00123 {
-00124 #if defined(_STK_DEBUG_)
-00125   if ( channel >= frames.channels() ) {
-00126     oStream_ << "Twang::tick(): channel and StkFrames arguments are incompatible!";
-00127     handleError( StkError::FUNCTION_ARGUMENT );
-00128   }
-00129 #endif
-00130 
-00131   StkFloat *samples = &frames[channel];
-00132   unsigned int hop = frames.channels();
-00133   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00134     *samples = tick( *samples );
-00135 
-00136   return frames;
-00137 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::Twang::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the effect and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00140 {
-00141 #if defined(_STK_DEBUG_)
-00142   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00143     oStream_ << "Twang::tick(): channel and StkFrames arguments are incompatible!";
-00144     handleError( StkError::FUNCTION_ARGUMENT );
-00145   }
-00146 #endif
-00147 
-00148   StkFloat *iSamples = &iFrames[iChannel];
-00149   StkFloat *oSamples = &oFrames[oChannel];
-00150   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00151   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop )
-00152     *oSamples = tick( *iSamples );
-00153 
-00154   return iFrames;
-00155 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Twang.png deleted file mode 100644 index 8242f037c79d052ff5931fc44b019eb60c6d3af3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^Za^Hs!3-oP*MBwuQW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%PPdAc};R4~4sd+<`T0Y}T`Lbdn*PyBCe zacB~on)#pkir>^m|FVs5x5_96_DKnJRyH`U4Y%RN;_Yjsj+z<|H~s8fo(_Q0zYjqd%AH)w-npvqgHd{&mL(>Ncxu` zbJ522{-G^mhdK`e3C=@*Hv6io8FqU5Bnf@C=5bo2kaX|J4nvJkRXGn;+l0O^WAu8- z-yq|$KhsP^s?bjFQA_{DP013+jIQs1U+4%`hkNCge<3E;j>qs9kgcv+s L{an^LB{Ts5wH>9& diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole-members.html deleted file mode 100644 index 2a8f19f225..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::TwoPole Member List

This is the complete list of members for stk::TwoPole, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
getGain(void) const stk::Filter [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::TwoPole [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::TwoPole [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
setA1(StkFloat a1)stk::TwoPole [inline]
setA2(StkFloat a2)stk::TwoPole [inline]
setB0(StkFloat b0)stk::TwoPole [inline]
setCoefficients(StkFloat b0, StkFloat a1, StkFloat a2, bool clearState=false)stk::TwoPole
setGain(StkFloat gain)stk::Filter [inline]
setRawwavePath(std::string path)stk::Stk [static]
setResonance(StkFloat frequency, StkFloat radius, bool normalize=false)stk::TwoPole
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::TwoPole [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::TwoPole [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::TwoPole [inline]
TwoPole(void)stk::TwoPole
~Stk(void)stk::Stk [protected, virtual]
~TwoPole()stk::TwoPole
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole.html deleted file mode 100644 index e01f0b27a5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole.html +++ /dev/null @@ -1,242 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::TwoPole Class Reference

-

STK two-pole filter class. -More...

- -

#include <TwoPole.h>

-
-Inheritance diagram for stk::TwoPole:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

TwoPole (void)
 Default constructor creates a second-order pass-through filter.
~TwoPole ()
 Class destructor.
-void ignoreSampleRateChange (bool ignore=true)
 A function to enable/disable the automatic updating of class data when the STK sample rate changes.
-void setB0 (StkFloat b0)
 Set the b[0] coefficient value.
-void setA1 (StkFloat a1)
 Set the a[1] coefficient value.
-void setA2 (StkFloat a2)
 Set the a[2] coefficient value.
-void setCoefficients (StkFloat b0, StkFloat a1, StkFloat a2, bool clearState=false)
 Set all filter coefficients.
void setResonance (StkFloat frequency, StkFloat radius, bool normalize=false)
 Sets the filter coefficients for a resonance at frequency (in Hz).
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK two-pole filter class.

-

This class implements a two-pole digital filter. A method is provided for creating a resonance in the frequency response while maintaining a nearly constant filter gain.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void stk::TwoPole::setResonance (StkFloat  frequency,
StkFloat  radius,
bool  normalize = false 
)
-
-
- -

Sets the filter coefficients for a resonance at frequency (in Hz).

-

This method determines the filter coefficients corresponding to two complex-conjugate poles with the given frequency (in Hz) and radius from the z-plane origin. If normalize is true, the coefficients are then normalized to produce unity gain at frequency (the actual maximum filter gain tends to be slightly greater than unity when radius is not close to one). The resulting filter frequency response has a resonance at the given frequency. The closer the poles are to the unit-circle (radius close to one), the narrower the resulting resonance width. An unstable filter will result for radius >= 1.0. The frequency value should be between zero and half the sample rate. For a better resonance filter, use a BiQuad filter.

-
See also:
BiQuad filter class
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::TwoPole::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00107 {
-00108 #if defined(_STK_DEBUG_)
-00109   if ( channel >= frames.channels() ) {
-00110     oStream_ << "TwoPole::tick(): channel and StkFrames arguments are incompatible!";
-00111     handleError( StkError::FUNCTION_ARGUMENT );
-00112   }
-00113 #endif
-00114 
-00115   StkFloat *samples = &frames[channel];
-00116   unsigned int hop = frames.channels();
-00117   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00118     inputs_[0] = gain_ * *samples;
-00119     *samples = b_[0] * inputs_[0] - a_[1] * outputs_[1] - a_[2] * outputs_[2];
-00120     outputs_[2] = outputs_[1];
-00121     outputs_[1] = *samples;
-00122   }
-00123 
-00124   lastFrame_[0] = outputs_[1];
-00125   return frames;
-00126 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::TwoPole::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00129 {
-00130 #if defined(_STK_DEBUG_)
-00131   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00132     oStream_ << "TwoPole::tick(): channel and StkFrames arguments are incompatible!";
-00133     handleError( StkError::FUNCTION_ARGUMENT );
-00134   }
-00135 #endif
-00136 
-00137   StkFloat *iSamples = &iFrames[iChannel];
-00138   StkFloat *oSamples = &oFrames[oChannel];
-00139   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00140   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00141     inputs_[0] = gain_ * *iSamples;
-00142     *oSamples = b_[0] * inputs_[0] - a_[1] * outputs_[1] - a_[2] * outputs_[2];
-00143     outputs_[2] = outputs_[1];
-00144     outputs_[1] = *oSamples;
-00145   }
-00146 
-00147   lastFrame_[0] = outputs_[1];
-00148   return iFrames;
-00149 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoPole.png deleted file mode 100644 index fe523c105e63b6f82cbddc5837088b38e756dbb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmV*b34CFuI%TyEc>!*cWK@F=c29JN#;h?`p?Vy z!(?jJEtj5*9p?9%;tRy^U)SB1x37Fm%sHA27jup#^$A;vCt|IWCg9S#`_BO-5(U?={6A7sG#DcU#`R@-Z>zXfj;PIhu?Y zUy(IMiWDhQq)72W5z#FnxE6|E5s`Gih37sVX3?%VU9AVtnUx5nRG+5d{_0)!*2S}X zZn}#FLK|tW6^EI#+wWt=whga9v#_1xwOFK0(H@Dq$B>M!dJxO&LUfYR`Ppz002ovPDHLkV1jiF@XG)I diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero-members.html deleted file mode 100644 index 04823a0474..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::TwoZero Member List

This is the complete list of members for stk::TwoZero, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsIn(void) const stk::Filter [inline]
channelsOut(void) const stk::Filter [inline]
clear(void)stk::Filter [inline, virtual]
Filter(void)stk::Filter [inline]
getGain(void) const stk::Filter [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::TwoZero [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Filter [inline]
lastOut(void) const stk::TwoZero [inline]
phaseDelay(StkFloat frequency)stk::Filter [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
setB0(StkFloat b0)stk::TwoZero [inline]
setB1(StkFloat b1)stk::TwoZero [inline]
setB2(StkFloat b2)stk::TwoZero [inline]
setCoefficients(StkFloat b0, StkFloat b1, StkFloat b2, bool clearState=false)stk::TwoZero
setGain(StkFloat gain)stk::Filter [inline]
setNotch(StkFloat frequency, StkFloat radius)stk::TwoZero
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(StkFloat input)stk::TwoZero [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::TwoZero [inline, virtual]
tick(StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)stk::TwoZero [inline]
TwoZero()stk::TwoZero
~Stk(void)stk::Stk [protected, virtual]
~TwoZero()stk::TwoZero
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero.html deleted file mode 100644 index b65f657d55..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero.html +++ /dev/null @@ -1,235 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::TwoZero Class Reference

-

STK two-zero filter class. -More...

- -

#include <TwoZero.h>

-
-Inheritance diagram for stk::TwoZero:
-
-
- - -stk::Filter -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

TwoZero ()
 Default constructor creates a second-order pass-through filter.
~TwoZero ()
 Class destructor.
-void ignoreSampleRateChange (bool ignore=true)
 A function to enable/disable the automatic updating of class data when the STK sample rate changes.
-void setB0 (StkFloat b0)
 Set the b[0] coefficient value.
-void setB1 (StkFloat b1)
 Set the b[1] coefficient value.
-void setB2 (StkFloat b2)
 Set the b[2] coefficient value.
-void setCoefficients (StkFloat b0, StkFloat b1, StkFloat b2, bool clearState=false)
 Set all filter coefficients.
void setNotch (StkFloat frequency, StkFloat radius)
 Sets the filter coefficients for a "notch" at frequency (in Hz).
-StkFloat lastOut (void) const
 Return the last computed output value.
-StkFloat tick (StkFloat input)
 Input one sample to the filter and return one output.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.
StkFramestick (StkFrames &iFrames, StkFrames &oFrames, unsigned int iChannel=0, unsigned int oChannel=0)
 Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.
-

Detailed Description

-

STK two-zero filter class.

-

This class implements a two-zero digital filter. A method is provided for creating a "notch" in the frequency response while maintaining a constant filter gain.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void stk::TwoZero::setNotch (StkFloat  frequency,
StkFloat  radius 
)
-
-
- -

Sets the filter coefficients for a "notch" at frequency (in Hz).

-

This method determines the filter coefficients corresponding to two complex-conjugate zeros with the given frequency (in Hz) and radius from the z-plane origin. The coefficients are then normalized to produce a maximum filter gain of one (independent of the filter gain parameter). The resulting filter frequency response has a "notch" or anti-resonance at the given frequency. The closer the zeros are to the unit-circle (radius close to or equal to one), the narrower the resulting notch width. The frequency value should be between zero and half the sample rate. The radius value should be positive.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::TwoZero::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs.

-

The StkFrames argument reference is returned. The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Filter.

- -

00103 {
-00104 #if defined(_STK_DEBUG_)
-00105   if ( channel >= frames.channels() ) {
-00106     oStream_ << "TwoZero::tick(): channel and StkFrames arguments are incompatible!";
-00107     handleError( StkError::FUNCTION_ARGUMENT );
-00108   }
-00109 #endif
-00110 
-00111   StkFloat *samples = &frames[channel];
-00112   unsigned int hop = frames.channels();
-00113   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00114     inputs_[0] = gain_ * *samples;
-00115     *samples = b_[2] * inputs_[2] + b_[1] * inputs_[1] + b_[0] * inputs_[0];
-00116     inputs_[2] = inputs_[1];
-00117     inputs_[1] = inputs_[0];
-00118   }
-00119 
-00120   lastFrame_[0] = *(samples-hop);
-00121   return frames;
-00122 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StkFrames & stk::TwoZero::tick (StkFrames iFrames,
StkFrames oFrames,
unsigned int  iChannel = 0,
unsigned int  oChannel = 0 
) [inline]
-
-
- -

Take a channel of the iFrames object as inputs to the filter and write outputs to the oFrames object.

-

The iFrames object reference is returned. Each channel argument must be less than the number of channels in the corresponding StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00125 {
-00126 #if defined(_STK_DEBUG_)
-00127   if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) {
-00128     oStream_ << "TwoZero::tick(): channel and StkFrames arguments are incompatible!";
-00129     handleError( StkError::FUNCTION_ARGUMENT );
-00130   }
-00131 #endif
-00132 
-00133   StkFloat *iSamples = &iFrames[iChannel];
-00134   StkFloat *oSamples = &oFrames[oChannel];
-00135   unsigned int iHop = iFrames.channels(), oHop = oFrames.channels();
-00136   for ( unsigned int i=0; i<iFrames.frames(); i++, iSamples += iHop, oSamples += oHop ) {
-00137     inputs_[0] = gain_ * *iSamples;
-00138     *oSamples = b_[2] * inputs_[2] + b_[1] * inputs_[1] + b_[0] * inputs_[0];
-00139     inputs_[2] = inputs_[1];
-00140     inputs_[1] = inputs_[0];
-00141   }
-00142 
-00143   lastFrame_[0] = *(oSamples-oHop);
-00144   return iFrames;
-00145 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1TwoZero.png deleted file mode 100644 index 96ba080148db526220215a6d8e281711bbce72c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmeAS@N?(olHy`uVBq!ia0vp^Awb;0!3-q*JZ+W(DTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J8kJzX3_Dj46+4eW1G;AxpT>%;&0Pqq#l zMNcfs&UZGtYs}tSS0dB9{v}68$%)sFFaA3#GMTd*c+|5VomtJs>cU{*ARBY}^o48u zM>yOVw|=S3So`hh+j-}{)=#isvyMs5aqpkT!1GUT@1OYld+(}GSC^$t@&9~Ry(B&3 zh^tzaVz`bIoqI$e+d;?;kv} zoh$J*X5TFnlT*9Sm(RZtyHIfci?1ilzx@-LRm@<@1R_{=P5ceD+Uv!)02Y@+zbA3< zwkzG-S!G$7FwfCDDejjf*OCx - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::UdpSocket Member List

This is the complete list of members for stk::UdpSocket, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
close(int socket)stk::Socket [static]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
id(void) const stk::Socket [inline]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
isValid(int socket)stk::Socket [inline, static]
port(void) const stk::Socket [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
readBuffer(void *buffer, long bufferSize, int flags=0)stk::UdpSocket [virtual]
stk::Socket::readBuffer(int socket, void *buffer, long bufferSize, int flags)stk::Socket [static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setAddress(struct sockaddr_in *address, int port=2006, std::string hostname="localhost")stk::UdpSocket [protected]
setBlocking(int socket, bool enable)stk::Socket [static]
setDestination(int port=2006, std::string hostname="localhost")stk::UdpSocket
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Socket()stk::Socket
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
UdpSocket(int port=2006)stk::UdpSocket
writeBuffer(const void *buffer, long bufferSize, int flags=0)stk::UdpSocket [virtual]
stk::Socket::writeBuffer(int socket, const void *buffer, long bufferSize, int flags)stk::Socket [static]
writeBufferTo(const void *buffer, long bufferSize, int port, std::string hostname="localhost", int flags=0)stk::UdpSocket
~Socket()stk::Socket [virtual]
~Stk(void)stk::Stk [protected, virtual]
~UdpSocket()stk::UdpSocket
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1UdpSocket.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1UdpSocket.html deleted file mode 100644 index 0d30edfdfe..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1UdpSocket.html +++ /dev/null @@ -1,199 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::UdpSocket Class Reference

-

STK UDP socket server/client class. -More...

- -

#include <UdpSocket.h>

-
-Inheritance diagram for stk::UdpSocket:
-
-
- - -stk::Socket -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - -

Public Member Functions

 UdpSocket (int port=2006)
 Default constructor creates a local UDP socket on port 2006 (or the specified port number).
~UdpSocket ()
 The class destructor closes the socket instance.
void setDestination (int port=2006, std::string hostname="localhost")
 Set the address for subsequent outgoing data sent via the writeBuffer() function.
int writeBuffer (const void *buffer, long bufferSize, int flags=0)
 Send a buffer to the address specified with the setDestination() function. Returns the number of bytes written or -1 if an error occurs.
-int readBuffer (void *buffer, long bufferSize, int flags=0)
 Read an input buffer, up to length bufferSize. Returns the number of bytes read or -1 if an error occurs.
-int writeBufferTo (const void *buffer, long bufferSize, int port, std::string hostname="localhost", int flags=0)
 Write a buffer to the specified socket. Returns the number of bytes written or -1 if an error occurs.

Protected Member Functions

void setAddress (struct sockaddr_in *address, int port=2006, std::string hostname="localhost")
 A protected function for use in writing a socket address structure.
-

Detailed Description

-

STK UDP socket server/client class.

-

This class provides a uniform cross-platform UDP socket server/client interface. Methods are provided for reading or writing data buffers. The constructor creates a UDP socket and binds it to the specified port. Note that only one socket can be bound to a given port on the same machine.

-

UDP sockets provide unreliable, connection-less service. Messages can be lost, duplicated, or received out of order. That said, data transmission tends to be faster than with TCP connections and datagrams are not potentially combined by the underlying system.

-

The user is responsible for checking the values returned by the read/write methods. Values less than or equal to zero indicate the occurence of an error.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::UdpSocket::UdpSocket (int  port = 2006 ) 
-
-
- -

Default constructor creates a local UDP socket on port 2006 (or the specified port number).

-

An StkError will be thrown if a socket error occurs during instantiation.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void stk::UdpSocket::setDestination (int  port = 2006,
std::string  hostname = "localhost" 
)
-
-
- -

Set the address for subsequent outgoing data sent via the writeBuffer() function.

-

An StkError will be thrown if the host is unknown.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int stk::UdpSocket::writeBuffer (const void *  buffer,
long  bufferSize,
int  flags = 0 
) [virtual]
-
-
- -

Send a buffer to the address specified with the setDestination() function. Returns the number of bytes written or -1 if an error occurs.

-

This function will fail if the default address (set with setDestination()) is invalid or has not been specified.

- -

Implements stk::Socket.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void stk::UdpSocket::setAddress (struct sockaddr_in *  address,
int  port = 2006,
std::string  hostname = "localhost" 
) [protected]
-
-
- -

A protected function for use in writing a socket address structure.

-

An StkError will be thrown if the host is unknown.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1UdpSocket.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1UdpSocket.png deleted file mode 100644 index 3d66c0b01b726a9487552e6b7071fe69a02397ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VG9P)s}!2QUbK zMn{i5)PbAMywqciiM zs*)M4X{)La^F2eIy6BNDt+lc^ej~kS%UEgdxrqXHCcO`FC_6X8>-3ep9zlFERr9#DrcSLC&a;s?cW9h#7H7p7fTP>8hH%pQ`G0H)u68x~_gM%wg$grl!!; zo$ndyzpF>KwARYv_>J^ZBKc6glt?~S|LQYCojP^u)TvXazM+oDmJqm8>RaeYu8;Q5 z#Q|K`bavj=ZFE)#Qj!ze1~y0IfOTXG^&-zf9jDhXD`C6sR{vxnI<2|r%zb@UmoIFB zO}6?){gc!;dXt%H{T%Ijt@xm-HZ!mEL9|K!2#oT6t*X!a?VL9=_RQ!C`U#K?n=@mg t{>;=>xVkU=R+oR)Kcn;g{ylnR`vZ8XCxn*sln002ovPDHLkV1mw=68iuE diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D-members.html deleted file mode 100644 index dba818300e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D-members.html +++ /dev/null @@ -1,58 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Vector3D Member List

This is the complete list of members for stk::Vector3D, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
getLength(void)stk::Vector3D [inline]
getX(void)stk::Vector3D [inline]
getY(void)stk::Vector3D [inline]
getZ(void)stk::Vector3D [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setX(StkFloat x)stk::Vector3D [inline]
setXYZ(StkFloat x, StkFloat y, StkFloat z)stk::Vector3D [inline]
setY(StkFloat y)stk::Vector3D [inline]
setZ(StkFloat z)stk::Vector3D [inline]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
Vector3D(StkFloat x=0.0, StkFloat y=0.0, StkFloat z=0.0)stk::Vector3D [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D.html deleted file mode 100644 index 210b363620..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D.html +++ /dev/null @@ -1,78 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Vector3D Class Reference

-

STK 3D vector class. -More...

- -

#include <Vector3D.h>

-
-Inheritance diagram for stk::Vector3D:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Vector3D (StkFloat x=0.0, StkFloat y=0.0, StkFloat z=0.0)
 Default constructor taking optional initial X, Y, and Z values.
-StkFloat getX (void)
 Get the current X value.
-StkFloat getY (void)
 Get the current Y value.
-StkFloat getZ (void)
 Get the current Z value.
-StkFloat getLength (void)
 Calculate the vector length.
-void setXYZ (StkFloat x, StkFloat y, StkFloat z)
 Set the X, Y, and Z values simultaniously.
-void setX (StkFloat x)
 Set the X value.
-void setY (StkFloat y)
 Set the Y value.
-void setZ (StkFloat z)
 Set the Z value.
-

Detailed Description

-

STK 3D vector class.

-

This class implements a three-dimensional vector.

-

by Perry R. Cook, 1995-2012.

-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Vector3D.png deleted file mode 100644 index 3acc0e84c41bbdc5a720535160f10788ff0a6ff2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^;XoX~!3-p$g(aT>DTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J7@JY5_^Dj46+eaP3Wz|&&sQ}N&Z9>3SZ zj+{qUkBiQlZN0U=VDFCoiJv<+xb`c2Pt!|k*~w<$5&v}2vuQgWdKh?|{eFFsT(^#E z<4sE=@5|mXj5n&Tma84HmThCWc}(m2D}x!gH}Snqf6~5mXD453mX-PJXTKZo{C{Hg z_x${hl4lQp@6`O+Fn0%#*t?_uGxN?Tlf3mnL>}J{mxj~VPW;srKN$1;bL?|F#sw0u zXUCYdJ`H=yv~#1Qw`XLK-Ie)K>qCQ9->G3%RX$&Ozv{x0Ew9b57cE^OzUcA0*?!ko z+wyL|GkxZog0+0M*LmJVELpjaeVWAU-xKAV_OwfdPubQhf5qyWj`9Cbe;wXk-eLEV ZX~llwsGS-%DZubz@O1TaS?83{1OUeewW - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::VoicForm Member List

This is the complete list of members for stk::VoicForm, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::VoicForm
controlChange(int number, StkFloat value)stk::VoicForm [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::VoicForm [inline, virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::VoicForm [virtual]
printErrors(bool status)stk::Stk [inline, static]
quiet(void)stk::VoicForm
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFilterSweepRate(unsigned int whichOne, StkFloat rate)stk::VoicForm
setFrequency(StkFloat frequency)stk::VoicForm [virtual]
setPhoneme(const char *phoneme)stk::VoicForm
setPitchSweepRate(StkFloat rate)stk::VoicForm [inline]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
setUnVoiced(StkFloat nGain)stk::VoicForm [inline]
setVoiced(StkFloat vGain)stk::VoicForm [inline]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
speak(void)stk::VoicForm [inline]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::VoicForm [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::VoicForm [inline, virtual]
VoicForm(void)stk::VoicForm
~Stk(void)stk::Stk [protected, virtual]
~VoicForm(void)stk::VoicForm
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1VoicForm.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1VoicForm.html deleted file mode 100644 index c92bf4cfd7..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1VoicForm.html +++ /dev/null @@ -1,189 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::VoicForm Class Reference

-

Four formant synthesis instrument. -More...

- -

#include <VoicForm.h>

-
-Inheritance diagram for stk::VoicForm:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 VoicForm (void)
 Class constructor.
~VoicForm (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-bool setPhoneme (const char *phoneme)
 Set instrument parameters for the given phoneme. Returns false if phoneme not found.
-void setVoiced (StkFloat vGain)
 Set the voiced component gain.
-void setUnVoiced (StkFloat nGain)
 Set the unvoiced component gain.
-void setFilterSweepRate (unsigned int whichOne, StkFloat rate)
 Set the sweep rate for a particular formant filter (0-3).
-void setPitchSweepRate (StkFloat rate)
 Set voiced component pitch sweep rate.
-void speak (void)
 Start the voice.
-void quiet (void)
 Stop the voice.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

Four formant synthesis instrument.

-

This instrument contains an excitation singing wavetable (looping wave with random and periodic vibrato, smoothing on frequency, etc.), excitation noise, and four sweepable complex resonances.

-

Measured formant data is included, and enough data is there to support either parallel or cascade synthesis. In the floating point case cascade synthesis is the most natural so that's what you'll find here.

-

Control Change Numbers:

-
    -
  • Voiced/Unvoiced Mix = 2
  • -
  • Vowel/Phoneme Selection = 4
  • -
  • Vibrato Frequency = 11
  • -
  • Vibrato Gain = 1
  • -
  • Loudness (Spectral Tilt) = 128
  • -
-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::VoicForm::VoicForm (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::VoicForm::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00133 {
-00134   unsigned int nChannels = lastFrame_.channels();
-00135 #if defined(_STK_DEBUG_)
-00136   if ( channel > frames.channels() - nChannels ) {
-00137     oStream_ << "VoicForm::tick(): channel and StkFrames arguments are incompatible!";
-00138     handleError( StkError::FUNCTION_ARGUMENT );
-00139   }
-00140 #endif
-00141 
-00142   StkFloat *samples = &frames[channel];
-00143   unsigned int j, hop = frames.channels() - nChannels;
-00144   if ( nChannels == 1 ) {
-00145     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00146       *samples++ = tick();
-00147   }
-00148   else {
-00149     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00150       *samples++ = tick();
-00151       for ( j=1; j<nChannels; j++ )
-00152         *samples++ = lastFrame_[j];
-00153     }
-00154   }
-00155 
-00156   return frames;
-00157 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1VoicForm.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1VoicForm.png deleted file mode 100644 index 834a8025a5215ee13c52fc310bacac381693fc6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515 zcmeAS@N?(olHy`uVBq!ia0vp^5kTC*!3-orO7Ca_DTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GQ4-`A43q|gtEWPY7#J8QdAc};R4~4sdpGZ}0#B=D-;v+;pY#mu z+1%Jx?@qJI({9YQdvL=y@9@)G)4f>SKOBrda1`{qcPUe;2?{z4~W>a<@Cuzs(Nl8 zuOP>THr8K)9(_tn&m7bY7T) zw(ZVosMd7XEiUh$mjzn z+uvNA@-BRDY3)5d7KJPSUAeER?iEwE$ll{)5XAF9X8xMpw{LPqEvb;*aq-9OV-eXk u>c9XwxnkD6lA}&scG?_u1~*RbW7vN{HMoO=Z4xlX7(8A5T-G@yGywphoZLJB diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer-members.html deleted file mode 100644 index 6703acea5d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer-members.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Voicer Member List

This is the complete list of members for stk::Voicer, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addInstrument(Instrmnt *instrument, int group=0)stk::Voicer
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Voicer [inline]
controlChange(int number, StkFloat value, int group=0)stk::Voicer
controlChange(long tag, int number, StkFloat value)stk::Voicer
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::Voicer [inline]
lastOut(unsigned int channel=0)stk::Voicer [inline]
noteOff(StkFloat noteNumber, StkFloat amplitude, int group=0)stk::Voicer
noteOff(long tag, StkFloat amplitude)stk::Voicer
noteOn(StkFloat noteNumber, StkFloat amplitude, int group=0)stk::Voicer
pitchBend(StkFloat value, int group=0)stk::Voicer
pitchBend(long tag, StkFloat value)stk::Voicer
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeInstrument(Instrmnt *instrument)stk::Voicer
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat noteNumber, int group=0)stk::Voicer
setFrequency(long tag, StkFloat noteNumber)stk::Voicer
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
silence(void)stk::Voicer
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Voicer [inline]
tick(StkFrames &frames, unsigned int channel=0)stk::Voicer [inline]
Voicer(StkFloat decayTime=0.2)stk::Voicer
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer.html deleted file mode 100644 index a754f08c96..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer.html +++ /dev/null @@ -1,435 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Voicer Class Reference

-

STK voice manager class. -More...

- -

#include <Voicer.h>

-
-Inheritance diagram for stk::Voicer:
-
-
- - -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

Voicer (StkFloat decayTime=0.2)
 Class constructor taking an optional note decay time (in seconds).
void addInstrument (Instrmnt *instrument, int group=0)
 Add an instrument with an optional group number to the voice manager.
void removeInstrument (Instrmnt *instrument)
 Remove the given instrument pointer from the voice manager's control.
long noteOn (StkFloat noteNumber, StkFloat amplitude, int group=0)
 Initiate a noteOn event with the given note number and amplitude and return a unique note tag.
void noteOff (StkFloat noteNumber, StkFloat amplitude, int group=0)
 Send a noteOff to all voices having the given noteNumber and optional group (default group = 0).
void noteOff (long tag, StkFloat amplitude)
 Send a noteOff to the voice with the given note tag.
void setFrequency (StkFloat noteNumber, int group=0)
 Send a frequency update message to all voices assigned to the optional group argument (default group = 0).
void setFrequency (long tag, StkFloat noteNumber)
 Send a frequency update message to the voice with the given note tag.
-void pitchBend (StkFloat value, int group=0)
 Send a pitchBend message to all voices assigned to the optional group argument (default group = 0).
-void pitchBend (long tag, StkFloat value)
 Send a pitchBend message to the voice with the given note tag.
-void controlChange (int number, StkFloat value, int group=0)
 Send a controlChange to all instruments assigned to the optional group argument (default group = 0).
-void controlChange (long tag, int number, StkFloat value)
 Send a controlChange to the voice with the given note tag.
-void silence (void)
 Send a noteOff message to all existing voices.
-unsigned int channelsOut (void) const
 Return the current number of output channels.
-const StkFrameslastFrame (void) const
 Return an StkFrames reference to the last output sample frame.
StkFloat lastOut (unsigned int channel=0)
 Return the specified channel value of the last computed frame.
StkFloat tick (unsigned int channel=0)
 Mix one sample frame of all sounding voices and return the specified channel value.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill the StkFrames argument with computed frames and return the same reference.
-

Detailed Description

-

STK voice manager class.

-

This class can be used to manage a group of STK instrument classes. Individual voices can be controlled via unique note tags. Instrument groups can be controlled by group number.

-

A previously constructed STK instrument class is linked with a voice manager using the addInstrument() function. An optional group number argument can be specified to the addInstrument() function as well (default group = 0). The voice manager does not delete any instrument instances ... it is the responsibility of the user to allocate and deallocate all instruments.

-

The tick() function returns the mix of all sounding voices. Each noteOn returns a unique tag (credits to the NeXT MusicKit), so you can send control changes to specific voices within an ensemble. Alternately, control changes can be sent to all voices in a given group.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Voicer::addInstrument (Instrmnt instrument,
int  group = 0 
)
-
-
- -

Add an instrument with an optional group number to the voice manager.

-

A set of instruments can be grouped by group number and controlled via the functions that take a group number argument.

- -
-
- -
-
- - - - - - - - - -
void stk::Voicer::removeInstrument (Instrmnt instrument ) 
-
-
- -

Remove the given instrument pointer from the voice manager's control.

-

It is important that any instruments which are to be deleted by the user while the voice manager is running be first removed from the manager's control via this function!!

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
long stk::Voicer::noteOn (StkFloat  noteNumber,
StkFloat  amplitude,
int  group = 0 
)
-
-
- -

Initiate a noteOn event with the given note number and amplitude and return a unique note tag.

-

Send the noteOn message to the first available unused voice. If all voices are sounding, the oldest voice is interrupted and sent the noteOn message. If the optional group argument is non-zero, only voices in that group are used. If no voices are found for a specified non-zero group value, the function returns -1. The amplitude value should be in the range 0.0 - 128.0.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void stk::Voicer::noteOff (StkFloat  noteNumber,
StkFloat  amplitude,
int  group = 0 
)
-
-
- -

Send a noteOff to all voices having the given noteNumber and optional group (default group = 0).

-

The amplitude value should be in the range 0.0 - 128.0.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Voicer::noteOff (long  tag,
StkFloat  amplitude 
)
-
-
- -

Send a noteOff to the voice with the given note tag.

-

The amplitude value should be in the range 0.0 - 128.0.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Voicer::setFrequency (StkFloat  noteNumber,
int  group = 0 
)
-
-
- -

Send a frequency update message to all voices assigned to the optional group argument (default group = 0).

-

The noteNumber argument corresponds to a MIDI note number, though it is a floating-point value and can range beyond the normal 0-127 range.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void stk::Voicer::setFrequency (long  tag,
StkFloat  noteNumber 
)
-
-
- -

Send a frequency update message to the voice with the given note tag.

-

The noteNumber argument corresponds to a MIDI note number, though it is a floating-point value and can range beyond the normal 0-127 range.

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::Voicer::lastOut (unsigned int  channel = 0 )  [inline]
-
-
- -

Return the specified channel value of the last computed frame.

-

The channel argument must be less than the number of output channels, which can be determined with the channelsOut() function (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

-
See also:
lastFrame()
- -

00166 {
-00167 #if defined(_STK_DEBUG_)
-00168   if ( channel >= lastFrame_.channels() ) {
-00169     oStream_ << "Voicer::lastOut(): channel argument is invalid!";
-00170     handleError( StkError::FUNCTION_ARGUMENT );
-00171   }
-00172 #endif
-00173 
-00174   return lastFrame_[channel];
-00175 }
-

- -
-
- -
-
- - - - - - - - - -
StkFloat stk::Voicer::tick (unsigned int  channel = 0 )  [inline]
-
-
- -

Mix one sample frame of all sounding voices and return the specified channel value.

-

The channel argument must be less than the number of output channels, which can be determined with the channelsOut() function (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

00179 {
-00180   unsigned int j;
-00181   for ( j=0; j<lastFrame_.channels(); j++ ) lastFrame_[j] = 0.0;
-00182   for ( unsigned int i=0; i<voices_.size(); i++ ) {
-00183     if ( voices_[i].sounding != 0 ) {
-00184       voices_[i].instrument->tick();
-00185       for ( j=0; j<voices_[i].instrument->channelsOut(); j++ ) lastFrame_[j] += voices_[i].instrument->lastOut( j );
-00186     }
-00187     if ( voices_[i].sounding < 0 )
-00188       voices_[i].sounding++;
-00189     if ( voices_[i].sounding == 0 )
-00190       voices_[i].noteNumber = -1;
-00191   }
-00192 
-00193   return lastFrame_[channel];
-00194 }
-

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Voicer::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline]
-
-
- -

Fill the StkFrames argument with computed frames and return the same reference.

-

The number of channels in the StkFrames argument must equal the number of channels in the file data. However, this is only checked if _STK_DEBUG_ is defined during compilation, in which case an incompatibility will trigger an StkError exception. If no file data is loaded, the function does nothing (a warning will be issued if _STK_DEBUG_ is defined during compilation).

- -

00197 {
-00198   unsigned int nChannels = lastFrame_.channels();
-00199 #if defined(_STK_DEBUG_)
-00200   if ( channel > frames.channels() - nChannels ) {
-00201     oStream_ << "Voicer::tick(): channel and StkFrames arguments are incompatible!";
-00202     handleError( StkError::FUNCTION_ARGUMENT );
-00203   }
-00204 #endif
-00205 
-00206   StkFloat *samples = &frames[channel];
-00207   unsigned int j, hop = frames.channels() - nChannels;
-00208   for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00209     tick();
-00210     for ( j=0; j<nChannels; j++ )
-00211       *samples++ = lastFrame_[j];
-00212   }
-00213 
-00214   return frames;
-00215 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Voicer.png deleted file mode 100644 index 620ce90cc72c6ac7663d57889f904932c3e3ee22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^?m!&C!3-p8_Rin~QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)0mZ&~x;TbZFut98cij;MjuzS3KmPUC=$-1< zcz21{@+Iq%*;fMh8C^)rzdcp>?JLQ^Ir5e-WYc&LOq^e|AZiBl7rp~eE}Ye>e{>@F zqPqHyVpqOGjf3;1|EoCWx9<*%mhq{L`{vlS*PfkjzCK|7N%8W?UpY^I`E^e|?fL6I z=aCMXU-suDEElMN2%U4UpM}nOB(mJ%sOGuf7AHE}rcCPo+|itN?fYJ>=jnEjU0yLp zE&hH$jG^juMW^S4num8@CbVXp_77dE_qBudp5fPsbDK8)zGbmzfAIpp>vre&?JJtb vS@qYl=gj-_2Z2^+yn1Y~9%T8Ulb!Zy{QPfkuUfYU7y=BQu6{1-oD!M - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Whistle Member List

This is the complete list of members for stk::Whistle, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::Whistle
controlChange(int number, StkFloat value)stk::Whistle [virtual]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
noteOff(StkFloat amplitude)stk::Whistle [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Whistle [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setFrequency(StkFloat frequency)stk::Whistle [virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
startBlowing(StkFloat amplitude, StkFloat rate)stk::Whistle
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
stopBlowing(StkFloat rate)stk::Whistle
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Whistle [virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Whistle [inline, virtual]
Whistle(void)stk::Whistle
~Stk(void)stk::Stk [protected, virtual]
~Whistle(void)stk::Whistle
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Whistle.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Whistle.html deleted file mode 100644 index d2789579f1..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Whistle.html +++ /dev/null @@ -1,173 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Whistle Class Reference

-

STK police/referee whistle instrument class. -More...

- -

#include <Whistle.h>

-
-Inheritance diagram for stk::Whistle:
-
-
- - -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 Whistle (void)
 Class constructor.
~Whistle (void)
 Class destructor.
-void clear (void)
 Reset and clear all internal state.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void startBlowing (StkFloat amplitude, StkFloat rate)
 Apply breath velocity to instrument with given amplitude and rate of increase.
-void stopBlowing (StkFloat rate)
 Decrease breath velocity with given rate of decrease.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-void noteOff (StkFloat amplitude)
 Stop a note with the given amplitude (speed of decay).
-void controlChange (int number, StkFloat value)
 Perform the control change specified by number and value (0.0 - 128.0).
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK police/referee whistle instrument class.

-

This class implements a hybrid physical/spectral model of a police whistle (a la Cook).

-

Control Change Numbers:

-
    -
  • Noise Gain = 4
  • -
  • Fipple Modulation Frequency = 11
  • -
  • Fipple Modulation Gain = 1
  • -
  • Blowing Frequency Modulation = 2
  • -
  • Volume = 128
  • -
-

by Perry R. Cook 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Whistle::Whistle (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Whistle::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::Instrmnt.

- -

00101 {
-00102   unsigned int nChannels = lastFrame_.channels();
-00103 #if defined(_STK_DEBUG_)
-00104   if ( channel > frames.channels() - nChannels ) {
-00105     oStream_ << "Whistle::tick(): channel and StkFrames arguments are incompatible!";
-00106     handleError( StkError::FUNCTION_ARGUMENT );
-00107   }
-00108 #endif
-00109 
-00110   StkFloat *samples = &frames[channel];
-00111   unsigned int j, hop = frames.channels() - nChannels;
-00112   if ( nChannels == 1 ) {
-00113     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00114       *samples++ = tick();
-00115   }
-00116   else {
-00117     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00118       *samples++ = tick();
-00119       for ( j=1; j<nChannels; j++ )
-00120         *samples++ = lastFrame_[j];
-00121     }
-00122   }
-00123 
-00124   return frames;
-00125 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Whistle.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Whistle.png deleted file mode 100644 index a1a1dbbe11dfd8865240ca41cee06b47a66c2ba2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmeAS@N?(olHy`uVBq!ia0vp^K0w^T!3-p;4F2v0QW60^A+G=b{|7Sv|35H)e!>JG z3ycpOI8c4){}UjWqa?^L7$^+}S5Ji)F)%PTd%8G=R4~51dvH^;0uSqjI~Irk*MEu@ zXmp9%*juZox7Aqnz`+Std8ytxn=+%6r*%7uuH#P-`p4niAA6V~lp$~7-;RgDYu@t9 z3OTbzRmg4*tqZi?TsbfQ(wudhr1!P_G*M^WG3{B!*;PB^7`%(^|AjHgKilm2X8(pW z;di67yFb_UO`WtNHEF3z*2){rt37)p43my@2nq{M)ZKV;S!VBz>k=Ukcdt8I*Kxmv zaTUWH_D~H2KJ7P)FVu>ZdL4hY!dGthVF%fjj<>fRXHGjd!Ta`p{`R$ZF8(lyPtL92 z{hTRhpg%w1V@6+Q+yR~bzd!n4-+p+0Lx8W{izDxj8pW5MuU))8QZ?}O5iidxK^xh_ zCqt}PR#Q^)$Z6VhTm73YTOs3@^{uxvX8aWVmX&sZLGbtbp4;U-YpFpV!Y1emrZMc~ - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Wurley Member List

This is the complete list of members for stk::Wurley, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::Instrmnt [inline]
clear(void)stk::FM
controlChange(int number, StkFloat value)stk::FM [virtual]
FM(unsigned int operators=4)stk::FM
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
Instrmnt(void)stk::Instrmnt [inline]
keyOff(void)stk::FM
keyOn(void)stk::FM
lastFrame(void) const stk::Instrmnt [inline]
lastOut(unsigned int channel=0)stk::Instrmnt [inline]
loadWaves(const char **filenames)stk::FM
noteOff(StkFloat amplitude)stk::FM [virtual]
noteOn(StkFloat frequency, StkFloat amplitude)stk::Wurley [virtual]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setControl1(StkFloat cVal)stk::FM [inline]
setControl2(StkFloat cVal)stk::FM [inline]
setFrequency(StkFloat frequency)stk::Wurley [virtual]
setGain(unsigned int waveIndex, StkFloat gain)stk::FM
setModulationDepth(StkFloat mDepth)stk::FM [inline]
setModulationSpeed(StkFloat mSpeed)stk::FM [inline]
setRatio(unsigned int waveIndex, StkFloat ratio)stk::FM
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)stk::Wurley [inline, virtual]
tick(StkFrames &frames, unsigned int channel=0)stk::Wurley [inline, virtual]
Wurley(void)stk::Wurley
~FM(void)stk::FM [virtual]
~Stk(void)stk::Stk [protected, virtual]
~Wurley(void)stk::Wurley
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Wurley.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Wurley.html deleted file mode 100644 index 8a85be01ad..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Wurley.html +++ /dev/null @@ -1,163 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Wurley Class Reference

-

STK Wurlitzer electric piano FM synthesis instrument. -More...

- -

#include <Wurley.h>

-
-Inheritance diagram for stk::Wurley:
-
-
- - -stk::FM -stk::Instrmnt -stk::Stk - -
-
- -

List of all members.

- - - - - - - - - - - - - - -

Public Member Functions

 Wurley (void)
 Class constructor.
~Wurley (void)
 Class destructor.
-void setFrequency (StkFloat frequency)
 Set instrument parameters for a particular frequency.
-void noteOn (StkFloat frequency, StkFloat amplitude)
 Start a note with the given frequency and amplitude.
-StkFloat tick (unsigned int channel=0)
 Compute and return one output sample.
StkFramestick (StkFrames &frames, unsigned int channel=0)
 Fill a channel of the StkFrames object with computed outputs.
-

Detailed Description

-

STK Wurlitzer electric piano FM synthesis instrument.

-

This class implements two simple FM Pairs summed together, also referred to as algorithm 5 of the TX81Z.

-
    Algorithm 5 is :  4->3--\
-                             + --> Out
-                      2->1--/
-

Control Change Numbers:

-
    -
  • Modulator Index One = 2
  • -
  • Crossfade of Outputs = 4
  • -
  • LFO Speed = 11
  • -
  • LFO Depth = 1
  • -
  • ADSR 2 & 4 Target = 128
  • -
-

The basic Chowning/Stanford FM patent expired in 1995, but there exist follow-on patents, mostly assigned to Yamaha. If you are of the type who should worry about this (making money) worry away.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - -
stk::Wurley::Wurley (void  ) 
-
-
- -

Class constructor.

-

An StkError will be thrown if the rawwave path is incorrectly set.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
StkFrames & stk::Wurley::tick (StkFrames frames,
unsigned int  channel = 0 
) [inline, virtual]
-
-
- -

Fill a channel of the StkFrames object with computed outputs.

-

The channel argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.

- -

Implements stk::FM.

- -

00100 {
-00101   unsigned int nChannels = lastFrame_.channels();
-00102 #if defined(_STK_DEBUG_)
-00103   if ( channel > frames.channels() - nChannels ) {
-00104     oStream_ << "Wurley::tick(): channel and StkFrames arguments are incompatible!";
-00105     handleError( StkError::FUNCTION_ARGUMENT );
-00106   }
-00107 #endif
-00108 
-00109   StkFloat *samples = &frames[channel];
-00110   unsigned int j, hop = frames.channels() - nChannels;
-00111   if ( nChannels == 1 ) {
-00112     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
-00113       *samples++ = tick();
-00114   }
-00115   else {
-00116     for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
-00117       *samples++ = tick();
-00118       for ( j=1; j<nChannels; j++ )
-00119         *samples++ = lastFrame_[j];
-00120     }
-00121   }
-00122 
-00123   return frames;
-00124 }
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Wurley.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1Wurley.png deleted file mode 100644 index 2f5b61b2d44d31570915b3fa685a45962a4b7e72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-61ZP)6jhe0V{2|Tds&>Oim``)jfU`91@2Z>o z4QOfh@{b1iFrQ6g{|n1})$NV4dEK95r6g*ZSSg8GD)!)R5+g>87%^hRL`39D9CB&e zAoeu|Rrpgk;(3Vw5(cOOa2`~lfSp#fABFZ=)JrB-XWPa0)J)Ww8f@Fnc)*%ravA&2 z>9Cb6jZgD6Hm3J5pXLqo@*6Cc=APyO*7E4(zpo#~Utyt}e9(#gE|&SKd+r;3&nk&p zCRR$KmWn;No5Y9_BSwrEF%c2D5{F!xHi)HSP=!4O028xw=h#5)pA8I91>n3-v1&jS z3VYfnYwQ4PhFQ@{c8padV)nK}J>N9IruiLaYPM*AIS$e^)d}CPBa9C^v2-l+RrlOC z`kqx1wM?v(L@gD2a5sq&BSwrEF=8Sjg2W-nyM1EcV-OdBIYRgkF+ik!S7vM;^J85D z+;*B+y&gR@mpiEKdE4TSwRxZCxRd3LzQ8K7j{)W$7Y(p!#;UFEECS1#g$)K~OK$t| zGR>Y-CudQ{RByzna^4e=iN$VZS^R(Y04#C*11L=}AVf|jl>h($07*qoM6N<$f+4UO A@c;k- diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn-members.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn-members.html deleted file mode 100644 index b87835b2ae..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn-members.html +++ /dev/null @@ -1,53 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::WvIn Member List

This is the complete list of members for stk::WvIn, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
channelsOut(void) const stk::WvIn [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
lastFrame(void) const stk::WvIn [inline]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(unsigned int channel=0)=0stk::WvIn [pure virtual]
tick(StkFrames &frames)=0stk::WvIn [pure virtual]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn.html deleted file mode 100644 index c6e5e40ceb..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn.html +++ /dev/null @@ -1,91 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::WvIn Class Reference

-

STK audio input abstract base class. -More...

- -

#include <WvIn.h>

-
-Inheritance diagram for stk::WvIn:
-
-
- - -stk::Stk -stk::FileWvIn -stk::InetWvIn -stk::RtWvIn -stk::FileLoop - -
-
- -

List of all members.

- - - - - - - - - - -

Public Member Functions

-unsigned int channelsOut (void) const
 Return the number of audio channels in the data or stream.
const StkFrameslastFrame (void) const
 Return an StkFrames reference to the last computed sample frame.
-virtual StkFloat tick (unsigned int channel=0)=0
 Compute one sample frame and return the specified channel value.
-virtual StkFramestick (StkFrames &frames)=0
 Fill the StkFrames argument with computed frames and return the same reference.
-

Detailed Description

-

STK audio input abstract base class.

-

This class provides common functionality for a variety of audio data input subclasses.

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
const StkFrames& stk::WvIn::lastFrame (void  )  const [inline]
-
-
- -

Return an StkFrames reference to the last computed sample frame.

-

If no file data is loaded, an empty container is returned.

- -

00029 { return lastFrame_; };
-

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvIn.png deleted file mode 100644 index 7296eef6625d2e1ade1cfdf66811a82d69532e14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 968 zcmeAS@N?(olHy`uVBq!ia0y~yU<9!ba4-YO(}H*B0x5|ApAgso|NjG-|NkGDKR;mt zkOjsE4jiaH^#2Kv%TW^K7YvjJgR7@Pj2IZ0!#!ObLn;{G-n~0%v4TL`!#-|J6S zFL3y*eQw4o#(VQTT`!hA;JiC;-#*Fr#~-i0{8y{B+G0Ti6PJeBvI)gr=Tt-6%$Een z-0pNL@(bGZ=Cgu)+#IDp--?#0l<3&=ymu;GXBk`cLi8+G>iq-9$1QLvB6u zV@>*>?LQ&**0V^3eVJ|BX7arcQn2UI02{raAt}D=cyd(N!yjw*yJ+Nj*KBB5H01yj z*DW=X00%}^+{Eivx&BJce>F}ZgSsR&ro>IGj9nwqrK-8)x_8i`M2$zY<5sPyR^-}$ zW_nh)|G7do#SY3C%;(06rl(Q$J;Hypn-ZqY5u!4hS&AYBlBP) zaJe5|@4jc$xaH3=`+nP2rfgU7(>9RY4qwIRDgLT2CAtqAt+yz$y=zl$H}!Lse(C&0 zWRb3d{?we76HL?Dr zfvfWNpKCIU=U$n+?dFU-eJIZ~kB2xe%17K(Tf|$VM)0*W_pWy6PWq zUndv9(pewj5a^Y_$eJt6)wIB2fdU5?3nruM>!ZIFXS^TE@qtb0)p#=J%}N#7G zHVC@DEvN+rT4$TR#c`FJj+*;U%BE`vv>093_$sCS$YzU-b0tpeoCU?Fe(5so+7WwA zV?vYCUD1W@dVUkdJf - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::WvOut Member List

This is the complete list of members for stk::WvOut, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addSampleRateAlert(Stk *ptr)stk::Stk [protected]
clipStatus(void)stk::WvOut [inline]
getFrameCount(void) const stk::WvOut [inline]
getTime(void) const stk::WvOut [inline]
handleError(const char *message, StkError::Type type)stk::Stk [static]
handleError(std::string message, StkError::Type type)stk::Stk [static]
handleError(StkError::Type type)stk::Stk [protected]
ignoreSampleRateChange(bool ignore=true)stk::Stk [inline]
inRange(StkFloat value, StkFloat min, StkFloat max)stk::Stk [inline, static]
printErrors(bool status)stk::Stk [inline, static]
rawwavePath(void)stk::Stk [inline, static]
removeSampleRateAlert(Stk *ptr)stk::Stk [protected]
resetClipStatus(void)stk::WvOut [inline]
sampleRate(void)stk::Stk [inline, static]
sampleRateChanged(StkFloat newRate, StkFloat oldRate)stk::Stk [protected, virtual]
setRawwavePath(std::string path)stk::Stk [static]
setSampleRate(StkFloat rate)stk::Stk [static]
showWarnings(bool status)stk::Stk [inline, static]
sleep(unsigned long milliseconds)stk::Stk [static]
Stk(void)stk::Stk [protected]
STK_FLOAT32stk::Stk [static]
STK_FLOAT64stk::Stk [static]
STK_SINT16stk::Stk [static]
STK_SINT24stk::Stk [static]
STK_SINT32stk::Stk [static]
STK_SINT8stk::Stk [static]
swap16(unsigned char *ptr)stk::Stk [static]
swap32(unsigned char *ptr)stk::Stk [static]
swap64(unsigned char *ptr)stk::Stk [static]
tick(const StkFloat sample)=0stk::WvOut [pure virtual]
tick(const StkFrames &frames)=0stk::WvOut [pure virtual]
WvOut(void)stk::WvOut [inline]
~Stk(void)stk::Stk [protected, virtual]
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvOut.html b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvOut.html deleted file mode 100644 index 052ddd0753..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvOut.html +++ /dev/null @@ -1,99 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::WvOut Class Reference

-

STK audio output abstract base class. -More...

- -

#include <WvOut.h>

-
-Inheritance diagram for stk::WvOut:
-
-
- - -stk::Stk -stk::FileWvOut -stk::InetWvOut -stk::RtWvOut - -
-
- -

List of all members.

- - - - - - - - - - - - - - - - -

Public Member Functions

WvOut (void)
 Default constructor.
-unsigned long getFrameCount (void) const
 Return the number of sample frames output.
-StkFloat getTime (void) const
 Return the number of seconds of data output.
-bool clipStatus (void)
 Returns true if clipping has been detected during output since instantiation or the last reset.
-void resetClipStatus (void)
 Reset the clipping status to false.
virtual void tick (const StkFloat sample)=0
 Output a single sample to all channels in a sample frame.
-virtual void tick (const StkFrames &frames)=0
 Output the StkFrames data.
-

Detailed Description

-

STK audio output abstract base class.

-

This class provides common functionality for a variety of audio data output subclasses.

-

Currently, WvOut is non-interpolating and the output rate is always Stk::sampleRate().

-

by Perry R. Cook and Gary P. Scavone, 1995-2012.

-

Member Function Documentation

- -
-
- - - - - - - - - -
virtual void stk::WvOut::tick (const StkFloat  sample )  [pure virtual]
-
-
- -

Output a single sample to all channels in a sample frame.

-

An StkError is thrown if an output error occurs.

- -

Implemented in stk::FileWvOut, stk::InetWvOut, and stk::RtWvOut.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvOut.png b/source/StkUGens/stk-4.4.4/doc/html/classstk_1_1WvOut.png deleted file mode 100644 index 77de3aebb3a195a304196f4d1e71aed58680b3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmeAS@N?(olHy`uVBq!ia0y~yVAKGzJ2;quWb&rALLem(;1lBd|Nnm=^Z)+?^XDf_ z0J6aNz<~qRhyFhSayd$Z{DOhfU~u(Rh!Fz=(`8Q=$B+ufw|6g2dZobA@Q^M2*T4Q6 zJq?q_h6fwZZToYxa7)O^XWEUo-{qYKZej|*kuq_oycbFR9n^5{w80zS5rW>pI<4|i{$r(L9DvS8IaYtJ)j zey^uihisgA{qUB!j^oiWb{}u?F@N0;F&Sk1*PIpHj{^gWH|ob&2ZUR^^V?l#b0~3e>5=;zxAz{Zl}Lnn6dQV zhCOjyUMaU-jznl`d|k%==2H}-)-=7_YNoyqpPtlZEe*-5*8j(t8oi!*=^nB6O>4v7 z1vyw&hg7bZYw_!fwb=btYo}lHRa&vY%#;0Yq0_puS9g=LU{-UjuxBVuwBgFq`_`Jx z{)%h4tmcA!uUkX{a-M;m!U765k%0X=4?PS2r~hrxabR@i1Pi4wLcO!#T62}}QM<2i z-BT-DPdiO7_zzSB)UzEJ)-Lf~9Y;16M_lo)zvy>ad*PX&f5FH9Zd9q&Sij&U4|Bjh zclG8U@&EKfluycBu{4`_(5bUUK`HIk7sa!)=ebp_G`F2FuRGXDxx3}ZZ~liPc0DYb=o=7k6Fe${i{IrH_@ zS58x3+BIaQtep3EB%;%J{Ye^=$o#mi}5dQx`#-v8uRkzNl z8&|BIp0oF?jXZN`TY*XHtOfP2EF+7om;8S0d2h?S;DBFm3)(h)-6!{U*^Xo}MA!?x gIuxLK$L_TKzm@)CPwp%_22An{p00i_>zopr03h>p7XSbN diff --git a/source/StkUGens/stk-4.4.4/doc/html/closed.gif b/source/StkUGens/stk-4.4.4/doc/html/closed.gif deleted file mode 100644 index 5310631d3065d05732bc587b7f95ecd426305604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57 zcmZ?wbhEHbxBdtN1B2pE7DfgJMg|=q8z|1nz`!KX!@PXP>9q|lX{Rj0 LuYI||#9$2oYfBFN diff --git a/source/StkUGens/stk-4.4.4/doc/html/compile.html b/source/StkUGens/stk-4.4.4/doc/html/compile.html deleted file mode 100644 index 7b45f9fd00..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/compile.html +++ /dev/null @@ -1,66 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   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 that 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 that require specific platform/OS support include RtAudio, RtWvOut, RtWvIn, RtDuplex, RtMidi, InetWvIn, InetWvOut, Socket, UdpSocket, TcpServer, TcpClient, Thread, and Mutex. These classes currently can only be compiled on Linux, 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 __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 (version 4.0 only, use ALSA for MIDI support) __LINUX_OSS__, __LINUX_ALSA__, __LITTLE_ENDIAN__ asound, pthread
Linux and Macintosh OS-X Jack __UNIX_JACK__, __LITTLE_ENDIAN__ asound, pthread, jack
Macintosh OS X CoreAudio __MACOSX_CORE__ pthread, CoreAudio, CoreMidi, CoreFoundation
-

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, FileRead, FileWrite, FileWvIn, FileLoop, and FileWvOut. The program could then be compiled on a little-endian system, such as a PC running Linux, using the GNU g++ compiler as follows:

-
 g++ -Wall -D__LITTLE_ENDIAN__ -o sineosc Stk.cpp FileRead.cpp FileWrite.cpp FileWvIn.cpp FileLoop.cpp FileWvOut.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). Most of the STK projects (e.g., demo, effects, ...) contain Makefiles (built by the configure script) that 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 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.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 little-endian 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/FileLoop.h"
-#include "stk/FileWvOut.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 .NET compiler only. It is assumed here that you're familiar with Visual C++ and its particular idiosyncrasies. STK won't compile in Visual C++ 6.0 any more.

-

The approach when using Visual C++ is to build a project that includes the necessary ToolKit files from the distribution src and include directories. For the example program from the previous tutorial chapter, create a VC++ console application project, add the Stk, FileRead, FileWrite, WvIn, FileWvIn, FileLoop, WvOut, and FileWvOut class files, as well as 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__, __WINDOWS_DS__, and __WINDOWS_MM__ preprocessor definitions.

-

For Steinberg ASIO support, use the __WINDOWS_ASIO__ preprocessor definition (and the __WINDOWS_MM__ definition for RtMidi support), 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.

-

[Main tutorial page]   [Next tutorial]

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/controlin.html b/source/StkUGens/stk-4.4.4/doc/html/controlin.html deleted file mode 100644 index a3a3b56fd7..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/controlin.html +++ /dev/null @@ -1,222 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   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 are easily represented within the SKINI protocol.

-

The class stk::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 stk::Skini::Message types (MIDI messages are converted to the stk::Skini:Message format). The user then uses the stk::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 stk::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 stk::Messager class to allow control via SKINI messages read from a SKINI file.

-
// controlbee.cpp STK tutorial program
-
-#include "BeeThree.h"
-#include "RtAudio.h"
-#include "Messager.h"
-#include "SKINI.msg"
-#include <math.h>
-#include <algorithm>
-using std::min;
-
-using namespace stk;
-
-void usage(void) {
-  // Error function in case of incorrect command-line
-  // argument specifications.
-  std::cout << "\nuseage: controlbee file\n";
-  std::cout << "    where file = a SKINI scorefile.\n\n";
-  exit(0);
-}
-
-// The TickData structure holds all the class instances and data that
-// are shared by the various processing functions.
-struct TickData {
-  Instrmnt *instrument;
-  Messager messager;
-  Skini::Message message;
-  int counter;
-  bool haveMessage;
-  bool done;
-
-  // Default constructor.
-  TickData()
-    : instrument(0), counter(0), haveMessage(false), done( false ) {}
-};
-
-#define DELTA_CONTROL_TICKS 64 // default sample frames between control input checks
-
-// The processMessage() function encapsulates the handling of control
-// messages.  It can be easily relocated within a program structure
-// depending on the desired scheduling scheme.
-void processMessage( TickData* data )
-{
-  register StkFloat value1 = data->message.floatValues[0];
-  register StkFloat value2 = data->message.floatValues[1];
-
-  switch( data->message.type ) {
-
-  case __SK_Exit_:
-    data->done = true;
-    return;
-
-  case __SK_NoteOn_:
-    if ( value2 == 0.0 ) // velocity is zero ... really a NoteOff
-      data->instrument->noteOff( 0.5 );
-    else { // a NoteOn
-      StkFloat frequency = 220.0 * pow( 2.0, (value1 - 57.0) / 12.0 ); 
-      data->instrument->noteOn( frequency, value2 * ONE_OVER_128 );
-    }
-    break;
-
-  case __SK_NoteOff_:
-    data->instrument->noteOff( value2 * ONE_OVER_128 );
-    break;
-
-  case __SK_ControlChange_:
-    data->instrument->controlChange( (int) value1, value2 );
-    break;
-
-  case __SK_AfterTouch_:
-    data->instrument->controlChange( 128, value1 );
-
-  } // end of switch
-
-  data->haveMessage = false;
-  return;
-}
-
-// This tick() function handles sample computation and scheduling of
-// control updates.  It will be called automatically when the system
-// needs a new buffer of audio samples.
-int tick( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
-         double streamTime, RtAudioStreamStatus status, void *dataPointer )
-{
-  TickData *data = (TickData *) dataPointer;
-  register StkFloat *samples = (StkFloat *) outputBuffer;
-  int counter, nTicks = (int) nBufferFrames;
-
-  while ( nTicks > 0 && !data->done ) {
-
-    if ( !data->haveMessage ) {
-      data->messager.popMessage( data->message );
-      if ( data->message.type > 0 ) {
-        data->counter = (long) (data->message.time * Stk::sampleRate());
-        data->haveMessage = true;
-      }
-      else
-        data->counter = DELTA_CONTROL_TICKS;
-    }
-
-    counter = min( nTicks, data->counter );
-    data->counter -= counter;
-
-    for ( int i=0; i<counter; i++ ) {
-      *samples++ = data->instrument->tick();
-      nTicks--;
-    }
-    if ( nTicks == 0 ) break;
-
-    // Process control messages.
-    if ( data->haveMessage ) processMessage( data );
-  }
-
-  return 0;
-}
-
-int main( int argc, char *argv[] )
-{
-  if ( argc != 2 ) usage();
-
-  // Set the global sample rate and rawwave path before creating class instances.
-  Stk::setSampleRate( 44100.0 );
-  Stk::setRawwavePath( "../../rawwaves/" );
-
-  TickData data;
-  RtAudio dac;
-
-  // Figure out how many bytes in an StkFloat and setup the RtAudio stream.
-  RtAudio::StreamParameters parameters;
-  parameters.deviceId = dac.getDefaultOutputDevice();
-  parameters.nChannels = 1;
-  RtAudioFormat format = ( sizeof(StkFloat) == 8 ) ? RTAUDIO_FLOAT64 : RTAUDIO_FLOAT32;
-  unsigned int bufferFrames = RT_BUFFER_SIZE;
-  try {
-    dac.openStream( &parameters, NULL, format, (unsigned int)Stk::sampleRate(), &bufferFrames, &tick, (void *)&data );
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-    goto cleanup;
-  }
-
-  try {
-    // Define and load the BeeThree instrument
-    data.instrument = new BeeThree();
-  }
-  catch ( StkError & ) {
-    goto cleanup;
-  }
-
-  if ( data.messager.setScoreFile( argv[1] ) == false )
-    goto cleanup;
-
-  try {
-    dac.startStream();
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-    goto cleanup;
-  }
-
-  // Block waiting until callback signals done.
-  while ( !data.done )
-    Stk::sleep( 100 );
-  
-  // Shut down the output stream.
-  try {
-    dac.closeStream();
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-  }
-
- cleanup:
-  delete data.instrument;
-
-  return 0;
-}
-

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 processMessage() function centralizes the handling of control messages. Other control update schemes can be implemented, perhaps using a separate thread or in the main() function, and this function should work in any context.

-

Assuming the program is compiled as controlbee and the SKINI scorefile bookert.ski is in the scores directory, the program can be run 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 pipe, socket or MIDI connections. The stk::Messager class provides stk::Messager::startStdInput(), stk::Messager::startSocketInput(), and stk::Messager::startMidiInput() functions for this purpose.

-

[Main tutorial page]   [Next tutorial]

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/crealtime.html b/source/StkUGens/stk-4.4.4/doc/html/crealtime.html deleted file mode 100644 index fe9535c495..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/crealtime.html +++ /dev/null @@ -1,105 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

Realtime Audio (callback)

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 rtsine.cpp 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 Blocking vs. Callbacks for further information).

-

The previous section described the use of the stk::RtWvOut class for realtime audio output. The stk::RtWvOut::tick() function writes data to a large ring-buffer, from which data is periodically written to the computer's audio hardware via an underlying callback routine.

-
// crtsine.cpp STK tutorial program
-
-#include "SineWave.h"
-#include "RtAudio.h"
-using namespace stk;
-
-// This tick() function handles sample computation only.  It will be
-// called automatically when the system needs a new buffer of audio
-// samples.
-int tick( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
-         double streamTime, RtAudioStreamStatus status, void *dataPointer )
-{
-  SineWave *sine = (SineWave *) dataPointer;
-  register StkFloat *samples = (StkFloat *) outputBuffer;
-
-  for ( unsigned int i=0; i<nBufferFrames; i++ )
-    *samples++ = sine->tick();
-
-  return 0;
-}
-
-int main()
-{
-  // Set the global sample rate before creating class instances.
-  Stk::setSampleRate( 44100.0 );
-
-  SineWave sine;
-  RtAudio dac;
-
-  // Figure out how many bytes in an StkFloat and setup the RtAudio stream.
-  RtAudio::StreamParameters parameters;
-  parameters.deviceId = dac.getDefaultOutputDevice();
-  parameters.nChannels = 1;
-  RtAudioFormat format = ( sizeof(StkFloat) == 8 ) ? RTAUDIO_FLOAT64 : RTAUDIO_FLOAT32;
-  unsigned int bufferFrames = RT_BUFFER_SIZE;
-  try {
-    dac.openStream( &parameters, NULL, format, (unsigned int)Stk::sampleRate(), &bufferFrames, &tick, (void *)&sine );
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-    goto cleanup;
-  }
-
-  sine.setFrequency(440.0);
-
-  try {
-    dac.startStream();
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-    goto cleanup;
-  }
-
-  // Block waiting here.
-  char keyhit;
-  std::cout << "\nPlaying ... press <enter> to quit.\n";
-  std::cin.get( keyhit );
-
-  // Shut down the output stream.
-  try {
-    dac.closeStream();
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-  }
-
- cleanup:
-
-  return 0;
-}
-

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 StkFloat, and the RT_BUFFER_SIZE defined in Stk.h. The bufferFrames argument is an API-dependent buffering parameter (see RtAudio for further information).

-

We also provide the audio system controller with a pointer to our 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 struct (see the next tutorial program for an example) or make use of global variables.

-

Our callback routine is the tick() function. Function arguments include pointers to the audio input and output data buffers, the buffer size (in frames), a stream time argument, a status argument to test for over/underruns, and the data pointer passed in the openStream() 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 nBufferFrames counts and writes the result into the audio data buffer before returning.

-

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

-

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

-

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

-

[Main tutorial page]   [Next tutorial]

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/dir_221deb9bdff892d63ed1e409450a60d2.html b/source/StkUGens/stk-4.4.4/doc/html/dir_221deb9bdff892d63ed1e409450a60d2.html deleted file mode 100644 index 11508e84a0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/dir_221deb9bdff892d63ed1e409450a60d2.html +++ /dev/null @@ -1,130 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

include Directory Reference

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Files

file  ADSR.h [code]
file  Asymp.h [code]
file  BandedWG.h [code]
file  BeeThree.h [code]
file  BiQuad.h [code]
file  Blit.h [code]
file  BlitSaw.h [code]
file  BlitSquare.h [code]
file  BlowBotl.h [code]
file  BlowHole.h [code]
file  Bowed.h [code]
file  BowTable.h [code]
file  Brass.h [code]
file  Chorus.h [code]
file  Clarinet.h [code]
file  Cubic.h [code]
file  Delay.h [code]
file  DelayA.h [code]
file  DelayL.h [code]
file  Drummer.h [code]
file  Echo.h [code]
file  Effect.h [code]
file  Envelope.h [code]
file  FileLoop.h [code]
file  FileRead.h [code]
file  FileWrite.h [code]
file  FileWvIn.h [code]
file  FileWvOut.h [code]
file  Filter.h [code]
file  Fir.h [code]
file  Flute.h [code]
file  FM.h [code]
file  FMVoices.h [code]
file  FormSwep.h [code]
file  FreeVerb.h [code]
file  Function.h [code]
file  Generator.h [code]
file  Granulate.h [code]
file  Guitar.h [code]
file  HevyMetl.h [code]
file  Iir.h [code]
file  InetWvIn.h [code]
file  InetWvOut.h [code]
file  Instrmnt.h [code]
file  JCRev.h [code]
file  JetTable.h [code]
file  LentPitShift.h [code]
file  Mandolin.h [code]
file  Mesh2D.h [code]
file  Messager.h [code]
file  MidiFileIn.h [code]
file  Modal.h [code]
file  ModalBar.h [code]
file  Modulate.h [code]
file  Moog.h [code]
file  Mutex.h [code]
file  Noise.h [code]
file  NRev.h [code]
file  OnePole.h [code]
file  OneZero.h [code]
file  PercFlut.h [code]
file  Phonemes.h [code]
file  PitShift.h [code]
file  Plucked.h [code]
file  PoleZero.h [code]
file  PRCRev.h [code]
file  ReedTable.h [code]
file  Resonate.h [code]
file  Rhodey.h [code]
file  RtAudio.h [code]
file  RtError.h [code]
file  RtMidi.h [code]
file  RtWvIn.h [code]
file  RtWvOut.h [code]
file  Sampler.h [code]
file  Saxofony.h [code]
file  Shakers.h [code]
file  Simple.h [code]
file  SineWave.h [code]
file  SingWave.h [code]
file  Sitar.h [code]
file  Skini.h [code]
file  SKINI.msg
file  Socket.h [code]
file  Sphere.h [code]
file  StifKarp.h [code]
file  Stk.h [code]
file  TapDelay.h [code]
file  TcpClient.h [code]
file  TcpServer.h [code]
file  Thread.h [code]
file  TubeBell.h [code]
file  Twang.h [code]
file  TwoPole.h [code]
file  TwoZero.h [code]
file  UdpSocket.h [code]
file  Vector3D.h [code]
file  Voicer.h [code]
file  VoicForm.h [code]
file  Whistle.h [code]
file  Wurley.h [code]
file  WvIn.h [code]
file  WvOut.h [code]
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/dir_f14fd23bc74c76f288031ad23b3f3505.html b/source/StkUGens/stk-4.4.4/doc/html/dir_f14fd23bc74c76f288031ad23b3f3505.html deleted file mode 100644 index 1dfdd88d37..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/dir_f14fd23bc74c76f288031ad23b3f3505.html +++ /dev/null @@ -1,128 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

include Directory Reference

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Files

file  ADSR.h [code]
file  Asymp.h [code]
file  BandedWG.h [code]
file  BeeThree.h [code]
file  BiQuad.h [code]
file  Blit.h [code]
file  BlitSaw.h [code]
file  BlitSquare.h [code]
file  BlowBotl.h [code]
file  BlowHole.h [code]
file  Bowed.h [code]
file  BowTable.h [code]
file  Brass.h [code]
file  Chorus.h [code]
file  Clarinet.h [code]
file  Cubic.h [code]
file  Delay.h [code]
file  DelayA.h [code]
file  DelayL.h [code]
file  Drummer.h [code]
file  Echo.h [code]
file  Effect.h [code]
file  Envelope.h [code]
file  FileLoop.h [code]
file  FileRead.h [code]
file  FileWrite.h [code]
file  FileWvIn.h [code]
file  FileWvOut.h [code]
file  Filter.h [code]
file  Fir.h [code]
file  Flute.h [code]
file  FM.h [code]
file  FMVoices.h [code]
file  FormSwep.h [code]
file  Function.h [code]
file  Generator.h [code]
file  Granulate.h [code]
file  HevyMetl.h [code]
file  Iir.h [code]
file  InetWvIn.h [code]
file  InetWvOut.h [code]
file  Instrmnt.h [code]
file  JCRev.h [code]
file  JetTable.h [code]
file  LentPitShift.h [code]
file  Mandolin.h [code]
file  Mesh2D.h [code]
file  Messager.h [code]
file  MidiFileIn.h [code]
file  Modal.h [code]
file  ModalBar.h [code]
file  Modulate.h [code]
file  Moog.h [code]
file  Mutex.h [code]
file  Noise.h [code]
file  NRev.h [code]
file  OnePole.h [code]
file  OneZero.h [code]
file  PercFlut.h [code]
file  Phonemes.h [code]
file  PitShift.h [code]
file  Plucked.h [code]
file  PoleZero.h [code]
file  PRCRev.h [code]
file  ReedTable.h [code]
file  Resonate.h [code]
file  Rhodey.h [code]
file  RtAudio.h [code]
file  RtError.h [code]
file  RtMidi.h [code]
file  RtWvIn.h [code]
file  RtWvOut.h [code]
file  Sampler.h [code]
file  Saxofony.h [code]
file  Shakers.h [code]
file  Simple.h [code]
file  SineWave.h [code]
file  SingWave.h [code]
file  Sitar.h [code]
file  Skini.h [code]
file  SKINI.msg
file  Socket.h [code]
file  Sphere.h [code]
file  StifKarp.h [code]
file  Stk.h [code]
file  TapDelay.h [code]
file  TcpClient.h [code]
file  TcpServer.h [code]
file  Thread.h [code]
file  TubeBell.h [code]
file  Twang.h [code]
file  TwoPole.h [code]
file  TwoZero.h [code]
file  UdpSocket.h [code]
file  Vector3D.h [code]
file  Voicer.h [code]
file  VoicForm.h [code]
file  Whistle.h [code]
file  Wurley.h [code]
file  WvIn.h [code]
file  WvOut.h [code]
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/dirs.html b/source/StkUGens/stk-4.4.4/doc/html/dirs.html deleted file mode 100644 index d23599da9d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/dirs.html +++ /dev/null @@ -1,25 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

Directories

This directory hierarchy is sorted roughly, but not completely, alphabetically: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/download.html b/source/StkUGens/stk-4.4.4/doc/html/download.html deleted file mode 100644 index 0922f1dddc..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/download.html +++ /dev/null @@ -1,518 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

Download, Release Notes, and Bug Fixes

-Download Version 4.4.4 (24 August 2012):

- -

-Release Notes:

-

-Version 4.4.4

-
    -
  • -New FreeVerb class (thanks to Greg Burlet)
  • -
  • -New Guitar class
  • -
  • -New electric guitar project
  • -
  • -Updated versions of RtAudio and RtMidi
  • -
  • -Cleaned / revised Shakers class
  • -
  • -Bug fix in LentPitShift
  • -
  • -Bug fix in Echo constructor
  • -
  • -Bug fix in FileWvIn (file size when chunking)
  • -
  • -Bug fix in StkFrames copy constructor
  • -
-

-Version 4.4.3

-
    -
  • -Changed SINT24 to be lower 3 bytes of 32-bit word.
  • -
  • -Bug fixes to vectorized tick functions in Effects classes.
  • -
  • -Updated versions of RtAudio and RtMidi.
  • -
  • -Bug fixes in ADSR and Envelope classes.
  • -
  • -Updates to the internal argument checking and reporting scheme.
  • -
  • -Updates to Bowed class (thanks to Esteban Maestre!).
  • -
  • -Fixes for 24-bit support in FileRead and FileWrite.
  • -
  • -Added WAVE_FORMAT_EXTENSIBLE support in FileWrite.
  • -
  • -Added sample rate variable reading and writing for MAT-files in FileRead and FileWrite.
  • -
-

-Version 4.4.2

-
    -
  • -Added various header file includes for newer compilers.
  • -
  • -Updates to RtAudio and RtMidi.
  • -
  • -New LentPitShift class (thanks to Francois Germain).
  • -
  • -Bug fixes in Voicer class (thanks Richard Dobson!).
  • -
  • -Added Makefile.in to compile library and all projects, as well as clean and distclean.
  • -
-

-Version 4.4.1

-
    -
  • -Added multi-channel/frame tick() virtual function to WvIn and WvOut abstract base classes (required update to RtWvOut class).
  • -
  • -Updated configure script to select g++ compiler by default.
  • -
  • -In demo.cpp: removed voicer grouping for messages, fixing polyphony when messages are on the same MIDI/SKINI channel.
  • -
  • -Updates to RtAudio and RtMidi.
  • -
-

-Version 4.4.0

-
    -
  • -All classes embedded in the "stk" namespace (except RtAudio, RtMidi, and RtError).
  • -
  • -Class WaveLoop renamed FileLoop.
  • -
  • -Significant efficiency improvements via code restructuring and inlining.
  • -
  • -Some class source (.cpp) files deleted as part of inlining (Generator, Filter, Function, WvIn, WvOut, Effect, Instrmnt, BowTable, ReedTable, JetTable, Vector3D).
  • -
  • -Updates to RtAudio and RtMidi.
  • -
  • -Previous "tickFrame()" functions renamed "tick" for more consistent API.
  • -
  • -More consistent and scalable approach to multichannel data and computations.
  • -
  • -Multichannel support added to Granulate class.
  • -
  • -Filter class made abstract. New Iir and Fir classes made for non-order-specific filtering.
  • -
  • -New TapDelay class.
  • -
  • -SubNoise class deleted (same as sub-sampled "ticking" of Noise class).
  • -
-

-Version 4.3.1

-
    -
  • -Further headerless file support in FileRead.
  • -
  • -Bug fix in RtWvOut.cpp.
  • -
  • -Added configure support for MinGW.
  • -
  • -Updates to RtAudio and RtMidi for MinGW.
  • -
  • -Changes to channel assignment in demo.cpp.
  • -
-

-Version 4.3.0

-
    -
  • -An official MIT-like license.
  • -
  • -New functionality to automatically update class data when the STK sample rate changes (partly implemented).
  • -
  • -Updates for new RtAudio version 4.0.
  • -
  • -Removed RtDuplex class, users should use RtAudio directly with a callback function.
  • -
  • -Bug fix in interpolate() function in Stk.h for non-interleaved data.
  • -
  • -Fixes / improvements to the Granulate class.
  • -
  • -Fix in Whistle when doing animation.
  • -
  • -Fixes in BlitSquare for frequency, harmonics, and dc offset.
  • -
  • -Updates to Makefiles for non-realtime compile.
  • -
  • -Fix in demo.cpp for voice channel assignment.
  • -
  • -Updated versions of RtMidi and RtAudio.
  • -
  • -Updated ASIO files for MinGW compiler.
  • -
  • -New FAQ in documentation.
  • -
  • -MAT-file bug fix in FileRead class.
  • -
-

-Version 4.2.1

-
    -
  • -Greatly expanded StkFrames functionality (including interpolation and indexing by channel/frame).
  • -
  • -New Blit, BlitSaw, and BlitSquare bandlimited waveform classes (thanks to Robin Davies!).
  • -
  • -New Granulate granular synthesis class.
  • -
  • -Removed Table class ... all functionality (including interpolation) now in StkFrames and FileRead classes.
  • -
  • -Revised Socket class (now abstract) and added TcpServer, TcpClient, and UdpSocket subclasses.
  • -
  • -Added Stk::showWarnings() and Stk::printErrors() functions to dis/enable warning and error printouts.
  • -
  • -Extracted file I/O functionality to FileRead and FileWrite classes.
  • -
  • -Revised WvIn / WvOut class structure (WvIn / WvOut now abstract and file I/O functionality in new FileWvIn / FileWvOut subclasses).
  • -
  • -New SineWave class which calculates its own static table of variable length (no rawwave dependency).
  • -
  • -New sinewave.raw file of length 1024 samples (used to be 256).
  • -
  • -TcpWvIn and TcpWvOut renamed InetWvIn and InetWvOut, with added support for UDP sockets.
  • -
  • -Fixed bug in WvOut tickFrame( const StkFrames &frames ) function.
  • -
  • -Fixed bug in demo.cpp when writing output soundfiles without realtime output.
  • -
  • -Added "binary" open flag to MidiFileIn class for Windows.
  • -
  • -Fixed oversized MAT-file header in WvOut.cpp
  • -
  • -Fixed case statement bug in MidiFileIn.cpp for sysex.
  • -
  • -Added missing getDelay() function to DelayA.cpp.
  • -
  • -Fixed modDepth omission in Chorus.cpp.
  • -
  • -Fixed DC blocker initialization bug in Flute.cpp.
  • -
  • -Changed Filter class behavior so no default clearing of state when changing coefficients.
  • -
  • -Fixes to RtAudio, especially for Windows DirectSound and ASIO (thanks to Robin Davies).
  • -
-

-Version 4.2.0

-
    -
  • -Simultaneous multiple audio APIs supported at compile time.
  • -
  • -Various changes to better conform to standard C++ programming practices.
  • -
  • -Fixed hidden overloaded virtual functions.
  • -
  • -New Asymp exponential envelope class.
  • -
  • -MY_FLOAT type converted to StkFloat and changed throughout (use treesed utility to search/replace in old files).
  • -
  • -Most example programs rewritten to use an audio callback paradigm (which works better in OS-X).
  • -
  • -New StkFrames class for vectorized multichannel data and associated new tick() functions making use of StkFrames.
  • -
  • -New RtMidi class with MIDI output capabilities (API changes).
  • -
  • -New MidiFileIn class for reading MIDI files.
  • -
  • -Revised Filter classes to use std::vectors for coefficients (API changes).
  • -
  • -Revised Messager class (API changes).
  • -
  • -New abstract parent Effect class for various effects.
  • -
  • -New abstract parent Generator class for various signal sources.
  • -
  • -New abstract parent Function class for tables and various non-linear functions.
  • -
  • -Skini class completely rewritten (simplified) using the C++ STL (API changes).
  • -
  • -WvOut classes now clip to -1.0 to +1.0 and report out of range.
  • -
  • -New Mutex class.
  • -
  • -Turned Nagle algorithm off by default in Socket class.
  • -
  • -Error reporting standardized in all classes.
  • -
-

-Version 4.1.3

-
    -
  • -Bug fix in RtAudio for Windows DirectSound output only support
  • -
-

-Version 4.1.2

-
    -
  • -Added Linux JACK support to RtAudio.
  • -
  • -Added optional doNormalize argument to WvIn to allow specification of data normalization or not.
  • -
  • -Added volume control to demo program and various tcl scripts.
  • -
  • -Added support for dynamic rawwavePath() setting.
  • -
  • -WaveLoop bug fix.
  • -
  • -Fixed bug in ADSR::setReleaseTime() method.
  • -
  • -Fixed missing initialization of apInput in non-default constructor of DelayA class.
  • -
  • -Added time seeding of random number generator to Noise constructor.
  • -
  • -Update to the contentsAt() method of Delay class.
  • -
  • -WAV file fixes (8-bit) in WvIn and WvOut classes.
  • -
  • -Configure script changes.
  • -
  • -Updated <iostream> include statements and appended "std::" as necessary throughout for compatibility with gcc 3.
  • -
-

-Version 4.1.1

-
    -
  • -Bug fix in RtAudio for Macintosh OS X and Windows ASIO duplex operation.
  • -
  • -Windows ASIO fix in Stk.h.
  • -
  • -Documentation updates.
  • -
  • -Expanded tutorial.
  • -
  • -Fixed RtDuplex omission in src Makefile.
  • -
-

-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

-
    -
  • -New documentation and tutorial.
  • -
  • -Several new instruments, including Saxofony, BlowBotl, and StifKarp.
  • -
  • -New Stk base class, replacing Object class.
  • -
  • -New Filter class structure and methods.
  • -
  • -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.
  • -
  • -New file type specifier argument in WvOut ... hosed WavWvOut, AifWvOut, RawWavOut, SndWavOut, and MatWvOut subclasses.
  • -
  • -Some simplifications of Messager class (was Controller).
  • -
  • -New independent RtAudio class.
  • -
  • -Extensive revisions in code and a significant number of API changes.
  • -
-

-Version 3.2

-
    -
  • -New input control handling class (Controller)
  • -
  • -Added AIFF file input/output support.
  • -
  • -New C++ error handling capabilities.
  • -
  • -New input/output internet streaming support (StrmWvIn/StrmWvOut).
  • -
  • -Added native ALSA support for linux.
  • -
  • -Added optional "device" argument to all "Rt" classes (audio and MIDI) and printout of devices when argument is invalid.
  • -
  • -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.
  • -
  • -Fixed interpolation bug in RtWvIn.
  • -
  • -Windoze RtAudio code rewritten (thank Dave!).
  • -
  • -Simplified byte-swapping functions (in-place swapping).
  • -
  • -"Stereo-ized" RagaMatic.
  • -
  • -Miscellaneous renamings.
  • -
  • -Probably a bunch more fixes that I've long since forgotten about.
  • -
-

-Version 3.1

-
    -
  • -New RagaMatic project ... very cool!!!
  • -
  • -Less clipping in the Shakers class.
  • -
  • -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 few minor changes, some bug fixes ... can't remember all of them.
  • -
-

-Version 3.0

-
    -
  • -New define flags for OS and realtime dependencies (this will probably cause problems for old personal STK code, but it was necessary to make future ports easier).
  • -
  • -Expanded and cleaned the Shakers class.
  • -
  • -New BowedBar algorithm/class.
  • -
  • -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 project 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 Tcl/Tk GUI (TclDemo.tcl).
  • -
  • -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).
  • -
-

-Version 2.02

-
    -
  • -Created RawWave abstract class, with subclasses of RawLoop (looping rawwave oscillator), RawShot (non-looping, non-interpolating rawwave player ... used to be RawWvIn), and RawInterp (looping or non-looping, interpolating rawwave player ... used to be RawWave).
  • -
  • -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 WinXX 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.
  • -
  • -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.
  • -
-

-Version 2

-
    -
  • -Unification of the capabilities of STK across the various platforms. All of the previous SGI functionality has been ported to Linux and Windows, including realtime sound output and MIDI input.
  • -
  • -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.
  • -
  • -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.
  • -
  • -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.
  • -
  • -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. MD2SKINI | syntmono Clarinet -r -i). In addition, you can supply a filename argument to MD2SKINI and have it simultaneously record a SKINI score file for future reuse.
  • -
  • -Modifications to Object.h for OS_TYPE compilation dependencies. Makefile automatically determines OS_TYPE when invoked (if you have the GNU makefile utilities installed on your system).
  • -
  • -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.
  • -
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/doxygen.css b/source/StkUGens/stk-4.4.4/doc/html/doxygen.css deleted file mode 100644 index b057a92881..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/doxygen.css +++ /dev/null @@ -1,532 +0,0 @@ -/* The standard CSS for doxygen */ - -body, table, div, p, dl { - font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; - font-size: 12px; -} - -/* @group Heading Levels */ - -h1 { - text-align: center; - font-size: 150%; -} - -h2 { - font-size: 120%; -} - -h3 { - font-size: 100%; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd, p.starttd { - margin-top: 2px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - padding: 2px; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #153788; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #1b77c5; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #6666cc; - color: #ffffff; - border: 1px double #9295C2; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code { - color: #3030f0; -} - -a.codeRef { - color: #3030f0; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -.fragment { - font-family: monospace, fixed; - font-size: 105%; -} - -pre.fragment { - border: 1px solid #CCCCCC; - background-color: #f5f5f5; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; -} - -div.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - margin-bottom: 6px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background: white; - color: black; - margin-right: 20px; - margin-left: 20px; -} - -td.indexkey { - background-color: #e8eef2; - font-weight: bold; - border: 1px solid #CCCCCC; - margin: 2px 0px 2px 0; - padding: 2px 10px; -} - -td.indexvalue { - background-color: #e8eef2; - border: 1px solid #CCCCCC; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #f0f0f0; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -/* @end */ - -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #84b0c7; -} - -th.dirtab { - background: #e8eef2; - font-weight: bold; -} - -hr { - height: 0; - border: none; - border-top: 1px solid #666; -} - -/* @group Member Descriptions */ - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #FAFAFA; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #ccc; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memTemplParams { - color: #606060; - white-space: nowrap; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtemplate { - font-size: 80%; - color: #606060; - font-weight: normal; - margin-left: 3px; -} - -.memnav { - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.memitem { - padding: 0; - margin-bottom: 10px; -} - -.memname { - white-space: nowrap; - font-weight: bold; -} - -.memproto, .memdoc { - border: 1px solid #84b0c7; -} - -.memproto { - padding: 0; - background-color: #d5e1e8; - font-weight: bold; - -webkit-border-top-left-radius: 8px; - -webkit-border-top-right-radius: 8px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -moz-border-radius-topleft: 8px; - -moz-border-radius-topright: 8px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -} - -.memdoc { - padding: 2px 5px; - background-color: #eef3f5; - border-top-width: 0; - -webkit-border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -moz-border-radius-bottomleft: 8px; - -moz-border-radius-bottomright: 8px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} - -/* @end */ - -/* @group Directory (tree) */ - -/* for the tree view */ - -.ftvtree { - font-family: sans-serif; - margin: 0.5em; -} - -/* these are for tree view when used as main index */ - -.directory { - font-size: 9pt; - font-weight: bold; -} - -.directory h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -/* -The following two styles can be used to replace the root node title -with an image of your choice. Simply uncomment the next two styles, -specify the name of your image and be sure to set 'height' to the -proper pixel height of your image. -*/ - -/* -.directory h3.swap { - height: 61px; - background-repeat: no-repeat; - background-image: url("yourimage.gif"); -} -.directory h3.swap span { - display: none; -} -*/ - -.directory > h3 { - margin-top: 0; -} - -.directory p { - margin: 0px; - white-space: nowrap; -} - -.directory div { - display: none; - margin: 0px; -} - -.directory img { - vertical-align: -30%; -} - -/* these are for tree view when not used as main index */ - -.directory-alt { - font-size: 100%; - font-weight: bold; -} - -.directory-alt h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -.directory-alt > h3 { - margin-top: 0; -} - -.directory-alt p { - margin: 0px; - white-space: nowrap; -} - -.directory-alt div { - display: none; - margin: 0px; -} - -.directory-alt img { - vertical-align: -30%; -} - -/* @end */ - -address { - font-style: normal; - color: #333; -} - -table.doxtable { - border-collapse:collapse; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #153788; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #254798; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; -} - diff --git a/source/StkUGens/stk-4.4.4/doc/html/doxygen.png b/source/StkUGens/stk-4.4.4/doc/html/doxygen.png deleted file mode 100644 index f0a274bbaffdd67f6d784c894d9cf28729db0e14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1281 zcmaJ>ZA?>F7(Vx-ms?uoS`b@hdRtpo6o^%HU>M$hfGrBvQnk$LE?p^P!kn&ikhyq! zX~V@&tPF5Qt@V?oTL96Bi%aRiwbe1)9DWQI#?)=HxS7QSw`J`5fAJ*eJbB;uNuKA& zdERDo*{Y<(If(#(B$Lr#;nB(8Y#ia=ZCeW?JfPLuQY`=@cW$k}Rivq|vbxGrRq1Tl9;+(gNt?}UtVKM2`T5t1jLzuL@0UIs`S#vlhl4)^ zLgSYrPj@$+`|j?eSbXTmiHGkWxV8V}BzNR?pl9k_s4pDu9vd5a_UzZEPk)}Ad{AV_ zzddrjrh4=Imr`E06;LY{)YYt?o}L~H@7C}F^WB!Ra=v`Q0bj{>5&$66CWF>mf6vjP z2N>RRY6ZYa=K`76>+|_)Xdwko+7wv}7cN|btOhWb(*{sta~6b?S8Omrxw}!4`NhGr zZVpNqpu1@BE`QGWNTpEpcJVW5izu~2B^GlM?1(OPg)zwW;QcP@Ltcclm>XbJL9C|j z=9!2?ua=uIlf0%AndzHsRC}IyTL$EhAee(fdKB`?27KeS^2M8M_7b~PiCFO&r5LC7 z7gl1*a<8;SjNaw#h=843_AV9iZbWQOAp5YOC^&_F*9K0> zB|6%IDb?aM#3viTxkLU4aXg&@+CkNTOnQ1iMP*^?b|^lJy$4C)Zk4isV!|RZ*XhXh zw8q3$=*0LeGC!XI_Wc?dkT~3+*Gu%%yIqP+Wr3H$=&ROMQU6q}Ag^P~>c5vAEO;a- z_dK-3PPeKar%)6$j~vI2#*-YH!1h6HYVtwCX5_wM`iF#UKz&&@9Oo5w3%XGYrX zW>dY~)SG-((Yim%`InwgTvyRC?e=Wh^8KCao!R6Eg&TpVWUY1sN~4G}V?nFnEGo-; zHZ_$eW9-GnC%^WS9b z@p;-$oH#MtC0v>Q$HX%4^JdFdO$0cbv-W)Q TtK}Eh@>>I#ipmV1>S*>q-hkC} diff --git a/source/StkUGens/stk-4.4.4/doc/html/faq.html b/source/StkUGens/stk-4.4.4/doc/html/faq.html deleted file mode 100644 index 12da063b78..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/faq.html +++ /dev/null @@ -1,88 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

Frequently Asked Questions

-

-Does STK have a license?

-

Yes, we finally made something official for release 4.3.0. It is listed in the Stk class and a few other places in the distribution, but I'll repeat it here for clarity:

-
-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.  STK currently runs
-with realtime support (audio and MIDI) on Linux, Macintosh OS X,
-and Windows computer platforms. Generic, non-realtime support has
-been tested under NeXTStep, Sun, and other platforms and should
-work with any standard C++ compiler.
-
-STK WWW site: http://ccrma.stanford.edu/software/stk/
-
-The Synthesis ToolKit in C++ (STK)
-Copyright (c) 1995-2012 Perry R. Cook and Gary P. Scavone
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-Any person wishing to distribute modifications to the Software is
-asked to send the modifications to the original developer so that they
-can be incorporated into the canonical version.  This is, however, not
-a binding provision of this license.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-

-Why is my file sample rate wrong?

-

When the FileWvIn class loads a soundfile, it automatically sets its internal read increment based on the soundfile rate and the current STK sample rate. For example, if the current STK sample rate is 44100 Hz and the soundfile rate is 22050 Hz, the read increment, or rate, will be set to 0.5 and the file will be interpolated so that is sounds correct at 44100 Hz. For most cases, this works fine. However, consider the following example:

-
FileWvIn input( "infile" );                 // read an input soundfile
-StkFloat sampleRate = input.getFileRate();
-Stk::setSampleRate( sampleRate );           // set a new STK sample rate based on the file rate
-

With version 4.3 and higher of STK, the FileWvIn class will be notified of a sample rate change and it will automatically adjust its read rate accordingly. Previous versions of STK did not perform this change and thus, the read rate could end up being incorrect. If you do not want FileWvIn to perform this automatic adjustment, you can call the ignoreSampleRateChange() function for a given class instance.

-

-Why does the sound I generated with STK sound like *&#@!?

-

If the resultant sound generated by an STK program sounds like noise (and you're not doing an MLS experiment), the problem is likely related to the byte "endianness" of your computer. By default, STK assumes "big endian" byte order. If you are working with STK classes on a PC (Windows or Linux), you must define the __LITTLE_ENDIAN__ preprocessor definition before compiling. If after reading this you realize you need to make this change, do not forget to recompile all STK classes from scratch.

-

-Why do I get a Tk display error message?

-

The following error may be printed to your terminal window (depending on the version of the tcl/tk interpreter you are running) if you attempt to start an STK tcl/tk interface without the X Server first running:

-
Application initialization failed: this isn't a Tk applicationcouldn't connect to display ":0.0"
-

Simply start your X server and then try the command again.

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/files.html b/source/StkUGens/stk-4.4.4/doc/html/files.html deleted file mode 100644 index b1e41e00a2..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/files.html +++ /dev/null @@ -1,126 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

File List

Here is a list of all documented files with brief descriptions: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ADSR.h [code]
Asymp.h [code]
BandedWG.h [code]
BeeThree.h [code]
BiQuad.h [code]
Blit.h [code]
BlitSaw.h [code]
BlitSquare.h [code]
BlowBotl.h [code]
BlowHole.h [code]
Bowed.h [code]
BowTable.h [code]
Brass.h [code]
Chorus.h [code]
Clarinet.h [code]
Cubic.h [code]
Delay.h [code]
DelayA.h [code]
DelayL.h [code]
Drummer.h [code]
Echo.h [code]
Effect.h [code]
Envelope.h [code]
FileLoop.h [code]
FileRead.h [code]
FileWrite.h [code]
FileWvIn.h [code]
FileWvOut.h [code]
Filter.h [code]
Fir.h [code]
Flute.h [code]
FM.h [code]
FMVoices.h [code]
FormSwep.h [code]
FreeVerb.h [code]
Function.h [code]
Generator.h [code]
Granulate.h [code]
Guitar.h [code]
HevyMetl.h [code]
Iir.h [code]
InetWvIn.h [code]
InetWvOut.h [code]
Instrmnt.h [code]
JCRev.h [code]
JetTable.h [code]
LentPitShift.h [code]
Mandolin.h [code]
Mesh2D.h [code]
Messager.h [code]
MidiFileIn.h [code]
Modal.h [code]
ModalBar.h [code]
Modulate.h [code]
Moog.h [code]
Mutex.h [code]
Noise.h [code]
NRev.h [code]
OnePole.h [code]
OneZero.h [code]
PercFlut.h [code]
Phonemes.h [code]
PitShift.h [code]
Plucked.h [code]
PoleZero.h [code]
PRCRev.h [code]
ReedTable.h [code]
Resonate.h [code]
Rhodey.h [code]
RtAudio.h [code]
RtError.h [code]
RtMidi.h [code]
RtWvIn.h [code]
RtWvOut.h [code]
Sampler.h [code]
Saxofony.h [code]
Shakers.h [code]
Simple.h [code]
SineWave.h [code]
SingWave.h [code]
Sitar.h [code]
Skini.h [code]
Socket.h [code]
Sphere.h [code]
StifKarp.h [code]
Stk.h [code]
TapDelay.h [code]
TcpClient.h [code]
TcpServer.h [code]
Thread.h [code]
TubeBell.h [code]
Twang.h [code]
TwoPole.h [code]
TwoZero.h [code]
UdpSocket.h [code]
Vector3D.h [code]
Voicer.h [code]
VoicForm.h [code]
Whistle.h [code]
Wurley.h [code]
WvIn.h [code]
WvOut.h [code]
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/filtering.html b/source/StkUGens/stk-4.4.4/doc/html/filtering.html deleted file mode 100644 index b0472e9bf8..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/filtering.html +++ /dev/null @@ -1,95 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

Using Filters

In this section, we demonstrate the use of a few of the STK filter classes. The stk::Iir class provides functionality to implement a generalized infinite impulse response (IIR) digital filter, similar to the filter function in Matlab. In this example, we create an stk::Iir instance and initialize it with specific numerator and denominator coefficients. We then compute its impulse response for 20 samples.

-
#include "Iir.h"
-using namespace stk;
-
-int main()
-{
-  StkFrames output( 20, 1 );   // initialize StkFrames to 20 frames and 1 channel (default: 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 );
-
-  Iir 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;
-}
-

The stk::Iir class implements the standard difference equation

-
 a[0]*y[n] = b[0]*x[n] + ... + b[nb]*x[n-nb] - a[1]*y[n-1] - ... - a[na]*y[n-na],
-

where "b" values are numerator coefficients and "a" values are denominator coefficients. Note that if the first denominator coefficient is not 1.0, the Iir class automatically normalizes all filter coefficients by that value. The coefficient values are passed to the Iir class via a C++ vector, a container object provided by the C++ Standard Library.

-

Most STK classes use more specific types of digital filters, such as the stk::OneZero, stk::OnePole, stk::TwoPole, or stk::BiQuad varieties. These classes inherit from the stk::Filter abstract base class and provide specific functionality particular to their use, as well as functions to independently control individual coefficient values.

-

-Resonances:

-

The STK stk::BiQuad and stk::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 stk::Noise generator.

-
#include "BiQuad.h"
-#include "Noise.h"
-using namespace stk;
-
-int main()
-{
-  StkFrames output( 20, 1 );   // initialize StkFrames to 20 frames and 1 channel (default: 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;
-}
-

By passing a boolian value of true as the third argument to the stk::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:

-
#include "BiQuad.h"
-#include "Noise.h"
-using namespace stk;
-
-int main()
-{
-  StkFrames output( 20, 1 );   // initialize StkFrames to 20 frames and 1 channel (default: 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;
-}
-

[Main tutorial page]   [Next tutorial]

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions.html b/source/StkUGens/stk-4.4.4/doc/html/functions.html deleted file mode 100644 index 5cf320a059..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions.html +++ /dev/null @@ -1,108 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- a -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x62.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x62.html deleted file mode 100644 index 74f465694c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x62.html +++ /dev/null @@ -1,97 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- b -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x63.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x63.html deleted file mode 100644 index 298971bc1d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x63.html +++ /dev/null @@ -1,186 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- c -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x64.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x64.html deleted file mode 100644 index 65cd52d666..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x64.html +++ /dev/null @@ -1,100 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- d -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x65.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x65.html deleted file mode 100644 index 53891d10a6..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x65.html +++ /dev/null @@ -1,83 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- e -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x66.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x66.html deleted file mode 100644 index a70afa0d0a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x66.html +++ /dev/null @@ -1,148 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- f -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x67.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x67.html deleted file mode 100644 index 78152be1c7..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x67.html +++ /dev/null @@ -1,221 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- g -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x68.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x68.html deleted file mode 100644 index 95543bef25..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x68.html +++ /dev/null @@ -1,70 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- h -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x69.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x69.html deleted file mode 100644 index 917c776f47..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x69.html +++ /dev/null @@ -1,145 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- i -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6a.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x6a.html deleted file mode 100644 index 280ce56488..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6a.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- j -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6b.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x6b.html deleted file mode 100644 index b0f36e1823..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6b.html +++ /dev/null @@ -1,82 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- k -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6c.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x6c.html deleted file mode 100644 index 095e36b25e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6c.html +++ /dev/null @@ -1,136 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- l -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6d.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x6d.html deleted file mode 100644 index f19bd9111c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6d.html +++ /dev/null @@ -1,98 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- m -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6e.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x6e.html deleted file mode 100644 index edeec21084..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6e.html +++ /dev/null @@ -1,165 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- n -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6f.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x6f.html deleted file mode 100644 index 142b81e2ce..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x6f.html +++ /dev/null @@ -1,111 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- o -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x70.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x70.html deleted file mode 100644 index 14eedffd7b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x70.html +++ /dev/null @@ -1,120 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- p -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x71.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x71.html deleted file mode 100644 index 8c204e7145..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x71.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- q -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x72.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x72.html deleted file mode 100644 index bea351ef17..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x72.html +++ /dev/null @@ -1,145 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- r -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x73.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x73.html deleted file mode 100644 index e864b6771a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x73.html +++ /dev/null @@ -1,689 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- s -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x74.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x74.html deleted file mode 100644 index 4bc736e3df..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x74.html +++ /dev/null @@ -1,227 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- t -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x75.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x75.html deleted file mode 100644 index 69ea8742b6..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x75.html +++ /dev/null @@ -1,82 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- u -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x76.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x76.html deleted file mode 100644 index b73c8f5b5e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x76.html +++ /dev/null @@ -1,76 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- v -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x77.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x77.html deleted file mode 100644 index 393308a9f6..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x77.html +++ /dev/null @@ -1,113 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- w -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_0x7e.html b/source/StkUGens/stk-4.4.4/doc/html/functions_0x7e.html deleted file mode 100644 index 7b31369776..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_0x7e.html +++ /dev/null @@ -1,301 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-Here is a list of all documented class members with links to the class documentation for each member: - -

- ~ -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_enum.html b/source/StkUGens/stk-4.4.4/doc/html/functions_enum.html deleted file mode 100644 index b635739285..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_enum.html +++ /dev/null @@ -1,41 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_eval.html b/source/StkUGens/stk-4.4.4/doc/html/functions_eval.html deleted file mode 100644 index 3fbe59a6ab..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_eval.html +++ /dev/null @@ -1,177 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- a -

- - -

- d -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- u -

- - -

- w -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func.html deleted file mode 100644 index 98f27f9c30..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func.html +++ /dev/null @@ -1,101 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- a -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x62.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x62.html deleted file mode 100644 index 7683a0c085..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x62.html +++ /dev/null @@ -1,97 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- b -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x63.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x63.html deleted file mode 100644 index 73b434c216..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x63.html +++ /dev/null @@ -1,182 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- c -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x64.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x64.html deleted file mode 100644 index ff34c106ec..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x64.html +++ /dev/null @@ -1,85 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- d -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x65.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x65.html deleted file mode 100644 index 84788f96de..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x65.html +++ /dev/null @@ -1,83 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- e -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x66.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x66.html deleted file mode 100644 index af5f2049e3..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x66.html +++ /dev/null @@ -1,124 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- f -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x67.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x67.html deleted file mode 100644 index 9740543e95..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x67.html +++ /dev/null @@ -1,221 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- g -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x68.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x68.html deleted file mode 100644 index c0ca4c504c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x68.html +++ /dev/null @@ -1,70 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- h -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x69.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x69.html deleted file mode 100644 index 4c5894d9ca..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x69.html +++ /dev/null @@ -1,121 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- i -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6a.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6a.html deleted file mode 100644 index fbf82b3c99..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6a.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- j -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6b.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6b.html deleted file mode 100644 index 77335d5c04..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6b.html +++ /dev/null @@ -1,82 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
- -
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6c.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6c.html deleted file mode 100644 index abd12cec8b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6c.html +++ /dev/null @@ -1,126 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
- -
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6d.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6d.html deleted file mode 100644 index 0cd4d2f329..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6d.html +++ /dev/null @@ -1,91 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- m -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6e.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6e.html deleted file mode 100644 index b5f3be9c4b..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6e.html +++ /dev/null @@ -1,152 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
- -
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6f.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6f.html deleted file mode 100644 index d82bf3a2e9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x6f.html +++ /dev/null @@ -1,108 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- o -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x70.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x70.html deleted file mode 100644 index d9a635daa2..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x70.html +++ /dev/null @@ -1,114 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- p -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x71.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x71.html deleted file mode 100644 index da26565582..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x71.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- q -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x72.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x72.html deleted file mode 100644 index d813a8fbce..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x72.html +++ /dev/null @@ -1,130 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- r -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x73.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x73.html deleted file mode 100644 index 74709bbbe9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x73.html +++ /dev/null @@ -1,659 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- s -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x74.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x74.html deleted file mode 100644 index ab68ae6998..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x74.html +++ /dev/null @@ -1,212 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- t -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x75.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x75.html deleted file mode 100644 index f6abcfcd4c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x75.html +++ /dev/null @@ -1,73 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- u -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x76.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x76.html deleted file mode 100644 index 474e2d66f5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x76.html +++ /dev/null @@ -1,76 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- v -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x77.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x77.html deleted file mode 100644 index 46871a2d20..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x77.html +++ /dev/null @@ -1,98 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- w -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x7e.html b/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x7e.html deleted file mode 100644 index f1be29a66f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_func_0x7e.html +++ /dev/null @@ -1,301 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- ~ -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_type.html b/source/StkUGens/stk-4.4.4/doc/html/functions_type.html deleted file mode 100644 index dc41db5f5d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_type.html +++ /dev/null @@ -1,37 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/functions_vars.html b/source/StkUGens/stk-4.4.4/doc/html/functions_vars.html deleted file mode 100644 index 322091e485..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/functions_vars.html +++ /dev/null @@ -1,185 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- -
-
-  - -

- c -

- - -

- d -

- - -

- f -

- - -

- i -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- t -

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/fundamentals.html b/source/StkUGens/stk-4.4.4/doc/html/fundamentals.html deleted file mode 100644 index c4418e41b6..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/fundamentals.html +++ /dev/null @@ -1,74 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

STK Fundamentals

The Synthesis ToolKit is implemented in the C++ programming language. STK does not attempt to provide a new programming environment or paradigm but rather provides a set of objects that can be used within a normal C++ programming framework. Therefore, it is expected that users of STK will have some familiarity with C/C++ programming concepts. That said, the STK classes do have some particular idiosyncrasies that we will mention here. Starting with STK version 4.4, all STK classes except RtAudio, RtMidi, and RtError are defined within the stk namespace.

-

-Computations:

-

Audio and control signals throughout STK use a floating-point data type, StkFloat, 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 stk::Noise class outputs random floating-point numbers in the range +/-1.0. The computation of such values occurs in the stk::Noise::tick() function. The following program will generate 20 random floating-point (StkFloat) values in the range -1.0 to +1.0:

-
#include "Noise.h"
-using namespace stk;
-
-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;
-}
-

Nearly all STK classes implement tick() functions that 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 one or more overloaded tick() functions that can be used for vectorized computations, as shown in the next example.

-
#include "Noise.h"
-using namespace stk;
-
-int main()
-{
-  StkFrames output(20, 1);   // initialize StkFrames to 20 frames and 1 channel (default: 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;
-}
-

In this way, it might be possible to achieve improved processing efficiency using vectorized computations. The StkFrames class is a relatively 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. Further, the StkFrames class provides data interpolation and subscripting functionality by frame/channel values.

-

-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 that roughly group many of the classes according to function as follows:

- -

[Main tutorial page]   [Next tutorial]

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/globals.html b/source/StkUGens/stk-4.4.4/doc/html/globals.html deleted file mode 100644 index 3ea07728d2..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/globals.html +++ /dev/null @@ -1,42 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- -
-
-Here is a list of all documented file members with links to the documentation: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/globals_type.html b/source/StkUGens/stk-4.4.4/doc/html/globals_type.html deleted file mode 100644 index a62ef89ae4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/globals_type.html +++ /dev/null @@ -1,42 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- -
-
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/graph_legend.dot b/source/StkUGens/stk-4.4.4/doc/html/graph_legend.dot deleted file mode 100644 index 5420927dd8..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/graph_legend.dot +++ /dev/null @@ -1,22 +0,0 @@ -digraph G -{ - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=record]; - Node9 [shape="box",label="Inherited",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",style="filled" fontcolor="white"]; - Node10 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; - Node10 [shape="box",label="PublicBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classPublicBase.html"]; - Node11 -> Node10 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; - Node11 [shape="box",label="Truncated",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="red",URL="$classTruncated.html"]; - Node13 -> Node9 [dir=back,color="darkgreen",fontsize=10,style="solid",fontname="Helvetica"]; - Node13 [shape="box",label="ProtectedBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classProtectedBase.html"]; - Node14 -> Node9 [dir=back,color="firebrick4",fontsize=10,style="solid",fontname="Helvetica"]; - Node14 [shape="box",label="PrivateBase",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classPrivateBase.html"]; - Node15 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; - Node15 [shape="box",label="Undocumented",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="grey75"]; - Node16 -> Node9 [dir=back,color="midnightblue",fontsize=10,style="solid",fontname="Helvetica"]; - Node16 [shape="box",label="Templ< int >",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classTempl.html"]; - Node17 -> Node16 [dir=back,color="orange",fontsize=10,style="dashed",label="< int >",fontname="Helvetica"]; - Node17 [shape="box",label="Templ< T >",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classTempl.html"]; - Node18 -> Node9 [dir=back,color="darkorchid3",fontsize=10,style="dashed",label="m_usedClass",fontname="Helvetica"]; - Node18 [shape="box",label="Used",fontsize=10,height=0.2,width=0.4,fontname="Helvetica",color="black",URL="$classUsed.html"]; -} diff --git a/source/StkUGens/stk-4.4.4/doc/html/hello.html b/source/StkUGens/stk-4.4.4/doc/html/hello.html deleted file mode 100644 index ded544921a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/hello.html +++ /dev/null @@ -1,116 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

Hello Sine!

We'll continue our introduction to the Synthesis ToolKit with a simple sine-wave oscillator program. STK provides two different classes for sine-wave generation. We will first look at a generic waveform oscillator class, stk::FileLoop, that 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 stk::FileWvOut to write the result to a 16-bit, WAV formatted audio file.

-
// sineosc.cpp
-
-#include "FileLoop.h"
-#include "FileWvOut.h"
-using namespace stk;
-
-int main()
-{
-  // Set the global sample rate before creating class instances.
-  Stk::setSampleRate( 44100.0 );
-
-  FileLoop input;
-  FileWvOut output;
-
-  // Load the sine wave file.
-  input.openFile( "rawwaves/sinewave.raw", true );
-
-  // Open a 16-bit, one-channel WAV formatted output file
-  output.openFile( "hellosine.wav", 1, FileWrite::FILE_WAV, Stk::STK_SINT16 );
-
-  input.setFrequency( 440.0 );
-
-  // Run the oscillator for 40000 samples, writing to the output file
-  for ( int i=0; i<40000; i++ )
-    output.tick( input.tick() );
-
-  return 0;
-}
-

stk::FileLoop is a subclass of stk::FileWvIn, 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. stk::FileWvIn provides interpolating, read-once ("oneshot") functionality, as well as methods for setting the read rate and read position.

-

stk::FileWvIn provides a "tick level" and interpolating interface to the stk::FileRead class. Likewise, stk::FileWvOut provides a "tick -level" interface to the stk::FileWrite class. stk::FileRead and FileWrite both support 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. stk::FileWvOut does not currently offer data interpolation functionality.

-

A number of STK parent classes, including stk::WvIn, stk::WvOut, stk::Instrmnt, stk::Generator, and stk::Effect, (and some or all of their subclasses) support multi-channel sample frames. If a single-sample version of the tick() function is called for these classes, a full sample frame is computed but only a single value is either input and/or output. For example, if the single-sample tick() function is called for subclasses of stk::WvOut, the sample argument is written to all channels in the one computed frame. For classes returning values, an optional channel argument specifies which channel value is returned from the computed frame (the default is always channel 0). To input and/or output multichannel data to these classes, the overloaded tick() functions taking StkFrames reference arguments should be used.

-

Nearly all STK classes inherit from the stk::Stk base class. Stk provides a static sample rate that 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.

-

-Error Handling

-

The ToolKit has some basic C++ error handling functionality built in. Classes that 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 STK tutorial program
-
-#include "FileLoop.h"
-#include "FileWvOut.h"
-#include <cstdlib>
-
-using namespace stk;
-
-int main()
-{
-  // Set the global sample rate before creating class instances.
-  Stk::setSampleRate( 44100.0 );
-
-  int nFrames = 100000;
-  FileLoop input;
-  FileWvOut output;
-
-  try {
-    // Load the sine wave file.
-    input.openFile( "rawwaves/sinewave.raw", true );
-
-    // Open a 16-bit, one-channel WAV formatted output file
-    output.openFile( "hellosine.wav", 1, FileWrite::FILE_WAV, Stk::STK_SINT16 );
-  }
-  catch ( StkError & ) {
-    exit( 1 );
-  }
-
-  input.setFrequency( 440.0 );
-
-  // Option 1: Use StkFrames
-  /*
-  StkFrames frames( nFrames, 1 );
-  try {
-    output.tick( input.tick( frames ) );
-  }
-  catch ( StkError & ) {
-    exit( 1 );
-  }
-  */
-
-  // Option 2: Single-sample computations
-  for ( int i=0; i<nFrames; i++ ) {
-    try {
-      output.tick( input.tick() );
-    }
-    catch ( StkError & ) {
-      exit( 1 );
-    }
-  }
-
-  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.

-

[Main tutorial page]   [Next tutorial]

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/hierarchy.html b/source/StkUGens/stk-4.4.4/doc/html/hierarchy.html deleted file mode 100644 index b82302cfc0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/hierarchy.html +++ /dev/null @@ -1,162 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/index.html b/source/StkUGens/stk-4.4.4/doc/html/index.html deleted file mode 100644 index aac5054f9d..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/index.html +++ /dev/null @@ -1,37 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

The Synthesis ToolKit in C++ (STK)

4.4.4

- -

Perry R. Cook & Gary P. Scavone

-

The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. The Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (all source included, no unusual libraries, and no hidden drivers). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 15 years now. STK currently runs with realtime support (audio and MIDI) on Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler.

- -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/information.html b/source/StkUGens/stk-4.4.4/doc/html/information.html deleted file mode 100644 index cca5fc8459..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/information.html +++ /dev/null @@ -1,95 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

General Information

References

-
    -
  • -

    ICMC2005 Paper
    - A paper by Gary and Perry detailing recent updates to the Synthesis ToolKit in C++.

    -

    -
  • -
  • -

    ICMC99 Paper
    - A not-so-recent paper by Perry and Gary about the Synthesis ToolKit in C++.

    -

    -
  • -
  • -Book Chapter: Audio Anecdotes
    - Here's a link to a book that includes an chapter on STK.
  • -
-

What is the Synthesis ToolKit?

-

The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. The Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (all source included, no unusual libraries, and no hidden drivers). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 15 years now. STK currently runs with realtime support (audio and MIDI) on Linux, Macintosh OS X, and Windows computer platforms. Generic, non-realtime support has been tested under NeXTStep, Sun, and other platforms and should work with any standard C++ compiler.

-

The Synthesis ToolKit is free. The only parts of the Synthesis ToolKit that are platform-dependent concern real-time audio and MIDI input and output, and that is taken care of with a few special classes. The interface for MIDI input and the simple 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).

-

What the Synthesis ToolKit is not.

-

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 Tcl/Tk (that is freely distributed for all the supported ToolKit platforms). A number of Tcl/Tk GUI scripts are distributed with the ToolKit release. For control, the Synthesis Toolkit uses raw MIDI (on supported platforms), and SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like text message synthesis control format).

-

A brief history of the Synthesis ToolKit in C++.

-

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 Princeton Sound Kitchen, Perry Cook's home page at Princeton, Gary Scavone's home page at McGill University, and the Synthesis ToolKit home page. 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 PeRColate. Help on real-time sound and MIDI has been provided over the years by Tim Stilson, Bill Putnam, and Gabriel Maldonado.

-

Legal and Ethical 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, it would be nice if you would share. If you make compositions with it, put us in the program notes.

-

Some of the concepts are covered by various patents, some known to us and likely others that 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.

-

License

-

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

-

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

-

Any person wishing to distribute modifications to the Software is asked to send the modifications to the original developer so that they can be incorporated into the canonical version. This is, however, not a binding provision of this license.

-

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

-

Disclaimer

-

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 very weird behavior that also depends on the particular CPU and OS. Let us know about bugs you find and we'll do our best to correct them.

-

Perry's Notes From the Original Distribution of STK

-

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.

-
    -
  1. -

    I needed to port many of the things I've done into something that is generic enough to port further to different machines.

    -

    -
  2. -
  3. -

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

    -

    -
  4. -
  5. -

    The classic difficulties most people have in trying to implement physical models are:

    -
      -
    • -

      They have trouble understanding the papers, and/or in turning the theory into practice.

      -

      -
    • -
    • -The physical model instruments are a pain to get to oscillate, and coming up with stable and meaningful parameter values is required to get the models to work at all.
    • -
    -

    This set of C++ unit generators and instruments might help to diminish the scores of emails I get asking what to do with those block diagrams I put in my papers.

    -

    -
  6. -
  7. -

    I wanted to try some new stuff with modal synthesis, and implement some classic FM patches as well.

    -

    -
  8. -
  9. -

    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.

    -

    -
  10. -
  11. -More rationalizations to follow ...
  12. -
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/instruments.html b/source/StkUGens/stk-4.4.4/doc/html/instruments.html deleted file mode 100644 index 8eecabf6a3..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/instruments.html +++ /dev/null @@ -1,131 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

Instruments

The ToolKit comes with a wide variety of synthesis algorithms, all of which inherit from the stk::Instrmnt class. In this example, we'll fire up an instance of the stk::BeeThree FM synthesis class and show how its frequency can be modified over time.

-
// bethree.cpp STK tutorial program
-
-#include "BeeThree.h"
-#include "RtAudio.h"
-using namespace stk;
-
-// The TickData structure holds all the class instances and data that
-// are shared by the various processing functions.
-struct TickData {
-  Instrmnt *instrument;
-  StkFloat frequency;
-  StkFloat scaler;
-  long counter;
-  bool done;
-
-  // Default constructor.
-  TickData()
-    : instrument(0), scaler(1.0), counter(0), done( false ) {}
-};
-
-// This tick() function handles sample computation only.  It will be
-// called automatically when the system needs a new buffer of audio
-// samples.
-int tick( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
-         double streamTime, RtAudioStreamStatus status, void *userData )
-{
-  TickData *data = (TickData *) userData;
-  register StkFloat *samples = (StkFloat *) outputBuffer;
-
-  for ( unsigned int i=0; i<nBufferFrames; i++ ) {
-    *samples++ = data->instrument->tick();
-    if ( ++data->counter % 2000 == 0 ) {
-      data->scaler += 0.025;
-      data->instrument->setFrequency( data->frequency * data->scaler );
-    }
-  }
-
-  if ( data->counter > 80000 )
-    data->done = true;
-
-  return 0;
-}
-
-int main()
-{
-  // Set the global sample rate and rawwave path before creating class instances.
-  Stk::setSampleRate( 44100.0 );
-  Stk::setRawwavePath( "../../rawwaves/" );
-
-  TickData data;
-  RtAudio dac;
-
-  // Figure out how many bytes in an StkFloat and setup the RtAudio stream.
-  RtAudio::StreamParameters parameters;
-  parameters.deviceId = dac.getDefaultOutputDevice();
-  parameters.nChannels = 1;
-  RtAudioFormat format = ( sizeof(StkFloat) == 8 ) ? RTAUDIO_FLOAT64 : RTAUDIO_FLOAT32;
-  unsigned int bufferFrames = RT_BUFFER_SIZE;
-  try {
-    dac.openStream( &parameters, NULL, format, (unsigned int)Stk::sampleRate(), &bufferFrames, &tick, (void *)&data );
-  }
-  catch ( RtError& error ) {
-    error.printMessage();
-    goto cleanup;
-  }
-
-  try {
-    // Define and load the BeeThree instrument
-    data.instrument = new BeeThree();
-  }
-  catch ( StkError & ) {
-    goto cleanup;
-  }
-
-  data.frequency = 220.0;
-  data.instrument->noteOn( data.frequency, 0.5 );
-
-  try {
-    dac.startStream();
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-    goto cleanup;
-  }
-
-  // Block waiting until callback signals done.
-  while ( !data.done )
-    Stk::sleep( 100 );
-  
-  // Shut down the callback and output stream.
-  try {
-    dac.closeStream();
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-  }
-
- cleanup:
-  delete data.instrument;
-
-  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 that are continuously excited (e.g., stk::Clarinet, stk::BeeThree) will continue to sound until stopped with a noteOff(). Impulsively excited instrument sounds (e.g., stk::Plucked, stk::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.

-

[Main tutorial page]   [Next tutorial]

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/links.html b/source/StkUGens/stk-4.4.4/doc/html/links.html deleted file mode 100644 index 26a2c24a04..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/links.html +++ /dev/null @@ -1,57 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/maillist.html b/source/StkUGens/stk-4.4.4/doc/html/maillist.html deleted file mode 100644 index fbafcefeec..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/maillist.html +++ /dev/null @@ -1,28 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

The Mail List

An STK 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.

-

For answers to frequently asked questions, check the list archives.

-

To join send a message to <stk-request@ccrma.stanford.edu> with the contents: subscribe

-

To be removed from the list send a message to <stk-request@ccrma.stanford.edu> with the contents: unsubscribe

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/mcgill.gif b/source/StkUGens/stk-4.4.4/doc/html/mcgill.gif deleted file mode 100644 index 5fe2a4beb59ac205296cc5461c40a1c816f016f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3810 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 Yue97uIAx~6pUXP+!yyYJBLw$<0l;PV8vp - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

Multi-Channel I/O

The ToolKit stk::WvIn and stk::WvOut classes (and their subclasses) support multi-channel audio data input and output. Several other abstract base classes, such as stk::Instrmnt, stk::Generator, and stk::Effect, also support multi-channel computations though not all of their subclasses produce or take multi-channel data. 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. For classes supporting multi-channel data, one must distinguish the tick() functions taking or producing single StkFloat arguments from those taking stk::StkFrames& arguments. If a single-sample version of the tick() function is called for these classes, a full sample frame is computed but only a single value is either input and/or output. For example, if the single-sample tick() function is called for subclasses of WvOut, the sample argument is written to all channels in the one computed frame. For classes returning values, an optional channel argument specifies which channel value is returned from the computed frame (the default is always channel 0). To input and/or output multichannel data to these classes, the overloaded tick() functions taking StkFrames reference arguments should be used.

-

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 stk::FileWvOut 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 STK tutorial program
-
-#include "SineWave.h"
-#include "FileWvOut.h"
-#include <cstdlib>
-
-using namespace stk;
-
-int main()
-{
-  // Set the global sample rate before creating class instances.
-  Stk::setSampleRate( 44100.0 );
-
-  int i;
-  FileWvOut output;
-  SineWave inputs[4];
-
-  // Set the sine wave frequencies.
-  for ( i=0; i<4; i++ )
-    inputs[i].setFrequency( 220.0 * (i+1) );
-
-  // Define and open a 16-bit, four-channel AIFF formatted output file
-  try {
-    output.openFile( "foursine.aif", 4, FileWrite::FILE_AIF, Stk::STK_SINT16 );
-  }
-  catch (StkError &) {
-    exit( 1 );
-  }
-
-  // Write two seconds of four sines to the output file
-  StkFrames frames( 88200, 4 );
-  for ( i=0; i<4; i++ )
-    inputs[i].tick( frames, i );
-
-  output.tick( frames );
-
-  // Now write the first sine to all four channels for two seconds
-  for ( i=0; i<88200; i++ ) {
-    output.tick( inputs[0].tick() );
-  }
-
-  return 0;
-}
-

[Main tutorial page]   [Next tutorial]

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/namespaces.html b/source/StkUGens/stk-4.4.4/doc/html/namespaces.html deleted file mode 100644 index a9d5f3e38f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/namespaces.html +++ /dev/null @@ -1,25 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

Namespace List

Here is a list of all documented namespaces with brief descriptions: - -
stkThe STK namespace
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/namespacestk.html b/source/StkUGens/stk-4.4.4/doc/html/namespacestk.html deleted file mode 100644 index 7719762cb9..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/namespacestk.html +++ /dev/null @@ -1,233 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk Namespace Reference

-

The STK namespace. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Classes

class  ADSR
 STK ADSR envelope class. More...
class  Asymp
 STK asymptotic curve envelope class. More...
class  BandedWG
 Banded waveguide modeling class. More...
class  BeeThree
 STK Hammond-oid organ FM synthesis instrument. More...
class  BiQuad
 STK biquad (two-pole, two-zero) filter class. More...
class  Blit
 STK band-limited impulse train class. More...
class  BlitSaw
 STK band-limited sawtooth wave class. More...
class  BlitSquare
 STK band-limited square wave class. More...
class  BlowBotl
 STK blown bottle instrument class. More...
class  BlowHole
 STK clarinet physical model with one register hole and one tonehole. More...
class  Bowed
 STK bowed string instrument class. More...
class  BowTable
 STK bowed string table class. More...
class  Brass
 STK simple brass instrument class. More...
class  Chorus
 STK chorus effect class. More...
class  Clarinet
 STK clarinet physical model class. More...
class  Cubic
 STK cubic non-linearity class. More...
class  Delay
 STK non-interpolating delay line class. More...
class  DelayA
 STK allpass interpolating delay line class. More...
class  DelayL
 STK linear interpolating delay line class. More...
class  Drummer
 STK drum sample player class. More...
class  Echo
 STK echo effect class. More...
class  Effect
 STK abstract effects parent class. More...
class  Envelope
 STK linear line envelope class. More...
class  FileLoop
 STK file looping / oscillator class. More...
class  FileRead
 STK audio file input class. More...
class  FileWrite
 STK audio file output class. More...
class  FileWvIn
 STK audio file input class. More...
class  FileWvOut
 STK audio file output class. More...
class  Filter
 STK abstract filter class. More...
class  Fir
 STK general finite impulse response filter class. More...
class  Flute
 STK flute physical model class. More...
class  FM
 STK abstract FM synthesis base class. More...
class  FMVoices
 STK singing FM synthesis instrument. More...
class  FormSwep
 STK sweepable formant filter class. More...
class  FreeVerb
 Jezar at Dreampoint's FreeVerb, implemented in STK. More...
class  Function
 STK abstract function parent class. More...
class  Generator
 STK abstract unit generator parent class. More...
class  Granulate
 STK granular synthesis class. More...
class  Guitar
 STK guitar model class. More...
class  HevyMetl
 STK heavy metal FM synthesis instrument. More...
class  Iir
 STK general infinite impulse response filter class. More...
class  InetWvIn
 STK internet streaming input class. More...
class  InetWvOut
 STK internet streaming output class. More...
class  Instrmnt
 STK instrument abstract base class. More...
class  JCRev
 John Chowning's reverberator class. More...
class  JetTable
 STK jet table class. More...
class  LentPitShift
 Pitch shifter effect class based on the Lent algorithm. More...
class  Mandolin
 STK mandolin instrument model class. More...
class  Mesh2D
 Two-dimensional rectilinear waveguide mesh class. More...
class  Messager
 STK input control message parser. More...
class  MidiFileIn
 A standard MIDI file reading/parsing class. More...
class  Modal
 STK resonance model abstract base class. More...
class  ModalBar
 STK resonant bar instrument class. More...
class  Modulate
 STK periodic/random modulator. More...
class  Moog
 STK moog-like swept filter sampling synthesis class. More...
class  Mutex
 STK mutex class. More...
class  Noise
 STK noise generator. More...
class  NRev
 CCRMA's NRev reverberator class. More...
class  OnePole
 STK one-pole filter class. More...
class  OneZero
 STK one-zero filter class. More...
class  PercFlut
 STK percussive flute FM synthesis instrument. More...
class  Phonemes
 STK phonemes table. More...
class  PitShift
 STK simple pitch shifter effect class. More...
class  Plucked
 STK basic plucked string class. More...
class  PoleZero
 STK one-pole, one-zero filter class. More...
class  PRCRev
 Perry's simple reverberator class. More...
class  ReedTable
 STK reed table class. More...
class  Resonate
 STK noise driven formant filter. More...
class  Rhodey
 STK Fender Rhodes electric piano FM synthesis instrument. More...
class  RtWvIn
 STK realtime audio (blocking) input class. More...
class  RtWvOut
 STK realtime audio (blocking) output class. More...
class  Sampler
 STK sampling synthesis abstract base class. More...
class  Saxofony
 STK faux conical bore reed instrument class. More...
class  Shakers
 PhISEM and PhOLIES class. More...
class  Simple
 STK wavetable/noise instrument. More...
class  SineWave
 STK sinusoid oscillator class. More...
class  SingWave
 STK "singing" looped soundfile class. More...
class  Sitar
 STK sitar string model class. More...
class  Skini
 STK SKINI parsing class. More...
class  Socket
 STK internet socket abstract base class. More...
class  Sphere
 STK sphere class. More...
class  StifKarp
 STK plucked stiff string instrument. More...
class  StkError
 STK error handling class. More...
class  Stk
 STK base class. More...
class  StkFrames
 An STK class to handle vectorized audio data. More...
class  TapDelay
 STK non-interpolating tapped delay line class. More...
class  TcpClient
 STK TCP socket client class. More...
class  TcpServer
 STK TCP socket server class. More...
class  Thread
 STK thread class. More...
class  TubeBell
 STK tubular bell (orchestral chime) FM synthesis instrument. More...
class  Twang
 STK enhanced plucked string class. More...
class  TwoPole
 STK two-pole filter class. More...
class  TwoZero
 STK two-zero filter class. More...
class  UdpSocket
 STK UDP socket server/client class. More...
class  Vector3D
 STK 3D vector class. More...
class  Voicer
 STK voice manager class. More...
class  VoicForm
 Four formant synthesis instrument. More...
class  Whistle
 STK police/referee whistle instrument class. More...
class  Wurley
 STK Wurlitzer electric piano FM synthesis instrument. More...
class  WvIn
 STK audio input abstract base class. More...
class  WvOut
 STK audio output abstract base class. More...
-

Detailed Description

-

The STK namespace.

-

Most Stk classes are defined within the STK namespace. Exceptions to this include the classes RtAudio, RtMidi, and RtError.

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/open.gif b/source/StkUGens/stk-4.4.4/doc/html/open.gif deleted file mode 100644 index b9030096496afff143774efa11221bd18ab80405..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54 zcmZ?wbhEHbxBdtN1B2pE7DfgJMg|=q8z|1nz`(@Y)4%fcga1rDX=+u0 Hj11NQK@JS4 diff --git a/source/StkUGens/stk-4.4.4/doc/html/pages.html b/source/StkUGens/stk-4.4.4/doc/html/pages.html deleted file mode 100644 index 1cf91a1493..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/pages.html +++ /dev/null @@ -1,64 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/papers/STKsiggraph96.pdf b/source/StkUGens/stk-4.4.4/doc/html/papers/STKsiggraph96.pdf deleted file mode 100644 index de2d6dbb240faa66ae3a3aa5b5579b1a6030bb1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62635 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

QZFmLZeyE53?UY}{o;0tkS+j=0(7Y*25Yhlmh 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 LhYunjMdAMs?)z^~ diff --git a/source/StkUGens/stk-4.4.4/doc/html/papers/stkicmc99.pdf b/source/StkUGens/stk-4.4.4/doc/html/papers/stkicmc99.pdf deleted file mode 100644 index 81251b71dc4c6ad9dcc8d03671e249f03cfd761d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76701 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 diff --git a/source/StkUGens/stk-4.4.4/doc/html/polyvoices.html b/source/StkUGens/stk-4.4.4/doc/html/polyvoices.html deleted file mode 100644 index e64b31908a..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/polyvoices.html +++ /dev/null @@ -1,213 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -

-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

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 stk::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 "group" number. All sounding instrument outputs are summed and returned via the tick() function. The stk::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 stk::Voicer interrupts the oldest sounding voice. The user is responsible for creating and deleting all instrument instances.

-

In the following example, we modify the controlbee.cpp program to make use of three stk::BeeThree instruments, all controlled using a stk::Voicer.

-
// threebees.cpp STK tutorial program
-
-#include "BeeThree.h"
-#include "RtAudio.h"
-#include "Messager.h"
-#include "Voicer.h"
-#include "SKINI.msg"
-
-#include <algorithm>
-using std::min;
-
-using namespace stk;
-
-// The TickData structure holds all the class instances and data that
-// are shared by the various processing functions.
-struct TickData {
-  Voicer voicer;
-  Messager messager;
-  Skini::Message message;
-  int counter;
-  bool haveMessage;
-  bool done;
-
-  // Default constructor.
-  TickData()
-    : counter(0), haveMessage(false), done( false ) {}
-};
-
-#define DELTA_CONTROL_TICKS 64 // default sample frames between control input checks
-
-// The processMessage() function encapsulates the handling of control
-// messages.  It can be easily relocated within a program structure
-// depending on the desired scheduling scheme.
-void processMessage( TickData* data )
-{
-  register StkFloat value1 = data->message.floatValues[0];
-  register StkFloat value2 = data->message.floatValues[1];
-
-  switch( data->message.type ) {
-
-  case __SK_Exit_:
-    data->done = true;
-    return;
-
-  case __SK_NoteOn_:
-    if ( value2 == 0.0 ) // velocity is zero ... really a NoteOff
-      data->voicer.noteOff( value1, 64.0 );
-    else { // a NoteOn
-      data->voicer.noteOn( value1, value2 );
-    }
-    break;
-
-  case __SK_NoteOff_:
-    data->voicer.noteOff( value1, value2 );
-    break;
-
-  case __SK_ControlChange_:
-    data->voicer.controlChange( (int) value1, value2 );
-    break;
-
-  case __SK_AfterTouch_:
-    data->voicer.controlChange( 128, value1 );
-
-  case __SK_PitchChange_:
-    data->voicer.setFrequency( value1 );
-    break;
-
-  case __SK_PitchBend_:
-    data->voicer.pitchBend( value1 );
-
-  } // end of switch
-
-  data->haveMessage = false;
-  return;
-}
-
-// This tick() function handles sample computation and scheduling of
-// control updates.  It will be called automatically when the system
-// needs a new buffer of audio samples.
-int tick( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
-         double streamTime, RtAudioStreamStatus status, void *dataPointer )
-{
-  TickData *data = (TickData *) dataPointer;
-  register StkFloat *samples = (StkFloat *) outputBuffer;
-  int counter, nTicks = (int) nBufferFrames;
-
-  while ( nTicks > 0 && !data->done ) {
-
-    if ( !data->haveMessage ) {
-      data->messager.popMessage( data->message );
-      if ( data->message.type > 0 ) {
-        data->counter = (long) (data->message.time * Stk::sampleRate());
-        data->haveMessage = true;
-      }
-      else
-        data->counter = DELTA_CONTROL_TICKS;
-    }
-
-    counter = min( nTicks, data->counter );
-    data->counter -= counter;
-
-    for ( int i=0; i<counter; i++ ) {
-      *samples++ = data->voicer.tick();
-      nTicks--;
-    }
-    if ( nTicks == 0 ) break;
-
-    // Process control messages.
-    if ( data->haveMessage ) processMessage( data );
-  }
-
-  return 0;
-}
-
-int main()
-{
-  // Set the global sample rate and rawwave path before creating class instances.
-  Stk::setSampleRate( 44100.0 );
-  Stk::setRawwavePath( "../../rawwaves/" );
-
-  int i;
-  TickData data;
-  RtAudio dac;
-  Instrmnt *instrument[3];
-  for ( i=0; i<3; i++ ) instrument[i] = 0;
-
-  // Figure out how many bytes in an StkFloat and setup the RtAudio stream.
-  RtAudio::StreamParameters parameters;
-  parameters.deviceId = dac.getDefaultOutputDevice();
-  parameters.nChannels = 1;
-  RtAudioFormat format = ( sizeof(StkFloat) == 8 ) ? RTAUDIO_FLOAT64 : RTAUDIO_FLOAT32;
-  unsigned int bufferFrames = RT_BUFFER_SIZE;
-  try {
-    dac.openStream( &parameters, NULL, format, (unsigned int)Stk::sampleRate(), &bufferFrames, &tick, (void *)&data );
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-    goto cleanup;
-  }
-
-  try {
-    // Define and load the BeeThree instruments
-    for ( i=0; i<3; i++ )
-      instrument[i] = new BeeThree();
-  }
-  catch ( StkError & ) {
-    goto cleanup;
-  }
-
-  // "Add" the instruments to the voicer.
-  for ( i=0; i<3; i++ )
-    data.voicer.addInstrument( instrument[i] );
-
-  if ( data.messager.startStdInput() == false )
-    goto cleanup;
-
-  try {
-    dac.startStream();
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-    goto cleanup;
-  }
-
-  // Block waiting until callback signals done.
-  while ( !data.done )
-    Stk::sleep( 100 );
-  
-  // Shut down the callback and output stream.
-  try {
-    dac.closeStream();
-  }
-  catch ( RtError &error ) {
-    error.printMessage();
-  }
-
- cleanup:
-  for ( i=0; i<3; i++ ) delete instrument[i];
-
-  return 0;
-}
-

We have written this program to accept control messages from STDIN. Assuming the program is compiled as threebees, the three-voice SKINI scorefile bachfugue.ski (located in the scores directory with the examples) can be redirected to the program as:

-
threebees < scores/bachfugue.ski
-

For more fun, surf to Kern Scores for a huge assortment of other scorefiles that can be downloaded in the SKINI format.

-

Another easy extension would be to add the stk::Messager::startMidiInput() function to the program and then play the instruments via a MIDI keyboard.

-

[Main tutorial page]

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/princeton.gif b/source/StkUGens/stk-4.4.4/doc/html/princeton.gif deleted file mode 100644 index 165d455859a1d67151d6453392fb64e6413083cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5476 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 - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

Realtime Audio (blocking)

In this section, we modify the sineosc.cpp program in order to send the output to the default audio playback device on your computer system. We also make use of the stk::SineWave class as a sine-wave oscillator. stk::SineWave computes an internal, static sine-wave table when its first instance is created. Subsequent instances make use of the same table. The default table length, specified in SineWave.h, is 2048 samples.

-
// rtsine.cpp STK tutorial program
-
-#include "SineWave.h"
-#include "RtWvOut.h"
-#include <cstdlib>
-
-using namespace stk;
-
-int main()
-{
-  // Set the global sample rate before creating class instances.
-  Stk::setSampleRate( 44100.0 );
-  Stk::showWarnings( true );
-
-  int nFrames = 100000;
-  SineWave sine;
-  RtWvOut *dac = 0;
-
-  try {
-    // Define and open the default realtime output device for one-channel playback
-    dac = new RtWvOut( 1 );
-  }
-  catch ( StkError & ) {
-    exit( 1 );
-  }
-
-  sine.setFrequency( 441.0 );
-
-  // Option 1: Use StkFrames
-  /*
-  StkFrames frames( nFrames, 1 );
-  try {
-    dac->tick( sine.tick( frames ) );
-  }
-  catch ( StkError & ) {
-    goto cleanup;
-  }
-  */
-
-  // Option 2: Single-sample computations
-  for ( int i=0; i<nFrames; i++ ) {
-    try {
-      dac->tick( sine.tick() );
-     }
-    catch ( StkError & ) {
-      goto cleanup;
-    }
-  }
-
- cleanup:
-  delete dac;
-
-  return 0;
-}
-

The class stk::RtWvOut is a protected subclass of stk::WvOut. A number of optional constructor arguments can be used to fine tune its performance for a given system. stk::RtWvOut provides a "single-sample", blocking interface to the RtAudio class. Note that stk::RtWvOut (as well as the stk::RtWvIn class described below) makes use of RtAudio's callback input/output functionality by creating a large ring-buffer into which data is written. These classes should not be used when low-latency and robust performance is necessary

-

Though not used here, an stk::RtWvIn class exists as well that can be used to read realtime audio data from an input device. See the record.cpp example program in the examples project for more information.

-

It may be possible to use an instance of stk::RtWvOut and an instance of stk::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 RtAudio to achieve this behavior, as described in the next section. See the effects project or the duplex.cpp example program in the examples project for more information.

-

When using any realtime STK class (RtAudio, stk::RtWvOut, stk::RtWvIn, RtMidi, stk::InetWvIn, stk::InetWvOut, stk::Socket, stk::UdpSocket, stk::TcpServer, stk::TcpClient, and stk::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):

-
g++ -Wall -D__LINUX_ALSA__ -D__LITTLE_ENDIAN__ -o rtsine Stk.cpp Generator.cpp SineWave.cpp WvOut.cpp \
-    RtWvOut.cpp RtAudio.cpp rtsine.cpp -lpthread -lasound
-

On a Macintosh OS X system, the syntax would be:

-
g++ -Wall -D__MACOSX_CORE__ -o rtsine Stk.cpp Generator.cpp SineWave.cpp WvOut.cpp RtWvOut.cpp RtAudio.cpp \
-   rtsine.cpp -lpthread -framework CoreAudio -framework CoreMIDI -framework CoreFoundation
-

[Main tutorial page]   [Next tutorial]

-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/skini.html b/source/StkUGens/stk-4.4.4/doc/html/skini.html deleted file mode 100644 index 338b67841c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/skini.html +++ /dev/null @@ -1,204 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

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.

-
        Too good to be true?
-    Have control and read it too?
-          A SKINI haiku.
-

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.

-

-MIDI Compatibility

-

SKINI was designed to be MIDI compatible wherever possible, and extend MIDI in incremental, then maybe profound ways.

-

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

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

-

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.

-

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

-

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

-

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.

-

-Files Used To Implement SKINI

-

Skini is a C++ class 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 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 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:

-
    -
  • If the first (non-delimiter ... see below) character in a SKINI string is '/' that line is treated as a comment and echoed to stdout.
  • -
-
    -
  • 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 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.
  • -
-
    -
  • 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.
  • -
-

-A Short SKINI File:

-
        /*  Howdy!!! Welcome to SKINI, by P. Cook 1999
-
-        NoteOn          0.000082 2 55 82
-        NoteOff         1.000000 2 55 0
-        NoteOn          0.000082 2 69 82
-        StringDetune    0.100000 2    10
-        StringDetune    0.100000 2    30
-        StringDetune    0.100000 2    50
-        NoteOn          0.000000 2 69 82
-        StringDetune    0.100000 2    40
-        StringDetune    0.100000 2    22
-        StringDetune    0.100000 2    12
-        //
-        StringDamping   0.000100 2 0.0
-        NoteOn          0.000082 2 55 82
-        NoteOn          0.200000 2 62 82
-        NoteOn          0.100000 2 71 82
-        NoteOn          0.200000 2 79 82
-        NoteOff         1.000000 2 55 82
-        NoteOff         0.000000 2 62 82
-        NoteOff         0.000000 2 71 82
-        NoteOff         0.000000 2 79 82
-        StringDamping  =4.000000 2 0.0
-        NoteOn          0.000082 2 55 82
-        NoteOn          0.200000 2 62 82
-        NoteOn          0.100000 2 71 82
-        NoteOn          0.200000 2 79 82
-        NoteOff         1.000000 2 55 82
-        NoteOff         0.000000 2 62 82
-        NoteOff         0.000000 2 71 82
-        NoteOff         0.000000 2 79 82
-

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

-
struct SKINISpec {
-   char messageString[32];
-   long  type;
-   long data2;
-   long data3;
-};
-

so an assignment of one of these structs looks like:

-
        MessageStr$      ,type, data2, data3,
-

type is the message type sent back from the SKINI line parser.

-

data<n> 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.
  • -
-
    -
  • 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_STR : only valid in final field. This allows (nearly) arbitrary message types to be supported by simply scanning the string to EOL (End Of Line) and then passing it to a more intelligent handler. For example, MIDI SYSEX (system exclusive) messages can be read as space-delimited integers into the 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.
  • -
-

Each individual SKINI message is parsed and saved to a Skini::Message structure of the form:

-
  struct Message { 
-    long type;                         
-    long channel;                      
-    StkFloat time;                     
-    std::vector<StkFloat> floatValues; 
-    std::vector<long> intValues;       
-    std::string remainder;             
-  };
-

Here's a couple of lines from the SKINI.tbl file

-
 {"NoteOff"          ,        __SK_NoteOff_,               SK_DBL,  SK_DBL},
- {"NoteOn"           ,         __SK_NoteOn_,               SK_DBL,  SK_DBL},
-
- {"ControlChange"    ,  __SK_ControlChange_,               SK_INT,  SK_DBL},
- {"Volume"           ,  __SK_ControlChange_, __SK_Volume_        ,  SK_DBL},
-
- {"StringDamping"    ,   __SK_ControlChange_, __SK_StringDamping_,  SK_DBL},
- {"StringDetune"     ,    __SK_ControlChange_, __SK_StringDetune_,  SK_DBL},
-

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 either as double-precision floats or as long ints, depending on the format specified in SKINI.tbl, and saved to the corresponding C++ vector variables in the Skini::Message structure (either floatValues or intValues). Floating-point values are also cast to ints (and vice-versa) and stored to their respective variables. For example, an expected integer value of 64 will also be saved as 64.0 in the corresponding floatValues variable of the Skini::Message structure. 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 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:

-
    ControlChange  0.000000 2 7 64.1
-    Volume         0.000000 2   64.1
-

I like the second 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.

-

-Using SKINI:

-

Here's a simple example of code which uses the Skini object to read a SKINI file and control a single instrument.

-
        Skini score;
-        Skini::Message message;
-        instrument = new Mandolin(50.0);
-        score.setFile( argv[1] );
-        while ( score.nextMessage( message ) != 0 ) {
-          tempDouble = message.time;
-          if (tempDouble < 0)     {
-            tempDouble = - tempDouble;
-            tempDouble = tempDouble - output.getTime();
-            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() );
-          }
-
-          tempDouble3 = message.floatValues[1] * NORM_MIDI;
-          if ( message.type == __SK_NoteOn_ ) {
-            if ( tempDouble3 == 0.0 ) {
-              tempDouble3 = 0.5;
-              instrument->noteOff( tempDouble3 );
-            }
-            else {
-              tempLong = message.intValues[0];
-              tempDouble2 = Midi2Pitch[tempLong];
-              instrument->noteOn( tempDouble2, tempDouble3 );
-            }
-          }
-          else if ( message.type == __SK_NoteOff_ ) {
-            instrument->noteOff( tempDouble3 );
-          }
-          else if ( message.type == __SK_ControlChange_ ) {
-            tempLong = message.intValues[0];
-            instrument->controlChange( tempLong, tempDouble3 );
-          }
-        }
-

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 "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 Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1DeviceInfo-members.html b/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1DeviceInfo-members.html deleted file mode 100644 index 24e34590d4..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1DeviceInfo-members.html +++ /dev/null @@ -1,32 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1DeviceInfo.html b/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1DeviceInfo.html deleted file mode 100644 index 26df62d30e..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1DeviceInfo.html +++ /dev/null @@ -1,175 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

RtAudio::DeviceInfo Struct Reference

-

The public device information structure for returning queried values. -More...

- -

#include <RtAudio.h>

- -

List of all members.

- - - - - - - - - - - -

Public Attributes

bool probed
std::string name
unsigned int outputChannels
unsigned int inputChannels
unsigned int duplexChannels
bool isDefaultOutput
bool isDefaultInput
std::vector< unsigned int > sampleRates
RtAudioFormat nativeFormats
-

Detailed Description

-

The public device information structure for returning queried values.

-

Member Data Documentation

- -
-
- - - - -
bool RtAudio::DeviceInfo::probed
-
-
-

true if the device capabilities were successfully probed.

- -
-
- -
-
- - - - -
std::string RtAudio::DeviceInfo::name
-
-
-

Character string device identifier.

- -
-
- -
-
- - - - -
unsigned int RtAudio::DeviceInfo::outputChannels
-
-
-

Maximum output channels supported by device.

- -
-
- -
-
- - - - -
unsigned int RtAudio::DeviceInfo::inputChannels
-
-
-

Maximum input channels supported by device.

- -
-
- -
-
- - - - -
unsigned int RtAudio::DeviceInfo::duplexChannels
-
-
-

Maximum simultaneous input/output channels supported by device.

- -
-
- -
- -
-

true if this is the default output device.

- -
-
- -
- -
-

true if this is the default input device.

- -
-
- -
-
- - - - -
std::vector<unsigned int> RtAudio::DeviceInfo::sampleRates
-
-
-

Supported sample rates (queried from list of standard rates).

- -
-
- -
- -
-

Bit mask of supported data formats.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamOptions-members.html b/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamOptions-members.html deleted file mode 100644 index ce5b0b654f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamOptions-members.html +++ /dev/null @@ -1,27 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtAudio::StreamOptions Member List

This is the complete list of members for RtAudio::StreamOptions, including all inherited members. - - - - -
flagsRtAudio::StreamOptions
numberOfBuffersRtAudio::StreamOptions
priorityRtAudio::StreamOptions
streamNameRtAudio::StreamOptions
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamOptions.html b/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamOptions.html deleted file mode 100644 index 7e75cafcf7..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamOptions.html +++ /dev/null @@ -1,115 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

RtAudio::StreamOptions Struct Reference

-

The structure for specifying stream options. -More...

- -

#include <RtAudio.h>

- -

List of all members.

- - - - - - -

Public Attributes

RtAudioStreamFlags flags
unsigned int numberOfBuffers
std::string streamName
int priority
-

Detailed Description

-

The structure for specifying stream options.

-

The following flags can be OR'ed together to allow a client to make changes to the default stream behavior:

-
    -
  • RTAUDIO_NONINTERLEAVED: Use non-interleaved buffers (default = interleaved).
  • -
  • RTAUDIO_MINIMIZE_LATENCY: Attempt to set stream parameters for lowest possible latency.
  • -
  • RTAUDIO_HOG_DEVICE: Attempt grab device for exclusive use.
  • -
  • RTAUDIO_SCHEDULE_REALTIME: Attempt to select realtime scheduling for callback thread.
  • -
  • RTAUDIO_ALSA_USE_DEFAULT: Use the "default" PCM device (ALSA only).
  • -
-

By default, RtAudio streams pass and receive audio data from the client in an interleaved format. By passing the RTAUDIO_NONINTERLEAVED flag to the openStream() function, audio data will instead be presented in non-interleaved buffers. In this case, each buffer argument in the RtAudioCallback function will point to a single array of data, with nFrames samples for each channel concatenated back-to-back. For example, the first sample of data for the second channel would be located at index nFrames (assuming the buffer pointer was recast to the correct data type for the stream).

-

Certain audio APIs offer a number of parameters that influence the I/O latency of a stream. By default, RtAudio will attempt to set these parameters internally for robust (glitch-free) performance (though some APIs, like Windows Direct Sound, make this difficult). By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() function, internal stream settings will be influenced in an attempt to minimize stream latency, though possibly at the expense of stream performance.

-

If the RTAUDIO_HOG_DEVICE flag is set, RtAudio will attempt to open the input and/or output stream device(s) for exclusive use. Note that this is not possible with all supported audio APIs.

-

If the RTAUDIO_SCHEDULE_REALTIME flag is set, RtAudio will attempt to select realtime scheduling (round-robin) for the callback thread. The priority parameter will only be used if the RTAUDIO_SCHEDULE_REALTIME flag is set. It defines the thread's realtime priority.

-

If the RTAUDIO_ALSA_USE_DEFAULT flag is set, RtAudio will attempt to open the "default" PCM device when using the ALSA API. Note that this will override any specified input or output device id.

-

The numberOfBuffers parameter can be used to control stream latency in the Windows DirectSound, Linux OSS, and Linux Alsa APIs only. A value of two is usually the smallest allowed. Larger numbers can potentially result in more robust stream performance, though likely at the cost of stream latency. The value set by the user is replaced during execution of the RtAudio::openStream() function by the value actually used by the system.

-

The streamName parameter can be used to set the client name when using the Jack API. By default, the client name is set to RtApiJack. However, if you wish to create multiple instances of RtAudio with Jack, each instance must have a unique client name.

-

Member Data Documentation

- -
- -
-

A bit-mask of stream flags (RTAUDIO_NONINTERLEAVED, RTAUDIO_MINIMIZE_LATENCY, RTAUDIO_HOG_DEVICE, RTAUDIO_ALSA_USE_DEFAULT).

- -
-
- -
-
- - - - -
unsigned int RtAudio::StreamOptions::numberOfBuffers
-
-
-

Number of stream buffers.

- -
-
- -
-
- - - - -
std::string RtAudio::StreamOptions::streamName
-
-
-

A stream name (currently used only in Jack).

- -
-
- -
- -
-

Scheduling priority of callback thread (only used with flag RTAUDIO_SCHEDULE_REALTIME).

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamParameters-members.html b/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamParameters-members.html deleted file mode 100644 index 61345ca498..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamParameters-members.html +++ /dev/null @@ -1,26 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

RtAudio::StreamParameters Member List

This is the complete list of members for RtAudio::StreamParameters, including all inherited members. - - - -
deviceIdRtAudio::StreamParameters
firstChannelRtAudio::StreamParameters
nChannelsRtAudio::StreamParameters
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamParameters.html b/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamParameters.html deleted file mode 100644 index 9f394c6e15..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/structRtAudio_1_1StreamParameters.html +++ /dev/null @@ -1,85 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

RtAudio::StreamParameters Struct Reference

-

The structure for specifying input or ouput stream parameters. -More...

- -

#include <RtAudio.h>

- -

List of all members.

- - - - - -

Public Attributes

unsigned int deviceId
unsigned int nChannels
unsigned int firstChannel
-

Detailed Description

-

The structure for specifying input or ouput stream parameters.

-

Member Data Documentation

- -
-
- - - - -
unsigned int RtAudio::StreamParameters::deviceId
-
-
-

Device index (0 to getDeviceCount() - 1).

- -
-
- -
-
- - - - -
unsigned int RtAudio::StreamParameters::nChannels
-
-
-

Number of channels.

- -
-
- -
-
- - - - -
unsigned int RtAudio::StreamParameters::firstChannel
-
-
-

First channel index on device (default = 0).

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/structstk_1_1Skini_1_1Message-members.html b/source/StkUGens/stk-4.4.4/doc/html/structstk_1_1Skini_1_1Message-members.html deleted file mode 100644 index 145147cdb5..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/structstk_1_1Skini_1_1Message-members.html +++ /dev/null @@ -1,29 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
-

stk::Skini::Message Member List

This is the complete list of members for stk::Skini::Message, including all inherited members. - - - - - - -
channelstk::Skini::Message
floatValuesstk::Skini::Message
intValuesstk::Skini::Message
remainderstk::Skini::Message
timestk::Skini::Message
typestk::Skini::Message
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/structstk_1_1Skini_1_1Message.html b/source/StkUGens/stk-4.4.4/doc/html/structstk_1_1Skini_1_1Message.html deleted file mode 100644 index af2dc3d039..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/structstk_1_1Skini_1_1Message.html +++ /dev/null @@ -1,130 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- - -
-

stk::Skini::Message Struct Reference

-

A message structure to store and pass parsed SKINI messages. -More...

- -

#include <Skini.h>

- -

List of all members.

- - - - - - - - -

Public Attributes

long type
long channel
StkFloat time
std::vector< StkFloat > floatValues
std::vector< long > intValues
std::string remainder
-

Detailed Description

-

A message structure to store and pass parsed SKINI messages.

-

Member Data Documentation

- -
-
- - - - -
long stk::Skini::Message::type
-
-
-

The message type, as defined in SKINI.msg.

- -
-
- -
- -
-

The message channel (not limited to 16!).

- -
-
- -
-
- - - - -
StkFloat stk::Skini::Message::time
-
-
-

The message time stamp in seconds (delta or absolute).

- -
-
- -
-
- - - - -
std::vector<StkFloat> stk::Skini::Message::floatValues
-
-
-

The message values read as floats (values are type-specific).

- -
-
- -
-
- - - - -
std::vector<long> stk::Skini::Message::intValues
-
-
-

The message values read as ints (number and values are type-specific).

- -
-
- -
-
- - - - -
std::string stk::Skini::Message::remainder
-
-
-

Any remaining message data, read as ascii text.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/system.html b/source/StkUGens/stk-4.4.4/doc/html/system.html deleted file mode 100644 index fd5c3a5e9f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/system.html +++ /dev/null @@ -1,67 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

System Requirements

General:

-
    -
  • -A MIDI interface to use MIDI input/output controls. (NOTE: This may be built into the soundcard on your computer.)
  • -
  • -Tcl/Tk 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).
  • -
-

Linux (specific):

-
    -
  • -A soundcard to use realtime audio input/output capabilities. In order to use the effects project, the soundcard and drivers must support full duplex mode.
  • -
  • -ALSA device drivers and library for realtime sound and MIDI input/output.
  • -
  • -OSS device drivers (version 4.0 and higher only) can be used for audio input/output, but MIDI support requires the ALSA library to compile.
  • -
-

Macintosh OS X (specific):

-
    -
  • -A C++ compiler is not installed by default with OS X. It is necessary to download the Developer Kit from the Apple WWW site in order to compile STK or load it from the installation CD-ROM.
  • -
  • -If you experience frequent audio input/output "glitches", try increasing the RT_BUFFER_SIZE specified in Stk.h.
  • -
  • -

    The tcl/tk interpreter does not ship by default with OS X and must be downloaded from the internet. The latest Tcl/Tk Aqua distribution (http://www.apple.com/downloads/macosx/unix_open_source/tcltk.html) has been successfully tested on 10.2 and 10.3 systems. The default installation will place a link to the wish interpretor at /usr/bin/wish.

    -

    It appears that socket support in Tcl/Tk uses the Nagle algorithm, which produces poor response between changes made in the tcl/tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script.

    -

    -
  • -
-

Windows95/98/2000/XP/7 (specific):

-
    -
  • -A soundcard to use realtime audio input/output capabilities. In order to use the effects project, the soundcard and drivers must support full duplex mode.
  • -
  • -DirectX 5.0 (or higher) runtime libraries.
  • -
  • -For compiling the source (if not already in your system):
      -
    • -dsound.h header file (DirectX 6.1) - put somewhere in your header search path
    • -
    • -dsound.lib library file (DirectX 6.1) - put somewhere in your library search path
    • -
    -
  • -
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/tab_b.gif b/source/StkUGens/stk-4.4.4/doc/html/tab_b.gif deleted file mode 100644 index 0d623483ffdf5f9f96900108042a7ab0643fe2a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35 ncmZ?wbhEHbWMp7uXkcJy*>IeJfk6j|fqX^=1|}vKMh0sDa2W*H diff --git a/source/StkUGens/stk-4.4.4/doc/html/tab_l.gif b/source/StkUGens/stk-4.4.4/doc/html/tab_l.gif deleted file mode 100644 index 9b1e6337c9299a700401a2a78a2c6ffced475216..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmZ?wbhEHbZT`}F1e&(Gg}Y(8=I;HA5#Z$3JI=gGB)FQ#odI(O&E^@q;x zK6mr*m3xOS-#u~t!I@i+u0DKm^U160k6t`|^WpV}&n+8{U%dD9&a>B#U%!9-@yol< zU%&tQ{rk_K|NsC0`}dE5ET99@1@a36+kb~?0UJ*yc&I3X_m z!ND^5$O7$#8OFRuDhG}!?8z?cdZK&!`PWjdR;Aj^wZ` zeK{IEYHBJ)6K8VIp1`BVt++swf6j+=L{p1*nO(VhE`pFexG@5$|>uaCcd z`0m=9m+yak{QmXN#Sc$^{$X9h9&q2jiKAI|&T)a;PPx2K9p`YIdw8HtR5k2Q$2-O2 z*;3y{MQ-RnJTgJfI&R5|O)AHxDf_00XbPvDZPy4t=hHd)nfLPvms&O`Ok(sD()5v$ z5U@&h;a=#xbxVbo2~X&Xj0Ie(f{v>vERH+qC+nTG=B8Nca=wU-O$?1&vUgV~9=!H; zx>3p9Yn%*<>t~sk+&0xfyS8RsPfYBd<~wWK%j-LmpU>O7yX^h#UCp1x-p#i7@bE;py8XI6 zmY<)m>~)W~yIWcMVoiPg{duuf<*)9qZ9l$m*Ph&W&$jlv*Vpa+{pH@n=IQ$L?0$ax ec60Ul|8o2P|NVbd{6P)#weSbE3}s?04AuZvx_~SI diff --git a/source/StkUGens/stk-4.4.4/doc/html/tab_r.gif b/source/StkUGens/stk-4.4.4/doc/html/tab_r.gif deleted file mode 100644 index ce9dd9f533cb5486d6941844f442b59d4a9e9175..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2585 zcmbV}`9Bkk1ILFF--w5zJc=ZZT(zjE=;2|_S)Qm~rCWz1Pc)KPl;jv%A#&v2*x}yc zmf2~Jm~&=xjJY?PqwIN}f8qQ2{r$uH{c*nJbmr{cR5??*egHrs-B=MzCF`3%e{FAW z{oL5xTHn~5TM{jaB;@|_Ue5F&Zb@p(kMyG{*;gWDg zyeL|eZf7Qd8=#bXzSiR{yzRgLSj-fJS8>lBjVHN z^o-0eS=nE6a`W;LChBs=`+QAJP~{b93>H^eRb5kCSC1zUNezun%`L5M?RDzv#%jk7 zYVRX=vATPD`+oEfum^{RM@GjuP?-r=yh0!p;Vx^T9G7~`7%5ydH%70=jyJ;;`d;hv92x3R=z{xp+Lg2!*@OK*K15-t&okoPtSED)h&$RLxdbA zseWm^C3d%-yRNi-ryk^!ek+C`n&~cd$#ZWct_cUL{l~i+Nzx^5d!n94(>bW-iL~Rl z&8r)?q|1DIo=0=judQ{FaGcfLERz8gfn3-Qt<2lksh{mzpT}DXxUuR^z=^key&q4! z+wWI45vL0k$R^(F#{qfqhUsN@WA+w-V?LPH33!Q?WFSB3)WBojE@hK41Nb?KfS+Qo zXgrzfsP$wr4Qzy*{OD>uJBjdgGM@VMml5)2f~_}lD*YyOb}Hjeobhz#4c`w(l^>KK zr?Ud;W~Z}*w;%hZ|2^p^+f06gJDJQD zeIhGADbDmm&6arh(q>EZ<7mjzg7l|z$hRL8=1>)Nv=S7CY$B}iYJ&*T_-T_OG*L1q ztZ3Lana33?y3AKnyq^YCF|4x%Rb5WU&2qcl{TFKey%QJeMxn^SdT!hZ5+0i1zeusiYVp-phBl7b5+Px-X&LhByq z0F&<;K0l2+v>qiHlXb#$jXMv$uK-dEGE9L~qtdU(XeRXmvu*K2Q&6!fD**JxYP4b4BR7FdJ$Qx9G9`J%-_X!a#LGpp3g9)VWytGCa;7`S1_e8F~!R+aSJ zOF17p2`H?2kPs8Q`_;U}+D%3p zs2-0BTqFwpUoBk`?P;iPQ(IbEA|JmMx!P&YYG|R@S=5Mnw;-?A6rEEVyV%d7{iU4a zNk`i!%F(Ykpm`}#oH;BjY->@b8vQedv;pza2FL&*6ufjd+*3Ute&>kes~TU?^KkojsTh(o~(3tk1Y6>4(yn( z#U*ID9@eg-beKo1B;HXe+}{Z%n@7m0+yxivuqk9~;!1LGQlah)xYK4>wgL}l6dsaN zIxlRlq`*`j9PG4*0hD6YV_b_2w5b#)o7J?`q#{GjvvKlD`T*dWcZx<-s(ZvLB44E# z=!|sw!?)@%y$oRNL#25WS3lzdii}TuQ3?CLnvQ1_n};2sT_;Y;#d3=+-(O% zMN$>O!3;ke(UuLR%h_&)N zs^!-@A>QR}4yB1bPp`9S19ikTbZ~O{&FF-yHK{En;mmShDUIEw03`j(DBIsM}Rjki2J#SQa3gFZTKBPDeIiLt9Z z%bL3(B@Qw%(B`wSMS~dPh$=R`(}lBoFXKy(s|*{#ru$wjsBc_O#zxNk9w+UUHmx(U zmJ8+M+ndtnZ<7|VU9Mbt61zpo9T&3%Wx&XII=#QJxjR`CZf22ac3d51Z?GD%LEe_&*t46Qf;4`bZ7p2K(Ab5>GfT^}4! zBT&HZD`^PEgWoI&{~o-ID0F?O`75sm(87x%A{(}Ch1)QlzdJ)1B-eqe5a(weg0`4lQIf1evjvbBY50DVbzO7CLf|vP z2#0(U-|jZ`H{y5N^o7%iK6H>_HEGN->U6^!)1{XpJV!!4(Ig7wzZQ*9WYF4X1rG0x z=1uA@i`rIAciubDC{;~b(|&|A@xkjRP5aRcvRU9tvIm}jDB6J eQ0-6-y)mpwdT=ayS0tBxKDA*~;EWmo diff --git a/source/StkUGens/stk-4.4.4/doc/html/tabs.css b/source/StkUGens/stk-4.4.4/doc/html/tabs.css deleted file mode 100644 index a444163416..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/tabs.css +++ /dev/null @@ -1,105 +0,0 @@ -/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ - -DIV.tabs -{ - float : left; - width : 100%; - background : url("tab_b.gif") repeat-x bottom; - margin-bottom : 4px; -} - -DIV.tabs UL -{ - margin : 0px; - padding-left : 10px; - list-style : none; -} - -DIV.tabs LI, DIV.tabs FORM -{ - display : inline; - margin : 0px; - padding : 0px; -} - -DIV.tabs FORM -{ - float : right; -} - -DIV.tabs A -{ - float : left; - background : url("tab_r.gif") no-repeat right top; - border-bottom : 1px solid #84B0C7; - font-size : 80%; - font-weight : bold; - text-decoration : none; -} - -DIV.tabs A:hover -{ - background-position: 100% -150px; -} - -DIV.tabs A:link, DIV.tabs A:visited, -DIV.tabs A:active, DIV.tabs A:hover -{ - color: #1A419D; -} - -DIV.tabs SPAN -{ - float : left; - display : block; - background : url("tab_l.gif") no-repeat left top; - padding : 5px 9px; - white-space : nowrap; -} - -DIV.tabs #MSearchBox -{ - float : right; - display : inline; - font-size : 1em; -} - -DIV.tabs TD -{ - font-size : 80%; - font-weight : bold; - text-decoration : none; -} - - - -/* Commented Backslash Hack hides rule from IE5-Mac \*/ -DIV.tabs SPAN {float : none;} -/* End IE5-Mac hack */ - -DIV.tabs A:hover SPAN -{ - background-position: 0% -150px; -} - -DIV.tabs LI.current A -{ - background-position: 100% -150px; - border-width : 0px; -} - -DIV.tabs LI.current SPAN -{ - background-position: 0% -150px; - padding-bottom : 6px; -} - -DIV.navpath -{ - background : none; - border : none; - border-bottom : 1px solid #84B0C7; - text-align : center; - margin : 2px; - padding : 2px; -} diff --git a/source/StkUGens/stk-4.4.4/doc/html/tutorial.html b/source/StkUGens/stk-4.4.4/doc/html/tutorial.html deleted file mode 100644 index 3620789e7f..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/tutorial.html +++ /dev/null @@ -1,49 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

Tutorial

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

-
    -
  • -want to create audio DSP and/or synthesis programs
  • -
  • -want to use our unit generators and input/output routines rather than code their own
  • -
  • -want to learn about synthesis and processing algorithms
  • -
  • -wish to teach real-time synthesis and processing and wish to use some of our classes and examples
  • -
-

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. STK Fundamentals
  2. -
  3. Hello Sine!
  4. -
  5. Compiling
  6. -
  7. Using Filters
  8. -
  9. Realtime Audio (blocking)
  10. -
  11. Realtime Audio (callback)
  12. -
  13. Instruments
  14. -
  15. Control Input
  16. -
  17. Multi-Channel I/O
  18. -
  19. Voice Management
  20. -
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/html/tutorial/bachfugue.ski b/source/StkUGens/stk-4.4.4/doc/html/tutorial/bachfugue.ski deleted file mode 100644 index f106995a91..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/tutorial/bachfugue.ski +++ /dev/null @@ -1,1601 +0,0 @@ -///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/source/StkUGens/stk-4.4.4/doc/html/tutorial/bookert.ski b/source/StkUGens/stk-4.4.4/doc/html/tutorial/bookert.ski deleted file mode 100644 index ca6e0aa8cc..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/tutorial/bookert.ski +++ /dev/null @@ -1,90 +0,0 @@ -/* 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/source/StkUGens/stk-4.4.4/doc/html/usage.html b/source/StkUGens/stk-4.4.4/doc/html/usage.html deleted file mode 100644 index 43517d219c..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/html/usage.html +++ /dev/null @@ -1,257 +0,0 @@ - - -The Synthesis ToolKit in C++ (STK) - - - -
-    

-Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial

-
- -
- - -

Usage Documentation

-
-

-Directory Structure:

-

The top level distribution contains the following directories:

-
    -
  • -

    The src directory contains the source .cpp files for all the STK unit generator and algorithm classes.

    -

    -

    -
  • -
  • -

    The include directory contains the header files for all the STK unit generator and algorithm classes.

    -

    -

    -
  • -
  • -

    The rawwaves directory contains various raw, monophonic, 16-bit, big-endian, 22050 Hz soundfiles used with the STK classes.

    -

    -

    -
  • -
  • -

    The doc directory contains documentation about STK.

    -

    -

    -
  • -
  • -

    The projects directory contains various demo and example STK programs.

    -

    -
  • -
-

This release of STK comes with four separate "project" directories:

-
    -
  1. -

    The demo project is used to demonstrate nearly all of the STK instruments. The demo program has been written to allow a variety of control input and sound data output options. Simple graphical user interfaces (GUIs) are also provided.

    -

    -

    -
  2. -
  3. -

    The effects project demonstrates realtime duplex mode (simultaneous audio input and output) operation, when available, as well as various delay-line based effects algorithms.

    -

    -

    -
  4. -
  5. -

    The ragamatic project is just cool. Fire it up and be enlightened.

    -

    -

    -
  6. -
  7. -

    The eguitar project demonstrates how to make an electric guitar with feedback and distortion.

    -

    -

    -
  8. -
  9. -The examples project contains several simple programs that demonstrate audio input/output, including the audio internet streaming classes, as well as most of the tutorial programs.
  10. -
-

-Compiling:

-
    -
  • -

    Windows95/98/2000/XP/7: Realtime support is available using either DirectSound or ASIO audio drivers. For DirectSound support, use the __WINDOWS_DS__ preprocessor definition and link with the dsound.lib, winmm.lib, and Wsock32.lib libraries. For 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. In addition, the __LITTLE_ENDIAN__ and __WINDOWS_MM__ preprocessor definitions are necessary for all Windows systems (RtMidi uses the Windows MultiMedia MIDI API). Fairly old Visual C++ project files are provided in each project directory, though they may not work on newer versions of MSVS. As well, the MinGW compiler is supported (see below). It is important to link with the non-debug libraries when compiling "release" program versions and debug libraries when compiling "debug" program versions.

    -

    -
  • -
  • -

    Unix (and MinGW) Systems: A GNU configure shell script is included in the distribution for unix-based systems. From the top-level distribution directory, type './configure' and the script will create Makefiles in each project directory specific to the characteristics of the host computer. Then from within any given project directory (example demo), type 'make' to compile the project. In addition, an STK library can be compiled from within the src directory.

    -

    Several options can be supplied to the configure script to customize the build behavior:

    -
      -
    • ---disable-realtime to only compile generic non-realtime classes
    • -
    • ---enable-debug to enable various debug output
    • -
    • ---with-alsa to choose native ALSA API support (default, linux only)
    • -
    • ---with-oss to choose native OSS audio API support (linux only, no native OSS MIDI support)
    • -
    • ---with-jack to choose native JACK API support (linux and Macintosh OS-X)
    • -
    • ---with-core to choose Core Audio API support (Macintosh OS-X)
    • -
    -

    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:

    -
    ./configure RAWWAVE_PATH="/home/gary/rawwaves/"
    -./configure INCLUDE_PATH="/home/gary/include/"
    -

    For novice STK users, the default configuration should be adequate.

    -
  • -
-

For those who wish to create their own system-specific Makefiles:

-
    -
  • -

    Linux: Realtime audio support is enabled with either the __LINUX_ALSA__, __UNIX_JACK__, and/or __LINUX_OSS__ 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 __LINUX_ALSASEQ__ preprocessor definition must be included for MIDI support. Note that native OSS MIDI support no longer exists in RtMidi. If the __LINUX_OSS__ preprocessor definition is specified, only OSS (version 4.0) audio support will be compiled and RtMidi will still be compiled using the ALSA API (assuming the __LINUX_ALSASEQ__ definition is defined). For this reason, STK now requires the asound library for realtime support. Realtime programs must also link with the pthread library. In addition, the __LITTLE_ENDIAN__ preprocessor definition is necessary if compiling on a little-endian system. See the README-Linux file for further system configuration information.

    -

    -
  • -
  • -

    Macintosh OS X: Realtime support is enabled with the __MACOSX_CORE__ and __UNIX_JACK__ preprocessor definitions, which incorporate the CoreAudio audio/MIDI API and/or the JACK API. Realtime programs must also link with the pthread library and the CoreAudio, CoreMIDI, and CoreFoundation frameworks (for Core Audio support) and/or the JACK library. See the README-MacOSX file for further system configuration information.

    -

    -
  • -
  • -Generic (non-realtime): Most STK classes are operating system independent 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 __LITTLE_ENDIAN__ preprocessor definition to your compiler. The demo 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 cannot 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 effects, ragamatic, and most of the examples projects for non-realtime use.
  • -
-

-Debugging:

-

When developing applications with STK, it is recommended that you define the preprocessor definition _STK_DEBUG_ when compiling (or specify the --enable-debug option to the configure script). This will enable all levels of function argument and error checking within the STK classes. Without this definition, argument checking does not occur in functions that are expected to be called frequently in an iterative manner.

-

-Control Data:

-

All STK programs in this distribution take input control data in the form of SKINI 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:

-
    -
  1. -Redirect or pipe SKINI scorefiles to an executable.
  2. -
  3. -Pipe realtime SKINI input messages to an executable (not possible under Windows95/98).
  4. -
  5. -Acquire realtime MIDI messages from a MIDI port on your computer.
  6. -
-

Tcl/Tk graphical user interfaces (GUI) are provided with this distribution that can generate realtime SKINI messages. Note that the Messager class allows multiple simultaneous socket client connections, together with MIDI and/or piped input. The Md2Skini program (in the demo directory) is mostly obsolete but can be used to create SKINI scorefiles from realtime MIDI input.

-

-Demo: STK Instruments

-

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

-
    -
  • -Clarinet: Pretty good physical model of the clarinet
  • -
  • -BlowHole: A clarinet physical model with one tonehole and one register vent
  • -
  • -Saxofony: A psuedo-conical bore reed instrument that sometimes sounds like a saxophone
  • -
  • -Flute: Pretty good physical model of the flute
  • -
  • -Brass: Not so bad physical model of a brass instrument
  • -
  • -BlowBotl: A basic helmholtz resonator and air jet model
  • -
  • -Bowed: Not hideous physical model of a bowed string instrument
  • -
  • -Plucked: Yer basic plucked string physical model
  • -
  • -StifKarp: A simple plucked, stiff string physical model
  • -
  • -Sitar: A simple sitar/plucked string physical model
  • -
  • -Mandolin: Two-string mandolin physical model
  • -
  • -Rhodey: Rhodes-like electric piano FM synthesis model
  • -
  • -Wurley: Wurlitzer-like electric piano FM synthesis model
  • -
  • -TubeBell: FM synthesis model
  • -
  • -HevyMetl: Distorted synthesizer FM synthesis model
  • -
  • -PercFlut: Percussive flute-like FM synthesis model
  • -
  • -BeeThree: Cheezy organ FM synthesis model
  • -
  • -Moog: Swept filter sampler
  • -
  • -FMVoices: Three-formant FM voice synthesis
  • -
  • -VoicForm: Four-formant resonance filter voice synthesis
  • -
  • -Resonate: Noise through a BiQuad filter
  • -
  • -Drummer: Sampling synthesis
  • -
  • -BandedWG: Banded waveguide meta-object for bowed bars, tibetan bowls, etc.
  • -
  • -Shakers: Various stochastic event models of shaker instruments
  • -
  • -ModalBar: Various four-resonance presets (marimba, vibraphone, etc...)
  • -
  • -Mesh2D: Two-dimensional, rectilinear digital waveguide mesh
  • -
  • -Whistle: Hybrid physical/spectral model of a police whistle
  • -
-

-Demo: Non-Realtime Use

-

See the information above with respect to compiling STK for non-realtime use.

-

In non-realtime mode, it is assumed that input control messages are provided from a SKINI scorefile and that audio output is written to a soundfile (.snd, .wav, .aif, .mat, .raw). A number of SKINI scorefiles are provided in the scores directory of the demo project. Assuming a successful compilation of the demo program, typing:

-
demo BeeThree -ow myfile.wav -if scores/bookert.ski
-

from the demo directory will play the scorefile bookert.ski 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 ./ to the program name if your default shell setup is not set to look in the current directory). Typing demo without any arguments will provide a full program usage description.

-

-Demo: Realtime Use

-

STK realtime audio and MIDI input/output and realtime SKINI control input via socketing support is provided for Linux, Mac OS-X, and Windows95/98/2000/XP operating systems. STK realtime SKINI control input via piping is possible under Linux, Mac OS X, and Windows2000/XP only.

-

Control input and audio output options are typically specified as command-line arguments to STK programs. For example, the demo program is invoked as:

-
demo instrument flags
-

where instruments include those described above and flags can be any or all of:

-
    -
  • --or for realtime audio output,
  • -
  • --ow <file name> for WAV soundfile output,
  • -
  • --os <file name> for SND (AU) soundfile output,
  • -
  • --om <file name> for MAT-file output,
  • -
  • --if <file name> for a SKINI formatted control file,
  • -
  • --ip for realtime SKINI control input via piping,
  • -
  • --im <port> for MIDI control input (with optional port, -1 = virtual port where possible),
  • -
  • --s RATE to specify a sample rate,
  • -
  • --n NUMBER to specify multivoice polyphony
  • -
-

The -ip flag must be used when piping 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 both input types simultaneously.

-

Assuming a successful compilation of the demo program, typing:

-
demo BeeThree -or -if scores/bookert.ski
-

from the demo directory will play the scorefile bookert.ski using the STK BeeThree instrument and stream the resulting audio data in realtime to the audio output channel of your computer. Typing demo without any arguments will provide a full program usage description.

-

-Realtime Control Input using Tcl/Tk Graphical User Interfaces:

-

There are a number of Tcl/Tk 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 wish). The Physical.bat script just implements the following command-line sequence:

-
wish < tcl/Physical.tcl | demo Clarinet -or -ip
-

-Realtime MIDI Control Input:

-

On all supported realtime platforms, you can direct realtime MIDI input to the STK Clarinet by typing:

-
demo Clarinet -or -im
-

This will attempt to use the default MIDI port for input. An optional MIDI port number can be specified after the -im flag. Valid MIDI ports are numbered from 0 (default) and higher. On Linux and Macintosh OS-X systems, it is possible to open a virtual MIDI input port (that other software applications can connect to) by specifying a port identifier of -1.

-

-Polyphony:

-

The demo program supports an arbitrary number of voices via the -n NUMBER 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:

-
demo BeeThree -n 8 -or -im
-
-
- - - - -
The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.
- - - diff --git a/source/StkUGens/stk-4.4.4/doc/treesed.html b/source/StkUGens/stk-4.4.4/doc/treesed.html deleted file mode 100644 index 6fb91871a0..0000000000 --- a/source/StkUGens/stk-4.4.4/doc/treesed.html +++ /dev/null @@ -1,175 +0,0 @@ - - -Treesed Usage - - - -
- -

How to Use Treesed

- -Go to the directory where you want to search or make changes. - -

-There are two choices you can make when using treesed: -

    -
  1. Do I just want to search for a text, or do I want to search for a -text and replace it with something else? -
    -If you are just searching you are using Treesed in "search mode", otherwise it is in -"replace mode." -
  2. Do I want to search/replace only in files in my current directory, -or should files in all subdirectories (and all directories below that) -also be done? -
-Some examples will make this clear. - -

Searching

-Say you are faced with the situation that the author of a slew of web-pages, Nathan Brazil, has left and has been succeeded by Mavra Chang. First, let us see which files are affected by this (what you type in is shown in bold): -
-
[localhost] treesed "Nathan Brazil" -files *.html
-search_pattern: Nathan\ Brazil
-replacement_pattern: 
-
-** Search mode
-
-.
-midnight.html: 1 lines on: 2
-..
-well.html: 1 lines on: 3
-
-
-We notice the following: -
    -
  • The search text "Nathan Brazil" is enclosed in -double-quotes ("). -
  • You specify which files to search with -files followed by a -list of file names--in this case *.html. -
  • Treesed reports the search pattern ("pattern" is just a fancy word -for "text") you specified (you can ignore -that \). -
  • Treesed reports an empty replacement_pattern. This is -correct, because you haven't entered one. -
  • It therefore deduces that is is in search mode. -
  • It finds two files containing "Nathan Brazil", and reports on which -lines of these files it found it; it does not show the lines themselves. -
-Because you used -files, Treesed will search in the files you -specify in the current directory. You can also search files in -the current directory and all directories below it. However, in -that case you can not specify which file names to use, all files will be -searched: -
-
[localhost] treesed "Nathan Brazil" -tree
-search_pattern: Nathan\ Brazil
-replacement_pattern: 
-
-** Search mode
-
-.
-midnight.html: 1 lines on: 2
-...
-well.html: 1 lines on: 3
-.
-new/echoes.html: 1 lines on: 2
-
-
-We notice the following: -
    -
  • Instead of -files we now see -tree. -
  • We do not see a specification of file names. -
  • Treesed finds an occurence of "Nathan Brazil" in the file -echoes.html in the subdirectory new; it did not -find this file in the previous example (as it shouldn't). -
- -

Replacing

-To replace a text you simply add the replacement text right after the -search text: -
-
[localhost] treesed "Nathan Brazil" "Mavra Change" -files *.html
-search_pattern: Nathan\ Brazil
-replacement_pattern: Mavra Chang
-
-** EDIT MODE!
-
-.
-midnight.html: 1 lines on: 2
-
-Replaced Nathan\ Brazil by Mavra Chang on 1 lines in midnight.html
-..
-well.html: 1 lines on: 3
-
-Replaced Nathan\ Brazil by Mavra Chang on 1 lines in well.html
-
-
-We notice the following: -
    -
  • Right after the search text "Nathan Brazil" you specify the -replacement text "Mavra Chang". -
  • As a result, Treesed now reports a non-empty -replacement_pattern. -
  • Hence it concludes it is in "edit mode", which means replacment mode. -
  • Treesed dutifully reports on which lines in which files it did the -replacement. -
-To replace a text in all files in the current directory and the ones -below it, we do the following: -
-
[localhost] treesed "Nathan Brazil" "Mavra Chang" -tree
-search_pattern: Nathan\ Brazil
-replacement_pattern: Mavra Chang
-
-** EDIT MODE!
-
-.
-midnight.html: 1 lines on: 2
-
-Replaced Nathan\ Brazil by Mavra Chang on 1 lines in midnight.html
-
-....
-well.html: 1 lines on: 3
-
-Replaced Nathan\ Brazil by Mavra Chang on 1 lines in well.html
-.
-new/echoes.html: 1 lines on: 2
-
-Replaced Nathan\ Brazil by Mavra Chang on 1 lines in new/echoes.html
-
-
-and we get the expected results, including the replace in -new/echoes.html. - -

Old Versions

-Treesed leaves behind quite a mess of old versions of the files it -changed (only in change-mode, of course). These old files have the same -name as the original file, with .ddddd appended to it. For -example, if treesed makes a change to midnight.html it will -leave the original version as something like -midnight.html.26299. You'll have to remove these files lest -your disk area clutters up. Here is a command that does that, but -beware! This command removes all files in the current directory and -all below it, that end in a period followed by one or more -digits: -
-
find . -name "*.[0-9]*" -exec rm {} \;
-
-
- -It is interesting to note that if you use treesed again without cleaning -up, you may get files like midnight.html.26299.27654. These -will also be cleaned up by the above slightly dangerous command. - - -

About Treesed

-treesed is public domain software developed -and designed by Rick Jansen from Sara, Amsterdam, Netherlands, January -1996. - -

- -

About This Document

-This usage document was created by the Division of Information Technology Services at The -University of Western Ontario. - - \ No newline at end of file diff --git a/source/StkUGens/stk-4.4.4/include/ADSR.h b/source/StkUGens/stk-4.4.4/include/ADSR.h deleted file mode 100644 index b819866f13..0000000000 --- a/source/StkUGens/stk-4.4.4/include/ADSR.h +++ /dev/null @@ -1,179 +0,0 @@ -#ifndef STK_ADSR_H -#define STK_ADSR_H - -#include "Generator.h" - -namespace stk { - -/***************************************************/ -/*! \class ADSR - \brief STK ADSR envelope class. - - This class implements a traditional ADSR (Attack, Decay, Sustain, - Release) envelope. It responds to simple keyOn and keyOff - messages, keeping track of its state. The \e state = ADSR::IDLE - before being triggered and after the envelope value reaches 0.0 in - the ADSR::RELEASE state. All rate, target and level settings must - be non-negative. All time settings are in seconds and must be - positive. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class ADSR : public Generator -{ - public: - - //! ADSR envelope states. - enum { - ATTACK, /*!< Attack */ - DECAY, /*!< Decay */ - SUSTAIN, /*!< Sustain */ - RELEASE, /*!< Release */ - IDLE /*!< Before attack / after release */ - }; - - //! Default constructor. - ADSR( void ); - - //! Class destructor. - ~ADSR( void ); - - //! Set target = 1, state = \e ADSR::ATTACK. - void keyOn( void ); - - //! Set target = 0, state = \e ADSR::RELEASE. - void keyOff( void ); - - //! Set the attack rate (gain / sample). - void setAttackRate( StkFloat rate ); - - //! Set the target value for the attack (default = 1.0). - void setAttackTarget( StkFloat target ); - - //! Set the decay rate (gain / sample). - void setDecayRate( StkFloat rate ); - - //! Set the sustain level. - void setSustainLevel( StkFloat level ); - - //! Set the release rate (gain / sample). - void setReleaseRate( StkFloat rate ); - - //! Set the attack rate based on a time duration (seconds). - void setAttackTime( StkFloat time ); - - //! Set the decay rate based on a time duration (seconds). - void setDecayTime( StkFloat time ); - - //! Set the release rate based on a time duration (seconds). - void setReleaseTime( StkFloat time ); - - //! Set sustain level and attack, decay, and release time durations (seconds). - void setAllTimes( StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime ); - - //! Set a sustain target value and attack or decay from current value to target. - void setTarget( StkFloat target ); - - //! Return the current envelope \e state (ATTACK, DECAY, SUSTAIN, RELEASE, IDLE). - int getState( void ) const { return state_; }; - - //! Set to state = ADSR::SUSTAIN with current and target values of \e value. - void setValue( StkFloat value ); - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Compute and return one output sample. - StkFloat tick( void ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - void sampleRateChanged( StkFloat newRate, StkFloat oldRate ); - - int state_; - StkFloat value_; - StkFloat target_; - StkFloat attackRate_; - StkFloat decayRate_; - StkFloat releaseRate_; - StkFloat releaseTime_; - StkFloat sustainLevel_; -}; - -inline StkFloat ADSR :: tick( void ) -{ - switch ( state_ ) { - - case ATTACK: - value_ += attackRate_; - if ( value_ >= target_ ) { - value_ = target_; - target_ = sustainLevel_; - state_ = DECAY; - } - lastFrame_[0] = value_; - break; - - case DECAY: - if ( value_ > sustainLevel_ ) { - value_ -= decayRate_; - if ( value_ <= sustainLevel_ ) { - value_ = sustainLevel_; - state_ = SUSTAIN; - } - } - else { - value_ += decayRate_; // attack target < sustain level - if ( value_ >= sustainLevel_ ) { - value_ = sustainLevel_; - state_ = SUSTAIN; - } - } - lastFrame_[0] = value_; - break; - - case RELEASE: - value_ -= releaseRate_; - if ( value_ <= 0.0 ) { - value_ = 0.0; - state_ = IDLE; - } - lastFrame_[0] = value_; - - } - - return value_; -} - -inline StkFrames& ADSR :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "ADSR::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i 0). - /*! - The rate is computed as described above. The value of \e tau - must be greater than zero. Values of \e tau close to zero produce - fast approach rates, while values greater than 1.0 produce rather - slow rates. - */ - void setTau( StkFloat tau ); - - //! Set the asymptotic rate based on a time duration (must be > 0). - void setTime( StkFloat time ); - - //! Set the asymptotic rate such that the target value is perceptually reached (to within -60dB of the target) in \e t60 seconds. - void setT60( StkFloat t60 ); - - //! Set the target value. - void setTarget( StkFloat target ); - - //! Set current and target values to \e value. - void setValue( StkFloat value ); - - //! Return the current envelope \e state (0 = at target, 1 otherwise). - int getState( void ) const { return state_; }; - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Compute and return one output sample. - StkFloat tick( void ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - void sampleRateChanged( StkFloat newRate, StkFloat oldRate ); - - StkFloat value_; - StkFloat target_; - StkFloat factor_; - StkFloat constant_; - int state_; -}; - -inline StkFloat Asymp :: tick( void ) -{ - if ( state_ ) { - - value_ = factor_ * value_ + constant_; - - // Check threshold. - if ( target_ > value_ ) { - if ( target_ - value_ <= TARGET_THRESHOLD ) { - value_ = target_; - state_ = 0; - } - } - else { - if ( value_ - target_ <= TARGET_THRESHOLD ) { - value_ = target_; - state_ = 0; - } - } - lastFrame_[0] = value_; - } - - return value_; -} - -inline StkFrames& Asymp :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "Asymp::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i frames.channels() - nChannels ) { - oStream_ << "BandedWG::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i Out - 3 -/| - 4 -- - \endcode - - Control Change Numbers: - - Operator 4 (feedback) Gain = 2 - - Operator 3 Gain = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class BeeThree : public FM -{ - public: - //! Class constructor. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - BeeThree( void ); - - //! Class destructor. - ~BeeThree( void ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - -}; - -inline StkFloat BeeThree :: tick( unsigned int ) -{ - register StkFloat temp; - - if ( modDepth_ > 0.0 ) { - temp = 1.0 + ( modDepth_ * vibrato_.tick() * 0.1 ); - waves_[0]->setFrequency( baseFrequency_ * temp * ratios_[0] ); - waves_[1]->setFrequency( baseFrequency_ * temp * ratios_[1] ); - waves_[2]->setFrequency( baseFrequency_ * temp * ratios_[2] ); - waves_[3]->setFrequency( baseFrequency_ * temp * ratios_[3] ); - } - - waves_[3]->addPhaseOffset( twozero_.lastOut() ); - temp = control1_ * 2.0 * gains_[3] * adsr_[3]->tick() * waves_[3]->tick(); - twozero_.tick( temp ); - - temp += control2_ * 2.0 * gains_[2] * adsr_[2]->tick() * waves_[2]->tick(); - temp += gains_[1] * adsr_[1]->tick() * waves_[1]->tick(); - temp += gains_[0] * adsr_[0]->tick() * waves_[0]->tick(); - - lastFrame_[0] = temp * 0.125; - return lastFrame_[0]; -} - -inline StkFrames& BeeThree :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "BeeThree::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i= 1.0. The - \e frequency value should be between zero and half the sample rate. - */ - void setResonance( StkFloat frequency, StkFloat radius, bool normalize = false ); - - //! Set the filter coefficients for a notch at \e frequency (in Hz). - /*! - This method determines the filter coefficients corresponding to - two complex-conjugate zeros with the given \e frequency (in Hz) - and \e radius from the z-plane origin. No filter normalization is - attempted. The \e frequency value should be between zero and half - the sample rate. The \e radius value should be positive. - */ - void setNotch( StkFloat frequency, StkFloat radius ); - - //! Sets the filter zeroes for equal resonance gain. - /*! - When using the filter as a resonator, zeroes places at z = 1, z - = -1 will result in a constant gain at resonance of 1 / (1 - R), - where R is the pole radius setting. - - */ - void setEqualGainZeroes( void ); - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Input one sample to the filter and return a reference to one output. - StkFloat tick( StkFloat input ); - - //! Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs. - /*! - The StkFrames argument reference is returned. The \c channel - argument must be less than the number of channels in the - StkFrames argument (the first channel is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the filter and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - - protected: - - virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate ); -}; - -inline StkFloat BiQuad :: tick( StkFloat input ) -{ - inputs_[0] = gain_ * input; - lastFrame_[0] = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2]; - lastFrame_[0] -= a_[2] * outputs_[2] + a_[1] * outputs_[1]; - inputs_[2] = inputs_[1]; - inputs_[1] = inputs_[0]; - outputs_[2] = outputs_[1]; - outputs_[1] = lastFrame_[0]; - - return lastFrame_[0]; -} - -inline StkFrames& BiQuad :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "BiQuad::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "BiQuad::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i -#include - -namespace stk { - -/***************************************************/ -/*! \class Blit - \brief STK band-limited impulse train class. - - This class generates a band-limited impulse train using a - closed-form algorithm reported by Stilson and Smith in "Alias-Free - Digital Synthesis of Classic Analog Waveforms", 1996. The user - can specify both the fundamental frequency of the impulse train - and the number of harmonics contained in the resulting signal. - - The signal is normalized so that the peak value is +/-1.0. - - If nHarmonics is 0, then the signal will contain all harmonics up - to half the sample rate. Note, however, that this setting may - produce aliasing in the signal when the frequency is changing (no - automatic modification of the number of harmonics is performed by - the setFrequency() function). - - Original code by Robin Davies, 2005. - Revisions by Gary Scavone for STK, 2005. -*/ -/***************************************************/ - -class Blit: public Generator -{ - public: - //! Default constructor that initializes BLIT frequency to 220 Hz. - Blit( StkFloat frequency = 220.0 ); - - //! Class destructor. - ~Blit(); - - //! Resets the oscillator state and phase to 0. - void reset(); - - //! Set the phase of the signal. - /*! - Set the phase of the signal, in the range 0 to 1. - */ - void setPhase( StkFloat phase ) { phase_ = PI * phase; }; - - //! Get the current phase of the signal. - /*! - Get the phase of the signal, in the range [0 to 1.0). - */ - StkFloat getPhase() const { return phase_ / PI; }; - - //! Set the impulse train rate in terms of a frequency in Hz. - void setFrequency( StkFloat frequency ); - - //! Set the number of harmonics generated in the signal. - /*! - This function sets the number of harmonics contained in the - resulting signal. It is equivalent to (2 * M) + 1 in the BLIT - algorithm. The default value of 0 sets the algorithm for maximum - harmonic content (harmonics up to half the sample rate). This - parameter is not checked against the current sample rate and - fundamental frequency. Thus, aliasing can result if one or more - harmonics for a given fundamental frequency exceeds fs / 2. This - behavior was chosen over the potentially more problematic solution - of automatically modifying the M parameter, which can produce - audible clicks in the signal. - */ - void setHarmonics( unsigned int nHarmonics = 0 ); - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Compute and return one output sample. - StkFloat tick( void ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - void updateHarmonics( void ); - - unsigned int nHarmonics_; - unsigned int m_; - StkFloat rate_; - StkFloat phase_; - StkFloat p_; - -}; - -inline StkFloat Blit :: tick( void ) -{ - // The code below implements the SincM algorithm of Stilson and - // Smith with an additional scale factor of P / M applied to - // normalize the output. - - // A fully optimized version of this code would replace the two sin - // calls with a pair of fast sin oscillators, for which stable fast - // two-multiply algorithms are well known. In the spirit of STK, - // which favors clarity over performance, the optimization has not - // been made here. - - // Avoid a divide by zero at the sinc peak, which has a limiting - // value of 1.0. - StkFloat tmp, denominator = sin( phase_ ); - if ( denominator <= std::numeric_limits::epsilon() ) - tmp = 1.0; - else { - tmp = sin( m_ * phase_ ); - tmp /= m_ * denominator; - } - - phase_ += rate_; - if ( phase_ >= PI ) phase_ -= PI; - - lastFrame_[0] = tmp; - return lastFrame_[0]; -} - -inline StkFrames& Blit :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "Blit::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i -#include - -namespace stk { - -/***************************************************/ -/*! \class BlitSaw - \brief STK band-limited sawtooth wave class. - - This class generates a band-limited sawtooth waveform using a - closed-form algorithm reported by Stilson and Smith in "Alias-Free - Digital Synthesis of Classic Analog Waveforms", 1996. The user - can specify both the fundamental frequency of the sawtooth and the - number of harmonics contained in the resulting signal. - - If nHarmonics is 0, then the signal will contain all harmonics up - to half the sample rate. Note, however, that this setting may - produce aliasing in the signal when the frequency is changing (no - automatic modification of the number of harmonics is performed by - the setFrequency() function). - - Based on initial code of Robin Davies, 2005. - Modified algorithm code by Gary Scavone, 2005. -*/ -/***************************************************/ - -class BlitSaw: public Generator -{ - public: - //! Class constructor. - BlitSaw( StkFloat frequency = 220.0 ); - - //! Class destructor. - ~BlitSaw(); - - //! Resets the oscillator state and phase to 0. - void reset(); - - //! Set the sawtooth oscillator rate in terms of a frequency in Hz. - void setFrequency( StkFloat frequency ); - - //! Set the number of harmonics generated in the signal. - /*! - This function sets the number of harmonics contained in the - resulting signal. It is equivalent to (2 * M) + 1 in the BLIT - algorithm. The default value of 0 sets the algorithm for maximum - harmonic content (harmonics up to half the sample rate). This - parameter is not checked against the current sample rate and - fundamental frequency. Thus, aliasing can result if one or more - harmonics for a given fundamental frequency exceeds fs / 2. This - behavior was chosen over the potentially more problematic solution - of automatically modifying the M parameter, which can produce - audible clicks in the signal. - */ - void setHarmonics( unsigned int nHarmonics = 0 ); - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Compute and return one output sample. - StkFloat tick( void ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - void updateHarmonics( void ); - - unsigned int nHarmonics_; - unsigned int m_; - StkFloat rate_; - StkFloat phase_; - StkFloat p_; - StkFloat C2_; - StkFloat a_; - StkFloat state_; - -}; - -inline StkFloat BlitSaw :: tick( void ) -{ - // The code below implements the BLIT algorithm of Stilson and - // Smith, followed by a summation and filtering operation to produce - // a sawtooth waveform. After experimenting with various approaches - // to calculate the average value of the BLIT over one period, I - // found that an estimate of C2_ = 1.0 / period (in samples) worked - // most consistently. A "leaky integrator" is then applied to the - // difference of the BLIT output and C2_. (GPS - 1 October 2005) - - // A fully optimized version of this code would replace the two sin - // calls with a pair of fast sin oscillators, for which stable fast - // two-multiply algorithms are well known. In the spirit of STK, - // which favors clarity over performance, the optimization has - // not been made here. - - // Avoid a divide by zero, or use of a denormalized divisor - // at the sinc peak, which has a limiting value of m_ / p_. - StkFloat tmp, denominator = sin( phase_ ); - if ( fabs(denominator) <= std::numeric_limits::epsilon() ) - tmp = a_; - else { - tmp = sin( m_ * phase_ ); - tmp /= p_ * denominator; - } - - tmp += state_ - C2_; - state_ = tmp * 0.995; - - phase_ += rate_; - if ( phase_ >= PI ) phase_ -= PI; - - lastFrame_[0] = tmp; - return lastFrame_[0]; -} - -inline StkFrames& BlitSaw :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "BlitSaw::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i -#include - -namespace stk { - -/***************************************************/ -/*! \class BlitSquare - \brief STK band-limited square wave class. - - This class generates a band-limited square wave signal. It is - derived in part from the approach reported by Stilson and Smith in - "Alias-Free Digital Synthesis of Classic Analog Waveforms", 1996. - The algorithm implemented in this class uses a SincM function with - an even M value to achieve a bipolar bandlimited impulse train. - This signal is then integrated to achieve a square waveform. The - integration process has an associated DC offset so a DC blocking - filter is applied at the output. - - The user can specify both the fundamental frequency of the - waveform and the number of harmonics contained in the resulting - signal. - - If nHarmonics is 0, then the signal will contain all harmonics up - to half the sample rate. Note, however, that this setting may - produce aliasing in the signal when the frequency is changing (no - automatic modification of the number of harmonics is performed by - the setFrequency() function). Also note that the harmonics of a - square wave fall at odd integer multiples of the fundamental, so - aliasing will happen with a lower fundamental than with the other - Blit waveforms. This class is not guaranteed to be well behaved - in the presence of significant aliasing. - - Based on initial code of Robin Davies, 2005. - Modified algorithm code by Gary Scavone, 2005 - 2006. -*/ -/***************************************************/ - -class BlitSquare: public Generator -{ - public: - //! Default constructor that initializes BLIT frequency to 220 Hz. - BlitSquare( StkFloat frequency = 220.0 ); - - //! Class destructor. - ~BlitSquare(); - - //! Resets the oscillator state and phase to 0. - void reset(); - - //! Set the phase of the signal. - /*! - Set the phase of the signal, in the range 0 to 1. - */ - void setPhase( StkFloat phase ) { phase_ = PI * phase; }; - - //! Get the current phase of the signal. - /*! - Get the phase of the signal, in the range [0 to 1.0). - */ - StkFloat getPhase() const { return phase_ / PI; }; - - //! Set the impulse train rate in terms of a frequency in Hz. - void setFrequency( StkFloat frequency ); - - //! Set the number of harmonics generated in the signal. - /*! - This function sets the number of harmonics contained in the - resulting signal. It is equivalent to (2 * M) + 1 in the BLIT - algorithm. The default value of 0 sets the algorithm for maximum - harmonic content (harmonics up to half the sample rate). This - parameter is not checked against the current sample rate and - fundamental frequency. Thus, aliasing can result if one or more - harmonics for a given fundamental frequency exceeds fs / 2. This - behavior was chosen over the potentially more problematic solution - of automatically modifying the M parameter, which can produce - audible clicks in the signal. - */ - void setHarmonics( unsigned int nHarmonics = 0 ); - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Compute and return one output sample. - StkFloat tick( void ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - void updateHarmonics( void ); - - unsigned int nHarmonics_; - unsigned int m_; - StkFloat rate_; - StkFloat phase_; - StkFloat p_; - StkFloat a_; - StkFloat lastBlitOutput_; - StkFloat dcbState_; -}; - -inline StkFloat BlitSquare :: tick( void ) -{ - StkFloat temp = lastBlitOutput_; - - // A fully optimized version of this would replace the two sin calls - // with a pair of fast sin oscillators, for which stable fast - // two-multiply algorithms are well known. In the spirit of STK, - // which favors clarity over performance, the optimization has - // not been made here. - - // Avoid a divide by zero, or use of a denomralized divisor - // at the sinc peak, which has a limiting value of 1.0. - StkFloat denominator = sin( phase_ ); - if ( fabs( denominator ) < std::numeric_limits::epsilon() ) { - // Inexact comparison safely distinguishes betwen *close to zero*, and *close to PI*. - if ( phase_ < 0.1f || phase_ > TWO_PI - 0.1f ) - lastBlitOutput_ = a_; - else - lastBlitOutput_ = -a_; - } - else { - lastBlitOutput_ = sin( m_ * phase_ ); - lastBlitOutput_ /= p_ * denominator; - } - - lastBlitOutput_ += temp; - - // Now apply DC blocker. - lastFrame_[0] = lastBlitOutput_ - dcbState_ + 0.999 * lastFrame_[0]; - dcbState_ = lastBlitOutput_; - - phase_ += rate_; - if ( phase_ >= TWO_PI ) phase_ -= TWO_PI; - - return lastFrame_[0]; -} - -inline StkFrames& BlitSquare :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "BlitSquare::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i frames.channels() - nChannels ) { - oStream_ << "BlowBotl::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i frames.channels() - nChannels ) { - oStream_ << "BlowHole::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i - -namespace stk { - -/***************************************************/ -/*! \class BowTable - \brief STK bowed string table class. - - This class implements a simple bowed string - non-linear function, as described by Smith - (1986). The output is an instantaneous - reflection coefficient value. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class BowTable : public Function -{ -public: - //! Default constructor. - BowTable( void ) : offset_(0.0), slope_(0.1), minOutput_(0.01), maxOutput_(0.98) {}; - - //! Set the table offset value. - /*! - The table offset is a bias which controls the - symmetry of the friction. If you want the - friction to vary with direction, use a non-zero - value for the offset. The default value is zero. - */ - void setOffset( StkFloat offset ) { offset_ = offset; }; - - //! Set the table slope value. - /*! - The table slope controls the width of the friction - pulse, which is related to bow force. - */ - void setSlope( StkFloat slope ) { slope_ = slope; }; - - //! Set the minimum table output value (0.0 - 1.0). - void setMinOutput( StkFloat minimum ) { minOutput_ = minimum; }; - - //! Set the maximum table output value (0.0 - 1.0). - void setMaxOutput( StkFloat maximum ) { maxOutput_ = maximum; }; - - //! Take one sample input and map to one sample of output. - StkFloat tick( StkFloat input ); - - //! Take a channel of the StkFrames object as inputs to the table and replace with corresponding outputs. - /*! - The StkFrames argument reference is returned. The \c channel - argument must be less than the number of channels in the - StkFrames argument (the first channel is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the table and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - -protected: - - StkFloat offset_; - StkFloat slope_; - StkFloat minOutput_; - StkFloat maxOutput_; - -}; - -inline StkFloat BowTable :: tick( StkFloat input ) -{ - // The input represents differential string vs. bow velocity. - StkFloat sample = input + offset_; // add bias to input - sample *= slope_; // then scale it - lastFrame_[0] = (StkFloat) fabs( (double) sample ) + (StkFloat) 0.75; - lastFrame_[0] = (StkFloat) pow( lastFrame_[0], (StkFloat) -4.0 ); - - // Set minimum threshold - if ( lastFrame_[0] < minOutput_ ) lastFrame_[0] = minOutput_; - - // Set maximum threshold - if ( lastFrame_[0] > maxOutput_ ) lastFrame_[0] = maxOutput_; - - return lastFrame_[0]; -} - -inline StkFrames& BowTable :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "BowTable::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i 1.0) *samples = 1.0; - } - - lastFrame_[0] = *(samples-hop); - return frames; -} - -inline StkFrames& BowTable :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel ) -{ -#if defined(_STK_DEBUG_) - if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "BowTable::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i 1.0) *oSamples = 1.0; - } - - lastFrame_[0] = *(oSamples-oHop); - return iFrames; -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/Bowed.h b/source/StkUGens/stk-4.4.4/include/Bowed.h deleted file mode 100644 index 974b4efbad..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Bowed.h +++ /dev/null @@ -1,157 +0,0 @@ -#ifndef STK_BOWED_H -#define STK_BOWED_H - -#include "Instrmnt.h" -#include "DelayL.h" -#include "BowTable.h" -#include "OnePole.h" -#include "BiQuad.h" -#include "SineWave.h" -#include "ADSR.h" - -namespace stk { - -/***************************************************/ -/*! \class Bowed - \brief STK bowed string instrument class. - - This class implements a bowed string model, a - la Smith (1986), after McIntyre, Schumacher, - Woodhouse (1983). - - This is a digital waveguide model, making its - use possibly subject to patents held by - Stanford University, Yamaha, and others. - - Control Change Numbers: - - Bow Pressure = 2 - - Bow Position = 4 - - Vibrato Frequency = 11 - - Vibrato Gain = 1 - - Bow Velocity = 100 - - Frequency = 101 - - Volume = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. - Contributions by Esteban Maestre, 2011. -*/ -/***************************************************/ - -class Bowed : public Instrmnt -{ - public: - //! Class constructor, taking the lowest desired playing frequency. - Bowed( StkFloat lowestFrequency = 8.0 ); - - //! Class destructor. - ~Bowed( void ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Set vibrato gain. - void setVibrato( StkFloat gain ) { vibratoGain_ = gain; }; - - //! Apply breath pressure to instrument with given amplitude and rate of increase. - void startBowing( StkFloat amplitude, StkFloat rate ); - - //! Decrease breath pressure with given rate of decrease. - void stopBowing( StkFloat rate ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Stop a note with the given amplitude (speed of decay). - void noteOff( StkFloat amplitude ); - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - void controlChange( int number, StkFloat value ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - DelayL neckDelay_; - DelayL bridgeDelay_; - BowTable bowTable_; - OnePole stringFilter_; - BiQuad bodyFilters_[6]; - SineWave vibrato_; - ADSR adsr_; - - bool bowDown_; - StkFloat maxVelocity_; - StkFloat baseDelay_; - StkFloat vibratoGain_; - StkFloat betaRatio_; - -}; - -inline StkFloat Bowed :: tick( unsigned int ) -{ - StkFloat bowVelocity = maxVelocity_ * adsr_.tick(); - StkFloat bridgeReflection = -stringFilter_.tick( bridgeDelay_.lastOut() ); - StkFloat nutReflection = -neckDelay_.lastOut(); - StkFloat stringVelocity = bridgeReflection + nutReflection; - StkFloat deltaV = bowVelocity - stringVelocity; // Differential velocity - - StkFloat newVelocity = 0.0; - if ( bowDown_ ) - newVelocity = deltaV * bowTable_.tick( deltaV ); // Non-Linear bow function - neckDelay_.tick( bridgeReflection + newVelocity); // Do string propagations - bridgeDelay_.tick(nutReflection + newVelocity); - - if ( vibratoGain_ > 0.0 ) { - neckDelay_.setDelay( (baseDelay_ * (1.0 - betaRatio_) ) + - (baseDelay_ * vibratoGain_ * vibrato_.tick()) ); - } - - lastFrame_[0] = 0.1248 * bodyFilters_[5].tick( bodyFilters_[4].tick( bodyFilters_[3].tick( bodyFilters_[2].tick( bodyFilters_[1].tick( bodyFilters_[0].tick( bridgeDelay_.lastOut() ) ) ) ) ) ); - - return lastFrame_[0]; -} - -inline StkFrames& Bowed :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Bowed::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i position. - deltaPressure *= deltaPressure; // Basic position to area mapping. - if ( deltaPressure > 1.0 ) deltaPressure = 1.0; // Non-linear saturation. - - // The following input scattering assumes the mouthPressure = area. - lastFrame_[0] = deltaPressure * mouthPressure + ( 1.0 - deltaPressure) * borePressure; - lastFrame_[0] = delayLine_.tick( dcBlock_.tick( lastFrame_[0] ) ); - - return lastFrame_[0]; -} - -inline StkFrames& Brass :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Brass::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i 1 ) { - oStream_ << "Chorus::lastOut(): channel argument must be less than 2!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - return lastFrame_[channel]; -} - -inline StkFloat Chorus :: tick( StkFloat input, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel > 1 ) { - oStream_ << "Chorus::tick(): channel argument must be less than 2!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - delayLine_[0].setDelay( baseLength_ * 0.707 * ( 1.0 + modDepth_ * mods_[0].tick() ) ); - delayLine_[1].setDelay( baseLength_ * 0.5 * ( 1.0 - modDepth_ * mods_[1].tick() ) ); - lastFrame_[0] = effectMix_ * ( delayLine_[0].tick( input ) - input ) + input; - lastFrame_[1] = effectMix_ * ( delayLine_[1].tick( input ) - input ) + input; - return lastFrame_[channel]; -} - -inline StkFrames& Chorus :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() - 1 ) { - oStream_ << "Chorus::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels() - 1; - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() - 1 ) { - oStream_ << "Chorus::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i frames.channels() - nChannels ) { - oStream_ << "Clarinet::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i - -namespace stk { - -/***************************************************/ -/*! \class Cubic - \brief STK cubic non-linearity class. - - This class implements the cubic non-linearity - that was used in SynthBuilder. - - The formula implemented is: - - \code - output = gain * (a1 * input + a2 * input^2 + a3 * input^3) - \endcode - - followed by a limiter for values outside +-threshold. - - Ported to STK by Nick Porcaro, 2007. Updated for inclusion - in STK distribution by Gary Scavone, 2011. -*/ -/***************************************************/ - -class Cubic : public Function -{ -public: - //! Default constructor. - Cubic( void ) : a1_(0.5), a2_(0.5), a3_(0.5), gain_(1.0), threshold_(1.0) {}; - - //! Set the a1 coefficient value. - void setA1( StkFloat a1 ) { a1_ = a1; }; - - //! Set the a2 coefficient value. - void setA2( StkFloat a2 ) { a2_ = a2; }; - - //! Set the a3 coefficient value. - void setA3( StkFloat a3 ) { a3_ = a3; }; - - //! Set the gain value. - void setGain( StkFloat gain ) { gain_ = gain; }; - - //! Set the threshold value. - void setThreshold( StkFloat threshold ) { threshold_ = threshold; }; - - //! Input one sample to the function and return one output. - StkFloat tick( StkFloat input ); - - //! Take a channel of the StkFrames object as inputs to the function and replace with corresponding outputs. - /*! - The StkFrames argument reference is returned. The \c channel - argument must be less than the number of channels in the - StkFrames argument (the first channel is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the function and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - -protected: - - StkFloat a1_; - StkFloat a2_; - StkFloat a3_; - StkFloat gain_; - StkFloat threshold_; -}; - -inline StkFloat Cubic :: tick( StkFloat input ) -{ - StkFloat inSquared = input * input; - StkFloat inCubed = inSquared * input; - - lastFrame_[0] = gain_ * (a1_ * input + a2_ * inSquared + a3_ * inCubed); - - // Apply threshold if we are out of range. - if ( fabs( lastFrame_[0] ) > threshold_ ) { - lastFrame_[0] = ( lastFrame_[0] < 0 ? -threshold_ : threshold_ ); - } - - return lastFrame_[0]; -} - -inline StkFrames& Cubic :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "Cubic::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "Cubic::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i= frames.channels() ) { - oStream_ << "Delay::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "Delay::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i= frames.channels() ) { - oStream_ << "DelayA::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "DelayA::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i= frames.channels() ) { - oStream_ << "DelayL::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "DelayL::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i soundOrder_; - std::vector soundNumber_; - int nSounding_; -}; - -inline StkFloat Drummer :: tick( unsigned int ) -{ - lastFrame_[0] = 0.0; - if ( nSounding_ == 0 ) return lastFrame_[0]; - - for ( int i=0; i= 0 ) { - if ( waves_[i].isFinished() ) { - // Re-order the list. - for ( int j=0; j soundOrder_[i] ) - soundOrder_[j] -= 1; - } - soundOrder_[i] = -1; - nSounding_--; - } - else - lastFrame_[0] += filters_[i].tick( waves_[i].tick() ); - } - } - - return lastFrame_[0]; -} - -inline StkFrames& Drummer :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Drummer::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i= frames.channels() ) { - oStream_ << "Echo::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "Echo::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i - -namespace stk { - -/***************************************************/ -/*! \class Effect - \brief STK abstract effects parent class. - - This class provides common functionality for STK effects - subclasses. It is general enough to support both monophonic and - polyphonic input/output classes. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Effect : public Stk -{ - public: - //! Class constructor. - Effect( void ) { lastFrame_.resize( 1, 1, 0.0 ); }; - - //! Return the number of output channels for the class. - unsigned int channelsOut( void ) const { return lastFrame_.channels(); }; - - //! Return an StkFrames reference to the last output sample frame. - const StkFrames& lastFrame( void ) const { return lastFrame_; }; - - //! Reset and clear all internal state. - virtual void clear() = 0; - - //! Set the mixture of input and "effected" levels in the output (0.0 = input only, 1.0 = effect only). - virtual void setEffectMix( StkFloat mix ); - - protected: - - // Returns true if argument value is prime. - bool isPrime( unsigned int number ); - - StkFrames lastFrame_; - StkFloat effectMix_; - -}; - -inline void Effect :: setEffectMix( StkFloat mix ) -{ - if ( mix < 0.0 ) { - oStream_ << "Effect::setEffectMix: mix parameter is less than zero ... setting to zero!"; - handleError( StkError::WARNING ); - effectMix_ = 0.0; - } - else if ( mix > 1.0 ) { - oStream_ << "Effect::setEffectMix: mix parameter is greater than 1.0 ... setting to one!"; - handleError( StkError::WARNING ); - effectMix_ = 1.0; - } - else - effectMix_ = mix; -} - -inline bool Effect :: isPrime( unsigned int number ) -{ - if ( number == 2 ) return true; - if ( number & 1 ) { - for ( int i=3; i<(int)sqrt((double)number)+1; i+=2 ) - if ( (number % i) == 0 ) return false; - return true; // prime - } - else return false; // even -} - -} // stk namespace - -#endif - diff --git a/source/StkUGens/stk-4.4.4/include/Envelope.h b/source/StkUGens/stk-4.4.4/include/Envelope.h deleted file mode 100644 index f7c377a1cf..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Envelope.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef STK_ENVELOPE_H -#define STK_ENVELOPE_H - -#include "Generator.h" - -namespace stk { - -/***************************************************/ -/*! \class Envelope - \brief STK linear line envelope class. - - This class implements a simple linear line envelope generator - which is capable of ramping to an arbitrary target value by a - specified \e rate. It also responds to simple \e keyOn and \e - keyOff messages, ramping to 1.0 on keyOn and to 0.0 on keyOff. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Envelope : public Generator -{ - public: - - //! Default constructor. - Envelope( void ); - - //! Class destructor. - ~Envelope( void ); - - //! Assignment operator. - Envelope& operator= ( const Envelope& e ); - - //! Set target = 1. - void keyOn( void ) { this->setTarget( 1.0 ); }; - - //! Set target = 0. - void keyOff( void ) { this->setTarget( 0.0 ); }; - - //! Set the \e rate. - /*! - The \e rate must be positive (though a value of 0.0 is allowed). - */ - void setRate( StkFloat rate ); - - //! Set the \e rate based on a positive time duration (seconds). - /*! - The \e rate is calculated such that the envelope will ramp from - a value of 0.0 to 1.0 in the specified time duration. - */ - void setTime( StkFloat time ); - - //! Set the target value. - void setTarget( StkFloat target ); - - //! Set current and target values to \e value. - void setValue( StkFloat value ); - - //! Return the current envelope \e state (0 = at target, 1 otherwise). - int getState( void ) const { return state_; }; - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Compute and return one output sample. - StkFloat tick( void ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - void sampleRateChanged( StkFloat newRate, StkFloat oldRate ); - - StkFloat value_; - StkFloat target_; - StkFloat rate_; - int state_; -}; - -inline StkFloat Envelope :: tick( void ) -{ - if ( state_ ) { - if ( target_ > value_ ) { - value_ += rate_; - if ( value_ >= target_ ) { - value_ = target_; - state_ = 0; - } - } - else { - value_ -= rate_; - if ( value_ <= target_ ) { - value_ = target_; - state_ = 0; - } - } - lastFrame_[0] = value_; - } - - return value_; -} - -inline StkFrames& Envelope :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "Envelope::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i adsr_; - std::vector waves_; - SineWave vibrato_; - TwoZero twozero_; - unsigned int nOperators_; - StkFloat baseFrequency_; - std::vector ratios_; - std::vector gains_; - StkFloat modDepth_; - StkFloat control1_; - StkFloat control2_; - StkFloat fmGains_[100]; - StkFloat fmSusLevels_[16]; - StkFloat fmAttTimes_[32]; - -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/FMVoices.h b/source/StkUGens/stk-4.4.4/include/FMVoices.h deleted file mode 100644 index 5c49b74c29..0000000000 --- a/source/StkUGens/stk-4.4.4/include/FMVoices.h +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef STK_FMVOICES_H -#define STK_FMVOICES_H - -#include "FM.h" - -namespace stk { - -/***************************************************/ -/*! \class FMVoices - \brief STK singing FM synthesis instrument. - - This class implements 3 carriers and a common - modulator, also referred to as algorithm 6 of - the TX81Z. - - \code - Algorithm 6 is : - /->1 -\ - 4-|-->2 - +-> Out - \->3 -/ - \endcode - - Control Change Numbers: - - Vowel = 2 - - Spectral Tilt = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class FMVoices : public FM -{ - public: - //! Class constructor. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - FMVoices( void ); - - //! Class destructor. - ~FMVoices( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - void controlChange( int number, StkFloat value ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - int currentVowel_; - StkFloat tilt_[3]; - StkFloat mods_[3]; -}; - -inline StkFloat FMVoices :: tick( unsigned int ) -{ - register StkFloat temp, temp2; - - temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick(); - temp2 = vibrato_.tick() * modDepth_ * 0.1; - - waves_[0]->setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[0]); - waves_[1]->setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[1]); - waves_[2]->setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[2]); - waves_[3]->setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[3]); - - waves_[0]->addPhaseOffset(temp * mods_[0]); - waves_[1]->addPhaseOffset(temp * mods_[1]); - waves_[2]->addPhaseOffset(temp * mods_[2]); - waves_[3]->addPhaseOffset( twozero_.lastOut() ); - twozero_.tick( temp ); - temp = gains_[0] * tilt_[0] * adsr_[0]->tick() * waves_[0]->tick(); - temp += gains_[1] * tilt_[1] * adsr_[1]->tick() * waves_[1]->tick(); - temp += gains_[2] * tilt_[2] * adsr_[2]->tick() * waves_[2]->tick(); - - lastFrame_[0] = temp * 0.33; - return lastFrame_[0]; -} - -inline StkFrames& FMVoices :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "FMVoices::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; isetRate( file_.fileSize() * frequency / Stk::sampleRate() ); }; - - //! Increment the read pointer by \e time samples, modulo file size. - void addTime( StkFloat time ); - - //! Increment current read pointer by \e angle, relative to a looping frequency. - /*! - This function increments the read pointer based on the file - size and the current Stk::sampleRate. The \e anAngle value - is a multiple of file size. - */ - void addPhase( StkFloat angle ); - - //! Add a phase offset to the current read pointer. - /*! - This function determines a time offset based on the file - size and the current Stk::sampleRate. The \e angle value - is a multiple of file size. - */ - void addPhaseOffset( StkFloat angle ); - - //! Return the specified channel value of the last computed frame. - /*! - For multi-channel files, use the lastFrame() function to get - all values from the last computed frame. If no file data is - loaded, the returned value is 0.0. The \c channel argument must - be less than the number of channels in the file data (the first - channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. - */ - StkFloat lastOut( unsigned int channel = 0 ) { return FileWvIn::lastOut( channel ); }; - - //! Compute a sample frame and return the specified \c channel value. - /*! - For multi-channel files, use the lastFrame() function to get - all values from the computed frame. If no file data is loaded, - the returned value is 0.0. The \c channel argument must be less - than the number of channels in the file data (the first channel is - specified by 0). However, range checking is only performed if - _STK_DEBUG_ is defined during compilation, in which case an - out-of-range value will trigger an StkError exception. - */ - StkFloat tick( unsigned int channel = 0 ); - - //! Fill the StkFrames argument with computed frames and return the same reference. - /*! - The number of channels in the StkFrames argument should equal - the number of channels in the file data. However, this is only - checked if _STK_DEBUG_ is defined during compilation, in which - case an incompatibility will trigger an StkError exception. If no - file data is loaded, the function does nothing (a warning will be - issued if _STK_DEBUG_ is defined during compilation and - Stk::showWarnings() has been set to \e true). - */ - StkFrames& tick( StkFrames& frames ); - - protected: - - StkFrames firstFrame_; - StkFloat phaseOffset_; - -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/FileRead.h b/source/StkUGens/stk-4.4.4/include/FileRead.h deleted file mode 100644 index eaba37e220..0000000000 --- a/source/StkUGens/stk-4.4.4/include/FileRead.h +++ /dev/null @@ -1,141 +0,0 @@ -#ifndef STK_FILEREAD_H -#define STK_FILEREAD_H - -#include "Stk.h" - -namespace stk { - -/***************************************************/ -/*! \class FileRead - \brief STK audio file input class. - - This class provides input support for various - audio file formats. Multi-channel (>2) - soundfiles are supported. The file data is - returned via an external StkFrames object - passed to the read() function. This class - does not store its own copy of the file data, - rather the data is read directly from disk. - - FileRead currently supports uncompressed WAV, - AIFF/AIFC, SND (AU), MAT-file (Matlab), and - STK RAW file formats. Signed integer (8-, - 16-, 24-, and 32-bit) and floating-point (32- and - 64-bit) data types are supported. Compressed - data types are not supported. - - STK RAW files have no header and are assumed to - contain a monophonic stream of 16-bit signed - integers in big-endian byte order at a sample - rate of 22050 Hz. MAT-file data should be saved - in an array with each data channel filling a - matrix row. The sample rate for MAT-files should - be specified in a variable named "fs". If no - such variable is found, the sample rate is - assumed to be 44100 Hz. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class FileRead : public Stk -{ -public: - //! Default constructor. - FileRead( void ); - - //! Overloaded constructor that opens a file during instantiation. - /*! - An StkError will be thrown if the file is not found or its - format is unknown or unsupported. The optional arguments allow a - headerless file type to be supported. If \c typeRaw is false (the - default), the subsequent parameters are ignored. - */ - FileRead( std::string fileName, bool typeRaw = false, unsigned int nChannels = 1, - StkFormat format = STK_SINT16, StkFloat rate = 22050.0 ); - - //! Class destructor. - ~FileRead( void ); - - //! Open the specified file and determine its formatting. - /*! - An StkError will be thrown if the file is not found or its - format is unknown or unsupported. The optional arguments allow a - headerless file type to be supported. If \c typeRaw is false (the - default), the subsequent parameters are ignored. - */ - void open( std::string fileName, bool typeRaw = false, unsigned int nChannels = 1, - StkFormat format = STK_SINT16, StkFloat rate = 22050.0 ); - - //! If a file is open, close it. - void close( void ); - - //! Returns \e true if a file is currently open. - bool isOpen( void ); - - //! Return the file size in sample frames. - unsigned long fileSize( void ) const { return fileSize_; }; - - //! Return the number of audio channels in the file. - unsigned int channels( void ) const { return channels_; }; - - //! Return the data format of the file. - StkFormat format( void ) const { return dataType_; }; - - //! Return the file sample rate in Hz. - /*! - WAV, SND, and AIF formatted files specify a sample rate in - their headers. By definition, STK RAW files have a sample rate of - 22050 Hz. MAT-files are assumed to have a rate of 44100 Hz. - */ - StkFloat fileRate( void ) const { return fileRate_; }; - - //! Read sample frames from the file into an StkFrames object. - /*! - The number of sample frames to read will be determined from the - number of frames of the StkFrames argument. If this size is - larger than the available data in the file (given the file size - and starting frame index), the extra frames will be unaffected - (the StkFrames object will not be resized). Optional parameters - are provided to specify the starting sample frame within the file - (default = 0) and whether to normalize the data with respect to - fixed-point limits (default = true). An StkError will be thrown - if a file error occurs or if the number of channels in the - StkFrames argument is not equal to that in the file. - */ - void read( StkFrames& buffer, unsigned long startFrame = 0, bool doNormalize = true ); - -protected: - - // Get STK RAW file information. - bool getRawInfo( const char *fileName, unsigned int nChannels, - StkFormat format, StkFloat rate ); - - // Get WAV file header information. - bool getWavInfo( const char *fileName ); - - // Get SND (AU) file header information. - bool getSndInfo( const char *fileName ); - - // Get AIFF file header information. - bool getAifInfo( const char *fileName ); - - // Get MAT-file header information. - bool getMatInfo( const char *fileName ); - - // Helper function for MAT-file parsing. - bool findNextMatArray( SINT32 *chunkSize, SINT32 *rows, SINT32 *columns, SINT32 *nametype ); - - FILE *fd_; - bool byteswap_; - bool wavFile_; - unsigned long fileSize_; - unsigned long dataOffset_; - unsigned int channels_; - StkFormat dataType_; - StkFloat fileRate_; -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/FileWrite.h b/source/StkUGens/stk-4.4.4/include/FileWrite.h deleted file mode 100644 index e4d3941029..0000000000 --- a/source/StkUGens/stk-4.4.4/include/FileWrite.h +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef STK_FILEWRITE_H -#define STK_FILEWRITE_H - -#include "Stk.h" - -namespace stk { - -/***************************************************/ -/*! \class FileWrite - \brief STK audio file output class. - - This class provides output support for various - audio file formats. - - FileWrite writes samples to an audio file. It supports - multi-channel data. - - FileWrite currently supports uncompressed WAV, AIFF, AIFC, SND - (AU), MAT-file (Matlab), and STK RAW file formats. Signed integer - (8-, 16-, 24-, and 32-bit) and floating- point (32- and 64-bit) - data types are supported. STK RAW files use 16-bit integers by - definition. MAT-files will always be written as 64-bit floats. - If a data type specification does not match the specified file - type, the data type will automatically be modified. Compressed - data types are not supported. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class FileWrite : public Stk -{ - public: - - typedef unsigned long FILE_TYPE; - - static const FILE_TYPE FILE_RAW; /*!< STK RAW file type. */ - static const FILE_TYPE FILE_WAV; /*!< WAV file type. */ - static const FILE_TYPE FILE_SND; /*!< SND (AU) file type. */ - static const FILE_TYPE FILE_AIF; /*!< AIFF file type. */ - static const FILE_TYPE FILE_MAT; /*!< Matlab MAT-file type. */ - - //! Default constructor. - FileWrite( void ); - - //! Overloaded constructor used to specify a file name, type, and data format with this object. - /*! - An StkError is thrown for invalid argument values or if an error occurs when initializing the output file. - */ - FileWrite( std::string fileName, unsigned int nChannels = 1, FILE_TYPE type = FILE_WAV, Stk::StkFormat format = STK_SINT16 ); - - //! Class destructor. - virtual ~FileWrite(); - - //! Create a file of the specified type and name and output samples to it in the given data format. - /*! - An StkError is thrown for invalid argument values or if an error occurs when initializing the output file. - */ - void open( std::string fileName, unsigned int nChannels = 1, - FileWrite::FILE_TYPE type = FILE_WAV, Stk::StkFormat format = STK_SINT16 ); - - //! If a file is open, write out samples in the queue and then close it. - void close( void ); - - //! Returns \e true if a file is currently open. - bool isOpen( void ); - - //! Write sample frames from the StkFrames object to the file. - /*! - An StkError will be thrown if the number of channels in the - StkFrames argument does not agree with the number of channels - specified when opening the file. - */ - void write( StkFrames& buffer ); - - protected: - - // Write STK RAW file header. - bool setRawFile( std::string fileName ); - - // Write WAV file header. - bool setWavFile( std::string fileName ); - - // Close WAV file, updating the header. - void closeWavFile( void ); - - // Write SND (AU) file header. - bool setSndFile( std::string fileName ); - - // Close SND file, updating the header. - void closeSndFile( void ); - - // Write AIFF file header. - bool setAifFile( std::string fileName ); - - // Close AIFF file, updating the header. - void closeAifFile( void ); - - // Write MAT-file header. - bool setMatFile( std::string fileName ); - - // Close MAT-file, updating the header. - void closeMatFile( void ); - - FILE *fd_; - FILE_TYPE fileType_; - StkFormat dataType_; - unsigned int channels_; - unsigned long frameCounter_; - bool byteswap_; - -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/FileWvIn.h b/source/StkUGens/stk-4.4.4/include/FileWvIn.h deleted file mode 100644 index 534bb2a849..0000000000 --- a/source/StkUGens/stk-4.4.4/include/FileWvIn.h +++ /dev/null @@ -1,196 +0,0 @@ -#ifndef STK_FILEWVIN_H -#define STK_FILEWVIN_H - -#include "WvIn.h" -#include "FileRead.h" - -namespace stk { - -/***************************************************/ -/*! \class FileWvIn - \brief STK audio file input class. - - This class inherits from WvIn. It provides a "tick-level" - interface to the FileRead class. It also provides variable-rate - playback functionality. Audio file support is provided by the - FileRead class. Linear interpolation is used for fractional read - rates. - - FileWvIn supports multi-channel data. It is important to - distinguish the tick() method that computes a single frame (and - returns only the specified sample of a multi-channel frame) from - the overloaded one that takes an StkFrames object for - multi-channel and/or multi-frame data. - - FileWvIn will either load the entire content of an audio file into - local memory or incrementally read file data from disk in chunks. - This behavior is controlled by the optional constructor arguments - \e chunkThreshold and \e chunkSize. File sizes greater than \e - chunkThreshold (in sample frames) will be read incrementally in - chunks of \e chunkSize each (also in sample frames). - - When the file end is reached, subsequent calls to the tick() - functions return zeros and isFinished() returns \e true. - - See the FileRead class for a description of the supported audio - file formats. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class FileWvIn : public WvIn -{ -public: - //! Default constructor. - FileWvIn( unsigned long chunkThreshold = 1000000, unsigned long chunkSize = 1024 ); - - //! Overloaded constructor for file input. - /*! - An StkError will be thrown if the file is not found, its format is - unknown, or a read error occurs. - */ - FileWvIn( std::string fileName, bool raw = false, bool doNormalize = true, - unsigned long chunkThreshold = 1000000, unsigned long chunkSize = 1024 ); - - //! Class destructor. - ~FileWvIn( void ); - - //! Open the specified file and load its data. - /*! - Data from a previously opened file will be overwritten by this - function. An StkError will be thrown if the file is not found, - its format is unknown, or a read error occurs. If the file data - is to be loaded incrementally from disk and normalization is - specified, a scaling will be applied with respect to fixed-point - limits. If the data format is floating-point, no scaling is - performed. - */ - virtual void openFile( std::string fileName, bool raw = false, bool doNormalize = true ); - - //! Close a file if one is open. - virtual void closeFile( void ); - - //! Clear outputs and reset time (file) pointer to zero. - virtual void reset( void ); - - //! Normalize data to a maximum of +-1.0. - /*! - This function has no effect when data is incrementally loaded - from disk. - */ - virtual void normalize( void ); - - //! Normalize data to a maximum of \e +-peak. - /*! - This function has no effect when data is incrementally loaded - from disk. - */ - virtual void normalize( StkFloat peak ); - - //! Return the file size in sample frames. - virtual unsigned long getSize( void ) const { return file_.fileSize(); }; - - //! Return the input file sample rate in Hz (not the data read rate). - /*! - WAV, SND, and AIF formatted files specify a sample rate in - their headers. STK RAW files have a sample rate of 22050 Hz - by definition. MAT-files are assumed to have a rate of 44100 Hz. - */ - virtual StkFloat getFileRate( void ) const { return data_.dataRate(); }; - - //! Query whether a file is open. - bool isOpen( void ) { return file_.isOpen(); }; - - //! Query whether reading is complete. - bool isFinished( void ) const { return finished_; }; - - //! Set the data read rate in samples. The rate can be negative. - /*! - If the rate value is negative, the data is read in reverse order. - */ - virtual void setRate( StkFloat rate ); - - //! Increment the read pointer by \e time samples. - /*! - Note that this function will not modify the interpolation flag status. - */ - virtual void addTime( StkFloat time ); - - //! Turn linear interpolation on/off. - /*! - Interpolation is automatically off when the read rate is - an integer value. If interpolation is turned off for a - fractional rate, the time index is truncated to an integer - value. - */ - void setInterpolate( bool doInterpolate ) { interpolate_ = doInterpolate; }; - - //! Return the specified channel value of the last computed frame. - /*! - If no file is loaded, the returned value is 0.0. The \c - channel argument must be less than the number of output channels, - which can be determined with the channelsOut() function (the first - channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. \sa - lastFrame() - */ - StkFloat lastOut( unsigned int channel = 0 ); - - //! Compute a sample frame and return the specified \c channel value. - /*! - For multi-channel files, use the lastFrame() function to get - all values from the computed frame. If no file data is loaded, - the returned value is 0.0. The \c channel argument must be less - than the number of channels in the file data (the first channel is - specified by 0). However, range checking is only performed if - _STK_DEBUG_ is defined during compilation, in which case an - out-of-range value will trigger an StkError exception. - */ - virtual StkFloat tick( unsigned int channel = 0 ); - - //! Fill the StkFrames argument with computed frames and return the same reference. - /*! - The number of channels in the StkFrames argument must equal - the number of channels in the file data. However, this is only - checked if _STK_DEBUG_ is defined during compilation, in which - case an incompatibility will trigger an StkError exception. If no - file data is loaded, the function does nothing (a warning will be - issued if _STK_DEBUG_ is defined during compilation). - */ - virtual StkFrames& tick( StkFrames& frames ); - -protected: - - void sampleRateChanged( StkFloat newRate, StkFloat oldRate ); - - FileRead file_; - bool finished_; - bool interpolate_; - bool normalizing_; - bool chunking_; - StkFloat time_; - StkFloat rate_; - unsigned long chunkThreshold_; - unsigned long chunkSize_; - long chunkPointer_; - -}; - -inline StkFloat FileWvIn :: lastOut( unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= data_.channels() ) { - oStream_ << "FileWvIn::lastOut(): channel argument and soundfile data are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - if ( finished_ ) return 0.0; - return lastFrame_[channel]; -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/FileWvOut.h b/source/StkUGens/stk-4.4.4/include/FileWvOut.h deleted file mode 100644 index cae31f6802..0000000000 --- a/source/StkUGens/stk-4.4.4/include/FileWvOut.h +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef STK_FILEWVOUT_H -#define STK_FILEWVOUT_H - -#include "WvOut.h" -#include "FileWrite.h" - -namespace stk { - -/***************************************************/ -/*! \class FileWvOut - \brief STK audio file output class. - - This class inherits from WvOut. It provides a "tick-level" - interface to the FileWrite class. - - FileWvOut writes samples to an audio file and supports - multi-channel data. It is important to distinguish the tick() - method that outputs a single sample to all channels in a sample - frame from the overloaded one that takes a reference to an - StkFrames object for multi-channel and/or multi-frame data. - - See the FileWrite class for a description of the supported audio - file formats. - - Currently, FileWvOut is non-interpolating and the output rate is - always Stk::sampleRate(). - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class FileWvOut : public WvOut -{ - public: - - //! Default constructor with optional output buffer size argument. - /*! - The output buffer size defines the number of frames that are - accumulated between writes to disk. - */ - FileWvOut( unsigned int bufferFrames = 1024 ); - - //! Overloaded constructor used to specify a file name, type, and data format with this object. - /*! - An StkError is thrown for invalid argument values or if an error occurs when initializing the output file. - */ - FileWvOut( std::string fileName, - unsigned int nChannels = 1, - FileWrite::FILE_TYPE type = FileWrite::FILE_WAV, - Stk::StkFormat format = STK_SINT16, - unsigned int bufferFrames = 1024 ); - - //! Class destructor. - virtual ~FileWvOut(); - - //! Open a new file with the specified parameters. - /*! - If a file was previously open, it will be closed. An StkError - will be thrown if any of the specified arguments are invalid or a - file error occurs during opening. - */ - void openFile( std::string fileName, - unsigned int nChannels, - FileWrite::FILE_TYPE type, - Stk::StkFormat format ); - - //! Close a file if one is open. - /*! - Any data remaining in the internal buffer will be written to - the file before closing. - */ - void closeFile( void ); - - //! Output a single sample to all channels in a sample frame. - /*! - An StkError is thrown if an output error occurs. - */ - void tick( const StkFloat sample ); - - //! Output the StkFrames data. - /*! - An StkError will be thrown if an output error occurs. An - StkError will also be thrown if _STK_DEBUG_ is defined during - compilation and there is an incompatability between the number of - channels in the FileWvOut object and that in the StkFrames object. - */ - void tick( const StkFrames& frames ); - - protected: - - void incrementFrame( void ); - - FileWrite file_; - unsigned int bufferFrames_; - unsigned int bufferIndex_; - unsigned int iData_; - -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/Filter.h b/source/StkUGens/stk-4.4.4/include/Filter.h deleted file mode 100644 index fb9889d420..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Filter.h +++ /dev/null @@ -1,124 +0,0 @@ -#ifndef STK_FILTER_H -#define STK_FILTER_H - -#include "Stk.h" -#include -#include - -namespace stk { - -/***************************************************/ -/*! \class Filter - \brief STK abstract filter class. - - This class provides limited common functionality for STK digital - filter subclasses. It is general enough to support both - monophonic and polyphonic input/output classes. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Filter : public Stk -{ -public: - //! Class constructor. - Filter( void ) { gain_ = 1.0; channelsIn_ = 1; lastFrame_.resize( 1, 1, 0.0 ); }; - - //! Return the number of input channels for the class. - unsigned int channelsIn( void ) const { return channelsIn_; }; - - //! Return the number of output channels for the class. - unsigned int channelsOut( void ) const { return lastFrame_.channels(); }; - - //! Clears all internal states of the filter. - virtual void clear( void ); - - //! Set the filter gain. - /*! - The gain is applied at the filter input and does not affect the - coefficient values. The default gain value is 1.0. - */ - void setGain( StkFloat gain ) { gain_ = gain; }; - - //! Return the current filter gain. - StkFloat getGain( void ) const { return gain_; }; - - //! Return the filter phase delay at the specified frequency. - /*! - Note that the phase delay calculation accounts for the filter - gain. The frequency value should be greater than 0.0 and less - than or equal to one-half the sample rate. - */ - StkFloat phaseDelay( StkFloat frequency ); - - //! Return an StkFrames reference to the last output sample frame. - const StkFrames& lastFrame( void ) const { return lastFrame_; }; - - //! Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs. - /*! - The StkFrames argument reference is returned. The \c channel - argument must be less than the number of channels in the - StkFrames argument (the first channel is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0; - -protected: - - StkFloat gain_; - unsigned int channelsIn_; - StkFrames lastFrame_; - - std::vector b_; - std::vector a_; - StkFrames outputs_; - StkFrames inputs_; - -}; - -inline void Filter :: clear( void ) -{ - unsigned int i; - for ( i=0; i 0.5 * Stk::sampleRate() ) { - oStream_ << "Filter::phaseDelay: argument (" << frequency << ") is out of range!"; - handleError( StkError::WARNING ); return 0.0; - } - - StkFloat omegaT = 2 * PI * frequency / Stk::sampleRate(); - StkFloat real = 0.0, imag = 0.0; - for ( unsigned int i=0; i &coefficients ); - - //! Class destructor. - ~Fir( void ); - - //! Set filter coefficients. - /*! - An StkError can be thrown if the coefficient vector size is - zero. The internal state of the filter is not cleared unless the - \e clearState flag is \c true. - */ - void setCoefficients( std::vector &coefficients, bool clearState = false ); - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Input one sample to the filter and return one output. - StkFloat tick( StkFloat input ); - - //! Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs. - /*! - The StkFrames argument reference is returned. The \c channel - argument must be less than the number of channels in the - StkFrames argument (the first channel is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the filter and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - -protected: - -}; - -inline StkFloat Fir :: tick( StkFloat input ) -{ - lastFrame_[0] = 0.0; - inputs_[0] = gain_ * input; - - for ( unsigned int i=b_.size()-1; i>0; i-- ) { - lastFrame_[0] += b_[i] * inputs_[i]; - inputs_[i] = inputs_[i-1]; - } - lastFrame_[0] += b_[0] * inputs_[0]; - - return lastFrame_[0]; -} - -inline StkFrames& Fir :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "Fir::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int i, hop = frames.channels(); - for ( unsigned int j=0; j0; i-- ) { - *samples += b_[i] * inputs_[i]; - inputs_[i] = inputs_[i-1]; - } - *samples += b_[0] * inputs_[0]; - } - - lastFrame_[0] = *(samples-hop); - return frames; -} - -inline StkFrames& Fir :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel ) -{ -#if defined(_STK_DEBUG_) - if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "Fir::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int i, iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int j=0; j0; i-- ) { - *oSamples += b_[i] * inputs_[i]; - inputs_[i] = inputs_[i-1]; - } - *oSamples += b_[0] * inputs_[0]; - } - - lastFrame_[0] = *(oSamples-oHop); - return iFrames; -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/Flute.h b/source/StkUGens/stk-4.4.4/include/Flute.h deleted file mode 100644 index 7299ef0908..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Flute.h +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef STK_FLUTE_H -#define STK_FLUTE_H - -#include "Instrmnt.h" -#include "JetTable.h" -#include "DelayL.h" -#include "OnePole.h" -#include "PoleZero.h" -#include "Noise.h" -#include "ADSR.h" -#include "SineWave.h" - -namespace stk { - -/***************************************************/ -/*! \class Flute - \brief STK flute physical model class. - - This class implements a simple flute - physical model, as discussed by Karjalainen, - Smith, Waryznyk, etc. The jet model uses - a polynomial, a la Cook. - - This is a digital waveguide model, making its - use possibly subject to patents held by Stanford - University, Yamaha, and others. - - Control Change Numbers: - - Jet Delay = 2 - - Noise Gain = 4 - - Vibrato Frequency = 11 - - Vibrato Gain = 1 - - Breath Pressure = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Flute : public Instrmnt -{ - public: - //! Class constructor, taking the lowest desired playing frequency. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - Flute( StkFloat lowestFrequency ); - - //! Class destructor. - ~Flute( void ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Set the reflection coefficient for the jet delay (-1.0 - 1.0). - void setJetReflection( StkFloat coefficient ) { jetReflection_ = coefficient; }; - - //! Set the reflection coefficient for the air column delay (-1.0 - 1.0). - void setEndReflection( StkFloat coefficient ) { endReflection_ = coefficient; }; - - //! Set the length of the jet delay in terms of a ratio of jet delay to air column delay lengths. - void setJetDelay( StkFloat aRatio ); - - //! Apply breath velocity to instrument with given amplitude and rate of increase. - void startBlowing( StkFloat amplitude, StkFloat rate ); - - //! Decrease breath velocity with given rate of decrease. - void stopBlowing( StkFloat rate ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Stop a note with the given amplitude (speed of decay). - void noteOff( StkFloat amplitude ); - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - void controlChange( int number, StkFloat value ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - DelayL jetDelay_; - DelayL boreDelay_; - JetTable jetTable_; - OnePole filter_; - PoleZero dcBlock_; - Noise noise_; - ADSR adsr_; - SineWave vibrato_; - - StkFloat lastFrequency_; - StkFloat maxPressure_; - StkFloat jetReflection_; - StkFloat endReflection_; - StkFloat noiseGain_; - StkFloat vibratoGain_; - StkFloat outputGain_; - StkFloat jetRatio_; - -}; - -inline StkFloat Flute :: tick( unsigned int ) -{ - StkFloat pressureDiff; - StkFloat breathPressure; - - // Calculate the breath pressure (envelope + noise + vibrato) - breathPressure = maxPressure_ * adsr_.tick(); - breathPressure += breathPressure * ( noiseGain_ * noise_.tick() + vibratoGain_ * vibrato_.tick() ); - - StkFloat temp = -filter_.tick( boreDelay_.lastOut() ); - temp = dcBlock_.tick( temp ); // Block DC on reflection. - - pressureDiff = breathPressure - (jetReflection_ * temp); - pressureDiff = jetDelay_.tick( pressureDiff ); - pressureDiff = jetTable_.tick( pressureDiff ) + (endReflection_ * temp); - lastFrame_[0] = (StkFloat) 0.3 * boreDelay_.tick( pressureDiff ); - - lastFrame_[0] *= outputGain_; - return lastFrame_[0]; -} - -inline StkFrames& Flute :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Flute::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i= 1.0. The \e frequency value should be between zero and - half the sample rate. - */ - void setResonance( StkFloat frequency, StkFloat radius ); - - //! Set both the current and target resonance parameters. - void setStates( StkFloat frequency, StkFloat radius, StkFloat gain = 1.0 ); - - //! Set target resonance parameters. - void setTargets( StkFloat frequency, StkFloat radius, StkFloat gain = 1.0 ); - - //! Set the sweep rate (between 0.0 - 1.0). - /*! - The formant parameters are varied in increments of the - sweep rate between their current and target values. - A sweep rate of 1.0 will produce an immediate change in - resonance parameters from their current values to the - target values. A sweep rate of 0.0 will produce no - change in resonance parameters. - */ - void setSweepRate( StkFloat rate ); - - //! Set the sweep rate in terms of a time value in seconds. - /*! - This method adjusts the sweep rate based on a - given time for the formant parameters to reach - their target values. - */ - void setSweepTime( StkFloat time ); - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Input one sample to the filter and return a reference to one output. - StkFloat tick( StkFloat input ); - - //! Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs. - /*! - The StkFrames argument reference is returned. The \c channel - argument must be less than the number of channels in the - StkFrames argument (the first channel is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the filter and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - - protected: - - virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate ); - - bool dirty_; - StkFloat frequency_; - StkFloat radius_; - StkFloat startFrequency_; - StkFloat startRadius_; - StkFloat startGain_; - StkFloat targetFrequency_; - StkFloat targetRadius_; - StkFloat targetGain_; - StkFloat deltaFrequency_; - StkFloat deltaRadius_; - StkFloat deltaGain_; - StkFloat sweepState_; - StkFloat sweepRate_; - -}; - -inline StkFloat FormSwep :: tick( StkFloat input ) -{ - if ( dirty_ ) { - sweepState_ += sweepRate_; - if ( sweepState_ >= 1.0 ) { - sweepState_ = 1.0; - dirty_ = false; - radius_ = targetRadius_; - frequency_ = targetFrequency_; - gain_ = targetGain_; - } - else { - radius_ = startRadius_ + (deltaRadius_ * sweepState_); - frequency_ = startFrequency_ + (deltaFrequency_ * sweepState_); - gain_ = startGain_ + (deltaGain_ * sweepState_); - } - this->setResonance( frequency_, radius_ ); - } - - inputs_[0] = gain_ * input; - lastFrame_[0] = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2]; - lastFrame_[0] -= a_[2] * outputs_[2] + a_[1] * outputs_[1]; - inputs_[2] = inputs_[1]; - inputs_[1] = inputs_[0]; - outputs_[2] = outputs_[1]; - outputs_[1] = lastFrame_[0]; - - return lastFrame_[0]; -} - -inline StkFrames& FormSwep :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "FormSwep::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "FormSwep::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i 1 ) { - oStream_ << "FreeVerb::lastOut(): channel argument must be less than 2!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - return lastFrame_[channel]; -} - -inline StkFloat FreeVerb::tick( StkFloat inputL, StkFloat inputR, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel > 1 ) { - oStream_ << "FreeVerb::tick(): channel argument must be less than 2!"; - handleError(StkError::FUNCTION_ARGUMENT); - } -#endif - - if ( !inputR ) { - inputR = inputL; - } - - StkFloat fInput = (inputL + inputR) * gain_; - StkFloat outL = 0.0; - StkFloat outR = 0.0; - - // Parallel LBCF filters - for ( int i = 0; i < nCombs; i++ ) { - // Left channel - //StkFloat yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPL_[i].tick(FreeVerb::undenormalize(combDelayL_[i].nextOut())))); - StkFloat yn = fInput + (roomSize_ * combLPL_[i].tick( combDelayL_[i].nextOut() ) ); - combDelayL_[i].tick(yn); - outL += yn; - - // Right channel - //yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPR_[i].tick(FreeVerb::undenormalize(combDelayR_[i].nextOut())))); - yn = fInput + (roomSize_ * combLPR_[i].tick( combDelayR_[i].nextOut() ) ); - combDelayR_[i].tick(yn); - outR += yn; - } - - // Series allpass filters - for ( int i = 0; i < nAllpasses; i++ ) { - // Left channel - //StkFloat vn_m = FreeVerb::undenormalize(allPassDelayL_[i].nextOut()); - StkFloat vn_m = allPassDelayL_[i].nextOut(); - StkFloat vn = outL + (g_ * vn_m); - allPassDelayL_[i].tick(vn); - - // calculate output - outL = -vn + (1.0 + g_)*vn_m; - - // Right channel - //vn_m = FreeVerb::undenormalize(allPassDelayR_[i].nextOut()); - vn_m = allPassDelayR_[i].nextOut(); - vn = outR + (g_ * vn_m); - allPassDelayR_[i].tick(vn); - - // calculate output - outR = -vn + (1.0 + g_)*vn_m; - } - - // Mix output - lastFrame_[0] = outL*wet1_ + outR*wet2_ + inputL*dry_; - lastFrame_[1] = outR*wet1_ + outL*wet2_ + inputR*dry_; - - /* - // Hard limiter ... there's not much else we can do at this point - if ( lastFrame_[0] >= 1.0 ) { - lastFrame_[0] = 0.9999; - } - if ( lastFrame_[0] <= -1.0 ) { - lastFrame_[0] = -0.9999; - } - if ( lastFrame_[1] >= 1.0 ) { - lastFrame_[1] = 0.9999; - } - if ( lastFrame_[1] <= -1.0 ) { - lastFrame_[1] = -0.9999; - } - */ - - return lastFrame_[channel]; -} - -} - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/Function.h b/source/StkUGens/stk-4.4.4/include/Function.h deleted file mode 100644 index c8e9b21d7c..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Function.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef STK_FUNCTION_H -#define STK_FUNCTION_H - -#include "Stk.h" - -namespace stk { - -/***************************************************/ -/*! \class Function - \brief STK abstract function parent class. - - This class provides common functionality for STK classes that - implement tables or other types of input to output function - mappings. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Function : public Stk -{ - public: - //! Class constructor. - Function( void ) { lastFrame_.resize( 1, 1, 0.0 ); }; - - //! Return the last computed output sample. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Take one sample input and compute one sample of output. - virtual StkFloat tick( StkFloat input ) = 0; - - protected: - - StkFrames lastFrame_; - -}; - -} // stk namespace - -#endif - diff --git a/source/StkUGens/stk-4.4.4/include/Generator.h b/source/StkUGens/stk-4.4.4/include/Generator.h deleted file mode 100644 index 0602119842..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Generator.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef STK_GENERATOR_H -#define STK_GENERATOR_H - -#include "Stk.h" - -namespace stk { - -/***************************************************/ -/*! \class Generator - \brief STK abstract unit generator parent class. - - This class provides limited common functionality for STK unit - generator sample-source subclasses. It is general enough to - support both monophonic and polyphonic output classes. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Generator : public Stk -{ - public: - - //! Class constructor. - Generator( void ) { lastFrame_.resize( 1, 1, 0.0 ); }; - - //! Return the number of output channels for the class. - unsigned int channelsOut( void ) const { return lastFrame_.channels(); }; - - //! Return an StkFrames reference to the last output sample frame. - const StkFrames& lastFrame( void ) const { return lastFrame_; }; - - //! Fill the StkFrames object with computed sample frames, starting at the specified channel. - /*! - The \c channel argument plus the number of output channels must - be less than the number of channels in the StkFrames argument (the - first channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. - */ - virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0; - - protected: - - StkFrames lastFrame_; -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/Granulate.h b/source/StkUGens/stk-4.4.4/include/Granulate.h deleted file mode 100644 index e406aa6e67..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Granulate.h +++ /dev/null @@ -1,209 +0,0 @@ -#ifndef STK_GRANULATE_H -#define STK_GRANULATE_H - -#include -#include "Generator.h" -#include "Envelope.h" -#include "Noise.h" - -namespace stk { - -/***************************************************/ -/*! \class Granulate - \brief STK granular synthesis class. - - This class implements a real-time granular synthesis algorithm - that operates on an input soundfile. Multi-channel files are - supported. Various functions are provided to allow control over - voice and grain parameters. - - The functionality of this class is based on the program MacPod by - Chris Rolfe and Damian Keller, though there are likely to be a - number of differences in the actual implementation. - - by Gary Scavone, 2005 - 2010. -*/ -/***************************************************/ - -class Granulate: public Generator -{ - public: - //! Default constructor. - Granulate( void ); - - //! Constructor taking input audio file and number of voices arguments. - Granulate( unsigned int nVoices, std::string fileName, bool typeRaw = false ); - - //! Class destructor. - ~Granulate( void ); - - //! Load a monophonic soundfile to be "granulated". - /*! - An StkError will be thrown if the file is not found, its format - is unknown or unsupported, or the file has more than one channel. - */ - void openFile( std::string fileName, bool typeRaw = false ); - - //! Reset the file pointer and all existing grains to the file start. - /*! - Multiple grains are offset from one another in time by grain - duration / nVoices. - */ - void reset( void ); - - //! Set the number of simultaneous grain "voices" to use. - /*! - Multiple grains are offset from one another in time by grain - duration / nVoices. For this reason, it is best to set the grain - parameters before calling this function (during initialization). - */ - void setVoices( unsigned int nVoices = 1 ); - - //! Set the stretch factor used for grain playback (1 - 1000). - /*! - Granular synthesis allows for time-stetching without affecting - the original pitch of a sound. A stretch factor of 4 will produce - a resulting sound of length 4 times the orignal sound. The - default parameter of 1 produces no stretching. - */ - void setStretch( unsigned int stretchFactor = 1 ); - - //! Set global grain parameters used to determine individual grain settings. - /*! - Each grain is defined as having a length of \e duration - milliseconds which must be greater than zero. For values of \e - rampPercent (0 - 100) greater than zero, a linear envelope will be - applied to each grain. If \e rampPercent = 100, the resultant - grain "window" is triangular while \e rampPercent = 50 produces a - trapezoidal window. In addition, each grain can have a time delay - of length \e delay and a grain pointer increment of length \e - offset, which can be negative, before the next ramp onset (in - milliseconds). The \e offset parameter controls grain pointer - jumps between enveloped grain segments, while the \e delay - parameter causes grain calculations to pause between grains. The - actual values calculated for each grain will be randomized by a - factor set using the setRandomFactor() function. - */ - void setGrainParameters( unsigned int duration = 30, unsigned int rampPercent = 50, - int offset = 0, unsigned int delay = 0 ); - - //! This factor is used when setting individual grain parameters (0.0 - 1.0). - /*! - This random factor is applied when all grain state durations - are calculated. If set to 0.0, no randomness occurs. When - randomness = 1.0, a grain segment of length \e duration will be - randomly augmented by up to +- \e duration seconds (i.e., a 30 - millisecond length will be augmented by an extra length of up to - +30 or -30 milliseconds). - */ - void setRandomFactor( StkFloat randomness = 0.1 ); - - //! Return the specified channel value of the last computed frame. - /*! - The \c channel argument must be less than the number of output - channels, which can be determined with the channelsOut() function - (the first channel is specified by 0). However, range checking is - only performed if _STK_DEBUG_ is defined during compilation, in - which case an out-of-range value will trigger an StkError - exception. \sa lastFrame() - */ - StkFloat lastOut( unsigned int channel = 0 ); - - //! Compute one sample frame and return the specified \c channel value. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill the StkFrames object with computed sample frames, starting at the specified channel. - /*! - The \c channel argument plus the number of output channels must - be less than the number of channels in the StkFrames argument (the - first channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - enum GrainState { - GRAIN_STOPPED, - GRAIN_FADEIN, - GRAIN_SUSTAIN, - GRAIN_FADEOUT - }; - - protected: - - struct Grain { - StkFloat eScaler; - StkFloat eRate; - unsigned long attackCount; - unsigned long sustainCount; - unsigned long decayCount; - unsigned long delayCount; - unsigned long counter; - //unsigned long pointer; - StkFloat pointer; - unsigned long startPointer; - unsigned int repeats; - GrainState state; - - // Default constructor. - Grain() - :eScaler(0.0), eRate(0.0), attackCount(0), sustainCount(0), decayCount(0), - delayCount(0), counter(0), pointer(0), startPointer(0), repeats(0), state(GRAIN_STOPPED) {} - }; - - void calculateGrain( Granulate::Grain& grain ); - - StkFrames data_; - std::vector grains_; - Noise noise; - //long gPointer_; - StkFloat gPointer_; - - // Global grain parameters. - unsigned int gDuration_; - unsigned int gRampPercent_; - unsigned int gDelay_; - unsigned int gStretch_; - unsigned int stretchCounter_; - int gOffset_; - StkFloat gRandomFactor_; - StkFloat gain_; - -}; - -inline StkFloat Granulate :: lastOut( unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= lastFrame_.channels() ) { - oStream_ << "Granulate::lastOut(): channel argument is invalid!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - return lastFrame_[channel]; -} - -inline StkFrames& Granulate :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Granulate::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - for ( unsigned int i=0; i strings_; - std::vector< int > stringState_; // 0 = off, 1 = decaying, 2 = on - std::vector< unsigned int > decayCounter_; - std::vector< unsigned int > filePointer_; - std::vector< StkFloat > pluckGains_; - - OnePole pickFilter_; - OnePole couplingFilter_; - StkFloat couplingGain_; - StkFrames excitation_; - StkFrames lastFrame_; -}; - -inline StkFloat Guitar :: tick( StkFloat input ) -{ - StkFloat temp, output = 0.0; - lastFrame_[0] /= strings_.size(); // evenly spread coupling across strings - for ( unsigned int i=0; i 0.2 ) - temp += pluckGains_[i] * excitation_[filePointer_[i]++]; - temp += couplingGain_ * couplingFilter_.tick( lastFrame_[0] ); // bridge coupling - output += strings_[i].tick( temp ); - // Check if string energy has decayed sufficiently to turn it off. - if ( stringState_[i] == 1 ) { - if ( fabs( strings_[i].lastOut() ) < 0.001 ) decayCounter_[i]++; - else decayCounter_[i] = 0; - if ( decayCounter_[i] > (unsigned int) floor( 0.1 * Stk::sampleRate() ) ) { - stringState_[i] = 0; - decayCounter_[i] = 0; - } - } - } - } - - return lastFrame_[0] = output; -} - -inline StkFrames& Guitar :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "Guitar::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "Guitar::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i2-- + -->1-->Out - \endcode - - Control Change Numbers: - - Total Modulator Index = 2 - - Modulator Crossfade = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class HevyMetl : public FM -{ - public: - //! Class constructor. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - HevyMetl( void ); - - //! Class destructor. - ~HevyMetl( void ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - -}; - -inline StkFloat HevyMetl :: tick( unsigned int ) -{ - register StkFloat temp; - - temp = vibrato_.tick() * modDepth_ * 0.2; - waves_[0]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[0]); - waves_[1]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[1]); - waves_[2]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[2]); - waves_[3]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[3]); - - temp = gains_[2] * adsr_[2]->tick() * waves_[2]->tick(); - waves_[1]->addPhaseOffset( temp ); - - waves_[3]->addPhaseOffset( twozero_.lastOut() ); - temp = (1.0 - (control2_ * 0.5)) * gains_[3] * adsr_[3]->tick() * waves_[3]->tick(); - twozero_.tick(temp); - - temp += control2_ * 0.5 * gains_[1] * adsr_[1]->tick() * waves_[1]->tick(); - temp = temp * control1_; - - waves_[0]->addPhaseOffset( temp ); - temp = gains_[0] * adsr_[0]->tick() * waves_[0]->tick(); - - lastFrame_[0] = temp * 0.5; - return lastFrame_[0]; -} - -inline StkFrames& HevyMetl :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "HevyMetl::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i &bCoefficients, std::vector &aCoefficients ); - - //! Class destructor. - ~Iir( void ); - - //! Set filter coefficients. - /*! - An StkError can be thrown if either of the coefficient vector - sizes is zero, or if the a[0] coefficient is equal to zero. If - a[0] is not equal to 1, the filter coeffcients are normalized by - a[0]. The internal state of the filter is not cleared unless the - \e clearState flag is \c true. - */ - void setCoefficients( std::vector &bCoefficients, std::vector &aCoefficients, bool clearState = false ); - - //! Set numerator coefficients. - /*! - An StkError can be thrown if coefficient vector is empty. Any - previously set denominator coefficients are left unaffected. Note - that the default constructor sets the single denominator - coefficient a[0] to 1.0. The internal state of the filter is not - cleared unless the \e clearState flag is \c true. - */ - void setNumerator( std::vector &bCoefficients, bool clearState = false ); - - //! Set denominator coefficients. - /*! - An StkError can be thrown if the coefficient vector is empty or - if the a[0] coefficient is equal to zero. Previously set - numerator coefficients are unaffected unless a[0] is not equal to - 1, in which case all coeffcients are normalized by a[0]. Note - that the default constructor sets the single numerator coefficient - b[0] to 1.0. The internal state of the filter is not cleared - unless the \e clearState flag is \c true. - */ - void setDenominator( std::vector &aCoefficients, bool clearState = false ); - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Input one sample to the filter and return one output. - StkFloat tick( StkFloat input ); - - //! Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs. - /*! - The StkFrames argument reference is returned. The \c channel - argument must be less than the number of channels in the - StkFrames argument (the first channel is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the filter and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - -protected: - -}; - -inline StkFloat Iir :: tick( StkFloat input ) -{ - unsigned int i; - - outputs_[0] = 0.0; - inputs_[0] = gain_ * input; - for ( i=b_.size()-1; i>0; i-- ) { - outputs_[0] += b_[i] * inputs_[i]; - inputs_[i] = inputs_[i-1]; - } - outputs_[0] += b_[0] * inputs_[0]; - - for ( i=a_.size()-1; i>0; i-- ) { - outputs_[0] += -a_[i] * outputs_[i]; - outputs_[i] = outputs_[i-1]; - } - - lastFrame_[0] = outputs_[0]; - return lastFrame_[0]; -} - -inline StkFrames& Iir :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "Iir::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int i, hop = frames.channels(); - for ( unsigned int j=0; j0; i-- ) { - outputs_[0] += b_[i] * inputs_[i]; - inputs_[i] = inputs_[i-1]; - } - outputs_[0] += b_[0] * inputs_[0]; - - for ( i=a_.size()-1; i>0; i-- ) { - outputs_[0] += -a_[i] * outputs_[i]; - outputs_[i] = outputs_[i-1]; - } - - *samples = outputs_[0]; - } - - lastFrame_[0] = *(samples-hop); - return frames; -} - -inline StkFrames& Iir :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel ) -{ -#if defined(_STK_DEBUG_) - if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "Iir::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int i, iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int j=0; j0; i-- ) { - outputs_[0] += b_[i] * inputs_[i]; - inputs_[i] = inputs_[i-1]; - } - outputs_[0] += b_[0] * inputs_[0]; - - for ( i=a_.size()-1; i>0; i-- ) { - outputs_[0] += -a_[i] * outputs_[i]; - outputs_[i] = outputs_[i-1]; - } - - *oSamples = outputs_[0]; - } - - lastFrame_[0] = *(oSamples-oHop); - return iFrames; -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/InetWvIn.h b/source/StkUGens/stk-4.4.4/include/InetWvIn.h deleted file mode 100644 index a3afa6193f..0000000000 --- a/source/StkUGens/stk-4.4.4/include/InetWvIn.h +++ /dev/null @@ -1,157 +0,0 @@ -#ifndef STK_INETWVIN_H -#define STK_INETWVIN_H - -#include "WvIn.h" -#include "TcpServer.h" -#include "UdpSocket.h" -#include "Thread.h" -#include "Mutex.h" - -namespace stk { - -/***************************************************/ -/*! \class InetWvIn - \brief STK internet streaming input class. - - This Wvin subclass reads streamed audio data over a network via a - TCP or UDP socket connection. The data is assumed in big-endian, - or network, byte order. Only a single socket connection is - supported. - - InetWvIn supports multi-channel data. It is important to - distinguish the tick() method that computes a single frame (and - returns only the specified sample of a multi-channel frame) from - the overloaded one that takes an StkFrames object for - multi-channel and/or multi-frame data. - - This class implements a socket server. When using the TCP - protocol, the server "listens" for a single remote connection - within the InetWvIn::start() function. For the UDP protocol, no - attempt is made to verify packet delivery or order. The default - data type for the incoming stream is signed 16-bit integers, - though any of the defined StkFormats are permissible. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -typedef struct { - bool finished; - void *object; -} ThreadInfo; - -class InetWvIn : public WvIn -{ -public: - //! Default constructor. - /*! - An StkError will be thrown if an error occurs while initializing the input thread. - */ - InetWvIn( unsigned long bufferFrames = 1024, unsigned int nBuffers = 8 ); - - //! Class destructor. - ~InetWvIn(); - - //! Wait for a (new) socket connection with specified protocol, port, data channels and format. - /*! - For the UDP protocol, this function will create a socket - instance and return. For the TCP protocol, this function will - block until a connection is established. An StkError will be - thrown if a socket error occurs or an invalid function argument is - provided. - */ - void listen( int port = 2006, unsigned int nChannels = 1, - Stk::StkFormat format = STK_SINT16, - Socket::ProtocolType protocol = Socket::PROTO_TCP ); - - //! Returns true is an input connection exists or input data remains in the queue. - /*! - This method will not return false after an input connection has been closed until - all buffered input data has been read out. - */ - bool isConnected( void ); - - //! Return the specified channel value of the last computed frame. - /*! - For multi-channel files, use the lastFrame() function to get - all values from the last computed frame. If no connection exists, - the returned value is 0.0. The \c channel argument must be less - than the number of channels in the data stream (the first channel - is specified by 0). However, range checking is only performed if - _STK_DEBUG_ is defined during compilation, in which case an - out-of-range value will trigger an StkError exception. - */ - StkFloat lastOut( unsigned int channel = 0 ); - - //! Compute a sample frame and return the specified \c channel value. - /*! - For multi-channel files, use the lastFrame() function to get - all values from the computed frame. If no connection exists, the - returned value is 0.0 (and a warning will be issued if _STK_DEBUG_ - is defined during compilation). The \c channel argument must be - less than the number of channels in the data stream (the first - channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. - */ - StkFloat tick( unsigned int channel = 0 ); - - //! Fill the StkFrames argument with computed frames and return the same reference. - /*! - The number of channels in the StkFrames argument must equal the - number of channels specified in the listen() function. However, - this is only checked if _STK_DEBUG_ is defined during compilation, - in which case an incompatibility will trigger an StkError - exception. If no connection exists, the function does - nothing (a warning will be issued if _STK_DEBUG_ is defined during - compilation). - */ - StkFrames& tick( StkFrames& frames ); - - // Called by the thread routine to receive data via the socket connection - // and fill the socket buffer. This is not intended for general use but - // must be public for access from the thread. - void receive( void ); - -protected: - - // Read buffered socket data into the data buffer ... will block if none available. - int readData( void ); - - Socket *soket_; - Thread thread_; - Mutex mutex_; - char *buffer_; - unsigned long bufferFrames_; - unsigned long bufferBytes_; - unsigned long bytesFilled_; - unsigned int nBuffers_; - unsigned long writePoint_; - unsigned long readPoint_; - long bufferCounter_; - int dataBytes_; - bool connected_; - int fd_; - ThreadInfo threadInfo_; - Stk::StkFormat dataType_; - -}; - -inline StkFloat InetWvIn :: lastOut( unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= data_.channels() ) { - oStream_ << "InetWvIn::lastOut(): channel argument and data stream are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - // If no connection and we've output all samples in the queue, return. - if ( !connected_ && bytesFilled_ == 0 && bufferCounter_ == 0 ) return 0.0; - - return lastFrame_[channel]; -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/InetWvOut.h b/source/StkUGens/stk-4.4.4/include/InetWvOut.h deleted file mode 100644 index e8ff59c059..0000000000 --- a/source/StkUGens/stk-4.4.4/include/InetWvOut.h +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef STK_INETWVOUT_H -#define STK_INETWVOUT_H - -#include "WvOut.h" -#include "Socket.h" - -namespace stk { - -/***************************************************/ -/*! \class InetWvOut - \brief STK internet streaming output class. - - This WvOut subclass can stream data over a network via a TCP or - UDP socket connection. The data is converted to big-endian byte - order, if necessary, before being transmitted. - - InetWvOut supports multi-channel data. It is important to - distinguish the tick() method that outputs a single sample to all - channels in a sample frame from the overloaded one that takes a - reference to an StkFrames object for multi-channel and/or - multi-frame data. - - This class connects to a socket server, the port and IP address of - which must be specified as constructor arguments. The default - data type is signed 16-bit integers but any of the defined - StkFormats are permissible. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class InetWvOut : public WvOut -{ - public: - //! Default constructor ... the socket is not instantiated. - InetWvOut( unsigned long packetFrames = 1024 ); - - //! Overloaded constructor which opens a network connection during instantiation. - /*! - An StkError is thrown if a socket error occurs or an invalid argument is specified. - */ - InetWvOut( int port, Socket::ProtocolType protocol = Socket::PROTO_TCP, - std::string hostname = "localhost", unsigned int nChannels = 1, Stk::StkFormat format = STK_SINT16, - unsigned long packetFrames = 1024 ); - - //! Class destructor. - ~InetWvOut(); - - //! Connect to the specified host and port and prepare to stream \e nChannels of data in the given data format. - /*! - An StkError is thrown if a socket error occurs or an invalid argument is specified. - */ - void connect( int port, Socket::ProtocolType protocol = Socket::PROTO_TCP, - std::string hostname = "localhost", unsigned int nChannels = 1, Stk::StkFormat format = STK_SINT16 ); - - //! If a connection is open, write out remaining samples in the queue and then disconnect. - void disconnect( void ); - - //! Output a single sample to all channels in a sample frame. - /*! - An StkError is thrown if an output error occurs. If a socket - connection does not exist, the function does nothing (a warning - will be issued if _STK_DEBUG_ is defined during compilation). - */ - void tick( const StkFloat sample ); - - //! Output the StkFrames data. - /*! - An StkError will be thrown if an output error occurs. An - StkError will also be thrown if _STK_DEBUG_ is defined during - compilation and there is an incompatability between the number of - channels in the FileWvOut object and that in the StkFrames object. - If a socket connection does not exist, the function does nothing - (a warning will be issued if _STK_DEBUG_ is defined during - compilation). - */ - void tick( const StkFrames& frames ); - - protected: - - void incrementFrame( void ); - - // Write a buffer of length frames via the socket connection. - void writeData( unsigned long frames ); - - char *buffer_; - Socket *soket_; - unsigned long bufferFrames_; - unsigned long bufferBytes_; - unsigned long bufferIndex_; - unsigned long iData_; - unsigned int dataBytes_; - Stk::StkFormat dataType_; -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/Instrmnt.h b/source/StkUGens/stk-4.4.4/include/Instrmnt.h deleted file mode 100644 index c05eeca362..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Instrmnt.h +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef STK_INSTRMNT_H -#define STK_INSTRMNT_H - -#include "Stk.h" - -namespace stk { - -/***************************************************/ -/*! \class Instrmnt - \brief STK instrument abstract base class. - - This class provides a common interface for - all STK instruments. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Instrmnt : public Stk -{ - public: - //! Class constructor. - Instrmnt( void ) { lastFrame_.resize( 1, 1, 0.0 ); }; - - //! Start a note with the given frequency and amplitude. - virtual void noteOn( StkFloat frequency, StkFloat amplitude ) = 0; - - //! Stop a note with the given amplitude (speed of decay). - virtual void noteOff( StkFloat amplitude ) = 0; - - //! Set instrument parameters for a particular frequency. - virtual void setFrequency( StkFloat frequency ); - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - virtual void controlChange(int number, StkFloat value); - - //! Return the number of output channels for the class. - unsigned int channelsOut( void ) const { return lastFrame_.channels(); }; - - //! Return an StkFrames reference to the last output sample frame. - const StkFrames& lastFrame( void ) const { return lastFrame_; }; - - //! Return the specified channel value of the last computed frame. - /*! - The \c channel argument must be less than the number of output - channels, which can be determined with the channelsOut() function - (the first channel is specified by 0). However, range checking is - only performed if _STK_DEBUG_ is defined during compilation, in - which case an out-of-range value will trigger an StkError - exception. \sa lastFrame() - */ - StkFloat lastOut( unsigned int channel = 0 ); - - //! Compute one sample frame and return the specified \c channel value. - /*! - For monophonic instruments, the \c channel argument is ignored. - */ - virtual StkFloat tick( unsigned int channel = 0 ) = 0; - - //! Fill the StkFrames object with computed sample frames, starting at the specified channel. - /*! - The \c channel argument plus the number of output channels must - be less than the number of channels in the StkFrames argument (the - first channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. - */ - virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0; - - protected: - - StkFrames lastFrame_; - -}; - -inline void Instrmnt :: setFrequency( StkFloat frequency ) -{ - oStream_ << "Instrmnt::setFrequency: virtual setFrequency function call!"; - handleError( StkError::WARNING ); -} - -inline StkFloat Instrmnt :: lastOut( unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= lastFrame_.channels() ) { - oStream_ << "Instrmnt::lastOut(): channel argument is invalid!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - return lastFrame_[channel]; -} - -inline void Instrmnt :: controlChange( int number, StkFloat value ) -{ - oStream_ << "Instrmnt::controlChange: virtual function call!"; - handleError( StkError::WARNING ); -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/JCRev.h b/source/StkUGens/stk-4.4.4/include/JCRev.h deleted file mode 100644 index a0b5d518c5..0000000000 --- a/source/StkUGens/stk-4.4.4/include/JCRev.h +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef STK_JCREV_H -#define STK_JCREV_H - -#include "Effect.h" -#include "Delay.h" -#include "OnePole.h" - -namespace stk { - -/***************************************************/ -/*! \class JCRev - \brief John Chowning's reverberator class. - - This class takes a monophonic input signal and - produces a stereo output signal. It is derived - from the CLM JCRev function, which is based on - the use of networks of simple allpass and comb - delay filters. This class implements three - series allpass units, followed by four parallel - comb filters, and two decorrelation delay lines - in parallel at the output. - - Although not in the original JC reverberator, - one-pole lowpass filters have been added inside - the feedback comb filters. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class JCRev : public Effect -{ - public: - //! Class constructor taking a T60 decay time argument (one second default value). - JCRev( StkFloat T60 = 1.0 ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set the reverberation T60 decay time. - void setT60( StkFloat T60 ); - - //! Return the specified channel value of the last computed stereo frame. - /*! - Use the lastFrame() function to get both values of the last - computed stereo frame. The \c channel argument must be 0 or 1 - (the first channel is specified by 0). However, range checking is - only performed if _STK_DEBUG_ is defined during compilation, in - which case an out-of-range value will trigger an StkError - exception. - */ - StkFloat lastOut( unsigned int channel = 0 ); - - //! Input one sample to the effect and return the specified \c channel value of the computed stereo frame. - /*! - Use the lastFrame() function to get both values of the computed - stereo output frame. The \c channel argument must be 0 or 1 (the - first channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. - */ - StkFloat tick( StkFloat input, unsigned int channel = 0 ); - - //! Take a channel of the StkFrames object as inputs to the effect and replace with stereo outputs. - /*! - The StkFrames argument reference is returned. The stereo - outputs are written to the StkFrames argument starting at the - specified \c channel. Therefore, the \c channel argument must be - less than ( channels() - 1 ) of the StkFrames argument (the first - channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the effect and write stereo outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. The \c iChannel - argument must be less than the number of channels in the \c - iFrames argument (the first channel is specified by 0). The \c - oChannel argument must be less than ( channels() - 1 ) of the \c - oFrames argument. However, range checking is only performed if - _STK_DEBUG_ is defined during compilation, in which case an - out-of-range value will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - - protected: - - Delay allpassDelays_[3]; - Delay combDelays_[4]; - OnePole combFilters_[4]; - Delay outLeftDelay_; - Delay outRightDelay_; - StkFloat allpassCoefficient_; - StkFloat combCoefficient_[4]; - -}; - -inline StkFloat JCRev :: lastOut( unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel > 1 ) { - oStream_ << "JCRev::lastOut(): channel argument must be less than 2!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - return lastFrame_[channel]; -} - -inline StkFloat JCRev :: tick( StkFloat input, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel > 1 ) { - oStream_ << "JCRev::tick(): channel argument must be less than 2!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat temp, temp0, temp1, temp2, temp3, temp4, temp5, temp6; - StkFloat filtout; - - temp = allpassDelays_[0].lastOut(); - temp0 = allpassCoefficient_ * temp; - temp0 += input; - allpassDelays_[0].tick(temp0); - temp0 = -(allpassCoefficient_ * temp0) + temp; - - temp = allpassDelays_[1].lastOut(); - temp1 = allpassCoefficient_ * temp; - temp1 += temp0; - allpassDelays_[1].tick(temp1); - temp1 = -(allpassCoefficient_ * temp1) + temp; - - temp = allpassDelays_[2].lastOut(); - temp2 = allpassCoefficient_ * temp; - temp2 += temp1; - allpassDelays_[2].tick(temp2); - temp2 = -(allpassCoefficient_ * temp2) + temp; - - temp3 = temp2 + ( combFilters_[0].tick( combCoefficient_[0] * combDelays_[0].lastOut() ) ); - temp4 = temp2 + ( combFilters_[1].tick( combCoefficient_[1] * combDelays_[1].lastOut() ) ); - temp5 = temp2 + ( combFilters_[2].tick( combCoefficient_[2] * combDelays_[2].lastOut() ) ); - temp6 = temp2 + ( combFilters_[3].tick( combCoefficient_[3] * combDelays_[3].lastOut() ) ); - - combDelays_[0].tick(temp3); - combDelays_[1].tick(temp4); - combDelays_[2].tick(temp5); - combDelays_[3].tick(temp6); - - filtout = temp3 + temp4 + temp5 + temp6; - - lastFrame_[0] = effectMix_ * (outLeftDelay_.tick(filtout)); - lastFrame_[1] = effectMix_ * (outRightDelay_.tick(filtout)); - temp = (1.0 - effectMix_) * input; - lastFrame_[0] += temp; - lastFrame_[1] += temp; - - return 0.7 * lastFrame_[channel]; -} - -} // stk namespace - -#endif - diff --git a/source/StkUGens/stk-4.4.4/include/JetTable.h b/source/StkUGens/stk-4.4.4/include/JetTable.h deleted file mode 100644 index 36d494c44d..0000000000 --- a/source/StkUGens/stk-4.4.4/include/JetTable.h +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef STK_JETTABL_H -#define STK_JETTABL_H - -#include "Function.h" - -namespace stk { - -/***************************************************/ -/*! \class JetTable - \brief STK jet table class. - - This class implements a flue jet non-linear - function, computed by a polynomial calculation. - Contrary to the name, this is not a "table". - - Consult Fletcher and Rossing, Karjalainen, - Cook, and others for more information. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class JetTable : public Function -{ -public: - - //! Take one sample input and map to one sample of output. - StkFloat tick( StkFloat input ); - - //! Take a channel of the StkFrames object as inputs to the table and replace with corresponding outputs. - /*! - The StkFrames argument reference is returned. The \c channel - argument must be less than the number of channels in the - StkFrames argument (the first channel is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the table and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - -}; - -inline StkFloat JetTable :: tick( StkFloat input ) -{ - // Perform "table lookup" using a polynomial - // calculation (x^3 - x), which approximates - // the jet sigmoid behavior. - lastFrame_[0] = input * (input * input - 1.0); - - // Saturate at +/- 1.0. - if ( lastFrame_[0] > 1.0 ) lastFrame_[0] = 1.0; - if ( lastFrame_[0] < -1.0 ) lastFrame_[0] = -1.0; - return lastFrame_[0]; -} - -inline StkFrames& JetTable :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "JetTable::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i 1.0) *samples = 1.0; - if ( *samples < -1.0) *samples = -1.0; - } - - lastFrame_[0] = *(samples-hop); - return frames; -} - -inline StkFrames& JetTable :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel ) -{ -#if defined(_STK_DEBUG_) - if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "JetTable::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i 1.0) *oSamples = 1.0; - if ( *oSamples < -1.0) *oSamples = -1.0; - } - - lastFrame_[0] = *(oSamples-oHop); - return iFrames; -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/LentPitShift.h b/source/StkUGens/stk-4.4.4/include/LentPitShift.h deleted file mode 100644 index 820a7796a7..0000000000 --- a/source/StkUGens/stk-4.4.4/include/LentPitShift.h +++ /dev/null @@ -1,263 +0,0 @@ -#ifndef STK_LENTPITSHIFT_H -#define STK_LENTPITSHIFT_H - -#include "Effect.h" -#include "Delay.h" - -namespace stk { - -/***************************************************/ -/*! \class LentPitShift - \brief Pitch shifter effect class based on the Lent algorithm. - - This class implements a pitch shifter using pitch - tracking and sample windowing and shifting. - - by Francois Germain, 2009. -*/ -/***************************************************/ - -class LentPitShift : public Effect -{ - public: - //! Class constructor. - LentPitShift( StkFloat periodRatio = 1.0, int tMax = RT_BUFFER_SIZE ); - - ~LentPitShift( void ) { - delete window; - delete dt; - delete dpt; - delete cumDt; - } - - //! Reset and clear all internal state. - void clear( void ); - - //! Set the pitch shift factor (1.0 produces no shift). - void setShift( StkFloat shift ); - - //! Input one sample to the filter and return one output. - StkFloat tick( StkFloat input ); - - //! Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs. - /*! - The StkFrames argument reference is returned. The \c channel - argument must be less than the number of channels in the - StkFrames argument (the first channel is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the filter and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - - protected: - - //! Apply the effect on the input samples and store it. - /*! - The samples stored in the input frame vector are processed - and the delayed result are stored in the output frame vector. - */ - void process( ); - - // Frame storage vectors for process function - StkFrames inputFrames; - StkFrames outputFrames; - int ptrFrames; // writing pointer - - // Input delay line - Delay inputLine_; - int inputPtr; - - // Output delay line - Delay outputLine_; - double outputPtr; - - // Pitch tracker variables - unsigned long tMax_; // Maximal period measurable by the pitch tracker. - // It is also the size of the window used by the pitch tracker and - // the size of the frames that can be computed by the tick function - - StkFloat threshold_; // Threshold of detection for the pitch tracker - unsigned long lastPeriod_; // Result of the last pitch tracking loop - StkFloat* dt; // Array containing the euclidian distance coefficients - StkFloat* cumDt; // Array containing the cumulative sum of the coefficients in dt - StkFloat* dpt; // Array containing the pitch tracking function coefficients - - // Pitch shifter variables - StkFloat env[2]; // Coefficients for the linear interpolation when modifying the output samples - StkFloat* window; // Hamming window used for the input portion extraction - double periodRatio_; // Ratio of modification of the signal period - StkFrames zeroFrame; // Frame of tMax_ zero samples - - - // Coefficient delay line that could be used for a dynamic calculation of the pitch - //Delay* coeffLine_; - -}; - -inline void LentPitShift::process() -{ - StkFloat x_t; // input coefficient - StkFloat x_t_T; // previous input coefficient at T samples - StkFloat coeff; // new coefficient for the difference function - - int alternativePitch = tMax_; // Global minimum storage - lastPeriod_ = tMax_+1; // Storage of the lowest local minimum under the threshold - - // Loop variables - unsigned long delay_; - unsigned int n; - - // Initialization of the dt coefficients. Since the - // frames are of tMax_ length, there is no overlapping - // between the successive windows where pitch tracking - // is performed. - for ( delay_=1; delay_<=tMax_; delay_++ ) - dt[delay_] = 0.; - - // Calculation of the dt coefficients and update of the input delay line. - for ( n=0; n 0 ) { - // Check if the minimum is under the threshold - if ( dpt[delay_-1] < threshold_ ){ - lastPeriod_ = delay_-1; - // If a minimum is found, we can stop the loop - break; - } - else if ( dpt[alternativePitch] > dpt[delay_-1] ) - // Otherwise we store it if it is the current global minimum - alternativePitch = delay_-1; - } - } - - // Test for the last period length. - if ( dpt[delay_]-dpt[delay_-1] < 0 ) { - if ( dpt[delay_] < threshold_ ) - lastPeriod_ = delay_; - else if ( dpt[alternativePitch] > dpt[delay_] ) - alternativePitch = delay_; - } - - if ( lastPeriod_ == tMax_+1 ) - // No period has been under the threshold so we used the global minimum - lastPeriod_ = alternativePitch; - - // We put the new zero output coefficients in the output delay line and - // we get the previous calculated coefficients - outputLine_.tick( zeroFrame, outputFrames ); - - // Initialization of the Hamming window used in the algorithm - for ( int n=-(int)lastPeriod_; n<(int)lastPeriod_; n++ ) - window[n+lastPeriod_] = (1 + cos(PI*n/lastPeriod_)) / 2 ; - - int M; // Index of reading in the input delay line - int N; // Index of writing in the output delay line - double sample; // Temporary storage for the new coefficient - - // We loop for all the frames of length lastPeriod_ presents between inputPtr and tMax_ - for ( ; inputPtr<(int)(tMax_-lastPeriod_); inputPtr+=lastPeriod_ ) { - // Test for the decision of compression/expansion - while ( outputPtr < inputPtr ) { - // Coefficients for the linear interpolation - env[1] = fmod( outputPtr + tMax_, 1.0 ); - env[0] = 1.0 - env[1]; - M = tMax_ - inputPtr + lastPeriod_ - 1; // New reading pointer - N = 2*tMax_ - (unsigned long)floor(outputPtr + tMax_) + lastPeriod_ - 1; // New writing pointer - for ( unsigned int j=0; j<2*lastPeriod_; j++,M--,N-- ) { - sample = inputLine_.tapOut(M) * window[j] / 2.; - // Linear interpolation - outputLine_.addTo(env[0] * sample, N); - outputLine_.addTo(env[1] * sample, N-1); - } - outputPtr = outputPtr + lastPeriod_ * periodRatio_; // new output pointer - } - } - // Shifting of the pointers waiting for the new frame of length tMax_. - outputPtr -= tMax_; - inputPtr -= tMax_; -} - - -inline StkFloat LentPitShift :: tick( StkFloat input ) -{ - StkFloat sample; - - inputFrames[ptrFrames] = input; - - sample = outputFrames[ptrFrames++]; - - // Check for end condition - if ( ptrFrames == (int) inputFrames.size() ){ - ptrFrames = 0; - process( ); - } - - return sample; -} - -inline StkFrames& LentPitShift :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "LentPitShift::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "LentPitShift::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i frames.channels() - nChannels ) { - oStream_ << "Mandolin::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i frames.channels() - nChannels ) { - oStream_ << "Mesh2D::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i - -#if defined(__STK_REALTIME__) - -#include "Mutex.h" -#include "Thread.h" -#include "TcpServer.h" -#include "RtMidi.h" - -#endif // __STK_REALTIME__ - -namespace stk { - -/***************************************************/ -/*! \class Messager - \brief STK input control message parser. - - This class reads and parses control messages from a variety of - sources, such as a scorefile, MIDI port, socket connection, or - stdin. MIDI messages are retrieved using the RtMidi class. All - other input sources (scorefile, socket, or stdin) are assumed to - provide SKINI formatted messages. This class can be compiled with - generic, non-realtime support, in which case only scorefile - reading is possible. - - The various \e realtime message acquisition mechanisms (from MIDI, - socket, or stdin) take place asynchronously, filling the message - queue. A call to popMessage() will pop the next available control - message from the queue and return it via the referenced Message - structure. When a \e non-realtime scorefile is set, it is not - possible to start reading realtime input messages (from MIDI, - socket, or stdin). Likewise, it is not possible to read from a - scorefile when a realtime input mechanism is running. - - When MIDI input is started, input is also automatically read from - stdin. This allows for program termination via the terminal - window. An __SK_Exit_ message is pushed onto the stack whenever - an "exit" or "Exit" message is received from stdin or when all - socket connections close and no stdin thread is running. - - This class is primarily for use in STK example programs but it is - generic enough to work in many other contexts. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -const int DEFAULT_QUEUE_LIMIT = 200; - -class Messager : public Stk -{ - public: - - // This structure is used to share data among the various realtime - // messager threads. It must be public. - struct MessagerData { - Skini skini; - std::queue queue; - unsigned int queueLimit; - int sources; - -#if defined(__STK_REALTIME__) - Mutex mutex; - RtMidiIn *midi; - TcpServer *socket; - std::vector fd; - fd_set mask; -#endif - - // Default constructor. - MessagerData() - :queueLimit(0), sources(0) {} - }; - - //! Default constructor. - Messager(); - - //! Class destructor. - ~Messager(); - - //! Pop the next message from the queue and write it to the referenced message structure. - /*! - Invalid messages (or an empty queue) are indicated by type - values of zero, in which case all other message structure values - are undefined. The user MUST verify the returned message type is - valid before reading other message values. - */ - void popMessage( Skini::Message& message ); - - //! Push the referenced message onto the message stack. - void pushMessage( Skini::Message& message ); - - //! Specify a SKINI formatted scorefile from which messages should be read. - /*! - A return value of \c true indicates the call was successful. A - return value of \c false can occur if the file is not found, - cannot be opened, another file is currently still open, or if a - realtime input mechanism is running. Scorefile input is - considered to be a non-realtime control mechanism that cannot run - concurrently with realtime input. - */ - bool setScoreFile( const char* filename ); - -#if defined(__STK_REALTIME__) - //! Initiate the "realtime" retreival from stdin of control messages into the queue. - /*! - This function initiates a thread for asynchronous retrieval of - SKINI formatted messages from stdin. A return value of \c true - indicates the call was successful. A return value of \c false can - occur if a scorefile is being read, a stdin thread is already - running, or a thread error occurs during startup. Stdin input is - considered to be a realtime control mechanism that cannot run - concurrently with non-realtime scorefile input. - */ - bool startStdInput(); - - //! Start a socket server, accept connections, and read "realtime" control messages into the message queue. - /*! - This function creates a socket server on the optional port - (default = 2001) and starts a thread for asynchronous retrieval of - SKINI formatted messages from socket connections. A return value - of \c true indicates the call was successful. A return value of - \c false can occur if a scorefile is being read, a socket thread - is already running, or an error occurs during the socket server - or thread initialization stages. Socket input is considered to be - a realtime control mechanism that cannot run concurrently with - non-realtime scorefile input. - */ - bool startSocketInput( int port=2001 ); - - //! Start MIDI input, with optional device and port identifiers. - /*! - This function creates an RtMidiIn instance for MIDI input. The - RtMidiIn class invokes a local callback function to read incoming - messages into the queue. If \c port = -1, RtMidiIn will open a - virtual port to which other software applications can connect (OS - X and Linux only). A return value of \c true indicates the call - was successful. A return value of \c false can occur if a - scorefile is being read, MIDI input is already running, or an - error occurs during RtMidiIn construction. Midi input is - considered to be a realtime control mechanism that cannot run - concurrently with non-realtime scorefile input. - */ - bool startMidiInput( int port=0 ); - -#endif - - protected: - - MessagerData data_; - -#if defined(__STK_REALTIME__) - Thread stdinThread_; - Thread socketThread_; -#endif - -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/MidiFileIn.h b/source/StkUGens/stk-4.4.4/include/MidiFileIn.h deleted file mode 100644 index cb583fe60d..0000000000 --- a/source/StkUGens/stk-4.4.4/include/MidiFileIn.h +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef STK_MIDIFILEIN_H -#define STK_MIDIFILEIN_H - -#include "Stk.h" -#include -#include -#include -#include - -namespace stk { - -/**********************************************************************/ -/*! \class MidiFileIn - \brief A standard MIDI file reading/parsing class. - - This class can be used to read events from a standard MIDI file. - Event bytes are copied to a C++ vector and must be subsequently - interpreted by the user. The function getNextMidiEvent() skips - meta and sysex events, returning only MIDI channel messages. - Event delta-times are returned in the form of "ticks" and a - function is provided to determine the current "seconds per tick". - Tempo changes are internally tracked by the class and reflected in - the values returned by the function getTickSeconds(). - - by Gary P. Scavone, 2003 - 2010. -*/ -/**********************************************************************/ - -class MidiFileIn : public Stk -{ - public: - //! Default constructor. - /*! - If an error occurs while opening or parsing the file header, an - StkError exception will be thrown. - */ - MidiFileIn( std::string fileName ); - - //! Class destructor. - ~MidiFileIn(); - - //! Return the MIDI file format (0, 1, or 2). - int getFileFormat() const { return format_; }; - - //! Return the number of tracks in the MIDI file. - unsigned int getNumberOfTracks() const { return nTracks_; }; - - //! Return the MIDI file division value from the file header. - /*! - Note that this value must be "parsed" in accordance with the - MIDI File Specification. In particular, if the MSB is set, the - file uses time-code representations for delta-time values. - */ - int getDivision() const { return division_; }; - - //! Move the specified track event reader to the beginning of its track. - /*! - The relevant track tempo value is reset as well. If an invalid - track number is specified, an StkError exception will be thrown. - */ - void rewindTrack( unsigned int track = 0 ); - - //! Get the current value, in seconds, of delta-time ticks for the specified track. - /*! - This value can change as events are read (via "Set Tempo" - Meta-Events). Therefore, one should call this function after - every call to getNextEvent() or getNextMidiEvent(). If an - invalid track number is specified, an StkError exception will be - thrown. - */ - double getTickSeconds( unsigned int track = 0 ); - - //! Fill the user-provided vector with the next event in the specified track and return the event delta-time in ticks. - /*! - MIDI File events consist of a delta time and a sequence of event - bytes. This function returns the delta-time value and writes - the subsequent event bytes directly to the event vector. The - user must parse the event bytes in accordance with the MIDI File - Specification. All returned MIDI channel events are complete - ... a status byte is provided even when running status is used - in the file. If the track has reached its end, no bytes will be - written and the event vector size will be zero. If an invalid - track number is specified or an error occurs while reading the - file, an StkError exception will be thrown. - */ - unsigned long getNextEvent( std::vector *event, unsigned int track = 0 ); - - //! Fill the user-provided vector with the next MIDI channel event in the specified track and return the event delta time in ticks. - /*! - All returned MIDI events are complete ... a status byte is - provided even when running status is used in the file. Meta and - sysex events in the track are skipped though "Set Tempo" events - are properly parsed for use by the getTickSeconds() function. - If the track has reached its end, no bytes will be written and - the event vector size will be zero. If an invalid track number - is specified or an error occurs while reading the file, an - StkError exception will be thrown. - */ - unsigned long getNextMidiEvent( std::vector *midiEvent, unsigned int track = 0 ); - - protected: - - // This protected class function is used for reading variable-length - // MIDI file values. It is assumed that this function is called with - // the file read pointer positioned at the start of a - // variable-length value. The function returns true if the value is - // successfully parsed. Otherwise, it returns false. - bool readVariableLength( unsigned long *value ); - - std::ifstream file_; - unsigned int nTracks_; - int format_; - int division_; - bool usingTimeCode_; - std::vector tickSeconds_; - std::vector trackPointers_; - std::vector trackOffsets_; - std::vector trackLengths_; - std::vector trackStatus_; - - // This structure and the following variables are used to save and - // keep track of a format 1 tempo map (and the initial tickSeconds - // parameter for formats 0 and 2). - struct TempoChange { - unsigned long count; - double tickSeconds; - }; - std::vector tempoEvents_; - std::vector trackCounters_; - std::vector trackTempoIndex_; -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/Modal.h b/source/StkUGens/stk-4.4.4/include/Modal.h deleted file mode 100644 index e650db85dc..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Modal.h +++ /dev/null @@ -1,154 +0,0 @@ -#ifndef STK_MODAL_H -#define STK_MODAL_H - -#include "Instrmnt.h" -#include "Envelope.h" -#include "FileLoop.h" -#include "SineWave.h" -#include "BiQuad.h" -#include "OnePole.h" - -namespace stk { - -/***************************************************/ -/*! \class Modal - \brief STK resonance model abstract base class. - - This class contains an excitation wavetable, - an envelope, an oscillator, and N resonances - (non-sweeping BiQuad filters), where N is set - during instantiation. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Modal : public Instrmnt -{ -public: - //! Class constructor, taking the desired number of modes to create. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - Modal( unsigned int modes = 4 ); - - //! Class destructor. - virtual ~Modal( void ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set instrument parameters for a particular frequency. - virtual void setFrequency( StkFloat frequency ); - - //! Set the ratio and radius for a specified mode filter. - void setRatioAndRadius( unsigned int modeIndex, StkFloat ratio, StkFloat radius ); - - //! Set the master gain. - void setMasterGain( StkFloat aGain ) { masterGain_ = aGain; }; - - //! Set the direct gain. - void setDirectGain( StkFloat aGain ) { directGain_ = aGain; }; - - //! Set the gain for a specified mode filter. - void setModeGain( unsigned int modeIndex, StkFloat gain ); - - //! Initiate a strike with the given amplitude (0.0 - 1.0). - virtual void strike( StkFloat amplitude ); - - //! Damp modes with a given decay factor (0.0 - 1.0). - void damp( StkFloat amplitude ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Stop a note with the given amplitude (speed of decay). - void noteOff( StkFloat amplitude ); - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - virtual void controlChange( int number, StkFloat value ) = 0; - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - -protected: - - Envelope envelope_; - FileWvIn *wave_; - BiQuad **filters_; - OnePole onepole_; - SineWave vibrato_; - - unsigned int nModes_; - std::vector ratios_; - std::vector radii_; - - StkFloat vibratoGain_; - StkFloat masterGain_; - StkFloat directGain_; - StkFloat stickHardness_; - StkFloat strikePosition_; - StkFloat baseFrequency_; -}; - -inline StkFloat Modal :: tick( unsigned int ) -{ - StkFloat temp = masterGain_ * onepole_.tick( wave_->tick() * envelope_.tick() ); - - StkFloat temp2 = 0.0; - for ( unsigned int i=0; itick(temp); - - temp2 -= temp2 * directGain_; - temp2 += directGain_ * temp; - - if ( vibratoGain_ != 0.0 ) { - // Calculate AM and apply to master out - temp = 1.0 + ( vibrato_.tick() * vibratoGain_ ); - temp2 = temp * temp2; - } - - lastFrame_[0] = temp2; - return lastFrame_[0]; -} - -inline StkFrames& Modal :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Modal::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i= noiseRate_ ) { - noise_.tick(); - noiseCounter_ = 0; - } - lastFrame_[0] += filter_.tick( noise_.lastOut() ); - return lastFrame_[0]; -} - -inline StkFrames& Modulate :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "Modulate::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; isetFrequency( mSpeed ); }; - - //! Set the modulation (vibrato) depth. - void setModulationDepth( StkFloat mDepth ) { modDepth_ = mDepth * 0.5; }; - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - void controlChange( int number, StkFloat value ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - FormSwep filters_[2]; - StkFloat modDepth_; - StkFloat filterQ_; - StkFloat filterRate_; - -}; - -inline StkFloat Moog :: tick( unsigned int ) -{ - StkFloat temp; - - if ( modDepth_ != 0.0 ) { - temp = loops_[1]->tick() * modDepth_; - loops_[0]->setFrequency( baseFrequency_ * (1.0 + temp) ); - } - - temp = attackGain_ * attacks_[0]->tick(); - temp += loopGain_ * loops_[0]->tick(); - temp = filter_.tick( temp ); - temp *= adsr_.tick(); - temp = filters_[0].tick( temp ); - lastFrame_[0] = filters_[1].tick( temp ); - return lastFrame_[0] * 6.0; -} - -inline StkFrames& Moog :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Moog::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i - typedef pthread_mutex_t MUTEX; - typedef pthread_cond_t CONDITION; - -#elif defined(__OS_WINDOWS__) - - #include - #include - typedef CRITICAL_SECTION MUTEX; - typedef HANDLE CONDITION; - -#endif - -namespace stk { - -/***************************************************/ -/*! \class Mutex - \brief STK mutex class. - - This class provides a uniform interface for - cross-platform mutex use. On Linux and IRIX - systems, the pthread library is used. Under - Windows, critical sections are used. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Mutex : public Stk -{ - public: - //! Default constructor. - Mutex(); - - //! Class destructor. - ~Mutex(); - - //! Lock the mutex. - void lock(void); - - //! Unlock the mutex. - void unlock(void); - - //! Wait indefinitely on the mutex condition variable. - /*! - The mutex must be locked before calling this function, and then - subsequently unlocked after this function returns. - */ - void wait(void); - - //! Signal the condition variable. - /*! - The mutex must be locked before calling this function, and then - subsequently unlocked after this function returns. - */ - void signal(void); - - protected: - - MUTEX mutex_; - CONDITION condition_; - -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/NRev.h b/source/StkUGens/stk-4.4.4/include/NRev.h deleted file mode 100644 index 8029bd8847..0000000000 --- a/source/StkUGens/stk-4.4.4/include/NRev.h +++ /dev/null @@ -1,160 +0,0 @@ -#ifndef STK_NREV_H -#define STK_NREV_H - -#include "Effect.h" -#include "Delay.h" - -namespace stk { - -/***************************************************/ -/*! \class NRev - \brief CCRMA's NRev reverberator class. - - This class takes a monophonic input signal and produces a stereo - output signal. It is derived from the CLM NRev function, which is - based on the use of networks of simple allpass and comb delay - filters. This particular arrangement consists of 6 comb filters - in parallel, followed by 3 allpass filters, a lowpass filter, and - another allpass in series, followed by two allpass filters in - parallel with corresponding right and left outputs. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class NRev : public Effect -{ - public: - //! Class constructor taking a T60 decay time argument (one second default value). - NRev( StkFloat T60 = 1.0 ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set the reverberation T60 decay time. - void setT60( StkFloat T60 ); - - //! Return the specified channel value of the last computed stereo frame. - /*! - Use the lastFrame() function to get both values of the last - computed stereo frame. The \c channel argument must be 0 or 1 - (the first channel is specified by 0). However, range checking is - only performed if _STK_DEBUG_ is defined during compilation, in - which case an out-of-range value will trigger an StkError - exception. - */ - StkFloat lastOut( unsigned int channel = 0 ); - - //! Input one sample to the effect and return the specified \c channel value of the computed stereo frame. - /*! - Use the lastFrame() function to get both values of the computed - stereo output frame. The \c channel argument must be 0 or 1 (the - first channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. - */ - StkFloat tick( StkFloat input, unsigned int channel = 0 ); - - //! Take a channel of the StkFrames object as inputs to the effect and replace with stereo outputs. - /*! - The StkFrames argument reference is returned. The stereo - outputs are written to the StkFrames argument starting at the - specified \c channel. Therefore, the \c channel argument must be - less than ( channels() - 1 ) of the StkFrames argument (the first - channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the effect and write stereo outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. The \c iChannel - argument must be less than the number of channels in the \c - iFrames argument (the first channel is specified by 0). The \c - oChannel argument must be less than ( channels() - 1 ) of the \c - oFrames argument. However, range checking is only performed if - _STK_DEBUG_ is defined during compilation, in which case an - out-of-range value will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - - protected: - - Delay allpassDelays_[8]; - Delay combDelays_[6]; - StkFloat allpassCoefficient_; - StkFloat combCoefficient_[6]; - StkFloat lowpassState_; - -}; - -inline StkFloat NRev :: lastOut( unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel > 1 ) { - oStream_ << "NRev::lastOut(): channel argument must be less than 2!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - return lastFrame_[channel]; -} - -inline StkFloat NRev :: tick( StkFloat input, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel > 1 ) { - oStream_ << "NRev::tick(): channel argument must be less than 2!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat temp, temp0, temp1, temp2, temp3; - int i; - - temp0 = 0.0; - for ( i=0; i<6; i++ ) { - temp = input + (combCoefficient_[i] * combDelays_[i].lastOut()); - temp0 += combDelays_[i].tick(temp); - } - - for ( i=0; i<3; i++ ) { - temp = allpassDelays_[i].lastOut(); - temp1 = allpassCoefficient_ * temp; - temp1 += temp0; - allpassDelays_[i].tick(temp1); - temp0 = -(allpassCoefficient_ * temp1) + temp; - } - - // One-pole lowpass filter. - lowpassState_ = 0.7 * lowpassState_ + 0.3 * temp0; - temp = allpassDelays_[3].lastOut(); - temp1 = allpassCoefficient_ * temp; - temp1 += lowpassState_; - allpassDelays_[3].tick( temp1 ); - temp1 = -( allpassCoefficient_ * temp1 ) + temp; - - temp = allpassDelays_[4].lastOut(); - temp2 = allpassCoefficient_ * temp; - temp2 += temp1; - allpassDelays_[4].tick( temp2 ); - lastFrame_[0] = effectMix_*( -( allpassCoefficient_ * temp2 ) + temp ); - - temp = allpassDelays_[5].lastOut(); - temp3 = allpassCoefficient_ * temp; - temp3 += temp1; - allpassDelays_[5].tick( temp3 ); - lastFrame_[1] = effectMix_*( - ( allpassCoefficient_ * temp3 ) + temp ); - - temp = ( 1.0 - effectMix_ ) * input; - lastFrame_[0] += temp; - lastFrame_[1] += temp; - - return lastFrame_[channel]; -} - -} // stk namespace - -#endif - diff --git a/source/StkUGens/stk-4.4.4/include/Noise.h b/source/StkUGens/stk-4.4.4/include/Noise.h deleted file mode 100644 index 9d420380d3..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Noise.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef STK_NOISE_H -#define STK_NOISE_H - -#include "Generator.h" -#include - -namespace stk { - -/***************************************************/ -/*! \class Noise - \brief STK noise generator. - - Generic random number generation using the - C rand() function. The quality of the rand() - function varies from one OS to another. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Noise : public Generator -{ -public: - - //! Default constructor that can also take a specific seed value. - /*! - If the seed value is zero (the default value), the random number generator is - seeded with the system time. - */ - Noise( unsigned int seed = 0 ); - - //! Seed the random number generator with a specific seed value. - /*! - If no seed is provided or the seed value is zero, the random - number generator is seeded with the current system time. - */ - void setSeed( unsigned int seed = 0 ); - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Compute and return one output sample. - StkFloat tick( void ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - -protected: - -}; - -inline StkFloat Noise :: tick( void ) -{ - return lastFrame_[0] = (StkFloat) ( 2.0 * rand() / (RAND_MAX + 1.0) - 1.0 ); -} - -inline StkFrames& Noise :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "Noise::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= frames.channels() ) { - oStream_ << "OnePole::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "OnePole::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i= frames.channels() ) { - oStream_ << "OneZero::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "OneZero::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i 1 ) { - oStream_ << "PRCRev::lastOut(): channel argument must be less than 2!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - return lastFrame_[channel]; -} - - inline StkFloat PRCRev :: tick( StkFloat input, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel > 1 ) { - oStream_ << "PRCRev::tick(): channel argument must be less than 2!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat temp, temp0, temp1, temp2, temp3; - - temp = allpassDelays_[0].lastOut(); - temp0 = allpassCoefficient_ * temp; - temp0 += input; - allpassDelays_[0].tick(temp0); - temp0 = -(allpassCoefficient_ * temp0) + temp; - - temp = allpassDelays_[1].lastOut(); - temp1 = allpassCoefficient_ * temp; - temp1 += temp0; - allpassDelays_[1].tick(temp1); - temp1 = -(allpassCoefficient_ * temp1) + temp; - - temp2 = temp1 + ( combCoefficient_[0] * combDelays_[0].lastOut() ); - temp3 = temp1 + ( combCoefficient_[1] * combDelays_[1].lastOut() ); - - lastFrame_[0] = effectMix_ * (combDelays_[0].tick(temp2)); - lastFrame_[1] = effectMix_ * (combDelays_[1].tick(temp3)); - temp = (1.0 - effectMix_) * input; - lastFrame_[0] += temp; - lastFrame_[1] += temp; - - return lastFrame_[channel]; -} - -} // stk namespace - -#endif - diff --git a/source/StkUGens/stk-4.4.4/include/PercFlut.h b/source/StkUGens/stk-4.4.4/include/PercFlut.h deleted file mode 100644 index b0f9435557..0000000000 --- a/source/StkUGens/stk-4.4.4/include/PercFlut.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef STK_PERCFLUT_H -#define STK_PERCFLUT_H - -#include "FM.h" - -namespace stk { - -/***************************************************/ -/*! \class PercFlut - \brief STK percussive flute FM synthesis instrument. - - This class implements algorithm 4 of the TX81Z. - - \code - Algorithm 4 is : 4->3--\ - 2-- + -->1-->Out - \endcode - - Control Change Numbers: - - Total Modulator Index = 2 - - Modulator Crossfade = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class PercFlut : public FM -{ - public: - //! Class constructor. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - PercFlut( void ); - - //! Class destructor. - ~PercFlut( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - -}; - -inline StkFloat PercFlut :: tick( unsigned int ) -{ - register StkFloat temp; - - temp = vibrato_.tick() * modDepth_ * 0.2; - waves_[0]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[0]); - waves_[1]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[1]); - waves_[2]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[2]); - waves_[3]->setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[3]); - - waves_[3]->addPhaseOffset( twozero_.lastOut() ); - temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick(); - - twozero_.tick(temp); - waves_[2]->addPhaseOffset( temp ); - temp = (1.0 - (control2_ * 0.5)) * gains_[2] * adsr_[2]->tick() * waves_[2]->tick(); - - temp += control2_ * 0.5 * gains_[1] * adsr_[1]->tick() * waves_[1]->tick(); - temp = temp * control1_; - - waves_[0]->addPhaseOffset(temp); - temp = gains_[0] * adsr_[0]->tick() * waves_[0]->tick(); - - lastFrame_[0] = temp * 0.5; - return lastFrame_[0]; -} - -inline StkFrames& PercFlut :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "PercFlut::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i maxDelay-12 ) delay_[0] -= delayLength_; - while ( delay_[0] < 12 ) delay_[0] += delayLength_; - - delay_[1] = delay_[0] + halfLength_; - while ( delay_[1] > maxDelay-12 ) delay_[1] -= delayLength_; - while ( delay_[1] < 12 ) delay_[1] += delayLength_; - - // Set the new delay line lengths. - delayLine_[0].setDelay( delay_[0] ); - delayLine_[1].setDelay( delay_[1] ); - - // Calculate a triangular envelope. - env_[1] = fabs( ( delay_[0] - halfLength_ + 12 ) * ( 1.0 / (halfLength_ + 12 ) ) ); - env_[0] = 1.0 - env_[1]; - - // Delay input and apply envelope. - lastFrame_[0] = env_[0] * delayLine_[0].tick( input ); - lastFrame_[0] += env_[1] * delayLine_[1].tick( input ); - - // Compute effect mix and output. - lastFrame_[0] *= effectMix_; - lastFrame_[0] += ( 1.0 - effectMix_ ) * input; - - return lastFrame_[0]; -} - -} // stk namespace - -#endif - diff --git a/source/StkUGens/stk-4.4.4/include/Plucked.h b/source/StkUGens/stk-4.4.4/include/Plucked.h deleted file mode 100644 index 829bd440ee..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Plucked.h +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef STK_PLUCKED_H -#define STK_PLUCKED_H - -#include "Instrmnt.h" -#include "DelayA.h" -#include "OneZero.h" -#include "OnePole.h" -#include "Noise.h" - -namespace stk { - -/***************************************************/ -/*! \class Plucked - \brief STK basic plucked string class. - - This class implements a simple plucked string - physical model based on the Karplus-Strong - algorithm. - - For a more advanced plucked string implementation, - see the stk::Twang class. - - This is a digital waveguide model, making its - use possibly subject to patents held by - Stanford University, Yamaha, and others. - There exist at least two patents, assigned to - Stanford, bearing the names of Karplus and/or - Strong. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Plucked : public Instrmnt -{ - public: - //! Class constructor, taking the lowest desired playing frequency. - Plucked( StkFloat lowestFrequency = 10.0 ); - - //! Class destructor. - ~Plucked( void ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Pluck the string with the given amplitude using the current frequency. - void pluck( StkFloat amplitude ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Stop a note with the given amplitude (speed of decay). - void noteOff( StkFloat amplitude ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - DelayA delayLine_; - OneZero loopFilter_; - OnePole pickFilter_; - Noise noise_; - - StkFloat loopGain_; -}; - -inline StkFloat Plucked :: tick( unsigned int ) -{ - // Here's the whole inner loop of the instrument!! - return lastFrame_[0] = 3.0 * delayLine_.tick( loopFilter_.tick( delayLine_.lastOut() * loopGain_ ) ); -} - -inline StkFrames& Plucked :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Plucked::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i= frames.channels() ) { - oStream_ << "PoleZero::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i 1, the reed has slammed shut and the - // reflection function value saturates at 1.0. - if ( lastFrame_[0] > 1.0) lastFrame_[0] = (StkFloat) 1.0; - - // This is nearly impossible in a physical system, but - // a reflection function value of -1.0 corresponds to - // an open end (and no discontinuity in bore profile). - if ( lastFrame_[0] < -1.0) lastFrame_[0] = (StkFloat) -1.0; - - return lastFrame_[0]; -} - -inline StkFrames& ReedTable :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "ReedTable::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i 1.0) *samples = 1.0; - if ( *samples < -1.0) *samples = -1.0; - } - - lastFrame_[0] = *(samples-hop); - return frames; -} - -inline StkFrames& ReedTable :: tick( StkFrames& iFrames, StkFrames& oFrames, unsigned int iChannel, unsigned int oChannel ) -{ -#if defined(_STK_DEBUG_) - if ( iChannel >= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "ReedTable::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i 1.0) *oSamples = 1.0; - if ( *oSamples < -1.0) *oSamples = -1.0; - } - - lastFrame_[0] = *(oSamples-oHop); - return iFrames; -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/Resonate.h b/source/StkUGens/stk-4.4.4/include/Resonate.h deleted file mode 100644 index 79fbc93957..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Resonate.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef STK_RESONATE_H -#define STK_RESONATE_H - -#include "Instrmnt.h" -#include "ADSR.h" -#include "BiQuad.h" -#include "Noise.h" - -namespace stk { - -/***************************************************/ -/*! \class Resonate - \brief STK noise driven formant filter. - - This instrument contains a noise source, which - excites a biquad resonance filter, with volume - controlled by an ADSR. - - Control Change Numbers: - - Resonance Frequency (0-Nyquist) = 2 - - Pole Radii = 4 - - Notch Frequency (0-Nyquist) = 11 - - Zero Radii = 1 - - Envelope Gain = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Resonate : public Instrmnt -{ - public: - //! Class constructor. - Resonate( void ); - - //! Class destructor. - ~Resonate( void ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set the filter for a resonance at the given frequency (Hz) and radius. - void setResonance( StkFloat frequency, StkFloat radius ); - - //! Set the filter for a notch at the given frequency (Hz) and radius. - void setNotch( StkFloat frequency, StkFloat radius ); - - //! Set the filter zero coefficients for contant resonance gain. - void setEqualGainZeroes( void ) { filter_.setEqualGainZeroes(); }; - - //! Initiate the envelope with a key-on event. - void keyOn( void ) { adsr_.keyOn(); }; - - //! Signal a key-off event to the envelope. - void keyOff( void ) { adsr_.keyOff(); }; - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Stop a note with the given amplitude (speed of decay). - void noteOff( StkFloat amplitude ); - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - void controlChange( int number, StkFloat value ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - ADSR adsr_; - BiQuad filter_; - Noise noise_; - StkFloat poleFrequency_; - StkFloat poleRadius_; - StkFloat zeroFrequency_; - StkFloat zeroRadius_; - -}; - -inline StkFloat Resonate :: tick( unsigned int ) -{ - lastFrame_[0] = filter_.tick( noise_.tick() ); - lastFrame_[0] *= adsr_.tick(); - return lastFrame_[0]; -} - -inline StkFrames& Resonate :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Resonate::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i3--\ - + --> Out - 2->1--/ - \endcode - - Control Change Numbers: - - Modulator Index One = 2 - - Crossfade of Outputs = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Rhodey : public FM -{ - public: - //! Class constructor. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - Rhodey( void ); - - //! Class destructor. - ~Rhodey( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - -}; - -inline StkFloat Rhodey :: tick( unsigned int ) -{ - StkFloat temp, temp2; - - temp = gains_[1] * adsr_[1]->tick() * waves_[1]->tick(); - temp = temp * control1_; - - waves_[0]->addPhaseOffset( temp ); - waves_[3]->addPhaseOffset( twozero_.lastOut() ); - temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick(); - twozero_.tick(temp); - - waves_[2]->addPhaseOffset( temp ); - temp = ( 1.0 - (control2_ * 0.5)) * gains_[0] * adsr_[0]->tick() * waves_[0]->tick(); - temp += control2_ * 0.5 * gains_[2] * adsr_[2]->tick() * waves_[2]->tick(); - - // Calculate amplitude modulation and apply it to output. - temp2 = vibrato_.tick() * modDepth_; - temp = temp * (1.0 + temp2); - - lastFrame_[0] = temp * 0.5; - return lastFrame_[0]; -} - -inline StkFrames& Rhodey :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Rhodey::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i -#include -#include "RtError.h" - -/*! \typedef typedef unsigned long RtAudioFormat; - \brief RtAudio data format type. - - Support for signed integers and floats. Audio data fed to/from an - RtAudio stream is assumed to ALWAYS be in host byte order. The - internal routines will automatically take care of any necessary - byte-swapping between the host format and the soundcard. Thus, - endian-ness is not a concern in the following format definitions. - Note that 24-bit data is expected to be encapsulated in a 32-bit - format. - - - \e RTAUDIO_SINT8: 8-bit signed integer. - - \e RTAUDIO_SINT16: 16-bit signed integer. - - \e RTAUDIO_SINT24: Lower 3 bytes of 32-bit signed integer. - - \e RTAUDIO_SINT32: 32-bit signed integer. - - \e RTAUDIO_FLOAT32: Normalized between plus/minus 1.0. - - \e RTAUDIO_FLOAT64: Normalized between plus/minus 1.0. -*/ -typedef unsigned long RtAudioFormat; -static const RtAudioFormat RTAUDIO_SINT8 = 0x1; // 8-bit signed integer. -static const RtAudioFormat RTAUDIO_SINT16 = 0x2; // 16-bit signed integer. -static const RtAudioFormat RTAUDIO_SINT24 = 0x4; // Lower 3 bytes of 32-bit signed integer. -static const RtAudioFormat RTAUDIO_SINT32 = 0x8; // 32-bit signed integer. -static const RtAudioFormat RTAUDIO_FLOAT32 = 0x10; // Normalized between plus/minus 1.0. -static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/minus 1.0. - -/*! \typedef typedef unsigned long RtAudioStreamFlags; - \brief RtAudio stream option flags. - - The following flags can be OR'ed together to allow a client to - make changes to the default stream behavior: - - - \e RTAUDIO_NONINTERLEAVED: Use non-interleaved buffers (default = interleaved). - - \e RTAUDIO_MINIMIZE_LATENCY: Attempt to set stream parameters for lowest possible latency. - - \e RTAUDIO_HOG_DEVICE: Attempt grab device for exclusive use. - - \e RTAUDIO_ALSA_USE_DEFAULT: Use the "default" PCM device (ALSA only). - - By default, RtAudio streams pass and receive audio data from the - client in an interleaved format. By passing the - RTAUDIO_NONINTERLEAVED flag to the openStream() function, audio - data will instead be presented in non-interleaved buffers. In - this case, each buffer argument in the RtAudioCallback function - will point to a single array of data, with \c nFrames samples for - each channel concatenated back-to-back. For example, the first - sample of data for the second channel would be located at index \c - nFrames (assuming the \c buffer pointer was recast to the correct - data type for the stream). - - Certain audio APIs offer a number of parameters that influence the - I/O latency of a stream. By default, RtAudio will attempt to set - these parameters internally for robust (glitch-free) performance - (though some APIs, like Windows Direct Sound, make this difficult). - By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() - function, internal stream settings will be influenced in an attempt - to minimize stream latency, though possibly at the expense of stream - performance. - - If the RTAUDIO_HOG_DEVICE flag is set, RtAudio will attempt to - open the input and/or output stream device(s) for exclusive use. - Note that this is not possible with all supported audio APIs. - - If the RTAUDIO_SCHEDULE_REALTIME flag is set, RtAudio will attempt - to select realtime scheduling (round-robin) for the callback thread. - - If the RTAUDIO_ALSA_USE_DEFAULT flag is set, RtAudio will attempt to - open the "default" PCM device when using the ALSA API. Note that this - will override any specified input or output device id. -*/ -typedef unsigned int RtAudioStreamFlags; -static const RtAudioStreamFlags RTAUDIO_NONINTERLEAVED = 0x1; // Use non-interleaved buffers (default = interleaved). -static const RtAudioStreamFlags RTAUDIO_MINIMIZE_LATENCY = 0x2; // Attempt to set stream parameters for lowest possible latency. -static const RtAudioStreamFlags RTAUDIO_HOG_DEVICE = 0x4; // Attempt grab device and prevent use by others. -static const RtAudioStreamFlags RTAUDIO_SCHEDULE_REALTIME = 0x8; // Try to select realtime scheduling for callback thread. -static const RtAudioStreamFlags RTAUDIO_ALSA_USE_DEFAULT = 0x10; // Use the "default" PCM device (ALSA only). - -/*! \typedef typedef unsigned long RtAudioStreamStatus; - \brief RtAudio stream status (over- or underflow) flags. - - Notification of a stream over- or underflow is indicated by a - non-zero stream \c status argument in the RtAudioCallback function. - The stream status can be one of the following two options, - depending on whether the stream is open for output and/or input: - - - \e RTAUDIO_INPUT_OVERFLOW: Input data was discarded because of an overflow condition at the driver. - - \e RTAUDIO_OUTPUT_UNDERFLOW: The output buffer ran low, likely producing a break in the output sound. -*/ -typedef unsigned int RtAudioStreamStatus; -static const RtAudioStreamStatus RTAUDIO_INPUT_OVERFLOW = 0x1; // Input data was discarded because of an overflow condition at the driver. -static const RtAudioStreamStatus RTAUDIO_OUTPUT_UNDERFLOW = 0x2; // The output buffer ran low, likely causing a gap in the output sound. - -//! RtAudio callback function prototype. -/*! - All RtAudio clients must create a function of type RtAudioCallback - to read and/or write data from/to the audio stream. When the - underlying audio system is ready for new input or output data, this - function will be invoked. - - \param outputBuffer For output (or duplex) streams, the client - should write \c nFrames of audio sample frames into this - buffer. This argument should be recast to the datatype - specified when the stream was opened. For input-only - streams, this argument will be NULL. - - \param inputBuffer For input (or duplex) streams, this buffer will - hold \c nFrames of input audio sample frames. This - argument should be recast to the datatype specified when the - stream was opened. For output-only streams, this argument - will be NULL. - - \param nFrames The number of sample frames of input or output - data in the buffers. The actual buffer size in bytes is - dependent on the data type and number of channels in use. - - \param streamTime The number of seconds that have elapsed since the - stream was started. - - \param status If non-zero, this argument indicates a data overflow - or underflow condition for the stream. The particular - condition can be determined by comparison with the - RtAudioStreamStatus flags. - - \param userData A pointer to optional data provided by the client - when opening the stream (default = NULL). - - To continue normal stream operation, the RtAudioCallback function - should return a value of zero. To stop the stream and drain the - output buffer, the function should return a value of one. To abort - the stream immediately, the client should return a value of two. - */ -typedef int (*RtAudioCallback)( void *outputBuffer, void *inputBuffer, - unsigned int nFrames, - double streamTime, - RtAudioStreamStatus status, - void *userData ); - - -// **************************************************************** // -// -// RtAudio class declaration. -// -// RtAudio is a "controller" used to select an available audio i/o -// interface. It presents a common API for the user to call but all -// functionality is implemented by the class RtApi and its -// subclasses. RtAudio creates an instance of an RtApi subclass -// based on the user's API choice. If no choice is made, RtAudio -// attempts to make a "logical" API selection. -// -// **************************************************************** // - -class RtApi; - -class RtAudio -{ - public: - - //! Audio API specifier arguments. - enum Api { - UNSPECIFIED, /*!< Search for a working compiled API. */ - LINUX_ALSA, /*!< The Advanced Linux Sound Architecture API. */ - LINUX_PULSE, /*!< The Linux PulseAudio API. */ - LINUX_OSS, /*!< The Linux Open Sound System API. */ - UNIX_JACK, /*!< The Jack Low-Latency Audio Server API. */ - MACOSX_CORE, /*!< Macintosh OS-X Core Audio API. */ - WINDOWS_ASIO, /*!< The Steinberg Audio Stream I/O API. */ - WINDOWS_DS, /*!< The Microsoft Direct Sound API. */ - RTAUDIO_DUMMY /*!< A compilable but non-functional API. */ - }; - - //! The public device information structure for returning queried values. - struct DeviceInfo { - bool probed; /*!< true if the device capabilities were successfully probed. */ - std::string name; /*!< Character string device identifier. */ - unsigned int outputChannels; /*!< Maximum output channels supported by device. */ - unsigned int inputChannels; /*!< Maximum input channels supported by device. */ - unsigned int duplexChannels; /*!< Maximum simultaneous input/output channels supported by device. */ - bool isDefaultOutput; /*!< true if this is the default output device. */ - bool isDefaultInput; /*!< true if this is the default input device. */ - std::vector sampleRates; /*!< Supported sample rates (queried from list of standard rates). */ - RtAudioFormat nativeFormats; /*!< Bit mask of supported data formats. */ - - // Default constructor. - DeviceInfo() - :probed(false), outputChannels(0), inputChannels(0), duplexChannels(0), - isDefaultOutput(false), isDefaultInput(false), nativeFormats(0) {} - }; - - //! The structure for specifying input or ouput stream parameters. - struct StreamParameters { - unsigned int deviceId; /*!< Device index (0 to getDeviceCount() - 1). */ - unsigned int nChannels; /*!< Number of channels. */ - unsigned int firstChannel; /*!< First channel index on device (default = 0). */ - - // Default constructor. - StreamParameters() - : deviceId(0), nChannels(0), firstChannel(0) {} - }; - - //! The structure for specifying stream options. - /*! - The following flags can be OR'ed together to allow a client to - make changes to the default stream behavior: - - - \e RTAUDIO_NONINTERLEAVED: Use non-interleaved buffers (default = interleaved). - - \e RTAUDIO_MINIMIZE_LATENCY: Attempt to set stream parameters for lowest possible latency. - - \e RTAUDIO_HOG_DEVICE: Attempt grab device for exclusive use. - - \e RTAUDIO_SCHEDULE_REALTIME: Attempt to select realtime scheduling for callback thread. - - \e RTAUDIO_ALSA_USE_DEFAULT: Use the "default" PCM device (ALSA only). - - By default, RtAudio streams pass and receive audio data from the - client in an interleaved format. By passing the - RTAUDIO_NONINTERLEAVED flag to the openStream() function, audio - data will instead be presented in non-interleaved buffers. In - this case, each buffer argument in the RtAudioCallback function - will point to a single array of data, with \c nFrames samples for - each channel concatenated back-to-back. For example, the first - sample of data for the second channel would be located at index \c - nFrames (assuming the \c buffer pointer was recast to the correct - data type for the stream). - - Certain audio APIs offer a number of parameters that influence the - I/O latency of a stream. By default, RtAudio will attempt to set - these parameters internally for robust (glitch-free) performance - (though some APIs, like Windows Direct Sound, make this difficult). - By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() - function, internal stream settings will be influenced in an attempt - to minimize stream latency, though possibly at the expense of stream - performance. - - If the RTAUDIO_HOG_DEVICE flag is set, RtAudio will attempt to - open the input and/or output stream device(s) for exclusive use. - Note that this is not possible with all supported audio APIs. - - If the RTAUDIO_SCHEDULE_REALTIME flag is set, RtAudio will attempt - to select realtime scheduling (round-robin) for the callback thread. - The \c priority parameter will only be used if the RTAUDIO_SCHEDULE_REALTIME - flag is set. It defines the thread's realtime priority. - - If the RTAUDIO_ALSA_USE_DEFAULT flag is set, RtAudio will attempt to - open the "default" PCM device when using the ALSA API. Note that this - will override any specified input or output device id. - - The \c numberOfBuffers parameter can be used to control stream - latency in the Windows DirectSound, Linux OSS, and Linux Alsa APIs - only. A value of two is usually the smallest allowed. Larger - numbers can potentially result in more robust stream performance, - though likely at the cost of stream latency. The value set by the - user is replaced during execution of the RtAudio::openStream() - function by the value actually used by the system. - - The \c streamName parameter can be used to set the client name - when using the Jack API. By default, the client name is set to - RtApiJack. However, if you wish to create multiple instances of - RtAudio with Jack, each instance must have a unique client name. - */ - struct StreamOptions { - RtAudioStreamFlags flags; /*!< A bit-mask of stream flags (RTAUDIO_NONINTERLEAVED, RTAUDIO_MINIMIZE_LATENCY, RTAUDIO_HOG_DEVICE, RTAUDIO_ALSA_USE_DEFAULT). */ - unsigned int numberOfBuffers; /*!< Number of stream buffers. */ - std::string streamName; /*!< A stream name (currently used only in Jack). */ - int priority; /*!< Scheduling priority of callback thread (only used with flag RTAUDIO_SCHEDULE_REALTIME). */ - - // Default constructor. - StreamOptions() - : flags(0), numberOfBuffers(0), priority(0) {} - }; - - //! A static function to determine the available compiled audio APIs. - /*! - The values returned in the std::vector can be compared against - the enumerated list values. Note that there can be more than one - API compiled for certain operating systems. - */ - static void getCompiledApi( std::vector &apis ) throw(); - - //! The class constructor. - /*! - The constructor performs minor initialization tasks. No exceptions - can be thrown. - - If no API argument is specified and multiple API support has been - compiled, the default order of use is JACK, ALSA, OSS (Linux - systems) and ASIO, DS (Windows systems). - */ - RtAudio( RtAudio::Api api=UNSPECIFIED ) throw(); - - //! The destructor. - /*! - If a stream is running or open, it will be stopped and closed - automatically. - */ - ~RtAudio() throw(); - - //! Returns the audio API specifier for the current instance of RtAudio. - RtAudio::Api getCurrentApi( void ) throw(); - - //! A public function that queries for the number of audio devices available. - /*! - This function performs a system query of available devices each time it - is called, thus supporting devices connected \e after instantiation. If - a system error occurs during processing, a warning will be issued. - */ - unsigned int getDeviceCount( void ) throw(); - - //! Return an RtAudio::DeviceInfo structure for a specified device number. - /*! - - Any device integer between 0 and getDeviceCount() - 1 is valid. - If an invalid argument is provided, an RtError (type = INVALID_USE) - will be thrown. If a device is busy or otherwise unavailable, the - structure member "probed" will have a value of "false" and all - other members are undefined. If the specified device is the - current default input or output device, the corresponding - "isDefault" member will have a value of "true". - */ - RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); - - //! A function that returns the index of the default output device. - /*! - If the underlying audio API does not provide a "default - device", or if no devices are available, the return value will be - 0. Note that this is a valid device identifier and it is the - client's responsibility to verify that a device is available - before attempting to open a stream. - */ - unsigned int getDefaultOutputDevice( void ) throw(); - - //! A function that returns the index of the default input device. - /*! - If the underlying audio API does not provide a "default - device", or if no devices are available, the return value will be - 0. Note that this is a valid device identifier and it is the - client's responsibility to verify that a device is available - before attempting to open a stream. - */ - unsigned int getDefaultInputDevice( void ) throw(); - - //! A public function for opening a stream with the specified parameters. - /*! - An RtError (type = SYSTEM_ERROR) is thrown if a stream cannot be - opened with the specified parameters or an error occurs during - processing. An RtError (type = INVALID_USE) is thrown if any - invalid device ID or channel number parameters are specified. - - \param outputParameters Specifies output stream parameters to use - when opening a stream, including a device ID, number of channels, - and starting channel number. For input-only streams, this - argument should be NULL. The device ID is an index value between - 0 and getDeviceCount() - 1. - \param inputParameters Specifies input stream parameters to use - when opening a stream, including a device ID, number of channels, - and starting channel number. For output-only streams, this - argument should be NULL. The device ID is an index value between - 0 and getDeviceCount() - 1. - \param format An RtAudioFormat specifying the desired sample data format. - \param sampleRate The desired sample rate (sample frames per second). - \param *bufferFrames A pointer to a value indicating the desired - internal buffer size in sample frames. The actual value - used by the device is returned via the same pointer. A - value of zero can be specified, in which case the lowest - allowable value is determined. - \param callback A client-defined function that will be invoked - when input data is available and/or output data is needed. - \param userData An optional pointer to data that can be accessed - from within the callback function. - \param options An optional pointer to a structure containing various - global stream options, including a list of OR'ed RtAudioStreamFlags - and a suggested number of stream buffers that can be used to - control stream latency. More buffers typically result in more - robust performance, though at a cost of greater latency. If a - value of zero is specified, a system-specific median value is - chosen. If the RTAUDIO_MINIMIZE_LATENCY flag bit is set, the - lowest allowable value is used. The actual value used is - returned via the structure argument. The parameter is API dependent. - */ - void openStream( RtAudio::StreamParameters *outputParameters, - RtAudio::StreamParameters *inputParameters, - RtAudioFormat format, unsigned int sampleRate, - unsigned int *bufferFrames, RtAudioCallback callback, - void *userData = NULL, RtAudio::StreamOptions *options = NULL ); - - //! A function that closes a stream and frees any associated stream memory. - /*! - If a stream is not open, this function issues a warning and - returns (no exception is thrown). - */ - void closeStream( void ) throw(); - - //! A function that starts a stream. - /*! - An RtError (type = SYSTEM_ERROR) is thrown if an error occurs - during processing. An RtError (type = INVALID_USE) is thrown if a - stream is not open. A warning is issued if the stream is already - running. - */ - void startStream( void ); - - //! Stop a stream, allowing any samples remaining in the output queue to be played. - /*! - An RtError (type = SYSTEM_ERROR) is thrown if an error occurs - during processing. An RtError (type = INVALID_USE) is thrown if a - stream is not open. A warning is issued if the stream is already - stopped. - */ - void stopStream( void ); - - //! Stop a stream, discarding any samples remaining in the input/output queue. - /*! - An RtError (type = SYSTEM_ERROR) is thrown if an error occurs - during processing. An RtError (type = INVALID_USE) is thrown if a - stream is not open. A warning is issued if the stream is already - stopped. - */ - void abortStream( void ); - - //! Returns true if a stream is open and false if not. - bool isStreamOpen( void ) const throw(); - - //! Returns true if the stream is running and false if it is stopped or not open. - bool isStreamRunning( void ) const throw(); - - //! Returns the number of elapsed seconds since the stream was started. - /*! - If a stream is not open, an RtError (type = INVALID_USE) will be thrown. - */ - double getStreamTime( void ); - - //! Returns the internal stream latency in sample frames. - /*! - The stream latency refers to delay in audio input and/or output - caused by internal buffering by the audio system and/or hardware. - For duplex streams, the returned value will represent the sum of - the input and output latencies. If a stream is not open, an - RtError (type = INVALID_USE) will be thrown. If the API does not - report latency, the return value will be zero. - */ - long getStreamLatency( void ); - - //! Returns actual sample rate in use by the stream. - /*! - On some systems, the sample rate used may be slightly different - than that specified in the stream parameters. If a stream is not - open, an RtError (type = INVALID_USE) will be thrown. - */ - unsigned int getStreamSampleRate( void ); - - //! Specify whether warning messages should be printed to stderr. - void showWarnings( bool value = true ) throw(); - - protected: - - void openRtApi( RtAudio::Api api ); - RtApi *rtapi_; -}; - -// Operating system dependent thread functionality. -#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) - #include - #include - - typedef unsigned long ThreadHandle; - typedef CRITICAL_SECTION StreamMutex; - -#elif defined(__LINUX_ALSA__) || defined(__LINUX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__) - // Using pthread library for various flavors of unix. - #include - - typedef pthread_t ThreadHandle; - typedef pthread_mutex_t StreamMutex; - -#else // Setup for "dummy" behavior - - #define __RTAUDIO_DUMMY__ - typedef int ThreadHandle; - typedef int StreamMutex; - -#endif - -// This global structure type is used to pass callback information -// between the private RtAudio stream structure and global callback -// handling functions. -struct CallbackInfo { - void *object; // Used as a "this" pointer. - ThreadHandle thread; - void *callback; - void *userData; - void *apiInfo; // void pointer for API specific callback information - bool isRunning; - - // Default constructor. - CallbackInfo() - :object(0), callback(0), userData(0), apiInfo(0), isRunning(false) {} -}; - -// **************************************************************** // -// -// RtApi class declaration. -// -// Subclasses of RtApi contain all API- and OS-specific code necessary -// to fully implement the RtAudio API. -// -// Note that RtApi is an abstract base class and cannot be -// explicitly instantiated. The class RtAudio will create an -// instance of an RtApi subclass (RtApiOss, RtApiAlsa, -// RtApiJack, RtApiCore, RtApiDs, or RtApiAsio). -// -// **************************************************************** // - -#if defined( HAVE_GETTIMEOFDAY ) - #include -#endif - -#include - -class RtApi -{ -public: - - RtApi(); - virtual ~RtApi(); - virtual RtAudio::Api getCurrentApi( void ) = 0; - virtual unsigned int getDeviceCount( void ) = 0; - virtual RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) = 0; - virtual unsigned int getDefaultInputDevice( void ); - virtual unsigned int getDefaultOutputDevice( void ); - void openStream( RtAudio::StreamParameters *outputParameters, - RtAudio::StreamParameters *inputParameters, - RtAudioFormat format, unsigned int sampleRate, - unsigned int *bufferFrames, RtAudioCallback callback, - void *userData, RtAudio::StreamOptions *options ); - virtual void closeStream( void ); - virtual void startStream( void ) = 0; - virtual void stopStream( void ) = 0; - virtual void abortStream( void ) = 0; - long getStreamLatency( void ); - unsigned int getStreamSampleRate( void ); - virtual double getStreamTime( void ); - bool isStreamOpen( void ) const { return stream_.state != STREAM_CLOSED; }; - bool isStreamRunning( void ) const { return stream_.state == STREAM_RUNNING; }; - void showWarnings( bool value ) { showWarnings_ = value; }; - - -protected: - - static const unsigned int MAX_SAMPLE_RATES; - static const unsigned int SAMPLE_RATES[]; - - enum { FAILURE, SUCCESS }; - - enum StreamState { - STREAM_STOPPED, - STREAM_STOPPING, - STREAM_RUNNING, - STREAM_CLOSED = -50 - }; - - enum StreamMode { - OUTPUT, - INPUT, - DUPLEX, - UNINITIALIZED = -75 - }; - - // A protected structure used for buffer conversion. - struct ConvertInfo { - int channels; - int inJump, outJump; - RtAudioFormat inFormat, outFormat; - std::vector inOffset; - std::vector outOffset; - }; - - // A protected structure for audio streams. - struct RtApiStream { - unsigned int device[2]; // Playback and record, respectively. - void *apiHandle; // void pointer for API specific stream handle information - StreamMode mode; // OUTPUT, INPUT, or DUPLEX. - StreamState state; // STOPPED, RUNNING, or CLOSED - char *userBuffer[2]; // Playback and record, respectively. - char *deviceBuffer; - bool doConvertBuffer[2]; // Playback and record, respectively. - bool userInterleaved; - bool deviceInterleaved[2]; // Playback and record, respectively. - bool doByteSwap[2]; // Playback and record, respectively. - unsigned int sampleRate; - unsigned int bufferSize; - unsigned int nBuffers; - unsigned int nUserChannels[2]; // Playback and record, respectively. - unsigned int nDeviceChannels[2]; // Playback and record channels, respectively. - unsigned int channelOffset[2]; // Playback and record, respectively. - unsigned long latency[2]; // Playback and record, respectively. - RtAudioFormat userFormat; - RtAudioFormat deviceFormat[2]; // Playback and record, respectively. - StreamMutex mutex; - CallbackInfo callbackInfo; - ConvertInfo convertInfo[2]; - double streamTime; // Number of elapsed seconds since the stream started. - -#if defined(HAVE_GETTIMEOFDAY) - struct timeval lastTickTimestamp; -#endif - - RtApiStream() - :apiHandle(0), deviceBuffer(0) { device[0] = 11111; device[1] = 11111; } - }; - - typedef signed short Int16; - typedef signed int Int32; - typedef float Float32; - typedef double Float64; - - std::ostringstream errorStream_; - std::string errorText_; - bool showWarnings_; - RtApiStream stream_; - - /*! - Protected, api-specific method that attempts to open a device - with the given parameters. This function MUST be implemented by - all subclasses. If an error is encountered during the probe, a - "warning" message is reported and FAILURE is returned. A - successful probe is indicated by a return value of SUCCESS. - */ - virtual bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); - - //! A protected function used to increment the stream time. - void tickStreamTime( void ); - - //! Protected common method to clear an RtApiStream structure. - void clearStreamInfo(); - - /*! - Protected common method that throws an RtError (type = - INVALID_USE) if a stream is not open. - */ - void verifyStream( void ); - - //! Protected common error method to allow global control over error handling. - void error( RtError::Type type ); - - /*! - Protected method used to perform format, channel number, and/or interleaving - conversions between the user and device buffers. - */ - void convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info ); - - //! Protected common method used to perform byte-swapping on buffers. - void byteSwapBuffer( char *buffer, unsigned int samples, RtAudioFormat format ); - - //! Protected common method that returns the number of bytes for a given format. - unsigned int formatBytes( RtAudioFormat format ); - - //! Protected common method that sets up the parameters for buffer conversion. - void setConvertInfo( StreamMode mode, unsigned int firstChannel ); -}; - -// **************************************************************** // -// -// Inline RtAudio definitions. -// -// **************************************************************** // - -inline RtAudio::Api RtAudio :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); } -inline unsigned int RtAudio :: getDeviceCount( void ) throw() { return rtapi_->getDeviceCount(); } -inline RtAudio::DeviceInfo RtAudio :: getDeviceInfo( unsigned int device ) { return rtapi_->getDeviceInfo( device ); } -inline unsigned int RtAudio :: getDefaultInputDevice( void ) throw() { return rtapi_->getDefaultInputDevice(); } -inline unsigned int RtAudio :: getDefaultOutputDevice( void ) throw() { return rtapi_->getDefaultOutputDevice(); } -inline void RtAudio :: closeStream( void ) throw() { return rtapi_->closeStream(); } -inline void RtAudio :: startStream( void ) { return rtapi_->startStream(); } -inline void RtAudio :: stopStream( void ) { return rtapi_->stopStream(); } -inline void RtAudio :: abortStream( void ) { return rtapi_->abortStream(); } -inline bool RtAudio :: isStreamOpen( void ) const throw() { return rtapi_->isStreamOpen(); } -inline bool RtAudio :: isStreamRunning( void ) const throw() { return rtapi_->isStreamRunning(); } -inline long RtAudio :: getStreamLatency( void ) { return rtapi_->getStreamLatency(); } -inline unsigned int RtAudio :: getStreamSampleRate( void ) { return rtapi_->getStreamSampleRate(); }; -inline double RtAudio :: getStreamTime( void ) { return rtapi_->getStreamTime(); } -inline void RtAudio :: showWarnings( bool value ) throw() { rtapi_->showWarnings( value ); } - -// RtApi Subclass prototypes. - -#if defined(__MACOSX_CORE__) - -#include - -class RtApiCore: public RtApi -{ -public: - - RtApiCore(); - ~RtApiCore(); - RtAudio::Api getCurrentApi( void ) { return RtAudio::MACOSX_CORE; }; - unsigned int getDeviceCount( void ); - RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); - unsigned int getDefaultOutputDevice( void ); - unsigned int getDefaultInputDevice( void ); - void closeStream( void ); - void startStream( void ); - void stopStream( void ); - void abortStream( void ); - long getStreamLatency( void ); - - // This function is intended for internal use only. It must be - // public because it is called by the internal callback handler, - // which is not a member of RtAudio. External use of this function - // will most likely produce highly undesireable results! - bool callbackEvent( AudioDeviceID deviceId, - const AudioBufferList *inBufferList, - const AudioBufferList *outBufferList ); - - private: - - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); - static const char* getErrorCode( OSStatus code ); -}; - -#endif - -#if defined(__UNIX_JACK__) - -class RtApiJack: public RtApi -{ -public: - - RtApiJack(); - ~RtApiJack(); - RtAudio::Api getCurrentApi( void ) { return RtAudio::UNIX_JACK; }; - unsigned int getDeviceCount( void ); - RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); - void closeStream( void ); - void startStream( void ); - void stopStream( void ); - void abortStream( void ); - long getStreamLatency( void ); - - // This function is intended for internal use only. It must be - // public because it is called by the internal callback handler, - // which is not a member of RtAudio. External use of this function - // will most likely produce highly undesireable results! - bool callbackEvent( unsigned long nframes ); - - private: - - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); -}; - -#endif - -#if defined(__WINDOWS_ASIO__) - -class RtApiAsio: public RtApi -{ -public: - - RtApiAsio(); - ~RtApiAsio(); - RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_ASIO; }; - unsigned int getDeviceCount( void ); - RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); - void closeStream( void ); - void startStream( void ); - void stopStream( void ); - void abortStream( void ); - long getStreamLatency( void ); - - // This function is intended for internal use only. It must be - // public because it is called by the internal callback handler, - // which is not a member of RtAudio. External use of this function - // will most likely produce highly undesireable results! - bool callbackEvent( long bufferIndex ); - - private: - - std::vector devices_; - void saveDeviceInfo( void ); - bool coInitialized_; - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); -}; - -#endif - -#if defined(__WINDOWS_DS__) - -class RtApiDs: public RtApi -{ -public: - - RtApiDs(); - ~RtApiDs(); - RtAudio::Api getCurrentApi( void ) { return RtAudio::WINDOWS_DS; }; - unsigned int getDeviceCount( void ); - unsigned int getDefaultOutputDevice( void ); - unsigned int getDefaultInputDevice( void ); - RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); - void closeStream( void ); - void startStream( void ); - void stopStream( void ); - void abortStream( void ); - long getStreamLatency( void ); - - // This function is intended for internal use only. It must be - // public because it is called by the internal callback handler, - // which is not a member of RtAudio. External use of this function - // will most likely produce highly undesireable results! - void callbackEvent( void ); - - private: - - bool coInitialized_; - bool buffersRolling; - long duplexPrerollBytes; - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); -}; - -#endif - -#if defined(__LINUX_ALSA__) - -class RtApiAlsa: public RtApi -{ -public: - - RtApiAlsa(); - ~RtApiAlsa(); - RtAudio::Api getCurrentApi() { return RtAudio::LINUX_ALSA; }; - unsigned int getDeviceCount( void ); - RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); - void closeStream( void ); - void startStream( void ); - void stopStream( void ); - void abortStream( void ); - - // This function is intended for internal use only. It must be - // public because it is called by the internal callback handler, - // which is not a member of RtAudio. External use of this function - // will most likely produce highly undesireable results! - void callbackEvent( void ); - - private: - - std::vector devices_; - void saveDeviceInfo( void ); - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); -}; - -#endif - -#if defined(__LINUX_PULSE__) - -class RtApiPulse: public RtApi -{ -public: - ~RtApiPulse(); - RtAudio::Api getCurrentApi() { return RtAudio::LINUX_PULSE; }; - unsigned int getDeviceCount( void ); - RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); - void closeStream( void ); - void startStream( void ); - void stopStream( void ); - void abortStream( void ); - - // This function is intended for internal use only. It must be - // public because it is called by the internal callback handler, - // which is not a member of RtAudio. External use of this function - // will most likely produce highly undesireable results! - void callbackEvent( void ); - - private: - - std::vector devices_; - void saveDeviceInfo( void ); - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); -}; - -#endif - -#if defined(__LINUX_OSS__) - -class RtApiOss: public RtApi -{ -public: - - RtApiOss(); - ~RtApiOss(); - RtAudio::Api getCurrentApi() { return RtAudio::LINUX_OSS; }; - unsigned int getDeviceCount( void ); - RtAudio::DeviceInfo getDeviceInfo( unsigned int device ); - void closeStream( void ); - void startStream( void ); - void stopStream( void ); - void abortStream( void ); - - // This function is intended for internal use only. It must be - // public because it is called by the internal callback handler, - // which is not a member of RtAudio. External use of this function - // will most likely produce highly undesireable results! - void callbackEvent( void ); - - private: - - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ); -}; - -#endif - -#if defined(__RTAUDIO_DUMMY__) - -class RtApiDummy: public RtApi -{ -public: - - RtApiDummy() { errorText_ = "RtApiDummy: This class provides no functionality."; error( RtError::WARNING ); }; - RtAudio::Api getCurrentApi( void ) { return RtAudio::RTAUDIO_DUMMY; }; - unsigned int getDeviceCount( void ) { return 0; }; - RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) { RtAudio::DeviceInfo info; return info; }; - void closeStream( void ) {}; - void startStream( void ) {}; - void stopStream( void ) {}; - void abortStream( void ) {}; - - private: - - bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ) { return false; }; -}; - -#endif - -#endif - -// Indentation settings for Vim and Emacs -// -// Local Variables: -// c-basic-offset: 2 -// indent-tabs-mode: nil -// End: -// -// vim: et sts=2 sw=2 diff --git a/source/StkUGens/stk-4.4.4/include/RtError.h b/source/StkUGens/stk-4.4.4/include/RtError.h deleted file mode 100644 index a64f43430e..0000000000 --- a/source/StkUGens/stk-4.4.4/include/RtError.h +++ /dev/null @@ -1,60 +0,0 @@ -/************************************************************************/ -/*! \class RtError - \brief Exception handling class for RtAudio & RtMidi. - - The RtError class is quite simple but it does allow errors to be - "caught" by RtError::Type. See the RtAudio and RtMidi - documentation to know which methods can throw an RtError. - -*/ -/************************************************************************/ - -#ifndef RTERROR_H -#define RTERROR_H - -#include -#include -#include - -class RtError : public std::exception -{ - public: - //! Defined RtError types. - enum Type { - WARNING, /*!< A non-critical error. */ - DEBUG_WARNING, /*!< A non-critical error which might be useful for debugging. */ - UNSPECIFIED, /*!< The default, unspecified error type. */ - NO_DEVICES_FOUND, /*!< No devices found on system. */ - INVALID_DEVICE, /*!< An invalid device ID was specified. */ - MEMORY_ERROR, /*!< An error occured during memory allocation. */ - INVALID_PARAMETER, /*!< An invalid parameter was specified to a function. */ - INVALID_USE, /*!< The function was called incorrectly. */ - DRIVER_ERROR, /*!< A system driver error occured. */ - SYSTEM_ERROR, /*!< A system error occured. */ - THREAD_ERROR /*!< A thread error occured. */ - }; - - //! The constructor. - RtError( const std::string& message, Type type = RtError::UNSPECIFIED ) throw() : message_(message), type_(type) {} - - //! The destructor. - virtual ~RtError( void ) throw() {} - - //! Prints thrown error message to stderr. - virtual void printMessage( void ) const throw() { std::cerr << '\n' << message_ << "\n\n"; } - - //! Returns the thrown error message type. - virtual const Type& getType(void) const throw() { return type_; } - - //! Returns the thrown error message string. - virtual const std::string& getMessage(void) const throw() { return message_; } - - //! Returns the thrown error message as a c-style string. - virtual const char* what( void ) const throw() { return message_.c_str(); } - - protected: - std::string message_; - Type type_; -}; - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/RtMidi.h b/source/StkUGens/stk-4.4.4/include/RtMidi.h deleted file mode 100644 index 127a01c91f..0000000000 --- a/source/StkUGens/stk-4.4.4/include/RtMidi.h +++ /dev/null @@ -1,675 +0,0 @@ -/**********************************************************************/ -/*! \class RtMidi - \brief An abstract base class for realtime MIDI input/output. - - This class implements some common functionality for the realtime - MIDI input/output subclasses RtMidiIn and RtMidiOut. - - RtMidi WWW site: http://music.mcgill.ca/~gary/rtmidi/ - - RtMidi: realtime MIDI i/o C++ classes - Copyright (c) 2003-2012 Gary P. Scavone - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - Any person wishing to distribute modifications to the Software is - asked to send the modifications to the original developer so that - they can be incorporated into the canonical version. This is, - however, not a binding provision of this license. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/**********************************************************************/ - -/*! - \file RtMidi.h - */ - -// RtMidi: Version 2.0.1 - -#ifndef RTMIDI_H -#define RTMIDI_H - -#include "RtError.h" -#include -#include - -class RtMidi -{ - public: - - //! MIDI API specifier arguments. - enum Api { - UNSPECIFIED, /*!< Search for a working compiled API. */ - MACOSX_CORE, /*!< Macintosh OS-X Core Midi API. */ - LINUX_ALSA, /*!< The Advanced Linux Sound Architecture API. */ - UNIX_JACK, /*!< The Jack Low-Latency MIDI Server API. */ - WINDOWS_MM, /*!< The Microsoft Multimedia MIDI API. */ - WINDOWS_KS, /*!< The Microsoft Kernel Streaming MIDI API. */ - RTMIDI_DUMMY /*!< A compilable but non-functional API. */ - }; - - //! A static function to determine the available compiled MIDI APIs. - /*! - The values returned in the std::vector can be compared against - the enumerated list values. Note that there can be more than one - API compiled for certain operating systems. - */ - static void getCompiledApi( std::vector &apis ) throw(); - - //! Pure virtual openPort() function. - virtual void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi" ) ) = 0; - - //! Pure virtual openVirtualPort() function. - virtual void openVirtualPort( const std::string portName = std::string( "RtMidi" ) ) = 0; - - //! Pure virtual getPortCount() function. - virtual unsigned int getPortCount() = 0; - - //! Pure virtual getPortName() function. - virtual std::string getPortName( unsigned int portNumber = 0 ) = 0; - - //! Pure virtual closePort() function. - virtual void closePort( void ) = 0; - - //! A basic error reporting function for RtMidi classes. - static void error( RtError::Type type, std::string errorString ); - - protected: - - RtMidi() {}; - virtual ~RtMidi() {}; -}; - -/**********************************************************************/ -/*! \class RtMidiIn - \brief A realtime MIDI input class. - - This class provides a common, platform-independent API for - realtime MIDI input. It allows access to a single MIDI input - port. Incoming MIDI messages are either saved to a queue for - retrieval using the getMessage() function or immediately passed to - a user-specified callback function. Create multiple instances of - this class to connect to more than one MIDI device at the same - time. With the OS-X and Linux ALSA MIDI APIs, it is also possible - to open a virtual input port to which other MIDI software clients - can connect. - - by Gary P. Scavone, 2003-2012. -*/ -/**********************************************************************/ - -// **************************************************************** // -// -// RtMidiIn and RtMidiOut class declarations. -// -// RtMidiIn / RtMidiOut are "controllers" used to select an available -// MIDI input or output interface. They present common APIs for the -// user to call but all functionality is implemented by the classes -// MidiInApi, MidiOutApi and their subclasses. RtMidiIn and RtMidiOut -// each create an instance of a MidiInApi or MidiOutApi subclass based -// on the user's API choice. If no choice is made, they attempt to -// make a "logical" API selection. -// -// **************************************************************** // - -class MidiInApi; -class MidiOutApi; - -class RtMidiIn : public RtMidi -{ - public: - - //! User callback function type definition. - typedef void (*RtMidiCallback)( double timeStamp, std::vector *message, void *userData); - - //! Default constructor that allows an optional api, client name and queue size. - /*! - An exception will be thrown if a MIDI system initialization - error occurs. The queue size defines the maximum number of - messages that can be held in the MIDI queue (when not using a - callback function). If the queue size limit is reached, - incoming messages will be ignored. - - If no API argument is specified and multiple API support has been - compiled, the default order of use is JACK, ALSA (Linux) and CORE, - Jack (OS-X). - */ - RtMidiIn( RtMidi::Api api=UNSPECIFIED, - const std::string clientName = std::string( "RtMidi Input Client"), - unsigned int queueSizeLimit = 100 ); - - //! If a MIDI connection is still open, it will be closed by the destructor. - ~RtMidiIn ( void ) throw(); - - //! Returns the MIDI API specifier for the current instance of RtMidiIn. - RtMidi::Api getCurrentApi( void ) throw(); - - //! Open a MIDI input connection. - /*! - An optional port number greater than 0 can be specified. - Otherwise, the default or first port found is opened. - */ - void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi Input" ) ); - - //! Create a virtual input port, with optional name, to allow software connections (OS X and ALSA only). - /*! - This function creates a virtual MIDI input port to which other - software applications can connect. This type of functionality - is currently only supported by the Macintosh OS-X and Linux ALSA - APIs (the function does nothing for the other APIs). - */ - void openVirtualPort( const std::string portName = std::string( "RtMidi Input" ) ); - - //! Set a callback function to be invoked for incoming MIDI messages. - /*! - The callback function will be called whenever an incoming MIDI - message is received. While not absolutely necessary, it is best - to set the callback function before opening a MIDI port to avoid - leaving some messages in the queue. - */ - void setCallback( RtMidiCallback callback, void *userData = 0 ); - - //! Cancel use of the current callback function (if one exists). - /*! - Subsequent incoming MIDI messages will be written to the queue - and can be retrieved with the \e getMessage function. - */ - void cancelCallback(); - - //! Close an open MIDI connection (if one exists). - void closePort( void ); - - //! Return the number of available MIDI input ports. - unsigned int getPortCount(); - - //! Return a string identifier for the specified MIDI input port number. - /*! - An empty string is returned if an invalid port specifier is provided. - */ - std::string getPortName( unsigned int portNumber = 0 ); - - //! Specify whether certain MIDI message types should be queued or ignored during input. - /*! - o By default, MIDI timing and active sensing messages are ignored - during message input because of their relative high data rates. - MIDI sysex messages are ignored by default as well. Variable - values of "true" imply that the respective message type will be - ignored. - */ - void ignoreTypes( bool midiSysex = true, bool midiTime = true, bool midiSense = true ); - - //! Fill the user-provided vector with the data bytes for the next available MIDI message in the input queue and return the event delta-time in seconds. - /*! - This function returns immediately whether a new message is - available or not. A valid message is indicated by a non-zero - vector size. An exception is thrown if an error occurs during - message retrieval or an input connection was not previously - established. - */ - double getMessage( std::vector *message ); - - protected: - void openMidiApi( RtMidi::Api api, const std::string clientName, unsigned int queueSizeLimit ); - MidiInApi *rtapi_; - -}; - -/**********************************************************************/ -/*! \class RtMidiOut - \brief A realtime MIDI output class. - - This class provides a common, platform-independent API for MIDI - output. It allows one to probe available MIDI output ports, to - connect to one such port, and to send MIDI bytes immediately over - the connection. Create multiple instances of this class to - connect to more than one MIDI device at the same time. With the - OS-X and Linux ALSA MIDI APIs, it is also possible to open a - virtual port to which other MIDI software clients can connect. - - by Gary P. Scavone, 2003-2012. -*/ -/**********************************************************************/ - -class RtMidiOut : public RtMidi -{ - public: - - //! Default constructor that allows an optional client name. - /*! - An exception will be thrown if a MIDI system initialization error occurs. - - If no API argument is specified and multiple API support has been - compiled, the default order of use is JACK, ALSA (Linux) and CORE, - Jack (OS-X). - */ - RtMidiOut( RtMidi::Api api=UNSPECIFIED, - const std::string clientName = std::string( "RtMidi Output Client") ); - - //! The destructor closes any open MIDI connections. - ~RtMidiOut( void ) throw(); - - //! Returns the MIDI API specifier for the current instance of RtMidiOut. - RtMidi::Api getCurrentApi( void ) throw(); - - //! Open a MIDI output connection. - /*! - An optional port number greater than 0 can be specified. - Otherwise, the default or first port found is opened. An - exception is thrown if an error occurs while attempting to make - the port connection. - */ - void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi Output" ) ); - - //! Close an open MIDI connection (if one exists). - void closePort( void ); - - //! Create a virtual output port, with optional name, to allow software connections (OS X and ALSA only). - /*! - This function creates a virtual MIDI output port to which other - software applications can connect. This type of functionality - is currently only supported by the Macintosh OS-X and Linux ALSA - APIs (the function does nothing with the other APIs). An - exception is thrown if an error occurs while attempting to create - the virtual port. - */ - void openVirtualPort( const std::string portName = std::string( "RtMidi Output" ) ); - - //! Return the number of available MIDI output ports. - unsigned int getPortCount( void ); - - //! Return a string identifier for the specified MIDI port type and number. - /*! - An empty string is returned if an invalid port specifier is provided. - */ - std::string getPortName( unsigned int portNumber = 0 ); - - //! Immediately send a single message out an open MIDI output port. - /*! - An exception is thrown if an error occurs during output or an - output connection was not previously established. - */ - void sendMessage( std::vector *message ); - - protected: - void openMidiApi( RtMidi::Api api, const std::string clientName ); - MidiOutApi *rtapi_; -}; - - -// **************************************************************** // -// -// MidiInApi / MidiOutApi class declarations. -// -// Subclasses of MidiInApi and MidiOutApi contain all API- and -// OS-specific code necessary to fully implement the RtMidi API. -// -// Note that MidiInApi and MidiOutApi are abstract base classes and -// cannot be explicitly instantiated. RtMidiIn and RtMidiOut will -// create instances of a MidiInApi or MidiOutApi subclass. -// -// **************************************************************** // - -class MidiInApi -{ - public: - - MidiInApi( unsigned int queueSizeLimit ); - virtual ~MidiInApi( void ); - virtual RtMidi::Api getCurrentApi( void ) = 0; - virtual void openPort( unsigned int portNumber, const std::string portName ) = 0; - virtual void openVirtualPort( const std::string portName ) = 0; - virtual void closePort( void ) = 0; - void setCallback( RtMidiIn::RtMidiCallback callback, void *userData ); - void cancelCallback( void ); - virtual unsigned int getPortCount( void ) = 0; - virtual std::string getPortName( unsigned int portNumber ) = 0; - virtual void ignoreTypes( bool midiSysex, bool midiTime, bool midiSense ); - double getMessage( std::vector *message ); - - // A MIDI structure used internally by the class to store incoming - // messages. Each message represents one and only one MIDI message. - struct MidiMessage { - std::vector bytes; - double timeStamp; - - // Default constructor. - MidiMessage() - :bytes(0), timeStamp(0.0) {} - }; - - struct MidiQueue { - unsigned int front; - unsigned int back; - unsigned int size; - unsigned int ringSize; - MidiMessage *ring; - - // Default constructor. - MidiQueue() - :front(0), back(0), size(0), ringSize(0) {} - }; - - // The RtMidiInData structure is used to pass private class data to - // the MIDI input handling function or thread. - struct RtMidiInData { - MidiQueue queue; - MidiMessage message; - unsigned char ignoreFlags; - bool doInput; - bool firstMessage; - void *apiData; - bool usingCallback; - void *userCallback; - void *userData; - bool continueSysex; - - // Default constructor. - RtMidiInData() - : ignoreFlags(7), doInput(false), firstMessage(true), - apiData(0), usingCallback(false), userCallback(0), userData(0), - continueSysex(false) {} - }; - - protected: - virtual void initialize( const std::string& clientName ) = 0; - RtMidiInData inputData_; - - void *apiData_; - bool connected_; - std::string errorString_; -}; - -class MidiOutApi -{ - public: - - MidiOutApi( void ); - virtual ~MidiOutApi( void ); - virtual RtMidi::Api getCurrentApi( void ) = 0; - virtual void openPort( unsigned int portNumber, const std::string portName ) = 0; - virtual void openVirtualPort( const std::string portName ) = 0; - virtual void closePort( void ) = 0; - virtual unsigned int getPortCount( void ) = 0; - virtual std::string getPortName( unsigned int portNumber ) = 0; - virtual void sendMessage( std::vector *message ) = 0; - - protected: - virtual void initialize( const std::string& clientName ) = 0; - - void *apiData_; - bool connected_; - std::string errorString_; -}; - -// **************************************************************** // -// -// Inline RtMidiIn and RtMidiOut definitions. -// -// **************************************************************** // - -inline RtMidi::Api RtMidiIn :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); } -inline void RtMidiIn :: openPort( unsigned int portNumber, const std::string portName ) { return rtapi_->openPort( portNumber, portName ); } -inline void RtMidiIn :: openVirtualPort( const std::string portName ) { return rtapi_->openVirtualPort( portName ); } -inline void RtMidiIn :: closePort( void ) { return rtapi_->closePort(); } -inline void RtMidiIn :: setCallback( RtMidiCallback callback, void *userData ) { return rtapi_->setCallback( callback, userData ); } -inline void RtMidiIn :: cancelCallback( void ) { return rtapi_->cancelCallback(); } -inline unsigned int RtMidiIn :: getPortCount( void ) { return rtapi_->getPortCount(); } -inline std::string RtMidiIn :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); } -inline void RtMidiIn :: ignoreTypes( bool midiSysex, bool midiTime, bool midiSense ) { return rtapi_->ignoreTypes( midiSysex, midiTime, midiSense ); } -inline double RtMidiIn :: getMessage( std::vector *message ) { return rtapi_->getMessage( message ); } - -inline RtMidi::Api RtMidiOut :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); } -inline void RtMidiOut :: openPort( unsigned int portNumber, const std::string portName ) { return rtapi_->openPort( portNumber, portName ); } -inline void RtMidiOut :: openVirtualPort( const std::string portName ) { return rtapi_->openVirtualPort( portName ); } -inline void RtMidiOut :: closePort( void ) { return rtapi_->closePort(); } -inline unsigned int RtMidiOut :: getPortCount( void ) { return rtapi_->getPortCount(); } -inline std::string RtMidiOut :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); } -inline void RtMidiOut :: sendMessage( std::vector *message ) { return rtapi_->sendMessage( message ); } - -// **************************************************************** // -// -// MidiInApi and MidiOutApi subclass prototypes. -// -// **************************************************************** // - -#if !defined(__LINUX_ALSA__) && !defined(__UNIX_JACK__) && !defined(__MACOSX_CORE__) && !defined(__WINDOWS_MM__) && !defined(__WINDOWS_KS__) - #define __RTMIDI_DUMMY__ -#endif - -#if defined(__MACOSX_CORE__) - -class MidiInCore: public MidiInApi -{ - public: - MidiInCore( const std::string clientName, unsigned int queueSizeLimit ); - ~MidiInCore( void ); - RtMidi::Api getCurrentApi( void ) { return RtMidi::MACOSX_CORE; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); - void closePort( void ); - unsigned int getPortCount( void ); - std::string getPortName( unsigned int portNumber ); - - protected: - void initialize( const std::string& clientName ); -}; - -class MidiOutCore: public MidiOutApi -{ - public: - MidiOutCore( const std::string clientName ); - ~MidiOutCore( void ); - RtMidi::Api getCurrentApi( void ) { return RtMidi::MACOSX_CORE; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); - void closePort( void ); - unsigned int getPortCount( void ); - std::string getPortName( unsigned int portNumber ); - void sendMessage( std::vector *message ); - - protected: - void initialize( const std::string& clientName ); -}; - -#endif - -#if defined(__UNIX_JACK__) - -class MidiInJack: public MidiInApi -{ - public: - MidiInJack( const std::string clientName, unsigned int queueSizeLimit ); - ~MidiInJack( void ); - RtMidi::Api getCurrentApi( void ) { return RtMidi::UNIX_JACK; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); - void closePort( void ); - unsigned int getPortCount( void ); - std::string getPortName( unsigned int portNumber ); - - protected: - void initialize( const std::string& clientName ); -}; - -class MidiOutJack: public MidiOutApi -{ - public: - MidiOutJack( const std::string clientName ); - ~MidiOutJack( void ); - RtMidi::Api getCurrentApi( void ) { return RtMidi::UNIX_JACK; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); - void closePort( void ); - unsigned int getPortCount( void ); - std::string getPortName( unsigned int portNumber ); - void sendMessage( std::vector *message ); - - protected: - void initialize( const std::string& clientName ); -}; - -#endif - -#if defined(__LINUX_ALSA__) - -class MidiInAlsa: public MidiInApi -{ - public: - MidiInAlsa( const std::string clientName, unsigned int queueSizeLimit ); - ~MidiInAlsa( void ); - RtMidi::Api getCurrentApi( void ) { return RtMidi::LINUX_ALSA; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); - void closePort( void ); - unsigned int getPortCount( void ); - std::string getPortName( unsigned int portNumber ); - - protected: - void initialize( const std::string& clientName ); -}; - -class MidiOutAlsa: public MidiOutApi -{ - public: - MidiOutAlsa( const std::string clientName ); - ~MidiOutAlsa( void ); - RtMidi::Api getCurrentApi( void ) { return RtMidi::LINUX_ALSA; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); - void closePort( void ); - unsigned int getPortCount( void ); - std::string getPortName( unsigned int portNumber ); - void sendMessage( std::vector *message ); - - protected: - void initialize( const std::string& clientName ); -}; - -#endif - -#if defined(__WINDOWS_MM__) - -class MidiInWinMM: public MidiInApi -{ - public: - MidiInWinMM( const std::string clientName, unsigned int queueSizeLimit ); - ~MidiInWinMM( void ); - RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_MM; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); - void closePort( void ); - unsigned int getPortCount( void ); - std::string getPortName( unsigned int portNumber ); - - protected: - void initialize( const std::string& clientName ); -}; - -class MidiOutWinMM: public MidiOutApi -{ - public: - MidiOutWinMM( const std::string clientName ); - ~MidiOutWinMM( void ); - RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_MM; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); - void closePort( void ); - unsigned int getPortCount( void ); - std::string getPortName( unsigned int portNumber ); - void sendMessage( std::vector *message ); - - protected: - void initialize( const std::string& clientName ); -}; - -#endif - -#if defined(__WINDOWS_KS__) - -class MidiInWinKS: public MidiInApi -{ - public: - MidiInWinKS( const std::string clientName, unsigned int queueSizeLimit ); - ~MidiInWinKS( void ); - RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_KS; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); - void closePort( void ); - unsigned int getPortCount( void ); - std::string getPortName( unsigned int portNumber ); - - protected: - void initialize( const std::string& clientName ); -}; - -class MidiOutWinKS: public MidiOutApi -{ - public: - MidiOutWinKS( const std::string clientName ); - ~MidiOutWinKS( void ); - RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_KS; }; - void openPort( unsigned int portNumber, const std::string portName ); - void openVirtualPort( const std::string portName ); - void closePort( void ); - unsigned int getPortCount( void ); - std::string getPortName( unsigned int portNumber ); - void sendMessage( std::vector *message ); - - protected: - void initialize( const std::string& clientName ); -}; - -#endif - -#if defined(__RTMIDI_DUMMY__) - -class MidiInDummy: public MidiInApi -{ - public: - MidiInDummy( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) { errorString_ = "MidiInDummy: This class provides no functionality."; RtMidi::error( RtError::WARNING, errorString_ ); }; - RtMidi::Api getCurrentApi( void ) { return RtMidi::RTMIDI_DUMMY; }; - void openPort( unsigned int portNumber, const std::string portName ) {}; - void openVirtualPort( const std::string portName ) {}; - void closePort( void ) {}; - unsigned int getPortCount( void ) { return 0; }; - std::string getPortName( unsigned int portNumber ) { return ""; }; - - protected: - void initialize( const std::string& clientName ) {}; -}; - -class MidiOutDummy: public MidiOutApi -{ - public: - MidiOutDummy( const std::string clientName ) { errorString_ = "MidiOutDummy: This class provides no functionality."; RtMidi::error( RtError::WARNING, errorString_ ); }; - RtMidi::Api getCurrentApi( void ) { return RtMidi::RTMIDI_DUMMY; }; - void openPort( unsigned int portNumber, const std::string portName ) {}; - void openVirtualPort( const std::string portName ) {}; - void closePort( void ) {}; - unsigned int getPortCount( void ) { return 0; }; - std::string getPortName( unsigned int portNumber ) { return ""; }; - void sendMessage( std::vector *message ) {}; - - protected: - void initialize( const std::string& clientName ) {}; -}; - -#endif - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/RtWvIn.h b/source/StkUGens/stk-4.4.4/include/RtWvIn.h deleted file mode 100644 index 7e6beeb38e..0000000000 --- a/source/StkUGens/stk-4.4.4/include/RtWvIn.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef STK_RTWVIN_H -#define STK_RTWVIN_H - -#include "WvIn.h" -#include "RtAudio.h" -#include "Mutex.h" - -namespace stk { - -/***************************************************/ -/*! \class RtWvIn - \brief STK realtime audio (blocking) input class. - - This class provides a simplified interface to RtAudio for realtime - audio input. It is a subclass of WvIn. This class makes use of - RtAudio's callback functionality by creating a large ring-buffer - from which data is read. This class should not be used when - low-latency is desired. - - RtWvIn supports multi-channel data in both interleaved and - non-interleaved formats. It is important to distinguish the - tick() method that computes a single frame (and returns only the - specified sample of a multi-channel frame) from the overloaded one - that takes an StkFrames object for multi-channel and/or - multi-frame data. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class RtWvIn : public WvIn -{ -public: - //! Default constructor. - /*! - The default \e device argument value (zero) will select the - default input device on your system. The first device enumerated - by the underlying audio API is specified with a value of one. The - default buffer size of RT_BUFFER_SIZE is defined in Stk.h. An - StkError will be thrown if an error occurs duing instantiation. - */ - RtWvIn( unsigned int nChannels = 1, StkFloat sampleRate = Stk::sampleRate(), - int device = 0, int bufferFrames = RT_BUFFER_SIZE, int nBuffers = 20 ); - - //! Class destructor. - ~RtWvIn(); - - //! Start the audio input stream. - /*! - The stream is started automatically, if necessary, when a - tick() or tickFrame() method is called. - */ - void start( void ); - - //! Stop the audio input stream. - /*! - It may be necessary to use this method to avoid audio underflow - problems if you wish to temporarily stop audio input. - */ - void stop( void ); - - //! Return the specified channel value of the last computed frame. - /*! - For multi-channel files, use the lastFrame() function to get - all values from the last computed frame. If the device is - stopped, the returned value is 0.0. The \c channel argument must - be less than the number of channels in the audio stream (the first - channel is specified by 0). However, range checking is only - performed if _STK_DEBUG_ is defined during compilation, in which - case an out-of-range value will trigger an StkError exception. - */ - StkFloat lastOut( unsigned int channel = 0 ); - - //! Compute a sample frame and return the specified \c channel value. - /*! - For multi-channel files, use the lastFrame() function to get - all values from the computed frame. If the device is "stopped", - it is "started". The \c channel argument must be less than the - number of channels in the audio stream (the first channel is - specified by 0). However, range checking is only performed if - _STK_DEBUG_ is defined during compilation, in which case an - out-of-range value will trigger an StkError exception. - */ - StkFloat tick( unsigned int channel = 0 ); - - //! Fill the StkFrames argument with computed frames and return the same reference. - /*! - If the device is "stopped", it is "started". The number of - channels in the StkFrames argument must equal the number of - channels specified during instantiation. However, this is only - checked if _STK_DEBUG_ is defined during compilation, in which - case an incompatibility will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames ); - - // This function is not intended for general use but must be - // public for access from the audio callback function. - void fillBuffer( void *buffer, unsigned int nFrames ); - -protected: - - RtAudio adc_; - Mutex mutex_; - bool stopped_; - unsigned int readIndex_; - unsigned int writeIndex_; - unsigned int framesFilled_; - -}; - -inline StkFloat RtWvIn :: lastOut( unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= data_.channels() ) { - oStream_ << "RtWvIn::lastOut(): channel argument and audio stream are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - return lastFrame_[channel]; -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/RtWvOut.h b/source/StkUGens/stk-4.4.4/include/RtWvOut.h deleted file mode 100644 index 7a1d96fbe9..0000000000 --- a/source/StkUGens/stk-4.4.4/include/RtWvOut.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef STK_RTWVOUT_H -#define STK_RTWVOUT_H - -#include "WvOut.h" -#include "RtAudio.h" -#include "Mutex.h" - -namespace stk { - -/***************************************************/ -/*! \class RtWvOut - \brief STK realtime audio (blocking) output class. - - This class provides a simplified interface to RtAudio for realtime - audio output. It is a subclass of WvOut. This class makes use of - RtAudio's callback functionality by creating a large ring-buffer - into which data is written. This class should not be used when - low-latency is desired. - - RtWvOut supports multi-channel data in interleaved format. It is - important to distinguish the tick() method that outputs a single - sample to all channels in a sample frame from the overloaded one - that takes a reference to an StkFrames object for multi-channel - and/or multi-frame data. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class RtWvOut : public WvOut -{ - public: - - //! Default constructor. - /*! - The default \e device argument value (zero) will select the - default output device on your system. The first device enumerated - by the underlying audio API is specified with a value of one. The - default buffer size of RT_BUFFER_SIZE is defined in Stk.h. An - StkError will be thrown if an error occurs duing instantiation. - */ - RtWvOut( unsigned int nChannels = 1, StkFloat sampleRate = Stk::sampleRate(), - int device = 0, int bufferFrames = RT_BUFFER_SIZE, int nBuffers = 20 ); - - //! Class destructor. - ~RtWvOut(); - - //! Start the audio output stream. - /*! - The stream is started automatically, if necessary, when a - tick() method is called. - */ - void start( void ); - - //! Stop the audio output stream. - /*! - It may be necessary to use this method to avoid undesireable - audio buffer cycling if you wish to temporarily stop audio output. - */ - void stop( void ); - - //! Output a single sample to all channels in a sample frame. - /*! - If the device is "stopped", it is "started". - */ - void tick( const StkFloat sample ); - - //! Output the StkFrames data. - /*! - If the device is "stopped", it is "started". The number of - channels in the StkFrames argument must equal the number of - channels specified during instantiation. However, this is only - checked if _STK_DEBUG_ is defined during compilation, in which - case an incompatibility will trigger an StkError exception. - */ - void tick( const StkFrames& frames ); - - // This function is not intended for general use but must be - // public for access from the audio callback function. - int readBuffer( void *buffer, unsigned int frameCount ); - - protected: - - RtAudio dac_; - Mutex mutex_; - bool stopped_; - unsigned int readIndex_; - unsigned int writeIndex_; - long framesFilled_; - unsigned int status_; // running = 0, emptying buffer = 1, finished = 2 - -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/SKINI.msg b/source/StkUGens/stk-4.4.4/include/SKINI.msg deleted file mode 100644 index 27535d9700..0000000000 --- a/source/StkUGens/stk-4.4.4/include/SKINI.msg +++ /dev/null @@ -1,129 +0,0 @@ -/*********************************************************/ -/* - Definition of SKINI Message Types and Special Symbols - Synthesis toolKit Instrument Network Interface - - These symbols should have the form: - - \c __SK__ - - where is the string used in the SKINI stream. - - by Perry R. Cook, 1995-2012. -*/ -/*********************************************************/ - -namespace stk { - -#define NOPE -32767 -#define YEP 1 -#define SK_DBL -32766 -#define SK_INT -32765 -#define SK_STR -32764 -#define __SK_Exit_ 999 - -/***** MIDI COMPATIBLE MESSAGES *****/ -/*** (Status bytes for channel=0) ***/ - -#define __SK_NoteOff_ 128 -#define __SK_NoteOn_ 144 -#define __SK_PolyPressure_ 160 -#define __SK_ControlChange_ 176 -#define __SK_ProgramChange_ 192 -#define __SK_AfterTouch_ 208 -#define __SK_ChannelPressure_ __SK_AfterTouch_ -#define __SK_PitchWheel_ 224 -#define __SK_PitchBend_ __SK_PitchWheel_ -#define __SK_PitchChange_ 49 - -#define __SK_Clock_ 248 -#define __SK_SongStart_ 250 -#define __SK_Continue_ 251 -#define __SK_SongStop_ 252 -#define __SK_ActiveSensing_ 254 -#define __SK_SystemReset_ 255 - -#define __SK_Volume_ 7 -#define __SK_ModWheel_ 1 -#define __SK_Modulation_ __SK_ModWheel_ -#define __SK_Breath_ 2 -#define __SK_FootControl_ 4 -#define __SK_Portamento_ 65 -#define __SK_Balance_ 8 -#define __SK_Pan_ 10 -#define __SK_Sustain_ 64 -#define __SK_Damper_ __SK_Sustain_ -#define __SK_Expression_ 11 - -#define __SK_AfterTouch_Cont_ 128 -#define __SK_ModFrequency_ __SK_Expression_ - -#define __SK_ProphesyRibbon_ 16 -#define __SK_ProphesyWheelUp_ 2 -#define __SK_ProphesyWheelDown_ 3 -#define __SK_ProphesyPedal_ 18 -#define __SK_ProphesyKnob1_ 21 -#define __SK_ProphesyKnob2_ 22 - -/*** Instrument Family Specific ***/ - -#define __SK_NoiseLevel_ __SK_FootControl_ - -#define __SK_PickPosition_ __SK_FootControl_ -#define __SK_StringDamping_ __SK_Expression_ -#define __SK_StringDetune_ __SK_ModWheel_ -#define __SK_BodySize_ __SK_Breath_ -#define __SK_BowPressure_ __SK_Breath_ -#define __SK_BowPosition_ __SK_PickPosition_ -#define __SK_BowBeta_ __SK_BowPosition_ - -#define __SK_ReedStiffness_ __SK_Breath_ -#define __SK_ReedRestPos_ __SK_FootControl_ - -#define __SK_FluteEmbouchure_ __SK_Breath_ -#define __SK_JetDelay_ __SK_FluteEmbouchure_ - -#define __SK_LipTension_ __SK_Breath_ -#define __SK_SlideLength_ __SK_FootControl_ - -#define __SK_StrikePosition_ __SK_PickPosition_ -#define __SK_StickHardness_ __SK_Breath_ - -#define __SK_TrillDepth_ 1051 -#define __SK_TrillSpeed_ 1052 -#define __SK_StrumSpeed_ __SK_TrillSpeed_ -#define __SK_RollSpeed_ __SK_TrillSpeed_ - -#define __SK_FilterQ_ __SK_Breath_ -#define __SK_FilterFreq_ 1062 -#define __SK_FilterSweepRate_ __SK_FootControl_ - -#define __SK_ShakerInst_ 1071 -#define __SK_ShakerEnergy_ __SK_Breath_ -#define __SK_ShakerDamping_ __SK_ModFrequency_ -#define __SK_ShakerNumObjects_ __SK_FootControl_ - -#define __SK_Strumming_ 1090 -#define __SK_NotStrumming_ 1091 -#define __SK_Trilling_ 1092 -#define __SK_NotTrilling_ 1093 -#define __SK_Rolling_ __SK_Strumming_ -#define __SK_NotRolling_ __SK_NotStrumming_ - -#define __SK_PlayerSkill_ 2001 -#define __SK_Chord_ 2002 -#define __SK_ChordOff_ 2003 - -#define __SK_SINGER_FilePath_ 3000 -#define __SK_SINGER_Frequency_ 3001 -#define __SK_SINGER_NoteName_ 3002 -#define __SK_SINGER_Shape_ 3003 -#define __SK_SINGER_Glot_ 3004 -#define __SK_SINGER_VoicedUnVoiced_ 3005 -#define __SK_SINGER_Synthesize_ 3006 -#define __SK_SINGER_Silence_ 3007 -#define __SK_SINGER_VibratoAmt_ __SK_ModWheel_ -#define __SK_SINGER_RndVibAmt_ 3008 -#define __SK_SINGER_VibFreq_ __SK_Expression_ - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/include/SKINI.tbl b/source/StkUGens/stk-4.4.4/include/SKINI.tbl deleted file mode 100644 index 6c9d47a9d4..0000000000 --- a/source/StkUGens/stk-4.4.4/include/SKINI.tbl +++ /dev/null @@ -1,135 +0,0 @@ - -#include "SKINI.msg" - -namespace stk { - -#define __SK_MaxMsgTypes_ 80 - -struct SkiniSpec { char messageString[32]; - long type; - long data2; - long data3; - }; - -/* SEE COMMENT BLOCK AT BOTTOM FOR FIELDS AND USES */ -/* MessageString , type, data2, data3 */ - -struct SkiniSpec skini_msgs[__SK_MaxMsgTypes_] = -{ - {"NoteOff" , __SK_NoteOff_, SK_DBL, SK_DBL}, - {"NoteOn" , __SK_NoteOn_, SK_DBL, SK_DBL}, - {"PolyPressure" , __SK_PolyPressure_, SK_DBL, SK_DBL}, - {"ControlChange" , __SK_ControlChange_, SK_INT, SK_DBL}, - {"ProgramChange" , __SK_ProgramChange_, SK_DBL, NOPE}, - {"AfterTouch" , __SK_AfterTouch_, SK_DBL, NOPE}, - {"ChannelPressure" ,__SK_ChannelPressure_, SK_DBL, NOPE}, - {"PitchWheel" , __SK_PitchWheel_, SK_DBL, NOPE}, - {"PitchBend" , __SK_PitchBend_, SK_DBL, NOPE}, - {"PitchChange" , __SK_PitchChange_, SK_DBL, NOPE}, - - {"Clock" , __SK_Clock_, NOPE, NOPE}, - {"Undefined" , 249, NOPE, NOPE}, - {"SongStart" , __SK_SongStart_, NOPE, NOPE}, - {"Continue" , __SK_Continue_, NOPE, NOPE}, - {"SongStop" , __SK_SongStop_, NOPE, NOPE}, - {"Undefined" , 253, NOPE, NOPE}, - {"ActiveSensing" , __SK_ActiveSensing_, NOPE, NOPE}, - {"SystemReset" , __SK_SystemReset_, NOPE, NOPE}, - - {"Volume" , __SK_ControlChange_, __SK_Volume_ , SK_DBL}, - {"ModWheel" , __SK_ControlChange_, __SK_ModWheel_ , SK_DBL}, - {"Modulation" , __SK_ControlChange_, __SK_Modulation_ , SK_DBL}, - {"Breath" , __SK_ControlChange_, __SK_Breath_ , SK_DBL}, - {"FootControl" , __SK_ControlChange_, __SK_FootControl_ , SK_DBL}, - {"Portamento" , __SK_ControlChange_, __SK_Portamento_ , SK_DBL}, - {"Balance" , __SK_ControlChange_, __SK_Balance_ , SK_DBL}, - {"Pan" , __SK_ControlChange_, __SK_Pan_ , SK_DBL}, - {"Sustain" , __SK_ControlChange_, __SK_Sustain_ , SK_DBL}, - {"Damper" , __SK_ControlChange_, __SK_Damper_ , SK_DBL}, - {"Expression" , __SK_ControlChange_, __SK_Expression_ , SK_DBL}, - - {"NoiseLevel" , __SK_ControlChange_, __SK_NoiseLevel_ , SK_DBL}, - {"PickPosition" , __SK_ControlChange_, __SK_PickPosition_ , SK_DBL}, - {"StringDamping" , __SK_ControlChange_, __SK_StringDamping_ , SK_DBL}, - {"StringDetune" , __SK_ControlChange_, __SK_StringDetune_ , SK_DBL}, - {"BodySize" , __SK_ControlChange_, __SK_BodySize_ , SK_DBL}, - {"BowPressure" , __SK_ControlChange_, __SK_BowPressure_ , SK_DBL}, - {"BowPosition" , __SK_ControlChange_, __SK_BowPosition_ , SK_DBL}, - {"BowBeta" , __SK_ControlChange_, __SK_BowBeta_ , SK_DBL}, - - {"ReedStiffness" , __SK_ControlChange_, __SK_ReedStiffness_ , SK_DBL}, - {"ReedRestPos" , __SK_ControlChange_, __SK_ReedRestPos_ , SK_DBL}, - {"FluteEmbouchure" , __SK_ControlChange_, __SK_FluteEmbouchure_ , SK_DBL}, - {"LipTension" , __SK_ControlChange_, __SK_LipTension_ , SK_DBL}, - {"StrikePosition" , __SK_ControlChange_, __SK_StrikePosition_ , SK_DBL}, - {"StickHardness" , __SK_ControlChange_, __SK_StickHardness_ , SK_DBL}, - - {"TrillDepth" , __SK_ControlChange_, __SK_TrillDepth_ , SK_DBL}, - {"TrillSpeed" , __SK_ControlChange_, __SK_TrillSpeed_ , SK_DBL}, - - {"Strumming" , __SK_ControlChange_, __SK_Strumming_ , 127 }, - {"NotStrumming" , __SK_ControlChange_, __SK_Strumming_ , 0 }, - - {"PlayerSkill" , __SK_ControlChange_, __SK_PlayerSkill_ , SK_DBL}, - - {"Chord" , __SK_Chord_ , SK_DBL, SK_STR}, - {"ChordOff" , __SK_ChordOff_ , SK_DBL, NOPE}, - - {"ShakerInst" , __SK_ControlChange_, __SK_ShakerInst_ , SK_DBL}, - {"Maraca" , __SK_ControlChange_, __SK_ShakerInst_ , 0 }, - {"Sekere" , __SK_ControlChange_, __SK_ShakerInst_ , 1 }, - {"Cabasa" , __SK_ControlChange_, __SK_ShakerInst_ , 2 }, - {"Bamboo" , __SK_ControlChange_, __SK_ShakerInst_ , 3 }, - {"Waterdrp" , __SK_ControlChange_, __SK_ShakerInst_ , 4 }, - {"Tambourn" , __SK_ControlChange_, __SK_ShakerInst_ , 5 }, - {"Sleighbl" , __SK_ControlChange_, __SK_ShakerInst_ , 6 }, - {"Guiro" , __SK_ControlChange_, __SK_ShakerInst_ , 7 }, - - {"OpenFile" , 256, SK_STR, NOPE}, - {"SetPath" , 257, SK_STR, NOPE}, - - {"FilePath" , __SK_SINGER_FilePath_ , SK_STR, NOPE}, - {"Frequency" , __SK_SINGER_Frequency_ , SK_STR, NOPE}, - {"NoteName" , __SK_SINGER_NoteName_ , SK_STR, NOPE}, - {"VocalShape" , __SK_SINGER_Shape_ , SK_STR, NOPE}, - {"Glottis" , __SK_SINGER_Glot_ , SK_STR, NOPE}, - {"VoicedUnVoiced" , __SK_SINGER_VoicedUnVoiced_, SK_DBL, SK_STR}, - {"Synthesize" , __SK_SINGER_Synthesize_ , SK_STR, NOPE}, - {"Silence" , __SK_SINGER_Silence_ , SK_STR, NOPE}, - {"RndVibAmt" , __SK_SINGER_RndVibAmt_ , SK_STR, NOPE}, - {"VibratoAmt" , __SK_ControlChange_ ,__SK_SINGER_VibratoAmt_,SK_DBL}, - {"VibFreq" , __SK_ControlChange_ ,__SK_SINGER_VibFreq_ ,SK_DBL} -}; - - -/** FORMAT: *************************************************************/ -/* */ -/* MessageStr$ , type, data2, data3, */ -/* */ -/* type is the message type sent back from the SKINI line parser. */ -/* data is either */ -/* NOPE : field not used, specifically, there aren't going */ -/* to be any more fields on this line. So if there */ -/* is NOPE in data2, data3 won't even be checked */ -/* SK_INT : byte (actually scanned as 32 bit signed integer) */ -/* 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_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 intelligent handler. For example, */ -/* MIDI SYSEX (system exclusive) messages of up to */ -/* 256 bytes can be read as space-delimited integers */ -/* into the SK_STR buffer. Longer bulk dumps, */ -/* soundfiles, etc. should be handled as a new */ -/* message type pointing to a FileName stored in the */ -/* SK_STR field, or as a new type of multi-line */ -/* message. */ -/* */ -/*************************************************************************/ - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/include/Sampler.h b/source/StkUGens/stk-4.4.4/include/Sampler.h deleted file mode 100644 index 3954876434..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Sampler.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef STK_SAMPLER_H -#define STK_SAMPLER_H - -#include "Instrmnt.h" -#include "ADSR.h" -#include "FileLoop.h" -#include "OnePole.h" - -namespace stk { - -/***************************************************/ -/*! \class Sampler - \brief STK sampling synthesis abstract base class. - - This instrument provides an ADSR envelope, a one-pole filter, and - structures for an arbitrary number of attack and looped files. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Sampler : public Instrmnt -{ - public: - //! Default constructor. - Sampler( void ); - - //! Class destructor. - virtual ~Sampler( void ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set instrument parameters for a particular frequency. - virtual void setFrequency( StkFloat frequency ) = 0; - - //! Initiate the envelopes with a key-on event and reset the attack waves. - void keyOn( void ); - - //! Signal a key-off event to the envelopes. - void keyOff( void ); - - //! Stop a note with the given amplitude (speed of decay). - virtual void noteOff( StkFloat amplitude ); - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - virtual void controlChange( int number, StkFloat value ) = 0; - - //! Compute and return one output sample. - virtual StkFloat tick( unsigned int channel = 0 ) = 0; - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0; - - protected: - - ADSR adsr_; - std::vector attacks_; - std::vector loops_; - OnePole filter_; - StkFloat baseFrequency_; - std::vector attackRatios_; - std::vector loopRatios_; - StkFloat attackGain_; - StkFloat loopGain_; - -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/Saxofony.h b/source/StkUGens/stk-4.4.4/include/Saxofony.h deleted file mode 100644 index 1a888370f0..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Saxofony.h +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef STK_SAXOFONY_H -#define STK_SAXOFONY_H - -#include "Instrmnt.h" -#include "DelayL.h" -#include "ReedTable.h" -#include "OneZero.h" -#include "Envelope.h" -#include "Noise.h" -#include "SineWave.h" - -namespace stk { - -/***************************************************/ -/*! \class Saxofony - \brief STK faux conical bore reed instrument class. - - This class implements a "hybrid" digital - waveguide instrument that can generate a - variety of wind-like sounds. It has also been - referred to as the "blowed string" model. The - waveguide section is essentially that of a - string, with one rigid and one lossy - termination. The non-linear function is a - reed table. The string can be "blown" at any - point between the terminations, though just as - with strings, it is impossible to excite the - system at either end. If the excitation is - placed at the string mid-point, the sound is - that of a clarinet. At points closer to the - "bridge", the sound is closer to that of a - saxophone. See Scavone (2002) for more details. - - This is a digital waveguide model, making its - use possibly subject to patents held by Stanford - University, Yamaha, and others. - - Control Change Numbers: - - Reed Stiffness = 2 - - Reed Aperture = 26 - - Noise Gain = 4 - - Blow Position = 11 - - Vibrato Frequency = 29 - - Vibrato Gain = 1 - - Breath Pressure = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Saxofony : public Instrmnt -{ - public: - //! Class constructor, taking the lowest desired playing frequency. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - Saxofony( StkFloat lowestFrequency ); - - //! Class destructor. - ~Saxofony( void ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Set the "blowing" position between the air column terminations (0.0 - 1.0). - void setBlowPosition( StkFloat aPosition ); - - //! Apply breath pressure to instrument with given amplitude and rate of increase. - void startBlowing( StkFloat amplitude, StkFloat rate ); - - //! Decrease breath pressure with given rate of decrease. - void stopBlowing( StkFloat rate ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Stop a note with the given amplitude (speed of decay). - void noteOff( StkFloat amplitude ); - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - void controlChange( int number, StkFloat value ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - DelayL delays_[2]; - ReedTable reedTable_; - OneZero filter_; - Envelope envelope_; - Noise noise_; - SineWave vibrato_; - - StkFloat outputGain_; - StkFloat noiseGain_; - StkFloat vibratoGain_; - StkFloat position_; - -}; - -inline StkFloat Saxofony :: tick( unsigned int ) -{ - StkFloat pressureDiff; - StkFloat breathPressure; - StkFloat temp; - - // Calculate the breath pressure (envelope + noise + vibrato) - breathPressure = envelope_.tick(); - breathPressure += breathPressure * noiseGain_ * noise_.tick(); - breathPressure += breathPressure * vibratoGain_ * vibrato_.tick(); - - temp = -0.95 * filter_.tick( delays_[0].lastOut() ); - lastFrame_[0] = temp - delays_[1].lastOut(); - pressureDiff = breathPressure - lastFrame_[0]; - delays_[1].tick( temp ); - delays_[0].tick( breathPressure - (pressureDiff * reedTable_.tick(pressureDiff)) - temp ); - - lastFrame_[0] *= outputGain_; - return lastFrame_[0]; -} - -inline StkFrames& Saxofony :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Saxofony::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i -#include - -namespace stk { - -/***************************************************/ -/*! \class Shakers - \brief PhISEM and PhOLIES class. - - PhISEM (Physically Informed Stochastic Event Modeling) is an - algorithmic approach for simulating collisions of multiple - independent sound producing objects. This class is a meta-model - that can simulate a Maraca, Sekere, Cabasa, Bamboo Wind Chimes, - Water Drops, Tambourine, Sleighbells, and a Guiro. - - PhOLIES (Physically-Oriented Library of Imitated Environmental - Sounds) is a similar approach for the synthesis of environmental - sounds. This class implements simulations of breaking sticks, - crunchy snow (or not), a wrench, sandpaper, and more. - - Control Change Numbers: - - Shake Energy = 2 - - System Decay = 4 - - Number Of Objects = 11 - - Resonance Frequency = 1 - - Shake Energy = 128 - - Instrument Selection = 1071 - - Maraca = 0 - - Cabasa = 1 - - Sekere = 2 - - Tambourine = 3 - - Sleigh Bells = 4 - - Bamboo Chimes = 5 - - Sand Paper = 6 - - Coke Can = 7 - - Sticks = 8 - - Crunch = 9 - - Big Rocks = 10 - - Little Rocks = 11 - - Next Mug = 12 - - Penny + Mug = 13 - - Nickle + Mug = 14 - - Dime + Mug = 15 - - Quarter + Mug = 16 - - Franc + Mug = 17 - - Peso + Mug = 18 - - Guiro = 19 - - Wrench = 20 - - Water Drops = 21 - - Tuned Bamboo Chimes = 22 - - by Perry R. Cook with updates by Gary Scavone, 1995-2012. -*/ -/***************************************************/ - -class Shakers : public Instrmnt -{ - public: - //! Class constructor taking instrument type argument. - Shakers( int type = 0 ); - - //! Start a note with the given instrument and amplitude. - /*! - Use the instrument numbers above, converted to frequency values - as if MIDI note numbers, to select a particular instrument. - */ - void noteOn( StkFloat instrument, StkFloat amplitude ); - - //! Stop a note with the given amplitude (speed of decay). - void noteOff( StkFloat amplitude ); - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - void controlChange( int number, StkFloat value ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - struct BiQuad { - StkFloat gain; - StkFloat b[3]; - StkFloat a[3]; // a0 term assumed equal to 1.0 - StkFloat inputs[3]; - StkFloat outputs[3]; - - // Default constructor. - BiQuad() - { - gain = 0.0; - for ( int i=0; i<3; i++ ) { - b[i] = 0.0; - a[i] = 0.0; - inputs[i] = 0.0; - outputs[i] = 0.0; - } - } - }; - - protected: - - void setType( int type ); - void setResonance( BiQuad &filter, StkFloat frequency, StkFloat radius ); - StkFloat tickResonance( BiQuad &filter, StkFloat input ); - void setEqualization( StkFloat b0, StkFloat b1, StkFloat b2 ); - StkFloat tickEqualize( StkFloat input ); - int randomInt( int max ); - StkFloat randomFloat( StkFloat max = 1.0 ); - StkFloat noise( void ); - void waterDrop( void ); - - int shakerType_; - unsigned int nResonances_; - StkFloat shakeEnergy_; - StkFloat soundDecay_; - StkFloat systemDecay_; - StkFloat nObjects_; - StkFloat sndLevel_; - StkFloat baseGain_; - StkFloat currentGain_; - StkFloat baseDecay_; - StkFloat baseObjects_; - StkFloat decayScale_; - BiQuad equalizer_; - StkFloat ratchetCount_; - StkFloat ratchetDelta_; - StkFloat baseRatchetDelta_; - int lastRatchetValue_; - - std::vector< BiQuad > filters_; - std::vector< StkFloat > baseFrequencies_; - std::vector< StkFloat > baseRadii_; - std::vector< bool > doVaryFrequency_; - std::vector< StkFloat > tempFrequencies_; - StkFloat varyFactor_; -}; - -inline void Shakers :: setResonance( BiQuad &filter, StkFloat frequency, StkFloat radius ) -{ - filter.a[1] = -2.0 * radius * cos( TWO_PI * frequency / Stk::sampleRate()); - filter.a[2] = radius * radius; -} - -inline StkFloat Shakers :: tickResonance( BiQuad &filter, StkFloat input ) -{ - filter.outputs[0] = input * filter.gain * currentGain_; - filter.outputs[0] -= filter.a[1] * filter.outputs[1] + filter.a[2] * filter.outputs[2]; - filter.outputs[2] = filter.outputs[1]; - filter.outputs[1] = filter.outputs[0]; - return filter.outputs[0]; -} - -inline void Shakers :: setEqualization( StkFloat b0, StkFloat b1, StkFloat b2 ) -{ - equalizer_.b[0] = b0; - equalizer_.b[1] = b1; - equalizer_.b[2] = b2; -} - -inline StkFloat Shakers :: tickEqualize( StkFloat input ) -{ - equalizer_.inputs[0] = input; - equalizer_.outputs[0] = equalizer_.b[0] * equalizer_.inputs[0] + equalizer_.b[1] * equalizer_.inputs[1] + equalizer_.b[2] * equalizer_.inputs[2]; - equalizer_.inputs[2] = equalizer_.inputs[1]; - equalizer_.inputs[1] = equalizer_.inputs[0]; - return equalizer_.outputs[0]; -} - -inline int Shakers :: randomInt( int max ) // Return random integer between 0 and max-1 -{ - return (int) ((float)max * rand() / (RAND_MAX + 1.0) ); -} - -inline StkFloat Shakers :: randomFloat( StkFloat max ) // Return random float between 0.0 and max -{ - return (StkFloat) (max * rand() / (RAND_MAX + 1.0) ); -} - -inline StkFloat Shakers :: noise( void ) // Return random StkFloat float between -1.0 and 1.0 -{ - return ( (StkFloat) ( 2.0 * rand() / (RAND_MAX + 1.0) ) - 1.0 ); -} - -const StkFloat MIN_ENERGY = 0.001; -const StkFloat WATER_FREQ_SWEEP = 1.0001; - -inline void Shakers :: waterDrop( void ) -{ - if ( randomInt( 32767 ) < nObjects_) { - sndLevel_ = shakeEnergy_; - unsigned int j = randomInt( 3 ); - if ( j == 0 && filters_[0].gain == 0.0 ) { // don't change unless fully decayed - tempFrequencies_[0] = baseFrequencies_[1] * (0.75 + (0.25 * noise())); - filters_[0].gain = fabs( noise() ); - } - else if (j == 1 && filters_[1].gain == 0.0) { - tempFrequencies_[1] = baseFrequencies_[1] * (1.0 + (0.25 * noise())); - filters_[1].gain = fabs( noise() ); - } - else if ( filters_[2].gain == 0.0 ) { - tempFrequencies_[2] = baseFrequencies_[1] * (1.25 + (0.25 * noise())); - filters_[2].gain = fabs( noise() ); - } - } - - // Sweep center frequencies. - for ( unsigned int i=0; i<3; i++ ) { // WATER_RESONANCES = 3 - filters_[i].gain *= baseRadii_[i]; - if ( filters_[i].gain > 0.001 ) { - tempFrequencies_[i] *= WATER_FREQ_SWEEP; - filters_[i].a[1] = -2.0 * baseRadii_[i] * cos( TWO_PI * tempFrequencies_[i] / Stk::sampleRate() ); - } - else - filters_[i].gain = 0.0; - } -} - -inline StkFloat Shakers :: tick( unsigned int ) -{ - unsigned int iTube = 0; - StkFloat input = 0.0; - if ( shakerType_ == 19 || shakerType_ == 20 ) { - if ( ratchetCount_ <= 0 ) return lastFrame_[0] = 0.0; - - shakeEnergy_ -= ( ratchetDelta_ + ( 0.002 * shakeEnergy_ ) ); - if ( shakeEnergy_ < 0.0 ) { - shakeEnergy_ = 1.0; - ratchetCount_--; - } - - if ( randomFloat( 1024 ) < nObjects_ ) - sndLevel_ += shakeEnergy_ * shakeEnergy_; - - // Sound is enveloped noise - input = sndLevel_ * noise() * shakeEnergy_; - } - else { - if ( shakeEnergy_ < MIN_ENERGY ) return lastFrame_[0] = 0.0; - - // Exponential system decay - shakeEnergy_ *= systemDecay_; - - // Random events - if ( shakerType_ == 21 ) { - waterDrop(); - input = sndLevel_; - } - else { - if ( randomFloat( 1024.0 ) < nObjects_ ) { - sndLevel_ += shakeEnergy_; - input = sndLevel_; - // Vary resonance frequencies if specified. - for ( unsigned int i=0; i 1.0 ) - // std::cout << "lastOutput = " << lastFrame_[0] << std::endl; - - return lastFrame_[0]; -} - -inline StkFrames& Shakers :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Shakers::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; itick(); - biquad_.tick( noise_.tick() ); - lastFrame_[0] += (1.0 - loopGain_) * biquad_.lastOut(); - lastFrame_[0] = filter_.tick( lastFrame_[0] ); - lastFrame_[0] *= adsr_.tick(); - return lastFrame_[0]; -} - -inline StkFrames& Simple :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Simple::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i= TABLE_SIZE ) - time_ -= TABLE_SIZE; - - iIndex_ = (unsigned int) time_; - alpha_ = time_ - iIndex_; - StkFloat tmp = table_[ iIndex_ ]; - tmp += ( alpha_ * ( table_[ iIndex_ + 1 ] - tmp ) ); - - // Increment time, which can be negative. - time_ += rate_; - - lastFrame_[0] = tmp; - return lastFrame_[0]; -} - -inline StkFrames& SineWave :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "SineWave::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - StkFloat tmp = 0.0; - - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= TABLE_SIZE ) - time_ -= TABLE_SIZE; - - iIndex_ = (unsigned int) time_; - alpha_ = time_ - iIndex_; - tmp = table_[ iIndex_ ]; - tmp += ( alpha_ * ( table_[ iIndex_ + 1 ] - tmp ) ); - *samples = tmp; - - // Increment time, which can be negative. - time_ += rate_; - } - - lastFrame_[0] = tmp; - return frames; -} - -} // stk namespace - -#endif - diff --git a/source/StkUGens/stk-4.4.4/include/SingWave.h b/source/StkUGens/stk-4.4.4/include/SingWave.h deleted file mode 100644 index 22bbf1022e..0000000000 --- a/source/StkUGens/stk-4.4.4/include/SingWave.h +++ /dev/null @@ -1,136 +0,0 @@ -#ifndef STK_SINGWAVE_H -#define STK_SINGWAVE_H - -#include "FileLoop.h" -#include "Modulate.h" -#include "Envelope.h" - -namespace stk { - -/***************************************************/ -/*! \class SingWave - \brief STK "singing" looped soundfile class. - - This class loops a specified soundfile and modulates it both - periodically and randomly to produce a pitched musical sound, like - a simple voice or violin. In general, it is not be used alone - because of "munchkinification" effects from pitch shifting. - Within STK, it is used as an excitation source for other - instruments. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class SingWave : public Generator -{ - public: - //! Class constructor taking filename argument. - /*! - An StkError will be thrown if the file is not found, its format - is unknown, or a read error occurs. If the soundfile has no - header, the second argument should be \e true and the file data - will be assumed to consist of 16-bit signed integers in big-endian - byte order at a sample rate of 22050 Hz. - */ - SingWave( std::string fileName, bool raw = false ); - - //! Class destructor. - ~SingWave( void ); - - //! Reset file to beginning. - void reset( void ) { wave_.reset(); lastFrame_[0] = 0.0; }; - - //! Normalize the file to a maximum of +-1.0. - void normalize( void ) { wave_.normalize(); }; - - //! Normalize the file to a maximum of \e +- peak. - void normalize( StkFloat peak ) { wave_.normalize( peak ); }; - - //! Set looping parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Set the vibrato frequency in Hz. - void setVibratoRate( StkFloat rate ) { modulator_.setVibratoRate( rate ); }; - - //! Set the vibrato gain. - void setVibratoGain( StkFloat gain ) { modulator_.setVibratoGain( gain ); }; - - //! Set the random-ness amount. - void setRandomGain( StkFloat gain ) { modulator_.setRandomGain( gain ); }; - - //! Set the sweep rate. - void setSweepRate( StkFloat rate ) { sweepRate_ = rate; }; - - //! Set the gain rate. - void setGainRate( StkFloat rate ) { envelope_.setRate( rate ); }; - - //! Set the gain target value. - void setGainTarget( StkFloat target ) { envelope_.setTarget( target ); }; - - //! Start a note. - void noteOn( void ) { envelope_.keyOn(); }; - - //! Stop a note. - void noteOff( void ) { envelope_.keyOff(); }; - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Compute and return one output sample. - StkFloat tick( void ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - FileLoop wave_; - Modulate modulator_; - Envelope envelope_; - Envelope pitchEnvelope_; - StkFloat rate_; - StkFloat sweepRate_; - -}; - -inline StkFloat SingWave :: tick( void ) -{ - // Set the wave rate. - StkFloat newRate = pitchEnvelope_.tick(); - newRate += newRate * modulator_.tick(); - wave_.setRate( newRate ); - - lastFrame_[0] = wave_.tick(); - lastFrame_[0] *= envelope_.tick(); - - return lastFrame_[0]; -} - -inline StkFrames& SingWave :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "SingWave::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i - -namespace stk { - -/***************************************************/ -/*! \class Sitar - \brief STK sitar string model class. - - This class implements a sitar plucked string - physical model based on the Karplus-Strong - algorithm. - - This is a digital waveguide model, making its - use possibly subject to patents held by - Stanford University, Yamaha, and others. - There exist at least two patents, assigned to - Stanford, bearing the names of Karplus and/or - Strong. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Sitar : public Instrmnt -{ - public: - //! Class constructor, taking the lowest desired playing frequency. - Sitar( StkFloat lowestFrequency = 8.0 ); - - //! Class destructor. - ~Sitar( void ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Pluck the string with the given amplitude using the current frequency. - void pluck( StkFloat amplitude ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Stop a note with the given amplitude (speed of decay). - void noteOff( StkFloat amplitude ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - DelayA delayLine_; - OneZero loopFilter_; - Noise noise_; - ADSR envelope_; - - StkFloat loopGain_; - StkFloat amGain_; - StkFloat delay_; - StkFloat targetDelay_; - -}; - -inline StkFloat Sitar :: tick( unsigned int ) -{ - if ( fabs(targetDelay_ - delay_) > 0.001 ) { - if ( targetDelay_ < delay_ ) - delay_ *= 0.99999; - else - delay_ *= 1.00001; - delayLine_.setDelay( delay_ ); - } - - lastFrame_[0] = delayLine_.tick( loopFilter_.tick( delayLine_.lastOut() * loopGain_ ) + - (amGain_ * envelope_.tick() * noise_.tick())); - - return lastFrame_[0]; -} - -inline StkFrames& Sitar :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Sitar::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i -#include -#include - -namespace stk { - -/***************************************************/ -/*! \class Skini - \brief STK SKINI parsing class - - This class parses SKINI formatted text - messages. It can be used to parse individual - messages or it can be passed an entire file. - The SKINI specification is Perry's and his - alone, but it's all text so it shouldn't be too - hard to figure out. - - SKINI (Synthesis toolKit Instrument Network - Interface) is like MIDI, but allows for - floating-point control changes, note numbers, - etc. The following example causes a sharp - middle C to be played with a velocity of 111.132: - - \code - noteOn 60.01 111.132 - \endcode - - \sa \ref skini - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Skini : public Stk -{ - public: - - //! A message structure to store and pass parsed SKINI messages. - struct Message { - long type; /*!< The message type, as defined in SKINI.msg. */ - long channel; /*!< The message channel (not limited to 16!). */ - StkFloat time; /*!< The message time stamp in seconds (delta or absolute). */ - std::vector floatValues; /*!< The message values read as floats (values are type-specific). */ - std::vector intValues; /*!< The message values read as ints (number and values are type-specific). */ - std::string remainder; /*!< Any remaining message data, read as ascii text. */ - - // Default constructor. - Message() - :type(0), channel(0), time(0.0), floatValues(2), intValues(2) {} - }; - - //! Default constructor. - Skini(); - - //! Class destructor - ~Skini(); - - //! Set a SKINI formatted file for reading. - /*! - If the file is successfully opened, this function returns \e - true. Otherwise, \e false is returned. - */ - bool setFile( std::string fileName ); - - //! Parse the next file message (if a file is loaded) and return the message type. - /*! - This function skips over lines in a file which cannot be - parsed. A type value equal to zero in the referenced message - structure (and the returned value) indicates the file end is - reached or no file is open for reading. - */ - long nextMessage( Skini::Message& message ); - - //! Attempt to parse the given string and returning the message type. - /*! - A type value equal to zero in the referenced message structure - indicates an invalid message. - */ - long parseString( std::string& line, Skini::Message& message ); - - //! Return the SKINI type string for the given type value. - static std::string whatsThisType(long type); - - //! Return the SKINI controller string for the given controller number. - static std::string whatsThisController(long number); - - protected: - - void tokenize( const std::string& str, std::vector& tokens, const std::string& delimiters ); - - std::ifstream file_; -}; - -//! A static table of equal-tempered MIDI to frequency (Hz) values. -static const double Midi2Pitch[129] = { - 8.176, 8.662, 9.177, 9.723, 10.301, 10.913, 11.562, 12.25, - 12.978, 13.75, 14.568, 15.434, 16.352, 17.324, 18.354, 19.445, - 20.602, 21.827, 23.125, 24.50, 25.957, 27.50, 29.135, 30.868, - 32.703, 34.648, 36.708, 38.891, 41.203, 43.654, 46.249, 49.0, - 51.913, 55.0, 58.271, 61.735, 65.406, 69.296, 73.416, 77.782, - 82.407, 87.307, 92.499, 97.999, 103.826, 110.0, 116.541, 123.471, - 130.813, 138.591, 146.832, 155.563, 164.814, 174.614, 184.997, 195.998, - 207.652, 220.0, 233.082, 246.942, 261.626, 277.183, 293.665, 311.127, - 329.628, 349.228, 369.994, 391.995, 415.305, 440.0, 466.164, 493.883, - 523.251, 554.365, 587.33, 622.254, 659.255, 698.456, 739.989, 783.991, - 830.609, 880.0, 932.328, 987.767, 1046.502, 1108.731, 1174.659, 1244.508, - 1318.51, 1396.913, 1479.978, 1567.982, 1661.219, 1760.0, 1864.655, 1975.533, - 2093.005, 2217.461, 2349.318, 2489.016, 2637.02, 2793.826, 2959.955, 3135.963, - 3322.438, 3520.0, 3729.31, 3951.066, 4186.009, 4434.922, 4698.636, 4978.032, - 5274.041, 5587.652, 5919.911, 6271.927, 6644.875, 7040.0, 7458.62, 7902.133, - 8372.018, 8869.844, 9397.273, 9956.063, 10548.082, 11175.303, 11839.822, 12543.854, - 13289.75}; - -} // stk namespace - -#endif - - diff --git a/source/StkUGens/stk-4.4.4/include/Socket.h b/source/StkUGens/stk-4.4.4/include/Socket.h deleted file mode 100644 index 50226d65a2..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Socket.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef STK_SOCKET_H -#define STK_SOCKET_H - -#include "Stk.h" - -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - #include - #include - #include - #include - #include - #include - #include - #include - -#elif defined(__OS_WINDOWS__) - - #include - -#endif - -namespace stk { - -/***************************************************/ -/*! \class Socket - \brief STK internet socket abstract base class. - - This class provides common functionality for TCP and UDP internet - socket server and client subclasses. This class also provides a - number of static functions for use with external socket - descriptors. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Socket : public Stk -{ - public: - - enum ProtocolType { - PROTO_TCP, - PROTO_UDP - }; - - //! Class constructor - Socket(); - - //! Class destructor. - virtual ~Socket(); - - //! Close the socket. - static void close( int socket ); - - //! Return the socket descriptor. - int id( void ) const { return soket_; }; - - //! Return the socket port number. - int port( void ) const { return port_; }; - - //! Returns true if the socket descriptor is valid. - static bool isValid( int socket ) { return socket != -1; }; - - //! If enable = false, the socket is set to non-blocking mode. When first created, sockets are by default in blocking mode. - static void setBlocking( int socket, bool enable ); - - //! Write a buffer over the socket connection. Returns the number of bytes written or -1 if an error occurs. - virtual int writeBuffer(const void *buffer, long bufferSize, int flags = 0) = 0; - - //! Read an input buffer, up to length \e bufferSize. Returns the number of bytes read or -1 if an error occurs. - virtual int readBuffer(void *buffer, long bufferSize, int flags = 0) = 0; - - //! Write a buffer via the specified socket. Returns the number of bytes written or -1 if an error occurs. - static int writeBuffer(int socket, const void *buffer, long bufferSize, int flags ); - - //! Read a buffer via the specified socket. Returns the number of bytes read or -1 if an error occurs. - static int readBuffer(int socket, void *buffer, long bufferSize, int flags ); - - protected: - - int soket_; - int port_; - -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/Sphere.h b/source/StkUGens/stk-4.4.4/include/Sphere.h deleted file mode 100644 index fadd7c0baa..0000000000 --- a/source/StkUGens/stk-4.4.4/include/Sphere.h +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef STK_SPHERE_H -#define STK_SPHERE_H - -#include "Stk.h" -#include "Vector3D.h" - -namespace stk { - -/***************************************************/ -/*! \class Sphere - \brief STK sphere class. - - This class implements a spherical ball with - radius, mass, position, and velocity parameters. - - by Perry R. Cook, 1995-2012. -*/ -/***************************************************/ - -class Sphere : public Stk -{ -public: - //! Constructor taking an initial radius value. - Sphere( StkFloat radius = 1.0 ) { radius_ = radius; mass_ = 1.0; }; - - //! Set the 3D center position of the sphere. - void setPosition( StkFloat x, StkFloat y, StkFloat z ) { position_.setXYZ(x, y, z); }; - - //! Set the 3D velocity of the sphere. - void setVelocity( StkFloat x, StkFloat y, StkFloat z ) { velocity_.setXYZ(x, y, z); }; - - //! Set the radius of the sphere. - void setRadius( StkFloat radius ) { radius_ = radius; }; - - //! Set the mass of the sphere. - void setMass( StkFloat mass ) { mass_ = mass; }; - - //! Get the current position of the sphere as a 3D vector. - Vector3D* getPosition( void ) { return &position_; }; - - //! Get the relative position of the given point to the sphere as a 3D vector. - Vector3D* getRelativePosition( Vector3D *position ); - - //! Set the velcoity of the sphere as a 3D vector. - StkFloat getVelocity( Vector3D* velocity ); - - //! Returns the distance from the sphere boundary to the given position (< 0 if inside). - StkFloat isInside( Vector3D *position ); - - //! Get the current sphere radius. - StkFloat getRadius( void ) { return radius_; }; - - //! Get the current sphere mass. - StkFloat getMass( void ) { return mass_; }; - - //! Increase the current sphere velocity by the given 3D components. - void addVelocity( StkFloat x, StkFloat y, StkFloat z ); - - //! Move the sphere for the given time increment. - void tick( StkFloat timeIncrement ); - -private: - Vector3D position_; - Vector3D velocity_; - Vector3D workingVector_; - StkFloat radius_; - StkFloat mass_; -}; - -inline void Sphere::tick( StkFloat timeIncrement ) -{ - position_.setX(position_.getX() + (timeIncrement * velocity_.getX())); - position_.setY(position_.getY() + (timeIncrement * velocity_.getY())); - position_.setZ(position_.getZ() + (timeIncrement * velocity_.getZ())); -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/StifKarp.h b/source/StkUGens/stk-4.4.4/include/StifKarp.h deleted file mode 100644 index a54a8ddaea..0000000000 --- a/source/StkUGens/stk-4.4.4/include/StifKarp.h +++ /dev/null @@ -1,154 +0,0 @@ -#ifndef STK_STIFKARP_H -#define STK_STIFKARP_H - -#include "Instrmnt.h" -#include "DelayL.h" -#include "DelayA.h" -#include "OneZero.h" -#include "Noise.h" -#include "BiQuad.h" - -namespace stk { - -/***************************************************/ -/*! \class StifKarp - \brief STK plucked stiff string instrument. - - This class implements a simple plucked string - algorithm (Karplus Strong) with enhancements - (Jaffe-Smith, Smith, and others), including - string stiffness and pluck position controls. - The stiffness is modeled with allpass filters. - - This is a digital waveguide model, making its - use possibly subject to patents held by - Stanford University, Yamaha, and others. - - Control Change Numbers: - - Pickup Position = 4 - - String Sustain = 11 - - String Stretch = 1 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class StifKarp : public Instrmnt -{ - public: - //! Class constructor, taking the lowest desired playing frequency. - StifKarp( StkFloat lowestFrequency = 8.0 ); - - //! Class destructor. - ~StifKarp( void ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Set the stretch "factor" of the string (0.0 - 1.0). - void setStretch( StkFloat stretch ); - - //! Set the pluck or "excitation" position along the string (0.0 - 1.0). - void setPickupPosition( StkFloat position ); - - //! Set the base loop gain. - /*! - The actual loop gain is set according to the frequency. - Because of high-frequency loop filter roll-off, higher - frequency settings have greater loop gains. - */ - void setBaseLoopGain( StkFloat aGain ); - - //! Pluck the string with the given amplitude using the current frequency. - void pluck( StkFloat amplitude ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Stop a note with the given amplitude (speed of decay). - void noteOff( StkFloat amplitude ); - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - void controlChange( int number, StkFloat value ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - DelayA delayLine_; - DelayL combDelay_; - OneZero filter_; - Noise noise_; - BiQuad biquad_[4]; - - unsigned long length_; - StkFloat loopGain_; - StkFloat baseLoopGain_; - StkFloat lastFrequency_; - StkFloat lastLength_; - StkFloat stretching_; - StkFloat pluckAmplitude_; - StkFloat pickupPosition_; - -}; - -inline StkFloat StifKarp :: tick( unsigned int ) -{ - StkFloat temp = delayLine_.lastOut() * loopGain_; - - // Calculate allpass stretching. - for (int i=0; i<4; i++) - temp = biquad_[i].tick(temp); - - // Moving average filter. - temp = filter_.tick(temp); - - lastFrame_[0] = delayLine_.tick(temp); - lastFrame_[0] = lastFrame_[0] - combDelay_.tick( lastFrame_[0] ); - return lastFrame_[0]; -} - -inline StkFrames& StifKarp :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "StifKarp::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i -#include -#include -#include -//#include - -/*! \namespace stk - \brief The STK namespace. - - Most Stk classes are defined within the STK namespace. Exceptions - to this include the classes RtAudio, RtMidi, and RtError. -*/ -namespace stk { - -/***************************************************/ -/*! \class Stk - \brief STK base class - - Nearly all STK classes inherit from this class. - The global sample rate and rawwave path variables - can be queried and modified via Stk. In addition, - this class provides error handling and - byte-swapping functions. - - 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. STK currently runs - with realtime support (audio and MIDI) on Linux, Macintosh OS X, - and Windows computer platforms. Generic, non-realtime support has - been tested under NeXTStep, Sun, and other platforms and should - work with any standard C++ compiler. - - STK WWW site: http://ccrma.stanford.edu/software/stk/ - - The Synthesis ToolKit in C++ (STK) - Copyright (c) 1995-2012 Perry R. Cook and Gary P. Scavone - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - Any person wishing to distribute modifications to the Software is - asked to send the modifications to the original developer so that - they can be incorporated into the canonical version. This is, - however, not a binding provision of this license. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/***************************************************/ - -//#define _STK_DEBUG_ - -// Most data in STK is passed and calculated with the -// following user-definable floating-point type. You -// can change this to "float" if you prefer or perhaps -// a "long double" in the future. -typedef double StkFloat; - -//! STK error handling class. -/*! - This is a fairly abstract exception handling class. There could - be sub-classes to take care of more specific error conditions ... or - not. -*/ -class StkError -{ -public: - enum Type { - STATUS, - WARNING, - DEBUG_PRINT, - MEMORY_ALLOCATION, - MEMORY_ACCESS, - FUNCTION_ARGUMENT, - FILE_NOT_FOUND, - FILE_UNKNOWN_FORMAT, - FILE_ERROR, - PROCESS_THREAD, - PROCESS_SOCKET, - PROCESS_SOCKET_IPADDR, - AUDIO_SYSTEM, - MIDI_SYSTEM, - UNSPECIFIED - }; - -protected: - std::string message_; - Type type_; - -public: - //! The constructor. - StkError(const std::string& message, Type type = StkError::UNSPECIFIED) - : message_(message), type_(type) {} - - //! The destructor. - virtual ~StkError(void) {}; - - //! Prints thrown error message to stderr. - virtual void printMessage(void) { std::cerr << '\n' << message_ << "\n\n"; } - - //! Returns the thrown error message type. - virtual const Type& getType(void) { return type_; } - - //! Returns the thrown error message string. - virtual const std::string& getMessage(void) { return message_; } - - //! Returns the thrown error message as a C string. - virtual const char *getMessageCString(void) { return message_.c_str(); } -}; - - -class Stk -{ -public: - - typedef unsigned long StkFormat; - static const StkFormat STK_SINT8; /*!< -128 to +127 */ - static const StkFormat STK_SINT16; /*!< -32768 to +32767 */ - static const StkFormat STK_SINT24; /*!< Lower 3 bytes of 32-bit signed integer. */ - static const StkFormat STK_SINT32; /*!< -2147483648 to +2147483647. */ - static const StkFormat STK_FLOAT32; /*!< Normalized between plus/minus 1.0. */ - static const StkFormat STK_FLOAT64; /*!< Normalized between plus/minus 1.0. */ - - //! Static method that returns the current STK sample rate. - static StkFloat sampleRate( void ) { return srate_; } - - //! Static method that sets the STK sample rate. - /*! - The sample rate set using this method is queried by all STK - classes that depend on its value. It is initialized to the - default SRATE set in Stk.h. Many STK classes use the sample rate - during instantiation. Therefore, if you wish to use a rate that - is different from the default rate, it is imperative that it be - set \e BEFORE STK objects are instantiated. A few classes that - make use of the global STK sample rate are automatically notified - when the rate changes so that internal class data can be - appropriately updated. However, this has not been fully - implemented. Specifically, classes that appropriately update - their own data when either a setFrequency() or noteOn() function - is called do not currently receive the automatic notification of - rate change. If the user wants a specific class instance to - ignore such notifications, perhaps in a multi-rate context, the - function Stk::ignoreSampleRateChange() should be called. - */ - static void setSampleRate( StkFloat rate ); - - //! A function to enable/disable the automatic updating of class data when the STK sample rate changes. - /*! - This function allows the user to enable or disable class data - updates in response to global sample rate changes on a class by - class basis. - */ - void ignoreSampleRateChange( bool ignore = true ) { ignoreSampleRateChange_ = ignore; }; - - //! Static method that returns the current rawwave path. - static std::string rawwavePath(void) { return rawwavepath_; } - - //! Static method that sets the STK rawwave path. - static void setRawwavePath( std::string path ); - - //! Static method that byte-swaps a 16-bit data type. - static void swap16( unsigned char *ptr ); - - //! Static method that byte-swaps a 32-bit data type. - static void swap32( unsigned char *ptr ); - - //! Static method that byte-swaps a 64-bit data type. - static void swap64( unsigned char *ptr ); - - //! Static cross-platform method to sleep for a number of milliseconds. - static void sleep( unsigned long milliseconds ); - - //! Static method to check whether a value is within a specified range. - static bool inRange( StkFloat value, StkFloat min, StkFloat max ) { - if ( value < min ) return false; - else if ( value > max ) return false; - else return true; - } - - //! Static function for error reporting and handling using c-strings. - static void handleError( const char *message, StkError::Type type ); - - //! Static function for error reporting and handling using c++ strings. - static void handleError( std::string message, StkError::Type type ); - - //! Toggle display of WARNING and STATUS messages. - static void showWarnings( bool status ) { showWarnings_ = status; } - - //! Toggle display of error messages before throwing exceptions. - static void printErrors( bool status ) { printErrors_ = status; } - -private: - static StkFloat srate_; - static std::string rawwavepath_; - static bool showWarnings_; - static bool printErrors_; - static std::vector alertList_; - -protected: - - static std::ostringstream oStream_; - bool ignoreSampleRateChange_; - - //! Default constructor. - Stk( void ); - - //! Class destructor. - virtual ~Stk( void ); - - //! This function should be implemented in subclasses that depend on the sample rate. - virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate ); - - //! Add class pointer to list for sample rate change notification. - void addSampleRateAlert( Stk *ptr ); - - //! Remove class pointer from list for sample rate change notification. - void removeSampleRateAlert( Stk *ptr ); - - //! Internal function for error reporting that assumes message in \c oStream_ variable. - void handleError( StkError::Type type ); -}; - - -/***************************************************/ -/*! \class StkFrames - \brief An STK class to handle vectorized audio data. - - This class can hold single- or multi-channel audio data. The data - type is always StkFloat and the channel format is always - interleaved. In an effort to maintain efficiency, no - out-of-bounds checks are performed in this class unless - _STK_DEBUG_ is defined. - - Internally, the data is stored in a one-dimensional C array. An - indexing operator is available to set and retrieve data values. - Alternately, one can use pointers to access the data, using the - index operator to get an address for a particular location in the - data: - - StkFloat* ptr = &myStkFrames[0]; - - Note that this class can also be used as a table with interpolating - lookup. - - Possible future improvements in this class could include functions - to convert to and return other data types. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class StkFrames -{ -public: - - //! The default constructor initializes the frame data structure to size zero. - StkFrames( unsigned int nFrames = 0, unsigned int nChannels = 0 ); - - //! Overloaded constructor that initializes the frame data to the specified size with \c value. - StkFrames( const StkFloat& value, unsigned int nFrames, unsigned int nChannels ); - - //! The destructor. - ~StkFrames(); - - // A copy constructor. - StkFrames( const StkFrames& f ); - - // Assignment operator that returns a reference to self. - StkFrames& operator= ( const StkFrames& f ); - - //! Subscript operator that returns a reference to element \c n of self. - /*! - The result can be used as an lvalue. This reference is valid - until the resize function is called or the array is destroyed. The - index \c n must be between 0 and size less one. No range checking - is performed unless _STK_DEBUG_ is defined. - */ - StkFloat& operator[] ( size_t n ); - - //! Subscript operator that returns the value at element \c n of self. - /*! - The index \c n must be between 0 and size less one. No range - checking is performed unless _STK_DEBUG_ is defined. - */ - StkFloat operator[] ( size_t n ) const; - - //! Assignment by sum operator into self. - /*! - The dimensions of the argument are expected to be the same as - self. No range checking is performed unless _STK_DEBUG_ is - defined. - */ - void operator+= ( StkFrames& f ); - - //! Assignment by product operator into self. - /*! - The dimensions of the argument are expected to be the same as - self. No range checking is performed unless _STK_DEBUG_ is - defined. - */ - void operator*= ( StkFrames& f ); - - //! Channel / frame subscript operator that returns a reference. - /*! - The result can be used as an lvalue. This reference is valid - until the resize function is called or the array is destroyed. The - \c frame index must be between 0 and frames() - 1. The \c channel - index must be between 0 and channels() - 1. No range checking is - performed unless _STK_DEBUG_ is defined. - */ - StkFloat& operator() ( size_t frame, unsigned int channel ); - - //! Channel / frame subscript operator that returns a value. - /*! - The \c frame index must be between 0 and frames() - 1. The \c - channel index must be between 0 and channels() - 1. No range checking - is performed unless _STK_DEBUG_ is defined. - */ - StkFloat operator() ( size_t frame, unsigned int channel ) const; - - //! Return an interpolated value at the fractional frame index and channel. - /*! - This function performs linear interpolation. The \c frame - index must be between 0.0 and frames() - 1. The \c channel index - must be between 0 and channels() - 1. No range checking is - performed unless _STK_DEBUG_ is defined. - */ - StkFloat interpolate( StkFloat frame, unsigned int channel = 0 ) const; - - //! Returns the total number of audio samples represented by the object. - size_t size() const { return size_; }; - - //! Returns \e true if the object size is zero and \e false otherwise. - bool empty() const; - - //! Resize self to represent the specified number of channels and frames. - /*! - Changes the size of self based on the number of frames and - channels. No element assignment is performed. No memory - deallocation occurs if the new size is smaller than the previous - size. Further, no new memory is allocated when the new size is - smaller or equal to a previously allocated size. - */ - void resize( size_t nFrames, unsigned int nChannels = 1 ); - - //! Resize self to represent the specified number of channels and frames and perform element initialization. - /*! - Changes the size of self based on the number of frames and - channels, and assigns \c value to every element. No memory - deallocation occurs if the new size is smaller than the previous - size. Further, no new memory is allocated when the new size is - smaller or equal to a previously allocated size. - */ - void resize( size_t nFrames, unsigned int nChannels, StkFloat value ); - - //! Return the number of channels represented by the data. - unsigned int channels( void ) const { return nChannels_; }; - - //! Return the number of sample frames represented by the data. - unsigned int frames( void ) const { return nFrames_; }; - - //! Set the sample rate associated with the StkFrames data. - /*! - By default, this value is set equal to the current STK sample - rate at the time of instantiation. - */ - void setDataRate( StkFloat rate ) { dataRate_ = rate; }; - - //! Return the sample rate associated with the StkFrames data. - /*! - By default, this value is set equal to the current STK sample - rate at the time of instantiation. - */ - StkFloat dataRate( void ) const { return dataRate_; }; - -private: - - StkFloat *data_; - StkFloat dataRate_; - size_t nFrames_; - unsigned int nChannels_; - size_t size_; - size_t bufferSize_; - -}; - -inline bool StkFrames :: empty() const -{ - if ( size_ > 0 ) return false; - else return true; -} - -inline StkFloat& StkFrames :: operator[] ( size_t n ) -{ -#if defined(_STK_DEBUG_) - if ( n >= size_ ) { - std::ostringstream error; - error << "StkFrames::operator[]: invalid index (" << n << ") value!"; - Stk::handleError( error.str(), StkError::MEMORY_ACCESS ); - } -#endif - - return data_[n]; -} - -inline StkFloat StkFrames :: operator[] ( size_t n ) const -{ -#if defined(_STK_DEBUG_) - if ( n >= size_ ) { - std::ostringstream error; - error << "StkFrames::operator[]: invalid index (" << n << ") value!"; - Stk::handleError( error.str(), StkError::MEMORY_ACCESS ); - } -#endif - - return data_[n]; -} - -inline StkFloat& StkFrames :: operator() ( size_t frame, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( frame >= nFrames_ || channel >= nChannels_ ) { - std::ostringstream error; - error << "StkFrames::operator(): invalid frame (" << frame << ") or channel (" << channel << ") value!"; - Stk::handleError( error.str(), StkError::MEMORY_ACCESS ); - } -#endif - - return data_[ frame * nChannels_ + channel ]; -} - -inline StkFloat StkFrames :: operator() ( size_t frame, unsigned int channel ) const -{ -#if defined(_STK_DEBUG_) - if ( frame >= nFrames_ || channel >= nChannels_ ) { - std::ostringstream error; - error << "StkFrames::operator(): invalid frame (" << frame << ") or channel (" << channel << ") value!"; - Stk::handleError( error.str(), StkError::MEMORY_ACCESS ); - } -#endif - - return data_[ frame * nChannels_ + channel ]; -} - -inline void StkFrames :: operator+= ( StkFrames& f ) -{ -#if defined(_STK_DEBUG_) - if ( f.frames() != nFrames_ || f.channels() != nChannels_ ) { - std::ostringstream error; - error << "StkFrames::operator+=: frames argument must be of equal dimensions!"; - Stk::handleError( error.str(), StkError::MEMORY_ACCESS ); - } -#endif - - StkFloat *fptr = &f[0]; - StkFloat *dptr = data_; - for ( unsigned int i=0; i taps = std::vector( 1, 0 ), unsigned long maxDelay = 4095 ); - - //! Class destructor. - ~TapDelay(); - - //! Set the maximum delay-line length. - /*! - This method should generally only be used during initial setup - of the delay line. If it is used between calls to the tick() - function, without a call to clear(), a signal discontinuity will - likely occur. If the current maximum length is greater than the - new length, no change will be made. - */ - void setMaximumDelay( unsigned long delay ); - - //! Set the delay-line tap lengths. - /*! - The valid range for each tap length is from 0 to the maximum delay-line length. - */ - void setTapDelays( std::vector taps ); - - //! Return the current delay-line length. - std::vector getTapDelays( void ) const { return delays_; }; - - //! Return the specified tap value of the last computed frame. - /*! - Use the lastFrame() function to get all tap values from the - last computed frame. The \c tap argument must be less than the - number of delayline taps (the first tap is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFloat lastOut( unsigned int tap = 0 ) const; - - //! Input one sample to the delayline and return outputs at all tap positions. - /*! - The StkFrames argument reference is returned. The output - values are ordered according to the tap positions set using the - setTapDelays() function (no sorting is performed). The StkFrames - argument must contain at least as many channels as the number of - taps. However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFloat input, StkFrames& outputs ); - - //! Take a channel of the StkFrames object as inputs to the filter and write outputs back to the same object. - /*! - The StkFrames argument reference is returned. The output - values are ordered according to the tap positions set using the - setTapDelays() function (no sorting is performed). The StkFrames - argument must contain at least as many channels as the number of - taps. However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the filter and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. The output values - are ordered according to the tap positions set using the - setTapDelays() function (no sorting is performed). The \c - iChannel argument must be less than the number of channels in - the \c iFrames argument (the first channel is specified by 0). - The \c oFrames argument must contain at least as many channels as - the number of taps. However, range checking is only performed if - _STK_DEBUG_ is defined during compilation, in which case an - out-of-range value will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0 ); - - protected: - - unsigned long inPoint_; - std::vector outPoint_; - std::vector delays_; - -}; - -inline StkFloat TapDelay :: lastOut( unsigned int tap ) const -{ -#if defined(_STK_DEBUG_) - if ( tap >= lastFrame_.size() ) ) { - oStream_ << "TapDelay::lastOut(): tap argument and number of taps are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - return lastFrame_[tap]; -} - -inline StkFrames& TapDelay :: tick( StkFloat input, StkFrames& outputs ) -{ -#if defined(_STK_DEBUG_) - if ( outputs.channels() < outPoint_.size() ) { - oStream_ << "TapDelay::tick(): number of taps > channels in StkFrames argument!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - inputs_[inPoint_++] = input * gain_; - - // Check for end condition - if ( inPoint_ == inputs_.size() ) - inPoint_ = 0; - - // Read out next values - StkFloat *outs = &outputs[0]; - for ( unsigned int i=0; i= frames.channels() ) { - oStream_ << "TapDelay::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - if ( frames.channels() < outPoint_.size() ) { - oStream_ << "TapDelay::tick(): number of taps > channels in StkFrames argument!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &frames[channel]; - StkFloat *oSamples = &frames[0]; - unsigned int j, iHop = frames.channels(), oHop = frames.channels() - outPoint_.size(); - for ( unsigned int i=0; i= iFrames.channels() ) { - oStream_ << "TapDelay::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - if ( oFrames.channels() < outPoint_.size() ) { - oStream_ << "TapDelay::tick(): number of taps > channels in output StkFrames argument!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[0]; - unsigned int j, iHop = iFrames.channels(), oHop = oFrames.channels() - outPoint_.size(); - for ( unsigned int i=0; i - #define THREAD_TYPE - typedef pthread_t THREAD_HANDLE; - typedef void * THREAD_RETURN; - typedef void * (*THREAD_FUNCTION)(void *); - -#elif defined(__OS_WINDOWS__) - - #include - #include - #define THREAD_TYPE __stdcall - typedef unsigned long THREAD_HANDLE; - typedef unsigned THREAD_RETURN; - typedef unsigned (__stdcall *THREAD_FUNCTION)(void *); - -#endif - -namespace stk { - -/***************************************************/ -/*! \class Thread - \brief STK thread class. - - This class provides a uniform interface for cross-platform - threads. On unix systems, the pthread library is used. Under - Windows, the C runtime threadex functions are used. - - Each instance of the Thread class can be used to control a single - thread process. Routines are provided to signal cancelation - and/or joining with a thread, though it is not possible for this - class to know the running status of a thread once it is started. - - For cross-platform compatability, thread functions should be - declared as follows: - - THREAD_RETURN THREAD_TYPE thread_function(void *ptr) - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Thread : public Stk -{ - public: - //! Default constructor. - Thread(); - - //! The class destructor does not attempt to cancel or join a thread. - ~Thread(); - - //! Begin execution of the thread \e routine. Upon success, true is returned. - /*! - A data pointer can be supplied to the thread routine via the - optional \e ptr argument. If the thread cannot be created, the - return value is false. - */ - bool start( THREAD_FUNCTION routine, void * ptr = NULL ); - - //! Signal cancellation of a thread routine, returning \e true on success. - /*! - This function only signals thread cancellation. It does not - wait to verify actual routine termination. A \e true return value - only signifies that the cancellation signal was properly executed, - not thread cancellation. A thread routine may need to make use of - the testCancel() function to specify a cancellation point. - */ - bool cancel(void); - - //! Block the calling routine indefinitely until the thread terminates. - /*! - This function suspends execution of the calling routine until the thread has terminated. It will return immediately if the thread was already terminated. A \e true return value signifies successful termination. A \e false return value indicates a problem with the wait call. - */ - bool wait(void); - - //! Create a cancellation point within a thread routine. - /*! - This function call checks for thread cancellation, allowing the - thread to be terminated if a cancellation request was previously - signaled. - */ - void testCancel(void); - - protected: - - THREAD_HANDLE thread_; - -}; - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/TubeBell.h b/source/StkUGens/stk-4.4.4/include/TubeBell.h deleted file mode 100644 index c14d072129..0000000000 --- a/source/StkUGens/stk-4.4.4/include/TubeBell.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef STK_TUBEBELL_H -#define STK_TUBEBELL_H - -#include "FM.h" - -namespace stk { - -/***************************************************/ -/*! \class TubeBell - \brief STK tubular bell (orchestral chime) FM - synthesis instrument. - - This class implements two simple FM Pairs - summed together, also referred to as algorithm - 5 of the TX81Z. - - \code - Algorithm 5 is : 4->3--\ - + --> Out - 2->1--/ - \endcode - - Control Change Numbers: - - Modulator Index One = 2 - - Crossfade of Outputs = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class TubeBell : public FM -{ - public: - //! Class constructor. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - TubeBell( void ); - - //! Class destructor. - ~TubeBell( void ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - -}; - -inline StkFloat TubeBell :: tick( unsigned int ) -{ - StkFloat temp, temp2; - - temp = gains_[1] * adsr_[1]->tick() * waves_[1]->tick(); - temp = temp * control1_; - - waves_[0]->addPhaseOffset( temp ); - waves_[3]->addPhaseOffset( twozero_.lastOut() ); - temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick(); - twozero_.tick( temp ); - - waves_[2]->addPhaseOffset( temp ); - temp = ( 1.0 - (control2_ * 0.5)) * gains_[0] * adsr_[0]->tick() * waves_[0]->tick(); - temp += control2_ * 0.5 * gains_[2] * adsr_[2]->tick() * waves_[2]->tick(); - - // Calculate amplitude modulation and apply it to output. - temp2 = vibrato_.tick() * modDepth_; - temp = temp * (1.0 + temp2); - - lastFrame_[0] = temp * 0.5; - return lastFrame_[0]; -} - -inline StkFrames& TubeBell :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "TubeBell::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i coefficients ); - - //! Return an StkFrames reference to the last output sample frame. - //const StkFrames& lastFrame( void ) const { return lastFrame_; }; - - //! Return the last computed output value. - // StkFloat lastOut( void ) { return lastFrame_[0]; }; - StkFloat lastOut( void ) { return lastOutput_; }; - - //! Compute and return one output sample. - StkFloat tick( StkFloat input ); - - //! Take a channel of the \c iFrames object as inputs to the class and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the effect and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - - protected: - - DelayA delayLine_; - DelayL combDelay_; - Fir loopFilter_; - - StkFloat lastOutput_; - StkFloat frequency_; - StkFloat loopGain_; - StkFloat pluckPosition_; -}; - -inline StkFloat Twang :: tick( StkFloat input ) -{ - lastOutput_ = delayLine_.tick( input + loopFilter_.tick( delayLine_.lastOut() ) ); - lastOutput_ -= combDelay_.tick( lastOutput_ ); // comb filtering on output - lastOutput_ *= 0.5; - - return lastOutput_; -} - -inline StkFrames& Twang :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "Twang::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "Twang::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i= 1.0. The - \e frequency value should be between zero and half the sample rate. - For a better resonance filter, use a BiQuad filter. \sa BiQuad - filter class - */ - void setResonance(StkFloat frequency, StkFloat radius, bool normalize = false); - - //! Return the last computed output value. - StkFloat lastOut( void ) const { return lastFrame_[0]; }; - - //! Input one sample to the filter and return one output. - StkFloat tick( StkFloat input ); - - //! Take a channel of the StkFrames object as inputs to the filter and replace with corresponding outputs. - /*! - The StkFrames argument reference is returned. The \c channel - argument must be less than the number of channels in the - StkFrames argument (the first channel is specified by 0). - However, range checking is only performed if _STK_DEBUG_ is - defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - //! Take a channel of the \c iFrames object as inputs to the filter and write outputs to the \c oFrames object. - /*! - The \c iFrames object reference is returned. Each channel - argument must be less than the number of channels in the - corresponding StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 ); - - protected: - - virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate ); -}; - -inline StkFloat TwoPole :: tick( StkFloat input ) -{ - inputs_[0] = gain_ * input; - lastFrame_[0] = b_[0] * inputs_[0] - a_[1] * outputs_[1] - a_[2] * outputs_[2]; - outputs_[2] = outputs_[1]; - outputs_[1] = lastFrame_[0]; - - return lastFrame_[0]; -} - -inline StkFrames& TwoPole :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "TwoPole::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "TwoPole::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i= frames.channels() ) { - oStream_ << "TwoZero::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "TwoZero::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i - -namespace stk { - -/***************************************************/ -/*! \class Vector3D - \brief STK 3D vector class. - - This class implements a three-dimensional vector. - - by Perry R. Cook, 1995-2012. -*/ -/***************************************************/ - -class Vector3D : public Stk -{ - -public: - //! Default constructor taking optional initial X, Y, and Z values. - Vector3D( StkFloat x = 0.0, StkFloat y = 0.0, StkFloat z = 0.0 ) { setXYZ( x, y, z ); }; - - //! Get the current X value. - StkFloat getX( void ) { return X_; }; - - //! Get the current Y value. - StkFloat getY( void ) { return Y_; }; - - //! Get the current Z value. - StkFloat getZ( void ) { return Z_; }; - - //! Calculate the vector length. - StkFloat getLength( void ); - - //! Set the X, Y, and Z values simultaniously. - void setXYZ( StkFloat x, StkFloat y, StkFloat z ) { X_ = x; Y_ = y; Z_ = z; }; - - //! Set the X value. - void setX( StkFloat x ) { X_ = x; }; - - //! Set the Y value. - void setY( StkFloat y ) { Y_ = y; }; - - //! Set the Z value. - void setZ( StkFloat z ) { Z_ = z; }; - -protected: - StkFloat X_; - StkFloat Y_; - StkFloat Z_; -}; - -inline StkFloat Vector3D :: getLength( void ) -{ - StkFloat temp; - temp = X_ * X_; - temp += Y_ * Y_; - temp += Z_ * Z_; - temp = sqrt( temp ); - return temp; -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/include/VoicForm.h b/source/StkUGens/stk-4.4.4/include/VoicForm.h deleted file mode 100644 index da6891a7a6..0000000000 --- a/source/StkUGens/stk-4.4.4/include/VoicForm.h +++ /dev/null @@ -1,161 +0,0 @@ -#ifndef STK_VOICFORM_H -#define STK_VOICFORM_H - -#include "Instrmnt.h" -#include "Envelope.h" -#include "Noise.h" -#include "SingWave.h" -#include "FormSwep.h" -#include "OnePole.h" -#include "OneZero.h" - -namespace stk { - -/***************************************************/ -/*! \class VoicForm - \brief Four formant synthesis instrument. - - This instrument contains an excitation singing - wavetable (looping wave with random and - periodic vibrato, smoothing on frequency, - etc.), excitation noise, and four sweepable - complex resonances. - - Measured formant data is included, and enough - data is there to support either parallel or - cascade synthesis. In the floating point case - cascade synthesis is the most natural so - that's what you'll find here. - - Control Change Numbers: - - Voiced/Unvoiced Mix = 2 - - Vowel/Phoneme Selection = 4 - - Vibrato Frequency = 11 - - Vibrato Gain = 1 - - Loudness (Spectral Tilt) = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class VoicForm : public Instrmnt -{ - public: - //! Class constructor. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - VoicForm( void ); - - //! Class destructor. - ~VoicForm( void ); - - //! Reset and clear all internal state. - void clear( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Set instrument parameters for the given phoneme. Returns false if phoneme not found. - bool setPhoneme( const char* phoneme ); - - //! Set the voiced component gain. - void setVoiced( StkFloat vGain ) { voiced_->setGainTarget(vGain); }; - - //! Set the unvoiced component gain. - void setUnVoiced( StkFloat nGain ) { noiseEnv_.setTarget(nGain); }; - - //! Set the sweep rate for a particular formant filter (0-3). - void setFilterSweepRate( unsigned int whichOne, StkFloat rate ); - - //! Set voiced component pitch sweep rate. - void setPitchSweepRate( StkFloat rate ) { voiced_->setSweepRate(rate); }; - - //! Start the voice. - void speak( void ) { voiced_->noteOn(); }; - - //! Stop the voice. - void quiet( void ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Stop a note with the given amplitude (speed of decay). - void noteOff( StkFloat amplitude ) { this->quiet(); }; - - //! Perform the control change specified by \e number and \e value (0.0 - 128.0). - void controlChange( int number, StkFloat value ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - -protected: - - SingWave *voiced_; - Noise noise_; - Envelope noiseEnv_; - FormSwep filters_[4]; - OnePole onepole_; - OneZero onezero_; - -}; - -inline StkFloat VoicForm :: tick( unsigned int ) -{ - StkFloat temp; - temp = onepole_.tick( onezero_.tick( voiced_->tick() ) ); - temp += noiseEnv_.tick() * noise_.tick(); - lastFrame_[0] = filters_[0].tick(temp); - lastFrame_[0] += filters_[1].tick(temp); - lastFrame_[0] += filters_[2].tick(temp); - lastFrame_[0] += filters_[3].tick(temp); - /* - temp += noiseEnv_.tick() * noise_.tick(); - lastFrame_[0] = filters_[0].tick(temp); - lastFrame_[0] = filters_[1].tick(lastFrame_[0]); - lastFrame_[0] = filters_[2].tick(lastFrame_[0]); - lastFrame_[0] = filters_[3].tick(lastFrame_[0]); - */ - return lastFrame_[0]; -} - -inline StkFrames& VoicForm :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "VoicForm::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i - -namespace stk { - -/***************************************************/ -/*! \class Voicer - \brief STK voice manager class. - - This class can be used to manage a group of STK instrument - classes. Individual voices can be controlled via unique note - tags. Instrument groups can be controlled by group number. - - A previously constructed STK instrument class is linked with a - voice manager using the addInstrument() function. An optional - group number argument can be specified to the addInstrument() - function as well (default group = 0). The voice manager does not - delete any instrument instances ... it is the responsibility of - the user to allocate and deallocate all instruments. - - The tick() function returns the mix of all sounding voices. Each - noteOn returns a unique tag (credits to the NeXT MusicKit), so you - can send control changes to specific voices within an ensemble. - Alternately, control changes can be sent to all voices in a given - group. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Voicer : public Stk -{ - public: - //! Class constructor taking an optional note decay time (in seconds). - Voicer( StkFloat decayTime = 0.2 ); - - //! Add an instrument with an optional group number to the voice manager. - /*! - A set of instruments can be grouped by group number and - controlled via the functions that take a group number argument. - */ - void addInstrument( Instrmnt *instrument, int group=0 ); - - //! Remove the given instrument pointer from the voice manager's control. - /*! - It is important that any instruments which are to be deleted by - the user while the voice manager is running be first removed from - the manager's control via this function!! - */ - void removeInstrument( Instrmnt *instrument ); - - //! Initiate a noteOn event with the given note number and amplitude and return a unique note tag. - /*! - Send the noteOn message to the first available unused voice. - If all voices are sounding, the oldest voice is interrupted and - sent the noteOn message. If the optional group argument is - non-zero, only voices in that group are used. If no voices are - found for a specified non-zero group value, the function returns - -1. The amplitude value should be in the range 0.0 - 128.0. - */ - long noteOn( StkFloat noteNumber, StkFloat amplitude, int group=0 ); - - //! Send a noteOff to all voices having the given noteNumber and optional group (default group = 0). - /*! - The amplitude value should be in the range 0.0 - 128.0. - */ - void noteOff( StkFloat noteNumber, StkFloat amplitude, int group=0 ); - - //! Send a noteOff to the voice with the given note tag. - /*! - The amplitude value should be in the range 0.0 - 128.0. - */ - void noteOff( long tag, StkFloat amplitude ); - - //! Send a frequency update message to all voices assigned to the optional group argument (default group = 0). - /*! - The \e noteNumber argument corresponds to a MIDI note number, though it is a floating-point value and can range beyond the normal 0-127 range. - */ - void setFrequency( StkFloat noteNumber, int group=0 ); - - //! Send a frequency update message to the voice with the given note tag. - /*! - The \e noteNumber argument corresponds to a MIDI note number, though it is a floating-point value and can range beyond the normal 0-127 range. - */ - void setFrequency( long tag, StkFloat noteNumber ); - - //! Send a pitchBend message to all voices assigned to the optional group argument (default group = 0). - void pitchBend( StkFloat value, int group=0 ); - - //! Send a pitchBend message to the voice with the given note tag. - void pitchBend( long tag, StkFloat value ); - - //! Send a controlChange to all instruments assigned to the optional group argument (default group = 0). - void controlChange( int number, StkFloat value, int group=0 ); - - //! Send a controlChange to the voice with the given note tag. - void controlChange( long tag, int number, StkFloat value ); - - //! Send a noteOff message to all existing voices. - void silence( void ); - - //! Return the current number of output channels. - unsigned int channelsOut( void ) const { return lastFrame_.channels(); }; - - //! Return an StkFrames reference to the last output sample frame. - const StkFrames& lastFrame( void ) const { return lastFrame_; }; - - //! Return the specified channel value of the last computed frame. - /*! - The \c channel argument must be less than the number of output - channels, which can be determined with the channelsOut() function - (the first channel is specified by 0). However, range checking is - only performed if _STK_DEBUG_ is defined during compilation, in - which case an out-of-range value will trigger an StkError - exception. \sa lastFrame() - */ - StkFloat lastOut( unsigned int channel = 0 ); - - //! Mix one sample frame of all sounding voices and return the specified \c channel value. - /*! - The \c channel argument must be less than the number of output - channels, which can be determined with the channelsOut() function - (the first channel is specified by 0). However, range checking is - only performed if _STK_DEBUG_ is defined during compilation, in - which case an out-of-range value will trigger an StkError - exception. - */ - StkFloat tick( unsigned int channel = 0 ); - - //! Fill the StkFrames argument with computed frames and return the same reference. - /*! - The number of channels in the StkFrames argument must equal - the number of channels in the file data. However, this is only - checked if _STK_DEBUG_ is defined during compilation, in which - case an incompatibility will trigger an StkError exception. If no - file data is loaded, the function does nothing (a warning will be - issued if _STK_DEBUG_ is defined during compilation). - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - - struct Voice { - Instrmnt *instrument; - long tag; - StkFloat noteNumber; - StkFloat frequency; - int sounding; - int group; - - // Default constructor. - Voice() - :instrument(0), tag(0), noteNumber(-1.0), frequency(0.0), sounding(0), group(0) {} - }; - - std::vector voices_; - long tags_; - int muteTime_; - StkFrames lastFrame_; -}; - -inline StkFloat Voicer :: lastOut( unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= lastFrame_.channels() ) { - oStream_ << "Voicer::lastOut(): channel argument is invalid!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - return lastFrame_[channel]; -} - - -inline StkFloat Voicer :: tick( unsigned int channel ) -{ - unsigned int j; - for ( j=0; jtick(); - for ( j=0; jchannelsOut(); j++ ) lastFrame_[j] += voices_[i].instrument->lastOut( j ); - } - if ( voices_[i].sounding < 0 ) - voices_[i].sounding++; - if ( voices_[i].sounding == 0 ) - voices_[i].noteNumber = -1; - } - - return lastFrame_[channel]; -} - -inline StkFrames& Voicer :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Voicer::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - for ( unsigned int i=0; i frames.channels() - nChannels ) { - oStream_ << "Whistle::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i3--\ - + --> Out - 2->1--/ - \endcode - - Control Change Numbers: - - Modulator Index One = 2 - - Crossfade of Outputs = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -class Wurley : public FM -{ - public: - //! Class constructor. - /*! - An StkError will be thrown if the rawwave path is incorrectly set. - */ - Wurley( void ); - - //! Class destructor. - ~Wurley( void ); - - //! Set instrument parameters for a particular frequency. - void setFrequency( StkFloat frequency ); - - //! Start a note with the given frequency and amplitude. - void noteOn( StkFloat frequency, StkFloat amplitude ); - - //! Compute and return one output sample. - StkFloat tick( unsigned int channel = 0 ); - - //! Fill a channel of the StkFrames object with computed outputs. - /*! - The \c channel argument must be less than the number of - channels in the StkFrames argument (the first channel is specified - by 0). However, range checking is only performed if _STK_DEBUG_ - is defined during compilation, in which case an out-of-range value - will trigger an StkError exception. - */ - StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); - - protected: - -}; - -inline StkFloat Wurley :: tick( unsigned int ) -{ - StkFloat temp, temp2; - - temp = gains_[1] * adsr_[1]->tick() * waves_[1]->tick(); - temp = temp * control1_; - - waves_[0]->addPhaseOffset( temp ); - waves_[3]->addPhaseOffset( twozero_.lastOut() ); - temp = gains_[3] * adsr_[3]->tick() * waves_[3]->tick(); - twozero_.tick(temp); - - waves_[2]->addPhaseOffset( temp ); - temp = ( 1.0 - (control2_ * 0.5)) * gains_[0] * adsr_[0]->tick() * waves_[0]->tick(); - temp += control2_ * 0.5 * gains_[2] * adsr_[2]->tick() * waves_[2]->tick(); - - // Calculate amplitude modulation and apply it to output. - temp2 = vibrato_.tick() * modDepth_; - temp = temp * (1.0 + temp2); - - lastFrame_[0] = temp * 0.5; - return lastFrame_[0]; -} - -inline StkFrames& Wurley :: tick( StkFrames& frames, unsigned int channel ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( channel > frames.channels() - nChannels ) { - oStream_ << "Wurley::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int j, hop = frames.channels() - nChannels; - if ( nChannels == 1 ) { - for ( unsigned int i=0; i 1.0 ) { - sample = 1.0; - clip = true; - } - else if ( sample < -1.0 ) { - sample = -1.0; - clip = true; - } - - if ( clip == true && clipping_ == false ) { - // First occurrence of clipping since instantiation or reset. - clipping_ = true; - oStream_ << "WvOut: data value(s) outside +-1.0 detected ... clamping at outer bound!"; - handleError( StkError::WARNING ); - } - - return sample; -} - -} // stk namespace - -#endif diff --git a/source/StkUGens/stk-4.4.4/rawwaves/ahh.raw b/source/StkUGens/stk-4.4.4/rawwaves/ahh.raw deleted file mode 100644 index dda5f557f55beb212e4d1561e29ec0bef5577a1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmV;p07w7*m-&VAgX=x#J>~M~!}VDT103`#-8qaw2R$pwOYkS>qvBxVZs?-$L-wuwRR2%^&;kPm zy$HJw{Ta9*ups;%T^KM81^+PfL+uXjkn?E#TLy~|Bo>wzJrarxiU+m?1p$lz`U5=% mjRznE&H`Qlll}VpCHsK@5(Q8P`3RZ{O$ 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 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/dope.raw b/source/StkUGens/stk-4.4.4/rawwaves/dope.raw deleted file mode 100644 index 6a7a1ff6831fc3d254809aea99e51acb83430cc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 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 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/fwavblnk.raw b/source/StkUGens/stk-4.4.4/rawwaves/fwavblnk.raw deleted file mode 100644 index 14da0748110b02d3f8acff38c37b3948cdc42d55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmZQzU~}i`7CJ8RLtauFB zGKY%hs+t;D6BV%?nD&Kk|Cnu_K!hvKaT4|7ju<)ocU`WSaDsxkCS ops|m=yNu&mn=rGT2EVoCRMq7rC4LAU=jmp1XBcq%8Adb!00;GMEdT%j diff --git a/source/StkUGens/stk-4.4.4/rawwaves/halfwave.raw b/source/StkUGens/stk-4.4.4/rawwaves/halfwave.raw deleted file mode 100644 index b34639b0be745e0779f14f7afd5a93398ba73310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmZQzU{+ys=gi{i=3gyzT=b#D4;gNGNhM`fbqzIbIXwY`-^TaMc3Sq>gxQNZo^`2m zm+{=}WAC>=&^UNj=$8nmsK%Jhan}-FCw)wLo^~!{X;w~-a_-6exPpg8A;nuunado? zvn!e_JF9A{V`?;O9@Tc%$<)oM=crGtUsiv;{%iezAifS{C)RV+&8d^A?W}oJqgfqO zRa4nn(OjNg=1|I9ytOE#;9-7T?#UeGtelLcY3EX&Cw)wK9d|8eb5vu5Q|OoAS%JoW z`+e*^H@nNYR5_lt7qbbo>@nMEe9z#wo`ANThMKCnlCr#{47bD&(T76E`B(FFb7rx* KGpjI+Z~y@L*J#TC diff --git a/source/StkUGens/stk-4.4.4/rawwaves/hihatcym.raw b/source/StkUGens/stk-4.4.4/rawwaves/hihatcym.raw deleted file mode 100644 index f61389ec8eb6b5e14b9b3967b03bee47c680d7bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4976 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 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/impuls20.raw b/source/StkUGens/stk-4.4.4/rawwaves/impuls20.raw deleted file mode 100644 index 9d89aec1040720ac5d9cb26d74fce5cf04c7cbb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmWNOJxC)_6ouc*7>O{kkQ9Phf2u5+N`}~p7@JiQM6{GeK|~CKg@Vl@SSVtlSS66y zSt>@>Mr6Q3(ghI_Z5Cpum>H9odH24*o&Lag&UgOko&7a7cQWGkEJpginziG9*_!w) z1-rD~aUI{bYq3(K6TK$$m%ZmkIw;6GeTt^re?{Z;L%EP|ZLxNC5Il%pU8d*Olr>3j zOq+OzWU$a;+`?h$nIpOyNzhGGR@3;xeIDbpa49M}K?v=pNz$dqWj{Kc@e5c-lnwn# zGUP8A)xH`K6HtX8Fpn$JR&QpBjFGI#sc-4v8RX$N7%?NcJ~g-Gr*U;r*&>H2ID|XA zl7p&ZQpPjB8B$f5!FzawB06G25xr*$gqVWfQ$%c_14Vemdzn#HGZf}MlTsBqh*xk2 zhnNyMW$U7GL&mK>m0Zk#3E6o(laBf}Ig%w~W=XwC8&_aH>{}HRYC!vBG~AKVud;y% z>->TH*NIBnzW|q zxh{*|;DH^m_SP2Ul}kUO@$io{eUkN{&`5jF{&JI{7wL?Z>{@)g&|;Vyt}hF&vSm~dGb7U+z*k=$55qH??q$rVx&dazBhGMRU0-O z7d<`jH_NWmzSga%q1Yx7U-DkY1YvkdK3y=XF?t z0+(>X)aU{_R9v?3(`M(%jv9qUDw;|2!Y3-H=J?R8*57DNB|

qiqiiGvTzlMn7n+ qhos$!I!)~U&FTU49JgUZRdv;NT8p&Ai_w_gt8{)0MKb*`b^H&@0XE41 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/makefunc.c b/source/StkUGens/stk-4.4.4/rawwaves/makefunc.c deleted file mode 100644 index b3180659ad..0000000000 --- a/source/StkUGens/stk-4.4.4/rawwaves/makefunc.c +++ /dev/null @@ -1,55 +0,0 @@ -/**********************************************/ -/** Utility to make various functions **/ -/** like exponential and log gain curves. **/ -/** **/ -/** Included here: **/ -/** Yamaha TX81Z curves for master gain, **/ -/** Envelope Rates (in normalized units), **/ -/** envelope sustain level, and more.... **/ -/**********************************************/ - -#include -#include -#include - -void main() -{ - int i,j; - double temp; - double data[128]; - - /*************** TX81Z Master Gain *************/ - for (i=0;i<100;i++) { - data[i] = pow(2.0,-(99-i)/10.0); - } - data[0] = 0.0; - printf("double __FM4Op_gains[99] = {"); - for (i=0;i<100;i++) { - if (i%8 == 0) printf("\n"); - printf("%lf,",data[i]); - } - printf("};\n"); - /*************** TX81Z Sustain Level ***********/ - for (i=0;i<16;i++) { - data[i] = pow(2.0,-(15-i)/2.0); - } - data[0] = 0.0; - printf("double __FM4Op_susLevels[16] = {"); - for (i=0;i<16;i++) { - if (i%8 == 0) printf("\n"); - printf("%lf,",data[i]); - } - printf("};\n"); - /****************** Attack Rate ***************/ - for (i=0;i<32;i++) { - data[i] = 6.0 * pow(5.7,-(i-1)/5.0); - } - printf("double __FM4Op_attTimes[16] = {"); - for (i=0;i<32;i++) { - if (i%8 == 0) printf("\n"); - printf("%lf,",data[i]); - } - printf("};\n"); - exit(1); -} - diff --git a/source/StkUGens/stk-4.4.4/rawwaves/makemidi.c b/source/StkUGens/stk-4.4.4/rawwaves/makemidi.c deleted file mode 100644 index 480f6380d1..0000000000 --- a/source/StkUGens/stk-4.4.4/rawwaves/makemidi.c +++ /dev/null @@ -1,33 +0,0 @@ -/**********************************************/ -/** Utility to make various functions **/ -/** like exponential and log gain curves. **/ -/** Specifically for direct MIDI parameter **/ -/** conversions. **/ -/** Included here: **/ -/** A440 Referenced Equal Tempered Pitches **/ -/** as a function of MIDI note number. **/ -/** **/ -/**********************************************/ - -#include -#include -#include - -void main() -{ - int i,j; - double temp; - double data[128]; - - /********* Pitch as fn. of MIDI Note **********/ - - printf("double __MIDI_To_Pitch[128] = {"); - for (i=0;i<128;i++) { - if (i%8 == 0) printf("\n"); - temp = 220.0 * pow(2.0,((double) i - 57) / 12.0); - printf("%.2lf,",temp); - } - printf("};\n"); - exit(1); -} - diff --git a/source/StkUGens/stk-4.4.4/rawwaves/makewavs.c b/source/StkUGens/stk-4.4.4/rawwaves/makewavs.c deleted file mode 100644 index 20a89acb17..0000000000 --- a/source/StkUGens/stk-4.4.4/rawwaves/makewavs.c +++ /dev/null @@ -1,116 +0,0 @@ -/**********************************************/ -/** Utility to make various flavors of **/ -/** sine wave (rectified, etc), and **/ -/** other commonly needed waveforms, like **/ -/** triangles, ramps, etc. **/ -/** The files generated are all 16 bit **/ -/** linear signed integer, of length **/ -/** as defined by LENGTH below **/ -/**********************************************/ - -#include -#include -#include - -#define LENGTH 256 -#define PI 3.14159265358979323846 - -void main() -{ - int i,j; - double temp; - short data[LENGTH + 2]; - FILE *fd; - - /////////// Yer Basic TX81Z Waves, Including Sine /////////// - fd = fopen("halfwave.raw","wb"); - for (i=0;i4U<*XzxtyK?6J+I&Ux_18)`^~w3xXyj9>%Kmp>-v0d0Q|+;t90|t zRWD2Z2E6Yduvb~vZfD>cuPi0TG{rJdOEb0U7}D)Uk4uKqdjGmq+j!Fj!*+7EENxuf zvOw%|4Q~!_N^2Nqb=u1G^Y-6re|m)V_n^00(3;!u%6hoj;)a8bcdWY_-mQJBHrl%Q_0(6Rn}Z!8&P6Ym)*fw~X8XqFYnyEU z8KO-YZ3@f-Ob1juXNs*DIn3had%VLHi*6{_5=>Q|S)#5r)>&`3 zWqD}Y#JgN2?j7W$P!Rxr$_7;^NA$;z+xE5&v-@k&TW`^KayuNtjiN-{pc9~}gN^xy zKWM+B%uz`N%C9(`m%(=Rsh*BpR=NTV(bT=iNjvKpbUfOWO zWy53bOG8_a3eVRb<=PbWjM2v<-q=U8Yf;JsDig~o9!iy7fO@ODST7La`WbhQbA`Rd zk>;Ktz?E;Wu{Ss`y9PU+JEC1)`exy&57HM1IS-k|Hk!$4e4A^a0cSul?8ax>YU5>( zRmLWxmsYHd^JzwuHX46%U=RMFJeuuwc zDEm-Pu~>hg7wSiJtMC^|;+j~dKh;m_6=JMtp%qlcV|Xdm(kYJM3ck*{5Qx*1wQ65A zLhU4Z>)KN7n3gX2C#c?PKXr+ksSZ;fDy8aY8mKSSP{kXENVGWU%sSWbez^%>`j#|t zTI>`FqNi@xAM0229eSo@SR?w0d1AXL6)u`c#XOd)pd0veJ)f2D+EWSbrE~O>!}v55 z;wB`lz(ni@MKFk+@D41J^X`L6jKD11iHk4_$KotZ#>v`AZ5A| zuZ&Q-pi}XdF-GyjBAL&^5-h_^w7_B50NIcPA3#?KfI#q+O04H`+>!1{q%~5d6pEu! z6hdJ%myXd>s;4S?!Ui768@W){PUJp3m_O%C-p3dCCO_m_c0&+Mg%pT~DA_p#!XOet zW%myy)?KKELWwvBHp-X}UqLG5z(ug(0GugVhoTvz?cpCd2P+^N2Ek}ZlkO{m^YUDj zF5CjiFad@@ko0s3=Wqgl$|HC@C-HZDh!1cU&*3N@$bC78J*Zml^cK~#g@dKGVH_@V ziM)>UWL*v)=1S@5NSF+BB}zKvNi7RtuT=UZ+?SjX9MA$n{)k|yT`<0lCiFyK?1U;j Og7P=#%?AFz4g3d5T&>dp diff --git a/source/StkUGens/stk-4.4.4/rawwaves/mand10.raw b/source/StkUGens/stk-4.4.4/rawwaves/mand10.raw deleted file mode 100644 index 4b35376aeacdfc50cbef89ea76259403ac542b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeHF`BRov6h8O9tA4nYpkfT8d@_h;peUoc1nLk$8n}R?;*ySNpbai#iA#!!1}bXm zFp7+rVkRy)WT-(z>P*r&G^hxfD2igEv3%S6-uJzy`%m@qeR<*-8@Dpx8UT7Vp)^wZ|a8MKt_fo^yp{irU{gL>rYL)91Rc6kgP%^k)C zGt`*mE%TmnZ|hpr-Q>yleD9jmS=I5PE6IJ&9pEyoNmM59*y+{{s8)*fMAct@OPlD3 zaCAEKp01v44%zQ^pAo$q93!-!)I#;KR-iKJ8ie3VI3i7uyCi}atN`1 z1Q?8MGuzDmzD}><`ObaXRprX^NWNCKkY$@qb}teq=PQ*;rt(1jTB(s6XdPUF0 ztRyHWmGjDOHCQXrB9-GxfaIe0>F?4rxkOqHQ|%5r-tt-%qRu^5YJG0)WOZhZQD-bP zf_;_|0M()u~s|V&cGD1n3l;%IG@Fbf-$CDS-%Q^KZ@ag_+v2VD2701B zC0@gHSkvvtSVS`DCp4B`mCniMl^iuxEmk^}Xf;f0*RScD^elac9<3c!)0HTBhvbs> zORFR&O(zo|3a{Zj9%B8#?yyvr!E)IZ##j@pXKpJ{_;Az3X0iFEX+C7l_Brf>9dL=n zkWHkNj-n4}H!YwG=oP6iMOrQ<2%+ILltzLYcH{H*cMObRX7eSAP_c!kK~ee8buT7Y?@4y=yrOVmeGAQQ=B5HA9+ol zkUOM?ToidJq&M7!n{Wj(@ii{xjJNQoyn)}~ukc-*kLehLL(m@`+~m*r-@KmRMGdE8 z5xx?=Cc|nd7yV?YgF{dNr=SM@5cTfDW!Md$!cc6+ay*JT0+ETR^G06A5AtLDrohqU zh&np3FAhK_j=@-*himbG$gjoc5Co~P70$wQ5=17DSTd7*MmCVI$Zk?XD#&q?MP`#E zl1{dhy<`vBO45iETHpj^!28e(pWqo>ff3y1&0>>Uep?`UlrQGvxRZzS(R>n56sOJn zqYFd0u$Ne0OzbID{fj0_+;xS$a##J1~UE=+|8 z2!{U916_jcdi+f={w?mu!*~pfu~ewC5nZ5(n&A)$qlArx@h}mlz(+6xk|6=6i5edW z9H+p?;wE1BI7ops5sw0Yw6Fz##)D#)M8QK0j>j+@C@fUW8-c@we-Ec&8m<<4+lV^_ z(pT}3=r>aQUjdt7k3i%)Gz*6O$RH9zoC3{$#6c85@IouxhDs=dlW-XFAqO_VQkW?w zih@A&U;|#py_kt9n2bsIp-^?0;3*uV1e5VNN3gY6s3Q~C;TGJ5`69Ov%Y^Fd@dfl0 s+a?GG)5H`T1dm%_t%#PwN?0S}Z{Psz6FvhLh>Tf~^v2#G@P8ukAJ5hp%>V!Z diff --git a/source/StkUGens/stk-4.4.4/rawwaves/mand11.raw b/source/StkUGens/stk-4.4.4/rawwaves/mand11.raw deleted file mode 100644 index 94889be6f0d6dfeaa63449e06a39df1356508dac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeH``EyTa6vm(P-ft2imKrLUPLYXff1tHjky?sQgrI62YY|(SAf(oIbc$+4Ofb|^ zBGQsB7!{&w9W6nW+DRp?C2do!toQrAPfz>}{n0#g-@D8`=RWV}ITv88{mZrr&h+b7 z`mU3=BT$Yw2NMXr6H;oD%z%*akn3hMZhEakhlSjfbUQIP(&b^iOZP|lbNI--&D6?6 zWfRIb`v1B@oU?N)QC_XAU&TWIt{d&T*noe}o-uvAp%TXrINvl35+?Z7bkR>HmZq16Lfxa}&~2tLx>tl+%hKI>eJjrV6&3@KY) zp6CR~z;lee$|w@|=Tx5g#27B{+V8|M4gv*os%KdCZ0*v^$Q$NlWm@T(W= zEioB#N+OYqBe*G_m@@CWcf-3EXdf6BXzk54ZKXDrVH3_ueaVy*Sljl5FN_g0&74_>mDWU`G&vFT+B%w9PlJ!O??XL?Fs^ko4vIEVe&lH%68Np7b* zuiEYE*c6-R2D^Q(#1**9F2lvUsV>#!y0b2uk=%n$B$sh2i?IhKIEsmA%ODT)LvBNT zBw-$+c$F7nSjKe5v4`$(GbgjFer+~~>$(<#mdxi4UO+3vBLXe37C{*-{iUCbl&;4>vx~Ha_L{wD zkJ`ibq&;gNIB_-YW1DBsxezzUopSjMa2aX}Ew{W>u z#&e_+T*+-br0-v55uQOi-9djO;A3pZ0i6MnX3}0>f1()W6))W-TEfMX0E%!3tFREs z%5EH9LnJGBhv%5h?b>w)W7*VIxEt=G=3eN0He@??VH-AMV@9(B`*IW$bXO~McB&j) zXNe}>9M7Syo}vTou%LF6BRb45;6lst8n9MWBJQ?tm`JDHd^0 P99Ox1s;310cLM(bY{@Uw diff --git a/source/StkUGens/stk-4.4.4/rawwaves/mand12.raw b/source/StkUGens/stk-4.4.4/rawwaves/mand12.raw deleted file mode 100644 index a128642bf6de4fdac74a1fa03bf32bc6003bb685..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeH``BPR^7{|ZQ``*hwfI=>$Ah<atq$A=ExTNBe8y2P`3QlM>BW-H# zD`{%DP`RW|7AlG(I)UOOxgd(5rYyeid+#|<&-6F+qx1dYo^#K==lMRL^F08n?Gvv1 z9%tj;`a&zm$2;(=z-s?<&Jy-;r7nWuw2W*oZ|^9t0_RXWR~74Hjt|TTdRgcJ{JZ0|9R+=?ey+*?* zLC>~B+{fJc?%u9KPl~<8?%_&*neOgkC0O@7yFFo6KP%Dp;VU#vKd^GF?s|iBy!T4q zOa62G-ZFx?t^S>UFiMS`G@S1`CL529SnN>StuIufexxt*UbMis80|Y$EP*HlLpuXd?2wbpi6 zBkeprm}g)Db|L|tv6C7cb&mOtAZM5nYs5QGJGU80W{P>;JZgSt&N1#eD;!&BG4^0G z>gXcfq_xxr1-xIC+l%e)_I=f;r-~kME4@~S>r8!8N2@(5&d##RtQyrxSMY6Kq0ey~ zR-qPMIUm6kO!2sf8@Nv)xQ!S-&82(?2F4->tJuZqynxs7e!j&w`2cT|@p$gRgV=?K zG>t~$3I4$MSdD@5t&5*Z&G5HWTzDovO2SF%x&@6yA>z zER_09BAY^G&(XAlDyfvx$zQ515=Kq*Gv$h#4Dy$*+i?>s^u|1?nVG4$z8M_gNQCNWKvR5el_$B|wnLL3< zaW8J6EnTIH^*+5tAJCQDio1#10P!5m?Rg-l@p`_%FQocdakNVqoI)8a3Y0Ex;3}@8 z5-w^-skD){(#Jw>BF&^UN}y0w;V`nL?hK3*-)UHZZ?Fc5Z1YK8!&A8rhiKLfTC+c! z`nj&qMf$9GxvB5U_^dvm%e9AFipwOt1hAerBiwcW@Q>T@s>ebH6^ z?IN87Nd00y%-e#Fdvy%CW*=vEtg6w<+(((5Hm4JGBXqdg~gk~qJt#h4Pn_{Mv;=IPy~wt Nh1x5M-Jr8-F<{I8I-o3?rz|+Pvsm0Gd+jB?t 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 Pta~8a3%pR^e^cN;QOOs4 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/mand5.raw b/source/StkUGens/stk-4.4.4/rawwaves/mand5.raw deleted file mode 100644 index 9b308a860b4966a4bfa6148f01bdfa70fdc99495..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeH``Bzm{6vy{I_ulv5f%s4asiXP`OQ&HN9)y>(#z(WkOzxv6K%7#F#GwIY{zs6mEKVe z>I-(m=;J-ZHznY?B`7f8T;ByP2ZP@W85=yWd%ITJ9&=W<~_^&&^MsNBClUNBzYZC zx~Pxr)$Sr9QKT*6o%jK_r7hXk%eh~@?!4RfXWIkUPHxmH)fHN>7*BC97!z?gJ1%cA zY&E7S9hEg6#iny!Zm+jI5)9$WXyt;ECm)k@DmXH3VYZ?tfPUd(O%q| zYm0Xdb+@=avpelMj%AL}wxn0i=6Y*>YoE55_7jfl?r7Cl9iuj@bG1&CrwsQ5k5Ww9SN=`EnM5Go>9}aHu1CIB1goKCv=CkFdjNW z8M~)+HTWtgp@gF#o@yW#cQ7B=F7&++ipUpXJenV&M6f|E zM1mh37fx}S{>B1!oP~lD=D~UlWA93{q+02;++Qg)WGd&SMyaPHM7^ud(uVO#JW7+?SKKGnB(+X`tTAn_mZbTsC)8psLc7N& z3KRw6mRKRuX$gFb+t?6xN*X4GvnQ-kx+>Qw8ohDYKiW1#)obVH7v5NZAS#r}ON}U08*j&0)t_IjdpStVuFU5mKZyL^81gHX6%t9~RG9QxBO zohpPpb%xEt!f*3Kd>=o`Pw|6%6`#)I_%i+x@1eD6cJ8C+2h=;uhBzxKMYAC4NP*Oi2G9grK+9mLLUBmsiG$*Xa8Pd=M{{TmWzl}xOU2Xx78nN$V5d&= z0Lr0M->g!ofNI@OEm*;c2JDO$^hZzqHX5M}3LzI#V5xp5Nw5j_!(RR6b-gz5KN$EA DK%KG2 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/mand6.raw b/source/StkUGens/stk-4.4.4/rawwaves/mand6.raw deleted file mode 100644 index 05f083d8912b7622d17e058ced75e9c06d65f25d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeHG`%_g_82!F|&OLB17mO>$wa{qtL8j&tA3YFi%v2P`C+ZNHWh(eWv!c;LkwnLV zP|-3;F>8!;G##HMY7fh_2P%wd778e+TsW6|&pmtZul+~#qqAoJvS;>Q>sxDm0I(tW z?%f~j`M-neUTPZRG#i^uFI}&&J$9#qHFaaksCxEU#aFJ?47C?PcbGfDstnQrZw*cdMb!cb4Z_ zFZxQ_t{BgF@;dB@A=ZHgV}DfGU>>SUf=!Q-=A719( z#RiGRatF-kZS9Bd*WA0=KA0bca?OxcZLc)0t6y_>vTwxwtb3DvlLD_=qg#hI^=b}l zIpV+JZ}DyQ75j68cPyuU(48KRFV7p z@a-&#mcYj>7J69Krq|bO9toyeaaMj10+)l|23|6=S}WUoTIqI}=mRfky;!DtiW`w`)x)rg+IojCe*yz};Wzi}A zuC+Ii?XNT2%qo9E`&)r6?Y3W->)U#?o@(W7d(4IAY;&Z)EU+)6+lkx|{iq}S2q$r> zHq)`hm}L}(EpWPBc@g{F+afcgDmxsHYIPU8E=Bwtnc@D_wLE-h*g<2sHXp{yw?&S< z)zSiATFLfA`;*nWroK zHeM^7yox_zPYe}>%Iq)1bTS|u_FxP?iL0;zccaM$uzanvc2w`Hr|W5Yv*9&P8)FCv=7yp(9L#3aEz5@F#k3HQH4d_58X*^n3h_9vQTb%@QG6!P;~()8yj{eL-oh(7 zi&0{esF!`@GFe3qdX`oy_8hp6$(WAMVLW!mZkULfSdOsks%{4e3yTETy z02weD-h@?93ZK9_m<9bImO}Ikt*2Qug%;3z>d$plLdCS27E=zrO@*{Y&ACb8W7?%u zo}{1YGTop%WPuyHLlTUGm*Hs$r#d=Id)3AhYjK@A`O3`?a4Am3q4*fO;2!(|-#{_s z!fcoT10e=bsc)p8sDkn+Rc%O({7R*ir#R;-<}{UEmRu|gWraK@f0h48zw#}Xdee)P zN%?e;>Y)P+fHat=JSkF2N}(L~!7;Vd)o=yQ!wJ=~L+~~1P;TYIRCpfxDI_ZH9uN&q S#cxrAO7P4BJaFLuao|5Krp?L# diff --git a/source/StkUGens/stk-4.4.4/rawwaves/mand7.raw b/source/StkUGens/stk-4.4.4/rawwaves/mand7.raw deleted file mode 100644 index 64941e9f98421aa1b2b353abbfa5a25cd9942295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeH``E!m}6vxlG&-+>;jiiJS6U3S-(ay9|RHLnF2vW4QG}hQ=q)|$0i#=#8iO|Fn zV(FwxFoM=rOJf@ojZqB}OU)Evm@u?S-uJoZ+w(v4S99jvXSvV4_j^9y^AO>Y?6DDU zg>`F5c#bSL@> zd`o?mz6#%JUk5irqTE_vbj_{WyY2$9SS#)9I}&VfN(e^sY0m)fQg2shzZ37ttkcxH z-8-x9?)vfdCe?eh&JpLH)6m>BPt0A-i=2wh2$H>0BvsPc7P~LpZvJSW_3!pi@ZI-^ zxu4oJyV@P@Hgm7p`fi-R%En5u%(G+dN!dy9CeFF)`NI=nGEJa~<#am3lbn{G8qY%~ znKSVcE#)@G;C&e@lO^1iN*7yd6Kr>RK*Mka5i&d=5T(S6DbP`5@V;jcicw)9=;l1x#kVu zO26?Ra#P%eZnk~hCfZ8z*yqw*#>qW|V?D*Nm%rp-`in|OaNAV}zkn$-K>*aAKB00Y9E17rpSB_|O0yFaifqf*lwvw`8d- zl47vDl%29nE+P)ch^Y&GPPz1$J8~2o0{7%Ke3;j968GcDe1fY@ePg&<jT6o6k*sPQ9~V;p*;u2e{#d@RORY1Y^>yWeKn44Y#wNu*4dgF0U>mt~ja z%Vp)a7&oXH^`%iXfu>P9?V&pyzzyhMxBq%0rdE^gxq)uC`| z1s~2~502m(E-0^Mn2Q-0jsA$m2k3`kn23>h4mv9h>7J7P;R<=UxT#G#H*MFdz8tFb^6r>e-DS#SN z6ve8l>8fj`p0-YX&Q*0=C{M>+^)5r{Eu;mSX_QPus26qC9U4&+YO8(m21QZ}^`?ow z3Ds)^wb2MurB9VzCH_VQO7RUOq{={hr;zE$5R z&cRmQ-D)7+N71r5h#D zMp8);npoPXE`({Qs=c;hR2ze7g_6lV=RAGoZ|INiJLjJ7J@?%AJkRHS&joma!ETg2 zXj5HpUc@bl^(a))s?dw@s`U)**IKPbu`1Hlbv~=pMW6RFR0zvls<~m3O@TROd)QUB zSsL+FZ-7GuK9}fQT^cc zleW6Q7pfA~I2DUduFAEurFNVRHRa}rv9_)qWK-;TyWO6%o9$fp1P7uSlF$_kR8Lju z#i@I0pW3CqQCF4ox_Z+*zc<87kdt1O+=<=*m8JTq(L$gA#rRXjsUBFuGPZUlu8~c% zkC?3{-Hb9DY^beocA4P7AEuv4GpS~zDX@|DJzMI+T`n7Q0?UvBs)=f~y6L5OrQQy2 zp0~oQ(o^&by;|q%lfF~+?vdisu z7vcuFSU1$=xyy{@3Z6q_bihE OuR0QK$HzhzV#4`G?c4&m8r5-j>=b?)OO*w zUtN*D@YH>EQ+=-%sdU*9g3BmECWfOu?{T-}eVOC=BBNY|Tkc+SX>OXE>_)pd7wr;V zf{SrUZmKJCm*m7)rt+0qZ69zis}PFTh{r@MlURx@%!ePd@Q%!@kc(~j8I>wXHC9bj zePIlxRf?ea0-`j1!qx?9oUGK;&80=YHxJJW1_uU za-HRV7V;A=<2<1=jB$)%Pj+G}>9FQ(!${GS#4&uGe({#i67J(sR!YSip$#I@Numon zOU5X)MLU_}B!4&Qng~S8dbG@uayxpWNA0IB=!3yR;%VvK6nRe;J^hi0r_f6{b(4;2 zfhIz>6|0LU&*DyatRlSkC}Xf8A2|d zljJFr3&h>W!n%k%#qCL6<6R-xTq>A^QJ5foJyR+_2XD(f9W!LSDZ`HicvsdkWXEU> zmAds32T|gut>_5_gx_7>mKtA`9ylSlYCrdgny-Xsk&I1p;zo%a>56sCl^)q9-|mqr z9u?geqvA*aNS^`oREM`{dQ`sVDzBt?{Jj=`8FX L#zO-C1A+elz2fQ< diff --git a/source/StkUGens/stk-4.4.4/rawwaves/mand9.raw b/source/StkUGens/stk-4.4.4/rawwaves/mand9.raw deleted file mode 100644 index 9e88a0c91317db8a3f2ba7969fe7aa0e0b2e029f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeHF`%_g_7+w3EdoSSSDJY5g7{y0HC|V?z!eA;E8kJ+FH7a6^`AU0eXg*4-8D}(8 z(@e(@b(#t%9YIQL98yC=bbR0ogz$l>sDoFz+;h%eeeyr_oA;YN_w4=cy}oa)^#SPX z>}tIgNYzUi??2*8YprmHc`tiQLVO``?M9;UdQd}fi6_&hss7?O_)<5xT+{Xq;AS(MQd9Pxt)bicmdO zym>HaLeOS+llxN-f@8g%y)7X%K~)~Fdy8wQ*~5%9maDJT5Vct4bE$LD4p@T%hXXZM zcp%;XdCLlaxm~1BJ2mzy`=;*hT(b{Y8CIOL7F|>{k~l+ecPgB5R;ks=KEj{P1lJ`q zTaChTb=bIITsJ4W4|p!PGt61WEwjOO*fqpVGWWVRnN`?pSGR6xIqKgWsI*7e@z#6x z82y~C*DpI4^+s$kGL0-%t_I>7erGd3!ycp5+-8)jT&%@AC|2WDmC@cE(J0 zUF@un>2hY{MU|n>sT-#G3dMZh zW)T;$tDfS_w2SOsw%2~&u5(5^cl8PSuoK@R2Lmt`g(_6#r~xSBMMmhO`UVrI^lfJG z3?HzB3A#wvGY4T4Wxt`^S!xHSr z-zda9yhNM(IhF0TPdgkYH@@dq)?+xn!4A2Rj|}vLqQ)TXQr*>5HC837B=w4#tNP)8yi@Nu(=*Lh$1 zYe({5>G3QtOD-JU(F=XhA48EYIw#6khIlnuRw6CIt6&}dXeSCkk8zkTnKW@g^S+>5 z=UvJ4#(329wy0U6{y`%oPt;a24Y!ug&k7%X^E@;Xj<^lXb>;@2Zay``59XfOFliSV|%rs(zf L_gI1dL4p4OW?%Wt diff --git a/source/StkUGens/stk-4.4.4/rawwaves/mandpluk.raw b/source/StkUGens/stk-4.4.4/rawwaves/mandpluk.raw deleted file mode 100644 index 162a0da9e1d448ee915c7b4ba441c8da46b6298a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8900 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 PsADLOD`3`rMg6CLjECH- diff --git a/source/StkUGens/stk-4.4.4/rawwaves/ooo.raw b/source/StkUGens/stk-4.4.4/rawwaves/ooo.raw deleted file mode 100644 index 1b8331e3d9a9ce5522961877759e898b3dc23fdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmV;p07w7-VFBF#F8pNu8~wBVo%_uDJNmWz%Kbb1Tlxt3FZ%!dTlx3))%R5P)9vWt zN!?52qv}HCJmo?9s}e*K3kz}?-7GgJO&IAHJstNU0T|y4{S3_)aS`VHi}Murm+pGo zqtVpSZ_{zrqt%7jF5<`SL+~E)f%aJO mEe0C@h4^&&ukdvB zXAXG~bv@x}I$N%JadGAL`hS(%i;Hv3)7cW9MqLki;Lq&o>b%0v(BhHte!bILT&lH- z8nV2S2BMRMO!;MbJUREVSF<)TUu7y~Ok$V|w434o&Hu^&=Kbydqy4MyN9#AI&)Yvd zetY^=-m?pjKHs}>tNH4;i>7BBkINlAzb9hb?hSueD=gKVFFoVeq?0|pZJrHGZJs^7 zlTOa~HD7wE=4yovf4A-46LIkTak(>&7fr8zyVZQ}#-q>AF1*Tnd-}uU&)dH_{b>DF T_ecA0_rH1nlmFjj7~uc_6d!%U diff --git a/source/StkUGens/stk-4.4.4/rawwaves/ppksblnk.raw b/source/StkUGens/stk-4.4.4/rawwaves/ppksblnk.raw deleted file mode 100644 index 95a44464af8f4edbe304e7ed4a7fc70fd6d4b8d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmZQzU{Gh6%b3Je%6yfziM^V0ACD)$tdObbBuN8VUPTSnS}iWU)5iNP9@!Z>ukdvB zXAXG~bv@x}I$N%JadGAL`hS(%i;Hv3)7cW9MqLki;Lq&o>b%0v(BhHte!bILT&lH- p8nV2S2BMRMO!;MbJUREVSF<)TUu7y~Ok$V|w0q#~2RdQo0sv6FP*(r| diff --git a/source/StkUGens/stk-4.4.4/rawwaves/ridecymb.raw b/source/StkUGens/stk-4.4.4/rawwaves/ridecymb.raw deleted file mode 100644 index 722fa5a1477517a733d858d9a2d610051a22358f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32394 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άsPNm-(DyaSbE?~RdQf2xOG(>;fG_8(zQWpz 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 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/silence.raw b/source/StkUGens/stk-4.4.4/rawwaves/silence.raw deleted file mode 100644 index 4b8a1b3e49c7b867bb4cb3d412403b88b765c9de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 NcmZQz7zIN)1ONfR00961 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/sine.c b/source/StkUGens/stk-4.4.4/rawwaves/sine.c deleted file mode 100644 index c43dc82a71..0000000000 --- a/source/StkUGens/stk-4.4.4/rawwaves/sine.c +++ /dev/null @@ -1,22 +0,0 @@ -// Utility to make a rawwave sine table (assumes big-endian machine). - -#include -#include -#include - -#define LENGTH 1024 -#define PI 3.14159265358979323846 - -void main() -{ - int i,j; - double temp; - short data[LENGTH + 2]; - FILE *fd; - - fd = fopen("sinewave.raw","wb"); - for (i=0; iFB zGKY%hs+t;D6BV%?nD&Kk|Cnu_K!hvKaT4|7ju<)ocU`WSaDsxkCS zps|m=yNu&mn=rGT2EVoCRMq7rC4LAU=jmp1XJGib^K;Yme#N0S$B5x!5vTb86RGC()~Q^l}ER3K6w6| PCfhm3QL%Zqyz_bpy6-YGsc zzB7I`K`22t0h5rH(3}8x znt)~@2J`{?4DCZ~=m`1_oq%%$?)%{F1E|e{oQ%cEhMWz`-txE3yr6;g9G5jCjLa!tKJ?fSY0H3Sg)ZG7#b(d;qv=1kr*pfh@pU zF`z5J+<(zO(C-NRgQRbruO_w^YvMEM-{_x9cm$5uxfhcx>y_8xXLJ1yHXTh6<_cP8(k zY)Y&Ttle(+-q;CC0 zlzb_{l0f|!bgn^sMO^9!`?J|%V`3bldLrS%O+srzQi8T;G6aVC5BarD`}0*H<`E*i zraXA=POeW}N~c^n^Eqf7949*8gOBTumX6LInja9^-K=ev$~TX%#ru={JYNj8BB)K-G$3SsYc&T~t_vEbJ^aE1(yI7x3j%@^$j2^8)gCbE|U= zbCz@PIda(p*x|Vc0aW=6bF(%PGQI@z%d`+Yfqlq>| zbs~bWP8cFo6Nm(Ff+^u5K@?`e444MD!xT6Z#=-uuGi(W?VHB(e%fk||C@cUYU~c#n z%n1%RxC?+c2~bl5J!sJD3}$d(mI5?rK#N5X1-hm{p9uC05!Q(au-69crvM+jiL$^` z4DdFabQ<^!0e%;g#enxDkl~1=2l8~0SSk7--(V^NWGzZvPE!Th2hs%rhvxL-3~RvU zYo-NYbdYs7t2rA1xDDjU0fx)DhPl;wynyR;zD_=+fDf>y7n&7z79ooYi@Cu+FiTuY zrb=&?z94In8_N{SDj!KcDk>K%&#e%y$f*>m%%_M`$d6?o*Hm4oYOB_-91?wvsE;aN$v3augG`jIjV^xz*(`2(x^U1T)7Oj?v-~3v6TWi{k+8DpXRC(%P zyH^Kq$J0)$&fTt(=LXN$yEA*Vd+0Any&AoXFH`zZeT@FBfvW?XgXAHzA@*?NE7uXB zk-^c(G1al9*LgHk+VLOMKmErQ#up|ECM~CUruwIGZ?xZR|JD4~cLq7L`i}D6ZB}Y_ zVU9fSv>>@Kzerwkrc2Z5%ap${3?&A0rExWAO>=F3y=Mdek1>;vIq{+3U#CsE&5e&u z|Al|j+v3<7`<%UPzaz7=vHNT<>WjfX&;I1s;%^=-71lPp`+#_8esuO|>A3ED@QKd< DB?bC1 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/snardrum.raw b/source/StkUGens/stk-4.4.4/rawwaves/snardrum.raw deleted file mode 100644 index 93005ad04e1adee215a3a7cbcdd949311f2513bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16660 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 L0_bl}h7k?`T})ND diff --git a/source/StkUGens/stk-4.4.4/rawwaves/tambourn.raw b/source/StkUGens/stk-4.4.4/rawwaves/tambourn.raw deleted file mode 100644 index fa8125220f692abc78cd1554ab2fc4899219b646..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9240 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 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/tomhidrm.raw b/source/StkUGens/stk-4.4.4/rawwaves/tomhidrm.raw deleted file mode 100644 index 0cf482b93778deb85fe70762346d3c4133a6a0e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27642 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 B9JBxc diff --git a/source/StkUGens/stk-4.4.4/rawwaves/tomlowdr.raw b/source/StkUGens/stk-4.4.4/rawwaves/tomlowdr.raw deleted file mode 100644 index 9813513dd9c05dc3b2aad5eef14ad08cc5e839c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39200 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 N^G5$K9{%6E{XcWfP;dYM diff --git a/source/StkUGens/stk-4.4.4/rawwaves/tommiddr.raw b/source/StkUGens/stk-4.4.4/rawwaves/tommiddr.raw deleted file mode 100644 index 4d042575a03819ac4ee527ee89b2d50f9f63c464..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28292 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 diff --git a/source/StkUGens/stk-4.4.4/rawwaves/twopeaks.raw b/source/StkUGens/stk-4.4.4/rawwaves/twopeaks.raw deleted file mode 100644 index d383a24bda8d6364f31a4d99f0eba84db414bd05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{I0000R9CjeLgodEU$Vgcd;bpsp&)dZpif(CU5dkB*Wz6$#cNe!wG9T1=r zH51zvk{4MSFdG*g4IdLBC?iWHeJ8vs3M^zU%P~JQzcx!a;yZ*sF+k`;s77*0MNA-1 z15xf&;8)mM*InCS zCjbcm0RQ*@+5f2jWB&^Np8g*Fi~QvLEBjvhe))^|h4*dtLiGjnxAIo-jdX&%YSFSh=*x>Er^W^E~ z(CDY?ZtNxP%kNh53v6e*0ehEBxgBi~b(|p8pE}WB;iC+5h(j C?EQiO diff --git a/source/StkUGens/stk-4.4.4/src/ADSR.cpp b/source/StkUGens/stk-4.4.4/src/ADSR.cpp deleted file mode 100644 index bee337be3d..0000000000 --- a/source/StkUGens/stk-4.4.4/src/ADSR.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/***************************************************/ -/*! \class ADSR - \brief STK ADSR envelope class. - - This class implements a traditional ADSR (Attack, Decay, Sustain, - Release) envelope. It responds to simple keyOn and keyOff - messages, keeping track of its state. The \e state = ADSR::IDLE - before being triggered and after the envelope value reaches 0.0 in - the ADSR::RELEASE state. All rate, target and level settings must - be non-negative. All time settings must be positive. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "ADSR.h" - -namespace stk { - -ADSR :: ADSR( void ) -{ - target_ = 0.0; - value_ = 0.0; - attackRate_ = 0.001; - decayRate_ = 0.001; - releaseRate_ = 0.005; - releaseTime_ = -1.0; - sustainLevel_ = 0.5; - state_ = IDLE; - Stk::addSampleRateAlert( this ); -} - -ADSR :: ~ADSR( void ) -{ -} - -void ADSR :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - if ( !ignoreSampleRateChange_ ) { - attackRate_ = oldRate * attackRate_ / newRate; - decayRate_ = oldRate * decayRate_ / newRate; - releaseRate_ = oldRate * releaseRate_ / newRate; - } -} - -void ADSR :: keyOn() -{ - if ( target_ <= 0.0 ) target_ = 1.0; - state_ = ATTACK; -} - -void ADSR :: keyOff() -{ - target_ = 0.0; - state_ = RELEASE; - - // FIXED October 2010 - Nick Donaldson - // Need to make release rate relative to current value!! - // Only update if we have set a TIME rather than a RATE, - // in which case releaseTime_ will be -1 - if ( releaseTime_ > 0.0 ) - releaseRate_ = value_ / ( releaseTime_ * Stk::sampleRate() ); -} - -void ADSR :: setAttackRate( StkFloat rate ) -{ - if ( rate < 0.0 ) { - oStream_ << "ADSR::setAttackRate: argument must be >= 0.0!"; - handleError( StkError::WARNING ); return; - } - - attackRate_ = rate; -} - -void ADSR :: setAttackTarget( StkFloat target ) -{ - if ( target < 0.0 ) { - oStream_ << "ADSR::setAttackTarget: negative target not allowed!"; - handleError( StkError::WARNING ); return; - } - - target_ = target; -} - -void ADSR :: setDecayRate( StkFloat rate ) -{ - if ( rate < 0.0 ) { - oStream_ << "ADSR::setDecayRate: negative rates not allowed!"; - handleError( StkError::WARNING ); return; - } - - decayRate_ = rate; -} - -void ADSR :: setSustainLevel( StkFloat level ) -{ - if ( level < 0.0 ) { - oStream_ << "ADSR::setSustainLevel: negative level not allowed!"; - handleError( StkError::WARNING ); return; - } - - sustainLevel_ = level; -} - -void ADSR :: setReleaseRate( StkFloat rate ) -{ - if ( rate < 0.0 ) { - oStream_ << "ADSR::setReleaseRate: negative rates not allowed!"; - handleError( StkError::WARNING ); return; - } - - releaseRate_ = rate; - - // Set to negative value so we don't update the release rate on keyOff() - releaseTime_ = -1.0; -} - -void ADSR :: setAttackTime( StkFloat time ) -{ - if ( time <= 0.0 ) { - oStream_ << "ADSR::setAttackTime: negative or zero times not allowed!"; - handleError( StkError::WARNING ); return; - } - - attackRate_ = 1.0 / ( time * Stk::sampleRate() ); -} - -void ADSR :: setDecayTime( StkFloat time ) -{ - if ( time <= 0.0 ) { - oStream_ << "ADSR::setDecayTime: negative or zero times not allowed!"; - handleError( StkError::WARNING ); return; - } - - decayRate_ = (1.0 - sustainLevel_) / ( time * Stk::sampleRate() ); -} - -void ADSR :: setReleaseTime( StkFloat time ) -{ - if ( time <= 0.0 ) { - oStream_ << "ADSR::setReleaseTime: negative or zero times not allowed!"; - handleError( StkError::WARNING ); return; - } - - releaseRate_ = sustainLevel_ / ( time * Stk::sampleRate() ); - releaseTime_ = time; -} - -void ADSR :: setAllTimes( StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime ) -{ - this->setAttackTime( aTime ); - this->setDecayTime( dTime ); - this->setSustainLevel( sLevel ); - this->setReleaseTime( rTime ); -} - -void ADSR :: setTarget( StkFloat target ) -{ - if ( target < 0.0 ) { - oStream_ << "ADSR::setTarget: negative target not allowed!"; - handleError( StkError::WARNING ); return; - } - - target_ = target; - - this->setSustainLevel( target_ ); - if ( value_ < target_ ) state_ = ATTACK; - if ( value_ > target_ ) state_ = DECAY; -} - -void ADSR :: setValue( StkFloat value ) -{ - state_ = SUSTAIN; - target_ = value; - value_ = value; - this->setSustainLevel( value ); - lastFrame_[0] = value; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Asymp.cpp b/source/StkUGens/stk-4.4.4/src/Asymp.cpp deleted file mode 100644 index 34c58ffc7b..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Asymp.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/***************************************************/ -/*! \class Asymp - \brief STK asymptotic curve envelope class - - This class implements a simple envelope generator - which asymptotically approaches a target value. - The algorithm used is of the form: - - y[n] = a y[n-1] + (1-a) target, - - where a = exp(-T/tau), T is the sample period, and - tau is a time constant. The user can set the time - constant (default value = 0.3) and target value. - Theoretically, this recursion never reaches its - target, though the calculations in this class are - stopped when the current value gets within a small - threshold value of the target (at which time the - current value is set to the target). It responds - to \e keyOn and \e keyOff messages by ramping to - 1.0 on keyOn and to 0.0 on keyOff. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Asymp.h" -#include - -namespace stk { - -Asymp :: Asymp( void ) -{ - value_ = 0.0; - target_ = 0.0; - state_ = 0; - factor_ = exp( -1.0 / ( 0.3 * Stk::sampleRate() ) ); - constant_ = 0.0; - Stk::addSampleRateAlert( this ); -} - -Asymp :: ~Asymp( void ) -{ -} - -void Asymp :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - if ( !ignoreSampleRateChange_ ) { - StkFloat tau = -1.0 / ( std::log( factor_ ) * oldRate ); - factor_ = std::exp( -1.0 / ( tau * newRate ) ); - } -} - -void Asymp :: keyOn( void ) -{ - this->setTarget( 1.0 ); -} - -void Asymp :: keyOff( void ) -{ - this->setTarget( 0.0 ); -} - -void Asymp :: setTau( StkFloat tau ) -{ - if ( tau <= 0.0 ) { - oStream_ << "Asymp::setTau: negative or zero tau not allowed!"; - handleError( StkError::WARNING ); return; - } - - factor_ = std::exp( -1.0 / ( tau * Stk::sampleRate() ) ); - constant_ = ( 1.0 - factor_ ) * target_; -} - -void Asymp :: setTime( StkFloat time ) -{ - if ( time <= 0.0 ) { - oStream_ << "Asymp::setTime: negative or zero times not allowed!"; - handleError( StkError::WARNING ); return; - } - - StkFloat tau = -time / std::log( TARGET_THRESHOLD ); - factor_ = std::exp( -1.0 / ( tau * Stk::sampleRate() ) ); - constant_ = ( 1.0 - factor_ ) * target_; -} - -void Asymp :: setT60( StkFloat t60 ) -{ - if ( t60 <= 0.0 ) { - oStream_ << "Asymp::setT60: negative or zero t60 not allowed!"; - handleError( StkError::WARNING ); return; - } - - setTau( t60 / 6.91 ); -} - -void Asymp :: setTarget( StkFloat target ) -{ - target_ = target; - if ( value_ != target_ ) state_ = 1; - constant_ = ( 1.0 - factor_ ) * target_; -} - -void Asymp :: setValue( StkFloat value ) -{ - state_ = 0; - target_ = value; - value_ = value; -} - -} // stk namespace - diff --git a/source/StkUGens/stk-4.4.4/src/BandedWG.cpp b/source/StkUGens/stk-4.4.4/src/BandedWG.cpp deleted file mode 100644 index eacd0d9020..0000000000 --- a/source/StkUGens/stk-4.4.4/src/BandedWG.cpp +++ /dev/null @@ -1,364 +0,0 @@ -/***************************************************/ -/*! \class BandedWG - \brief Banded waveguide modeling class. - - This class uses banded waveguide techniques to - model a variety of sounds, including bowed - bars, glasses, and bowls. For more - information, see Essl, G. and Cook, P. "Banded - Waveguides: Towards Physical Modelling of Bar - Percussion Instruments", Proceedings of the - 1999 International Computer Music Conference. - - Control Change Numbers: - - Bow Pressure = 2 - - Bow Motion = 4 - - Strike Position = 8 (not implemented) - - Vibrato Frequency = 11 - - Gain = 1 - - Bow Velocity = 128 - - Set Striking = 64 - - Instrument Presets = 16 - - Uniform Bar = 0 - - Tuned Bar = 1 - - Glass Harmonica = 2 - - Tibetan Bowl = 3 - - by Georg Essl, 1999 - 2004. - Modified for STK 4.0 by Gary Scavone. -*/ -/***************************************************/ - -#include "BandedWG.h" -#include "SKINI.msg" -#include - -namespace stk { - -BandedWG :: BandedWG( void ) -{ - doPluck_ = true; - - bowTable_.setSlope( 3.0 ); - adsr_.setAllTimes( 0.02, 0.005, 0.9, 0.01 ); - - frequency_ = 220.0; - this->setPreset(0); - - bowPosition_ = 0; - baseGain_ = 0.999; - - integrationConstant_ = 0.0; - trackVelocity_ = false; - - bowVelocity_ = 0.0; - bowTarget_ = 0.0; - - strikeAmp_ = 0.0; -} - -BandedWG :: ~BandedWG( void ) -{ -} - -void BandedWG :: clear( void ) -{ - for ( int i=0; i 1568.0) frequency = 1568.0; - - StkFloat radius; - StkFloat base = Stk::sampleRate() / frequency; - StkFloat length; - for (int i=0; i 2.0) { - delay_[i].setDelay( length ); - gains_[i]=basegains_[i]; - // gains_[i]=(StkFloat) pow(basegains_[i], 1/((StkFloat)delay_[i].getDelay())); - // std::cerr << gains_[i]; - } - else { - nModes_ = i; - break; - } - // std::cerr << std::endl; - - // Set the bandpass filter resonances - radius = 1.0 - PI * 32 / Stk::sampleRate(); //frequency_ * modes_[i] / Stk::sampleRate()/32; - if ( radius < 0.0 ) radius = 0.0; - bandpass_[i].setResonance(frequency * modes_[i], radius, true); - - delay_[i].clear(); - bandpass_[i].clear(); - } - - //int olen = (int)(delay_[0].getDelay()); - //strikePosition_ = (int)(strikePosition_*(length/modes_[0])/olen); -} - -void BandedWG :: setStrikePosition( StkFloat position ) -{ - strikePosition_ = (int)(delay_[0].getDelay() * position / 2.0); -} - -void BandedWG :: startBowing( StkFloat amplitude, StkFloat rate ) -{ - adsr_.setAttackRate(rate); - adsr_.keyOn(); - maxVelocity_ = 0.03 + (0.1 * amplitude); -} - -void BandedWG :: stopBowing( StkFloat rate ) -{ - adsr_.setReleaseRate(rate); - adsr_.keyOff(); -} - -void BandedWG :: pluck( StkFloat amplitude ) -{ - int j; - StkFloat min_len = delay_[nModes_-1].getDelay(); - for (int i=0; isetFrequency( frequency ); - - if ( doPluck_ ) - this->pluck( amplitude ); - else - this->startBowing( amplitude, amplitude * 0.001 ); -} - -void BandedWG :: noteOff( StkFloat amplitude ) -{ - if ( !doPluck_ ) - this->stopBowing( (1.0 - amplitude) * 0.005 ); -} - -StkFloat BandedWG :: tick( unsigned int ) -{ - int k; - - StkFloat input = 0.0; - if ( doPluck_ ) { - input = 0.0; - // input = strikeAmp_/nModes_; - // strikeAmp_ = 0.0; - } - else { - if ( integrationConstant_ == 0.0 ) - velocityInput_ = 0.0; - else - velocityInput_ = integrationConstant_ * velocityInput_; - - for ( k=0; k 128.0 ) ) { - oStream_ << "BandedWG::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_BowPressure_) { // 2 - if ( normalizedValue == 0.0 ) - doPluck_ = true; - else { - doPluck_ = false; - bowTable_.setSlope( 10.0 - (9.0 * normalizedValue)); - } - } - else if (number == 4) { // 4 - if ( !trackVelocity_ ) trackVelocity_ = true; - bowTarget_ += 0.005 * (normalizedValue - bowPosition_); - bowPosition_ = normalizedValue; - //adsr_.setTarget(bowPosition_); - } - else if (number == 8) // 8 - this->setStrikePosition( normalizedValue ); - else if (number == __SK_AfterTouch_Cont_) { // 128 - //bowTarget_ += 0.02 * (normalizedValue - bowPosition_); - //bowPosition_ = normalizedValue; - if ( trackVelocity_ ) trackVelocity_ = false; - maxVelocity_ = 0.13 * normalizedValue; - adsr_.setTarget(normalizedValue); - } - else if (number == __SK_ModWheel_) { // 1 - // baseGain_ = 0.9989999999 + (0.001 * normalizedValue ); - baseGain_ = 0.8999999999999999 + (0.1 * normalizedValue); - // std::cerr << "Yuck!" << std::endl; - for (int i=0; isetPreset((int) value); -#if defined(_STK_DEBUG_) - else { - oStream_ << "BandedWG::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/BeeThree.cpp b/source/StkUGens/stk-4.4.4/src/BeeThree.cpp deleted file mode 100644 index 3386c87ae4..0000000000 --- a/source/StkUGens/stk-4.4.4/src/BeeThree.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/***************************************************/ -/*! \class BeeThree - \brief STK Hammond-oid organ FM synthesis instrument. - - This class implements a simple 4 operator - topology, also referred to as algorithm 8 of - the TX81Z. - - \code - Algorithm 8 is : - 1 --. - 2 -\| - +-> Out - 3 -/| - 4 -- - \endcode - - Control Change Numbers: - - Operator 4 (feedback) Gain = 2 - - Operator 3 Gain = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "BeeThree.h" - -namespace stk { - -BeeThree :: BeeThree( void ) - : FM() -{ - // Concatenate the STK rawwave path to the rawwave files - for ( unsigned int i=0; i<3; i++ ) - waves_[i] = new FileLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), true ); - waves_[3] = new FileLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), true ); - - this->setRatio( 0, 0.999 ); - this->setRatio( 1, 1.997 ); - this->setRatio( 2, 3.006 ); - this->setRatio( 3, 6.009 ); - - gains_[0] = fmGains_[95]; - gains_[1] = fmGains_[95]; - gains_[2] = fmGains_[99]; - gains_[3] = fmGains_[95]; - - adsr_[0]->setAllTimes( 0.005, 0.003, 1.0, 0.01 ); - adsr_[1]->setAllTimes( 0.005, 0.003, 1.0, 0.01 ); - adsr_[2]->setAllTimes( 0.005, 0.003, 1.0, 0.01 ); - adsr_[3]->setAllTimes( 0.005, 0.001, 0.4, 0.03 ); - - twozero_.setGain( 0.1 ); -} - -BeeThree :: ~BeeThree( void ) -{ -} - -void BeeThree :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - gains_[0] = amplitude * fmGains_[95]; - gains_[1] = amplitude * fmGains_[95]; - gains_[2] = amplitude * fmGains_[99]; - gains_[3] = amplitude * fmGains_[95]; - this->setFrequency( frequency ); - this->keyOn(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/BiQuad.cpp b/source/StkUGens/stk-4.4.4/src/BiQuad.cpp deleted file mode 100644 index 52263ec42c..0000000000 --- a/source/StkUGens/stk-4.4.4/src/BiQuad.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/***************************************************/ -/*! \class BiQuad - \brief STK biquad (two-pole, two-zero) filter class. - - This class implements a two-pole, two-zero digital filter. - Methods are provided for creating a resonance or notch in the - frequency response while maintaining a constant filter gain. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "BiQuad.h" -#include - -namespace stk { - -BiQuad :: BiQuad() : Filter() -{ - b_.resize( 3, 0.0 ); - a_.resize( 3, 0.0 ); - b_[0] = 1.0; - a_[0] = 1.0; - inputs_.resize( 3, 1, 0.0 ); - outputs_.resize( 3, 1, 0.0 ); - - Stk::addSampleRateAlert( this ); -} - -BiQuad :: ~BiQuad() -{ - Stk::removeSampleRateAlert( this ); -} - -void BiQuad :: setCoefficients( StkFloat b0, StkFloat b1, StkFloat b2, StkFloat a1, StkFloat a2, bool clearState ) -{ - b_[0] = b0; - b_[1] = b1; - b_[2] = b2; - a_[1] = a1; - a_[2] = a2; - - if ( clearState ) this->clear(); -} - -void BiQuad :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - if ( !ignoreSampleRateChange_ ) { - oStream_ << "BiQuad::sampleRateChanged: you may need to recompute filter coefficients!"; - handleError( StkError::WARNING ); - } -} - -void BiQuad :: setResonance( StkFloat frequency, StkFloat radius, bool normalize ) -{ -#if defined(_STK_DEBUG_) - if ( frequency < 0.0 || frequency > 0.5 * Stk::sampleRate() ) { - oStream_ << "BiQuad::setResonance: frequency argument (" << frequency << ") is out of range!"; - handleError( StkError::WARNING ); return; - } - if ( radius < 0.0 || radius >= 1.0 ) { - oStream_ << "BiQuad::setResonance: radius argument (" << radius << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - a_[2] = radius * radius; - a_[1] = -2.0 * radius * cos( TWO_PI * frequency / Stk::sampleRate() ); - - if ( normalize ) { - // Use zeros at +- 1 and normalize the filter peak gain. - b_[0] = 0.5 - 0.5 * a_[2]; - b_[1] = 0.0; - b_[2] = -b_[0]; - } -} - -void BiQuad :: setNotch( StkFloat frequency, StkFloat radius ) -{ -#if defined(_STK_DEBUG_) - if ( frequency < 0.0 || frequency > 0.5 * Stk::sampleRate() ) { - oStream_ << "BiQuad::setNotch: frequency argument (" << frequency << ") is out of range!"; - handleError( StkError::WARNING ); return; - } - if ( radius < 0.0 ) { - oStream_ << "BiQuad::setNotch: radius argument (" << radius << ") is negative!"; - handleError( StkError::WARNING ); return; - } -#endif - - // This method does not attempt to normalize the filter gain. - b_[2] = radius * radius; - b_[1] = (StkFloat) -2.0 * radius * cos( TWO_PI * (double) frequency / Stk::sampleRate() ); -} - -void BiQuad :: setEqualGainZeroes( void ) -{ - b_[0] = 1.0; - b_[1] = 0.0; - b_[2] = -1.0; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Blit.cpp b/source/StkUGens/stk-4.4.4/src/Blit.cpp deleted file mode 100644 index cff786edd1..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Blit.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/***************************************************/ -/*! \class Blit - \brief STK band-limited impulse train class. - - This class generates a band-limited impulse train using a - closed-form algorithm reported by Stilson and Smith in "Alias-Free - Digital Synthesis of Classic Analog Waveforms", 1996. The user - can specify both the fundamental frequency of the impulse train - and the number of harmonics contained in the resulting signal. - - The signal is normalized so that the peak value is +/-1.0. - - If nHarmonics is 0, then the signal will contain all harmonics up - to half the sample rate. Note, however, that this setting may - produce aliasing in the signal when the frequency is changing (no - automatic modification of the number of harmonics is performed by - the setFrequency() function). - - Original code by Robin Davies, 2005. - Revisions by Gary Scavone for STK, 2005. -*/ -/***************************************************/ - -#include "Blit.h" - -namespace stk { - -Blit:: Blit( StkFloat frequency ) -{ - if ( frequency <= 0.0 ) { - oStream_ << "Blit::Blit: argument (" << frequency << ") must be positive!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - nHarmonics_ = 0; - this->setFrequency( frequency ); - this->reset(); -} - -Blit :: ~Blit() -{ -} - -void Blit :: reset() -{ - phase_ = 0.0; - lastFrame_[0] = 0.0; -} - -void Blit :: setFrequency( StkFloat frequency ) -{ - if ( frequency <= 0.0 ) { - oStream_ << "Blit::setFrequency: argument (" << frequency << ") must be positive!"; - handleError( StkError::WARNING ); return; - } - - p_ = Stk::sampleRate() / frequency; - rate_ = PI / p_; - this->updateHarmonics(); -} - -void Blit :: setHarmonics( unsigned int nHarmonics ) -{ - nHarmonics_ = nHarmonics; - this->updateHarmonics(); -} - -void Blit :: updateHarmonics( void ) -{ - if ( nHarmonics_ <= 0 ) { - unsigned int maxHarmonics = (unsigned int) floor( 0.5 * p_ ); - m_ = 2 * maxHarmonics + 1; - } - else - m_ = 2 * nHarmonics_ + 1; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/BlitSaw.cpp b/source/StkUGens/stk-4.4.4/src/BlitSaw.cpp deleted file mode 100644 index f732a8e422..0000000000 --- a/source/StkUGens/stk-4.4.4/src/BlitSaw.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/***************************************************/ -/*! \class BlitSaw - \brief STK band-limited sawtooth wave class. - - This class generates a band-limited sawtooth waveform using a - closed-form algorithm reported by Stilson and Smith in "Alias-Free - Digital Synthesis of Classic Analog Waveforms", 1996. The user - can specify both the fundamental frequency of the sawtooth and the - number of harmonics contained in the resulting signal. - - If nHarmonics is 0, then the signal will contain all harmonics up - to half the sample rate. Note, however, that this setting may - produce aliasing in the signal when the frequency is changing (no - automatic modification of the number of harmonics is performed by - the setFrequency() function). - - Based on initial code of Robin Davies, 2005. - Modified algorithm code by Gary Scavone, 2005. -*/ -/***************************************************/ - -#include "BlitSaw.h" - -namespace stk { - -BlitSaw:: BlitSaw( StkFloat frequency ) -{ - if ( frequency <= 0.0 ) { - oStream_ << "BlitSaw::BlitSaw: argument (" << frequency << ") must be positive!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - nHarmonics_ = 0; - this->reset(); - this->setFrequency( frequency ); -} - -BlitSaw :: ~BlitSaw() -{ -} - -void BlitSaw :: reset() -{ - phase_ = 0.0f; - state_ = 0.0; - lastFrame_[0] = 0.0; -} - -void BlitSaw :: setFrequency( StkFloat frequency ) -{ - if ( frequency <= 0.0 ) { - oStream_ << "BlitSaw::setFrequency: argument (" << frequency << ") must be positive!"; - handleError( StkError::WARNING ); return; - } - - p_ = Stk::sampleRate() / frequency; - C2_ = 1 / p_; - rate_ = PI * C2_; - this->updateHarmonics(); -} - -void BlitSaw :: setHarmonics( unsigned int nHarmonics ) -{ - nHarmonics_ = nHarmonics; - this->updateHarmonics(); - - // I found that the initial DC offset could be minimized with an - // initial state setting as given below. This initialization should - // only happen before starting the oscillator for the first time - // (but after setting the frequency and number of harmonics). I - // struggled a bit to decide where best to put this and finally - // settled on here. In general, the user shouldn't be messing with - // the number of harmonics once the oscillator is running because - // this is automatically taken care of in the setFrequency() - // function. (GPS - 1 October 2005) - state_ = -0.5 * a_; -} - -void BlitSaw :: updateHarmonics( void ) -{ - if ( nHarmonics_ <= 0 ) { - unsigned int maxHarmonics = (unsigned int) floor( 0.5 * p_ ); - m_ = 2 * maxHarmonics + 1; - } - else - m_ = 2 * nHarmonics_ + 1; - - a_ = m_ / p_; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/BlitSquare.cpp b/source/StkUGens/stk-4.4.4/src/BlitSquare.cpp deleted file mode 100644 index bf9669795b..0000000000 --- a/source/StkUGens/stk-4.4.4/src/BlitSquare.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/***************************************************/ -/*! \class BlitSquare - \brief STK band-limited square wave class. - - This class generates a band-limited square wave signal. It is - derived in part from the approach reported by Stilson and Smith in - "Alias-Free Digital Synthesis of Classic Analog Waveforms", 1996. - The algorithm implemented in this class uses a SincM function with - an even M value to achieve a bipolar bandlimited impulse train. - This signal is then integrated to achieve a square waveform. The - integration process has an associated DC offset so a DC blocking - filter is applied at the output. - - The user can specify both the fundamental frequency of the - waveform and the number of harmonics contained in the resulting - signal. - - If nHarmonics is 0, then the signal will contain all harmonics up - to half the sample rate. Note, however, that this setting may - produce aliasing in the signal when the frequency is changing (no - automatic modification of the number of harmonics is performed by - the setFrequency() function). Also note that the harmonics of a - square wave fall at odd integer multiples of the fundamental, so - aliasing will happen with a lower fundamental than with the other - Blit waveforms. This class is not guaranteed to be well behaved - in the presence of significant aliasing. - - Based on initial code of Robin Davies, 2005 - Modified algorithm code by Gary Scavone, 2005 - 2010. -*/ -/***************************************************/ - -#include "BlitSquare.h" - -namespace stk { - -BlitSquare:: BlitSquare( StkFloat frequency ) -{ - if ( frequency <= 0.0 ) { - oStream_ << "BlitSquare::BlitSquare: argument (" << frequency << ") must be positive!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - nHarmonics_ = 0; - this->setFrequency( frequency ); - this->reset(); -} - -BlitSquare :: ~BlitSquare() -{ -} - -void BlitSquare :: reset() -{ - phase_ = 0.0; - lastFrame_[0] = 0.0; - dcbState_ = 0.0; - lastBlitOutput_ = 0; -} - -void BlitSquare :: setFrequency( StkFloat frequency ) -{ - if ( frequency <= 0.0 ) { - oStream_ << "BlitSquare::setFrequency: argument (" << frequency << ") must be positive!"; - handleError( StkError::WARNING ); return; - } - - // By using an even value of the parameter M, we get a bipolar blit - // waveform at half the blit frequency. Thus, we need to scale the - // frequency value here by 0.5. (GPS, 2006). - p_ = 0.5 * Stk::sampleRate() / frequency; - rate_ = PI / p_; - this->updateHarmonics(); -} - -void BlitSquare :: setHarmonics( unsigned int nHarmonics ) -{ - nHarmonics_ = nHarmonics; - this->updateHarmonics(); -} - -void BlitSquare :: updateHarmonics( void ) -{ - // Make sure we end up with an even value of the parameter M here. - if ( nHarmonics_ <= 0 ) { - unsigned int maxHarmonics = (unsigned int) floor( 0.5 * p_ ); - m_ = 2 * (maxHarmonics + 1); - } - else - m_ = 2 * (nHarmonics_ + 1); - - a_ = m_ / p_; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/BlowBotl.cpp b/source/StkUGens/stk-4.4.4/src/BlowBotl.cpp deleted file mode 100644 index 1946457cc1..0000000000 --- a/source/StkUGens/stk-4.4.4/src/BlowBotl.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/***************************************************/ -/*! \class BlowBotl - \brief STK blown bottle instrument class. - - This class implements a helmholtz resonator - (biquad filter) with a polynomial jet - excitation (a la Cook). - - Control Change Numbers: - - Noise Gain = 4 - - Vibrato Frequency = 11 - - Vibrato Gain = 1 - - Volume = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "BlowBotl.h" -#include "SKINI.msg" - -namespace stk { - -#define __BOTTLE_RADIUS_ 0.999 - -BlowBotl :: BlowBotl( void ) -{ - dcBlock_.setBlockZero(); - - vibrato_.setFrequency( 5.925 ); - vibratoGain_ = 0.0; - - resonator_.setResonance( 500.0, __BOTTLE_RADIUS_, true ); - adsr_.setAllTimes( 0.005, 0.01, 0.8, 0.010 ); - - noiseGain_ = 20.0; - maxPressure_ = 0.0; -} - -BlowBotl :: ~BlowBotl( void ) -{ -} - -void BlowBotl :: clear( void ) -{ - resonator_.clear(); -} - -void BlowBotl :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "BlowBotl::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - resonator_.setResonance( frequency, __BOTTLE_RADIUS_, true ); -} - -void BlowBotl :: startBlowing( StkFloat amplitude, StkFloat rate ) -{ - if ( amplitude <= 0.0 || rate <= 0.0 ) { - oStream_ << "BlowBotl::startBowing: one or more arguments is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - adsr_.setAttackRate( rate ); - maxPressure_ = amplitude; - adsr_.keyOn(); -} - -void BlowBotl :: stopBlowing( StkFloat rate ) -{ - if ( rate <= 0.0 ) { - oStream_ << "BlowBotl::stopBowing: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - adsr_.setReleaseRate( rate ); - adsr_.keyOff(); -} - -void BlowBotl :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - startBlowing( 1.1 + (amplitude * 0.20), amplitude * 0.02); - outputGain_ = amplitude + 0.001; -} - -void BlowBotl :: noteOff( StkFloat amplitude ) -{ - this->stopBlowing( amplitude * 0.02 ); -} - -void BlowBotl :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( value < 0 || ( number != 101 && value > 128.0 ) ) { - oStream_ << "BlowBotl::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_NoiseLevel_) // 4 - noiseGain_ = normalizedValue * 30.0; - else if (number == __SK_ModFrequency_) // 11 - vibrato_.setFrequency( normalizedValue * 12.0 ); - else if (number == __SK_ModWheel_) // 1 - vibratoGain_ = normalizedValue * 0.4; - else if (number == __SK_AfterTouch_Cont_) // 128 - adsr_.setTarget( normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "BlowBotl::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/BlowHole.cpp b/source/StkUGens/stk-4.4.4/src/BlowHole.cpp deleted file mode 100644 index a618ed2458..0000000000 --- a/source/StkUGens/stk-4.4.4/src/BlowHole.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/***************************************************/ -/*! \class BlowHole - \brief STK clarinet physical model with one - register hole and one tonehole. - - This class is based on the clarinet model, - with the addition of a two-port register hole - and a three-port dynamic tonehole - implementation, as discussed by Scavone and - Cook (1998). - - In this implementation, the distances between - the reed/register hole and tonehole/bell are - fixed. As a result, both the tonehole and - register hole will have variable influence on - the playing frequency, which is dependent on - the length of the air column. In addition, - the highest playing freqeuency is limited by - these fixed lengths. - - This is a digital waveguide model, making its - use possibly subject to patents held by Stanford - University, Yamaha, and others. - - Control Change Numbers: - - Reed Stiffness = 2 - - Noise Gain = 4 - - Tonehole State = 11 - - Register State = 1 - - Breath Pressure = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "BlowHole.h" -#include "SKINI.msg" -#include - -namespace stk { - -BlowHole :: BlowHole( StkFloat lowestFrequency ) -{ - if ( lowestFrequency <= 0.0 ) { - oStream_ << "BlowHole::BlowHole: argument is less than or equal to zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - unsigned long nDelays = (unsigned long) ( 0.5 * Stk::sampleRate() / lowestFrequency ); - - // delays[0] is the delay line between the reed and the register vent. - delays_[0].setDelay( 5.0 * Stk::sampleRate() / 22050.0 ); - // delays[1] is the delay line between the register vent and the tonehole. - delays_[1].setMaximumDelay( nDelays + 1 ); - // delays[2] is the delay line between the tonehole and the end of the bore. - delays_[2].setDelay( 4.0 * Stk::sampleRate() / 22050.0 ); - - reedTable_.setOffset( 0.7 ); - reedTable_.setSlope( -0.3 ); - - // Calculate the initial tonehole three-port scattering coefficient - StkFloat rb = 0.0075; // main bore radius - StkFloat rth = 0.003; // tonehole radius - scatter_ = -pow(rth,2) / ( pow(rth,2) + 2*pow(rb,2) ); - - // Calculate tonehole coefficients and set for initially open. - StkFloat te = 1.4 * rth; // effective length of the open hole - thCoeff_ = (te*2*Stk::sampleRate() - 347.23) / (te*2*Stk::sampleRate() + 347.23); - tonehole_.setA1( -thCoeff_ ); - tonehole_.setB0( thCoeff_ ); - tonehole_.setB1( -1.0 ); - - // Calculate register hole filter coefficients - double r_rh = 0.0015; // register vent radius - te = 1.4 * r_rh; // effective length of the open hole - double xi = 0.0; // series resistance term - double zeta = 347.23 + 2*PI*pow(rb,2)*xi/1.1769; - double psi = 2*PI*pow(rb,2)*te / (PI*pow(r_rh,2)); - StkFloat rhCoeff = (zeta - 2 * Stk::sampleRate() * psi) / (zeta + 2 * Stk::sampleRate() * psi); - rhGain_ = -347.23 / (zeta + 2 * Stk::sampleRate() * psi); - vent_.setA1( rhCoeff ); - vent_.setB0( 1.0 ); - vent_.setB1( 1.0 ); - // Start with register vent closed - vent_.setGain( 0.0 ); - - vibrato_.setFrequency((StkFloat) 5.735); - outputGain_ = 1.0; - noiseGain_ = 0.2; - vibratoGain_ = 0.01; - - this->setFrequency( 220.0 ); - this->clear(); -} - -BlowHole :: ~BlowHole( void ) -{ -} - -void BlowHole :: clear( void ) -{ - delays_[0].clear(); - delays_[1].clear(); - delays_[2].clear(); - filter_.tick( 0.0 ); - tonehole_.tick( 0.0 ); - vent_.tick( 0.0 ); -} - -void BlowHole :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "BlowHole::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - // Account for approximate filter delays and one sample "lastOut" delay. - StkFloat delay = ( Stk::sampleRate() / frequency ) * 0.5 - 3.5; - delay -= delays_[0].getDelay() + delays_[2].getDelay(); - - delays_[1].setDelay( delay ); -} - -void BlowHole :: setVent( StkFloat newValue ) -{ - // This method allows setting of the register vent "open-ness" at - // any point between "Open" (newValue = 1) and "Closed" - // (newValue = 0). - - StkFloat gain; - - if ( newValue <= 0.0 ) - gain = 0.0; - else if ( newValue >= 1.0 ) - gain = rhGain_; - else - gain = newValue * rhGain_; - - vent_.setGain( gain ); -} - -void BlowHole :: setTonehole( StkFloat newValue ) -{ - // This method allows setting of the tonehole "open-ness" at - // any point between "Open" (newValue = 1) and "Closed" - // (newValue = 0). - StkFloat new_coeff; - - if ( newValue <= 0.0 ) - new_coeff = 0.9995; - else if ( newValue >= 1.0 ) - new_coeff = thCoeff_; - else - new_coeff = ( newValue * (thCoeff_ - 0.9995) ) + 0.9995; - - tonehole_.setA1( -new_coeff ); - tonehole_.setB0( new_coeff ); -} - -void BlowHole :: startBlowing( StkFloat amplitude, StkFloat rate ) -{ - if ( amplitude <= 0.0 || rate <= 0.0 ) { - oStream_ << "BlowHole::startBlowing: one or more arguments is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - envelope_.setRate( rate ); - envelope_.setTarget( amplitude ); -} - -void BlowHole :: stopBlowing( StkFloat rate ) -{ - if ( rate <= 0.0 ) { - oStream_ << "BlowHole::stopBlowing: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - envelope_.setRate( rate ); - envelope_.setTarget( 0.0 ); -} - -void BlowHole :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - this->startBlowing( 0.55 + (amplitude * 0.30), amplitude * 0.005 ); - outputGain_ = amplitude + 0.001; -} - -void BlowHole :: noteOff( StkFloat amplitude ) -{ - this->stopBlowing( amplitude * 0.01 ); -} - -void BlowHole :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "BlowHole::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_ReedStiffness_) // 2 - reedTable_.setSlope( -0.44 + (0.26 * normalizedValue) ); - else if (number == __SK_NoiseLevel_) // 4 - noiseGain_ = ( normalizedValue * 0.4); - else if (number == __SK_ModFrequency_) // 11 - this->setTonehole( normalizedValue ); - else if (number == __SK_ModWheel_) // 1 - this->setVent( normalizedValue ); - else if (number == __SK_AfterTouch_Cont_) // 128 - envelope_.setValue( normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "BlowHole::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Bowed.cpp b/source/StkUGens/stk-4.4.4/src/Bowed.cpp deleted file mode 100644 index da1166a032..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Bowed.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/***************************************************/ -/*! \class Bowed - \brief STK bowed string instrument class. - - This class implements a bowed string model, a - la Smith (1986), after McIntyre, Schumacher, - Woodhouse (1983). - - This is a digital waveguide model, making its - use possibly subject to patents held by - Stanford University, Yamaha, and others. - - Control Change Numbers: - - Bow Pressure = 2 - - Bow Position = 4 - - Vibrato Frequency = 11 - - Vibrato Gain = 1 - - Bow Velocity = 100 - - Frequency = 101 - - Volume = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. - Contributions by Esteban Maestre, 2011. -*/ -/***************************************************/ - -#include "Bowed.h" -#include "SKINI.msg" - -namespace stk { - -Bowed :: Bowed( StkFloat lowestFrequency ) -{ - if ( lowestFrequency <= 0.0 ) { - oStream_ << "Bowed::Bowed: argument is less than or equal to zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - unsigned long nDelays = (unsigned long) ( Stk::sampleRate() / lowestFrequency ); - - neckDelay_.setMaximumDelay( nDelays + 1 ); - neckDelay_.setDelay( 100.0 ); - - bridgeDelay_.setMaximumDelay( nDelays + 1 ); - bridgeDelay_.setDelay( 29.0 ); - - bowTable_.setSlope( 3.0 ); - bowTable_.setOffset( 0.001); - bowDown_ = false; - maxVelocity_ = 0.25; - - vibrato_.setFrequency( 6.12723 ); - vibratoGain_ = 0.0; - - stringFilter_.setPole( 0.75 - (0.2 * 22050.0 / Stk::sampleRate()) ); - stringFilter_.setGain( 0.95 ); - - // Old single body filter - //bodyFilter_.setResonance( 500.0, 0.85, true ); - //bodyFilter_.setGain( 0.2 ); - - // New body filter provided by Esteban Maestre (cascade of second-order sections) - bodyFilters_[0].setCoefficients( 1.0, 1.5667, 0.3133, -0.5509, -0.3925 ); - bodyFilters_[1].setCoefficients( 1.0, -1.9537, 0.9542, -1.6357, 0.8697 ); - bodyFilters_[2].setCoefficients( 1.0, -1.6683, 0.8852, -1.7674, 0.8735 ); - bodyFilters_[3].setCoefficients( 1.0, -1.8585, 0.9653, -1.8498, 0.9516 ); - bodyFilters_[4].setCoefficients( 1.0, -1.9299, 0.9621, -1.9354, 0.9590 ); - bodyFilters_[5].setCoefficients( 1.0, -1.9800, 0.9888, -1.9867, 0.9923 ); - - adsr_.setAllTimes( 0.02, 0.005, 0.9, 0.01 ); - - betaRatio_ = 0.127236; - - // Necessary to initialize internal variables. - this->setFrequency( 220.0 ); - this->clear(); -} - -Bowed :: ~Bowed( void ) -{ -} - -void Bowed :: clear( void ) -{ - neckDelay_.clear(); - bridgeDelay_.clear(); - stringFilter_.clear(); - for ( int i=0; i<6; i++ ) bodyFilters_[i].clear(); -} - -void Bowed :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Bowed::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - // Delay = length - approximate filter delay. - baseDelay_ = Stk::sampleRate() / frequency - 4.0; - if ( baseDelay_ <= 0.0 ) baseDelay_ = 0.3; - bridgeDelay_.setDelay( baseDelay_ * betaRatio_ ); // bow to bridge length - neckDelay_.setDelay( baseDelay_ * (1.0 - betaRatio_) ); // bow to nut (finger) length -} - -void Bowed :: startBowing( StkFloat amplitude, StkFloat rate ) -{ - if ( amplitude <= 0.0 || rate <= 0.0 ) { - oStream_ << "Bowed::startBowing: one or more arguments is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - adsr_.setAttackRate( rate ); - adsr_.keyOn(); - maxVelocity_ = 0.03 + ( 0.2 * amplitude ); - bowDown_ = true; -} - -void Bowed :: stopBowing( StkFloat rate ) -{ - if ( rate <= 0.0 ) { - oStream_ << "Bowed::stopBowing: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - adsr_.setReleaseRate( rate ); - adsr_.keyOff(); -} - -void Bowed :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->startBowing( amplitude, amplitude * 0.001 ); - this->setFrequency( frequency ); -} - -void Bowed :: noteOff( StkFloat amplitude ) -{ - this->stopBowing( (1.0 - amplitude) * 0.005 ); -} - -void Bowed :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( value < 0 || ( number != 101 && value > 128.0 ) ) { - oStream_ << "Bowed::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if ( number == __SK_BowPressure_ ) { // 2 - if ( normalizedValue > 0.0 ) bowDown_ = true; - else bowDown_ = false; - bowTable_.setSlope( 5.0 - (4.0 * normalizedValue) ); - } - else if ( number == __SK_BowPosition_ ) { // 4 - betaRatio_ = normalizedValue; - bridgeDelay_.setDelay( baseDelay_ * betaRatio_ ); - neckDelay_.setDelay( baseDelay_ * (1.0 - betaRatio_) ); - } - else if ( number == __SK_ModFrequency_ ) // 11 - vibrato_.setFrequency( normalizedValue * 12.0 ); - else if ( number == __SK_ModWheel_ ) // 1 - vibratoGain_ = ( normalizedValue * 0.4 ); - else if ( number == 100 ) // 100: set instantaneous bow velocity - adsr_.setTarget( normalizedValue ); - else if ( number == 101 ) // 101: set instantaneous value of frequency - this->setFrequency( value ); - else if (number == __SK_AfterTouch_Cont_) // 128 - adsr_.setTarget( normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Bowed::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Brass.cpp b/source/StkUGens/stk-4.4.4/src/Brass.cpp deleted file mode 100644 index 89c6d1ae50..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Brass.cpp +++ /dev/null @@ -1,158 +0,0 @@ -/***************************************************/ -/*! \class Brass - \brief STK simple brass instrument class. - - This class implements a simple brass instrument - waveguide model, a la Cook (TBone, HosePlayer). - - This is a digital waveguide model, making its - use possibly subject to patents held by - Stanford University, Yamaha, and others. - - Control Change Numbers: - - Lip Tension = 2 - - Slide Length = 4 - - Vibrato Frequency = 11 - - Vibrato Gain = 1 - - Volume = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Brass.h" -#include "SKINI.msg" -#include - -namespace stk { - -Brass :: Brass( StkFloat lowestFrequency ) -{ - if ( lowestFrequency <= 0.0 ) { - oStream_ << "Brass::Brass: argument is less than or equal to zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - unsigned long nDelays = (unsigned long) ( Stk::sampleRate() / lowestFrequency ); - delayLine_.setMaximumDelay( nDelays + 1 ); - - lipFilter_.setGain( 0.03 ); - dcBlock_.setBlockZero(); - adsr_.setAllTimes( 0.005, 0.001, 1.0, 0.010 ); - - vibrato_.setFrequency( 6.137 ); - vibratoGain_ = 0.0; - maxPressure_ = 0.0; - lipTarget_ = 0.0; - - this->clear(); - - // This is necessary to initialize variables. - this->setFrequency( 220.0 ); -} - -Brass :: ~Brass( void ) -{ -} - -void Brass :: clear( void ) -{ - delayLine_.clear(); - lipFilter_.clear(); - dcBlock_.clear(); -} - -void Brass :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Brass::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - // Fudge correction for filter delays. - slideTarget_ = ( Stk::sampleRate() / frequency * 2.0 ) + 3.0; - delayLine_.setDelay( slideTarget_ ); // play a harmonic - - lipTarget_ = frequency; - lipFilter_.setResonance( frequency, 0.997 ); -} - -void Brass :: setLip( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Brass::setLip: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - lipFilter_.setResonance( frequency, 0.997 ); -} - -void Brass :: startBlowing( StkFloat amplitude, StkFloat rate ) -{ - if ( amplitude <= 0.0 || rate <= 0.0 ) { - oStream_ << "Brass::startBlowing: one or more arguments is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - adsr_.setAttackRate( rate ); - maxPressure_ = amplitude; - adsr_.keyOn(); -} - -void Brass :: stopBlowing( StkFloat rate ) -{ - if ( rate <= 0.0 ) { - oStream_ << "Brass::stopBlowing: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - adsr_.setReleaseRate( rate ); - adsr_.keyOff(); -} - -void Brass :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - this->startBlowing( amplitude, amplitude * 0.001 ); -} - -void Brass :: noteOff( StkFloat amplitude ) -{ - this->stopBlowing( amplitude * 0.005 ); -} - -void Brass :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Brass::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_LipTension_) { // 2 - StkFloat temp = lipTarget_ * pow( 4.0, (2.0 * normalizedValue) - 1.0 ); - this->setLip( temp ); - } - else if (number == __SK_SlideLength_) // 4 - delayLine_.setDelay( slideTarget_ * (0.5 + normalizedValue) ); - else if (number == __SK_ModFrequency_) // 11 - vibrato_.setFrequency( normalizedValue * 12.0 ); - else if (number == __SK_ModWheel_ ) // 1 - vibratoGain_ = normalizedValue * 0.4; - else if (number == __SK_AfterTouch_Cont_) // 128 - adsr_.setTarget( normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Brass::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Chorus.cpp b/source/StkUGens/stk-4.4.4/src/Chorus.cpp deleted file mode 100644 index 2c2622c869..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Chorus.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/***************************************************/ -/*! \class Chorus - \brief STK chorus effect class. - - This class implements a chorus effect. It takes a monophonic - input signal and produces a stereo output signal. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Chorus.h" - -namespace stk { - -Chorus :: Chorus( StkFloat baseDelay ) -{ - lastFrame_.resize( 1, 2, 0.0 ); // resize lastFrame_ for stereo output - delayLine_[0].setMaximumDelay( (unsigned long) (baseDelay * 1.414) + 2); - delayLine_[0].setDelay( baseDelay ); - delayLine_[1].setMaximumDelay( (unsigned long) (baseDelay * 1.414) + 2); - delayLine_[1].setDelay( baseDelay ); - baseLength_ = baseDelay; - - mods_[0].setFrequency( 0.2 ); - mods_[1].setFrequency( 0.222222 ); - modDepth_ = 0.05; - effectMix_ = 0.5; - this->clear(); -} - -void Chorus :: clear( void ) -{ - delayLine_[0].clear(); - delayLine_[1].clear(); - lastFrame_[0] = 0.0; - lastFrame_[1] = 0.0; -} - - void Chorus :: setModDepth( StkFloat depth ) -{ - if ( depth < 0.0 || depth > 1.0 ) { - oStream_ << "Chorus::setModDepth(): depth argument must be between 0.0 - 1.0!"; - handleError( StkError::WARNING ); return; - } - - modDepth_ = depth; -}; - -void Chorus :: setModFrequency( StkFloat frequency ) -{ - mods_[0].setFrequency( frequency ); - mods_[1].setFrequency( frequency * 1.1111 ); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Clarinet.cpp b/source/StkUGens/stk-4.4.4/src/Clarinet.cpp deleted file mode 100644 index 723434b252..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Clarinet.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/***************************************************/ -/*! \class Clarinet - \brief STK clarinet physical model class. - - This class implements a simple clarinet - physical model, as discussed by Smith (1986), - McIntyre, Schumacher, Woodhouse (1983), and - others. - - This is a digital waveguide model, making its - use possibly subject to patents held by Stanford - University, Yamaha, and others. - - Control Change Numbers: - - Reed Stiffness = 2 - - Noise Gain = 4 - - Vibrato Frequency = 11 - - Vibrato Gain = 1 - - Breath Pressure = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Clarinet.h" -#include "SKINI.msg" - -namespace stk { - -Clarinet :: Clarinet( StkFloat lowestFrequency ) -{ - if ( lowestFrequency <= 0.0 ) { - oStream_ << "Clarinet::Clarinet: argument is less than or equal to zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - unsigned long nDelays = (unsigned long) ( 0.5 * Stk::sampleRate() / lowestFrequency ); - delayLine_.setMaximumDelay( nDelays + 1 ); - - reedTable_.setOffset( 0.7 ); - reedTable_.setSlope( -0.3 ); - - vibrato_.setFrequency( 5.735 ); - outputGain_ = 1.0; - noiseGain_ = 0.2; - vibratoGain_ = 0.1; - - this->setFrequency( 220.0 ); - this->clear(); -} - -Clarinet :: ~Clarinet( void ) -{ -} - -void Clarinet :: clear( void ) -{ - delayLine_.clear(); - filter_.tick( 0.0 ); -} - -void Clarinet :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Clarinet::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - // Account for filter delay and one sample "lastOut" delay. - StkFloat delay = ( Stk::sampleRate() / frequency ) * 0.5 - filter_.phaseDelay( frequency ) - 1.0; - delayLine_.setDelay( delay ); -} - -void Clarinet :: startBlowing( StkFloat amplitude, StkFloat rate ) -{ - if ( amplitude <= 0.0 || rate <= 0.0 ) { - oStream_ << "Clarinet::startBlowing: one or more arguments is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - envelope_.setRate( rate ); - envelope_.setTarget( amplitude ); -} - -void Clarinet :: stopBlowing( StkFloat rate ) -{ - if ( rate <= 0.0 ) { - oStream_ << "Clarinet::stopBlowing: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - envelope_.setRate( rate ); - envelope_.setTarget( 0.0 ); -} - -void Clarinet :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - this->startBlowing( 0.55 + (amplitude * 0.30), amplitude * 0.005 ); - outputGain_ = amplitude + 0.001; -} - -void Clarinet :: noteOff( StkFloat amplitude ) -{ - this->stopBlowing( amplitude * 0.01 ); -} - -void Clarinet :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Clarinet::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if ( number == __SK_ReedStiffness_ ) // 2 - reedTable_.setSlope( -0.44 + ( 0.26 * normalizedValue ) ); - else if ( number == __SK_NoiseLevel_ ) // 4 - noiseGain_ = ( normalizedValue * 0.4 ); - else if ( number == __SK_ModFrequency_ ) // 11 - vibrato_.setFrequency( normalizedValue * 12.0 ); - else if ( number == __SK_ModWheel_ ) // 1 - vibratoGain_ = ( normalizedValue * 0.5 ); - else if ( number == __SK_AfterTouch_Cont_ ) // 128 - envelope_.setValue( normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Clarinet::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Delay.cpp b/source/StkUGens/stk-4.4.4/src/Delay.cpp deleted file mode 100644 index b48a1522fc..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Delay.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/***************************************************/ -/*! \class Delay - \brief STK non-interpolating delay line class. - - This class implements a non-interpolating digital delay-line. If - the delay and maximum length are not specified during - instantiation, a fixed maximum length of 4095 and a delay of zero - is set. - - A non-interpolating delay line is typically used in fixed - delay-length applications, such as for reverberation. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Delay.h" - -namespace stk { - -Delay :: Delay( unsigned long delay, unsigned long maxDelay ) -{ - // Writing before reading allows delays from 0 to length-1. - // If we want to allow a delay of maxDelay, we need a - // delay-line of length = maxDelay+1. - if ( delay > maxDelay ) { - oStream_ << "Delay::Delay: maxDelay must be > than delay argument!\n"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( ( maxDelay + 1 ) > inputs_.size() ) - inputs_.resize( maxDelay + 1, 1, 0.0 ); - - inPoint_ = 0; - this->setDelay( delay ); -} - -Delay :: ~Delay() -{ -} - -void Delay :: setMaximumDelay( unsigned long delay ) -{ - if ( delay < inputs_.size() ) return; - inputs_.resize( delay + 1 ); -} - -void Delay :: setDelay( unsigned long delay ) -{ - if ( delay > inputs_.size() - 1 ) { // The value is too big. - oStream_ << "Delay::setDelay: argument (" << delay << ") greater than maximum!\n"; - handleError( StkError::WARNING ); return; - } - - // read chases write - if ( inPoint_ >= delay ) outPoint_ = inPoint_ - delay; - else outPoint_ = inputs_.size() + inPoint_ - delay; - delay_ = delay; -} - -StkFloat Delay :: energy( void ) const -{ - unsigned long i; - register StkFloat e = 0; - if ( inPoint_ >= outPoint_ ) { - for ( i=outPoint_; i= 0.5!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( delay > (StkFloat) maxDelay ) { - oStream_ << "DelayA::DelayA: maxDelay must be > than delay argument!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - // Writing before reading allows delays from 0 to length-1. - if ( maxDelay + 1 > inputs_.size() ) - inputs_.resize( maxDelay + 1, 1, 0.0 ); - - inPoint_ = 0; - this->setDelay( delay ); - apInput_ = 0.0; - doNextOut_ = true; -} - -DelayA :: ~DelayA() -{ -} - -void DelayA :: clear() -{ - for ( unsigned int i=0; i length ) { // The value is too big. - oStream_ << "DelayA::setDelay: argument (" << delay << ") greater than maximum!"; - handleError( StkError::WARNING ); return; - } - - if ( delay < 0.5 ) { - oStream_ << "DelayA::setDelay: argument (" << delay << ") less than 0.5 not possible!"; - handleError( StkError::WARNING ); - } - - StkFloat outPointer = inPoint_ - delay + 1.0; // outPoint chases inpoint - delay_ = delay; - - while ( outPointer < 0 ) - outPointer += length; // modulo maximum length - - outPoint_ = (long) outPointer; // integer part - if ( outPoint_ == length ) outPoint_ = 0; - alpha_ = 1.0 + outPoint_ - outPointer; // fractional part - - if ( alpha_ < 0.5 ) { - // The optimal range for alpha is about 0.5 - 1.5 in order to - // achieve the flattest phase delay response. - outPoint_ += 1; - if ( outPoint_ >= length ) outPoint_ -= length; - alpha_ += (StkFloat) 1.0; - } - - coeff_ = (1.0 - alpha_) / (1.0 + alpha_); // coefficient for allpass -} - -StkFloat DelayA :: tapOut( unsigned long tapDelay ) -{ - long tap = inPoint_ - tapDelay - 1; - while ( tap < 0 ) // Check for wraparound. - tap += inputs_.size(); - - return inputs_[tap]; -} - -void DelayA :: tapIn( StkFloat value, unsigned long tapDelay ) -{ - long tap = inPoint_ - tapDelay - 1; - while ( tap < 0 ) // Check for wraparound. - tap += inputs_.size(); - - inputs_[tap] = value; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/DelayL.cpp b/source/StkUGens/stk-4.4.4/src/DelayL.cpp deleted file mode 100644 index 5d5a0e72dd..0000000000 --- a/source/StkUGens/stk-4.4.4/src/DelayL.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/***************************************************/ -/*! \class DelayL - \brief STK linear interpolating delay line class. - - This class implements a fractional-length digital delay-line using - first-order linear interpolation. If the delay and maximum length - are not specified during instantiation, a fixed maximum length of - 4095 and a delay of zero is set. - - Linear interpolation is an efficient technique for achieving - fractional delay lengths, though it does introduce high-frequency - signal attenuation to varying degrees depending on the fractional - delay setting. The use of higher order Lagrange interpolators can - typically improve (minimize) this attenuation characteristic. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "DelayL.h" - -namespace stk { - -DelayL :: DelayL( StkFloat delay, unsigned long maxDelay ) -{ - if ( delay < 0.0 ) { - oStream_ << "DelayL::DelayL: delay must be >= 0.0!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( delay > (StkFloat) maxDelay ) { - oStream_ << "DelayL::DelayL: maxDelay must be > than delay argument!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - // Writing before reading allows delays from 0 to length-1. - if ( maxDelay + 1 > inputs_.size() ) - inputs_.resize( maxDelay + 1, 1, 0.0 ); - - inPoint_ = 0; - this->setDelay( delay ); - doNextOut_ = true; -} - -DelayL :: ~DelayL() -{ -} - -void DelayL :: setMaximumDelay( unsigned long delay ) -{ - if ( delay < inputs_.size() ) return; - inputs_.resize( delay + 1 ); -} - -void DelayL :: setDelay( StkFloat delay ) -{ - if ( delay + 1 > inputs_.size() ) { // The value is too big. - oStream_ << "DelayL::setDelay: argument (" << delay << ") greater than maximum!"; - handleError( StkError::WARNING ); return; - } - - if (delay < 0 ) { - oStream_ << "DelayL::setDelay: argument (" << delay << ") less than zero!"; - handleError( StkError::WARNING ); return; - } - - StkFloat outPointer = inPoint_ - delay; // read chases write - delay_ = delay; - - while ( outPointer < 0 ) - outPointer += inputs_.size(); // modulo maximum length - - outPoint_ = (long) outPointer; // integer part - if ( outPoint_ == inputs_.size() ) outPoint_ = 0; - alpha_ = outPointer - outPoint_; // fractional part - omAlpha_ = (StkFloat) 1.0 - alpha_; -} - -StkFloat DelayL :: tapOut( unsigned long tapDelay ) -{ - long tap = inPoint_ - tapDelay - 1; - while ( tap < 0 ) // Check for wraparound. - tap += inputs_.size(); - - return inputs_[tap]; -} - -void DelayL :: tapIn( StkFloat value, unsigned long tapDelay ) -{ - long tap = inPoint_ - tapDelay - 1; - while ( tap < 0 ) // Check for wraparound. - tap += inputs_.size(); - - inputs_[tap] = value; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Drummer.cpp b/source/StkUGens/stk-4.4.4/src/Drummer.cpp deleted file mode 100644 index b3f034a467..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Drummer.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/***************************************************/ -/*! \class Drummer - \brief STK drum sample player class. - - This class implements a drum sampling - synthesizer using FileWvIn objects and one-pole - filters. The drum rawwave files are sampled - at 22050 Hz, but will be appropriately - interpolated for other sample rates. You can - specify the maximum polyphony (maximum number - of simultaneous voices) via a #define in the - Drummer.h. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Drummer.h" -#include - -namespace stk { - -// Not really General MIDI yet. -unsigned char genMIDIMap[128] = - { 0,0,0,0,0,0,0,0, // 0-7 - 0,0,0,0,0,0,0,0, // 8-15 - 0,0,0,0,0,0,0,0, // 16-23 - 0,0,0,0,0,0,0,0, // 24-31 - 0,0,0,0,1,0,2,0, // 32-39 - 2,3,6,3,6,4,7,4, // 40-47 - 5,8,5,0,0,0,10,0, // 48-55 - 9,0,0,0,0,0,0,0, // 56-63 - 0,0,0,0,0,0,0,0, // 64-71 - 0,0,0,0,0,0,0,0, // 72-79 - 0,0,0,0,0,0,0,0, // 80-87 - 0,0,0,0,0,0,0,0, // 88-95 - 0,0,0,0,0,0,0,0, // 96-103 - 0,0,0,0,0,0,0,0, // 104-111 - 0,0,0,0,0,0,0,0, // 112-119 - 0,0,0,0,0,0,0,0 // 120-127 - }; - -char waveNames[DRUM_NUMWAVES][16] = - { - "dope.raw", - "bassdrum.raw", - "snardrum.raw", - "tomlowdr.raw", - "tommiddr.raw", - "tomhidrm.raw", - "hihatcym.raw", - "ridecymb.raw", - "crashcym.raw", - "cowbell1.raw", - "tambourn.raw" - }; - -Drummer :: Drummer( void ) : Instrmnt() -{ - // This counts the number of sounding voices. - nSounding_ = 0; - soundOrder_ = std::vector (DRUM_POLYPHONY, -1); - soundNumber_ = std::vector (DRUM_POLYPHONY, -1); -} - -Drummer :: ~Drummer( void ) -{ -} - -void Drummer :: noteOn( StkFloat instrument, StkFloat amplitude ) -{ - if ( amplitude < 0.0 || amplitude > 1.0 ) { - oStream_ << "Drummer::noteOn: amplitude parameter is out of bounds!"; - handleError( StkError::WARNING ); return; - } - - // Yes, this is tres kludgey. - int noteNumber = (int) ( ( 12 * log( instrument / 220.0 ) / log( 2.0 ) ) + 57.01 ); - - // If we already have a wave of this note number loaded, just reset - // it. Otherwise, look first for an unused wave or preempt the - // oldest if already at maximum polyphony. - int iWave; - for ( iWave=0; iWave soundOrder_[iWave] ) - soundOrder_[j] -= 1; - } - } - soundOrder_[iWave] = nSounding_ - 1; - soundNumber_[iWave] = noteNumber; - //std::cout << "iWave = " << iWave << ", nSounding = " << nSounding_ << ", soundOrder[] = " << soundOrder_[iWave] << std::endl; - - // Concatenate the STK rawwave path to the rawwave file - waves_[iWave].openFile( (Stk::rawwavePath() + waveNames[ genMIDIMap[ noteNumber ] ]).c_str(), true ); - if ( Stk::sampleRate() != 22050.0 ) - waves_[iWave].setRate( 22050.0 / Stk::sampleRate() ); - filters_[iWave].setPole( 0.999 - (amplitude * 0.6) ); - filters_[iWave].setGain( amplitude ); - } - - /* -#if defined(_STK_DEBUG_) - oStream_ << "Drummer::noteOn: number sounding = " << nSounding_ << ", notes: "; - for ( int i=0; i - -namespace stk { - -Echo :: Echo( unsigned long maximumDelay ) : Effect() -{ - this->setMaximumDelay( maximumDelay ); - delayLine_.setDelay( length_ >> 1 ); - effectMix_ = 0.5; - this->clear(); -} - -void Echo :: clear( void ) -{ - delayLine_.clear(); - lastFrame_[0] = 0.0; -} - -void Echo :: setMaximumDelay( unsigned long delay ) -{ - if ( delay == 0 ) { - oStream_ << "Echo::setMaximumDelay: parameter cannot be zero!"; - handleError( StkError::WARNING ); return; - } - - length_ = delay; - delayLine_.setMaximumDelay( delay ); -} - -void Echo :: setDelay( unsigned long delay ) -{ - if ( delay > length_ ) { - oStream_ << "Echo::setDelay: parameter is greater than maximum delay length!"; - handleError( StkError::WARNING ); return; - } - - delayLine_.setDelay( delay ); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Envelope.cpp b/source/StkUGens/stk-4.4.4/src/Envelope.cpp deleted file mode 100644 index fdd1a9946c..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Envelope.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/***************************************************/ -/*! \class Envelope - \brief STK linear line envelope class. - - This class implements a simple linear line envelope generator - which is capable of ramping to an arbitrary target value by a - specified \e rate. It also responds to simple \e keyOn and \e - keyOff messages, ramping to 1.0 on keyOn and to 0.0 on keyOff. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Envelope.h" - -namespace stk { - -Envelope :: Envelope( void ) : Generator() -{ - target_ = 0.0; - value_ = 0.0; - rate_ = 0.001; - state_ = 0; - Stk::addSampleRateAlert( this ); -} - -Envelope :: ~Envelope( void ) -{ - Stk::removeSampleRateAlert( this ); -} - -Envelope& Envelope :: operator= ( const Envelope& e ) -{ - if ( this != &e ) { - target_ = e.target_; - value_ = e.value_; - rate_ = e.rate_; - state_ = e.state_; - } - - return *this; -} - -void Envelope :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - if ( !ignoreSampleRateChange_ ) - rate_ = oldRate * rate_ / newRate; -} - -void Envelope :: setRate( StkFloat rate ) -{ - if ( rate < 0.0 ) { - oStream_ << "Envelope::setRate: argument must be >= 0.0!"; - handleError( StkError::WARNING ); return; - } - - rate_ = rate; -} - -void Envelope :: setTime( StkFloat time ) -{ - if ( time <= 0.0 ) { - oStream_ << "Envelope::setTime: argument must be > 0.0!"; - handleError( StkError::WARNING ); return; - } - - rate_ = 1.0 / ( time * Stk::sampleRate() ); -} - -void Envelope :: setTarget( StkFloat target ) -{ - target_ = target; - if ( value_ != target_ ) state_ = 1; -} - -void Envelope :: setValue( StkFloat value ) -{ - state_ = 0; - target_ = value; - value_ = value; - lastFrame_[0] = value_; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/FM.cpp b/source/StkUGens/stk-4.4.4/src/FM.cpp deleted file mode 100644 index 79afc4f5be..0000000000 --- a/source/StkUGens/stk-4.4.4/src/FM.cpp +++ /dev/null @@ -1,179 +0,0 @@ -/***************************************************/ -/*! \class FM - \brief STK abstract FM synthesis base class. - - This class controls an arbitrary number of - waves and envelopes, determined via a - constructor argument. - - Control Change Numbers: - - Control One = 2 - - Control Two = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "FM.h" -#include "SKINI.msg" - -namespace stk { - -FM :: FM( unsigned int operators ) - : nOperators_(operators) -{ - if ( nOperators_ == 0 ) { - oStream_ << "FM::FM: Number of operators must be greater than zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - twozero_.setB2( -1.0 ); - twozero_.setGain( 0.0 ); - - vibrato_.setFrequency( 6.0 ); - - unsigned int j; - adsr_.resize( nOperators_ ); - waves_.resize( nOperators_ ); - for (j=0; j=0; i--) { - fmGains_[i] = temp; - temp *= 0.933033; - } - - temp = 1.0; - for (i=15; i>=0; i--) { - fmSusLevels_[i] = temp; - temp *= 0.707101; - } - - temp = 8.498186; - for (i=0; i<32; i++) { - fmAttTimes_[i] = temp; - temp *= 0.707101; - } -} - -FM :: ~FM( void ) -{ - for (unsigned int i=0; isetFrequency( baseFrequency_ * ratios_[i] ); -} - -void FM :: setRatio( unsigned int waveIndex, StkFloat ratio ) -{ - if ( waveIndex >= nOperators_ ) { - oStream_ << "FM:setRatio: waveIndex parameter is greater than the number of operators!"; - handleError( StkError::WARNING ); return; - } - - ratios_[waveIndex] = ratio; - if (ratio > 0.0) - waves_[waveIndex]->setFrequency( baseFrequency_ * ratio ); - else - waves_[waveIndex]->setFrequency( ratio ); -} - -void FM :: setGain( unsigned int waveIndex, StkFloat gain ) -{ - if ( waveIndex >= nOperators_ ) { - oStream_ << "FM::setGain: waveIndex parameter is greater than the number of operators!"; - handleError( StkError::WARNING ); return; - } - - gains_[waveIndex] = gain; -} - -void FM :: keyOn( void ) -{ - for ( unsigned int i=0; ikeyOn(); -} - -void FM :: keyOff( void ) -{ - for ( unsigned int i=0; ikeyOff(); -} - -void FM :: noteOff( StkFloat amplitude ) -{ - this->keyOff(); -} - -void FM :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "FM::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_Breath_) // 2 - this->setControl1( normalizedValue ); - else if (number == __SK_FootControl_) // 4 - this->setControl2( normalizedValue ); - else if (number == __SK_ModFrequency_) // 11 - this->setModulationSpeed( normalizedValue * 12.0); - else if (number == __SK_ModWheel_) // 1 - this->setModulationDepth( normalizedValue ); - else if (number == __SK_AfterTouch_Cont_) { // 128 - //adsr_[0]->setTarget( normalizedValue ); - adsr_[1]->setTarget( normalizedValue ); - //adsr_[2]->setTarget( normalizedValue ); - adsr_[3]->setTarget( normalizedValue ); - } -#if defined(_STK_DEBUG_) - else { - oStream_ << "FM::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/FMVoices.cpp b/source/StkUGens/stk-4.4.4/src/FMVoices.cpp deleted file mode 100644 index f230cb07b5..0000000000 --- a/source/StkUGens/stk-4.4.4/src/FMVoices.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/***************************************************/ -/*! \class FMVoices - \brief STK singing FM synthesis instrument. - - This class implements 3 carriers and a common - modulator, also referred to as algorithm 6 of - the TX81Z. - - \code - Algorithm 6 is : - /->1 -\ - 4-|-->2 - +-> Out - \->3 -/ - \endcode - - Control Change Numbers: - - Vowel = 2 - - Spectral Tilt = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "FMVoices.h" -#include "SKINI.msg" -#include "Phonemes.h" - -namespace stk { - -FMVoices :: FMVoices( void ) - : FM() -{ - // Concatenate the STK rawwave path to the rawwave files - for ( unsigned int i=0; i<3; i++ ) - waves_[i] = new FileLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), true ); - waves_[3] = new FileLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), true ); - - this->setRatio(0, 2.00); - this->setRatio(1, 4.00); - this->setRatio(2, 12.0); - this->setRatio(3, 1.00); - - gains_[3] = fmGains_[80]; - - adsr_[0]->setAllTimes( 0.05, 0.05, fmSusLevels_[15], 0.05); - adsr_[1]->setAllTimes( 0.05, 0.05, fmSusLevels_[15], 0.05); - adsr_[2]->setAllTimes( 0.05, 0.05, fmSusLevels_[15], 0.05); - adsr_[3]->setAllTimes( 0.01, 0.01, fmSusLevels_[15], 0.5); - - twozero_.setGain( 0.0 ); - modDepth_ = (StkFloat) 0.005; - currentVowel_ = 0; - tilt_[0] = 1.0; - tilt_[1] = 0.5; - tilt_[2] = 0.2; - mods_[0] = 1.0; - mods_[1] = 1.1; - mods_[2] = 1.1; - baseFrequency_ = 110.0; - this->setFrequency( 110.0 ); -} - -FMVoices :: ~FMVoices( void ) -{ -} - -void FMVoices :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "FMVoices::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat temp, temp2 = 0.0; - int tempi = 0; - unsigned int i = 0; - - if (currentVowel_ < 32) { - i = currentVowel_; - temp2 = 0.9; - } - else if (currentVowel_ < 64) { - i = currentVowel_ - 32; - temp2 = 1.0; - } - else if (currentVowel_ < 96) { - i = currentVowel_ - 64; - temp2 = 1.1; - } - else if (currentVowel_ <= 128) { - i = currentVowel_ - 96; - temp2 = 1.2; - } - - baseFrequency_ = frequency; - temp = (temp2 * Phonemes::formantFrequency(i, 0) / baseFrequency_) + 0.5; - tempi = (int) temp; - this->setRatio( 0, (StkFloat) tempi ); - temp = (temp2 * Phonemes::formantFrequency(i, 1) / baseFrequency_) + 0.5; - tempi = (int) temp; - this->setRatio( 1, (StkFloat) tempi ); - temp = (temp2 * Phonemes::formantFrequency(i, 2) / baseFrequency_) + 0.5; - tempi = (int) temp; - this->setRatio( 2, (StkFloat) tempi ); - gains_[0] = 1.0; - gains_[1] = 1.0; - gains_[2] = 1.0; -} - -void FMVoices :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - tilt_[0] = amplitude; - tilt_[1] = amplitude * amplitude; - tilt_[2] = tilt_[1] * amplitude; - this->keyOn(); -} - -void FMVoices :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "FMVoices::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_Breath_) // 2 - gains_[3] = fmGains_[(int) ( normalizedValue * 99.9 )]; - else if (number == __SK_FootControl_) { // 4 - currentVowel_ = (int) (normalizedValue * 128.0); - this->setFrequency(baseFrequency_); - } - else if (number == __SK_ModFrequency_) // 11 - this->setModulationSpeed( normalizedValue * 12.0); - else if (number == __SK_ModWheel_) // 1 - this->setModulationDepth( normalizedValue ); - else if (number == __SK_AfterTouch_Cont_) { // 128 - tilt_[0] = normalizedValue; - tilt_[1] = normalizedValue * normalizedValue; - tilt_[2] = tilt_[1] * normalizedValue; - } -#if defined(_STK_DEBUG_) - else { - oStream_ << "FMVoices::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/FileLoop.cpp b/source/StkUGens/stk-4.4.4/src/FileLoop.cpp deleted file mode 100644 index 4ee5e8df19..0000000000 --- a/source/StkUGens/stk-4.4.4/src/FileLoop.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/***************************************************/ -/*! \class FileLoop - \brief STK file looping / oscillator class. - - This class provides audio file looping functionality. Any audio - file that can be loaded by FileRead can be looped using this - class. - - FileLoop supports multi-channel data. It is important to - distinguish the tick() method that computes a single frame (and - returns only the specified sample of a multi-channel frame) from - the overloaded one that takes an StkFrames object for - multi-channel and/or multi-frame data. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "FileLoop.h" -#include - -namespace stk { - -FileLoop :: FileLoop( unsigned long chunkThreshold, unsigned long chunkSize ) - : FileWvIn( chunkThreshold, chunkSize ), phaseOffset_(0.0) -{ - Stk::addSampleRateAlert( this ); -} - -FileLoop :: FileLoop( std::string fileName, bool raw, bool doNormalize, - unsigned long chunkThreshold, unsigned long chunkSize ) - : FileWvIn( chunkThreshold, chunkSize ), phaseOffset_(0.0) -{ - this->openFile( fileName, raw, doNormalize ); - Stk::addSampleRateAlert( this ); -} - -FileLoop :: ~FileLoop( void ) -{ - Stk::removeSampleRateAlert( this ); -} - -void FileLoop :: openFile( std::string fileName, bool raw, bool doNormalize ) -{ - // Call close() in case another file is already open. - this->closeFile(); - - // Attempt to open the file ... an error might be thrown here. - file_.open( fileName, raw ); - - // Determine whether chunking or not. - if ( file_.fileSize() > chunkThreshold_ ) { - chunking_ = true; - chunkPointer_ = 0; - data_.resize( chunkSize_ + 1, file_.channels() ); - if ( doNormalize ) normalizing_ = true; - else normalizing_ = false; - } - else { - chunking_ = false; - data_.resize( file_.fileSize() + 1, file_.channels() ); - } - - // Load all or part of the data. - file_.read( data_, 0, doNormalize ); - - if ( chunking_ ) { // If chunking, save the first sample frame for later. - firstFrame_.resize( 1, data_.channels() ); - for ( unsigned int i=0; isetRate( data_.dataRate() / Stk::sampleRate() ); - - if ( doNormalize & !chunking_ ) this->normalize(); - - this->reset(); -} - -void FileLoop :: setRate( StkFloat rate ) -{ - rate_ = rate; - - if ( fmod( rate_, 1.0 ) != 0.0 ) interpolate_ = true; - else interpolate_ = false; -} - -void FileLoop :: addTime( StkFloat time ) -{ - // Add an absolute time in samples. - time_ += time; - - StkFloat fileSize = file_.fileSize(); - while ( time_ < 0.0 ) - time_ += fileSize; - while ( time_ >= fileSize ) - time_ -= fileSize; -} - -void FileLoop :: addPhase( StkFloat angle ) -{ - // Add a time in cycles (one cycle = fileSize). - StkFloat fileSize = file_.fileSize(); - time_ += fileSize * angle; - - while ( time_ < 0.0 ) - time_ += fileSize; - while ( time_ >= fileSize ) - time_ -= fileSize; -} - -void FileLoop :: addPhaseOffset( StkFloat angle ) -{ - // Add a phase offset in cycles, where 1.0 = fileSize. - phaseOffset_ = file_.fileSize() * angle; -} - -StkFloat FileLoop :: tick( unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= data_.channels() ) { - oStream_ << "FileLoop::tick(): channel argument and soundfile data are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - // Check limits of time address ... if necessary, recalculate modulo - // fileSize. - StkFloat fileSize = file_.fileSize(); - - while ( time_ < 0.0 ) - time_ += fileSize; - while ( time_ >= fileSize ) - time_ -= fileSize; - - StkFloat tyme = time_; - if ( phaseOffset_ ) { - tyme += phaseOffset_; - while ( tyme < 0.0 ) - tyme += fileSize; - while ( tyme >= fileSize ) - tyme -= fileSize; - } - - if ( chunking_ ) { - - // Check the time address vs. our current buffer limits. - if ( ( time_ < (StkFloat) chunkPointer_ ) || - ( time_ > (StkFloat) ( chunkPointer_ + chunkSize_ - 1 ) ) ) { - - while ( time_ < (StkFloat) chunkPointer_ ) { // negative rate - chunkPointer_ -= chunkSize_ - 1; // overlap chunks by one frame - if ( chunkPointer_ < 0 ) chunkPointer_ = 0; - } - while ( time_ > (StkFloat) ( chunkPointer_ + chunkSize_ - 1 ) ) { // positive rate - chunkPointer_ += chunkSize_ - 1; // overlap chunks by one frame - if ( chunkPointer_ + chunkSize_ > file_.fileSize() ) { // at end of file - chunkPointer_ = file_.fileSize() - chunkSize_ + 1; // leave extra frame at end of buffer - // Now fill extra frame with first frame data. - for ( unsigned int j=0; jtick(); - for ( j=0; j2) - soundfiles are supported. The file data is - returned via an external StkFrames object - passed to the read() function. This class - does not store its own copy of the file data, - rather the data is read directly from disk. - - FileRead currently supports uncompressed WAV, - AIFF/AIFC, SND (AU), MAT-file (Matlab), and - STK RAW file formats. Signed integer (8-, - 16-, 24- and 32-bit) and floating-point (32- and - 64-bit) data types are supported. Compressed - data types are not supported. - - STK RAW files have no header and are assumed to - contain a monophonic stream of 16-bit signed - integers in big-endian byte order at a sample - rate of 22050 Hz. MAT-file data should be saved - in an array with each data channel filling a - matrix row. The sample rate for MAT-files should - be specified in a variable named "fs". If no - such variable is found, the sample rate is - assumed to be 44100 Hz. - - by Perry R. Cook and Gary P. Scavone, 1995 - 2007. -*/ -/***************************************************/ - -#include "FileRead.h" -#include -#include -#include -#include -#include - -namespace stk { - -FileRead :: FileRead() - : fd_(0), fileSize_(0), channels_(0), dataType_(0), fileRate_(0.0) -{ -} - -FileRead :: FileRead( std::string fileName, bool typeRaw, unsigned int nChannels, - StkFormat format, StkFloat rate ) - : fd_(0) -{ - open( fileName, typeRaw, nChannels, format, rate ); -} - -FileRead :: ~FileRead() -{ - if ( fd_ ) - fclose( fd_ ); -} - -void FileRead :: close( void ) -{ - if ( fd_ ) fclose( fd_ ); - fd_ = 0; - wavFile_ = false; - fileSize_ = 0; - channels_ = 0; - dataType_ = 0; - fileRate_ = 0.0; -} - -bool FileRead :: isOpen( void ) -{ - if ( fd_ ) return true; - else return false; -} - -void FileRead :: open( std::string fileName, bool typeRaw, unsigned int nChannels, - StkFormat format, StkFloat rate ) -{ - // If another file is open, close it. - close(); - - // Try to open the file. - fd_ = fopen( fileName.c_str(), "rb" ); - if ( !fd_ ) { - oStream_ << "FileRead::open: could not open or find file (" << fileName << ")!"; - handleError( StkError::FILE_NOT_FOUND ); - } - - // Attempt to determine file type from header (unless RAW). - bool result = false; - if ( typeRaw ) - result = getRawInfo( fileName.c_str(), nChannels, format, rate ); - else { - char header[12]; - if ( fread( &header, 4, 3, fd_ ) != 3 ) goto error; - if ( !strncmp( header, "RIFF", 4 ) && - !strncmp( &header[8], "WAVE", 4 ) ) - result = getWavInfo( fileName.c_str() ); - else if ( !strncmp( header, ".snd", 4 ) ) - result = getSndInfo( fileName.c_str() ); - else if ( !strncmp( header, "FORM", 4 ) && - ( !strncmp( &header[8], "AIFF", 4 ) || !strncmp(&header[8], "AIFC", 4) ) ) - result = getAifInfo( fileName.c_str() ); - else { - if ( fseek( fd_, 126, SEEK_SET ) == -1 ) goto error; - if ( fread( &header, 2, 1, fd_ ) != 1 ) goto error; - if ( !strncmp( header, "MI", 2 ) || - !strncmp( header, "IM", 2 ) ) - result = getMatInfo( fileName.c_str() ); - else { - oStream_ << "FileRead::open: file (" << fileName << ") format unknown."; - handleError( StkError::FILE_UNKNOWN_FORMAT ); - } - } - } - - // If here, we had a file type candidate but something else went wrong. - if ( result == false ) - handleError( StkError::FILE_ERROR ); - - // Check for empty files. - if ( fileSize_ == 0 ) { - oStream_ << "FileRead::open: file (" << fileName << ") data size is zero!"; - handleError( StkError::FILE_ERROR ); - } - - return; - - error: - oStream_ << "FileRead::open: error reading file (" << fileName << ")!"; - handleError( StkError::FILE_ERROR ); -} - -bool FileRead :: getRawInfo( const char *fileName, unsigned int nChannels, StkFormat format, StkFloat rate ) -{ - // Use the system call "stat" to determine the file length. - struct stat filestat; - if ( stat(fileName, &filestat) == -1 ) { - oStream_ << "FileRead: Could not stat RAW file (" << fileName << ")."; - return false; - } - - // Rawwave files have no header and by default, are assumed to - // contain a monophonic stream of 16-bit signed integers in - // big-endian byte order at a sample rate of 22050 Hz. However, - // different parameters can be specified if desired. - dataOffset_ = 0; - channels_ = nChannels; - dataType_ = format; - fileRate_ = rate; - int sampleBytes = 0; - if ( format == STK_SINT8 ) sampleBytes = 1; - else if ( format == STK_SINT16 ) sampleBytes = 2; - else if ( format == STK_SINT32 || format == STK_FLOAT32 ) sampleBytes = 4; - else if ( format == STK_FLOAT64 ) sampleBytes = 8; - - fileSize_ = (long) filestat.st_size / sampleBytes / channels_; // length in frames - - byteswap_ = false; -#ifdef __LITTLE_ENDIAN__ - byteswap_ = true; -#endif - - return true; -} - -bool FileRead :: getWavInfo( const char *fileName ) -{ - // Find "format" chunk ... it must come before the "data" chunk. - char id[4]; - SINT32 chunkSize; - if ( fread(&id, 4, 1, fd_) != 1 ) goto error; - while ( strncmp(id, "fmt ", 4) ) { - if ( fread(&chunkSize, 4, 1, fd_) != 1 ) goto error; -#ifndef __LITTLE_ENDIAN__ - swap32((unsigned char *)&chunkSize); -#endif - if ( fseek(fd_, chunkSize, SEEK_CUR) == -1 ) goto error; - if ( fread(&id, 4, 1, fd_) != 1 ) goto error; - } - - // Check that the data is not compressed. - unsigned short format_tag; - if ( fread(&chunkSize, 4, 1, fd_) != 1 ) goto error; // Read fmt chunk size. - if ( fread(&format_tag, 2, 1, fd_) != 1 ) goto error; -#ifndef __LITTLE_ENDIAN__ - swap16((unsigned char *)&format_tag); - swap32((unsigned char *)&chunkSize); -#endif - if ( format_tag == 0xFFFE ) { // WAVE_FORMAT_EXTENSIBLE - dataOffset_ = ftell(fd_); - if ( fseek(fd_, 14, SEEK_CUR) == -1 ) goto error; - unsigned short extSize; - if ( fread(&extSize, 2, 1, fd_) != 1 ) goto error; -#ifndef __LITTLE_ENDIAN__ - swap16((unsigned char *)&extSize); -#endif - if ( extSize == 0 ) goto error; - if ( fseek(fd_, 6, SEEK_CUR) == -1 ) goto error; - if ( fread(&format_tag, 2, 1, fd_) != 1 ) goto error; -#ifndef __LITTLE_ENDIAN__ - swap16((unsigned char *)&format_tag); -#endif - if ( fseek(fd_, dataOffset_, SEEK_SET) == -1 ) goto error; - } - if ( format_tag != 1 && format_tag != 3 ) { // PCM = 1, FLOAT = 3 - oStream_ << "FileRead: "<< fileName << " contains an unsupported data format type (" << format_tag << ")."; - return false; - } - - // Get number of channels from the header. - SINT16 temp; - if ( fread(&temp, 2, 1, fd_) != 1 ) goto error; -#ifndef __LITTLE_ENDIAN__ - swap16((unsigned char *)&temp); -#endif - channels_ = (unsigned int ) temp; - - // Get file sample rate from the header. - SINT32 srate; - if ( fread(&srate, 4, 1, fd_) != 1 ) goto error; -#ifndef __LITTLE_ENDIAN__ - swap32((unsigned char *)&srate); -#endif - fileRate_ = (StkFloat) srate; - - // Determine the data type. - dataType_ = 0; - if ( fseek(fd_, 6, SEEK_CUR) == -1 ) goto error; // Locate bits_per_sample info. - if ( fread(&temp, 2, 1, fd_) != 1 ) goto error; -#ifndef __LITTLE_ENDIAN__ - swap16((unsigned char *)&temp); -#endif - if ( format_tag == 1 ) { - if ( temp == 8 ) - dataType_ = STK_SINT8; - else if ( temp == 16 ) - dataType_ = STK_SINT16; - else if ( temp == 24 ) - dataType_ = STK_SINT24; - else if ( temp == 32 ) - dataType_ = STK_SINT32; - } - else if ( format_tag == 3 ) { - if ( temp == 32 ) - dataType_ = STK_FLOAT32; - else if ( temp == 64 ) - dataType_ = STK_FLOAT64; - } - if ( dataType_ == 0 ) { - oStream_ << "FileRead: " << temp << " bits per sample with data format " << format_tag << " are not supported (" << fileName << ")."; - return false; - } - - // Jump over any remaining part of the "fmt" chunk. - if ( fseek(fd_, chunkSize-16, SEEK_CUR) == -1 ) goto error; - - // Find "data" chunk ... it must come after the "fmt" chunk. - if ( fread(&id, 4, 1, fd_) != 1 ) goto error; - - while ( strncmp(id, "data", 4) ) { - if ( fread(&chunkSize, 4, 1, fd_) != 1 ) goto error; -#ifndef __LITTLE_ENDIAN__ - swap32((unsigned char *)&chunkSize); -#endif - chunkSize += chunkSize % 2; // chunk sizes must be even - if ( fseek(fd_, chunkSize, SEEK_CUR) == -1 ) goto error; - if ( fread(&id, 4, 1, fd_) != 1 ) goto error; - } - - // Get length of data from the header. - SINT32 bytes; - if ( fread(&bytes, 4, 1, fd_) != 1 ) goto error; -#ifndef __LITTLE_ENDIAN__ - swap32((unsigned char *)&bytes); -#endif - fileSize_ = bytes / temp / channels_; // sample frames - fileSize_ *= 8; // sample frames - - dataOffset_ = ftell(fd_); - byteswap_ = false; -#ifndef __LITTLE_ENDIAN__ - byteswap_ = true; -#endif - - wavFile_ = true; - return true; - - error: - oStream_ << "FileRead: error reading WAV file (" << fileName << ")."; - return false; -} - -bool FileRead :: getSndInfo( const char *fileName ) -{ - // Determine the data type. - UINT32 format; - if ( fseek(fd_, 12, SEEK_SET) == -1 ) goto error; // Locate format - if ( fread(&format, 4, 1, fd_) != 1 ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&format); -#endif - - if (format == 2) dataType_ = STK_SINT8; - else if (format == 3) dataType_ = STK_SINT16; - else if (format == 4) dataType_ = STK_SINT24; - else if (format == 5) dataType_ = STK_SINT32; - else if (format == 6) dataType_ = STK_FLOAT32; - else if (format == 7) dataType_ = STK_FLOAT64; - else { - oStream_ << "FileRead: data format in file " << fileName << " is not supported."; - return false; - } - - // Get file sample rate from the header. - UINT32 srate; - if ( fread(&srate, 4, 1, fd_) != 1 ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&srate); -#endif - fileRate_ = (StkFloat) srate; - - // Get number of channels from the header. - UINT32 chans; - if ( fread(&chans, 4, 1, fd_) != 1 ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&chans); -#endif - channels_ = chans; - - UINT32 offset; - if ( fseek(fd_, 4, SEEK_SET) == -1 ) goto error; - if ( fread(&offset, 4, 1, fd_) != 1 ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&offset); -#endif - dataOffset_ = offset; - - // Get length of data from the header. - if ( fread(&fileSize_, 4, 1, fd_) != 1 ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&fileSize_); -#endif - // Convert to sample frames. - if ( dataType_ == STK_SINT8 ) - fileSize_ /= channels_; - if ( dataType_ == STK_SINT16 ) - fileSize_ /= 2 * channels_; - else if ( dataType_ == STK_SINT24 ) - fileSize_ /= 3 * channels_; - else if ( dataType_ == STK_SINT32 || dataType_ == STK_FLOAT32 ) - fileSize_ /= 4 * channels_; - else if ( dataType_ == STK_FLOAT64 ) - fileSize_ /= 8 * channels_; - - byteswap_ = false; -#ifdef __LITTLE_ENDIAN__ - byteswap_ = true; -#endif - - return true; - - error: - oStream_ << "FileRead: Error reading SND file (" << fileName << ")."; - return false; -} - -bool FileRead :: getAifInfo( const char *fileName ) -{ - bool aifc = false; - char id[4]; - - // Determine whether this is AIFF or AIFC. - if ( fseek(fd_, 8, SEEK_SET) == -1 ) goto error; - if ( fread(&id, 4, 1, fd_) != 1 ) goto error; - if ( !strncmp(id, "AIFC", 4) ) aifc = true; - - // Find "common" chunk - SINT32 chunkSize; - if ( fread(&id, 4, 1, fd_) != 1) goto error; - while ( strncmp(id, "COMM", 4) ) { - if ( fread(&chunkSize, 4, 1, fd_) != 1 ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&chunkSize); -#endif - chunkSize += chunkSize % 2; // chunk sizes must be even - if ( fseek(fd_, chunkSize, SEEK_CUR) == -1 ) goto error; - if ( fread(&id, 4, 1, fd_) != 1 ) goto error; - } - - // Get number of channels from the header. - SINT16 temp; - if ( fseek(fd_, 4, SEEK_CUR) == -1 ) goto error; // Jump over chunk size - if ( fread(&temp, 2, 1, fd_) != 1 ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap16((unsigned char *)&temp); -#endif - channels_ = temp; - - // Get length of data from the header. - SINT32 frames; - if ( fread(&frames, 4, 1, fd_) != 1 ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&frames); -#endif - fileSize_ = frames; // sample frames - - // Read the number of bits per sample. - if ( fread(&temp, 2, 1, fd_) != 1 ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap16((unsigned char *)&temp); -#endif - - // Get file sample rate from the header. For AIFF files, this value - // is stored in a 10-byte, IEEE Standard 754 floating point number, - // so we need to convert it first. - unsigned char srate[10]; - unsigned char exp; - unsigned long mantissa; - unsigned long last; - if ( fread(&srate, 10, 1, fd_) != 1 ) goto error; - mantissa = (unsigned long) *(unsigned long *)(srate+2); -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&mantissa); -#endif - exp = 30 - *(srate+1); - last = 0; - while (exp--) { - last = mantissa; - mantissa >>= 1; - } - if (last & 0x00000001) mantissa++; - fileRate_ = (StkFloat) mantissa; - - // Determine the data format. - dataType_ = 0; - if ( aifc == false ) { - if ( temp <= 8 ) dataType_ = STK_SINT8; - else if ( temp <= 16 ) dataType_ = STK_SINT16; - else if ( temp <= 24 ) dataType_ = STK_SINT24; - else if ( temp <= 32 ) dataType_ = STK_SINT32; - } - else { - if ( fread(&id, 4, 1, fd_) != 1 ) goto error; - if ( !strncmp(id, "NONE", 4) ) { - if ( temp <= 8 ) dataType_ = STK_SINT8; - else if ( temp <= 16 ) dataType_ = STK_SINT16; - else if ( temp <= 24 ) dataType_ = STK_SINT24; - else if ( temp <= 32 ) dataType_ = STK_SINT32; - } - else if ( (!strncmp(id, "fl32", 4) || !strncmp(id, "FL32", 4)) && temp == 32 ) dataType_ = STK_FLOAT32; - else if ( (!strncmp(id, "fl64", 4) || !strncmp(id, "FL64", 4)) && temp == 64 ) dataType_ = STK_FLOAT64; - } - if ( dataType_ == 0 ) { - oStream_ << "FileRead: AIFF/AIFC file (" << fileName << ") has unsupported data type (" << id << ")."; - return false; - } - - // Start at top to find data (SSND) chunk ... chunk order is undefined. - if ( fseek(fd_, 12, SEEK_SET) == -1 ) goto error; - - // Find data (SSND) chunk - if ( fread(&id, 4, 1, fd_) != 1 ) goto error; - while ( strncmp(id, "SSND", 4) ) { - if ( fread(&chunkSize, 4, 1, fd_) != 1 ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&chunkSize); -#endif - chunkSize += chunkSize % 2; // chunk sizes must be even - if ( fseek(fd_, chunkSize, SEEK_CUR) == -1 ) goto error; - if ( fread(&id, 4, 1, fd_) != 1 ) goto error; - } - - // Skip over chunk size, offset, and blocksize fields - if ( fseek(fd_, 12, SEEK_CUR) == -1 ) goto error; - - dataOffset_ = ftell(fd_); - byteswap_ = false; -#ifdef __LITTLE_ENDIAN__ - byteswap_ = true; -#endif - - return true; - - error: - oStream_ << "FileRead: Error reading AIFF file (" << fileName << ")."; - return false; -} - -bool FileRead :: findNextMatArray( SINT32 *chunkSize, SINT32 *rows, SINT32 *columns, SINT32 *nametype ) -{ - // Look for the next data array element. The file pointer should be - // at the data element type when this function is called. - SINT32 datatype; - *chunkSize = 0; - do { - if ( fseek(fd_, *chunkSize, SEEK_CUR) == -1 ) return false; - if ( fread(&datatype, 4, 1, fd_) != 1 ) return false; - if ( byteswap_ ) swap32((unsigned char *)&datatype); - if ( fread(chunkSize, 4, 1, fd_) != 1 ) return false; - if ( byteswap_ ) swap32((unsigned char *)chunkSize); - } while ( datatype != 14 ); - - // Check dimension subelement size to make sure 2D - if ( fseek(fd_, 20, SEEK_CUR) == -1 ) return false; - SINT32 size; - if ( fread(&size, 4, 1, fd_) != 1 ) return false; - if ( byteswap_ ) swap32((unsigned char *)&size); - if ( size != 8 ) return false; - - // Read dimensions data - if ( fread(rows, 4, 1, fd_) != 1 ) return false; - if ( byteswap_ ) swap32((unsigned char *)rows); - if ( fread(columns, 4, 1, fd_) != 1 ) return false; - if ( byteswap_ ) swap32((unsigned char *)columns); - - // Read array name subelement type - if ( fread(nametype, 4, 1, fd_) != 1 ) return false; - if ( byteswap_ ) swap32((unsigned char *)nametype); - - return true; -} - -bool FileRead :: getMatInfo( const char *fileName ) -{ - // MAT-file formatting information is available at: - // http://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/matfile_format.pdf - - // Verify this is a version 5 MAT-file format. - char head[5]; - if ( fseek(fd_, 0, SEEK_SET) == -1 ) goto error; - if ( fread(&head, 4, 1, fd_) != 1 ) goto error; - // If any of the first 4 characters of the header = 0, then this is - // a Version 4 MAT-file. - head[4] = '\0'; - if ( strstr(head, "0") ) { - oStream_ << "FileRead: " << fileName << " appears to be a Version 4 MAT-file, which is not currently supported."; - return false; - } - - // Determine the endian-ness of the file. - char mi[2]; - byteswap_ = false; - // Locate "M" and "I" characters in header. - if ( fseek(fd_, 126, SEEK_SET) == -1 ) goto error; - if ( fread(&mi, 2, 1, fd_) != 1) goto error; -#ifdef __LITTLE_ENDIAN__ - if ( !strncmp(mi, "MI", 2) ) - byteswap_ = true; - else if ( strncmp(mi, "IM", 2) ) goto error; -#else - if ( !strncmp(mi, "IM", 2)) - byteswap_ = true; - else if ( strncmp(mi, "MI", 2) ) goto error; -#endif - - // We are expecting a data element containing the audio data and an - // optional data element containing the sample rate (with an array - // name of "fs"). Both elements should be stored as a Matlab array - // type (14). - - bool doneParsing, haveData, haveSampleRate; - SINT32 chunkSize, rows, columns, nametype; - int dataoffset; - doneParsing = false; - haveData = false; - haveSampleRate = false; - while ( !doneParsing ) { - - dataoffset = ftell( fd_ ); // save location in file - if ( findNextMatArray( &chunkSize, &rows, &columns, &nametype ) == false ) { - // No more Matlab array type chunks found. - if ( !haveData ) { - oStream_ << "FileRead: No audio data found in MAT-file (" << fileName << ")."; - return false; - } - else if ( !haveSampleRate ) { - fileRate_ = 44100.0; - oStream_ << "FileRead: No sample rate found ... assuming 44100.0"; - handleError( StkError::WARNING ); - return true; - } - else return true; - } - - if ( !haveSampleRate && rows == 1 && columns == 1 ) { // Parse for sample rate. - - SINT32 namesize = 4; - if ( nametype == 1 ) { // array name > 4 characters - if ( fread(&namesize, 4, 1, fd_) != 1 ) goto error; - if ( byteswap_ ) swap32((unsigned char *)namesize); - if ( namesize != 2 ) goto tryagain; // expecting name = "fs" - namesize = 8; // field must be padded to multiple of 8 bytes - } - char name[3]; name[2] = '\0'; - if ( fread(&name, 2, 1, fd_) != 1) goto error; - if ( strncmp(name, "fs", 2) ) goto tryagain; - - // Jump to real part data subelement, which is likely to be in a - // small data format. - if ( fseek(fd_, namesize-2, SEEK_CUR) == -1 ) goto error; - UINT32 type; - StkFloat srate; - if ( fread(&type, 4, 1, fd_) != 1 ) goto error; - if ( byteswap_ ) swap32((unsigned char *)&type); - if ( (type & 0xffff0000) != 0 ) // small data format - type = (type & 0x0000ffff); - else - if ( fseek(fd_, 4, SEEK_CUR) == -1 ) goto error; - if ( type == 1 ) { // SINT8 - signed char rate; - if ( fread(&rate, 1, 1, fd_) != 1 ) goto error; - srate = (StkFloat) rate; - } - if ( type == 2 ) { // UINT8 - unsigned char rate; - if ( fread(&rate, 1, 1, fd_) != 1 ) goto error; - srate = (StkFloat) rate; - } - else if ( type == 3 ) { // SINT16 - SINT16 rate; - if ( fread(&rate, 2, 1, fd_) != 1 ) goto error; - if ( byteswap_ ) swap16((unsigned char *)&rate); - srate = (StkFloat) rate; - } - else if ( type == 4 ) { // UINT16 - UINT16 rate; - if ( fread(&rate, 2, 1, fd_) != 1 ) goto error; - if ( byteswap_ ) swap16((unsigned char *)&rate); - srate = (StkFloat) rate; - } - else if ( type == 5 ) { // SINT32 - SINT32 rate; - if ( fread(&rate, 4, 1, fd_) != 1 ) goto error; - if ( byteswap_ ) swap32((unsigned char *)&rate); - srate = (StkFloat) rate; - } - else if ( type == 6 ) { // UINT32 - UINT32 rate; - if ( fread(&rate, 4, 1, fd_) != 1 ) goto error; - if ( byteswap_ ) swap32((unsigned char *)&rate); - srate = (StkFloat) rate; - } - else if ( type == 7 ) { // FLOAT32 - FLOAT32 rate; - if ( fread(&rate, 4, 1, fd_) != 1 ) goto error; - if ( byteswap_ ) swap32((unsigned char *)&rate); - srate = (StkFloat) rate; - } - else if ( type == 9 ) { // FLOAT64 - FLOAT64 rate; - if ( fread(&rate, 8, 1, fd_) != 1 ) goto error; - if ( byteswap_ ) swap64((unsigned char *)&rate); - srate = (StkFloat) rate; - } - else - goto tryagain; - - if ( srate > 0 ) fileRate_ = srate; - haveSampleRate = true; - } - else if ( !haveData ) { // Parse for data. - - // Assume channels = smaller of rows or columns. - if ( rows < columns ) { - channels_ = rows; - fileSize_ = columns; - } - else { - oStream_ << "FileRead: Transpose the MAT-file array so that audio channels fill matrix rows (not columns)."; - return false; - } - - SINT32 namesize = 4; - if ( nametype == 1 ) { // array name > 4 characters - if ( fread(&namesize, 4, 1, fd_) != 1 ) goto error; - if ( byteswap_ ) swap32((unsigned char *)namesize); - namesize = (SINT32) ceil((float)namesize / 8); - if ( fseek( fd_, namesize*8, SEEK_CUR) == -1 ) goto error; // jump over array name - } - else { - if ( fseek( fd_, 4, SEEK_CUR ) == -1 ) goto error; - } - - // Now at real part data subelement - SINT32 type; - if ( fread(&type, 4, 1, fd_) != 1 ) goto error; - if ( byteswap_ ) swap32((unsigned char *)&type); - if ( type == 1 ) dataType_ = STK_SINT8; - else if ( type == 3 ) dataType_ = STK_SINT16; - else if ( type == 5 ) dataType_ = STK_SINT32; - else if ( type == 7 ) dataType_ = STK_FLOAT32; - else if ( type == 9 ) dataType_ = STK_FLOAT64; - else { - oStream_ << "FileRead: The MAT-file array data format (" << type << ") is not supported."; - return false; - } - - // Jump to the data. - if ( fseek(fd_, 4, SEEK_CUR) == -1 ) goto error; - dataOffset_ = ftell(fd_); - haveData = true; - } - - tryagain: - if ( haveData && haveSampleRate ) doneParsing = true; - else // jump to end of data element and keep trying - if ( fseek( fd_, dataoffset+chunkSize+8, SEEK_SET) == -1 ) goto error; - } - - return true; - - error: - oStream_ << "FileRead: Error reading MAT-file (" << fileName << ") header."; - return false; -} - -void FileRead :: read( StkFrames& buffer, unsigned long startFrame, bool doNormalize ) -{ - // Make sure we have an open file. - if ( fd_ == 0 ) { - oStream_ << "FileRead::read: a file is not open!"; - Stk::handleError( StkError::WARNING ); return; - } - - // Check the buffer size. - unsigned int nFrames = buffer.frames(); - if ( nFrames == 0 ) { - oStream_ << "FileRead::read: StkFrames buffer size is zero ... no data read!"; - Stk::handleError( StkError::WARNING ); return; - } - - if ( buffer.channels() != channels_ ) { - oStream_ << "FileRead::read: StkFrames argument has incompatible number of channels!"; - Stk::handleError( StkError::FUNCTION_ARGUMENT ); - } - - // Check for file end. - if ( startFrame + nFrames >= fileSize_ ) - nFrames = fileSize_ - startFrame; - - long i, nSamples = (long) ( nFrames * channels_ ); - unsigned long offset = startFrame * channels_; - - // Read samples into StkFrames data buffer. - if ( dataType_ == STK_SINT16 ) { - SINT16 *buf = (SINT16 *) &buffer[0]; - if ( fseek( fd_, dataOffset_+(offset*2), SEEK_SET ) == -1 ) goto error; - if ( fread( buf, nSamples * 2, 1, fd_ ) != 1 ) goto error; - if ( byteswap_ ) { - SINT16 *ptr = buf; - for ( i=nSamples-1; i>=0; i-- ) - swap16( (unsigned char *) ptr++ ); - } - if ( doNormalize ) { - StkFloat gain = 1.0 / 32768.0; - for ( i=nSamples-1; i>=0; i-- ) - buffer[i] = buf[i] * gain; - } - else { - for ( i=nSamples-1; i>=0; i-- ) - buffer[i] = buf[i]; - } - } - else if ( dataType_ == STK_SINT32 ) { - SINT32 *buf = (SINT32 *) &buffer[0]; - if ( fseek( fd_, dataOffset_+(offset*4 ), SEEK_SET ) == -1 ) goto error; - if ( fread( buf, nSamples * 4, 1, fd_ ) != 1 ) goto error; - if ( byteswap_ ) { - SINT32 *ptr = buf; - for ( i=nSamples-1; i>=0; i-- ) - swap32( (unsigned char *) ptr++ ); - } - if ( doNormalize ) { - StkFloat gain = 1.0 / 2147483648.0; - for ( i=nSamples-1; i>=0; i-- ) - buffer[i] = buf[i] * gain; - } - else { - for ( i=nSamples-1; i>=0; i-- ) - buffer[i] = buf[i]; - } - } - else if ( dataType_ == STK_FLOAT32 ) { - FLOAT32 *buf = (FLOAT32 *) &buffer[0]; - if ( fseek( fd_, dataOffset_+(offset*4), SEEK_SET ) == -1 ) goto error; - if ( fread( buf, nSamples * 4, 1, fd_ ) != 1 ) goto error; - if ( byteswap_ ) { - FLOAT32 *ptr = buf; - for ( i=nSamples-1; i>=0; i-- ) - swap32( (unsigned char *) ptr++ ); - } - for ( i=nSamples-1; i>=0; i-- ) - buffer[i] = buf[i]; - } - else if ( dataType_ == STK_FLOAT64 ) { - FLOAT64 *buf = (FLOAT64 *) &buffer[0]; - if ( fseek( fd_, dataOffset_+(offset*8), SEEK_SET ) == -1 ) goto error; - if ( fread( buf, nSamples * 8, 1, fd_ ) != 1 ) goto error; - if ( byteswap_ ) { - FLOAT64 *ptr = buf; - for ( i=nSamples-1; i>=0; i-- ) - swap64( (unsigned char *) ptr++ ); - } - for ( i=nSamples-1; i>=0; i-- ) - buffer[i] = buf[i]; - } - else if ( dataType_ == STK_SINT8 && wavFile_ ) { // 8-bit WAV data is unsigned! - unsigned char *buf = (unsigned char *) &buffer[0]; - if ( fseek( fd_, dataOffset_+offset, SEEK_SET ) == -1 ) goto error; - if ( fread( buf, nSamples, 1, fd_) != 1 ) goto error; - if ( doNormalize ) { - StkFloat gain = 1.0 / 128.0; - for ( i=nSamples-1; i>=0; i-- ) - buffer[i] = ( buf[i] - 128 ) * gain; - } - else { - for ( i=nSamples-1; i>=0; i-- ) - buffer[i] = buf[i] - 128.0; - } - } - else if ( dataType_ == STK_SINT8 ) { // signed 8-bit data - char *buf = (char *) &buffer[0]; - if ( fseek( fd_, dataOffset_+offset, SEEK_SET ) == -1 ) goto error; - if ( fread( buf, nSamples, 1, fd_ ) != 1 ) goto error; - if ( doNormalize ) { - StkFloat gain = 1.0 / 128.0; - for ( i=nSamples-1; i>=0; i-- ) - buffer[i] = buf[i] * gain; - } - else { - for ( i=nSamples-1; i>=0; i-- ) - buffer[i] = buf[i]; - } - } - else if ( dataType_ == STK_SINT24 ) { - // 24-bit values are harder to import efficiently since there is - // no native 24-bit type. The following routine works but is much - // less efficient than that used for the other data types. - SINT32 temp; - unsigned char *ptr = (unsigned char *) &temp; - StkFloat gain = 1.0 / 2147483648.0; - if ( fseek(fd_, dataOffset_+(offset*3), SEEK_SET ) == -1 ) goto error; - for ( i=0; i -#include -#include -#include - -namespace stk { - -const FileWrite::FILE_TYPE FileWrite :: FILE_RAW = 1; -const FileWrite::FILE_TYPE FileWrite :: FILE_WAV = 2; -const FileWrite::FILE_TYPE FileWrite :: FILE_SND = 3; -const FileWrite::FILE_TYPE FileWrite :: FILE_AIF = 4; -const FileWrite::FILE_TYPE FileWrite :: FILE_MAT = 5; - -// WAV header structure. See -// http://www-mmsp.ece.mcgill.ca/documents/audioformats/WAVE/Docs/rfc2361.txt -// for information regarding format codes. -struct WaveHeader { - char riff[4]; // "RIFF" - SINT32 fileSize; // in bytes - char wave[4]; // "WAVE" - char fmt[4]; // "fmt " - SINT32 chunkSize; // in bytes (16 for PCM) - SINT16 formatCode; // 1=PCM, 2=ADPCM, 3=IEEE float, 6=A-Law, 7=Mu-Law - SINT16 nChannels; // 1=mono, 2=stereo - SINT32 sampleRate; - SINT32 bytesPerSecond; - SINT16 bytesPerSample; // 2=16-bit mono, 4=16-bit stereo - SINT16 bitsPerSample; - SINT16 cbSize; // size of extension - SINT16 validBits; // valid bits per sample - SINT32 channelMask; // speaker position mask - char subformat[16]; // format code and GUID - char fact[4]; // "fact" - SINT32 factSize; // fact chunk size - SINT32 frames; // sample frames -}; - -// SND (AU) header structure (NeXT and Sun). -struct SndHeader { - char pref[4]; - SINT32 headerBytes; - SINT32 dataBytes; - SINT32 format; - SINT32 sampleRate; - SINT32 nChannels; - char comment[16]; -}; - -// AIFF/AIFC header structure ... only the part common to both -// formats. -struct AifHeader { - char form[4]; // "FORM" - SINT32 formSize; // in bytes - char aiff[4]; // "AIFF" or "AIFC" - char comm[4]; // "COMM" - SINT32 commSize; // "COMM" chunk size (18 for AIFF, 24 for AIFC) - SINT16 nChannels; // number of channels - unsigned long sampleFrames; // sample frames of audio data - SINT16 sampleSize; // in bits - unsigned char srate[10]; // IEEE 754 floating point format -}; - -struct AifSsnd { - char ssnd[4]; // "SSND" - SINT32 ssndSize; // "SSND" chunk size - unsigned long offset; // data offset in data block (should be 0) - unsigned long blockSize; // not used by STK (should be 0) -}; - -// MAT-file 5 header structure. -struct MatHeader { - char heading[124]; // Header text field - SINT16 hff[2]; // Header flag fields - SINT32 fs[16]; // Sample rate data element - SINT32 adf[11]; // Array data format fields - // There's more, but it's of variable length -}; - -FileWrite :: FileWrite() - : fd_( 0 ) -{ -} - -FileWrite::FileWrite( std::string fileName, unsigned int nChannels, FILE_TYPE type, Stk::StkFormat format ) - : fd_( 0 ) -{ - this->open( fileName, nChannels, type, format ); -} - -FileWrite :: ~FileWrite() -{ - this->close(); -} - -void FileWrite :: close( void ) -{ - if ( fd_ == 0 ) return; - - if ( fileType_ == FILE_RAW ) - fclose( fd_ ); - else if ( fileType_ == FILE_WAV ) - this->closeWavFile(); - else if ( fileType_ == FILE_SND ) - this->closeSndFile(); - else if ( fileType_ == FILE_AIF ) - this->closeAifFile(); - else if ( fileType_ == FILE_MAT ) - this->closeMatFile(); - - fd_ = 0; -} - -bool FileWrite :: isOpen( void ) -{ - if ( fd_ ) return true; - else return false; -} - -void FileWrite :: open( std::string fileName, unsigned int nChannels, FileWrite::FILE_TYPE type, Stk::StkFormat format ) -{ - // Call close() in case another file is already open. - this->close(); - - if ( nChannels < 1 ) { - oStream_ << "FileWrite::open: then channels argument must be greater than zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - channels_ = nChannels; - fileType_ = type; - - if ( format != STK_SINT8 && format != STK_SINT16 && - format != STK_SINT24 && format != STK_SINT32 && - format != STK_FLOAT32 && format != STK_FLOAT64 ) { - oStream_ << "FileWrite::open: unknown data type (" << format << ") specified!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - dataType_ = format; - - bool result = false; - if ( fileType_ == FILE_RAW ) { - if ( channels_ != 1 ) { - oStream_ << "FileWrite::open: STK RAW files are, by definition, always monaural (channels = " << nChannels << " not supported)!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - result = setRawFile( fileName ); - } - else if ( fileType_ == FILE_WAV ) - result = setWavFile( fileName ); - else if ( fileType_ == FILE_SND ) - result = setSndFile( fileName ); - else if ( fileType_ == FILE_AIF ) - result = setAifFile( fileName ); - else if ( fileType_ == FILE_MAT ) - result = setMatFile( fileName ); - else { - oStream_ << "FileWrite::open: unknown file type (" << fileType_ << ") specified!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( result == false ) - handleError( StkError::FILE_ERROR ); - - frameCounter_ = 0; -} - -bool FileWrite :: setRawFile( std::string fileName ) -{ - if ( fileName.find( ".raw" ) == std::string::npos ) fileName += ".raw"; - fd_ = fopen( fileName.c_str(), "wb" ); - if ( !fd_ ) { - oStream_ << "FileWrite: could not create RAW file: " << fileName << '.'; - return false; - } - - if ( dataType_ != STK_SINT16 ) { - dataType_ = STK_SINT16; - oStream_ << "FileWrite: using 16-bit signed integer data format for file " << fileName << '.'; - handleError( StkError::WARNING ); - } - - byteswap_ = false; -#ifdef __LITTLE_ENDIAN__ - byteswap_ = true; -#endif - - oStream_ << "FileWrite: creating RAW file: " << fileName; - handleError( StkError::STATUS ); - return true; -} - -bool FileWrite :: setWavFile( std::string fileName ) -{ - if ( fileName.find( ".wav" ) == std::string::npos ) fileName += ".wav"; - fd_ = fopen( fileName.c_str(), "wb" ); - if ( !fd_ ) { - oStream_ << "FileWrite: could not create WAV file: " << fileName; - return false; - } - - struct WaveHeader hdr = { {'R','I','F','F'}, 44, {'W','A','V','E'}, {'f','m','t',' '}, 16, 1, 1, - (SINT32) Stk::sampleRate(), 0, 2, 16, 0, 0, 0, - {'\x01','\x00','\x00','\x00','\x00','\x00','\x10','\x00','\x80','\x00','\x00','\xAA','\x00','\x38','\x9B','\x71'}, - {'f','a','c','t'}, 4, 0 }; - hdr.nChannels = (SINT16) channels_; - if ( dataType_ == STK_SINT8 ) - hdr.bitsPerSample = 8; - else if ( dataType_ == STK_SINT16 ) - hdr.bitsPerSample = 16; - else if ( dataType_ == STK_SINT24 ) - hdr.bitsPerSample = 24; - else if ( dataType_ == STK_SINT32 ) - hdr.bitsPerSample = 32; - else if ( dataType_ == STK_FLOAT32 ) { - hdr.formatCode = 3; - hdr.bitsPerSample = 32; - } - else if ( dataType_ == STK_FLOAT64 ) { - hdr.formatCode = 3; - hdr.bitsPerSample = 64; - } - hdr.bytesPerSample = (SINT16) (channels_ * hdr.bitsPerSample / 8); - hdr.bytesPerSecond = (SINT32) (hdr.sampleRate * hdr.bytesPerSample); - - unsigned int bytesToWrite = 36; - bool useExtensible = false; - if ( channels_ > 2 || hdr.bitsPerSample > 16 ) { // use extensible format - useExtensible = true; - bytesToWrite = 72; - hdr.chunkSize += 24; - hdr.formatCode = 0xFFFE; - hdr.cbSize = 22; - hdr.validBits = hdr.bitsPerSample; - SINT16 *subFormat = (SINT16 *)&hdr.subformat[0]; - if ( dataType_ == STK_FLOAT32 || dataType_ == STK_FLOAT64 ) - *subFormat = 3; - else *subFormat = 1; - } - - byteswap_ = false; -#ifndef __LITTLE_ENDIAN__ - byteswap_ = true; - swap32((unsigned char *)&hdr.chunkSize); - swap16((unsigned char *)&hdr.formatCode); - swap16((unsigned char *)&hdr.nChannels); - swap32((unsigned char *)&hdr.sampleRate); - swap32((unsigned char *)&hdr.bytesPerSecond); - swap16((unsigned char *)&hdr.bytesPerSample); - swap16((unsigned char *)&hdr.bitsPerSample); - swap16((unsigned char *)&hdr.cbSize); - swap16((unsigned char *)&hdr.validBits); - swap16((unsigned char *)&hdr.subformat[0]); - swap32((unsigned char *)&hdr.factSize); -#endif - - char data[4] = {'d','a','t','a'}; - SINT32 dataSize = 0; - if ( fwrite(&hdr, 1, bytesToWrite, fd_) != bytesToWrite ) goto error; - if ( fwrite(&data, 4, 1, fd_) != 1 ) goto error; - if ( fwrite(&dataSize, 4, 1, fd_) != 1 ) goto error; - - oStream_ << "FileWrite: creating WAV file: " << fileName; - handleError( StkError::STATUS ); - return true; - - error: - oStream_ << "FileWrite: could not write WAV header for file: " << fileName; - return false; -} - -void FileWrite :: closeWavFile( void ) -{ - int bytesPerSample = 1; - if ( dataType_ == STK_SINT16 ) - bytesPerSample = 2; - else if ( dataType_ == STK_SINT24 ) - bytesPerSample = 3; - else if ( dataType_ == STK_SINT32 || dataType_ == STK_FLOAT32 ) - bytesPerSample = 4; - else if ( dataType_ == STK_FLOAT64 ) - bytesPerSample = 8; - - bool useExtensible = false; - int dataLocation = 40; - if ( bytesPerSample > 2 || channels_ > 2 ) { - useExtensible = true; - dataLocation = 76; - } - - SINT32 bytes = frameCounter_ * channels_ * bytesPerSample; - if ( bytes % 2 ) { // pad extra byte if odd - signed char sample = 0; - fwrite( &sample, 1, 1, fd_ ); - } -#ifndef __LITTLE_ENDIAN__ - swap32((unsigned char *)&bytes); -#endif - fseek( fd_, dataLocation, SEEK_SET ); // jump to data length - fwrite( &bytes, 4, 1, fd_ ); - - bytes = frameCounter_ * channels_ * bytesPerSample + 44; - if ( useExtensible ) bytes += 36; -#ifndef __LITTLE_ENDIAN__ - swap32((unsigned char *)&bytes); -#endif - fseek( fd_, 4, SEEK_SET ); // jump to file size - fwrite( &bytes, 4, 1, fd_ ); - - if ( useExtensible ) { // fill in the "fact" chunk frames value - bytes = frameCounter_; -#ifndef __LITTLE_ENDIAN__ - swap32((unsigned char *)&bytes); -#endif - fseek( fd_, 68, SEEK_SET ); - fwrite( &bytes, 4, 1, fd_ ); - } - - fclose( fd_ ); -} - -bool FileWrite :: setSndFile( std::string fileName ) -{ - std::string name( fileName ); - if ( fileName.find( ".snd" ) == std::string::npos ) fileName += ".snd"; - fd_ = fopen( fileName.c_str(), "wb" ); - if ( !fd_ ) { - oStream_ << "FileWrite: could not create SND file: " << fileName; - return false; - } - - struct SndHeader hdr = {".sn", 40, 0, 3, (SINT32) Stk::sampleRate(), 1, "Created by STK"}; - hdr.pref[3] = 'd'; - hdr.nChannels = channels_; - if ( dataType_ == STK_SINT8 ) - hdr.format = 2; - else if ( dataType_ == STK_SINT16 ) - hdr.format = 3; - else if ( dataType_ == STK_SINT24 ) - hdr.format = 4; - else if ( dataType_ == STK_SINT32 ) - hdr.format = 5; - else if ( dataType_ == STK_FLOAT32 ) - hdr.format = 6; - else if ( dataType_ == STK_FLOAT64 ) - hdr.format = 7; - - byteswap_ = false; -#ifdef __LITTLE_ENDIAN__ - byteswap_ = true; - swap32 ((unsigned char *)&hdr.headerBytes); - swap32 ((unsigned char *)&hdr.format); - swap32 ((unsigned char *)&hdr.sampleRate); - swap32 ((unsigned char *)&hdr.nChannels); -#endif - - if ( fwrite(&hdr, 4, 10, fd_) != 10 ) { - oStream_ << "FileWrite: Could not write SND header for file " << fileName << '.'; - return false; - } - - oStream_ << "FileWrite: creating SND file: " << fileName; - handleError( StkError::STATUS ); - return true; -} - -void FileWrite :: closeSndFile( void ) -{ - int bytesPerSample = 1; - if ( dataType_ == STK_SINT16 ) - bytesPerSample = 2; - else if ( dataType_ == STK_SINT24 ) - bytesPerSample = 3; - else if ( dataType_ == STK_SINT32 ) - bytesPerSample = 4; - else if ( dataType_ == STK_FLOAT32 ) - bytesPerSample = 4; - else if ( dataType_ == STK_FLOAT64 ) - bytesPerSample = 8; - - SINT32 bytes = frameCounter_ * bytesPerSample * channels_; -#ifdef __LITTLE_ENDIAN__ - swap32 ((unsigned char *)&bytes); -#endif - fseek(fd_, 8, SEEK_SET); // jump to data size - fwrite(&bytes, 4, 1, fd_); - fclose(fd_); -} - -bool FileWrite :: setAifFile( std::string fileName ) -{ - std::string name( fileName ); - if ( fileName.find( ".aif" ) == std::string::npos ) fileName += ".aif"; - fd_ = fopen( fileName.c_str(), "wb" ); - if ( !fd_ ) { - oStream_ << "FileWrite: could not create AIF file: " << fileName; - return false; - } - - // Common parts of AIFF/AIFC header. - struct AifHeader hdr = {{'F','O','R','M'}, 46, {'A','I','F','F'}, {'C','O','M','M'}, 18, 0, 0, 16, "0"}; - struct AifSsnd ssnd = {{'S','S','N','D'}, 8, 0, 0}; - hdr.nChannels = channels_; - if ( dataType_ == STK_SINT8 ) - hdr.sampleSize = 8; - else if ( dataType_ == STK_SINT16 ) - hdr.sampleSize = 16; - else if ( dataType_ == STK_SINT24 ) - hdr.sampleSize = 24; - else if ( dataType_ == STK_SINT32 ) - hdr.sampleSize = 32; - else if ( dataType_ == STK_FLOAT32 ) { - hdr.aiff[3] = 'C'; - hdr.sampleSize = 32; - hdr.commSize = 24; - } - else if ( dataType_ == STK_FLOAT64 ) { - hdr.aiff[3] = 'C'; - hdr.sampleSize = 64; - hdr.commSize = 24; - } - - // For AIFF files, the sample rate is stored in a 10-byte, - // IEEE Standard 754 floating point number, so we need to - // convert to that. - SINT16 i; - unsigned long exp; - unsigned long rate = (unsigned long) Stk::sampleRate(); - memset( hdr.srate, 0, 10 ); - exp = rate; - for ( i=0; i<32; i++ ) { - exp >>= 1; - if ( !exp ) break; - } - i += 16383; -#ifdef __LITTLE_ENDIAN__ - swap16((unsigned char *)&i); -#endif - *(SINT16 *)(hdr.srate) = (SINT16) i; - - for ( i=32; i; i-- ) { - if ( rate & 0x80000000 ) break; - rate <<= 1; - } - -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&rate); -#endif - *(unsigned long *)(hdr.srate+2) = (unsigned long) rate; - - byteswap_ = false; -#ifdef __LITTLE_ENDIAN__ - byteswap_ = true; - swap32((unsigned char *)&hdr.formSize); - swap32((unsigned char *)&hdr.commSize); - swap16((unsigned char *)&hdr.nChannels); - swap16((unsigned char *)&hdr.sampleSize); - swap32((unsigned char *)&ssnd.ssndSize); - swap32((unsigned char *)&ssnd.offset); - swap32((unsigned char *)&ssnd.blockSize); -#endif - - // The structure boundaries don't allow a single write of 54 bytes. - if ( fwrite(&hdr, 4, 5, fd_) != 5 ) goto error; - if ( fwrite(&hdr.nChannels, 2, 1, fd_) != 1 ) goto error; - if ( fwrite(&hdr.sampleFrames, 4, 1, fd_) != 1 ) goto error; - if ( fwrite(&hdr.sampleSize, 2, 1, fd_) != 1 ) goto error; - if ( fwrite(&hdr.srate, 10, 1, fd_) != 1 ) goto error; - - if ( dataType_ == STK_FLOAT32 ) { - char type[4] = {'f','l','3','2'}; - char zeroes[2] = { 0, 0 }; - if ( fwrite(&type, 4, 1, fd_) != 1 ) goto error; - if ( fwrite(&zeroes, 2, 1, fd_) != 1 ) goto error; - } - else if ( dataType_ == STK_FLOAT64 ) { - char type[4] = {'f','l','6','4'}; - char zeroes[2] = { 0, 0 }; - if ( fwrite(&type, 4, 1, fd_) != 1 ) goto error; - if ( fwrite(&zeroes, 2, 1, fd_) != 1 ) goto error; - } - - if ( fwrite(&ssnd, 4, 4, fd_) != 4 ) goto error; - - oStream_ << "FileWrite: creating AIF file: " << fileName; - handleError( StkError::STATUS ); - return true; - - error: - oStream_ << "FileWrite: could not write AIF header for file: " << fileName; - return false; -} - -void FileWrite :: closeAifFile( void ) -{ - unsigned long frames = (unsigned long) frameCounter_; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&frames); -#endif - fseek(fd_, 22, SEEK_SET); // jump to "COMM" sampleFrames - fwrite(&frames, 4, 1, fd_); - - int bytesPerSample = 1; - if ( dataType_ == STK_SINT16 ) - bytesPerSample = 2; - if ( dataType_ == STK_SINT24 ) - bytesPerSample = 3; - else if ( dataType_ == STK_SINT32 || dataType_ == STK_FLOAT32 ) - bytesPerSample = 4; - else if ( dataType_ == STK_FLOAT64 ) - bytesPerSample = 8; - - unsigned long bytes = frameCounter_ * bytesPerSample * channels_ + 46; - if ( dataType_ == STK_FLOAT32 || dataType_ == STK_FLOAT64 ) bytes += 6; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&bytes); -#endif - fseek(fd_, 4, SEEK_SET); // jump to file size - fwrite(&bytes, 4, 1, fd_); - - bytes = frameCounter_ * bytesPerSample * channels_ + 8; - if ( dataType_ == STK_FLOAT32 || dataType_ == STK_FLOAT64 ) bytes += 6; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&bytes); -#endif - if ( dataType_ == STK_FLOAT32 || dataType_ == STK_FLOAT64 ) - fseek(fd_, 48, SEEK_SET); // jump to "SSND" chunk size - else - fseek(fd_, 42, SEEK_SET); // jump to "SSND" chunk size - fwrite(&bytes, 4, 1, fd_); - - fclose( fd_ ); -} - -bool FileWrite :: setMatFile( std::string fileName ) -{ - if ( fileName.find( ".mat" ) == std::string::npos ) fileName += ".mat"; - fd_ = fopen( fileName.c_str(), "w+b" ); - if ( !fd_ ) { - oStream_ << "FileWrite: could not create MAT file: " << fileName; - return false; - } - - if ( dataType_ != STK_FLOAT64 ) { - dataType_ = STK_FLOAT64; - oStream_ << "FileWrite: using 64-bit floating-point data format for file " << fileName << '.'; - handleError( StkError::DEBUG_PRINT ); - } - - struct MatHeader hdr; - strcpy( hdr.heading,"MATLAB 5.0 MAT-file, Generated using the Synthesis ToolKit in C++ (STK). By Perry R. Cook and Gary P. Scavone." ); - for ( int i=strlen(hdr.heading); i<124; i++ ) hdr.heading[i] = ' '; - - // Header Flag Fields - hdr.hff[0] = (SINT16) 0x0100; // Version field - hdr.hff[1] = (SINT16) 'M'; // Endian indicator field ("MI") - hdr.hff[1] <<= 8; - hdr.hff[1] += 'I'; - - // Write sample rate in array data element - hdr.fs[0] = (SINT32) 14; // Matlab array data type value - hdr.fs[1] = (SINT32) 56; // Size of data element to follow (in bytes) - - // Numeric Array Subelements (4): - // 1. Array Flags - hdr.fs[2] = (SINT32) 6; // Matlab 32-bit unsigned integer data type value - hdr.fs[3] = (SINT32) 8; // 8 bytes of data to follow - hdr.fs[4] = (SINT32) 6; // Double-precision array, no array flags set - hdr.fs[5] = (SINT32) 0; // 4 bytes undefined - // 2. Array Dimensions - hdr.fs[6] = (SINT32) 5; // Matlab 32-bit signed integer data type value - hdr.fs[7] = (SINT32) 8; // 8 bytes of data to follow (2D array) - hdr.fs[8] = (SINT32) 1; // 1 row - hdr.fs[9] = (SINT32) 1; // 1 column - // 3. Array Name (small data format element) - hdr.fs[10] = 0x00020001; - hdr.fs[11] = 's' << 8; - hdr.fs[11] += 'f'; - // 4. Real Part - hdr.fs[12] = 9; // Matlab IEEE 754 double data type - hdr.fs[13] = 8; // 8 bytes of data to follow - FLOAT64 *sampleRate = (FLOAT64 *)&hdr.fs[14]; - *sampleRate = (FLOAT64) Stk::sampleRate(); - - // Write audio samples in array data element - hdr.adf[0] = (SINT32) 14; // Matlab array data type value - hdr.adf[1] = (SINT32) 0; // Size of file after this point to end (in bytes) - - // Numeric Array Subelements (4): - // 1. Array Flags - hdr.adf[2] = (SINT32) 6; // Matlab 32-bit unsigned integer data type value - hdr.adf[3] = (SINT32) 8; // 8 bytes of data to follow - hdr.adf[4] = (SINT32) 6; // Double-precision array, no array flags set - hdr.adf[5] = (SINT32) 0; // 4 bytes undefined - // 2. Array Dimensions - hdr.adf[6] = (SINT32) 5; // Matlab 32-bit signed integer data type value - hdr.adf[7] = (SINT32) 8; // 8 bytes of data to follow (2D array) - hdr.adf[8] = (SINT32) channels_; // This is the number of rows - hdr.adf[9] = (SINT32) 0; // This is the number of columns - - // 3. Array Name We'll use fileName for the matlab array name (as - // well as the file name), though we might need to strip off a - // leading directory path. If fileName is 4 characters or less, we - // have to use a small data format element for the array name data - // element. Otherwise, the array name must be formatted in 8-byte - // increments (up to 31 characters + NULL). - std::string name = fileName; - size_t found; - found = name.find_last_of("/\\"); - name = name.substr(found+1); - SINT32 namelength = (SINT32) name.size() - 4; // strip off the ".mat" extension - if ( namelength > 31 ) namelength = 31; // Truncate name to 31 characters. - if ( namelength > 4 ) { - hdr.adf[10] = (SINT32) 1; // Matlab 8-bit signed integer data type value - } - else { // Compressed data element format - hdr.adf[10] = (namelength << 16) + 1; - } - - SINT32 headsize = 40; // Number of bytes in audio data element so far. - - // Write the fixed portion of the header - if ( fwrite(&hdr, 236, 1, fd_) != 1 ) goto error; - - // Write MATLAB array name - SINT32 tmp; - if ( namelength > 4 ) { - if ( fwrite(&namelength, 4, 1, fd_) != 1) goto error; - if ( fwrite(name.c_str(), namelength, 1, fd_) != 1 ) goto error; - tmp = (SINT32) ceil((float)namelength / 8); - if ( fseek(fd_, tmp*8-namelength, SEEK_CUR) == -1 ) goto error; - headsize += tmp * 8; - } - else { // Compressed data element format - if ( fwrite(name.c_str(), namelength, 1, fd_) != 1 ) goto error; - tmp = 4 - namelength; - if ( fseek(fd_, tmp, SEEK_CUR) == -1 ) goto error; - } - - // Finish writing known header information - //4. Real Part - tmp = 9; // Matlab IEEE 754 double data type - if ( fwrite(&tmp, 4, 1, fd_) != 1 ) goto error; - tmp = 0; // Size of real part subelement in bytes (8 per sample) - if ( fwrite(&tmp, 4, 1, fd_) != 1 ) goto error; - headsize += 8; // Total number of bytes in data element so far - - if ( fseek(fd_, 196, SEEK_SET) == -1 ) goto error; - if ( fwrite(&headsize, 4, 1, fd_) != 1 ) goto error; // Write header size ... will update at end - if ( fseek(fd_, 0, SEEK_END) == -1 ) goto error; - - byteswap_ = false; - oStream_ << "FileWrite: creating MAT-file: " << fileName; - handleError( StkError::STATUS ); - - return true; - - error: - oStream_ << "FileWrite: could not write MAT-file header for file " << fileName << '.'; - return false; -} - -void FileWrite :: closeMatFile( void ) -{ - fseek(fd_, 228, SEEK_SET); // jump to number of columns - fwrite(&frameCounter_, 4, 1, fd_); - - SINT32 headsize, temp; - fseek(fd_, 196, SEEK_SET); // jump to header size - fread(&headsize, 4, 1, fd_); - temp = headsize; - headsize += (SINT32) (frameCounter_ * 8 * channels_); - fseek(fd_, 196, SEEK_SET); - // Write file size (minus some header info) - fwrite(&headsize, 4, 1, fd_); - - fseek(fd_, temp+196, SEEK_SET); // jumpt to data size (in bytes) - temp = frameCounter_ * 8 * channels_; - fwrite(&temp, 4, 1, fd_); - - fclose(fd_); -} - -void FileWrite :: write( StkFrames& buffer ) -{ - if ( fd_ == 0 ) { - oStream_ << "FileWrite::write(): a file has not yet been opened!"; - handleError( StkError::WARNING ); - return; - } - - if ( buffer.channels() != channels_ ) { - oStream_ << "FileWrite::write(): number of channels in the StkFrames argument does not match that specified to open() function!"; - handleError( StkError::FUNCTION_ARGUMENT ); - return; - } - - unsigned long nSamples = buffer.size(); - if ( dataType_ == STK_SINT16 ) { - SINT16 sample; - for ( unsigned long k=0; k - -namespace stk { - -FileWvIn :: FileWvIn( unsigned long chunkThreshold, unsigned long chunkSize ) - : finished_(true), interpolate_(false), time_(0.0), rate_(0.0), - chunkThreshold_(chunkThreshold), chunkSize_(chunkSize) -{ - Stk::addSampleRateAlert( this ); -} - -FileWvIn :: FileWvIn( std::string fileName, bool raw, bool doNormalize, - unsigned long chunkThreshold, unsigned long chunkSize ) - : finished_(true), interpolate_(false), time_(0.0), rate_(0.0), - chunkThreshold_(chunkThreshold), chunkSize_(chunkSize) -{ - openFile( fileName, raw, doNormalize ); - Stk::addSampleRateAlert( this ); -} - -FileWvIn :: ~FileWvIn() -{ - this->closeFile(); - Stk::removeSampleRateAlert( this ); -} - -void FileWvIn :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - if ( !ignoreSampleRateChange_ ) - this->setRate( oldRate * rate_ / newRate ); -} - -void FileWvIn :: closeFile( void ) -{ - if ( file_.isOpen() ) file_.close(); - finished_ = true; - lastFrame_.resize( 0, 0 ); -} - -void FileWvIn :: openFile( std::string fileName, bool raw, bool doNormalize ) -{ - // Call close() in case another file is already open. - this->closeFile(); - - // Attempt to open the file ... an error might be thrown here. - file_.open( fileName, raw ); - - // Determine whether chunking or not. - if ( file_.fileSize() > chunkThreshold_ ) { - chunking_ = true; - chunkPointer_ = 0; - data_.resize( chunkSize_, file_.channels() ); - if ( doNormalize ) normalizing_ = true; - else normalizing_ = false; - } - else { - chunking_ = false; - data_.resize( (size_t) file_.fileSize(), file_.channels() ); - } - - // Load all or part of the data. - file_.read( data_, 0, doNormalize ); - - // Resize our lastFrame container. - lastFrame_.resize( 1, file_.channels() ); - - // Set default rate based on file sampling rate. - this->setRate( data_.dataRate() / Stk::sampleRate() ); - - if ( doNormalize & !chunking_ ) this->normalize(); - - this->reset(); -} - -void FileWvIn :: reset(void) -{ - time_ = (StkFloat) 0.0; - for ( unsigned int i=0; inormalize( 1.0 ); -} - -// Normalize all channels equally by the greatest magnitude in all of the data. -void FileWvIn :: normalize( StkFloat peak ) -{ - // When chunking, the "normalization" scaling is performed by FileRead. - if ( chunking_ ) return; - - size_t i; - StkFloat max = 0.0; - - for ( i=0; i max ) - max = (StkFloat) fabs((double) data_[i]); - } - - if ( max > 0.0 ) { - max = 1.0 / max; - max *= peak; - for ( i=0; i file_.fileSize() - 1.0 ) { - time_ = file_.fileSize() - 1.0; - for ( unsigned int i=0; i= data_.channels() ) { - oStream_ << "FileWvIn::tick(): channel argument and soundfile data are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - if ( finished_ ) return 0.0; - - if ( time_ < 0.0 || time_ > (StkFloat) ( file_.fileSize() - 1.0 ) ) { - for ( unsigned int i=0; i (StkFloat) ( chunkPointer_ + chunkSize_ - 1 ) ) ) { - - while ( time_ < (StkFloat) chunkPointer_ ) { // negative rate - chunkPointer_ -= chunkSize_ - 1; // overlap chunks by one frame - if ( chunkPointer_ < 0 ) chunkPointer_ = 0; - } - while ( time_ > (StkFloat) ( chunkPointer_ + chunkSize_ - 1 ) ) { // positive rate - chunkPointer_ += chunkSize_ - 1; // overlap chunks by one frame - if ( chunkPointer_ + chunkSize_ > file_.fileSize() ) // at end of file - chunkPointer_ = file_.fileSize() - chunkSize_; - } - - // Load more data. - file_.read( data_, chunkPointer_, normalizing_ ); - } - - // Adjust index for the current buffer. - tyme -= chunkPointer_; - } - - if ( interpolate_ ) { - for ( unsigned int i=0; itick(); - for ( j=0; jopenFile( fileName, nChannels, type, format ); -} - -FileWvOut :: ~FileWvOut() -{ - this->closeFile(); -} - -void FileWvOut :: closeFile( void ) -{ - if ( file_.isOpen() ) { - - // Output any remaining samples in the buffer before closing. - if ( bufferIndex_ > 0 ) { - data_.resize( bufferIndex_, data_.channels() ); - file_.write( data_ ); - } - - file_.close(); - frameCounter_ = 0; - } -} - -void FileWvOut :: openFile( std::string fileName, - unsigned int nChannels, - FileWrite::FILE_TYPE type, - Stk::StkFormat format ) -{ - closeFile(); - - if ( nChannels < 1 ) { - oStream_ << "FileWvOut::openFile: the channels argument must be greater than zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - // An StkError can be thrown by the FileWrite class here. - file_.open( fileName, nChannels, type, format ); - - // Allocate new memory if necessary. - data_.resize( bufferFrames_, nChannels ); - - bufferIndex_ = 0; - iData_ = 0; -} - -void FileWvOut :: incrementFrame( void ) -{ - frameCounter_++; - bufferIndex_++; - - if ( bufferIndex_ == bufferFrames_ ) { - file_.write( data_ ); - bufferIndex_ = 0; - iData_ = 0; - } -} - -void FileWvOut :: tick( const StkFloat sample ) -{ -#if defined(_STK_DEBUG_) - if ( !file_.isOpen() ) { - oStream_ << "FileWvOut::tick(): no file open!"; - handleError( StkError::WARNING ); - return; - } -#endif - - unsigned int nChannels = data_.channels(); - StkFloat input = sample; - clipTest( input ); - for ( unsigned int j=0; jincrementFrame(); -} - -void FileWvOut :: tick( const StkFrames& frames ) -{ -#if defined(_STK_DEBUG_) - if ( !file_.isOpen() ) { - oStream_ << "FileWvOut::tick(): no file open!"; - handleError( StkError::WARNING ); - return; - } - - if ( data_.channels() != frames.channels() ) { - oStream_ << "FileWvOut::tick(): incompatible channel value in StkFrames argument!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - unsigned int iFrames = 0; - unsigned int j, nChannels = data_.channels(); - for ( unsigned int i=0; iincrementFrame(); - } -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Fir.cpp b/source/StkUGens/stk-4.4.4/src/Fir.cpp deleted file mode 100644 index eef6062b4f..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Fir.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/***************************************************/ -/*! \class Fir - \brief STK general finite impulse response filter class. - - This class provides a generic digital filter structure that can be - used to implement FIR filters. For filters with feedback terms, - the Iir class should be used. - - In particular, this class implements the standard difference - equation: - - y[n] = b[0]*x[n] + ... + b[nb]*x[n-nb] - - The \e gain parameter is applied at the filter input and does not - affect the coefficient values. The default gain value is 1.0. - This structure results in one extra multiply per computed sample, - but allows easy control of the overall filter gain. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Fir.h" -#include - -namespace stk { - -Fir :: Fir() -{ - // The default constructor should setup for pass-through. - b_.push_back( 1.0 ); - - inputs_.resize( 1, 1, 0.0 ); -} - -Fir :: Fir( std::vector &coefficients ) -{ - // Check the arguments. - if ( coefficients.size() == 0 ) { - oStream_ << "Fir: coefficient vector must have size > 0!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - gain_ = 1.0; - b_ = coefficients; - - inputs_.resize( b_.size(), 1, 0.0 ); - this->clear(); -} - -Fir :: ~Fir() -{ -} - -void Fir :: setCoefficients( std::vector &coefficients, bool clearState ) -{ - // Check the argument. - if ( coefficients.size() == 0 ) { - oStream_ << "Fir::setCoefficients: coefficient vector must have size > 0!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( b_.size() != coefficients.size() ) { - b_ = coefficients; - inputs_.resize( b_.size(), 1, 0.0 ); - } - else { - for ( unsigned int i=0; iclear(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Flute.cpp b/source/StkUGens/stk-4.4.4/src/Flute.cpp deleted file mode 100644 index 197024ff1a..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Flute.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/***************************************************/ -/*! \Class Flute - \brief STK flute physical model class. - - This class implements a simple flute - physical model, as discussed by Karjalainen, - Smith, Waryznyk, etc. The jet model uses - a polynomial, a la Cook. - - This is a digital waveguide model, making its - use possibly subject to patents held by Stanford - University, Yamaha, and others. - - Control Change Numbers: - - Jet Delay = 2 - - Noise Gain = 4 - - Vibrato Frequency = 11 - - Vibrato Gain = 1 - - Breath Pressure = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Flute.h" -#include "SKINI.msg" - -namespace stk { - -Flute :: Flute( StkFloat lowestFrequency ) -{ - if ( lowestFrequency <= 0.0 ) { - oStream_ << "Flute::Flute: argument is less than or equal to zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - unsigned long nDelays = (unsigned long) ( Stk::sampleRate() / lowestFrequency ); - boreDelay_.setMaximumDelay( nDelays + 1 ); - - jetDelay_.setMaximumDelay( nDelays + 1 ); - jetDelay_.setDelay( 49.0 ); - - vibrato_.setFrequency( 5.925 ); - filter_.setPole( 0.7 - ( 0.1 * 22050.0 / Stk::sampleRate() ) ); - dcBlock_.setBlockZero(); - - adsr_.setAllTimes( 0.005, 0.01, 0.8, 0.010 ); - endReflection_ = 0.5; - jetReflection_ = 0.5; - noiseGain_ = 0.15; // Breath pressure random component. - vibratoGain_ = 0.05; // Breath periodic vibrato component. - jetRatio_ = 0.32; - - maxPressure_ = 0.0; - this->clear(); - this->setFrequency( 220.0 ); -} - -Flute :: ~Flute( void ) -{ -} - -void Flute :: clear( void ) -{ - jetDelay_.clear(); - boreDelay_.clear(); - filter_.clear(); - dcBlock_.clear(); -} - -void Flute :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Flute::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - // We're overblowing here. - lastFrequency_ = frequency * 0.66666; - - // Account for filter delay and one sample "lastOut" delay - // (previously approximated as 2.0 samples). The tuning is still - // not perfect but I'm not sure why. Also, we are not accounting - // for the dc blocking filter delay. - StkFloat delay = Stk::sampleRate() / lastFrequency_ - filter_.phaseDelay( lastFrequency_ ) - 1.0; - - boreDelay_.setDelay( delay ); - jetDelay_.setDelay( delay * jetRatio_ ); -} - -void Flute :: setJetDelay( StkFloat aRatio ) -{ - jetRatio_ = aRatio; - jetDelay_.setDelay( boreDelay_.getDelay() * aRatio ); // Scaled by ratio. -} - -void Flute :: startBlowing( StkFloat amplitude, StkFloat rate ) -{ - if ( amplitude <= 0.0 || rate <= 0.0 ) { - oStream_ << "Flute::startBlowing: one or more arguments is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - adsr_.setAttackRate( rate ); - maxPressure_ = amplitude / (StkFloat) 0.8; - adsr_.keyOn(); -} - -void Flute :: stopBlowing( StkFloat rate ) -{ - if ( rate <= 0.0 ) { - oStream_ << "Flute::stopBlowing: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - adsr_.setReleaseRate( rate ); - adsr_.keyOff(); -} - -void Flute :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - this->startBlowing( 1.1 + (amplitude * 0.20), amplitude * 0.02 ); - outputGain_ = amplitude + 0.001; -} - -void Flute :: noteOff( StkFloat amplitude ) -{ - this->stopBlowing( amplitude * 0.02 ); -} - - -void Flute :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Flute::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_JetDelay_) // 2 - this->setJetDelay( (StkFloat) (0.08 + (0.48 * normalizedValue)) ); - else if (number == __SK_NoiseLevel_) // 4 - noiseGain_ = ( normalizedValue * 0.4); - else if (number == __SK_ModFrequency_) // 11 - vibrato_.setFrequency( normalizedValue * 12.0); - else if (number == __SK_ModWheel_) // 1 - vibratoGain_ = ( normalizedValue * 0.4 ); - else if (number == __SK_AfterTouch_Cont_) // 128 - adsr_.setTarget( normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Flute::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/FormSwep.cpp b/source/StkUGens/stk-4.4.4/src/FormSwep.cpp deleted file mode 100644 index c39f5645fd..0000000000 --- a/source/StkUGens/stk-4.4.4/src/FormSwep.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/***************************************************/ -/*! \class FormSwep - \brief STK sweepable formant filter class. - - This class implements a formant (resonance) which can be "swept" - over time from one frequency setting to another. It provides - methods for controlling the sweep rate and target frequency. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "FormSwep.h" -#include - -namespace stk { - -FormSwep :: FormSwep( void ) -{ - frequency_ = 0.0; - radius_ = 0.0; - targetGain_ = 1.0; - targetFrequency_ = 0.0; - targetRadius_ = 0.0; - deltaGain_ = 0.0; - deltaFrequency_ = 0.0; - deltaRadius_ = 0.0; - sweepState_ = 0.0; - sweepRate_ = 0.002; - dirty_ = false; - - b_.resize( 3, 0.0 ); - a_.resize( 3, 0.0 ); - a_[0] = 1.0; - inputs_.resize( 3, 1, 0.0 ); - outputs_.resize( 3, 1, 0.0 ); - - Stk::addSampleRateAlert( this ); -} - -FormSwep :: ~FormSwep() -{ - Stk::removeSampleRateAlert( this ); -} - -void FormSwep :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - if ( !ignoreSampleRateChange_ ) { - oStream_ << "FormSwep::sampleRateChanged: you may need to recompute filter coefficients!"; - handleError( StkError::WARNING ); - } -} - -void FormSwep :: setResonance( StkFloat frequency, StkFloat radius ) -{ -#if defined(_STK_DEBUG_) - if ( frequency < 0.0 || frequency > 0.5 * Stk::sampleRate() ) { - oStream_ << "FormSwep::setResonance: frequency argument (" << frequency << ") is out of range!"; - handleError( StkError::WARNING ); return; - } - if ( radius < 0.0 || radius >= 1.0 ) { - oStream_ << "FormSwep::setResonance: radius argument (" << radius << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - radius_ = radius; - frequency_ = frequency; - - a_[2] = radius * radius; - a_[1] = -2.0 * radius * cos( TWO_PI * frequency / Stk::sampleRate() ); - - // Use zeros at +- 1 and normalize the filter peak gain. - b_[0] = 0.5 - 0.5 * a_[2]; - b_[1] = 0.0; - b_[2] = -b_[0]; -} - -void FormSwep :: setStates( StkFloat frequency, StkFloat radius, StkFloat gain ) -{ - dirty_ = false; - - if ( frequency_ != frequency || radius_ != radius ) - this->setResonance( frequency, radius ); - - gain_ = gain; - targetFrequency_ = frequency; - targetRadius_ = radius; - targetGain_ = gain; -} - -void FormSwep :: setTargets( StkFloat frequency, StkFloat radius, StkFloat gain ) -{ - if ( frequency < 0.0 || frequency > 0.5 * Stk::sampleRate() ) { - oStream_ << "FormSwep::setTargets: frequency argument (" << frequency << ") is out of range!"; - handleError( StkError::WARNING ); return; - } - if ( radius < 0.0 || radius >= 1.0 ) { - oStream_ << "FormSwep::setTargets: radius argument (" << radius << ") is out of range!"; - handleError( StkError::WARNING ); return; - } - - dirty_ = true; - startFrequency_ = frequency_; - startRadius_ = radius_; - startGain_ = gain_; - targetFrequency_ = frequency; - targetRadius_ = radius; - targetGain_ = gain; - deltaFrequency_ = frequency - frequency_; - deltaRadius_ = radius - radius_; - deltaGain_ = gain - gain_; - sweepState_ = 0.0; -} - -void FormSwep :: setSweepRate( StkFloat rate ) -{ - if ( rate < 0.0 || rate > 1.0 ) { - oStream_ << "FormSwep::setSweepRate: argument (" << rate << ") is out of range!"; - handleError( StkError::WARNING ); return; - } - - sweepRate_ = rate; -} - -void FormSwep :: setSweepTime( StkFloat time ) -{ - if ( time <= 0.0 ) { - oStream_ << "FormSwep::setSweepTime: argument (" << time << ") must be > 0.0!"; - handleError( StkError::WARNING ); return; - } - - this->setSweepRate( 1.0 / ( time * Stk::sampleRate() ) ); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/FreeVerb.cpp b/source/StkUGens/stk-4.4.4/src/FreeVerb.cpp deleted file mode 100644 index 2461777226..0000000000 --- a/source/StkUGens/stk-4.4.4/src/FreeVerb.cpp +++ /dev/null @@ -1,227 +0,0 @@ -/***********************************************************************/ -/*! \class FreeVerb - \brief Jezar at Dreampoint's FreeVerb, implemented in STK. - - Freeverb is a free and open-source Schroeder reverberator - originally implemented in C++. The parameters of the reverberation - model are exceptionally well tuned. FreeVerb uses 8 - lowpass-feedback-comb-filters in parallel, followed by 4 Schroeder - allpass filters in series. The input signal can be either mono or - stereo, and the output signal is stereo. The delay lengths are - optimized for a sample rate of 44100 Hz. - - Ported to STK by Gregory Burlet, 2012. -*/ -/***********************************************************************/ - -#include "FreeVerb.h" -#include -#include - -using namespace stk; - -// Set static delay line lengths -const StkFloat FreeVerb::fixedGain = 0.015; -const StkFloat FreeVerb::scaleWet = 3; -const StkFloat FreeVerb::scaleDry = 2; -const StkFloat FreeVerb::scaleDamp = 0.4; -const StkFloat FreeVerb::scaleRoom = 0.28; -const StkFloat FreeVerb::offsetRoom = 0.7; -int FreeVerb::cDelayLengths[] = {1617, 1557, 1491, 1422, 1356, 1277, 1188, 1116}; -int FreeVerb::aDelayLengths[] = {225, 556, 441, 341}; - -FreeVerb::FreeVerb( void ) -{ - // Resize lastFrame_ for stereo output - lastFrame_.resize( 1, 2, 0.0 ); - - // Initialize parameters - Effect::setEffectMix( 0.75 ); // set initially to 3/4 wet 1/4 dry signal (different than original freeverb) - roomSizeMem_ = (0.75 * scaleRoom) + offsetRoom; // feedback attenuation in LBFC - dampMem_ = 0.25 * scaleDamp; // pole of lowpass filters in the LBFC - width_ = 1.0; - frozenMode_ = false; - update(); - - gain_ = fixedGain; // input gain before sending to filters - g_ = 0.5; // allpass coefficient, immutable in FreeVerb - - // Scale delay line lengths according to the current sampling rate - double fsScale = Stk::sampleRate() / 44100.0; - if ( fsScale != 1.0 ) { - // scale comb filter delay lines - for ( int i = 0; i < nCombs; i++ ) { - cDelayLengths[i] = (int) floor(fsScale * cDelayLengths[i]); - } - - // Scale allpass filter delay lines - for ( int i = 0; i < nAllpasses; i++ ) { - aDelayLengths[i] = (int) floor(fsScale * aDelayLengths[i]); - } - } - - // Initialize delay lines for the LBFC filters - for ( int i = 0; i < nCombs; i++ ) { - combDelayL_[i].setMaximumDelay( cDelayLengths[i] ); - combDelayL_[i].setDelay( cDelayLengths[i] ); - combDelayR_[i].setMaximumDelay( cDelayLengths[i] + stereoSpread ); - combDelayR_[i].setDelay( cDelayLengths[i] + stereoSpread ); - } - - // initialize delay lines for the allpass filters - for (int i = 0; i < nAllpasses; i++) { - allPassDelayL_[i].setMaximumDelay( aDelayLengths[i] ); - allPassDelayL_[i].setDelay( aDelayLengths[i] ); - allPassDelayR_[i].setMaximumDelay( aDelayLengths[i] + stereoSpread ); - allPassDelayR_[i].setDelay( aDelayLengths[i] + stereoSpread ); - } -} - -FreeVerb::~FreeVerb() -{ -} - -void FreeVerb::setEffectMix( StkFloat mix ) -{ - Effect::setEffectMix( mix ); - update(); -} - -void FreeVerb::setRoomSize( StkFloat roomSize ) -{ - roomSizeMem_ = (roomSize * scaleRoom) + offsetRoom; - update(); -} - -StkFloat FreeVerb::getRoomSize() -{ - return (roomSizeMem_ - offsetRoom) / scaleRoom; -} - -void FreeVerb::setDamping( StkFloat damping ) -{ - dampMem_ = damping * scaleDamp; - update(); -} - -StkFloat FreeVerb::getDamping() -{ - return dampMem_ / scaleDamp; -} - -void FreeVerb::setWidth( StkFloat width ) -{ - width_ = width; - update(); -} - -StkFloat FreeVerb::getWidth() -{ - return width_; -} - -void FreeVerb::setMode( bool isFrozen ) -{ - frozenMode_ = isFrozen; - update(); -} - -StkFloat FreeVerb::getMode() -{ - return frozenMode_; -} - -void FreeVerb::update() -{ - StkFloat wet = scaleWet * effectMix_; - dry_ = scaleDry * (1.0-effectMix_); - - // Use the L1 norm so the output gain will sum to one while still - // preserving the ratio of scalings in original FreeVerb - wet /= (wet + dry_); - dry_ /= (wet + dry_); - - wet1_ = wet * (width_/2.0 + 0.5); - wet2_ = wet * (1.0 - width_)/2.0; - - if ( frozenMode_ ) { - // put into freeze mode - roomSize_ = 1.0; - damp_ = 0.0; - gain_ = 0.0; - } - else { - roomSize_ = roomSizeMem_; - damp_ = dampMem_; - gain_ = fixedGain; - } - - for ( int i=0; i= frames.channels() - 1 ) { - oStream_ << "FreeVerb::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() - 1 ) { - oStream_ << "FreeVerb::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(); - unsigned int oHop = oFrames.channels(); - bool stereoInput = ( iFrames.channels() > iChannel+1 ) ? true : false; - for ( unsigned int i=0; i - -namespace stk { - -Granulate :: Granulate( void ) -{ - this->setGrainParameters(); // use default values - this->setRandomFactor(); - gStretch_ = 0; - stretchCounter_ = 0; - gain_ = 1.0; -} - -Granulate :: Granulate( unsigned int nVoices, std::string fileName, bool typeRaw ) -{ - this->setGrainParameters(); // use default values - this->setRandomFactor(); - gStretch_ = 0; - stretchCounter_ = 0; - this->openFile( fileName, typeRaw ); - this->setVoices( nVoices ); -} - -Granulate :: ~Granulate( void ) -{ -} - -void Granulate :: setStretch( unsigned int stretchFactor ) -{ - if ( stretchFactor <= 1 ) - gStretch_ = 0; - else if ( gStretch_ >= 1000 ) - gStretch_ = 1000; - else - gStretch_ = stretchFactor - 1; -} - -void Granulate :: setGrainParameters( unsigned int duration, unsigned int rampPercent, - int offset, unsigned int delay ) -{ - gDuration_ = duration; - if ( gDuration_ == 0 ) { - gDuration_ = 1; - oStream_ << "Granulate::setGrainParameters: duration argument cannot be zero ... setting to 1 millisecond."; - handleError( StkError::WARNING ); - } - - gRampPercent_ = rampPercent; - if ( gRampPercent_ > 100 ) { - gRampPercent_ = 100; - oStream_ << "Granulate::setGrainParameters: rampPercent argument cannot be greater than 100 ... setting to 100."; - handleError( StkError::WARNING ); - } - - gOffset_ = offset; - gDelay_ = delay; -} - -void Granulate :: setRandomFactor( StkFloat randomness ) -{ - if ( randomness < 0.0 ) gRandomFactor_ = 0.0; - else if ( randomness > 1.0 ) gRandomFactor_ = 0.97; - - gRandomFactor_ = 0.97 * randomness; -}; - -void Granulate :: openFile( std::string fileName, bool typeRaw ) -{ - // Attempt to load the soundfile data. - FileRead file( fileName, typeRaw ); - data_.resize( file.fileSize(), file.channels() ); - file.read( data_ ); - lastFrame_.resize( 1, file.channels(), 0.0 ); - - this->reset(); - -#if defined(_STK_DEBUG_) - std::ostringstream message; - message << "Granulate::openFile: file = " << fileName << ", file frames = " << file.fileSize() << '.'; - handleError( message.str(), StkError::DEBUG_PRINT ); -#endif - -} - -void Granulate :: reset( void ) -{ - gPointer_ = 0; - - // Reset grain parameters. - unsigned int count, nVoices = grains_.size(); - for ( unsigned int i=0; icalculateGrain( grains_[i] ); - break; - - case GRAIN_FADEIN: - // We're done ramping up the envelope - if ( grains_[i].sustainCount > 0 ) { - grains_[i].counter = grains_[i].sustainCount; - grains_[i].state = GRAIN_SUSTAIN; - break; - } - // else no sustain state (i.e. perfect triangle window) - - case GRAIN_SUSTAIN: - // We're done with flat part of envelope ... setup to ramp down - if ( grains_[i].decayCount > 0 ) { - grains_[i].counter = grains_[i].decayCount; - grains_[i].eRate = -grains_[i].eRate; - grains_[i].state = GRAIN_FADEOUT; - break; - } - // else no fade out state (gRampPercent = 0) - - case GRAIN_FADEOUT: - // We're done ramping down ... setup for wait between grains - if ( grains_[i].delayCount > 0 ) { - grains_[i].counter = grains_[i].delayCount; - grains_[i].state = GRAIN_STOPPED; - break; - } - // else no delay (gDelay = 0) - - this->calculateGrain( grains_[i] ); - } - } - - // Accumulate the grain outputs. - if ( grains_[i].state > 0 ) { - for ( j=0; j= data_.frames() ) - grains_[i].pointer = 0; - } - - // Decrement counter for all states. - grains_[i].counter--; - } - - // Increment our global file pointer at the stretch rate. - if ( stretchCounter_++ == gStretch_ ) { - gPointer_++; - if ( (unsigned long) gPointer_ >= data_.frames() ) gPointer_ = 0; - stretchCounter_ = 0; - } - - return lastFrame_[channel]; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Guitar.cpp b/source/StkUGens/stk-4.4.4/src/Guitar.cpp deleted file mode 100644 index 6d6a27d0d1..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Guitar.cpp +++ /dev/null @@ -1,244 +0,0 @@ -/***************************************************/ -/*! \class Guitar - \brief STK guitar model class. - - This class implements a guitar model with an arbitrary number of - strings (specified during instantiation). Each string is - represented by an stk::Twang object. The model supports commuted - synthesis, as discussed by Smith and Karjalainen. It also includes - a basic body coupling model and supports feedback. - - This class does not attempt voice management. Rather, most - functions support a parameter to specify a particular string - number and string (voice) management is assumed to occur - externally. Note that this class does not inherit from - stk::Instrmnt because of API inconsistencies. - - This is a digital waveguide model, making its use possibly subject - to patents held by Stanford University, Yamaha, and others. - - Control Change Numbers: - - Bridge Coupling Gain = 2 - - Pluck Position = 4 - - Loop Gain = 11 - - Coupling Filter Pole = 1 - - Pick Filter Pole = 128 - - by Gary P. Scavone, 2012. -*/ -/***************************************************/ - -#include "Guitar.h" -#include "FileWvIn.h" -#include "Noise.h" -#include "SKINI.msg" -#include - -namespace stk { - -#define BASE_COUPLING_GAIN 0.01 - -Guitar :: Guitar( unsigned int nStrings, std::string bodyfile ) -{ - strings_.resize( nStrings ); - stringState_.resize( nStrings, 0 ); - decayCounter_.resize( nStrings, 0 ); - filePointer_.resize( nStrings, 0 ); - pluckGains_.resize( nStrings, 0 ); - - setBodyFile( bodyfile ); - - couplingGain_ = BASE_COUPLING_GAIN; - couplingFilter_.setPole( 0.9 ); - pickFilter_.setPole( 0.95 ); - lastFrame_.resize(1, 1, 0.0); -} - -void Guitar :: clear( void ) -{ - for ( unsigned int i=0; i 1.0 ) { - std::cerr << "Guitar::setPluckPosition: position parameter out of range!"; - handleError( StkError::WARNING ); return; - } - - if ( string >= (int) strings_.size() ) { - oStream_ << "Guitar::setPluckPosition: string parameter is greater than number of strings!"; - handleError( StkError::WARNING ); return; - } - - if ( string < 0 ) // set all strings - for ( unsigned int i=0; i 1.0 ) { - std::cerr << "Guitar::setLoopGain: gain parameter out of range!"; - handleError( StkError::WARNING ); return; - } - - if ( string >= (int) strings_.size() ) { - oStream_ << "Guitar::setLoopGain: string parameter is greater than number of strings!"; - handleError( StkError::WARNING ); return; - } - - if ( string < 0 ) // set all strings - for ( unsigned int i=0; i= strings_.size() ) { - oStream_ << "Guitar::setFrequency: string parameter is greater than number of strings!"; - handleError( StkError::WARNING ); return; - } -#endif - - strings_[string].setFrequency( frequency ); -} - -void Guitar :: noteOn( StkFloat frequency, StkFloat amplitude, unsigned int string ) -{ -#if defined(_STK_DEBUG_) - if ( string >= strings_.size() ) { - oStream_ << "Guitar::noteOn: string parameter is greater than number of strings!"; - handleError( StkError::WARNING ); return; - } - - if ( Stk::inRange( amplitude, 0.0, 1.0 ) == false ) { - oStream_ << "Guitar::noteOn: amplitude parameter is outside range 0.0 - 1.0!"; - handleError( StkError::WARNING ); return; - } -#endif - - this->setFrequency( frequency, string ); - stringState_[string] = 2; - filePointer_[string] = 0; - strings_[string].setLoopGain( 0.995 ); - pluckGains_[string] = amplitude; -} - -void Guitar :: noteOff( StkFloat amplitude, unsigned int string ) -{ -#if defined(_STK_DEBUG_) - if ( string >= strings_.size() ) { - oStream_ << "Guitar::noteOff: string parameter is greater than number of strings!"; - handleError( StkError::WARNING ); return; - } - - if ( Stk::inRange( amplitude, 0.0, 1.0 ) == false ) { - oStream_ << "Guitar::noteOff: amplitude parameter is outside range 0.0 - 1.0!"; - handleError( StkError::WARNING ); return; - } -#endif - - strings_[string].setLoopGain( (1.0 - amplitude) * 0.9 ); - stringState_[string] = 1; -} - -void Guitar :: controlChange( int number, StkFloat value, int string ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Guitar::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } - - if ( string > 0 && string >= (int) strings_.size() ) { - oStream_ << "Guitar::controlChange: string parameter is greater than number of strings!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if ( number == 2 ) - couplingGain_ = 1.5 * BASE_COUPLING_GAIN * normalizedValue; - else if ( number == __SK_PickPosition_ ) // 4 - this->setPluckPosition( normalizedValue, string ); - else if ( number == __SK_StringDamping_ ) // 11 - this->setLoopGain( 0.97 + (normalizedValue * 0.03), string ); - else if ( number == __SK_ModWheel_ ) // 1 - couplingFilter_.setPole( 0.98 * normalizedValue ); - else if (number == __SK_AfterTouch_Cont_) // 128 - pickFilter_.setPole( 0.95 * normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Guitar::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/HevyMetl.cpp b/source/StkUGens/stk-4.4.4/src/HevyMetl.cpp deleted file mode 100644 index 77aa4bede6..0000000000 --- a/source/StkUGens/stk-4.4.4/src/HevyMetl.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/***************************************************/ -/*! \class HevyMetl - \brief STK heavy metal FM synthesis instrument. - - This class implements 3 cascade operators with - feedback modulation, also referred to as - algorithm 3 of the TX81Z. - - Algorithm 3 is : 4--\ - 3-->2-- + -->1-->Out - - Control Change Numbers: - - Total Modulator Index = 2 - - Modulator Crossfade = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "HevyMetl.h" - -namespace stk { - -HevyMetl :: HevyMetl( void ) - : FM() -{ - // Concatenate the STK rawwave path to the rawwave files - for ( unsigned int i=0; i<3; i++ ) - waves_[i] = new FileLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), true ); - waves_[3] = new FileLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), true ); - - this->setRatio(0, 1.0 * 1.000); - this->setRatio(1, 4.0 * 0.999); - this->setRatio(2, 3.0 * 1.001); - this->setRatio(3, 0.5 * 1.002); - - gains_[0] = fmGains_[92]; - gains_[1] = fmGains_[76]; - gains_[2] = fmGains_[91]; - gains_[3] = fmGains_[68]; - - adsr_[0]->setAllTimes( 0.001, 0.001, 1.0, 0.01); - adsr_[1]->setAllTimes( 0.001, 0.010, 1.0, 0.50); - adsr_[2]->setAllTimes( 0.010, 0.005, 1.0, 0.20); - adsr_[3]->setAllTimes( 0.030, 0.010, 0.2, 0.20); - - twozero_.setGain( 2.0 ); - vibrato_.setFrequency( 5.5 ); - modDepth_ = 0.0; -} - -HevyMetl :: ~HevyMetl( void ) -{ -} - -void HevyMetl :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - gains_[0] = amplitude * fmGains_[92]; - gains_[1] = amplitude * fmGains_[76]; - gains_[2] = amplitude * fmGains_[91]; - gains_[3] = amplitude * fmGains_[68]; - this->setFrequency( frequency ); - this->keyOn(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Iir.cpp b/source/StkUGens/stk-4.4.4/src/Iir.cpp deleted file mode 100644 index a762a18679..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Iir.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/***************************************************/ -/*! \class Iir - \brief STK general infinite impulse response filter class. - - This class provides a generic digital filter structure that can be - used to implement IIR filters. For filters containing only - feedforward terms, the Fir class is slightly more efficient. - - In particular, this class implements the standard difference - equation: - - a[0]*y[n] = b[0]*x[n] + ... + b[nb]*x[n-nb] - - a[1]*y[n-1] - ... - a[na]*y[n-na] - - If a[0] is not equal to 1, the filter coeffcients are normalized - by a[0]. - - The \e gain parameter is applied at the filter input and does not - affect the coefficient values. The default gain value is 1.0. - This structure results in one extra multiply per computed sample, - but allows easy control of the overall filter gain. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Iir.h" - -namespace stk { - -Iir :: Iir() -{ - // The default constructor should setup for pass-through. - b_.push_back( 1.0 ); - a_.push_back( 1.0 ); - - inputs_.resize( 1, 1, 0.0 ); - outputs_.resize( 1, 1, 0.0 ); -} - -Iir :: Iir( std::vector &bCoefficients, std::vector &aCoefficients ) -{ - // Check the arguments. - if ( bCoefficients.size() == 0 || aCoefficients.size() == 0 ) { - oStream_ << "Iir: a and b coefficient vectors must both have size > 0!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( aCoefficients[0] == 0.0 ) { - oStream_ << "Iir: a[0] coefficient cannot == 0!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - gain_ = 1.0; - b_ = bCoefficients; - a_ = aCoefficients; - - inputs_.resize( b_.size(), 1, 0.0 ); - outputs_.resize( a_.size(), 1, 0.0 ); - this->clear(); -} - -Iir :: ~Iir() -{ -} - -void Iir :: setCoefficients( std::vector &bCoefficients, std::vector &aCoefficients, bool clearState ) -{ - this->setNumerator( bCoefficients, false ); - this->setDenominator( aCoefficients, false ); - - if ( clearState ) this->clear(); -} - -void Iir :: setNumerator( std::vector &bCoefficients, bool clearState ) -{ - // Check the argument. - if ( bCoefficients.size() == 0 ) { - oStream_ << "Iir::setNumerator: coefficient vector must have size > 0!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( b_.size() != bCoefficients.size() ) { - b_ = bCoefficients; - inputs_.resize( b_.size(), 1, 0.0 ); - } - else { - for ( unsigned int i=0; iclear(); -} - -void Iir :: setDenominator( std::vector &aCoefficients, bool clearState ) -{ - // Check the argument. - if ( aCoefficients.size() == 0 ) { - oStream_ << "Iir::setDenominator: coefficient vector must have size > 0!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( aCoefficients[0] == 0.0 ) { - oStream_ << "Iir::setDenominator: a[0] coefficient cannot == 0!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( a_.size() != aCoefficients.size() ) { - a_ = aCoefficients; - outputs_.resize( a_.size(), 1, 0.0 ); - } - else { - for ( unsigned int i=0; iclear(); - - // Scale coefficients by a[0] if necessary - if ( a_[0] != 1.0 ) { - unsigned int i; - for ( i=0; i - -namespace stk { - -extern "C" THREAD_RETURN THREAD_TYPE inputThread( void * ptr ) -{ - ThreadInfo *info = (ThreadInfo *)ptr; - - while ( !info->finished ) { - ((InetWvIn *) info->object)->receive(); - } - - return 0; -} - -InetWvIn :: InetWvIn( unsigned long bufferFrames, unsigned int nBuffers ) - :soket_(0), buffer_(0), bufferFrames_(bufferFrames), bufferBytes_(0), nBuffers_(nBuffers), connected_(false) -{ - threadInfo_.finished = false; - threadInfo_.object = (void *) this; - - // Start the input thread. - if ( !thread_.start( &inputThread, &threadInfo_ ) ) { - oStream_ << "InetWvIn(): unable to start input thread in constructor!"; - handleError( StkError::PROCESS_THREAD ); - } -} - -InetWvIn :: ~InetWvIn() -{ - // Close down the thread. - connected_ = false; - threadInfo_.finished = true; - - if ( soket_ ) delete soket_; - if ( buffer_ ) delete [] buffer_; -} - -void InetWvIn :: listen( int port, unsigned int nChannels, - Stk::StkFormat format, Socket::ProtocolType protocol ) -{ - mutex_.lock(); - - if ( connected_ ) delete soket_; - - if ( nChannels < 1 ) { - oStream_ << "InetWvIn()::listen(): the channel argument must be greater than zero."; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( format == STK_SINT16 ) dataBytes_ = 2; - else if ( format == STK_SINT32 || format == STK_FLOAT32 ) dataBytes_ = 4; - else if ( format == STK_FLOAT64 ) dataBytes_ = 8; - else if ( format == STK_SINT8 ) dataBytes_ = 1; - else { - oStream_ << "InetWvIn(): unknown data type specified!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - dataType_ = format; - - unsigned long bufferBytes = bufferFrames_ * nBuffers_ * nChannels * dataBytes_; - if ( bufferBytes > bufferBytes_ ) { - if ( buffer_) delete [] buffer_; - buffer_ = (char *) new char[ bufferBytes ]; - bufferBytes_ = bufferBytes; - } - - data_.resize( bufferFrames_, nChannels ); - lastFrame_.resize( 1, nChannels, 0.0 ); - - bufferCounter_ = 0; - writePoint_ = 0; - readPoint_ = 0; - bytesFilled_ = 0; - - if ( protocol == Socket::PROTO_TCP ) { - TcpServer *socket = new TcpServer( port ); - oStream_ << "InetWvIn:listen(): waiting for TCP connection on port " << socket->port() << " ... "; - handleError( StkError::STATUS ); - fd_ = socket->accept(); - if ( fd_ < 0) { - oStream_ << "InetWvIn::listen(): Error accepting TCP connection request!"; - handleError( StkError::PROCESS_SOCKET ); - } - oStream_ << "InetWvIn::listen(): TCP socket connection made!"; - handleError( StkError::STATUS ); - soket_ = (Socket *) socket; - } - else { - soket_ = new UdpSocket( port ); - fd_ = soket_->id(); - } - - connected_ = true; - - mutex_.unlock(); -} - -void InetWvIn :: receive( void ) -{ - if ( !connected_ ) { - Stk::sleep(100); - return; - } - - fd_set mask; - FD_ZERO( &mask ); - FD_SET( fd_, &mask ); - - // The select function will block until data is available for reading. - select( fd_+1, &mask, (fd_set *)0, (fd_set *)0, NULL ); - - if ( FD_ISSET( fd_, &mask ) ) { - mutex_.lock(); - unsigned long unfilled = bufferBytes_ - bytesFilled_; - if ( unfilled > 0 ) { - // There's room in our buffer for more data. - unsigned long endPoint = writePoint_ + unfilled; - if ( endPoint > bufferBytes_ ) unfilled -= endPoint - bufferBytes_; - int i = soket_->readBuffer( fd_, (void *)&buffer_[writePoint_], unfilled, 0 ); - //int i = Socket::readBuffer( fd_, (void *)&buffer_[writePoint_], unfilled, 0 ); - if ( i <= 0 ) { - oStream_ << "InetWvIn::receive(): the remote InetWvIn socket has closed."; - handleError( StkError::STATUS ); - connected_ = false; - mutex_.unlock(); - return; - } - bytesFilled_ += i; - writePoint_ += i; - if ( writePoint_ == bufferBytes_ ) - writePoint_ = 0; - mutex_.unlock(); - } - else { - // Sleep 10 milliseconds AFTER unlocking mutex. - mutex_.unlock(); - Stk::sleep( 10 ); - } - } -} - -int InetWvIn :: readData( void ) -{ - // We have two potential courses of action should this method - // be called and the input buffer isn't sufficiently filled. - // One solution is to fill the data buffer with zeros and return. - // The other solution is to wait until the necessary data exists. - // I chose the latter, as it works for both streamed files - // (non-realtime data transport) and realtime playback (given - // adequate network bandwidth and speed). - - // Wait until data is ready. - unsigned long bytes = data_.size() * dataBytes_; - while ( connected_ && bytesFilled_ < bytes ) - Stk::sleep( 10 ); - - if ( !connected_ && bytesFilled_ == 0 ) return 0; - bytes = ( bytesFilled_ < bytes ) ? bytesFilled_ : bytes; - - // Copy samples from buffer to data. - StkFloat gain; - long samples = bytes / dataBytes_; - mutex_.lock(); - if ( dataType_ == STK_SINT16 ) { - gain = 1.0 / 32767.0; - SINT16 *buf = (SINT16 *) (buffer_+readPoint_); - for (int i=0; i 0 || bufferCounter_ > 0 ) - return true; - else - return connected_; -} - -StkFloat InetWvIn :: tick( unsigned int channel ) -{ - // If no connection and we've output all samples in the queue, return 0.0. - if ( !connected_ && bytesFilled_ == 0 && bufferCounter_ == 0 ) { -#if defined(_STK_DEBUG_) - oStream_ << "InetWvIn::tick(): a valid socket connection does not exist!"; - handleError( StkError::DEBUG_PRINT ); -#endif - return 0.0; - } - -#if defined(_STK_DEBUG_) - if ( channel >= data_.channels() ) { - oStream_ << "InetWvIn::tick(): channel argument is incompatible with data stream!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - if ( bufferCounter_ == 0 ) - bufferCounter_ = readData(); - - unsigned int nChannels = lastFrame_.channels(); - long index = ( bufferFrames_ - bufferCounter_ ) * nChannels; - for ( unsigned int i=0; itick(); - for ( j=0; j - -namespace stk { - -InetWvOut :: InetWvOut( unsigned long packetFrames ) - : buffer_(0), soket_(0), bufferFrames_(packetFrames), bufferBytes_(0) -{ -} - -InetWvOut :: InetWvOut( int port, Socket::ProtocolType protocol, std::string hostname, - unsigned int nChannels, Stk::StkFormat format, unsigned long packetFrames ) - : buffer_(0), soket_(0), bufferFrames_(packetFrames), bufferBytes_(0) -{ - connect( port, protocol, hostname, nChannels, format ); -} - -InetWvOut :: ~InetWvOut() -{ - disconnect(); - if ( soket_ ) delete soket_; - if ( buffer_ ) delete [] buffer_; -} - -void InetWvOut :: connect( int port, Socket::ProtocolType protocol, std::string hostname, - unsigned int nChannels, Stk::StkFormat format ) -{ - if ( soket_ && soket_->isValid( soket_->id() ) ) - disconnect(); - - if ( nChannels == 0 ) { - oStream_ << "InetWvOut::connect: the channel argument must be greater than zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - if ( format == STK_SINT8 ) dataBytes_ = 1; - else if ( format == STK_SINT16 ) dataBytes_ = 2; - else if ( format == STK_SINT32 || format == STK_FLOAT32 ) dataBytes_ = 4; - else if ( format == STK_FLOAT64 ) dataBytes_ = 8; - else { - oStream_ << "InetWvOut::connect: unknown data type specified."; - handleError( StkError::FUNCTION_ARGUMENT ); - } - dataType_ = format; - - if ( protocol == Socket::PROTO_TCP ) { - soket_ = new TcpClient( port, hostname ); - } - else { - // For UDP sockets, the sending and receiving sockets cannot have - // the same port number. Since the port argument corresponds to - // the destination port, we will associate this socket instance - // with a different port number (arbitrarily determined as port - - // 1). - UdpSocket *socket = new UdpSocket( port - 1 ); - socket->setDestination( port, hostname ); - soket_ = (Socket *) socket; - } - - // Allocate new memory if necessary. - data_.resize( bufferFrames_, nChannels ); - unsigned long bufferBytes = dataBytes_ * bufferFrames_ * nChannels; - if ( bufferBytes > bufferBytes_ ) { - if ( buffer_) delete [] buffer_; - buffer_ = (char *) new char[ bufferBytes ]; - bufferBytes_ = bufferBytes; - } - frameCounter_ = 0; - bufferIndex_ = 0; - iData_ = 0; -} - -void InetWvOut :: disconnect(void) -{ - if ( soket_ ) { - writeData( bufferIndex_ ); - soket_->close( soket_->id() ); - delete soket_; - soket_ = 0; - } -} - -void InetWvOut :: writeData( unsigned long frames ) -{ - unsigned long samples = frames * data_.channels(); - if ( dataType_ == STK_SINT8 ) { - signed char *ptr = (signed char *) buffer_; - for ( unsigned long k=0; kclipTest( data_[k] ); - *ptr++ = (signed char) (data_[k] * 127.0); - } - } - else if ( dataType_ == STK_SINT16 ) { - SINT16 *ptr = (SINT16 *) buffer_; - for ( unsigned long k=0; kclipTest( data_[k] ); - *ptr = (SINT16) (data_[k] * 32767.0); -#ifdef __LITTLE_ENDIAN__ - swap16 ((unsigned char *)ptr); -#endif - ptr++; - } - } - else if ( dataType_ == STK_SINT32 ) { - SINT32 *ptr = (SINT32 *) buffer_; - for ( unsigned long k=0; kclipTest( data_[k] ); - *ptr = (SINT32) (data_[k] * 2147483647.0); -#ifdef __LITTLE_ENDIAN__ - swap32 ((unsigned char *)ptr); -#endif - ptr++; - } - } - else if ( dataType_ == STK_FLOAT32 ) { - FLOAT32 *ptr = (FLOAT32 *) buffer_; - for ( unsigned long k=0; kclipTest( data_[k] ); - *ptr = (FLOAT32) data_[k]; -#ifdef __LITTLE_ENDIAN__ - swap32 ((unsigned char *)ptr); -#endif - ptr++; - } - } - else if ( dataType_ == STK_FLOAT64 ) { - FLOAT64 *ptr = (FLOAT64 *) buffer_; - for ( unsigned long k=0; kclipTest( data_[k] ); - *ptr = (FLOAT64) data_[k]; -#ifdef __LITTLE_ENDIAN__ - swap64 ((unsigned char *)ptr); -#endif - ptr++; - } - } - - long bytes = dataBytes_ * samples; - if ( soket_->writeBuffer( (const void *)buffer_, bytes, 0 ) < 0 ) { - oStream_ << "InetWvOut: connection to socket server failed!"; - handleError( StkError::PROCESS_SOCKET ); - } -} - -void InetWvOut :: incrementFrame( void ) -{ - frameCounter_++; - bufferIndex_++; - - if ( bufferIndex_ == bufferFrames_ ) { - writeData( bufferFrames_ ); - bufferIndex_ = 0; - iData_ = 0; - } -} - -void InetWvOut :: tick( const StkFloat sample ) -{ - if ( !soket_ || !soket_->isValid( soket_->id() ) ) { -#if defined(_STK_DEBUG_) - oStream_ << "InetWvOut::tick(): a valid socket connection does not exist!"; - handleError( StkError::DEBUG_PRINT ); -#endif - return; - } - - unsigned int nChannels = data_.channels(); - StkFloat input = sample; - clipTest( input ); - for ( unsigned int j=0; jincrementFrame(); -} - -void InetWvOut :: tick( const StkFrames& frames ) -{ - if ( !soket_ || !soket_->isValid( soket_->id() ) ) { -#if defined(_STK_DEBUG_) - oStream_ << "InetWvOut::tick(): a valid socket connection does not exist!"; - handleError( StkError::DEBUG_PRINT ); -#endif - return; - } - -#if defined(_STK_DEBUG_) - if ( data_.channels() != frames.channels() ) { - oStream_ << "InetWvOut::tick(): incompatible channel value in StkFrames argument!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - unsigned int j, nChannels = data_.channels(); - unsigned int iFrames = 0; - for ( unsigned int i=0; iincrementFrame(); - } -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/JCRev.cpp b/source/StkUGens/stk-4.4.4/src/JCRev.cpp deleted file mode 100644 index 767925295d..0000000000 --- a/source/StkUGens/stk-4.4.4/src/JCRev.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/***************************************************/ -/*! \class JCRev - \brief John Chowning's reverberator class. - - This class takes a monophonic input signal and - produces a stereo output signal. It is derived - from the CLM JCRev function, which is based on - the use of networks of simple allpass and comb - delay filters. This class implements three - series allpass units, followed by four parallel - comb filters, and two decorrelation delay lines - in parallel at the output. - - Although not in the original JC reverberator, - one-pole lowpass filters have been added inside - the feedback comb filters. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "JCRev.h" -#include - -namespace stk { - -JCRev :: JCRev( StkFloat T60 ) -{ - if ( T60 <= 0.0 ) { - oStream_ << "JCRev::JCRev: argument (" << T60 << ") must be positive!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - lastFrame_.resize( 1, 2, 0.0 ); // resize lastFrame_ for stereo output - - // Delay lengths for 44100 Hz sample rate. - int lengths[9] = {1116, 1356, 1422, 1617, 225, 341, 441, 211, 179}; - double scaler = Stk::sampleRate() / 44100.0; - - int delay, i; - if ( scaler != 1.0 ) { - for ( i=0; i<9; i++ ) { - delay = (int) floor( scaler * lengths[i] ); - if ( (delay & 1) == 0) delay++; - while ( !this->isPrime(delay) ) delay += 2; - lengths[i] = delay; - } - } - - for ( i=0; i<3; i++ ) { - allpassDelays_[i].setMaximumDelay( lengths[i+4] ); - allpassDelays_[i].setDelay( lengths[i+4] ); - } - - for ( i=0; i<4; i++ ) { - combDelays_[i].setMaximumDelay( lengths[i] ); - combDelays_[i].setDelay( lengths[i] ); - combFilters_[i].setPole( 0.2 ); - } - - this->setT60( T60 ); - outLeftDelay_.setMaximumDelay( lengths[7] ); - outLeftDelay_.setDelay( lengths[7] ); - outRightDelay_.setMaximumDelay( lengths[8] ); - outRightDelay_.setDelay( lengths[8] ); - allpassCoefficient_ = 0.7; - effectMix_ = 0.3; - this->clear(); -} - -void JCRev :: clear() -{ - allpassDelays_[0].clear(); - allpassDelays_[1].clear(); - allpassDelays_[2].clear(); - combDelays_[0].clear(); - combDelays_[1].clear(); - combDelays_[2].clear(); - combDelays_[3].clear(); - outRightDelay_.clear(); - outLeftDelay_.clear(); - lastFrame_[0] = 0.0; - lastFrame_[1] = 0.0; -} - -void JCRev :: setT60( StkFloat T60 ) -{ - if ( T60 <= 0.0 ) { - oStream_ << "JCRev::setT60: argument (" << T60 << ") must be positive!"; - handleError( StkError::WARNING ); return; - } - - for ( int i=0; i<4; i++ ) - combCoefficient_[i] = pow(10.0, (-3.0 * combDelays_[i].getDelay() / (T60 * Stk::sampleRate()))); -} - -StkFrames& JCRev :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() - 1 ) { - oStream_ << "JCRev::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() - 1 ) { - oStream_ << "JCRev::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; isetFrequency( 220.0 ); - this->setPluckPosition( 0.4 ); -} - -Mandolin :: ~Mandolin( void ) -{ -} - -void Mandolin :: clear( void ) -{ - strings_[0].clear(); - strings_[1].clear(); -} - -void Mandolin :: setPluckPosition( StkFloat position ) -{ - if ( position < 0.0 || position > 1.0 ) { - std::cerr << "Mandolin::setPluckPosition: position parameter out of range!"; - handleError( StkError::WARNING ); return; - } - - strings_[0].setPluckPosition( position ); - strings_[1].setPluckPosition( position ); -} - -void Mandolin :: setDetune( StkFloat detune ) -{ - if ( detune <= 0.0 ) { - oStream_ << "Mandolin::setDeturn: parameter is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - detuning_ = detune; - strings_[1].setFrequency( frequency_ * detuning_ ); -} - -void Mandolin :: setBodySize( StkFloat size ) -{ - // Scale the commuted body response by its sample rate (22050). - StkFloat rate = size * 22050.0 / Stk::sampleRate(); - for ( int i=0; i<12; i++ ) - soundfile_[i].setRate( rate ); -} - -void Mandolin :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Mandolin::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - frequency_ = frequency; - strings_[0].setFrequency( frequency_ ); - strings_[1].setFrequency( frequency_ * detuning_ ); -} - -void Mandolin :: pluck( StkFloat amplitude ) -{ - if ( amplitude < 0.0 || amplitude > 1.0 ) { - oStream_ << "Mandolin::pluck: amplitude parameter out of range!"; - handleError( StkError::WARNING ); return; - } - - soundfile_[mic_].reset(); - pluckAmplitude_ = amplitude; - - //strings_[0].setLoopGain( 0.97 + pluckAmplitude_ * 0.03 ); - //strings_[1].setLoopGain( 0.97 + pluckAmplitude_ * 0.03 ); -} - -void Mandolin :: pluck( StkFloat amplitude, StkFloat position ) -{ - this->setPluckPosition( position ); - this->pluck( amplitude ); -} - -void Mandolin :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - this->pluck( amplitude ); -} - -void Mandolin :: noteOff( StkFloat amplitude ) -{ - if ( amplitude < 0.0 || amplitude > 1.0 ) { - oStream_ << "Mandolin::noteOff: amplitude is out of range!"; - handleError( StkError::WARNING ); return; - } - - //strings_[0].setLoopGain( 0.97 + (1 - amplitude) * 0.03 ); - //strings_[1].setLoopGain( 0.97 + (1 - amplitude) * 0.03 ); -} - -void Mandolin :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Mandolin::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if ( number == __SK_BodySize_ ) // 2 - this->setBodySize( normalizedValue * 2.0 ); - else if ( number == __SK_PickPosition_ ) // 4 - this->setPluckPosition( normalizedValue ); - else if ( number == __SK_StringDamping_ ) { // 11 - strings_[0].setLoopGain( 0.97 + (normalizedValue * 0.03) ); - strings_[1].setLoopGain( 0.97 + (normalizedValue * 0.03) ); - } - else if ( number == __SK_StringDetune_ ) // 1 - this->setDetune( 1.0 - (normalizedValue * 0.1) ); - else if ( number == __SK_AfterTouch_Cont_ ) // 128 - mic_ = (int) (normalizedValue * 11.0); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Mandolin::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Mesh2D.cpp b/source/StkUGens/stk-4.4.4/src/Mesh2D.cpp deleted file mode 100644 index 56ea1c71c6..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Mesh2D.cpp +++ /dev/null @@ -1,367 +0,0 @@ -/***************************************************/ -/*! \class Mesh2D - \brief Two-dimensional rectilinear waveguide mesh class. - - This class implements a rectilinear, - two-dimensional digital waveguide mesh - structure. For details, see Van Duyne and - Smith, "Physical Modeling with the 2-D Digital - Waveguide Mesh", Proceedings of the 1993 - International Computer Music Conference. - - This is a digital waveguide model, making its - use possibly subject to patents held by Stanford - University, Yamaha, and others. - - Control Change Numbers: - - X Dimension = 2 - - Y Dimension = 4 - - Mesh Decay = 11 - - X-Y Input Position = 1 - - by Julius Smith, 2000 - 2002. - Revised by Gary Scavone for STK, 2002. -*/ -/***************************************************/ - -#include "Mesh2D.h" -#include "SKINI.msg" - -namespace stk { - -Mesh2D :: Mesh2D( unsigned short nX, unsigned short nY ) -{ - if ( nX == 0.0 || nY == 0.0 ) { - oStream_ << "Mesh2D::Mesh2D: one or more argument is equal to zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - this->setNX( nX ); - this->setNY( nY ); - - StkFloat pole = 0.05; - unsigned short i; - for ( i=0; iclearMesh(); - - counter_ = 0; - xInput_ = 0; - yInput_ = 0; -} - -Mesh2D :: ~Mesh2D( void ) -{ -} - -void Mesh2D :: clear( void ) -{ - this->clearMesh(); - - unsigned short i; - for ( i=0; i NXMAX ) { - oStream_ << "Mesh2D::setNX(" << lenX << "): Maximum length is " << NXMAX << '!'; - handleError( StkError::WARNING ); return; - } - - NX_ = lenX; -} - -void Mesh2D :: setNY( unsigned short lenY ) -{ - if ( lenY < 2 ) { - oStream_ << "Mesh2D::setNY(" << lenY << "): Minimum length is 2!"; - handleError( StkError::WARNING ); return; - } - else if ( lenY > NYMAX ) { - oStream_ << "Mesh2D::setNY(" << lenY << "): Maximum length is " << NXMAX << '!'; - handleError( StkError::WARNING ); return; - } - - NY_ = lenY; -} - -void Mesh2D :: setDecay( StkFloat decayFactor ) -{ - if ( decayFactor < 0.0 || decayFactor > 1.0 ) { - oStream_ << "Mesh2D::setDecay: decayFactor is out of range!"; - handleError( StkError::WARNING ); return; - } - - int i; - for ( i=0; i 1.0 ) { - oStream_ << "Mesh2D::setInputPosition xFactor value is out of range!"; - handleError( StkError::WARNING ); return; - } - - if ( yFactor < 0.0 || yFactor > 1.0 ) { - oStream_ << "Mesh2D::setInputPosition yFactor value is out of range!"; - handleError( StkError::WARNING ); return; - } - - xInput_ = (unsigned short) (xFactor * (NX_ - 1)); - yInput_ = (unsigned short) (yFactor * (NY_ - 1)); -} - -void Mesh2D :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - // Input at corner. - if ( counter_ & 1 ) { - vxp1_[xInput_][yInput_] += amplitude; - vyp1_[xInput_][yInput_] += amplitude; - } - else { - vxp_[xInput_][yInput_] += amplitude; - vyp_[xInput_][yInput_] += amplitude; - } -} - -void Mesh2D :: noteOff( StkFloat amplitude ) -{ - return; -} - -StkFloat Mesh2D :: inputTick( StkFloat input ) -{ - if ( counter_ & 1 ) { - vxp1_[xInput_][yInput_] += input; - vyp1_[xInput_][yInput_] += input; - lastFrame_[0] = tick1(); - } - else { - vxp_[xInput_][yInput_] += input; - vyp_[xInput_][yInput_] += input; - lastFrame_[0] = tick0(); - } - - counter_++; - return lastFrame_[0]; -} - -StkFloat Mesh2D :: tick( unsigned int ) -{ - lastFrame_[0] = ((counter_ & 1) ? this->tick1() : this->tick0()); - counter_++; - return lastFrame_[0]; -} - -const StkFloat VSCALE = 0.5; - -StkFloat Mesh2D :: tick0( void ) -{ - int x, y; - StkFloat outsamp = 0; - - // Update junction velocities. - for (x=0; xsetNX( (unsigned short) (normalizedValue * (NXMAX-2) + 2) ); - else if ( number == 4 ) // 4 - this->setNY( (unsigned short) (normalizedValue * (NYMAX-2) + 2) ); - else if ( number == 11 ) // 11 - this->setDecay( 0.9 + (normalizedValue * 0.1) ); - else if ( number == __SK_ModWheel_ ) // 1 - this->setInputPosition( normalizedValue, normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Mesh2D::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Messager.cpp b/source/StkUGens/stk-4.4.4/src/Messager.cpp deleted file mode 100644 index 558f0dbee5..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Messager.cpp +++ /dev/null @@ -1,434 +0,0 @@ -/***************************************************/ -/*! \class Messager - \brief STK input control message parser. - - This class reads and parses control messages from a variety of - sources, such as a scorefile, MIDI port, socket connection, or - stdin. MIDI messages are retrieved using the RtMidi class. All - other input sources (scorefile, socket, or stdin) are assumed to - provide SKINI formatted messages. This class can be compiled with - generic, non-realtime support, in which case only scorefile - reading is possible. - - The various \e realtime message acquisition mechanisms (from MIDI, - socket, or stdin) take place asynchronously, filling the message - queue. A call to popMessage() will pop the next available control - message from the queue and return it via the referenced Message - structure. When a \e non-realtime scorefile is set, it is not - possible to start reading realtime input messages (from MIDI, - socket, or stdin). Likewise, it is not possible to read from a - scorefile when a realtime input mechanism is running. - - When MIDI input is started, input is also automatically read from - stdin. This allows for program termination via the terminal - window. An __SK_Exit_ message is pushed onto the stack whenever - an "exit" or "Exit" message is received from stdin or when all - socket connections close and no stdin thread is running. - - This class is primarily for use in STK example programs but it is - generic enough to work in many other contexts. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Messager.h" -#include -#include -#include "SKINI.msg" - -namespace stk { - -#if defined(__STK_REALTIME__) - -extern "C" THREAD_RETURN THREAD_TYPE stdinHandler(void * ptr); -extern "C" THREAD_RETURN THREAD_TYPE socketHandler(void * ptr); - -#endif // __STK_REALTIME__ - -static const int STK_FILE = 0x1; -static const int STK_MIDI = 0x2; -static const int STK_STDIN = 0x4; -static const int STK_SOCKET = 0x8; - -Messager :: Messager() -{ - data_.sources = 0; - data_.queueLimit = DEFAULT_QUEUE_LIMIT; -#if defined(__STK_REALTIME__) - data_.socket = 0; - data_.midi = 0; -#endif -} - -Messager :: ~Messager() -{ - // Clear the queue in case any thread is waiting on its limit. -#if defined(__STK_REALTIME__) - data_.mutex.lock(); -#endif - while ( data_.queue.size() ) data_.queue.pop(); - data_.sources = 0; - -#if defined(__STK_REALTIME__) - data_.mutex.unlock(); - if ( data_.socket ) { - socketThread_.wait(); - delete data_.socket; - } - - if ( data_.midi ) delete data_.midi; -#endif -} - -bool Messager :: setScoreFile( const char* filename ) -{ - if ( data_.sources ) { - if ( data_.sources == STK_FILE ) { - oStream_ << "Messager::setScoreFile: already reading a scorefile!"; - handleError( StkError::WARNING ); - } - else { - oStream_ << "Messager::setScoreFile: already reading realtime control input ... cannot do scorefile input too!"; - handleError( StkError::WARNING ); - } - return false; - } - - if ( !data_.skini.setFile( filename ) ) return false; - data_.sources = STK_FILE; - return true; -} - -void Messager :: popMessage( Skini::Message& message ) -{ - if ( data_.sources == STK_FILE ) { // scorefile input - if ( !data_.skini.nextMessage( message ) ) - message.type = __SK_Exit_; - return; - } - - if ( data_.queue.size() == 0 ) { - // An empty (or invalid) message is indicated by a type = 0. - message.type = 0; - return; - } - - // Copy queued message to the message pointer structure and then "pop" it. -#if defined(__STK_REALTIME__) - data_.mutex.lock(); -#endif - message = data_.queue.front(); - data_.queue.pop(); -#if defined(__STK_REALTIME__) - data_.mutex.unlock(); -#endif -} - -void Messager :: pushMessage( Skini::Message& message ) -{ -#if defined(__STK_REALTIME__) - data_.mutex.lock(); -#endif - data_.queue.push( message ); -#if defined(__STK_REALTIME__) - data_.mutex.unlock(); -#endif -} - -#if defined(__STK_REALTIME__) - -bool Messager :: startStdInput() -{ - if ( data_.sources == STK_FILE ) { - oStream_ << "Messager::startStdInput: already reading a scorefile ... cannot do realtime control input too!"; - handleError( StkError::WARNING ); - return false; - } - - if ( data_.sources & STK_STDIN ) { - oStream_ << "Messager::startStdInput: stdin input thread already started."; - handleError( StkError::WARNING ); - return false; - } - - // Start the stdin input thread. - if ( !stdinThread_.start( (THREAD_FUNCTION)&stdinHandler, &data_ ) ) { - oStream_ << "Messager::startStdInput: unable to start stdin input thread!"; - handleError( StkError::WARNING ); - return false; - } - data_.sources |= STK_STDIN; - return true; -} - -THREAD_RETURN THREAD_TYPE stdinHandler(void *ptr) -{ - Messager::MessagerData *data = (Messager::MessagerData *) ptr; - Skini::Message message; - - std::string line; - while ( !std::getline( std::cin, line).eof() ) { - if ( line.empty() ) continue; - if ( line.compare(0, 4, "Exit") == 0 || line.compare(0, 4, "exit") == 0 ) - break; - - data->mutex.lock(); - if ( data->skini.parseString( line, message ) ) - data->queue.push( message ); - data->mutex.unlock(); - - while ( data->queue.size() >= data->queueLimit ) Stk::sleep( 50 ); - } - - // We assume here that if someone types an "exit" message in the - // terminal window, all processing should stop. - message.type = __SK_Exit_; - data->queue.push( message ); - data->sources &= ~STK_STDIN; - - return NULL; -} - -void midiHandler( double timeStamp, std::vector *bytes, void *ptr ) -{ - if ( bytes->size() < 2 ) return; - - // Parse the MIDI bytes ... only keep MIDI channel messages. - if ( bytes->at(0) > 239 ) return; - - Messager::MessagerData *data = (Messager::MessagerData *) ptr; - Skini::Message message; - - message.type = bytes->at(0) & 0xF0; - message.channel = bytes->at(0) & 0x0F; - message.time = 0.0; // realtime messages should have delta time = 0.0 - message.intValues[0] = bytes->at(1); - message.floatValues[0] = (StkFloat) message.intValues[0]; - if ( ( message.type != 0xC0 ) && ( message.type != 0xD0 ) ) { - if ( bytes->size() < 3 ) return; - message.intValues[1] = bytes->at(2); - if ( message.type == 0xE0 ) { // combine pithbend into single "14-bit" value - message.intValues[0] += message.intValues[1] <<= 7; - message.floatValues[0] = (StkFloat) message.intValues[0]; - message.intValues[1] = 0; - } - else - message.floatValues[1] = (StkFloat) message.intValues[1]; - } - - while ( data->queue.size() >= data->queueLimit ) Stk::sleep( 50 ); - - data->mutex.lock(); - data->queue.push( message ); - data->mutex.unlock(); -} - -bool Messager :: startMidiInput( int port ) -{ - if ( data_.sources == STK_FILE ) { - oStream_ << "Messager::startMidiInput: already reading a scorefile ... cannot do realtime control input too!"; - handleError( StkError::WARNING ); - return false; - } - - if ( data_.sources & STK_MIDI ) { - oStream_ << "Messager::startMidiInput: MIDI input already started."; - handleError( StkError::WARNING ); - return false; - } - - // First start the stdin input thread if it isn't already running - // (to allow the user to exit). - if ( !( data_.sources & STK_STDIN ) ) { - if ( this->startStdInput() == false ) { - oStream_ << "Messager::startMidiInput: unable to start input from stdin."; - handleError( StkError::WARNING ); - return false; - } - } - - try { - data_.midi = new RtMidiIn(); - data_.midi->setCallback( &midiHandler, (void *) &data_ ); - if ( port == -1 ) data_.midi->openVirtualPort(); - else data_.midi->openPort( (unsigned int)port ); - } - catch ( RtError &error ) { - oStream_ << "Messager::startMidiInput: error creating RtMidiIn instance (" << error.getMessage() << ")."; - handleError( StkError::WARNING ); - return false; - } - - data_.sources |= STK_MIDI; - return true; -} - -bool Messager :: startSocketInput( int port ) -{ - if ( data_.sources == STK_FILE ) { - oStream_ << "Messager::startSocketInput: already reading a scorefile ... cannot do realtime control input too!"; - handleError( StkError::WARNING ); - return false; - } - - if ( data_.sources & STK_SOCKET ) { - oStream_ << "Messager::startSocketInput: socket input thread already started."; - handleError( StkError::WARNING ); - return false; - } - - // Create the socket server. - try { - data_.socket = new TcpServer( port ); - } - catch ( StkError& ) { - return false; - } - - oStream_ << "Socket server listening for connection(s) on port " << port << "..."; - handleError( StkError::STATUS ); - - // Initialize socket descriptor information. - FD_ZERO(&data_.mask); - int fd = data_.socket->id(); - FD_SET( fd, &data_.mask ); - data_.fd.push_back( fd ); - - // Start the socket thread. - if ( !socketThread_.start( (THREAD_FUNCTION)&socketHandler, &data_ ) ) { - oStream_ << "Messager::startSocketInput: unable to start socket input thread!"; - handleError( StkError::WARNING ); - return false; - } - - data_.sources |= STK_SOCKET; - return true; -} - -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - #include - #include -#endif - -THREAD_RETURN THREAD_TYPE socketHandler(void *ptr) -{ - Messager::MessagerData *data = (Messager::MessagerData *) ptr; - Skini::Message message; - std::vector& fd = data->fd; - - struct timeval timeout; - fd_set rmask; - int newfd; - unsigned int i; - const int bufferSize = 1024; - char buffer[bufferSize]; - int index = 0, bytesRead = 0; - std::string line; - std::vector fdclose; - - while ( data->sources & STK_SOCKET ) { - - // Use select function to periodically poll socket desriptors. - rmask = data->mask; - timeout.tv_sec = 0; timeout.tv_usec = 50000; // 50 milliseconds - if ( select( fd.back()+1, &rmask, (fd_set *)0, (fd_set *)0, &timeout ) <= 0 ) continue; - - // A file descriptor is set. Check if there's a new socket connection available. - if ( FD_ISSET( data->socket->id(), &rmask ) ) { - - // Accept and service new connection. - newfd = data->socket->accept(); - if ( newfd >= 0 ) { - std::cout << "New socket connection made.\n" << std::endl; - - // Set the socket to non-blocking mode. - Socket::setBlocking( newfd, false ); - - // Save the descriptor and update the masks. - fd.push_back( newfd ); - std::sort( fd.begin(), data->fd.end() ); - FD_SET( newfd, &data->mask ); - FD_CLR( data->socket->id(), &rmask ); - } - else - std::cerr << "Messager: Couldn't accept connection request!\n"; - } - - // Check the other descriptors. - for ( i=0; imutex.lock(); - if ( line.compare(0, 4, "Exit") == 0 || line.compare(0, 4, "exit") == 0 ) { - // Ignore this line and assume the connection will be - // closed on a subsequent read call. - ; - } - else if ( data->skini.parseString( line, message ) ) - data->queue.push( message ); - data->mutex.unlock(); - line.erase(); - } - } - index = 0; - - bytesRead = Socket::readBuffer(fd[i], buffer, bufferSize, 0); - if (bytesRead == 0) { - // This socket connection closed. - FD_CLR( fd[i], &data->mask ); - Socket::close( fd[i] ); - fdclose.push_back( fd[i] ); - } - } - } - - // Now remove descriptors for closed connections. - for ( i=0; isources &= ~STK_SOCKET; - if ( data->sources & STK_MIDI ) - std::cout << "MIDI input still running ... type 'exit' to quit.\n" << std::endl; - else if ( !(data->sources & STK_STDIN) ) { - // No stdin thread running, so quit now. - message.type = __SK_Exit_; - data->queue.push( message ); - } - } - fdclose.clear(); - } - - // Wait until we're below the queue limit. - while ( data->queue.size() >= data->queueLimit ) Stk::sleep( 50 ); - } - - return NULL; -} - -#endif - -} // stk namespace - diff --git a/source/StkUGens/stk-4.4.4/src/MidiFileIn.cpp b/source/StkUGens/stk-4.4.4/src/MidiFileIn.cpp deleted file mode 100644 index 64873d2db0..0000000000 --- a/source/StkUGens/stk-4.4.4/src/MidiFileIn.cpp +++ /dev/null @@ -1,352 +0,0 @@ -/**********************************************************************/ -/*! \class MidiFileIn - \brief A standard MIDI file reading/parsing class. - - This class can be used to read events from a standard MIDI file. - Event bytes are copied to a C++ vector and must be subsequently - interpreted by the user. The function getNextMidiEvent() skips - meta and sysex events, returning only MIDI channel messages. - Event delta-times are returned in the form of "ticks" and a - function is provided to determine the current "seconds per tick". - Tempo changes are internally tracked by the class and reflected in - the values returned by the function getTickSeconds(). - - by Gary P. Scavone, 2003 - 2010. -*/ -/**********************************************************************/ - -#include "MidiFileIn.h" -#include -#include - -namespace stk { - -MidiFileIn :: MidiFileIn( std::string fileName ) -{ - // Attempt to open the file. - file_.open( fileName.c_str(), std::ios::in | std::ios::binary ); - if ( !file_ ) { - oStream_ << "MidiFileIn: error opening or finding file (" << fileName << ")."; - handleError( StkError::FILE_NOT_FOUND ); - } - - // Parse header info. - char chunkType[4]; - char buffer[4]; - SINT32 *length; - if ( !file_.read( chunkType, 4 ) ) goto error; - if ( !file_.read( buffer, 4 ) ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap32((unsigned char *)&buffer); -#endif - length = (SINT32 *) &buffer; - if ( strncmp( chunkType, "MThd", 4 ) || ( *length != 6 ) ) { - oStream_ << "MidiFileIn: file (" << fileName << ") does not appear to be a MIDI file!"; - handleError( StkError::FILE_UNKNOWN_FORMAT ); - } - - // Read the MIDI file format. - SINT16 *data; - if ( !file_.read( buffer, 2 ) ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap16((unsigned char *)&buffer); -#endif - data = (SINT16 *) &buffer; - if ( *data < 0 || *data > 2 ) { - oStream_ << "MidiFileIn: the file (" << fileName << ") format is invalid!"; - handleError( StkError::FILE_ERROR ); - } - format_ = *data; - - // Read the number of tracks. - if ( !file_.read( buffer, 2 ) ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap16((unsigned char *)&buffer); -#endif - if ( format_ == 0 && *data != 1 ) { - oStream_ << "MidiFileIn: invalid number of tracks (>1) for a file format = 0!"; - handleError( StkError::FILE_ERROR ); - } - nTracks_ = *data; - - // Read the beat division. - if ( !file_.read( buffer, 2 ) ) goto error; -#ifdef __LITTLE_ENDIAN__ - swap16((unsigned char *)&buffer); -#endif - division_ = (int) *data; - double tickrate; - usingTimeCode_ = false; - if ( *data & 0x8000 ) { - // Determine ticks per second from time-code formats. - tickrate = (double) -(*data & 0x7F00); - // If frames per second value is 29, it really should be 29.97. - if ( tickrate == 29.0 ) tickrate = 29.97; - tickrate *= (*data & 0x00FF); - usingTimeCode_ = true; - } - else { - tickrate = (double) (*data & 0x7FFF); // ticks per quarter note - } - - // Now locate the track offsets and lengths. If not using time - // code, we can initialize the "tick time" using a default tempo of - // 120 beats per minute. We will then check for tempo meta-events - // afterward. - unsigned int i; - for ( i=0; i event; - unsigned long value, count; - - // We need to temporarily change the usingTimeCode_ value here so - // that the getNextEvent() function doesn't try to check the tempo - // map (which we're creating here). - usingTimeCode_ = true; - count = getNextEvent( &event, 0 ); - while ( event.size() ) { - if ( ( event.size() == 6 ) && ( event[0] == 0xff ) && - ( event[1] == 0x51 ) && ( event[2] == 0x03 ) ) { - tempoEvent.count = count; - value = ( event[3] << 16 ) + ( event[4] << 8 ) + event[5]; - tempoEvent.tickSeconds = (double) (0.000001 * value / tickrate); - if ( count > tempoEvents_.back().count ) - tempoEvents_.push_back( tempoEvent ); - else - tempoEvents_.back() = tempoEvent; - } - count += getNextEvent( &event, 0 ); - } - rewindTrack( 0 ); - for ( unsigned int i=0; i= nTracks_ ) { - oStream_ << "MidiFileIn::getNextEvent: invalid track argument (" << track << ")."; - handleError( StkError::WARNING ); return; - } - - trackPointers_[track] = trackOffsets_[track]; - trackStatus_[track] = 0; - tickSeconds_[track] = tempoEvents_[0].tickSeconds; -} - -double MidiFileIn :: getTickSeconds( unsigned int track ) -{ - // Return the current tick value in seconds for the given track. - if ( track >= nTracks_ ) { - oStream_ << "MidiFileIn::getTickSeconds: invalid track argument (" << track << ")."; - handleError( StkError::WARNING ); return 0.0; - } - - return tickSeconds_[track]; -} - -unsigned long MidiFileIn :: getNextEvent( std::vector *event, unsigned int track ) -{ - // Fill the user-provided vector with the next event in the - // specified track (default = 0) and return the event delta time in - // ticks. This function assumes that the stored track pointer is - // positioned at the start of a track event. If the track has - // reached its end, the event vector size will be zero. - // - // If we have a format 0 or 2 file and we're not using timecode, we - // should check every meta-event for tempo changes and make - // appropriate updates to the tickSeconds_ parameter if so. - // - // If we have a format 1 file and we're not using timecode, keep a - // running sum of ticks for each track and update the tickSeconds_ - // parameter as needed based on the stored tempo map. - - event->clear(); - if ( track >= nTracks_ ) { - oStream_ << "MidiFileIn::getNextEvent: invalid track argument (" << track << ")."; - handleError( StkError::WARNING ); return 0; - } - - // Check for the end of the track. - if ( (trackPointers_[track] - trackOffsets_[track]) >= trackLengths_[track] ) - return 0; - - unsigned long ticks = 0, bytes = 0; - bool isTempoEvent = false; - - // Read the event delta time. - file_.seekg( trackPointers_[track], std::ios_base::beg ); - if ( !readVariableLength( &ticks ) ) goto error; - - // Parse the event stream to determine the event length. - unsigned char c; - if ( !file_.read( (char *)&c, 1 ) ) goto error; - switch ( c ) { - - case 0xFF: // A Meta-Event - unsigned long position; - trackStatus_[track] = 0; - event->push_back( c ); - if ( !file_.read( (char *)&c, 1 ) ) goto error; - event->push_back( c ); - if ( format_ != 1 && ( c == 0x51 ) ) isTempoEvent = true; - position = file_.tellg(); - if ( !readVariableLength( &bytes ) ) goto error; - bytes += ( (unsigned long)file_.tellg() - position ); - file_.seekg( position, std::ios_base::beg ); - break; - - case 0xF0: - case 0xF7: // The start or continuation of a Sysex event - trackStatus_[track] = 0; - event->push_back( c ); - position = file_.tellg(); - if ( !readVariableLength( &bytes ) ) goto error; - bytes += ( (unsigned long)file_.tellg() - position ); - file_.seekg( position, std::ios_base::beg ); - break; - - default: // Should be a MIDI channel event - if ( c & 0x80 ) { // MIDI status byte - if ( c > 0xF0 ) goto error; - trackStatus_[track] = c; - event->push_back( c ); - c &= 0xF0; - if ( (c == 0xC0) || (c == 0xD0) ) bytes = 1; - else bytes = 2; - } - else if ( trackStatus_[track] & 0x80 ) { // Running status - event->push_back( trackStatus_[track] ); - event->push_back( c ); - c = trackStatus_[track] & 0xF0; - if ( (c != 0xC0) && (c != 0xD0) ) bytes = 1; - } - else goto error; - - } - - // Read the rest of the event into the event vector. - unsigned long i; - for ( i=0; ipush_back( c ); - } - - if ( !usingTimeCode_ ) { - if ( isTempoEvent ) { - // Parse the tempo event and update tickSeconds_[track]. - double tickrate = (double) (division_ & 0x7FFF); - unsigned long value = ( event->at(3) << 16 ) + ( event->at(4) << 8 ) + event->at(5); - tickSeconds_[track] = (double) (0.000001 * value / tickrate); - } - - if ( format_ == 1 ) { - // Update track counter and check the tempo map. - trackCounters_[track] += ticks; - TempoChange tempoEvent = tempoEvents_[ trackTempoIndex_[track] ]; - if ( trackCounters_[track] >= tempoEvent.count && trackTempoIndex_[track] < tempoEvents_.size() - 1 ) { - trackTempoIndex_[track]++; - tickSeconds_[track] = tempoEvent.tickSeconds; - } - } - } - - // Save the current track pointer value. - trackPointers_[track] = file_.tellg(); - - return ticks; - - error: - oStream_ << "MidiFileIn::getNextEvent: file read error!"; - handleError( StkError::FILE_ERROR ); - return 0; -} - -unsigned long MidiFileIn :: getNextMidiEvent( std::vector *midiEvent, unsigned int track ) -{ - // Fill the user-provided vector with the next MIDI event in the - // specified track (default = 0) and return the event delta time in - // ticks. Meta-Events preceeding this event are skipped and ignored. - if ( track >= nTracks_ ) { - oStream_ << "MidiFileIn::getNextMidiEvent: invalid track argument (" << track << ")."; - handleError( StkError::WARNING ); return 0; - } - - unsigned long ticks = getNextEvent( midiEvent, track ); - while ( midiEvent->size() && ( midiEvent->at(0) >= 0xF0 ) ) { - //for ( unsigned int i=0; isize(); i++ ) - //std::cout << "event byte = " << i << ", value = " << (int)midiEvent->at(i) << std::endl; - ticks = getNextEvent( midiEvent, track ); - } - - //for ( unsigned int i=0; isize(); i++ ) - //std::cout << "event byte = " << i << ", value = " << (int)midiEvent->at(i) << std::endl; - - return ticks; -} - -bool MidiFileIn :: readVariableLength( unsigned long *value ) -{ - // It is assumed that this function is called with the file read - // pointer positioned at the start of a variable-length value. The - // function returns "true" if the value is successfully parsed and - // "false" otherwise. - *value = 0; - char c; - - if ( !file_.read( &c, 1 ) ) return false; - *value = (unsigned long) c; - if ( *value & 0x80 ) { - *value &= 0x7f; - do { - if ( !file_.read( &c, 1 ) ) return false; - *value = ( *value << 7 ) + ( c & 0x7f ); - } while ( c & 0x80 ); - } - - return true; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Modal.cpp b/source/StkUGens/stk-4.4.4/src/Modal.cpp deleted file mode 100644 index 9059563855..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Modal.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/***************************************************/ -/*! \class Modal - \brief STK resonance model abstract base class. - - This class contains an excitation wavetable, - an envelope, an oscillator, and N resonances - (non-sweeping BiQuad filters), where N is set - during instantiation. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Modal.h" -#include - -namespace stk { - -Modal :: Modal( unsigned int modes ) - : nModes_(modes) -{ - if ( nModes_ == 0 ) { - oStream_ << "Modal: 'modes' argument to constructor is zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - // We don't make the excitation wave here yet, because we don't know - // what it's going to be. - - ratios_.resize( nModes_ ); - radii_.resize( nModes_ ); - filters_ = (BiQuad **) calloc( nModes_, sizeof(BiQuad *) ); - for (unsigned int i=0; isetEqualGainZeroes(); - } - - // Set some default values. - vibrato_.setFrequency( 6.0 ); - vibratoGain_ = 0.0; - directGain_ = 0.0; - masterGain_ = 1.0; - baseFrequency_ = 440.0; - - this->clear(); - - stickHardness_ = 0.5; - strikePosition_ = 0.561; -} - -Modal :: ~Modal( void ) -{ - for ( unsigned int i=0; iclear(); -} - -void Modal :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Modal::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - baseFrequency_ = frequency; - for ( unsigned int i=0; isetRatioAndRadius( i, ratios_[i], radii_[i] ); -} - -void Modal :: setRatioAndRadius( unsigned int modeIndex, StkFloat ratio, StkFloat radius ) -{ - if ( modeIndex >= nModes_ ) { - oStream_ << "Modal::setRatioAndRadius: modeIndex parameter is greater than number of modes!"; - handleError( StkError::WARNING ); return; - } - - StkFloat nyquist = Stk::sampleRate() / 2.0; - StkFloat temp; - - if ( ratio * baseFrequency_ < nyquist ) { - ratios_[modeIndex] = ratio; - } - else { - temp = ratio; - while (temp * baseFrequency_ > nyquist) temp *= 0.5; - ratios_[modeIndex] = temp; -#if defined(_STK_DEBUG_) - oStream_ << "Modal::setRatioAndRadius: aliasing would occur here ... correcting."; - handleError( StkError::DEBUG_PRINT ); -#endif - } - radii_[modeIndex] = radius; - if (ratio < 0) - temp = -ratio; - else - temp = ratio * baseFrequency_; - - filters_[modeIndex]->setResonance(temp, radius); -} - -void Modal :: setModeGain( unsigned int modeIndex, StkFloat gain ) -{ - if ( modeIndex >= nModes_ ) { - oStream_ << "Modal::setModeGain: modeIndex parameter is greater than number of modes!"; - handleError( StkError::WARNING ); return; - } - - filters_[modeIndex]->setGain( gain ); -} - -void Modal :: strike( StkFloat amplitude ) -{ - if ( amplitude < 0.0 || amplitude > 1.0 ) { - oStream_ << "Modal::strike: amplitude is out of range!"; - handleError( StkError::WARNING ); - } - - envelope_.setRate( 1.0 ); - envelope_.setTarget( amplitude ); - onepole_.setPole( 1.0 - amplitude ); - envelope_.tick(); - wave_->reset(); - - StkFloat temp; - for ( unsigned int i=0; isetResonance(temp, radii_[i]); - } -} - -void Modal :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->strike( amplitude ); - this->setFrequency( frequency ); -} - -void Modal :: noteOff( StkFloat amplitude ) -{ - // This calls damp, but inverts the meaning of amplitude (high - // amplitude means fast damping). - this->damp( 1.0 - (amplitude * 0.03) ); -} - -void Modal :: damp( StkFloat amplitude ) -{ - StkFloat temp; - for ( unsigned int i=0; isetResonance( temp, radii_[i]*amplitude ); - } -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/ModalBar.cpp b/source/StkUGens/stk-4.4.4/src/ModalBar.cpp deleted file mode 100644 index b8e76003ff..0000000000 --- a/source/StkUGens/stk-4.4.4/src/ModalBar.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/***************************************************/ -/*! \class ModalBar - \brief STK resonant bar instrument class. - - This class implements a number of different - struck bar instruments. It inherits from the - Modal class. - - Control Change Numbers: - - Stick Hardness = 2 - - Stick Position = 4 - - Vibrato Gain = 8 - - Vibrato Frequency = 11 - - Direct Stick Mix = 1 - - Volume = 128 - - Modal Presets = 16 - - Marimba = 0 - - Vibraphone = 1 - - Agogo = 2 - - Wood1 = 3 - - Reso = 4 - - Wood2 = 5 - - Beats = 6 - - Two Fixed = 7 - - Clump = 8 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "ModalBar.h" -#include "SKINI.msg" -#include - -namespace stk { - -ModalBar :: ModalBar( void ) - : Modal() -{ - // Concatenate the STK rawwave path to the rawwave file - wave_ = new FileWvIn( (Stk::rawwavePath() + "marmstk1.raw").c_str(), true ); - wave_->setRate( 0.5 * 22050.0 / Stk::sampleRate() ); - - // Set the resonances for preset 0 (marimba). - this->setPreset( 0 ); -} - -ModalBar :: ~ModalBar( void ) -{ - delete wave_; -} - -void ModalBar :: setStickHardness( StkFloat hardness ) -{ - if ( hardness < 0.0 || hardness > 1.0 ) { - oStream_ << "ModalBar::setStickHardness: parameter is out of range!"; - handleError( StkError::WARNING ); return; - } - - stickHardness_ = hardness; - wave_->setRate( (0.25 * pow(4.0, stickHardness_) ) ); - masterGain_ = 0.1 + (1.8 * stickHardness_); -} - -void ModalBar :: setStrikePosition( StkFloat position ) -{ - if ( position < 0.0 || position > 1.0 ) { - oStream_ << "ModalBar::setStrikePosition: parameter is out of range!"; - handleError( StkError::WARNING ); return; - } - - strikePosition_ = position; - - // Hack only first three modes. - StkFloat temp2 = position * PI; - StkFloat temp = sin(temp2); - this->setModeGain(0, 0.12 * temp); - - temp = sin(0.05 + (3.9 * temp2)); - this->setModeGain(1, -0.03 * temp); - - temp = sin(-0.05 + (11 * temp2)); - this->setModeGain(2, 0.11 * temp); -} - -void ModalBar :: setPreset( int preset ) -{ - // Presets: - // First line: relative modal frequencies (negative number is - // a fixed mode that doesn't scale with frequency - // Second line: resonances of the modes - // Third line: mode volumes - // Fourth line: stickHardness, strikePosition, and direct stick - // gain (mixed directly into the output - static StkFloat presets[9][4][4] = { - {{1.0, 3.99, 10.65, -2443}, // Marimba - {0.9996, 0.9994, 0.9994, 0.999}, - {0.04, 0.01, 0.01, 0.008}, - {0.429688, 0.445312, 0.093750}}, - {{1.0, 2.01, 3.9, 14.37}, // Vibraphone - {0.99995, 0.99991, 0.99992, 0.9999}, - {0.025, 0.015, 0.015, 0.015 }, - {0.390625,0.570312,0.078125}}, - {{1.0, 4.08, 6.669, -3725.0}, // Agogo - {0.999, 0.999, 0.999, 0.999}, - {0.06, 0.05, 0.03, 0.02}, - {0.609375,0.359375,0.140625}}, - {{1.0, 2.777, 7.378, 15.377}, // Wood1 - {0.996, 0.994, 0.994, 0.99}, - {0.04, 0.01, 0.01, 0.008}, - {0.460938,0.375000,0.046875}}, - {{1.0, 2.777, 7.378, 15.377}, // Reso - {0.99996, 0.99994, 0.99994, 0.9999}, - {0.02, 0.005, 0.005, 0.004}, - {0.453125,0.250000,0.101562}}, - {{1.0, 1.777, 2.378, 3.377}, // Wood2 - {0.996, 0.994, 0.994, 0.99}, - {0.04, 0.01, 0.01, 0.008}, - {0.312500,0.445312,0.109375}}, - {{1.0, 1.004, 1.013, 2.377}, // Beats - {0.9999, 0.9999, 0.9999, 0.999}, - {0.02, 0.005, 0.005, 0.004}, - {0.398438,0.296875,0.070312}}, - {{1.0, 4.0, -1320.0, -3960.0}, // 2Fix - {0.9996, 0.999, 0.9994, 0.999}, - {0.04, 0.01, 0.01, 0.008}, - {0.453125,0.453125,0.070312}}, - {{1.0, 1.217, 1.475, 1.729}, // Clump - {0.999, 0.999, 0.999, 0.999}, - {0.03, 0.03, 0.03, 0.03 }, - {0.390625,0.570312,0.078125}}, - }; - - int temp = (preset % 9); - for (unsigned int i=0; isetRatioAndRadius(i, presets[temp][0][i], presets[temp][1][i]); - this->setModeGain(i, presets[temp][2][i]); - } - - this->setStickHardness(presets[temp][3][0]); - this->setStrikePosition(presets[temp][3][1]); - directGain_ = presets[temp][3][2]; - - if (temp == 1) // vibraphone - vibratoGain_ = 0.2; - else - vibratoGain_ = 0.0; -} - -void ModalBar :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "ModalBar::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_StickHardness_) // 2 - this->setStickHardness( normalizedValue ); - else if (number == __SK_StrikePosition_) // 4 - this->setStrikePosition( normalizedValue ); - else if (number == __SK_ProphesyRibbon_) // 16 - this->setPreset((int) value); - else if (number == __SK_Balance_) // 8 - vibratoGain_ = normalizedValue * 0.3; - else if (number == __SK_ModWheel_) // 1 - directGain_ = normalizedValue; - else if (number == __SK_ModFrequency_) // 11 - vibrato_.setFrequency( normalizedValue * 12.0 ); - else if (number == __SK_AfterTouch_Cont_) // 128 - envelope_.setTarget( normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "ModalBar::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Modulate.cpp b/source/StkUGens/stk-4.4.4/src/Modulate.cpp deleted file mode 100644 index 191a0241e0..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Modulate.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/***************************************************/ -/*! \class Modulate - \brief STK periodic/random modulator. - - This class combines random and periodic - modulations to give a nice, natural human - modulation function. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Modulate.h" - -namespace stk { - -Modulate :: Modulate( void ) -{ - vibrato_.setFrequency( 6.0 ); - vibratoGain_ = 0.04; - - noiseRate_ = (unsigned int) ( 330.0 * Stk::sampleRate() / 22050.0 ); - noiseCounter_ = noiseRate_; - - randomGain_ = 0.05; - filter_.setPole( 0.999 ); - filter_.setGain( randomGain_ ); - - Stk::addSampleRateAlert( this ); -} - -Modulate :: ~Modulate( void ) -{ - Stk::removeSampleRateAlert( this ); -} - -void Modulate :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - if ( !ignoreSampleRateChange_ ) - noiseRate_ = (unsigned int ) ( newRate * noiseRate_ / oldRate ); -} - -void Modulate :: setRandomGain( StkFloat gain ) -{ - randomGain_ = gain; - filter_.setGain( randomGain_ ); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Moog.cpp b/source/StkUGens/stk-4.4.4/src/Moog.cpp deleted file mode 100644 index 94869e5113..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Moog.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/***************************************************/ -/*! \class Moog - \brief STK moog-like swept filter sampling synthesis class. - - This instrument uses one attack wave, one - looped wave, and an ADSR envelope (inherited - from the Sampler class) and adds two sweepable - formant (FormSwep) filters. - - Control Change Numbers: - - Filter Q = 2 - - Filter Sweep Rate = 4 - - Vibrato Frequency = 11 - - Vibrato Gain = 1 - - Gain = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Moog.h" -#include "SKINI.msg" - -namespace stk { - -Moog :: Moog( void ) -{ - // Concatenate the STK rawwave path to the rawwave file - attacks_.push_back( new FileWvIn( (Stk::rawwavePath() + "mandpluk.raw").c_str(), true ) ); - loops_.push_back ( new FileLoop( (Stk::rawwavePath() + "impuls20.raw").c_str(), true ) ); - loops_.push_back ( new FileLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), true ) ); // vibrato - loops_[1]->setFrequency( 6.122 ); - - filters_[0].setTargets( 0.0, 0.7 ); - filters_[1].setTargets( 0.0, 0.7 ); - - adsr_.setAllTimes( 0.001, 1.5, 0.6, 0.250 ); - filterQ_ = 0.85; - filterRate_ = 0.0001; - modDepth_ = 0.0; -} - -Moog :: ~Moog( void ) -{ -} - -void Moog :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Moog::setFrequency: parameter is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - baseFrequency_ = frequency; - StkFloat rate = attacks_[0]->getSize() * 0.01 * baseFrequency_ / Stk::sampleRate(); - attacks_[0]->setRate( rate ); - loops_[0]->setFrequency( baseFrequency_ ); -} - -void Moog :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - StkFloat temp; - - this->setFrequency( frequency ); - this->keyOn(); - attackGain_ = amplitude * 0.5; - loopGain_ = amplitude; - - temp = filterQ_ + 0.05; - filters_[0].setStates( 2000.0, temp ); - filters_[1].setStates( 2000.0, temp ); - - temp = filterQ_ + 0.099; - filters_[0].setTargets( frequency, temp ); - filters_[1].setTargets( frequency, temp ); - - filters_[0].setSweepRate( filterRate_ * 22050.0 / Stk::sampleRate() ); - filters_[1].setSweepRate( filterRate_ * 22050.0 / Stk::sampleRate() ); -} - -void Moog :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Moog::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_FilterQ_) // 2 - filterQ_ = 0.80 + ( 0.1 * normalizedValue ); - else if (number == __SK_FilterSweepRate_) // 4 - filterRate_ = normalizedValue * 0.0002; - else if (number == __SK_ModFrequency_) // 11 - this->setModulationSpeed( normalizedValue * 12.0 ); - else if (number == __SK_ModWheel_) // 1 - this->setModulationDepth( normalizedValue ); - else if (number == __SK_AfterTouch_Cont_) // 128 - adsr_.setTarget( normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Moog::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Mutex.cpp b/source/StkUGens/stk-4.4.4/src/Mutex.cpp deleted file mode 100644 index 6129cb6ab1..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Mutex.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/***************************************************/ -/*! \class Mutex - \brief STK mutex class. - - This class provides a uniform interface for - cross-platform mutex use. On Linux and IRIX - systems, the pthread library is used. Under - Windows, critical sections are used. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Mutex.h" - -namespace stk { - -Mutex :: Mutex() -{ - -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - pthread_mutex_init(&mutex_, NULL); - pthread_cond_init(&condition_, NULL); - -#elif defined(__OS_WINDOWS__) - - InitializeCriticalSection(&mutex_); - condition_ = CreateEvent(NULL, // no security - true, // manual-reset - false, // non-signaled initially - NULL); // unnamed - -#endif -} - -Mutex :: ~Mutex() -{ -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - pthread_mutex_destroy(&mutex_); - pthread_cond_destroy(&condition_); - -#elif defined(__OS_WINDOWS__) - - DeleteCriticalSection(&mutex_); - CloseHandle( condition_ ); - -#endif -} - -void Mutex :: lock() -{ -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - pthread_mutex_lock(&mutex_); - -#elif defined(__OS_WINDOWS__) - - EnterCriticalSection(&mutex_); - -#endif -} - -void Mutex :: unlock() -{ -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - pthread_mutex_unlock(&mutex_); - -#elif defined(__OS_WINDOWS__) - - LeaveCriticalSection(&mutex_); - -#endif -} - -void Mutex :: wait() -{ -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - pthread_cond_wait(&condition_, &mutex_); - -#elif defined(__OS_WINDOWS__) - - WaitForMultipleObjects(1, &condition_, false, INFINITE); - -#endif -} - -void Mutex :: signal() -{ -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - pthread_cond_signal(&condition_); - -#elif defined(__OS_WINDOWS__) - - SetEvent( condition_ ); - -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/NRev.cpp b/source/StkUGens/stk-4.4.4/src/NRev.cpp deleted file mode 100644 index d50263a55b..0000000000 --- a/source/StkUGens/stk-4.4.4/src/NRev.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/***************************************************/ -/*! \class NRev - \brief CCRMA's NRev reverberator class. - - This class takes a monophonic input signal and produces a stereo - output signal. It is derived from the CLM NRev function, which is - based on the use of networks of simple allpass and comb delay - filters. This particular arrangement consists of 6 comb filters - in parallel, followed by 3 allpass filters, a lowpass filter, and - another allpass in series, followed by two allpass filters in - parallel with corresponding right and left outputs. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "NRev.h" -#include - -namespace stk { - -NRev :: NRev( StkFloat T60 ) -{ - if ( T60 <= 0.0 ) { - oStream_ << "NRev::NRev: argument (" << T60 << ") must be positive!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - lastFrame_.resize( 1, 2, 0.0 ); // resize lastFrame_ for stereo output - - int lengths[15] = {1433, 1601, 1867, 2053, 2251, 2399, 347, 113, 37, 59, 53, 43, 37, 29, 19}; - double scaler = Stk::sampleRate() / 25641.0; - - int delay, i; - for ( i=0; i<15; i++ ) { - delay = (int) floor(scaler * lengths[i]); - if ( (delay & 1) == 0) delay++; - while ( !this->isPrime(delay) ) delay += 2; - lengths[i] = delay; - } - - for ( i=0; i<6; i++ ) { - combDelays_[i].setMaximumDelay( lengths[i] ); - combDelays_[i].setDelay( lengths[i] ); - combCoefficient_[i] = pow(10.0, (-3 * lengths[i] / (T60 * Stk::sampleRate()))); - } - - for ( i=0; i<8; i++ ) { - allpassDelays_[i].setMaximumDelay( lengths[i+6] ); - allpassDelays_[i].setDelay( lengths[i+6] ); - } - - this->setT60( T60 ); - allpassCoefficient_ = 0.7; - effectMix_ = 0.3; - this->clear(); -} - -void NRev :: clear() -{ - int i; - for (i=0; i<6; i++) combDelays_[i].clear(); - for (i=0; i<8; i++) allpassDelays_[i].clear(); - lastFrame_[0] = 0.0; - lastFrame_[1] = 0.0; - lowpassState_ = 0.0; -} - -void NRev :: setT60( StkFloat T60 ) -{ - if ( T60 <= 0.0 ) { - oStream_ << "NRev::setT60: argument (" << T60 << ") must be positive!"; - handleError( StkError::WARNING ); return; - } - - for ( int i=0; i<6; i++ ) - combCoefficient_[i] = pow(10.0, (-3.0 * combDelays_[i].getDelay() / (T60 * Stk::sampleRate()))); -} - -StkFrames& NRev :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() - 1 ) { - oStream_ << "NRev::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() - 1 ) { - oStream_ << "NRev::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i - -namespace stk { - -Noise :: Noise( unsigned int seed ) -{ - // Seed the random number generator - this->setSeed( seed ); -} - -void Noise :: setSeed( unsigned int seed ) -{ - if ( seed == 0 ) - srand( (unsigned int) time( NULL ) ); - else - srand( seed ); -} - -} // stk namespace - - diff --git a/source/StkUGens/stk-4.4.4/src/OnePole.cpp b/source/StkUGens/stk-4.4.4/src/OnePole.cpp deleted file mode 100644 index 151383855e..0000000000 --- a/source/StkUGens/stk-4.4.4/src/OnePole.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/***************************************************/ -/*! \class OnePole - \brief STK one-pole filter class. - - This class implements a one-pole digital filter. A method is - provided for setting the pole position along the real axis of the - z-plane while maintaining a constant peak filter gain. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "OnePole.h" - -namespace stk { - -OnePole :: OnePole( StkFloat thePole ) -{ - b_.resize( 1 ); - a_.resize( 2 ); - a_[0] = 1.0; - inputs_.resize( 1, 1, 0.0 ); - outputs_.resize( 2, 1, 0.0 ); - - this->setPole( thePole ); -} - -OnePole :: ~OnePole() -{ -} - -void OnePole :: setPole( StkFloat thePole ) -{ - if ( std::abs( thePole ) >= 1.0 ) { - oStream_ << "OnePole::setPole: argument (" << thePole << ") should be less than 1.0!"; - handleError( StkError::WARNING ); return; - } - - // Normalize coefficients for peak unity gain. - if ( thePole > 0.0 ) - b_[0] = (StkFloat) (1.0 - thePole); - else - b_[0] = (StkFloat) (1.0 + thePole); - - a_[1] = -thePole; -} - -void OnePole :: setCoefficients( StkFloat b0, StkFloat a1, bool clearState ) -{ - if ( std::abs( a1 ) >= 1.0 ) { - oStream_ << "OnePole::setCoefficients: a1 argument (" << a1 << ") should be less than 1.0!"; - handleError( StkError::WARNING ); return; - } - - b_[0] = b0; - a_[1] = a1; - - if ( clearState ) this->clear(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/OneZero.cpp b/source/StkUGens/stk-4.4.4/src/OneZero.cpp deleted file mode 100644 index 7a4bf331a1..0000000000 --- a/source/StkUGens/stk-4.4.4/src/OneZero.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/***************************************************/ -/*! \class OneZero - \brief STK one-zero filter class. - - This class implements a one-zero digital filter. A method is - provided for setting the zero position along the real axis of the - z-plane while maintaining a constant filter gain. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "OneZero.h" -#include - -namespace stk { - -OneZero :: OneZero( StkFloat theZero ) -{ - b_.resize( 2 ); - inputs_.resize( 2, 1, 0.0 ); - - this->setZero( theZero ); -} - -OneZero :: ~OneZero( void ) -{ -} - -void OneZero :: setZero( StkFloat theZero ) -{ - // Normalize coefficients for unity gain. - if ( theZero > 0.0 ) - b_[0] = 1.0 / ((StkFloat) 1.0 + theZero); - else - b_[0] = 1.0 / ((StkFloat) 1.0 - theZero); - - b_[1] = -theZero * b_[0]; -} - -void OneZero :: setCoefficients( StkFloat b0, StkFloat b1, bool clearState ) -{ - b_[0] = b0; - b_[1] = b1; - - if ( clearState ) this->clear(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/PRCRev.cpp b/source/StkUGens/stk-4.4.4/src/PRCRev.cpp deleted file mode 100644 index 096ed34560..0000000000 --- a/source/StkUGens/stk-4.4.4/src/PRCRev.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/***************************************************/ -/*! \class PRCRev - \brief Perry's simple reverberator class. - - This class is based on some of the famous - Stanford/CCRMA reverbs (NRev, KipRev), which - were based on the Chowning/Moorer/Schroeder - reverberators using networks of simple allpass - and comb delay filters. This class implements - two series allpass units and two parallel comb - filters. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "PRCRev.h" -#include - -namespace stk { - -PRCRev :: PRCRev( StkFloat T60 ) -{ - if ( T60 <= 0.0 ) { - oStream_ << "PRCRev::PRCRev: argument (" << T60 << ") must be positive!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - lastFrame_.resize( 1, 2, 0.0 ); // resize lastFrame_ for stereo output - - // Delay lengths for 44100 Hz sample rate. - int lengths[4]= {341, 613, 1557, 2137}; - double scaler = Stk::sampleRate() / 44100.0; - - // Scale the delay lengths if necessary. - int delay, i; - if ( scaler != 1.0 ) { - for (i=0; i<4; i++) { - delay = (int) floor(scaler * lengths[i]); - if ( (delay & 1) == 0) delay++; - while ( !this->isPrime(delay) ) delay += 2; - lengths[i] = delay; - } - } - - for ( i=0; i<2; i++ ) { - allpassDelays_[i].setMaximumDelay( lengths[i] ); - allpassDelays_[i].setDelay( lengths[i] ); - - combDelays_[i].setMaximumDelay( lengths[i+2] ); - combDelays_[i].setDelay( lengths[i+2] ); - } - - this->setT60( T60 ); - allpassCoefficient_ = 0.7; - effectMix_ = 0.5; - this->clear(); -} - -void PRCRev :: clear( void ) -{ - allpassDelays_[0].clear(); - allpassDelays_[1].clear(); - combDelays_[0].clear(); - combDelays_[1].clear(); - lastFrame_[0] = 0.0; - lastFrame_[1] = 0.0; -} - -void PRCRev :: setT60( StkFloat T60 ) -{ - if ( T60 <= 0.0 ) { - oStream_ << "PRCRev::setT60: argument (" << T60 << ") must be positive!"; - handleError( StkError::WARNING ); return; - } - - combCoefficient_[0] = pow(10.0, (-3.0 * combDelays_[0].getDelay() / (T60 * Stk::sampleRate()))); - combCoefficient_[1] = pow(10.0, (-3.0 * combDelays_[1].getDelay() / (T60 * Stk::sampleRate()))); -} - -StkFrames& PRCRev :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() - 1 ) { - oStream_ << "PRCRev::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() - 1 ) { - oStream_ << "PRCRev::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; i3--\ - 2-- + -->1-->Out - \endcode - - Control Change Numbers: - - Total Modulator Index = 2 - - Modulator Crossfade = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "PercFlut.h" - -namespace stk { - -PercFlut :: PercFlut( void ) - : FM() -{ - // Concatenate the STK rawwave path to the rawwave files - for ( unsigned int i=0; i<3; i++ ) - waves_[i] = new FileLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), true ); - waves_[3] = new FileLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), true ); - - this->setRatio(0, 1.50 * 1.000); - this->setRatio(1, 3.00 * 0.995); - this->setRatio(2, 2.99 * 1.005); - this->setRatio(3, 6.00 * 0.997); - gains_[0] = fmGains_[99]; - gains_[1] = fmGains_[71]; - gains_[2] = fmGains_[93]; - gains_[3] = fmGains_[85]; - - adsr_[0]->setAllTimes( 0.05, 0.05, fmSusLevels_[14], 0.05); - adsr_[1]->setAllTimes( 0.02, 0.50, fmSusLevels_[13], 0.5); - adsr_[2]->setAllTimes( 0.02, 0.30, fmSusLevels_[11], 0.05); - adsr_[3]->setAllTimes( 0.02, 0.05, fmSusLevels_[13], 0.01); - - twozero_.setGain( 0.0 ); - modDepth_ = 0.005; -} - -PercFlut :: ~PercFlut( void ) -{ -} - -void PercFlut :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "PercFlut::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - baseFrequency_ = frequency; -} - -void PercFlut :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - gains_[0] = amplitude * fmGains_[99] * 0.5; - gains_[1] = amplitude * fmGains_[71] * 0.5; - gains_[2] = amplitude * fmGains_[93] * 0.5; - gains_[3] = amplitude * fmGains_[85] * 0.5; - this->setFrequency( frequency ); - this->keyOn(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Phonemes.cpp b/source/StkUGens/stk-4.4.4/src/Phonemes.cpp deleted file mode 100644 index 9711df3725..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Phonemes.cpp +++ /dev/null @@ -1,292 +0,0 @@ -/***************************************************/ -/*! \class Phonemes - \brief STK phonemes table. - - This class does nothing other than declare a - set of 32 static phoneme formant parameters - and provide access to those values. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Phonemes.h" -#include - -namespace stk { - -const char Phonemes :: phonemeNames[32][4] = - {"eee", "ihh", "ehh", "aaa", - "ahh", "aww", "ohh", "uhh", - "uuu", "ooo", "rrr", "lll", - "mmm", "nnn", "nng", "ngg", - "fff", "sss", "thh", "shh", - "xxx", "hee", "hoo", "hah", - "bbb", "ddd", "jjj", "ggg", - "vvv", "zzz", "thz", "zhh" - }; - -const StkFloat Phonemes :: phonemeGains[32][2] = - {{1.0, 0.0}, // eee - {1.0, 0.0}, // ihh - {1.0, 0.0}, // ehh - {1.0, 0.0}, // aaa - - {1.0, 0.0}, // ahh - {1.0, 0.0}, // aww - {1.0, 0.0}, // ohh - {1.0, 0.0}, // uhh - - {1.0, 0.0}, // uuu - {1.0, 0.0}, // ooo - {1.0, 0.0}, // rrr - {1.0, 0.0}, // lll - - {1.0, 0.0}, // mmm - {1.0, 0.0}, // nnn - {1.0, 0.0}, // nng - {1.0, 0.0}, // ngg - - {0.0, 0.7}, // fff - {0.0, 0.7}, // sss - {0.0, 0.7}, // thh - {0.0, 0.7}, // shh - - {0.0, 0.7}, // xxx - {0.0, 0.1}, // hee - {0.0, 0.1}, // hoo - {0.0, 0.1}, // hah - - {1.0, 0.1}, // bbb - {1.0, 0.1}, // ddd - {1.0, 0.1}, // jjj - {1.0, 0.1}, // ggg - - {1.0, 1.0}, // vvv - {1.0, 1.0}, // zzz - {1.0, 1.0}, // thz - {1.0, 1.0} // zhh - }; - -const StkFloat Phonemes :: phonemeParameters[32][4][3] = - {{ { 273, 0.996, 10}, // eee (beet) - {2086, 0.945, -16}, - {2754, 0.979, -12}, - {3270, 0.440, -17}}, - { { 385, 0.987, 10}, // ihh (bit) - {2056, 0.930, -20}, - {2587, 0.890, -20}, - {3150, 0.400, -20}}, - { { 515, 0.977, 10}, // ehh (bet) - {1805, 0.810, -10}, - {2526, 0.875, -10}, - {3103, 0.400, -13}}, - { { 773, 0.950, 10}, // aaa (bat) - {1676, 0.830, -6}, - {2380, 0.880, -20}, - {3027, 0.600, -20}}, - - { { 770, 0.950, 0}, // ahh (father) - {1153, 0.970, -9}, - {2450, 0.780, -29}, - {3140, 0.800, -39}}, - { { 637, 0.910, 0}, // aww (bought) - { 895, 0.900, -3}, - {2556, 0.950, -17}, - {3070, 0.910, -20}}, - { { 637, 0.910, 0}, // ohh (bone) NOTE:: same as aww (bought) - { 895, 0.900, -3}, - {2556, 0.950, -17}, - {3070, 0.910, -20}}, - { { 561, 0.965, 0}, // uhh (but) - {1084, 0.930, -10}, - {2541, 0.930, -15}, - {3345, 0.900, -20}}, - - { { 515, 0.976, 0}, // uuu (foot) - {1031, 0.950, -3}, - {2572, 0.960, -11}, - {3345, 0.960, -20}}, - { { 349, 0.986, -10}, // ooo (boot) - { 918, 0.940, -20}, - {2350, 0.960, -27}, - {2731, 0.950, -33}}, - { { 394, 0.959, -10}, // rrr (bird) - {1297, 0.780, -16}, - {1441, 0.980, -16}, - {2754, 0.950, -40}}, - { { 462, 0.990, +5}, // lll (lull) - {1200, 0.640, -10}, - {2500, 0.200, -20}, - {3000, 0.100, -30}}, - - { { 265, 0.987, -10}, // mmm (mom) - {1176, 0.940, -22}, - {2352, 0.970, -20}, - {3277, 0.940, -31}}, - { { 204, 0.980, -10}, // nnn (nun) - {1570, 0.940, -15}, - {2481, 0.980, -12}, - {3133, 0.800, -30}}, - { { 204, 0.980, -10}, // nng (sang) NOTE:: same as nnn - {1570, 0.940, -15}, - {2481, 0.980, -12}, - {3133, 0.800, -30}}, - { { 204, 0.980, -10}, // ngg (bong) NOTE:: same as nnn - {1570, 0.940, -15}, - {2481, 0.980, -12}, - {3133, 0.800, -30}}, - - { {1000, 0.300, 0}, // fff - {2800, 0.860, -10}, - {7425, 0.740, 0}, - {8140, 0.860, 0}}, - { {0, 0.000, 0}, // sss - {2000, 0.700, -15}, - {5257, 0.750, -3}, - {7171, 0.840, 0}}, - { { 100, 0.900, 0}, // thh - {4000, 0.500, -20}, - {5500, 0.500, -15}, - {8000, 0.400, -20}}, - { {2693, 0.940, 0}, // shh - {4000, 0.720, -10}, - {6123, 0.870, -10}, - {7755, 0.750, -18}}, - - { {1000, 0.300, -10}, // xxx NOTE:: Not Really Done Yet - {2800, 0.860, -10}, - {7425, 0.740, 0}, - {8140, 0.860, 0}}, - { { 273, 0.996, -40}, // hee (beet) (noisy eee) - {2086, 0.945, -16}, - {2754, 0.979, -12}, - {3270, 0.440, -17}}, - { { 349, 0.986, -40}, // hoo (boot) (noisy ooo) - { 918, 0.940, -10}, - {2350, 0.960, -17}, - {2731, 0.950, -23}}, - { { 770, 0.950, -40}, // hah (father) (noisy ahh) - {1153, 0.970, -3}, - {2450, 0.780, -20}, - {3140, 0.800, -32}}, - - { {2000, 0.700, -20}, // bbb NOTE:: Not Really Done Yet - {5257, 0.750, -15}, - {7171, 0.840, -3}, - {9000, 0.900, 0}}, - { { 100, 0.900, 0}, // ddd NOTE:: Not Really Done Yet - {4000, 0.500, -20}, - {5500, 0.500, -15}, - {8000, 0.400, -20}}, - { {2693, 0.940, 0}, // jjj NOTE:: Not Really Done Yet - {4000, 0.720, -10}, - {6123, 0.870, -10}, - {7755, 0.750, -18}}, - { {2693, 0.940, 0}, // ggg NOTE:: Not Really Done Yet - {4000, 0.720, -10}, - {6123, 0.870, -10}, - {7755, 0.750, -18}}, - - { {2000, 0.700, -20}, // vvv NOTE:: Not Really Done Yet - {5257, 0.750, -15}, - {7171, 0.840, -3}, - {9000, 0.900, 0}}, - { { 100, 0.900, 0}, // zzz NOTE:: Not Really Done Yet - {4000, 0.500, -20}, - {5500, 0.500, -15}, - {8000, 0.400, -20}}, - { {2693, 0.940, 0}, // thz NOTE:: Not Really Done Yet - {4000, 0.720, -10}, - {6123, 0.870, -10}, - {7755, 0.750, -18}}, - { {2693, 0.940, 0}, // zhh NOTE:: Not Really Done Yet - {4000, 0.720, -10}, - {6123, 0.870, -10}, - {7755, 0.750, -18}} - }; - -Phonemes :: Phonemes(void) -{ -} - -Phonemes :: ~Phonemes(void) -{ -} - -const char *Phonemes :: name( unsigned int index ) -{ - if ( index > 31 ) { - oStream_ << "Phonemes::name: index is greater than 31!"; - handleError( oStream_.str(), StkError::WARNING ); - return 0; - } - return phonemeNames[index]; -} - -StkFloat Phonemes :: voiceGain( unsigned int index ) -{ - if ( index > 31 ) { - oStream_ << "Phonemes::voiceGain: index is greater than 31!"; - handleError( oStream_.str(), StkError::WARNING ); - return 0.0; - } - return phonemeGains[index][0]; -} - -StkFloat Phonemes :: noiseGain( unsigned int index ) -{ - if ( index > 31 ) { - oStream_ << "Phonemes::noiseGain: index is greater than 31!"; - handleError( oStream_.str(), StkError::WARNING ); - return 0.0; - } - return phonemeGains[index][1]; -} - -StkFloat Phonemes :: formantFrequency( unsigned int index, unsigned int partial ) -{ - if ( index > 31 ) { - oStream_ << "Phonemes::formantFrequency: index is greater than 31!"; - handleError( oStream_.str(), StkError::WARNING ); - return 0.0; - } - if ( partial > 3 ) { - oStream_ << "Phonemes::formantFrequency: partial is greater than 3!"; - handleError( oStream_.str(), StkError::WARNING ); - return 0.0; - } - return phonemeParameters[index][partial][0]; -} - -StkFloat Phonemes :: formantRadius( unsigned int index, unsigned int partial ) -{ - if ( index > 31 ) { - oStream_ << "Phonemes::formantRadius: index is greater than 31!"; - handleError( oStream_.str(), StkError::WARNING ); - return 0.0; - } - if ( partial > 3 ) { - oStream_ << "Phonemes::formantRadius: partial is greater than 3!"; - handleError( oStream_.str(), StkError::WARNING ); - return 0.0; - } - return phonemeParameters[index][partial][1]; -} - -StkFloat Phonemes :: formantGain( unsigned int index, unsigned int partial ) -{ - if ( index > 31 ) { - oStream_ << "Phonemes::formantGain: index is greater than 31!"; - handleError( oStream_.str(), StkError::WARNING ); - return 0.0; - } - if ( partial > 3 ) { - oStream_ << "Phonemes::formantGain: partial is greater than 3!"; - handleError( oStream_.str(), StkError::WARNING ); - return 0.0; - } - return phonemeParameters[index][partial][2]; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/PitShift.cpp b/source/StkUGens/stk-4.4.4/src/PitShift.cpp deleted file mode 100644 index 86cdb6d9d2..0000000000 --- a/source/StkUGens/stk-4.4.4/src/PitShift.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/***************************************************/ -/*! \class PitShift - \brief STK simple pitch shifter effect class. - - This class implements a simple pitch shifter - using delay lines. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "PitShift.h" -#include - -namespace stk { - -PitShift :: PitShift( void ) -{ - delayLength_ = maxDelay - 24; - halfLength_ = delayLength_ / 2; - delay_[0] = 12; - delay_[1] = maxDelay / 2; - - delayLine_[0].setMaximumDelay( maxDelay ); - delayLine_[0].setDelay( delay_[0] ); - delayLine_[1].setMaximumDelay( maxDelay ); - delayLine_[1].setDelay( delay_[1] ); - effectMix_ = 0.5; - rate_ = 1.0; -} - -void PitShift :: clear() -{ - delayLine_[0].clear(); - delayLine_[1].clear(); - lastFrame_[0] = 0.0; -} - -void PitShift :: setShift( StkFloat shift ) -{ - if ( shift < 1.0 ) { - rate_ = 1.0 - shift; - } - else if ( shift > 1.0 ) { - rate_ = 1.0 - shift; - } - else { - rate_ = 0.0; - delay_[0] = halfLength_ + 12; - } -} - -StkFrames& PitShift :: tick( StkFrames& frames, unsigned int channel ) -{ -#if defined(_STK_DEBUG_) - if ( channel >= frames.channels() ) { - oStream_ << "PitShift::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *samples = &frames[channel]; - unsigned int hop = frames.channels(); - for ( unsigned int i=0; i= iFrames.channels() || oChannel >= oFrames.channels() ) { - oStream_ << "PitShift::tick(): channel and StkFrames arguments are incompatible!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - StkFloat *iSamples = &iFrames[iChannel]; - StkFloat *oSamples = &oFrames[oChannel]; - unsigned int iHop = iFrames.channels(), oHop = oFrames.channels(); - for ( unsigned int i=0; isetFrequency( 220.0 ); -} - -Plucked :: ~Plucked( void ) -{ -} - -void Plucked :: clear( void ) -{ - delayLine_.clear(); - loopFilter_.clear(); - pickFilter_.clear(); -} - -void Plucked :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Plucked::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - // Delay = length - filter delay. - StkFloat delay = ( Stk::sampleRate() / frequency ) - loopFilter_.phaseDelay( frequency ); - delayLine_.setDelay( delay ); - - loopGain_ = 0.995 + (frequency * 0.000005); - if ( loopGain_ >= 1.0 ) loopGain_ = 0.99999; -} - -void Plucked :: pluck( StkFloat amplitude ) -{ - if ( amplitude < 0.0 || amplitude > 1.0 ) { - oStream_ << "Plucked::pluck: amplitude is out of range!"; - handleError( StkError::WARNING ); return; - } - - pickFilter_.setPole( 0.999 - (amplitude * 0.15) ); - pickFilter_.setGain( amplitude * 0.5 ); - for ( unsigned long i=0; isetFrequency( frequency ); - this->pluck( amplitude ); -} - -void Plucked :: noteOff( StkFloat amplitude ) -{ - if ( amplitude < 0.0 || amplitude > 1.0 ) { - oStream_ << "Plucked::noteOff: amplitude is out of range!"; - handleError( StkError::WARNING ); return; - } - - loopGain_ = 1.0 - amplitude; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/PoleZero.cpp b/source/StkUGens/stk-4.4.4/src/PoleZero.cpp deleted file mode 100644 index d85a68b9c8..0000000000 --- a/source/StkUGens/stk-4.4.4/src/PoleZero.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/***************************************************/ -/*! \class PoleZero - \brief STK one-pole, one-zero filter class. - - This class implements a one-pole, one-zero digital filter. A - method is provided for creating an allpass filter with a given - coefficient. Another method is provided to create a DC blocking - filter. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "PoleZero.h" - -namespace stk { - -PoleZero :: PoleZero() -{ - // Default setting for pass-through. - b_.resize( 2, 0.0 ); - a_.resize( 2, 0.0 ); - b_[0] = 1.0; - a_[0] = 1.0; - inputs_.resize( 2, 1, 0.0 ); - outputs_.resize( 2, 1, 0.0 ); -} - -PoleZero :: ~PoleZero() -{ -} - -void PoleZero :: setCoefficients( StkFloat b0, StkFloat b1, StkFloat a1, bool clearState ) -{ - if ( std::abs( a1 ) >= 1.0 ) { - oStream_ << "PoleZero::setCoefficients: a1 argument (" << a1 << ") should be less than 1.0!"; - handleError( StkError::WARNING ); return; - } - - b_[0] = b0; - b_[1] = b1; - a_[1] = a1; - - if ( clearState ) this->clear(); -} - -void PoleZero :: setAllpass( StkFloat coefficient ) -{ - if ( std::abs( coefficient ) >= 1.0 ) { - oStream_ << "PoleZero::setAllpass: argument (" << coefficient << ") makes filter unstable!"; - handleError( StkError::WARNING ); return; - } - - b_[0] = coefficient; - b_[1] = 1.0; - a_[0] = 1.0; // just in case - a_[1] = coefficient; -} - -void PoleZero :: setBlockZero( StkFloat thePole ) -{ - if ( std::abs( thePole ) >= 1.0 ) { - oStream_ << "PoleZero::setBlockZero: argument (" << thePole << ") makes filter unstable!"; - handleError( StkError::WARNING ); return; - } - - b_[0] = 1.0; - b_[1] = -1.0; - a_[0] = 1.0; // just in case - a_[1] = -thePole; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Resonate.cpp b/source/StkUGens/stk-4.4.4/src/Resonate.cpp deleted file mode 100644 index aae5e1978b..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Resonate.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/***************************************************/ -/*! \class Resonate - \brief STK noise driven formant filter. - - This instrument contains a noise source, which - excites a biquad resonance filter, with volume - controlled by an ADSR. - - Control Change Numbers: - - Resonance Frequency (0-Nyquist) = 2 - - Pole Radii = 4 - - Notch Frequency (0-Nyquist) = 11 - - Zero Radii = 1 - - Envelope Gain = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Resonate.h" -#include "SKINI.msg" - -namespace stk { - -Resonate :: Resonate( void ) -{ - poleFrequency_ = 4000.0; - poleRadius_ = 0.95; - // Set the filter parameters. - filter_.setResonance( poleFrequency_, poleRadius_, true ); - zeroFrequency_ = 0.0; - zeroRadius_ = 0.0; -} - -Resonate :: ~Resonate( void ) -{ -} - -void Resonate :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - adsr_.setTarget( amplitude ); - this->keyOn(); - this->setResonance( frequency, poleRadius_ ); -} - -void Resonate :: noteOff( StkFloat amplitude ) -{ - this->keyOff(); -} - -void Resonate :: setResonance( StkFloat frequency, StkFloat radius ) -{ - if ( frequency < 0.0 ) { - oStream_ << "Resonate::setResonance: frequency parameter is less than zero!"; - handleError( StkError::WARNING ); return; - } - - if ( radius < 0.0 || radius >= 1.0 ) { - std::cerr << "Resonate::setResonance: radius parameter is out of range!"; - handleError( StkError::WARNING ); return; - } - - poleFrequency_ = frequency; - poleRadius_ = radius; - filter_.setResonance( poleFrequency_, poleRadius_, true ); -} - -void Resonate :: setNotch( StkFloat frequency, StkFloat radius ) -{ - if ( frequency < 0.0 ) { - oStream_ << "Resonate::setNotch: frequency parameter is less than zero ... setting to 0.0!"; - handleError( StkError::WARNING ); return; - } - - if ( radius < 0.0 ) { - oStream_ << "Resonate::setNotch: radius parameter is less than 0.0!"; - handleError( StkError::WARNING ); return; - } - - zeroFrequency_ = frequency; - zeroRadius_ = radius; - filter_.setNotch( zeroFrequency_, zeroRadius_ ); -} - -void Resonate :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Resonate::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == 2) // 2 - setResonance( normalizedValue * Stk::sampleRate() * 0.5, poleRadius_ ); - else if (number == 4) // 4 - setResonance( poleFrequency_, normalizedValue * 0.9999 ); - else if (number == 11) // 11 - this->setNotch( normalizedValue * Stk::sampleRate() * 0.5, zeroRadius_ ); - else if (number == 1) - this->setNotch( zeroFrequency_, normalizedValue ); - else if (number == __SK_AfterTouch_Cont_) // 128 - adsr_.setTarget( normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Resonate::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Rhodey.cpp b/source/StkUGens/stk-4.4.4/src/Rhodey.cpp deleted file mode 100644 index 8edc69116e..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Rhodey.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/***************************************************/ -/*! \class Rhodey - \brief STK Fender Rhodes-like electric piano FM - synthesis instrument. - - This class implements two simple FM Pairs - summed together, also referred to as algorithm - 5 of the TX81Z. - - \code - Algorithm 5 is : 4->3--\ - + --> Out - 2->1--/ - \endcode - - Control Change Numbers: - - Modulator Index One = 2 - - Crossfade of Outputs = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Rhodey.h" - -namespace stk { - -Rhodey :: Rhodey( void ) - : FM() -{ - // Concatenate the STK rawwave path to the rawwave files - for ( unsigned int i=0; i<3; i++ ) - waves_[i] = new FileLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), true ); - waves_[3] = new FileLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), true ); - - this->setRatio(0, 1.0); - this->setRatio(1, 0.5); - this->setRatio(2, 1.0); - this->setRatio(3, 15.0); - - gains_[0] = fmGains_[99]; - gains_[1] = fmGains_[90]; - gains_[2] = fmGains_[99]; - gains_[3] = fmGains_[67]; - - adsr_[0]->setAllTimes( 0.001, 1.50, 0.0, 0.04); - adsr_[1]->setAllTimes( 0.001, 1.50, 0.0, 0.04); - adsr_[2]->setAllTimes( 0.001, 1.00, 0.0, 0.04); - adsr_[3]->setAllTimes( 0.001, 0.25, 0.0, 0.04); - - twozero_.setGain( 1.0 ); -} - -Rhodey :: ~Rhodey( void ) -{ -} - -void Rhodey :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Rhodey::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - baseFrequency_ = frequency * 2.0; - - for (unsigned int i=0; isetFrequency( baseFrequency_ * ratios_[i] ); -} - -void Rhodey :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - gains_[0] = amplitude * fmGains_[99]; - gains_[1] = amplitude * fmGains_[90]; - gains_[2] = amplitude * fmGains_[99]; - gains_[3] = amplitude * fmGains_[67]; - this->setFrequency( frequency ); - this->keyOn(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/RtAudio.cpp b/source/StkUGens/stk-4.4.4/src/RtAudio.cpp deleted file mode 100644 index 823faafc47..0000000000 --- a/source/StkUGens/stk-4.4.4/src/RtAudio.cpp +++ /dev/null @@ -1,8350 +0,0 @@ -/************************************************************************/ -/*! \class RtAudio - \brief Realtime audio i/o C++ classes. - - RtAudio provides a common API (Application Programming Interface) - for realtime audio input/output across Linux (native ALSA, Jack, - and OSS), Macintosh OS X (CoreAudio and Jack), and Windows - (DirectSound and ASIO) operating systems. - - RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/ - - RtAudio: realtime audio i/o C++ classes - Copyright (c) 2001-2012 Gary P. Scavone - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - Any person wishing to distribute modifications to the Software is - asked to send the modifications to the original developer so that - they can be incorporated into the canonical version. This is, - however, not a binding provision of this license. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/************************************************************************/ - -// RtAudio: Version 4.0.11 - -#include "RtAudio.h" -#include -#include -#include -#include - -// Static variable definitions. -const unsigned int RtApi::MAX_SAMPLE_RATES = 14; -const unsigned int RtApi::SAMPLE_RATES[] = { - 4000, 5512, 8000, 9600, 11025, 16000, 22050, - 32000, 44100, 48000, 88200, 96000, 176400, 192000 -}; - -#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) - #define MUTEX_INITIALIZE(A) InitializeCriticalSection(A) - #define MUTEX_DESTROY(A) DeleteCriticalSection(A) - #define MUTEX_LOCK(A) EnterCriticalSection(A) - #define MUTEX_UNLOCK(A) LeaveCriticalSection(A) -#elif defined(__LINUX_ALSA__) || defined(__LINUX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__) - // pthread API - #define MUTEX_INITIALIZE(A) pthread_mutex_init(A, NULL) - #define MUTEX_DESTROY(A) pthread_mutex_destroy(A) - #define MUTEX_LOCK(A) pthread_mutex_lock(A) - #define MUTEX_UNLOCK(A) pthread_mutex_unlock(A) -#else - #define MUTEX_INITIALIZE(A) abs(*A) // dummy definitions - #define MUTEX_DESTROY(A) abs(*A) // dummy definitions -#endif - -// *************************************************** // -// -// RtAudio definitions. -// -// *************************************************** // - -void RtAudio :: getCompiledApi( std::vector &apis ) throw() -{ - apis.clear(); - - // The order here will control the order of RtAudio's API search in - // the constructor. -#if defined(__UNIX_JACK__) - apis.push_back( UNIX_JACK ); -#endif -#if defined(__LINUX_ALSA__) - apis.push_back( LINUX_ALSA ); -#endif -#if defined(__LINUX_PULSE__) - apis.push_back( LINUX_PULSE ); -#endif -#if defined(__LINUX_OSS__) - apis.push_back( LINUX_OSS ); -#endif -#if defined(__WINDOWS_ASIO__) - apis.push_back( WINDOWS_ASIO ); -#endif -#if defined(__WINDOWS_DS__) - apis.push_back( WINDOWS_DS ); -#endif -#if defined(__MACOSX_CORE__) - apis.push_back( MACOSX_CORE ); -#endif -#if defined(__RTAUDIO_DUMMY__) - apis.push_back( RTAUDIO_DUMMY ); -#endif -} - -void RtAudio :: openRtApi( RtAudio::Api api ) -{ - if ( rtapi_ ) - delete rtapi_; - rtapi_ = 0; - -#if defined(__UNIX_JACK__) - if ( api == UNIX_JACK ) - rtapi_ = new RtApiJack(); -#endif -#if defined(__LINUX_ALSA__) - if ( api == LINUX_ALSA ) - rtapi_ = new RtApiAlsa(); -#endif -#if defined(__LINUX_PULSE__) - if ( api == LINUX_PULSE ) - rtapi_ = new RtApiPulse(); -#endif -#if defined(__LINUX_OSS__) - if ( api == LINUX_OSS ) - rtapi_ = new RtApiOss(); -#endif -#if defined(__WINDOWS_ASIO__) - if ( api == WINDOWS_ASIO ) - rtapi_ = new RtApiAsio(); -#endif -#if defined(__WINDOWS_DS__) - if ( api == WINDOWS_DS ) - rtapi_ = new RtApiDs(); -#endif -#if defined(__MACOSX_CORE__) - if ( api == MACOSX_CORE ) - rtapi_ = new RtApiCore(); -#endif -#if defined(__RTAUDIO_DUMMY__) - if ( api == RTAUDIO_DUMMY ) - rtapi_ = new RtApiDummy(); -#endif -} - -RtAudio :: RtAudio( RtAudio::Api api ) throw() -{ - rtapi_ = 0; - - if ( api != UNSPECIFIED ) { - // Attempt to open the specified API. - openRtApi( api ); - if ( rtapi_ ) return; - - // No compiled support for specified API value. Issue a debug - // warning and continue as if no API was specified. - std::cerr << "\nRtAudio: no compiled support for specified API argument!\n" << std::endl; - } - - // Iterate through the compiled APIs and return as soon as we find - // one with at least one device or we reach the end of the list. - std::vector< RtAudio::Api > apis; - getCompiledApi( apis ); - for ( unsigned int i=0; igetDeviceCount() ) break; - } - - if ( rtapi_ ) return; - - // It should not be possible to get here because the preprocessor - // definition __RTAUDIO_DUMMY__ is automatically defined if no - // API-specific definitions are passed to the compiler. But just in - // case something weird happens, we'll print out an error message. - std::cerr << "\nRtAudio: no compiled API support found ... critical error!!\n\n"; -} - -RtAudio :: ~RtAudio() throw() -{ - delete rtapi_; -} - -void RtAudio :: openStream( RtAudio::StreamParameters *outputParameters, - RtAudio::StreamParameters *inputParameters, - RtAudioFormat format, unsigned int sampleRate, - unsigned int *bufferFrames, - RtAudioCallback callback, void *userData, - RtAudio::StreamOptions *options ) -{ - return rtapi_->openStream( outputParameters, inputParameters, format, - sampleRate, bufferFrames, callback, - userData, options ); -} - -// *************************************************** // -// -// Public RtApi definitions (see end of file for -// private or protected utility functions). -// -// *************************************************** // - -RtApi :: RtApi() -{ - stream_.state = STREAM_CLOSED; - stream_.mode = UNINITIALIZED; - stream_.apiHandle = 0; - stream_.userBuffer[0] = 0; - stream_.userBuffer[1] = 0; - MUTEX_INITIALIZE( &stream_.mutex ); - showWarnings_ = true; -} - -RtApi :: ~RtApi() -{ - MUTEX_DESTROY( &stream_.mutex ); -} - -void RtApi :: openStream( RtAudio::StreamParameters *oParams, - RtAudio::StreamParameters *iParams, - RtAudioFormat format, unsigned int sampleRate, - unsigned int *bufferFrames, - RtAudioCallback callback, void *userData, - RtAudio::StreamOptions *options ) -{ - if ( stream_.state != STREAM_CLOSED ) { - errorText_ = "RtApi::openStream: a stream is already open!"; - error( RtError::INVALID_USE ); - } - - if ( oParams && oParams->nChannels < 1 ) { - errorText_ = "RtApi::openStream: a non-NULL output StreamParameters structure cannot have an nChannels value less than one."; - error( RtError::INVALID_USE ); - } - - if ( iParams && iParams->nChannels < 1 ) { - errorText_ = "RtApi::openStream: a non-NULL input StreamParameters structure cannot have an nChannels value less than one."; - error( RtError::INVALID_USE ); - } - - if ( oParams == NULL && iParams == NULL ) { - errorText_ = "RtApi::openStream: input and output StreamParameters structures are both NULL!"; - error( RtError::INVALID_USE ); - } - - if ( formatBytes(format) == 0 ) { - errorText_ = "RtApi::openStream: 'format' parameter value is undefined."; - error( RtError::INVALID_USE ); - } - - unsigned int nDevices = getDeviceCount(); - unsigned int oChannels = 0; - if ( oParams ) { - oChannels = oParams->nChannels; - if ( oParams->deviceId >= nDevices ) { - errorText_ = "RtApi::openStream: output device parameter value is invalid."; - error( RtError::INVALID_USE ); - } - } - - unsigned int iChannels = 0; - if ( iParams ) { - iChannels = iParams->nChannels; - if ( iParams->deviceId >= nDevices ) { - errorText_ = "RtApi::openStream: input device parameter value is invalid."; - error( RtError::INVALID_USE ); - } - } - - clearStreamInfo(); - bool result; - - if ( oChannels > 0 ) { - - result = probeDeviceOpen( oParams->deviceId, OUTPUT, oChannels, oParams->firstChannel, - sampleRate, format, bufferFrames, options ); - if ( result == false ) error( RtError::SYSTEM_ERROR ); - } - - if ( iChannels > 0 ) { - - result = probeDeviceOpen( iParams->deviceId, INPUT, iChannels, iParams->firstChannel, - sampleRate, format, bufferFrames, options ); - if ( result == false ) { - if ( oChannels > 0 ) closeStream(); - error( RtError::SYSTEM_ERROR ); - } - } - - stream_.callbackInfo.callback = (void *) callback; - stream_.callbackInfo.userData = userData; - - if ( options ) options->numberOfBuffers = stream_.nBuffers; - stream_.state = STREAM_STOPPED; -} - -unsigned int RtApi :: getDefaultInputDevice( void ) -{ - // Should be implemented in subclasses if possible. - return 0; -} - -unsigned int RtApi :: getDefaultOutputDevice( void ) -{ - // Should be implemented in subclasses if possible. - return 0; -} - -void RtApi :: closeStream( void ) -{ - // MUST be implemented in subclasses! - return; -} - -bool RtApi :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ) -{ - // MUST be implemented in subclasses! - return FAILURE; -} - -void RtApi :: tickStreamTime( void ) -{ - // Subclasses that do not provide their own implementation of - // getStreamTime should call this function once per buffer I/O to - // provide basic stream time support. - - stream_.streamTime += ( stream_.bufferSize * 1.0 / stream_.sampleRate ); - -#if defined( HAVE_GETTIMEOFDAY ) - gettimeofday( &stream_.lastTickTimestamp, NULL ); -#endif -} - -long RtApi :: getStreamLatency( void ) -{ - verifyStream(); - - long totalLatency = 0; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) - totalLatency = stream_.latency[0]; - if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) - totalLatency += stream_.latency[1]; - - return totalLatency; -} - -double RtApi :: getStreamTime( void ) -{ - verifyStream(); - -#if defined( HAVE_GETTIMEOFDAY ) - // Return a very accurate estimate of the stream time by - // adding in the elapsed time since the last tick. - struct timeval then; - struct timeval now; - - if ( stream_.state != STREAM_RUNNING || stream_.streamTime == 0.0 ) - return stream_.streamTime; - - gettimeofday( &now, NULL ); - then = stream_.lastTickTimestamp; - return stream_.streamTime + - ((now.tv_sec + 0.000001 * now.tv_usec) - - (then.tv_sec + 0.000001 * then.tv_usec)); -#else - return stream_.streamTime; -#endif -} - -unsigned int RtApi :: getStreamSampleRate( void ) -{ - verifyStream(); - - return stream_.sampleRate; -} - - -// *************************************************** // -// -// OS/API-specific methods. -// -// *************************************************** // - -#if defined(__MACOSX_CORE__) - -// The OS X CoreAudio API is designed to use a separate callback -// procedure for each of its audio devices. A single RtAudio duplex -// stream using two different devices is supported here, though it -// cannot be guaranteed to always behave correctly because we cannot -// synchronize these two callbacks. -// -// A property listener is installed for over/underrun information. -// However, no functionality is currently provided to allow property -// listeners to trigger user handlers because it is unclear what could -// be done if a critical stream parameter (buffer size, sample rate, -// device disconnect) notification arrived. The listeners entail -// quite a bit of extra code and most likely, a user program wouldn't -// be prepared for the result anyway. However, we do provide a flag -// to the client callback function to inform of an over/underrun. - -// A structure to hold various information related to the CoreAudio API -// implementation. -struct CoreHandle { - AudioDeviceID id[2]; // device ids -#if defined( MAC_OS_X_VERSION_10_5 ) && ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) - AudioDeviceIOProcID procId[2]; -#endif - UInt32 iStream[2]; // device stream index (or first if using multiple) - UInt32 nStreams[2]; // number of streams to use - bool xrun[2]; - char *deviceBuffer; - pthread_cond_t condition; - int drainCounter; // Tracks callback counts when draining - bool internalDrain; // Indicates if stop is initiated from callback or not. - - CoreHandle() - :deviceBuffer(0), drainCounter(0), internalDrain(false) { nStreams[0] = 1; nStreams[1] = 1; id[0] = 0; id[1] = 0; xrun[0] = false; xrun[1] = false; } -}; - -ThreadHandle threadId; - -RtApiCore:: RtApiCore() -{ -#if defined( AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER ) - // This is a largely undocumented but absolutely necessary - // requirement starting with OS-X 10.6. If not called, queries and - // updates to various audio device properties are not handled - // correctly. - CFRunLoopRef theRunLoop = NULL; - AudioObjectPropertyAddress property = { kAudioHardwarePropertyRunLoop, - kAudioObjectPropertyScopeGlobal, - kAudioObjectPropertyElementMaster }; - OSStatus result = AudioObjectSetPropertyData( kAudioObjectSystemObject, &property, 0, NULL, sizeof(CFRunLoopRef), &theRunLoop); - if ( result != noErr ) { - errorText_ = "RtApiCore::RtApiCore: error setting run loop property!"; - error( RtError::WARNING ); - } -#endif -} - -RtApiCore :: ~RtApiCore() -{ - // The subclass destructor gets called before the base class - // destructor, so close an existing stream before deallocating - // apiDeviceId memory. - if ( stream_.state != STREAM_CLOSED ) closeStream(); -} - -unsigned int RtApiCore :: getDeviceCount( void ) -{ - // Find out how many audio devices there are, if any. - UInt32 dataSize; - AudioObjectPropertyAddress propertyAddress = { kAudioHardwarePropertyDevices, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; - OSStatus result = AudioObjectGetPropertyDataSize( kAudioObjectSystemObject, &propertyAddress, 0, NULL, &dataSize ); - if ( result != noErr ) { - errorText_ = "RtApiCore::getDeviceCount: OS-X error getting device info!"; - error( RtError::WARNING ); - return 0; - } - - return dataSize / sizeof( AudioDeviceID ); -} - -unsigned int RtApiCore :: getDefaultInputDevice( void ) -{ - unsigned int nDevices = getDeviceCount(); - if ( nDevices <= 1 ) return 0; - - AudioDeviceID id; - UInt32 dataSize = sizeof( AudioDeviceID ); - AudioObjectPropertyAddress property = { kAudioHardwarePropertyDefaultInputDevice, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; - OSStatus result = AudioObjectGetPropertyData( kAudioObjectSystemObject, &property, 0, NULL, &dataSize, &id ); - if ( result != noErr ) { - errorText_ = "RtApiCore::getDefaultInputDevice: OS-X system error getting device."; - error( RtError::WARNING ); - return 0; - } - - dataSize *= nDevices; - AudioDeviceID deviceList[ nDevices ]; - property.mSelector = kAudioHardwarePropertyDevices; - result = AudioObjectGetPropertyData( kAudioObjectSystemObject, &property, 0, NULL, &dataSize, (void *) &deviceList ); - if ( result != noErr ) { - errorText_ = "RtApiCore::getDefaultInputDevice: OS-X system error getting device IDs."; - error( RtError::WARNING ); - return 0; - } - - for ( unsigned int i=0; i= nDevices ) { - errorText_ = "RtApiCore::getDeviceInfo: device ID is invalid!"; - error( RtError::INVALID_USE ); - } - - AudioDeviceID deviceList[ nDevices ]; - UInt32 dataSize = sizeof( AudioDeviceID ) * nDevices; - AudioObjectPropertyAddress property = { kAudioHardwarePropertyDevices, - kAudioObjectPropertyScopeGlobal, - kAudioObjectPropertyElementMaster }; - OSStatus result = AudioObjectGetPropertyData( kAudioObjectSystemObject, &property, - 0, NULL, &dataSize, (void *) &deviceList ); - if ( result != noErr ) { - errorText_ = "RtApiCore::getDeviceInfo: OS-X system error getting device IDs."; - error( RtError::WARNING ); - return info; - } - - AudioDeviceID id = deviceList[ device ]; - - // Get the device name. - info.name.erase(); - CFStringRef cfname; - dataSize = sizeof( CFStringRef ); - property.mSelector = kAudioObjectPropertyManufacturer; - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, &cfname ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceInfo: system error (" << getErrorCode( result ) << ") getting device manufacturer."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - //const char *mname = CFStringGetCStringPtr( cfname, CFStringGetSystemEncoding() ); - int length = CFStringGetLength(cfname); - char *mname = (char *)malloc(length * 3 + 1); - CFStringGetCString(cfname, mname, length * 3 + 1, CFStringGetSystemEncoding()); - info.name.append( (const char *)mname, strlen(mname) ); - info.name.append( ": " ); - CFRelease( cfname ); - free(mname); - - property.mSelector = kAudioObjectPropertyName; - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, &cfname ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceInfo: system error (" << getErrorCode( result ) << ") getting device name."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - //const char *name = CFStringGetCStringPtr( cfname, CFStringGetSystemEncoding() ); - length = CFStringGetLength(cfname); - char *name = (char *)malloc(length * 3 + 1); - CFStringGetCString(cfname, name, length * 3 + 1, CFStringGetSystemEncoding()); - info.name.append( (const char *)name, strlen(name) ); - CFRelease( cfname ); - free(name); - - // Get the output stream "configuration". - AudioBufferList *bufferList = nil; - property.mSelector = kAudioDevicePropertyStreamConfiguration; - property.mScope = kAudioDevicePropertyScopeOutput; - // property.mElement = kAudioObjectPropertyElementWildcard; - dataSize = 0; - result = AudioObjectGetPropertyDataSize( id, &property, 0, NULL, &dataSize ); - if ( result != noErr || dataSize == 0 ) { - errorStream_ << "RtApiCore::getDeviceInfo: system error (" << getErrorCode( result ) << ") getting output stream configuration info for device (" << device << ")."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // Allocate the AudioBufferList. - bufferList = (AudioBufferList *) malloc( dataSize ); - if ( bufferList == NULL ) { - errorText_ = "RtApiCore::getDeviceInfo: memory error allocating output AudioBufferList."; - error( RtError::WARNING ); - return info; - } - - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, bufferList ); - if ( result != noErr || dataSize == 0 ) { - free( bufferList ); - errorStream_ << "RtApiCore::getDeviceInfo: system error (" << getErrorCode( result ) << ") getting output stream configuration for device (" << device << ")."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // Get output channel information. - unsigned int i, nStreams = bufferList->mNumberBuffers; - for ( i=0; imBuffers[i].mNumberChannels; - free( bufferList ); - - // Get the input stream "configuration". - property.mScope = kAudioDevicePropertyScopeInput; - result = AudioObjectGetPropertyDataSize( id, &property, 0, NULL, &dataSize ); - if ( result != noErr || dataSize == 0 ) { - errorStream_ << "RtApiCore::getDeviceInfo: system error (" << getErrorCode( result ) << ") getting input stream configuration info for device (" << device << ")."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // Allocate the AudioBufferList. - bufferList = (AudioBufferList *) malloc( dataSize ); - if ( bufferList == NULL ) { - errorText_ = "RtApiCore::getDeviceInfo: memory error allocating input AudioBufferList."; - error( RtError::WARNING ); - return info; - } - - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, bufferList ); - if (result != noErr || dataSize == 0) { - free( bufferList ); - errorStream_ << "RtApiCore::getDeviceInfo: system error (" << getErrorCode( result ) << ") getting input stream configuration for device (" << device << ")."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // Get input channel information. - nStreams = bufferList->mNumberBuffers; - for ( i=0; imBuffers[i].mNumberChannels; - free( bufferList ); - - // If device opens for both playback and capture, we determine the channels. - if ( info.outputChannels > 0 && info.inputChannels > 0 ) - info.duplexChannels = (info.outputChannels > info.inputChannels) ? info.inputChannels : info.outputChannels; - - // Probe the device sample rates. - bool isInput = false; - if ( info.outputChannels == 0 ) isInput = true; - - // Determine the supported sample rates. - property.mSelector = kAudioDevicePropertyAvailableNominalSampleRates; - if ( isInput == false ) property.mScope = kAudioDevicePropertyScopeOutput; - result = AudioObjectGetPropertyDataSize( id, &property, 0, NULL, &dataSize ); - if ( result != kAudioHardwareNoError || dataSize == 0 ) { - errorStream_ << "RtApiCore::getDeviceInfo: system error (" << getErrorCode( result ) << ") getting sample rate info."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - UInt32 nRanges = dataSize / sizeof( AudioValueRange ); - AudioValueRange rangeList[ nRanges ]; - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, &rangeList ); - if ( result != kAudioHardwareNoError ) { - errorStream_ << "RtApiCore::getDeviceInfo: system error (" << getErrorCode( result ) << ") getting sample rates."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - Float64 minimumRate = 100000000.0, maximumRate = 0.0; - for ( UInt32 i=0; i maximumRate ) maximumRate = rangeList[i].mMaximum; - } - - info.sampleRates.clear(); - for ( unsigned int k=0; k= (unsigned int) minimumRate && SAMPLE_RATES[k] <= (unsigned int) maximumRate ) - info.sampleRates.push_back( SAMPLE_RATES[k] ); - } - - if ( info.sampleRates.size() == 0 ) { - errorStream_ << "RtApiCore::probeDeviceInfo: No supported sample rates found for device (" << device << ")."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // CoreAudio always uses 32-bit floating point data for PCM streams. - // Thus, any other "physical" formats supported by the device are of - // no interest to the client. - info.nativeFormats = RTAUDIO_FLOAT32; - - if ( info.outputChannels > 0 ) - if ( getDefaultOutputDevice() == device ) info.isDefaultOutput = true; - if ( info.inputChannels > 0 ) - if ( getDefaultInputDevice() == device ) info.isDefaultInput = true; - - info.probed = true; - return info; -} - -OSStatus callbackHandler( AudioDeviceID inDevice, - const AudioTimeStamp* inNow, - const AudioBufferList* inInputData, - const AudioTimeStamp* inInputTime, - AudioBufferList* outOutputData, - const AudioTimeStamp* inOutputTime, - void* infoPointer ) -{ - CallbackInfo *info = (CallbackInfo *) infoPointer; - - RtApiCore *object = (RtApiCore *) info->object; - if ( object->callbackEvent( inDevice, inInputData, outOutputData ) == false ) - return kAudioHardwareUnspecifiedError; - else - return kAudioHardwareNoError; -} - -OSStatus xrunListener( AudioObjectID inDevice, - UInt32 nAddresses, - const AudioObjectPropertyAddress properties[], - void* handlePointer ) -{ - CoreHandle *handle = (CoreHandle *) handlePointer; - for ( UInt32 i=0; ixrun[1] = true; - else - handle->xrun[0] = true; - } - } - - return kAudioHardwareNoError; -} - -OSStatus rateListener( AudioObjectID inDevice, - UInt32 nAddresses, - const AudioObjectPropertyAddress properties[], - void* ratePointer ) -{ - - Float64 *rate = (Float64 *) ratePointer; - UInt32 dataSize = sizeof( Float64 ); - AudioObjectPropertyAddress property = { kAudioDevicePropertyNominalSampleRate, - kAudioObjectPropertyScopeGlobal, - kAudioObjectPropertyElementMaster }; - AudioObjectGetPropertyData( inDevice, &property, 0, NULL, &dataSize, rate ); - return kAudioHardwareNoError; -} - -bool RtApiCore :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ) -{ - // Get device ID - unsigned int nDevices = getDeviceCount(); - if ( nDevices == 0 ) { - // This should not happen because a check is made before this function is called. - errorText_ = "RtApiCore::probeDeviceOpen: no devices found!"; - return FAILURE; - } - - if ( device >= nDevices ) { - // This should not happen because a check is made before this function is called. - errorText_ = "RtApiCore::probeDeviceOpen: device ID is invalid!"; - return FAILURE; - } - - AudioDeviceID deviceList[ nDevices ]; - UInt32 dataSize = sizeof( AudioDeviceID ) * nDevices; - AudioObjectPropertyAddress property = { kAudioHardwarePropertyDevices, - kAudioObjectPropertyScopeGlobal, - kAudioObjectPropertyElementMaster }; - OSStatus result = AudioObjectGetPropertyData( kAudioObjectSystemObject, &property, - 0, NULL, &dataSize, (void *) &deviceList ); - if ( result != noErr ) { - errorText_ = "RtApiCore::probeDeviceOpen: OS-X system error getting device IDs."; - return FAILURE; - } - - AudioDeviceID id = deviceList[ device ]; - - // Setup for stream mode. - bool isInput = false; - if ( mode == INPUT ) { - isInput = true; - property.mScope = kAudioDevicePropertyScopeInput; - } - else - property.mScope = kAudioDevicePropertyScopeOutput; - - // Get the stream "configuration". - AudioBufferList *bufferList = nil; - dataSize = 0; - property.mSelector = kAudioDevicePropertyStreamConfiguration; - result = AudioObjectGetPropertyDataSize( id, &property, 0, NULL, &dataSize ); - if ( result != noErr || dataSize == 0 ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") getting stream configuration info for device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Allocate the AudioBufferList. - bufferList = (AudioBufferList *) malloc( dataSize ); - if ( bufferList == NULL ) { - errorText_ = "RtApiCore::probeDeviceOpen: memory error allocating AudioBufferList."; - return FAILURE; - } - - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, bufferList ); - if (result != noErr || dataSize == 0) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") getting stream configuration for device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Search for one or more streams that contain the desired number of - // channels. CoreAudio devices can have an arbitrary number of - // streams and each stream can have an arbitrary number of channels. - // For each stream, a single buffer of interleaved samples is - // provided. RtAudio prefers the use of one stream of interleaved - // data or multiple consecutive single-channel streams. However, we - // now support multiple consecutive multi-channel streams of - // interleaved data as well. - UInt32 iStream, offsetCounter = firstChannel; - UInt32 nStreams = bufferList->mNumberBuffers; - bool monoMode = false; - bool foundStream = false; - - // First check that the device supports the requested number of - // channels. - UInt32 deviceChannels = 0; - for ( iStream=0; iStreammBuffers[iStream].mNumberChannels; - - if ( deviceChannels < ( channels + firstChannel ) ) { - free( bufferList ); - errorStream_ << "RtApiCore::probeDeviceOpen: the device (" << device << ") does not support the requested channel count."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Look for a single stream meeting our needs. - UInt32 firstStream, streamCount = 1, streamChannels = 0, channelOffset = 0; - for ( iStream=0; iStreammBuffers[iStream].mNumberChannels; - if ( streamChannels >= channels + offsetCounter ) { - firstStream = iStream; - channelOffset = offsetCounter; - foundStream = true; - break; - } - if ( streamChannels > offsetCounter ) break; - offsetCounter -= streamChannels; - } - - // If we didn't find a single stream above, then we should be able - // to meet the channel specification with multiple streams. - if ( foundStream == false ) { - monoMode = true; - offsetCounter = firstChannel; - for ( iStream=0; iStreammBuffers[iStream].mNumberChannels; - if ( streamChannels > offsetCounter ) break; - offsetCounter -= streamChannels; - } - - firstStream = iStream; - channelOffset = offsetCounter; - Int32 channelCounter = channels + offsetCounter - streamChannels; - - if ( streamChannels > 1 ) monoMode = false; - while ( channelCounter > 0 ) { - streamChannels = bufferList->mBuffers[++iStream].mNumberChannels; - if ( streamChannels > 1 ) monoMode = false; - channelCounter -= streamChannels; - streamCount++; - } - } - - free( bufferList ); - - // Determine the buffer size. - AudioValueRange bufferRange; - dataSize = sizeof( AudioValueRange ); - property.mSelector = kAudioDevicePropertyBufferFrameSizeRange; - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, &bufferRange ); - - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") getting buffer size range for device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - if ( bufferRange.mMinimum > *bufferSize ) *bufferSize = (unsigned long) bufferRange.mMinimum; - else if ( bufferRange.mMaximum < *bufferSize ) *bufferSize = (unsigned long) bufferRange.mMaximum; - if ( options && options->flags & RTAUDIO_MINIMIZE_LATENCY ) *bufferSize = (unsigned long) bufferRange.mMinimum; - - // Set the buffer size. For multiple streams, I'm assuming we only - // need to make this setting for the master channel. - UInt32 theSize = (UInt32) *bufferSize; - dataSize = sizeof( UInt32 ); - property.mSelector = kAudioDevicePropertyBufferFrameSize; - result = AudioObjectSetPropertyData( id, &property, 0, NULL, dataSize, &theSize ); - - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") setting the buffer size for device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // If attempting to setup a duplex stream, the bufferSize parameter - // MUST be the same in both directions! - *bufferSize = theSize; - if ( stream_.mode == OUTPUT && mode == INPUT && *bufferSize != stream_.bufferSize ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error setting buffer size for duplex stream on device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - stream_.bufferSize = *bufferSize; - stream_.nBuffers = 1; - - // Try to set "hog" mode ... it's not clear to me this is working. - if ( options && options->flags & RTAUDIO_HOG_DEVICE ) { - pid_t hog_pid; - dataSize = sizeof( hog_pid ); - property.mSelector = kAudioDevicePropertyHogMode; - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, &hog_pid ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") getting 'hog' state!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - if ( hog_pid != getpid() ) { - hog_pid = getpid(); - result = AudioObjectSetPropertyData( id, &property, 0, NULL, dataSize, &hog_pid ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") setting 'hog' state!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - } - } - - // Check and if necessary, change the sample rate for the device. - Float64 nominalRate; - dataSize = sizeof( Float64 ); - property.mSelector = kAudioDevicePropertyNominalSampleRate; - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, &nominalRate ); - - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") getting current sample rate."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Only change the sample rate if off by more than 1 Hz. - if ( fabs( nominalRate - (double)sampleRate ) > 1.0 ) { - - // Set a property listener for the sample rate change - Float64 reportedRate = 0.0; - AudioObjectPropertyAddress tmp = { kAudioDevicePropertyNominalSampleRate, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; - result = AudioObjectAddPropertyListener( id, &tmp, rateListener, (void *) &reportedRate ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") setting sample rate property listener for device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - nominalRate = (Float64) sampleRate; - result = AudioObjectSetPropertyData( id, &property, 0, NULL, dataSize, &nominalRate ); - - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") setting sample rate for device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Now wait until the reported nominal rate is what we just set. - UInt32 microCounter = 0; - while ( reportedRate != nominalRate ) { - microCounter += 5000; - if ( microCounter > 5000000 ) break; - usleep( 5000 ); - } - - // Remove the property listener. - AudioObjectRemovePropertyListener( id, &tmp, rateListener, (void *) &reportedRate ); - - if ( microCounter > 5000000 ) { - errorStream_ << "RtApiCore::probeDeviceOpen: timeout waiting for sample rate update for device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - } - - // Now set the stream format for all streams. Also, check the - // physical format of the device and change that if necessary. - AudioStreamBasicDescription description; - dataSize = sizeof( AudioStreamBasicDescription ); - property.mSelector = kAudioStreamPropertyVirtualFormat; - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, &description ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") getting stream format for device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Set the sample rate and data format id. However, only make the - // change if the sample rate is not within 1.0 of the desired - // rate and the format is not linear pcm. - bool updateFormat = false; - if ( fabs( description.mSampleRate - (Float64)sampleRate ) > 1.0 ) { - description.mSampleRate = (Float64) sampleRate; - updateFormat = true; - } - - if ( description.mFormatID != kAudioFormatLinearPCM ) { - description.mFormatID = kAudioFormatLinearPCM; - updateFormat = true; - } - - if ( updateFormat ) { - result = AudioObjectSetPropertyData( id, &property, 0, NULL, dataSize, &description ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") setting sample rate or data format for device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - } - - // Now check the physical format. - property.mSelector = kAudioStreamPropertyPhysicalFormat; - result = AudioObjectGetPropertyData( id, &property, 0, NULL, &dataSize, &description ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error (" << getErrorCode( result ) << ") getting stream physical format for device (" << device << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - //std::cout << "Current physical stream format:" << std::endl; - //std::cout << " mBitsPerChan = " << description.mBitsPerChannel << std::endl; - //std::cout << " aligned high = " << (description.mFormatFlags & kAudioFormatFlagIsAlignedHigh) << ", isPacked = " << (description.mFormatFlags & kAudioFormatFlagIsPacked) << std::endl; - //std::cout << " bytesPerFrame = " << description.mBytesPerFrame << std::endl; - //std::cout << " sample rate = " << description.mSampleRate << std::endl; - - if ( description.mFormatID != kAudioFormatLinearPCM || description.mBitsPerChannel < 16 ) { - description.mFormatID = kAudioFormatLinearPCM; - //description.mSampleRate = (Float64) sampleRate; - AudioStreamBasicDescription testDescription = description; - UInt32 formatFlags; - - // We'll try higher bit rates first and then work our way down. - std::vector< std::pair > physicalFormats; - formatFlags = (description.mFormatFlags | kLinearPCMFormatFlagIsFloat) & ~kLinearPCMFormatFlagIsSignedInteger; - physicalFormats.push_back( std::pair( 32, formatFlags ) ); - formatFlags = (description.mFormatFlags | kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked) & ~kLinearPCMFormatFlagIsFloat; - physicalFormats.push_back( std::pair( 32, formatFlags ) ); - physicalFormats.push_back( std::pair( 24, formatFlags ) ); // 24-bit packed - formatFlags &= ~( kAudioFormatFlagIsPacked | kAudioFormatFlagIsAlignedHigh ); - physicalFormats.push_back( std::pair( 24.2, formatFlags ) ); // 24-bit in 4 bytes, aligned low - formatFlags |= kAudioFormatFlagIsAlignedHigh; - physicalFormats.push_back( std::pair( 24.4, formatFlags ) ); // 24-bit in 4 bytes, aligned high - formatFlags = (description.mFormatFlags | kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked) & ~kLinearPCMFormatFlagIsFloat; - physicalFormats.push_back( std::pair( 16, formatFlags ) ); - physicalFormats.push_back( std::pair( 8, formatFlags ) ); - - bool setPhysicalFormat = false; - for( unsigned int i=0; iflags & RTAUDIO_NONINTERLEAVED ) stream_.userInterleaved = false; - else stream_.userInterleaved = true; - stream_.deviceInterleaved[mode] = true; - if ( monoMode == true ) stream_.deviceInterleaved[mode] = false; - - // Set flags for buffer conversion. - stream_.doConvertBuffer[mode] = false; - if ( stream_.userFormat != stream_.deviceFormat[mode] ) - stream_.doConvertBuffer[mode] = true; - if ( stream_.nUserChannels[mode] < stream_.nDeviceChannels[mode] ) - stream_.doConvertBuffer[mode] = true; - if ( streamCount == 1 ) { - if ( stream_.nUserChannels[mode] > 1 && - stream_.userInterleaved != stream_.deviceInterleaved[mode] ) - stream_.doConvertBuffer[mode] = true; - } - else if ( monoMode && stream_.userInterleaved ) - stream_.doConvertBuffer[mode] = true; - - // Allocate our CoreHandle structure for the stream. - CoreHandle *handle = 0; - if ( stream_.apiHandle == 0 ) { - try { - handle = new CoreHandle; - } - catch ( std::bad_alloc& ) { - errorText_ = "RtApiCore::probeDeviceOpen: error allocating CoreHandle memory."; - goto error; - } - - if ( pthread_cond_init( &handle->condition, NULL ) ) { - errorText_ = "RtApiCore::probeDeviceOpen: error initializing pthread condition variable."; - goto error; - } - stream_.apiHandle = (void *) handle; - } - else - handle = (CoreHandle *) stream_.apiHandle; - handle->iStream[mode] = firstStream; - handle->nStreams[mode] = streamCount; - handle->id[mode] = id; - - // Allocate necessary internal buffers. - unsigned long bufferBytes; - bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat ); - // stream_.userBuffer[mode] = (char *) calloc( bufferBytes, 1 ); - stream_.userBuffer[mode] = (char *) malloc( bufferBytes * sizeof(char) ); - memset( stream_.userBuffer[mode], 0, bufferBytes * sizeof(char) ); - if ( stream_.userBuffer[mode] == NULL ) { - errorText_ = "RtApiCore::probeDeviceOpen: error allocating user buffer memory."; - goto error; - } - - // If possible, we will make use of the CoreAudio stream buffers as - // "device buffers". However, we can't do this if using multiple - // streams. - if ( stream_.doConvertBuffer[mode] && handle->nStreams[mode] > 1 ) { - - bool makeBuffer = true; - bufferBytes = stream_.nDeviceChannels[mode] * formatBytes( stream_.deviceFormat[mode] ); - if ( mode == INPUT ) { - if ( stream_.mode == OUTPUT && stream_.deviceBuffer ) { - unsigned long bytesOut = stream_.nDeviceChannels[0] * formatBytes( stream_.deviceFormat[0] ); - if ( bufferBytes <= bytesOut ) makeBuffer = false; - } - } - - if ( makeBuffer ) { - bufferBytes *= *bufferSize; - if ( stream_.deviceBuffer ) free( stream_.deviceBuffer ); - stream_.deviceBuffer = (char *) calloc( bufferBytes, 1 ); - if ( stream_.deviceBuffer == NULL ) { - errorText_ = "RtApiCore::probeDeviceOpen: error allocating device buffer memory."; - goto error; - } - } - } - - stream_.sampleRate = sampleRate; - stream_.device[mode] = device; - stream_.state = STREAM_STOPPED; - stream_.callbackInfo.object = (void *) this; - - // Setup the buffer conversion information structure. - if ( stream_.doConvertBuffer[mode] ) { - if ( streamCount > 1 ) setConvertInfo( mode, 0 ); - else setConvertInfo( mode, channelOffset ); - } - - if ( mode == INPUT && stream_.mode == OUTPUT && stream_.device[0] == device ) - // Only one callback procedure per device. - stream_.mode = DUPLEX; - else { -#if defined( MAC_OS_X_VERSION_10_5 ) && ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) - result = AudioDeviceCreateIOProcID( id, callbackHandler, (void *) &stream_.callbackInfo, &handle->procId[mode] ); -#else - // deprecated in favor of AudioDeviceCreateIOProcID() - result = AudioDeviceAddIOProc( id, callbackHandler, (void *) &stream_.callbackInfo ); -#endif - if ( result != noErr ) { - errorStream_ << "RtApiCore::probeDeviceOpen: system error setting callback for device (" << device << ")."; - errorText_ = errorStream_.str(); - goto error; - } - if ( stream_.mode == OUTPUT && mode == INPUT ) - stream_.mode = DUPLEX; - else - stream_.mode = mode; - } - - // Setup the device property listener for over/underload. - property.mSelector = kAudioDeviceProcessorOverload; - result = AudioObjectAddPropertyListener( id, &property, xrunListener, (void *) handle ); - - return SUCCESS; - - error: - if ( handle ) { - pthread_cond_destroy( &handle->condition ); - delete handle; - stream_.apiHandle = 0; - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - return FAILURE; -} - -void RtApiCore :: closeStream( void ) -{ - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiCore::closeStream(): no open stream to close!"; - error( RtError::WARNING ); - return; - } - - CoreHandle *handle = (CoreHandle *) stream_.apiHandle; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - if ( stream_.state == STREAM_RUNNING ) - AudioDeviceStop( handle->id[0], callbackHandler ); -#if defined( MAC_OS_X_VERSION_10_5 ) && ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) - AudioDeviceDestroyIOProcID( handle->id[0], handle->procId[0] ); -#else - // deprecated in favor of AudioDeviceDestroyIOProcID() - AudioDeviceRemoveIOProc( handle->id[0], callbackHandler ); -#endif - } - - if ( stream_.mode == INPUT || ( stream_.mode == DUPLEX && stream_.device[0] != stream_.device[1] ) ) { - if ( stream_.state == STREAM_RUNNING ) - AudioDeviceStop( handle->id[1], callbackHandler ); -#if defined( MAC_OS_X_VERSION_10_5 ) && ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) - AudioDeviceDestroyIOProcID( handle->id[1], handle->procId[1] ); -#else - // deprecated in favor of AudioDeviceDestroyIOProcID() - AudioDeviceRemoveIOProc( handle->id[1], callbackHandler ); -#endif - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - // Destroy pthread condition variable. - pthread_cond_destroy( &handle->condition ); - delete handle; - stream_.apiHandle = 0; - - stream_.mode = UNINITIALIZED; - stream_.state = STREAM_CLOSED; -} - -void RtApiCore :: startStream( void ) -{ - verifyStream(); - if ( stream_.state == STREAM_RUNNING ) { - errorText_ = "RtApiCore::startStream(): the stream is already running!"; - error( RtError::WARNING ); - return; - } - - OSStatus result = noErr; - CoreHandle *handle = (CoreHandle *) stream_.apiHandle; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - - result = AudioDeviceStart( handle->id[0], callbackHandler ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::startStream: system error (" << getErrorCode( result ) << ") starting callback procedure on device (" << stream_.device[0] << ")."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - if ( stream_.mode == INPUT || - ( stream_.mode == DUPLEX && stream_.device[0] != stream_.device[1] ) ) { - - result = AudioDeviceStart( handle->id[1], callbackHandler ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::startStream: system error starting input callback procedure on device (" << stream_.device[1] << ")."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - handle->drainCounter = 0; - handle->internalDrain = false; - stream_.state = STREAM_RUNNING; - - unlock: - if ( result == noErr ) return; - error( RtError::SYSTEM_ERROR ); -} - -void RtApiCore :: stopStream( void ) -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiCore::stopStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - OSStatus result = noErr; - CoreHandle *handle = (CoreHandle *) stream_.apiHandle; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - - if ( handle->drainCounter == 0 ) { - handle->drainCounter = 2; - pthread_cond_wait( &handle->condition, &stream_.mutex ); // block until signaled - } - - result = AudioDeviceStop( handle->id[0], callbackHandler ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::stopStream: system error (" << getErrorCode( result ) << ") stopping callback procedure on device (" << stream_.device[0] << ")."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - if ( stream_.mode == INPUT || ( stream_.mode == DUPLEX && stream_.device[0] != stream_.device[1] ) ) { - - result = AudioDeviceStop( handle->id[1], callbackHandler ); - if ( result != noErr ) { - errorStream_ << "RtApiCore::stopStream: system error (" << getErrorCode( result ) << ") stopping input callback procedure on device (" << stream_.device[1] << ")."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - stream_.state = STREAM_STOPPED; - - unlock: - if ( result == noErr ) return; - error( RtError::SYSTEM_ERROR ); -} - -void RtApiCore :: abortStream( void ) -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiCore::abortStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - CoreHandle *handle = (CoreHandle *) stream_.apiHandle; - handle->drainCounter = 2; - - stopStream(); -} - -// This function will be called by a spawned thread when the user -// callback function signals that the stream should be stopped or -// aborted. It is better to handle it this way because the -// callbackEvent() function probably should return before the AudioDeviceStop() -// function is called. -extern "C" void *coreStopStream( void *ptr ) -{ - CallbackInfo *info = (CallbackInfo *) ptr; - RtApiCore *object = (RtApiCore *) info->object; - - object->stopStream(); - pthread_exit( NULL ); -} - -bool RtApiCore :: callbackEvent( AudioDeviceID deviceId, - const AudioBufferList *inBufferList, - const AudioBufferList *outBufferList ) -{ - if ( stream_.state == STREAM_STOPPED || stream_.state == STREAM_STOPPING ) return SUCCESS; - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiCore::callbackEvent(): the stream is closed ... this shouldn't happen!"; - error( RtError::WARNING ); - return FAILURE; - } - - CallbackInfo *info = (CallbackInfo *) &stream_.callbackInfo; - CoreHandle *handle = (CoreHandle *) stream_.apiHandle; - - // Check if we were draining the stream and signal is finished. - if ( handle->drainCounter > 3 ) { - - stream_.state = STREAM_STOPPING; - if ( handle->internalDrain == true ) - pthread_create( &threadId, NULL, coreStopStream, info ); - else // external call to stopStream() - pthread_cond_signal( &handle->condition ); - return SUCCESS; - } - - AudioDeviceID outputDevice = handle->id[0]; - - // Invoke user callback to get fresh output data UNLESS we are - // draining stream or duplex mode AND the input/output devices are - // different AND this function is called for the input device. - if ( handle->drainCounter == 0 && ( stream_.mode != DUPLEX || deviceId == outputDevice ) ) { - RtAudioCallback callback = (RtAudioCallback) info->callback; - double streamTime = getStreamTime(); - RtAudioStreamStatus status = 0; - if ( stream_.mode != INPUT && handle->xrun[0] == true ) { - status |= RTAUDIO_OUTPUT_UNDERFLOW; - handle->xrun[0] = false; - } - if ( stream_.mode != OUTPUT && handle->xrun[1] == true ) { - status |= RTAUDIO_INPUT_OVERFLOW; - handle->xrun[1] = false; - } - - int cbReturnValue = callback( stream_.userBuffer[0], stream_.userBuffer[1], - stream_.bufferSize, streamTime, status, info->userData ); - if ( cbReturnValue == 2 ) { - stream_.state = STREAM_STOPPING; - handle->drainCounter = 2; - abortStream(); - return SUCCESS; - } - else if ( cbReturnValue == 1 ) { - handle->drainCounter = 1; - handle->internalDrain = true; - } - } - - if ( stream_.mode == OUTPUT || ( stream_.mode == DUPLEX && deviceId == outputDevice ) ) { - - if ( handle->drainCounter > 1 ) { // write zeros to the output stream - - if ( handle->nStreams[0] == 1 ) { - memset( outBufferList->mBuffers[handle->iStream[0]].mData, - 0, - outBufferList->mBuffers[handle->iStream[0]].mDataByteSize ); - } - else { // fill multiple streams with zeros - for ( unsigned int i=0; inStreams[0]; i++ ) { - memset( outBufferList->mBuffers[handle->iStream[0]+i].mData, - 0, - outBufferList->mBuffers[handle->iStream[0]+i].mDataByteSize ); - } - } - } - else if ( handle->nStreams[0] == 1 ) { - if ( stream_.doConvertBuffer[0] ) { // convert directly to CoreAudio stream buffer - convertBuffer( (char *) outBufferList->mBuffers[handle->iStream[0]].mData, - stream_.userBuffer[0], stream_.convertInfo[0] ); - } - else { // copy from user buffer - memcpy( outBufferList->mBuffers[handle->iStream[0]].mData, - stream_.userBuffer[0], - outBufferList->mBuffers[handle->iStream[0]].mDataByteSize ); - } - } - else { // fill multiple streams - Float32 *inBuffer = (Float32 *) stream_.userBuffer[0]; - if ( stream_.doConvertBuffer[0] ) { - convertBuffer( stream_.deviceBuffer, stream_.userBuffer[0], stream_.convertInfo[0] ); - inBuffer = (Float32 *) stream_.deviceBuffer; - } - - if ( stream_.deviceInterleaved[0] == false ) { // mono mode - UInt32 bufferBytes = outBufferList->mBuffers[handle->iStream[0]].mDataByteSize; - for ( unsigned int i=0; imBuffers[handle->iStream[0]+i].mData, - (void *)&inBuffer[i*stream_.bufferSize], bufferBytes ); - } - } - else { // fill multiple multi-channel streams with interleaved data - UInt32 streamChannels, channelsLeft, inJump, outJump, inOffset; - Float32 *out, *in; - - bool inInterleaved = ( stream_.userInterleaved ) ? true : false; - UInt32 inChannels = stream_.nUserChannels[0]; - if ( stream_.doConvertBuffer[0] ) { - inInterleaved = true; // device buffer will always be interleaved for nStreams > 1 and not mono mode - inChannels = stream_.nDeviceChannels[0]; - } - - if ( inInterleaved ) inOffset = 1; - else inOffset = stream_.bufferSize; - - channelsLeft = inChannels; - for ( unsigned int i=0; inStreams[0]; i++ ) { - in = inBuffer; - out = (Float32 *) outBufferList->mBuffers[handle->iStream[0]+i].mData; - streamChannels = outBufferList->mBuffers[handle->iStream[0]+i].mNumberChannels; - - outJump = 0; - // Account for possible channel offset in first stream - if ( i == 0 && stream_.channelOffset[0] > 0 ) { - streamChannels -= stream_.channelOffset[0]; - outJump = stream_.channelOffset[0]; - out += outJump; - } - - // Account for possible unfilled channels at end of the last stream - if ( streamChannels > channelsLeft ) { - outJump = streamChannels - channelsLeft; - streamChannels = channelsLeft; - } - - // Determine input buffer offsets and skips - if ( inInterleaved ) { - inJump = inChannels; - in += inChannels - channelsLeft; - } - else { - inJump = 1; - in += (inChannels - channelsLeft) * inOffset; - } - - for ( unsigned int i=0; idrainCounter ) { - handle->drainCounter++; - goto unlock; - } - } - - AudioDeviceID inputDevice; - inputDevice = handle->id[1]; - if ( stream_.mode == INPUT || ( stream_.mode == DUPLEX && deviceId == inputDevice ) ) { - - if ( handle->nStreams[1] == 1 ) { - if ( stream_.doConvertBuffer[1] ) { // convert directly from CoreAudio stream buffer - convertBuffer( stream_.userBuffer[1], - (char *) inBufferList->mBuffers[handle->iStream[1]].mData, - stream_.convertInfo[1] ); - } - else { // copy to user buffer - memcpy( stream_.userBuffer[1], - inBufferList->mBuffers[handle->iStream[1]].mData, - inBufferList->mBuffers[handle->iStream[1]].mDataByteSize ); - } - } - else { // read from multiple streams - Float32 *outBuffer = (Float32 *) stream_.userBuffer[1]; - if ( stream_.doConvertBuffer[1] ) outBuffer = (Float32 *) stream_.deviceBuffer; - - if ( stream_.deviceInterleaved[1] == false ) { // mono mode - UInt32 bufferBytes = inBufferList->mBuffers[handle->iStream[1]].mDataByteSize; - for ( unsigned int i=0; imBuffers[handle->iStream[1]+i].mData, bufferBytes ); - } - } - else { // read from multiple multi-channel streams - UInt32 streamChannels, channelsLeft, inJump, outJump, outOffset; - Float32 *out, *in; - - bool outInterleaved = ( stream_.userInterleaved ) ? true : false; - UInt32 outChannels = stream_.nUserChannels[1]; - if ( stream_.doConvertBuffer[1] ) { - outInterleaved = true; // device buffer will always be interleaved for nStreams > 1 and not mono mode - outChannels = stream_.nDeviceChannels[1]; - } - - if ( outInterleaved ) outOffset = 1; - else outOffset = stream_.bufferSize; - - channelsLeft = outChannels; - for ( unsigned int i=0; inStreams[1]; i++ ) { - out = outBuffer; - in = (Float32 *) inBufferList->mBuffers[handle->iStream[1]+i].mData; - streamChannels = inBufferList->mBuffers[handle->iStream[1]+i].mNumberChannels; - - inJump = 0; - // Account for possible channel offset in first stream - if ( i == 0 && stream_.channelOffset[1] > 0 ) { - streamChannels -= stream_.channelOffset[1]; - inJump = stream_.channelOffset[1]; - in += inJump; - } - - // Account for possible unread channels at end of the last stream - if ( streamChannels > channelsLeft ) { - inJump = streamChannels - channelsLeft; - streamChannels = channelsLeft; - } - - // Determine output buffer offsets and skips - if ( outInterleaved ) { - outJump = outChannels; - out += outChannels - channelsLeft; - } - else { - outJump = 1; - out += (outChannels - channelsLeft) * outOffset; - } - - for ( unsigned int i=0; i -#include -#include - -// A structure to hold various information related to the Jack API -// implementation. -struct JackHandle { - jack_client_t *client; - jack_port_t **ports[2]; - std::string deviceName[2]; - bool xrun[2]; - pthread_cond_t condition; - int drainCounter; // Tracks callback counts when draining - bool internalDrain; // Indicates if stop is initiated from callback or not. - - JackHandle() - :client(0), drainCounter(0), internalDrain(false) { ports[0] = 0; ports[1] = 0; xrun[0] = false; xrun[1] = false; } -}; - -ThreadHandle threadId; -void jackSilentError( const char * ) {}; - -RtApiJack :: RtApiJack() -{ - // Nothing to do here. -#if !defined(__RTAUDIO_DEBUG__) - // Turn off Jack's internal error reporting. - jack_set_error_function( &jackSilentError ); -#endif -} - -RtApiJack :: ~RtApiJack() -{ - if ( stream_.state != STREAM_CLOSED ) closeStream(); -} - -unsigned int RtApiJack :: getDeviceCount( void ) -{ - // See if we can become a jack client. - jack_options_t options = (jack_options_t) ( JackNoStartServer ); //JackNullOption; - jack_status_t *status = NULL; - jack_client_t *client = jack_client_open( "RtApiJackCount", options, status ); - if ( client == 0 ) return 0; - - const char **ports; - std::string port, previousPort; - unsigned int nChannels = 0, nDevices = 0; - ports = jack_get_ports( client, NULL, NULL, 0 ); - if ( ports ) { - // Parse the port names up to the first colon (:). - size_t iColon = 0; - do { - port = (char *) ports[ nChannels ]; - iColon = port.find(":"); - if ( iColon != std::string::npos ) { - port = port.substr( 0, iColon + 1 ); - if ( port != previousPort ) { - nDevices++; - previousPort = port; - } - } - } while ( ports[++nChannels] ); - free( ports ); - } - - jack_client_close( client ); - return nDevices; -} - -RtAudio::DeviceInfo RtApiJack :: getDeviceInfo( unsigned int device ) -{ - RtAudio::DeviceInfo info; - info.probed = false; - - jack_options_t options = (jack_options_t) ( JackNoStartServer ); //JackNullOption - jack_status_t *status = NULL; - jack_client_t *client = jack_client_open( "RtApiJackInfo", options, status ); - if ( client == 0 ) { - errorText_ = "RtApiJack::getDeviceInfo: Jack server not found or connection error!"; - error( RtError::WARNING ); - return info; - } - - const char **ports; - std::string port, previousPort; - unsigned int nPorts = 0, nDevices = 0; - ports = jack_get_ports( client, NULL, NULL, 0 ); - if ( ports ) { - // Parse the port names up to the first colon (:). - size_t iColon = 0; - do { - port = (char *) ports[ nPorts ]; - iColon = port.find(":"); - if ( iColon != std::string::npos ) { - port = port.substr( 0, iColon ); - if ( port != previousPort ) { - if ( nDevices == device ) info.name = port; - nDevices++; - previousPort = port; - } - } - } while ( ports[++nPorts] ); - free( ports ); - } - - if ( device >= nDevices ) { - jack_client_close( client ); - errorText_ = "RtApiJack::getDeviceInfo: device ID is invalid!"; - error( RtError::INVALID_USE ); - } - - // Get the current jack server sample rate. - info.sampleRates.clear(); - info.sampleRates.push_back( jack_get_sample_rate( client ) ); - - // Count the available ports containing the client name as device - // channels. Jack "input ports" equal RtAudio output channels. - unsigned int nChannels = 0; - ports = jack_get_ports( client, info.name.c_str(), NULL, JackPortIsInput ); - if ( ports ) { - while ( ports[ nChannels ] ) nChannels++; - free( ports ); - info.outputChannels = nChannels; - } - - // Jack "output ports" equal RtAudio input channels. - nChannels = 0; - ports = jack_get_ports( client, info.name.c_str(), NULL, JackPortIsOutput ); - if ( ports ) { - while ( ports[ nChannels ] ) nChannels++; - free( ports ); - info.inputChannels = nChannels; - } - - if ( info.outputChannels == 0 && info.inputChannels == 0 ) { - jack_client_close(client); - errorText_ = "RtApiJack::getDeviceInfo: error determining Jack input/output channels!"; - error( RtError::WARNING ); - return info; - } - - // If device opens for both playback and capture, we determine the channels. - if ( info.outputChannels > 0 && info.inputChannels > 0 ) - info.duplexChannels = (info.outputChannels > info.inputChannels) ? info.inputChannels : info.outputChannels; - - // Jack always uses 32-bit floats. - info.nativeFormats = RTAUDIO_FLOAT32; - - // Jack doesn't provide default devices so we'll use the first available one. - if ( device == 0 && info.outputChannels > 0 ) - info.isDefaultOutput = true; - if ( device == 0 && info.inputChannels > 0 ) - info.isDefaultInput = true; - - jack_client_close(client); - info.probed = true; - return info; -} - -int jackCallbackHandler( jack_nframes_t nframes, void *infoPointer ) -{ - CallbackInfo *info = (CallbackInfo *) infoPointer; - - RtApiJack *object = (RtApiJack *) info->object; - if ( object->callbackEvent( (unsigned long) nframes ) == false ) return 1; - - return 0; -} - -// This function will be called by a spawned thread when the Jack -// server signals that it is shutting down. It is necessary to handle -// it this way because the jackShutdown() function must return before -// the jack_deactivate() function (in closeStream()) will return. -extern "C" void *jackCloseStream( void *ptr ) -{ - CallbackInfo *info = (CallbackInfo *) ptr; - RtApiJack *object = (RtApiJack *) info->object; - - object->closeStream(); - - pthread_exit( NULL ); -} -void jackShutdown( void *infoPointer ) -{ - CallbackInfo *info = (CallbackInfo *) infoPointer; - RtApiJack *object = (RtApiJack *) info->object; - - // Check current stream state. If stopped, then we'll assume this - // was called as a result of a call to RtApiJack::stopStream (the - // deactivation of a client handle causes this function to be called). - // If not, we'll assume the Jack server is shutting down or some - // other problem occurred and we should close the stream. - if ( object->isStreamRunning() == false ) return; - - pthread_create( &threadId, NULL, jackCloseStream, info ); - std::cerr << "\nRtApiJack: the Jack server is shutting down this client ... stream stopped and closed!!\n" << std::endl; -} - -int jackXrun( void *infoPointer ) -{ - JackHandle *handle = (JackHandle *) infoPointer; - - if ( handle->ports[0] ) handle->xrun[0] = true; - if ( handle->ports[1] ) handle->xrun[1] = true; - - return 0; -} - -bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ) -{ - JackHandle *handle = (JackHandle *) stream_.apiHandle; - - // Look for jack server and try to become a client (only do once per stream). - jack_client_t *client = 0; - if ( mode == OUTPUT || ( mode == INPUT && stream_.mode != OUTPUT ) ) { - jack_options_t jackoptions = (jack_options_t) ( JackNoStartServer ); //JackNullOption; - jack_status_t *status = NULL; - if ( options && !options->streamName.empty() ) - client = jack_client_open( options->streamName.c_str(), jackoptions, status ); - else - client = jack_client_open( "RtApiJack", jackoptions, status ); - if ( client == 0 ) { - errorText_ = "RtApiJack::probeDeviceOpen: Jack server not found or connection error!"; - error( RtError::WARNING ); - return FAILURE; - } - } - else { - // The handle must have been created on an earlier pass. - client = handle->client; - } - - const char **ports; - std::string port, previousPort, deviceName; - unsigned int nPorts = 0, nDevices = 0; - ports = jack_get_ports( client, NULL, NULL, 0 ); - if ( ports ) { - // Parse the port names up to the first colon (:). - size_t iColon = 0; - do { - port = (char *) ports[ nPorts ]; - iColon = port.find(":"); - if ( iColon != std::string::npos ) { - port = port.substr( 0, iColon ); - if ( port != previousPort ) { - if ( nDevices == device ) deviceName = port; - nDevices++; - previousPort = port; - } - } - } while ( ports[++nPorts] ); - free( ports ); - } - - if ( device >= nDevices ) { - errorText_ = "RtApiJack::probeDeviceOpen: device ID is invalid!"; - return FAILURE; - } - - // Count the available ports containing the client name as device - // channels. Jack "input ports" equal RtAudio output channels. - unsigned int nChannels = 0; - unsigned long flag = JackPortIsInput; - if ( mode == INPUT ) flag = JackPortIsOutput; - ports = jack_get_ports( client, deviceName.c_str(), NULL, flag ); - if ( ports ) { - while ( ports[ nChannels ] ) nChannels++; - free( ports ); - } - - // Compare the jack ports for specified client to the requested number of channels. - if ( nChannels < (channels + firstChannel) ) { - errorStream_ << "RtApiJack::probeDeviceOpen: requested number of channels (" << channels << ") + offset (" << firstChannel << ") not found for specified device (" << device << ":" << deviceName << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Check the jack server sample rate. - unsigned int jackRate = jack_get_sample_rate( client ); - if ( sampleRate != jackRate ) { - jack_client_close( client ); - errorStream_ << "RtApiJack::probeDeviceOpen: the requested sample rate (" << sampleRate << ") is different than the JACK server rate (" << jackRate << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - stream_.sampleRate = jackRate; - - // Get the latency of the JACK port. - ports = jack_get_ports( client, deviceName.c_str(), NULL, flag ); - if ( ports[ firstChannel ] ) - stream_.latency[mode] = jack_port_get_latency( jack_port_by_name( client, ports[ firstChannel ] ) ); - free( ports ); - - // The jack server always uses 32-bit floating-point data. - stream_.deviceFormat[mode] = RTAUDIO_FLOAT32; - stream_.userFormat = format; - - if ( options && options->flags & RTAUDIO_NONINTERLEAVED ) stream_.userInterleaved = false; - else stream_.userInterleaved = true; - - // Jack always uses non-interleaved buffers. - stream_.deviceInterleaved[mode] = false; - - // Jack always provides host byte-ordered data. - stream_.doByteSwap[mode] = false; - - // Get the buffer size. The buffer size and number of buffers - // (periods) is set when the jack server is started. - stream_.bufferSize = (int) jack_get_buffer_size( client ); - *bufferSize = stream_.bufferSize; - - stream_.nDeviceChannels[mode] = channels; - stream_.nUserChannels[mode] = channels; - - // Set flags for buffer conversion. - stream_.doConvertBuffer[mode] = false; - if ( stream_.userFormat != stream_.deviceFormat[mode] ) - stream_.doConvertBuffer[mode] = true; - if ( stream_.userInterleaved != stream_.deviceInterleaved[mode] && - stream_.nUserChannels[mode] > 1 ) - stream_.doConvertBuffer[mode] = true; - - // Allocate our JackHandle structure for the stream. - if ( handle == 0 ) { - try { - handle = new JackHandle; - } - catch ( std::bad_alloc& ) { - errorText_ = "RtApiJack::probeDeviceOpen: error allocating JackHandle memory."; - goto error; - } - - if ( pthread_cond_init(&handle->condition, NULL) ) { - errorText_ = "RtApiJack::probeDeviceOpen: error initializing pthread condition variable."; - goto error; - } - stream_.apiHandle = (void *) handle; - handle->client = client; - } - handle->deviceName[mode] = deviceName; - - // Allocate necessary internal buffers. - unsigned long bufferBytes; - bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat ); - stream_.userBuffer[mode] = (char *) calloc( bufferBytes, 1 ); - if ( stream_.userBuffer[mode] == NULL ) { - errorText_ = "RtApiJack::probeDeviceOpen: error allocating user buffer memory."; - goto error; - } - - if ( stream_.doConvertBuffer[mode] ) { - - bool makeBuffer = true; - if ( mode == OUTPUT ) - bufferBytes = stream_.nDeviceChannels[0] * formatBytes( stream_.deviceFormat[0] ); - else { // mode == INPUT - bufferBytes = stream_.nDeviceChannels[1] * formatBytes( stream_.deviceFormat[1] ); - if ( stream_.mode == OUTPUT && stream_.deviceBuffer ) { - unsigned long bytesOut = stream_.nDeviceChannels[0] * formatBytes(stream_.deviceFormat[0]); - if ( bufferBytes < bytesOut ) makeBuffer = false; - } - } - - if ( makeBuffer ) { - bufferBytes *= *bufferSize; - if ( stream_.deviceBuffer ) free( stream_.deviceBuffer ); - stream_.deviceBuffer = (char *) calloc( bufferBytes, 1 ); - if ( stream_.deviceBuffer == NULL ) { - errorText_ = "RtApiJack::probeDeviceOpen: error allocating device buffer memory."; - goto error; - } - } - } - - // Allocate memory for the Jack ports (channels) identifiers. - handle->ports[mode] = (jack_port_t **) malloc ( sizeof (jack_port_t *) * channels ); - if ( handle->ports[mode] == NULL ) { - errorText_ = "RtApiJack::probeDeviceOpen: error allocating port memory."; - goto error; - } - - stream_.device[mode] = device; - stream_.channelOffset[mode] = firstChannel; - stream_.state = STREAM_STOPPED; - stream_.callbackInfo.object = (void *) this; - - if ( stream_.mode == OUTPUT && mode == INPUT ) - // We had already set up the stream for output. - stream_.mode = DUPLEX; - else { - stream_.mode = mode; - jack_set_process_callback( handle->client, jackCallbackHandler, (void *) &stream_.callbackInfo ); - jack_set_xrun_callback( handle->client, jackXrun, (void *) &handle ); - jack_on_shutdown( handle->client, jackShutdown, (void *) &stream_.callbackInfo ); - } - - // Register our ports. - char label[64]; - if ( mode == OUTPUT ) { - for ( unsigned int i=0; iports[0][i] = jack_port_register( handle->client, (const char *)label, - JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); - } - } - else { - for ( unsigned int i=0; iports[1][i] = jack_port_register( handle->client, (const char *)label, - JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0 ); - } - } - - // Setup the buffer conversion information structure. We don't use - // buffers to do channel offsets, so we override that parameter - // here. - if ( stream_.doConvertBuffer[mode] ) setConvertInfo( mode, 0 ); - - return SUCCESS; - - error: - if ( handle ) { - pthread_cond_destroy( &handle->condition ); - jack_client_close( handle->client ); - - if ( handle->ports[0] ) free( handle->ports[0] ); - if ( handle->ports[1] ) free( handle->ports[1] ); - - delete handle; - stream_.apiHandle = 0; - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - return FAILURE; -} - -void RtApiJack :: closeStream( void ) -{ - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiJack::closeStream(): no open stream to close!"; - error( RtError::WARNING ); - return; - } - - JackHandle *handle = (JackHandle *) stream_.apiHandle; - if ( handle ) { - - if ( stream_.state == STREAM_RUNNING ) - jack_deactivate( handle->client ); - - jack_client_close( handle->client ); - } - - if ( handle ) { - if ( handle->ports[0] ) free( handle->ports[0] ); - if ( handle->ports[1] ) free( handle->ports[1] ); - pthread_cond_destroy( &handle->condition ); - delete handle; - stream_.apiHandle = 0; - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - stream_.mode = UNINITIALIZED; - stream_.state = STREAM_CLOSED; -} - -void RtApiJack :: startStream( void ) -{ - verifyStream(); - if ( stream_.state == STREAM_RUNNING ) { - errorText_ = "RtApiJack::startStream(): the stream is already running!"; - error( RtError::WARNING ); - return; - } - - JackHandle *handle = (JackHandle *) stream_.apiHandle; - int result = jack_activate( handle->client ); - if ( result ) { - errorText_ = "RtApiJack::startStream(): unable to activate JACK client!"; - goto unlock; - } - - const char **ports; - - // Get the list of available ports. - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - result = 1; - ports = jack_get_ports( handle->client, handle->deviceName[0].c_str(), NULL, JackPortIsInput); - if ( ports == NULL) { - errorText_ = "RtApiJack::startStream(): error determining available JACK input ports!"; - goto unlock; - } - - // Now make the port connections. Since RtAudio wasn't designed to - // allow the user to select particular channels of a device, we'll - // just open the first "nChannels" ports with offset. - for ( unsigned int i=0; iclient, jack_port_name( handle->ports[0][i] ), ports[ stream_.channelOffset[0] + i ] ); - if ( result ) { - free( ports ); - errorText_ = "RtApiJack::startStream(): error connecting output ports!"; - goto unlock; - } - } - free(ports); - } - - if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) { - result = 1; - ports = jack_get_ports( handle->client, handle->deviceName[1].c_str(), NULL, JackPortIsOutput ); - if ( ports == NULL) { - errorText_ = "RtApiJack::startStream(): error determining available JACK output ports!"; - goto unlock; - } - - // Now make the port connections. See note above. - for ( unsigned int i=0; iclient, ports[ stream_.channelOffset[1] + i ], jack_port_name( handle->ports[1][i] ) ); - if ( result ) { - free( ports ); - errorText_ = "RtApiJack::startStream(): error connecting input ports!"; - goto unlock; - } - } - free(ports); - } - - handle->drainCounter = 0; - handle->internalDrain = false; - stream_.state = STREAM_RUNNING; - - unlock: - if ( result == 0 ) return; - error( RtError::SYSTEM_ERROR ); -} - -void RtApiJack :: stopStream( void ) -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiJack::stopStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - JackHandle *handle = (JackHandle *) stream_.apiHandle; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - - if ( handle->drainCounter == 0 ) { - handle->drainCounter = 2; - pthread_cond_wait( &handle->condition, &stream_.mutex ); // block until signaled - } - } - - jack_deactivate( handle->client ); - stream_.state = STREAM_STOPPED; -} - -void RtApiJack :: abortStream( void ) -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiJack::abortStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - JackHandle *handle = (JackHandle *) stream_.apiHandle; - handle->drainCounter = 2; - - stopStream(); -} - -// This function will be called by a spawned thread when the user -// callback function signals that the stream should be stopped or -// aborted. It is necessary to handle it this way because the -// callbackEvent() function must return before the jack_deactivate() -// function will return. -extern "C" void *jackStopStream( void *ptr ) -{ - CallbackInfo *info = (CallbackInfo *) ptr; - RtApiJack *object = (RtApiJack *) info->object; - - object->stopStream(); - pthread_exit( NULL ); -} - -bool RtApiJack :: callbackEvent( unsigned long nframes ) -{ - if ( stream_.state == STREAM_STOPPED || stream_.state == STREAM_STOPPING ) return SUCCESS; - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiCore::callbackEvent(): the stream is closed ... this shouldn't happen!"; - error( RtError::WARNING ); - return FAILURE; - } - if ( stream_.bufferSize != nframes ) { - errorText_ = "RtApiCore::callbackEvent(): the JACK buffer size has changed ... cannot process!"; - error( RtError::WARNING ); - return FAILURE; - } - - CallbackInfo *info = (CallbackInfo *) &stream_.callbackInfo; - JackHandle *handle = (JackHandle *) stream_.apiHandle; - - // Check if we were draining the stream and signal is finished. - if ( handle->drainCounter > 3 ) { - - stream_.state = STREAM_STOPPING; - if ( handle->internalDrain == true ) - pthread_create( &threadId, NULL, jackStopStream, info ); - else - pthread_cond_signal( &handle->condition ); - return SUCCESS; - } - - // Invoke user callback first, to get fresh output data. - if ( handle->drainCounter == 0 ) { - RtAudioCallback callback = (RtAudioCallback) info->callback; - double streamTime = getStreamTime(); - RtAudioStreamStatus status = 0; - if ( stream_.mode != INPUT && handle->xrun[0] == true ) { - status |= RTAUDIO_OUTPUT_UNDERFLOW; - handle->xrun[0] = false; - } - if ( stream_.mode != OUTPUT && handle->xrun[1] == true ) { - status |= RTAUDIO_INPUT_OVERFLOW; - handle->xrun[1] = false; - } - int cbReturnValue = callback( stream_.userBuffer[0], stream_.userBuffer[1], - stream_.bufferSize, streamTime, status, info->userData ); - if ( cbReturnValue == 2 ) { - stream_.state = STREAM_STOPPING; - handle->drainCounter = 2; - ThreadHandle id; - pthread_create( &id, NULL, jackStopStream, info ); - return SUCCESS; - } - else if ( cbReturnValue == 1 ) { - handle->drainCounter = 1; - handle->internalDrain = true; - } - } - - jack_default_audio_sample_t *jackbuffer; - unsigned long bufferBytes = nframes * sizeof( jack_default_audio_sample_t ); - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - - if ( handle->drainCounter > 1 ) { // write zeros to the output stream - - for ( unsigned int i=0; iports[0][i], (jack_nframes_t) nframes ); - memset( jackbuffer, 0, bufferBytes ); - } - - } - else if ( stream_.doConvertBuffer[0] ) { - - convertBuffer( stream_.deviceBuffer, stream_.userBuffer[0], stream_.convertInfo[0] ); - - for ( unsigned int i=0; iports[0][i], (jack_nframes_t) nframes ); - memcpy( jackbuffer, &stream_.deviceBuffer[i*bufferBytes], bufferBytes ); - } - } - else { // no buffer conversion - for ( unsigned int i=0; iports[0][i], (jack_nframes_t) nframes ); - memcpy( jackbuffer, &stream_.userBuffer[0][i*bufferBytes], bufferBytes ); - } - } - - if ( handle->drainCounter ) { - handle->drainCounter++; - goto unlock; - } - } - - if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) { - - if ( stream_.doConvertBuffer[1] ) { - for ( unsigned int i=0; iports[1][i], (jack_nframes_t) nframes ); - memcpy( &stream_.deviceBuffer[i*bufferBytes], jackbuffer, bufferBytes ); - } - convertBuffer( stream_.userBuffer[1], stream_.deviceBuffer, stream_.convertInfo[1] ); - } - else { // no buffer conversion - for ( unsigned int i=0; iports[1][i], (jack_nframes_t) nframes ); - memcpy( &stream_.userBuffer[1][i*bufferBytes], jackbuffer, bufferBytes ); - } - } - } - - unlock: - RtApi::tickStreamTime(); - return SUCCESS; -} - //******************** End of __UNIX_JACK__ *********************// -#endif - -#if defined(__WINDOWS_ASIO__) // ASIO API on Windows - -// The ASIO API is designed around a callback scheme, so this -// implementation is similar to that used for OS-X CoreAudio and Linux -// Jack. The primary constraint with ASIO is that it only allows -// access to a single driver at a time. Thus, it is not possible to -// have more than one simultaneous RtAudio stream. -// -// This implementation also requires a number of external ASIO files -// and a few global variables. The ASIO callback scheme does not -// allow for the passing of user data, so we must create a global -// pointer to our callbackInfo structure. -// -// On unix systems, we make use of a pthread condition variable. -// Since there is no equivalent in Windows, I hacked something based -// on information found in -// http://www.cs.wustl.edu/~schmidt/win32-cv-1.html. - -#include "asiosys.h" -#include "asio.h" -#include "iasiothiscallresolver.h" -#include "asiodrivers.h" -#include - -AsioDrivers drivers; -ASIOCallbacks asioCallbacks; -ASIODriverInfo driverInfo; -CallbackInfo *asioCallbackInfo; -bool asioXRun; - -struct AsioHandle { - int drainCounter; // Tracks callback counts when draining - bool internalDrain; // Indicates if stop is initiated from callback or not. - ASIOBufferInfo *bufferInfos; - HANDLE condition; - - AsioHandle() - :drainCounter(0), internalDrain(false), bufferInfos(0) {} -}; - -// Function declarations (definitions at end of section) -static const char* getAsioErrorString( ASIOError result ); -void sampleRateChanged( ASIOSampleRate sRate ); -long asioMessages( long selector, long value, void* message, double* opt ); - -RtApiAsio :: RtApiAsio() -{ - // ASIO cannot run on a multi-threaded appartment. You can call - // CoInitialize beforehand, but it must be for appartment threading - // (in which case, CoInitilialize will return S_FALSE here). - coInitialized_ = false; - HRESULT hr = CoInitialize( NULL ); - if ( FAILED(hr) ) { - errorText_ = "RtApiAsio::ASIO requires a single-threaded appartment. Call CoInitializeEx(0,COINIT_APARTMENTTHREADED)"; - error( RtError::WARNING ); - } - coInitialized_ = true; - - drivers.removeCurrentDriver(); - driverInfo.asioVersion = 2; - - // See note in DirectSound implementation about GetDesktopWindow(). - driverInfo.sysRef = GetForegroundWindow(); -} - -RtApiAsio :: ~RtApiAsio() -{ - if ( stream_.state != STREAM_CLOSED ) closeStream(); - if ( coInitialized_ ) CoUninitialize(); -} - -unsigned int RtApiAsio :: getDeviceCount( void ) -{ - return (unsigned int) drivers.asioGetNumDev(); -} - -RtAudio::DeviceInfo RtApiAsio :: getDeviceInfo( unsigned int device ) -{ - RtAudio::DeviceInfo info; - info.probed = false; - - // Get device ID - unsigned int nDevices = getDeviceCount(); - if ( nDevices == 0 ) { - errorText_ = "RtApiAsio::getDeviceInfo: no devices found!"; - error( RtError::INVALID_USE ); - } - - if ( device >= nDevices ) { - errorText_ = "RtApiAsio::getDeviceInfo: device ID is invalid!"; - error( RtError::INVALID_USE ); - } - - // If a stream is already open, we cannot probe other devices. Thus, use the saved results. - if ( stream_.state != STREAM_CLOSED ) { - if ( device >= devices_.size() ) { - errorText_ = "RtApiAsio::getDeviceInfo: device ID was not present before stream was opened."; - error( RtError::WARNING ); - return info; - } - return devices_[ device ]; - } - - char driverName[32]; - ASIOError result = drivers.asioGetDriverName( (int) device, driverName, 32 ); - if ( result != ASE_OK ) { - errorStream_ << "RtApiAsio::getDeviceInfo: unable to get driver name (" << getAsioErrorString( result ) << ")."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - info.name = driverName; - - if ( !drivers.loadDriver( driverName ) ) { - errorStream_ << "RtApiAsio::getDeviceInfo: unable to load driver (" << driverName << ")."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - result = ASIOInit( &driverInfo ); - if ( result != ASE_OK ) { - errorStream_ << "RtApiAsio::getDeviceInfo: error (" << getAsioErrorString( result ) << ") initializing driver (" << driverName << ")."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // Determine the device channel information. - long inputChannels, outputChannels; - result = ASIOGetChannels( &inputChannels, &outputChannels ); - if ( result != ASE_OK ) { - drivers.removeCurrentDriver(); - errorStream_ << "RtApiAsio::getDeviceInfo: error (" << getAsioErrorString( result ) << ") getting channel count (" << driverName << ")."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - info.outputChannels = outputChannels; - info.inputChannels = inputChannels; - if ( info.outputChannels > 0 && info.inputChannels > 0 ) - info.duplexChannels = (info.outputChannels > info.inputChannels) ? info.inputChannels : info.outputChannels; - - // Determine the supported sample rates. - info.sampleRates.clear(); - for ( unsigned int i=0; i 0 ) - if ( getDefaultOutputDevice() == device ) info.isDefaultOutput = true; - if ( info.inputChannels > 0 ) - if ( getDefaultInputDevice() == device ) info.isDefaultInput = true; - - info.probed = true; - drivers.removeCurrentDriver(); - return info; -} - -void bufferSwitch( long index, ASIOBool processNow ) -{ - RtApiAsio *object = (RtApiAsio *) asioCallbackInfo->object; - object->callbackEvent( index ); -} - -void RtApiAsio :: saveDeviceInfo( void ) -{ - devices_.clear(); - - unsigned int nDevices = getDeviceCount(); - devices_.resize( nDevices ); - for ( unsigned int i=0; isaveDeviceInfo(); - - if ( !drivers.loadDriver( driverName ) ) { - errorStream_ << "RtApiAsio::probeDeviceOpen: unable to load driver (" << driverName << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - result = ASIOInit( &driverInfo ); - if ( result != ASE_OK ) { - errorStream_ << "RtApiAsio::probeDeviceOpen: error (" << getAsioErrorString( result ) << ") initializing driver (" << driverName << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - } - - // Check the device channel count. - long inputChannels, outputChannels; - result = ASIOGetChannels( &inputChannels, &outputChannels ); - if ( result != ASE_OK ) { - drivers.removeCurrentDriver(); - errorStream_ << "RtApiAsio::probeDeviceOpen: error (" << getAsioErrorString( result ) << ") getting channel count (" << driverName << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - if ( ( mode == OUTPUT && (channels+firstChannel) > (unsigned int) outputChannels) || - ( mode == INPUT && (channels+firstChannel) > (unsigned int) inputChannels) ) { - drivers.removeCurrentDriver(); - errorStream_ << "RtApiAsio::probeDeviceOpen: driver (" << driverName << ") does not support requested channel count (" << channels << ") + offset (" << firstChannel << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - stream_.nDeviceChannels[mode] = channels; - stream_.nUserChannels[mode] = channels; - stream_.channelOffset[mode] = firstChannel; - - // Verify the sample rate is supported. - result = ASIOCanSampleRate( (ASIOSampleRate) sampleRate ); - if ( result != ASE_OK ) { - drivers.removeCurrentDriver(); - errorStream_ << "RtApiAsio::probeDeviceOpen: driver (" << driverName << ") does not support requested sample rate (" << sampleRate << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Get the current sample rate - ASIOSampleRate currentRate; - result = ASIOGetSampleRate( ¤tRate ); - if ( result != ASE_OK ) { - drivers.removeCurrentDriver(); - errorStream_ << "RtApiAsio::probeDeviceOpen: driver (" << driverName << ") error getting sample rate."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Set the sample rate only if necessary - if ( currentRate != sampleRate ) { - result = ASIOSetSampleRate( (ASIOSampleRate) sampleRate ); - if ( result != ASE_OK ) { - drivers.removeCurrentDriver(); - errorStream_ << "RtApiAsio::probeDeviceOpen: driver (" << driverName << ") error setting sample rate (" << sampleRate << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - } - - // Determine the driver data type. - ASIOChannelInfo channelInfo; - channelInfo.channel = 0; - if ( mode == OUTPUT ) channelInfo.isInput = false; - else channelInfo.isInput = true; - result = ASIOGetChannelInfo( &channelInfo ); - if ( result != ASE_OK ) { - drivers.removeCurrentDriver(); - errorStream_ << "RtApiAsio::probeDeviceOpen: driver (" << driverName << ") error (" << getAsioErrorString( result ) << ") getting data format."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Assuming WINDOWS host is always little-endian. - stream_.doByteSwap[mode] = false; - stream_.userFormat = format; - stream_.deviceFormat[mode] = 0; - if ( channelInfo.type == ASIOSTInt16MSB || channelInfo.type == ASIOSTInt16LSB ) { - stream_.deviceFormat[mode] = RTAUDIO_SINT16; - if ( channelInfo.type == ASIOSTInt16MSB ) stream_.doByteSwap[mode] = true; - } - else if ( channelInfo.type == ASIOSTInt32MSB || channelInfo.type == ASIOSTInt32LSB ) { - stream_.deviceFormat[mode] = RTAUDIO_SINT32; - if ( channelInfo.type == ASIOSTInt32MSB ) stream_.doByteSwap[mode] = true; - } - else if ( channelInfo.type == ASIOSTFloat32MSB || channelInfo.type == ASIOSTFloat32LSB ) { - stream_.deviceFormat[mode] = RTAUDIO_FLOAT32; - if ( channelInfo.type == ASIOSTFloat32MSB ) stream_.doByteSwap[mode] = true; - } - else if ( channelInfo.type == ASIOSTFloat64MSB || channelInfo.type == ASIOSTFloat64LSB ) { - stream_.deviceFormat[mode] = RTAUDIO_FLOAT64; - if ( channelInfo.type == ASIOSTFloat64MSB ) stream_.doByteSwap[mode] = true; - } - - if ( stream_.deviceFormat[mode] == 0 ) { - drivers.removeCurrentDriver(); - errorStream_ << "RtApiAsio::probeDeviceOpen: driver (" << driverName << ") data format not supported by RtAudio."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Set the buffer size. For a duplex stream, this will end up - // setting the buffer size based on the input constraints, which - // should be ok. - long minSize, maxSize, preferSize, granularity; - result = ASIOGetBufferSize( &minSize, &maxSize, &preferSize, &granularity ); - if ( result != ASE_OK ) { - drivers.removeCurrentDriver(); - errorStream_ << "RtApiAsio::probeDeviceOpen: driver (" << driverName << ") error (" << getAsioErrorString( result ) << ") getting buffer size."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - if ( *bufferSize < (unsigned int) minSize ) *bufferSize = (unsigned int) minSize; - else if ( *bufferSize > (unsigned int) maxSize ) *bufferSize = (unsigned int) maxSize; - else if ( granularity == -1 ) { - // Make sure bufferSize is a power of two. - int log2_of_min_size = 0; - int log2_of_max_size = 0; - - for ( unsigned int i = 0; i < sizeof(long) * 8; i++ ) { - if ( minSize & ((long)1 << i) ) log2_of_min_size = i; - if ( maxSize & ((long)1 << i) ) log2_of_max_size = i; - } - - long min_delta = std::abs( (long)*bufferSize - ((long)1 << log2_of_min_size) ); - int min_delta_num = log2_of_min_size; - - for (int i = log2_of_min_size + 1; i <= log2_of_max_size; i++) { - long current_delta = std::abs( (long)*bufferSize - ((long)1 << i) ); - if (current_delta < min_delta) { - min_delta = current_delta; - min_delta_num = i; - } - } - - *bufferSize = ( (unsigned int)1 << min_delta_num ); - if ( *bufferSize < (unsigned int) minSize ) *bufferSize = (unsigned int) minSize; - else if ( *bufferSize > (unsigned int) maxSize ) *bufferSize = (unsigned int) maxSize; - } - else if ( granularity != 0 ) { - // Set to an even multiple of granularity, rounding up. - *bufferSize = (*bufferSize + granularity-1) / granularity * granularity; - } - - if ( mode == INPUT && stream_.mode == OUTPUT && stream_.bufferSize != *bufferSize ) { - drivers.removeCurrentDriver(); - errorText_ = "RtApiAsio::probeDeviceOpen: input/output buffersize discrepancy!"; - return FAILURE; - } - - stream_.bufferSize = *bufferSize; - stream_.nBuffers = 2; - - if ( options && options->flags & RTAUDIO_NONINTERLEAVED ) stream_.userInterleaved = false; - else stream_.userInterleaved = true; - - // ASIO always uses non-interleaved buffers. - stream_.deviceInterleaved[mode] = false; - - // Allocate, if necessary, our AsioHandle structure for the stream. - AsioHandle *handle = (AsioHandle *) stream_.apiHandle; - if ( handle == 0 ) { - try { - handle = new AsioHandle; - } - catch ( std::bad_alloc& ) { - //if ( handle == NULL ) { - drivers.removeCurrentDriver(); - errorText_ = "RtApiAsio::probeDeviceOpen: error allocating AsioHandle memory."; - return FAILURE; - } - handle->bufferInfos = 0; - - // Create a manual-reset event. - handle->condition = CreateEvent( NULL, // no security - TRUE, // manual-reset - FALSE, // non-signaled initially - NULL ); // unnamed - stream_.apiHandle = (void *) handle; - } - - // Create the ASIO internal buffers. Since RtAudio sets up input - // and output separately, we'll have to dispose of previously - // created output buffers for a duplex stream. - long inputLatency, outputLatency; - if ( mode == INPUT && stream_.mode == OUTPUT ) { - ASIODisposeBuffers(); - if ( handle->bufferInfos ) free( handle->bufferInfos ); - } - - // Allocate, initialize, and save the bufferInfos in our stream callbackInfo structure. - bool buffersAllocated = false; - unsigned int i, nChannels = stream_.nDeviceChannels[0] + stream_.nDeviceChannels[1]; - handle->bufferInfos = (ASIOBufferInfo *) malloc( nChannels * sizeof(ASIOBufferInfo) ); - if ( handle->bufferInfos == NULL ) { - errorStream_ << "RtApiAsio::probeDeviceOpen: error allocating bufferInfo memory for driver (" << driverName << ")."; - errorText_ = errorStream_.str(); - goto error; - } - - ASIOBufferInfo *infos; - infos = handle->bufferInfos; - for ( i=0; iisInput = ASIOFalse; - infos->channelNum = i + stream_.channelOffset[0]; - infos->buffers[0] = infos->buffers[1] = 0; - } - for ( i=0; iisInput = ASIOTrue; - infos->channelNum = i + stream_.channelOffset[1]; - infos->buffers[0] = infos->buffers[1] = 0; - } - - // Set up the ASIO callback structure and create the ASIO data buffers. - asioCallbacks.bufferSwitch = &bufferSwitch; - asioCallbacks.sampleRateDidChange = &sampleRateChanged; - asioCallbacks.asioMessage = &asioMessages; - asioCallbacks.bufferSwitchTimeInfo = NULL; - result = ASIOCreateBuffers( handle->bufferInfos, nChannels, stream_.bufferSize, &asioCallbacks ); - if ( result != ASE_OK ) { - errorStream_ << "RtApiAsio::probeDeviceOpen: driver (" << driverName << ") error (" << getAsioErrorString( result ) << ") creating buffers."; - errorText_ = errorStream_.str(); - goto error; - } - buffersAllocated = true; - - // Set flags for buffer conversion. - stream_.doConvertBuffer[mode] = false; - if ( stream_.userFormat != stream_.deviceFormat[mode] ) - stream_.doConvertBuffer[mode] = true; - if ( stream_.userInterleaved != stream_.deviceInterleaved[mode] && - stream_.nUserChannels[mode] > 1 ) - stream_.doConvertBuffer[mode] = true; - - // Allocate necessary internal buffers - unsigned long bufferBytes; - bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat ); - stream_.userBuffer[mode] = (char *) calloc( bufferBytes, 1 ); - if ( stream_.userBuffer[mode] == NULL ) { - errorText_ = "RtApiAsio::probeDeviceOpen: error allocating user buffer memory."; - goto error; - } - - if ( stream_.doConvertBuffer[mode] ) { - - bool makeBuffer = true; - bufferBytes = stream_.nDeviceChannels[mode] * formatBytes( stream_.deviceFormat[mode] ); - if ( mode == INPUT ) { - if ( stream_.mode == OUTPUT && stream_.deviceBuffer ) { - unsigned long bytesOut = stream_.nDeviceChannels[0] * formatBytes( stream_.deviceFormat[0] ); - if ( bufferBytes <= bytesOut ) makeBuffer = false; - } - } - - if ( makeBuffer ) { - bufferBytes *= *bufferSize; - if ( stream_.deviceBuffer ) free( stream_.deviceBuffer ); - stream_.deviceBuffer = (char *) calloc( bufferBytes, 1 ); - if ( stream_.deviceBuffer == NULL ) { - errorText_ = "RtApiAsio::probeDeviceOpen: error allocating device buffer memory."; - goto error; - } - } - } - - stream_.sampleRate = sampleRate; - stream_.device[mode] = device; - stream_.state = STREAM_STOPPED; - asioCallbackInfo = &stream_.callbackInfo; - stream_.callbackInfo.object = (void *) this; - if ( stream_.mode == OUTPUT && mode == INPUT ) - // We had already set up an output stream. - stream_.mode = DUPLEX; - else - stream_.mode = mode; - - // Determine device latencies - result = ASIOGetLatencies( &inputLatency, &outputLatency ); - if ( result != ASE_OK ) { - errorStream_ << "RtApiAsio::probeDeviceOpen: driver (" << driverName << ") error (" << getAsioErrorString( result ) << ") getting latency."; - errorText_ = errorStream_.str(); - error( RtError::WARNING); // warn but don't fail - } - else { - stream_.latency[0] = outputLatency; - stream_.latency[1] = inputLatency; - } - - // Setup the buffer conversion information structure. We don't use - // buffers to do channel offsets, so we override that parameter - // here. - if ( stream_.doConvertBuffer[mode] ) setConvertInfo( mode, 0 ); - - return SUCCESS; - - error: - if ( buffersAllocated ) - ASIODisposeBuffers(); - drivers.removeCurrentDriver(); - - if ( handle ) { - CloseHandle( handle->condition ); - if ( handle->bufferInfos ) - free( handle->bufferInfos ); - delete handle; - stream_.apiHandle = 0; - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - return FAILURE; -} - -void RtApiAsio :: closeStream() -{ - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiAsio::closeStream(): no open stream to close!"; - error( RtError::WARNING ); - return; - } - - if ( stream_.state == STREAM_RUNNING ) { - stream_.state = STREAM_STOPPED; - ASIOStop(); - } - ASIODisposeBuffers(); - drivers.removeCurrentDriver(); - - AsioHandle *handle = (AsioHandle *) stream_.apiHandle; - if ( handle ) { - CloseHandle( handle->condition ); - if ( handle->bufferInfos ) - free( handle->bufferInfos ); - delete handle; - stream_.apiHandle = 0; - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - stream_.mode = UNINITIALIZED; - stream_.state = STREAM_CLOSED; -} - -bool stopThreadCalled = false; - -void RtApiAsio :: startStream() -{ - verifyStream(); - if ( stream_.state == STREAM_RUNNING ) { - errorText_ = "RtApiAsio::startStream(): the stream is already running!"; - error( RtError::WARNING ); - return; - } - - AsioHandle *handle = (AsioHandle *) stream_.apiHandle; - ASIOError result = ASIOStart(); - if ( result != ASE_OK ) { - errorStream_ << "RtApiAsio::startStream: error (" << getAsioErrorString( result ) << ") starting device."; - errorText_ = errorStream_.str(); - goto unlock; - } - - handle->drainCounter = 0; - handle->internalDrain = false; - ResetEvent( handle->condition ); - stream_.state = STREAM_RUNNING; - asioXRun = false; - - unlock: - stopThreadCalled = false; - - if ( result == ASE_OK ) return; - error( RtError::SYSTEM_ERROR ); -} - -void RtApiAsio :: stopStream() -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiAsio::stopStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - AsioHandle *handle = (AsioHandle *) stream_.apiHandle; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - if ( handle->drainCounter == 0 ) { - handle->drainCounter = 2; - WaitForSingleObject( handle->condition, INFINITE ); // block until signaled - } - } - - stream_.state = STREAM_STOPPED; - - ASIOError result = ASIOStop(); - if ( result != ASE_OK ) { - errorStream_ << "RtApiAsio::stopStream: error (" << getAsioErrorString( result ) << ") stopping device."; - errorText_ = errorStream_.str(); - } - - if ( result == ASE_OK ) return; - error( RtError::SYSTEM_ERROR ); -} - -void RtApiAsio :: abortStream() -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiAsio::abortStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - // The following lines were commented-out because some behavior was - // noted where the device buffers need to be zeroed to avoid - // continuing sound, even when the device buffers are completely - // disposed. So now, calling abort is the same as calling stop. - // AsioHandle *handle = (AsioHandle *) stream_.apiHandle; - // handle->drainCounter = 2; - stopStream(); -} - -// This function will be called by a spawned thread when the user -// callback function signals that the stream should be stopped or -// aborted. It is necessary to handle it this way because the -// callbackEvent() function must return before the ASIOStop() -// function will return. -extern "C" unsigned __stdcall asioStopStream( void *ptr ) -{ - CallbackInfo *info = (CallbackInfo *) ptr; - RtApiAsio *object = (RtApiAsio *) info->object; - - object->stopStream(); - _endthreadex( 0 ); - return 0; -} - -bool RtApiAsio :: callbackEvent( long bufferIndex ) -{ - if ( stream_.state == STREAM_STOPPED || stream_.state == STREAM_STOPPING ) return SUCCESS; - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiAsio::callbackEvent(): the stream is closed ... this shouldn't happen!"; - error( RtError::WARNING ); - return FAILURE; - } - - CallbackInfo *info = (CallbackInfo *) &stream_.callbackInfo; - AsioHandle *handle = (AsioHandle *) stream_.apiHandle; - - // Check if we were draining the stream and signal if finished. - if ( handle->drainCounter > 3 ) { - - stream_.state = STREAM_STOPPING; - if ( handle->internalDrain == false ) - SetEvent( handle->condition ); - else { // spawn a thread to stop the stream - unsigned threadId; - stream_.callbackInfo.thread = _beginthreadex( NULL, 0, &asioStopStream, - &stream_.callbackInfo, 0, &threadId ); - } - return SUCCESS; - } - - // Invoke user callback to get fresh output data UNLESS we are - // draining stream. - if ( handle->drainCounter == 0 ) { - RtAudioCallback callback = (RtAudioCallback) info->callback; - double streamTime = getStreamTime(); - RtAudioStreamStatus status = 0; - if ( stream_.mode != INPUT && asioXRun == true ) { - status |= RTAUDIO_OUTPUT_UNDERFLOW; - asioXRun = false; - } - if ( stream_.mode != OUTPUT && asioXRun == true ) { - status |= RTAUDIO_INPUT_OVERFLOW; - asioXRun = false; - } - int cbReturnValue = callback( stream_.userBuffer[0], stream_.userBuffer[1], - stream_.bufferSize, streamTime, status, info->userData ); - if ( cbReturnValue == 2 ) { - stream_.state = STREAM_STOPPING; - handle->drainCounter = 2; - unsigned threadId; - stream_.callbackInfo.thread = _beginthreadex( NULL, 0, &asioStopStream, - &stream_.callbackInfo, 0, &threadId ); - return SUCCESS; - } - else if ( cbReturnValue == 1 ) { - handle->drainCounter = 1; - handle->internalDrain = true; - } - } - - unsigned int nChannels, bufferBytes, i, j; - nChannels = stream_.nDeviceChannels[0] + stream_.nDeviceChannels[1]; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - - bufferBytes = stream_.bufferSize * formatBytes( stream_.deviceFormat[0] ); - - if ( handle->drainCounter > 1 ) { // write zeros to the output stream - - for ( i=0, j=0; ibufferInfos[i].isInput != ASIOTrue ) - memset( handle->bufferInfos[i].buffers[bufferIndex], 0, bufferBytes ); - } - - } - else if ( stream_.doConvertBuffer[0] ) { - - convertBuffer( stream_.deviceBuffer, stream_.userBuffer[0], stream_.convertInfo[0] ); - if ( stream_.doByteSwap[0] ) - byteSwapBuffer( stream_.deviceBuffer, - stream_.bufferSize * stream_.nDeviceChannels[0], - stream_.deviceFormat[0] ); - - for ( i=0, j=0; ibufferInfos[i].isInput != ASIOTrue ) - memcpy( handle->bufferInfos[i].buffers[bufferIndex], - &stream_.deviceBuffer[j++*bufferBytes], bufferBytes ); - } - - } - else { - - if ( stream_.doByteSwap[0] ) - byteSwapBuffer( stream_.userBuffer[0], - stream_.bufferSize * stream_.nUserChannels[0], - stream_.userFormat ); - - for ( i=0, j=0; ibufferInfos[i].isInput != ASIOTrue ) - memcpy( handle->bufferInfos[i].buffers[bufferIndex], - &stream_.userBuffer[0][bufferBytes*j++], bufferBytes ); - } - - } - - if ( handle->drainCounter ) { - handle->drainCounter++; - goto unlock; - } - } - - if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) { - - bufferBytes = stream_.bufferSize * formatBytes(stream_.deviceFormat[1]); - - if (stream_.doConvertBuffer[1]) { - - // Always interleave ASIO input data. - for ( i=0, j=0; ibufferInfos[i].isInput == ASIOTrue ) - memcpy( &stream_.deviceBuffer[j++*bufferBytes], - handle->bufferInfos[i].buffers[bufferIndex], - bufferBytes ); - } - - if ( stream_.doByteSwap[1] ) - byteSwapBuffer( stream_.deviceBuffer, - stream_.bufferSize * stream_.nDeviceChannels[1], - stream_.deviceFormat[1] ); - convertBuffer( stream_.userBuffer[1], stream_.deviceBuffer, stream_.convertInfo[1] ); - - } - else { - for ( i=0, j=0; ibufferInfos[i].isInput == ASIOTrue ) { - memcpy( &stream_.userBuffer[1][bufferBytes*j++], - handle->bufferInfos[i].buffers[bufferIndex], - bufferBytes ); - } - } - - if ( stream_.doByteSwap[1] ) - byteSwapBuffer( stream_.userBuffer[1], - stream_.bufferSize * stream_.nUserChannels[1], - stream_.userFormat ); - } - } - - unlock: - // The following call was suggested by Malte Clasen. While the API - // documentation indicates it should not be required, some device - // drivers apparently do not function correctly without it. - ASIOOutputReady(); - - RtApi::tickStreamTime(); - return SUCCESS; -} - -void sampleRateChanged( ASIOSampleRate sRate ) -{ - // The ASIO documentation says that this usually only happens during - // external sync. Audio processing is not stopped by the driver, - // actual sample rate might not have even changed, maybe only the - // sample rate status of an AES/EBU or S/PDIF digital input at the - // audio device. - - RtApi *object = (RtApi *) asioCallbackInfo->object; - try { - object->stopStream(); - } - catch ( RtError &exception ) { - std::cerr << "\nRtApiAsio: sampleRateChanged() error (" << exception.getMessage() << ")!\n" << std::endl; - return; - } - - std::cerr << "\nRtApiAsio: driver reports sample rate changed to " << sRate << " ... stream stopped!!!\n" << std::endl; -} - -long asioMessages( long selector, long value, void* message, double* opt ) -{ - long ret = 0; - - switch( selector ) { - case kAsioSelectorSupported: - if ( value == kAsioResetRequest - || value == kAsioEngineVersion - || value == kAsioResyncRequest - || value == kAsioLatenciesChanged - // The following three were added for ASIO 2.0, you don't - // necessarily have to support them. - || value == kAsioSupportsTimeInfo - || value == kAsioSupportsTimeCode - || value == kAsioSupportsInputMonitor) - ret = 1L; - break; - case kAsioResetRequest: - // Defer the task and perform the reset of the driver during the - // next "safe" situation. You cannot reset the driver right now, - // as this code is called from the driver. Reset the driver is - // done by completely destruct is. I.e. ASIOStop(), - // ASIODisposeBuffers(), Destruction Afterwards you initialize the - // driver again. - std::cerr << "\nRtApiAsio: driver reset requested!!!" << std::endl; - ret = 1L; - break; - case kAsioResyncRequest: - // This informs the application that the driver encountered some - // non-fatal data loss. It is used for synchronization purposes - // of different media. Added mainly to work around the Win16Mutex - // problems in Windows 95/98 with the Windows Multimedia system, - // which could lose data because the Mutex was held too long by - // another thread. However a driver can issue it in other - // situations, too. - // std::cerr << "\nRtApiAsio: driver resync requested!!!" << std::endl; - asioXRun = true; - ret = 1L; - break; - case kAsioLatenciesChanged: - // This will inform the host application that the drivers were - // latencies changed. Beware, it this does not mean that the - // buffer sizes have changed! You might need to update internal - // delay data. - std::cerr << "\nRtApiAsio: driver latency may have changed!!!" << std::endl; - ret = 1L; - break; - case kAsioEngineVersion: - // Return the supported ASIO version of the host application. If - // a host application does not implement this selector, ASIO 1.0 - // is assumed by the driver. - ret = 2L; - break; - case kAsioSupportsTimeInfo: - // Informs the driver whether the - // asioCallbacks.bufferSwitchTimeInfo() callback is supported. - // For compatibility with ASIO 1.0 drivers the host application - // should always support the "old" bufferSwitch method, too. - ret = 0; - break; - case kAsioSupportsTimeCode: - // Informs the driver whether application is interested in time - // code info. If an application does not need to know about time - // code, the driver has less work to do. - ret = 0; - break; - } - return ret; -} - -static const char* getAsioErrorString( ASIOError result ) -{ - struct Messages - { - ASIOError value; - const char*message; - }; - - static Messages m[] = - { - { ASE_NotPresent, "Hardware input or output is not present or available." }, - { ASE_HWMalfunction, "Hardware is malfunctioning." }, - { ASE_InvalidParameter, "Invalid input parameter." }, - { ASE_InvalidMode, "Invalid mode." }, - { ASE_SPNotAdvancing, "Sample position not advancing." }, - { ASE_NoClock, "Sample clock or rate cannot be determined or is not present." }, - { ASE_NoMemory, "Not enough memory to complete the request." } - }; - - for ( unsigned int i = 0; i < sizeof(m)/sizeof(m[0]); ++i ) - if ( m[i].value == result ) return m[i].message; - - return "Unknown error."; -} -//******************** End of __WINDOWS_ASIO__ *********************// -#endif - - -#if defined(__WINDOWS_DS__) // Windows DirectSound API - -// Modified by Robin Davies, October 2005 -// - Improvements to DirectX pointer chasing. -// - Bug fix for non-power-of-two Asio granularity used by Edirol PCR-A30. -// - Auto-call CoInitialize for DSOUND and ASIO platforms. -// Various revisions for RtAudio 4.0 by Gary Scavone, April 2007 -// Changed device query structure for RtAudio 4.0.7, January 2010 - -#include -#include -#include - -#if defined(__MINGW32__) - // missing from latest mingw winapi -#define WAVE_FORMAT_96M08 0x00010000 /* 96 kHz, Mono, 8-bit */ -#define WAVE_FORMAT_96S08 0x00020000 /* 96 kHz, Stereo, 8-bit */ -#define WAVE_FORMAT_96M16 0x00040000 /* 96 kHz, Mono, 16-bit */ -#define WAVE_FORMAT_96S16 0x00080000 /* 96 kHz, Stereo, 16-bit */ -#endif - -#define MINIMUM_DEVICE_BUFFER_SIZE 32768 - -#ifdef _MSC_VER // if Microsoft Visual C++ -#pragma comment( lib, "winmm.lib" ) // then, auto-link winmm.lib. Otherwise, it has to be added manually. -#endif - -static inline DWORD dsPointerBetween( DWORD pointer, DWORD laterPointer, DWORD earlierPointer, DWORD bufferSize ) -{ - if ( pointer > bufferSize ) pointer -= bufferSize; - if ( laterPointer < earlierPointer ) laterPointer += bufferSize; - if ( pointer < earlierPointer ) pointer += bufferSize; - return pointer >= earlierPointer && pointer < laterPointer; -} - -// A structure to hold various information related to the DirectSound -// API implementation. -struct DsHandle { - unsigned int drainCounter; // Tracks callback counts when draining - bool internalDrain; // Indicates if stop is initiated from callback or not. - void *id[2]; - void *buffer[2]; - bool xrun[2]; - UINT bufferPointer[2]; - DWORD dsBufferSize[2]; - DWORD dsPointerLeadTime[2]; // the number of bytes ahead of the safe pointer to lead by. - HANDLE condition; - - DsHandle() - :drainCounter(0), internalDrain(false) { id[0] = 0; id[1] = 0; buffer[0] = 0; buffer[1] = 0; xrun[0] = false; xrun[1] = false; bufferPointer[0] = 0; bufferPointer[1] = 0; } -}; - -// Declarations for utility functions, callbacks, and structures -// specific to the DirectSound implementation. -static BOOL CALLBACK deviceQueryCallback( LPGUID lpguid, - LPCTSTR description, - LPCTSTR module, - LPVOID lpContext ); - -static const char* getErrorString( int code ); - -extern "C" unsigned __stdcall callbackHandler( void *ptr ); - -struct DsDevice { - LPGUID id[2]; - bool validId[2]; - bool found; - std::string name; - - DsDevice() - : found(false) { validId[0] = false; validId[1] = false; } -}; - -std::vector< DsDevice > dsDevices; - -RtApiDs :: RtApiDs() -{ - // Dsound will run both-threaded. If CoInitialize fails, then just - // accept whatever the mainline chose for a threading model. - coInitialized_ = false; - HRESULT hr = CoInitialize( NULL ); - if ( !FAILED( hr ) ) coInitialized_ = true; -} - -RtApiDs :: ~RtApiDs() -{ - if ( coInitialized_ ) CoUninitialize(); // balanced call. - if ( stream_.state != STREAM_CLOSED ) closeStream(); -} - -// The DirectSound default output is always the first device. -unsigned int RtApiDs :: getDefaultOutputDevice( void ) -{ - return 0; -} - -// The DirectSound default input is always the first input device, -// which is the first capture device enumerated. -unsigned int RtApiDs :: getDefaultInputDevice( void ) -{ - return 0; -} - -unsigned int RtApiDs :: getDeviceCount( void ) -{ - // Set query flag for previously found devices to false, so that we - // can check for any devices that have disappeared. - for ( unsigned int i=0; i indices; - for ( unsigned int i=0; i= dsDevices.size() ) { - errorText_ = "RtApiDs::getDeviceInfo: device ID is invalid!"; - error( RtError::INVALID_USE ); - } - - HRESULT result; - if ( dsDevices[ device ].validId[0] == false ) goto probeInput; - - LPDIRECTSOUND output; - DSCAPS outCaps; - result = DirectSoundCreate( dsDevices[ device ].id[0], &output, NULL ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::getDeviceInfo: error (" << getErrorString( result ) << ") opening output device (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - goto probeInput; - } - - outCaps.dwSize = sizeof( outCaps ); - result = output->GetCaps( &outCaps ); - if ( FAILED( result ) ) { - output->Release(); - errorStream_ << "RtApiDs::getDeviceInfo: error (" << getErrorString( result ) << ") getting capabilities!"; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - goto probeInput; - } - - // Get output channel information. - info.outputChannels = ( outCaps.dwFlags & DSCAPS_PRIMARYSTEREO ) ? 2 : 1; - - // Get sample rate information. - info.sampleRates.clear(); - for ( unsigned int k=0; k= (unsigned int) outCaps.dwMinSecondarySampleRate && - SAMPLE_RATES[k] <= (unsigned int) outCaps.dwMaxSecondarySampleRate ) - info.sampleRates.push_back( SAMPLE_RATES[k] ); - } - - // Get format information. - if ( outCaps.dwFlags & DSCAPS_PRIMARY16BIT ) info.nativeFormats |= RTAUDIO_SINT16; - if ( outCaps.dwFlags & DSCAPS_PRIMARY8BIT ) info.nativeFormats |= RTAUDIO_SINT8; - - output->Release(); - - if ( getDefaultOutputDevice() == device ) - info.isDefaultOutput = true; - - if ( dsDevices[ device ].validId[1] == false ) { - info.name = dsDevices[ device ].name; - info.probed = true; - return info; - } - - probeInput: - - LPDIRECTSOUNDCAPTURE input; - result = DirectSoundCaptureCreate( dsDevices[ device ].id[1], &input, NULL ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::getDeviceInfo: error (" << getErrorString( result ) << ") opening input device (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - DSCCAPS inCaps; - inCaps.dwSize = sizeof( inCaps ); - result = input->GetCaps( &inCaps ); - if ( FAILED( result ) ) { - input->Release(); - errorStream_ << "RtApiDs::getDeviceInfo: error (" << getErrorString( result ) << ") getting object capabilities (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // Get input channel information. - info.inputChannels = inCaps.dwChannels; - - // Get sample rate and format information. - std::vector rates; - if ( inCaps.dwChannels >= 2 ) { - if ( inCaps.dwFormats & WAVE_FORMAT_1S16 ) info.nativeFormats |= RTAUDIO_SINT16; - if ( inCaps.dwFormats & WAVE_FORMAT_2S16 ) info.nativeFormats |= RTAUDIO_SINT16; - if ( inCaps.dwFormats & WAVE_FORMAT_4S16 ) info.nativeFormats |= RTAUDIO_SINT16; - if ( inCaps.dwFormats & WAVE_FORMAT_96S16 ) info.nativeFormats |= RTAUDIO_SINT16; - if ( inCaps.dwFormats & WAVE_FORMAT_1S08 ) info.nativeFormats |= RTAUDIO_SINT8; - if ( inCaps.dwFormats & WAVE_FORMAT_2S08 ) info.nativeFormats |= RTAUDIO_SINT8; - if ( inCaps.dwFormats & WAVE_FORMAT_4S08 ) info.nativeFormats |= RTAUDIO_SINT8; - if ( inCaps.dwFormats & WAVE_FORMAT_96S08 ) info.nativeFormats |= RTAUDIO_SINT8; - - if ( info.nativeFormats & RTAUDIO_SINT16 ) { - if ( inCaps.dwFormats & WAVE_FORMAT_1S16 ) rates.push_back( 11025 ); - if ( inCaps.dwFormats & WAVE_FORMAT_2S16 ) rates.push_back( 22050 ); - if ( inCaps.dwFormats & WAVE_FORMAT_4S16 ) rates.push_back( 44100 ); - if ( inCaps.dwFormats & WAVE_FORMAT_96S16 ) rates.push_back( 96000 ); - } - else if ( info.nativeFormats & RTAUDIO_SINT8 ) { - if ( inCaps.dwFormats & WAVE_FORMAT_1S08 ) rates.push_back( 11025 ); - if ( inCaps.dwFormats & WAVE_FORMAT_2S08 ) rates.push_back( 22050 ); - if ( inCaps.dwFormats & WAVE_FORMAT_4S08 ) rates.push_back( 44100 ); - if ( inCaps.dwFormats & WAVE_FORMAT_96S08 ) rates.push_back( 96000 ); - } - } - else if ( inCaps.dwChannels == 1 ) { - if ( inCaps.dwFormats & WAVE_FORMAT_1M16 ) info.nativeFormats |= RTAUDIO_SINT16; - if ( inCaps.dwFormats & WAVE_FORMAT_2M16 ) info.nativeFormats |= RTAUDIO_SINT16; - if ( inCaps.dwFormats & WAVE_FORMAT_4M16 ) info.nativeFormats |= RTAUDIO_SINT16; - if ( inCaps.dwFormats & WAVE_FORMAT_96M16 ) info.nativeFormats |= RTAUDIO_SINT16; - if ( inCaps.dwFormats & WAVE_FORMAT_1M08 ) info.nativeFormats |= RTAUDIO_SINT8; - if ( inCaps.dwFormats & WAVE_FORMAT_2M08 ) info.nativeFormats |= RTAUDIO_SINT8; - if ( inCaps.dwFormats & WAVE_FORMAT_4M08 ) info.nativeFormats |= RTAUDIO_SINT8; - if ( inCaps.dwFormats & WAVE_FORMAT_96M08 ) info.nativeFormats |= RTAUDIO_SINT8; - - if ( info.nativeFormats & RTAUDIO_SINT16 ) { - if ( inCaps.dwFormats & WAVE_FORMAT_1M16 ) rates.push_back( 11025 ); - if ( inCaps.dwFormats & WAVE_FORMAT_2M16 ) rates.push_back( 22050 ); - if ( inCaps.dwFormats & WAVE_FORMAT_4M16 ) rates.push_back( 44100 ); - if ( inCaps.dwFormats & WAVE_FORMAT_96M16 ) rates.push_back( 96000 ); - } - else if ( info.nativeFormats & RTAUDIO_SINT8 ) { - if ( inCaps.dwFormats & WAVE_FORMAT_1M08 ) rates.push_back( 11025 ); - if ( inCaps.dwFormats & WAVE_FORMAT_2M08 ) rates.push_back( 22050 ); - if ( inCaps.dwFormats & WAVE_FORMAT_4M08 ) rates.push_back( 44100 ); - if ( inCaps.dwFormats & WAVE_FORMAT_96M08 ) rates.push_back( 96000 ); - } - } - else info.inputChannels = 0; // technically, this would be an error - - input->Release(); - - if ( info.inputChannels == 0 ) return info; - - // Copy the supported rates to the info structure but avoid duplication. - bool found; - for ( unsigned int i=0; i 0 && info.inputChannels > 0 ) - info.duplexChannels = (info.outputChannels > info.inputChannels) ? info.inputChannels : info.outputChannels; - - if ( device == 0 ) info.isDefaultInput = true; - - // Copy name and return. - info.name = dsDevices[ device ].name; - info.probed = true; - return info; -} - -bool RtApiDs :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ) -{ - if ( channels + firstChannel > 2 ) { - errorText_ = "RtApiDs::probeDeviceOpen: DirectSound does not support more than 2 channels per device."; - return FAILURE; - } - - unsigned int nDevices = dsDevices.size(); - if ( nDevices == 0 ) { - // This should not happen because a check is made before this function is called. - errorText_ = "RtApiDs::probeDeviceOpen: no devices found!"; - return FAILURE; - } - - if ( device >= nDevices ) { - // This should not happen because a check is made before this function is called. - errorText_ = "RtApiDs::probeDeviceOpen: device ID is invalid!"; - return FAILURE; - } - - if ( mode == OUTPUT ) { - if ( dsDevices[ device ].validId[0] == false ) { - errorStream_ << "RtApiDs::probeDeviceOpen: device (" << device << ") does not support output!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - } - else { // mode == INPUT - if ( dsDevices[ device ].validId[1] == false ) { - errorStream_ << "RtApiDs::probeDeviceOpen: device (" << device << ") does not support input!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - } - - // According to a note in PortAudio, using GetDesktopWindow() - // instead of GetForegroundWindow() is supposed to avoid problems - // that occur when the application's window is not the foreground - // window. Also, if the application window closes before the - // DirectSound buffer, DirectSound can crash. In the past, I had - // problems when using GetDesktopWindow() but it seems fine now - // (January 2010). I'll leave it commented here. - // HWND hWnd = GetForegroundWindow(); - HWND hWnd = GetDesktopWindow(); - - // Check the numberOfBuffers parameter and limit the lowest value to - // two. This is a judgement call and a value of two is probably too - // low for capture, but it should work for playback. - int nBuffers = 0; - if ( options ) nBuffers = options->numberOfBuffers; - if ( options && options->flags & RTAUDIO_MINIMIZE_LATENCY ) nBuffers = 2; - if ( nBuffers < 2 ) nBuffers = 3; - - // Check the lower range of the user-specified buffer size and set - // (arbitrarily) to a lower bound of 32. - if ( *bufferSize < 32 ) *bufferSize = 32; - - // Create the wave format structure. The data format setting will - // be determined later. - WAVEFORMATEX waveFormat; - ZeroMemory( &waveFormat, sizeof(WAVEFORMATEX) ); - waveFormat.wFormatTag = WAVE_FORMAT_PCM; - waveFormat.nChannels = channels + firstChannel; - waveFormat.nSamplesPerSec = (unsigned long) sampleRate; - - // Determine the device buffer size. By default, we'll use the value - // defined above (32K), but we will grow it to make allowances for - // very large software buffer sizes. - DWORD dsBufferSize = MINIMUM_DEVICE_BUFFER_SIZE;; - DWORD dsPointerLeadTime = 0; - - void *ohandle = 0, *bhandle = 0; - HRESULT result; - if ( mode == OUTPUT ) { - - LPDIRECTSOUND output; - result = DirectSoundCreate( dsDevices[ device ].id[0], &output, NULL ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") opening output device (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - DSCAPS outCaps; - outCaps.dwSize = sizeof( outCaps ); - result = output->GetCaps( &outCaps ); - if ( FAILED( result ) ) { - output->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") getting capabilities (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Check channel information. - if ( channels + firstChannel == 2 && !( outCaps.dwFlags & DSCAPS_PRIMARYSTEREO ) ) { - errorStream_ << "RtApiDs::getDeviceInfo: the output device (" << dsDevices[ device ].name << ") does not support stereo playback."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Check format information. Use 16-bit format unless not - // supported or user requests 8-bit. - if ( outCaps.dwFlags & DSCAPS_PRIMARY16BIT && - !( format == RTAUDIO_SINT8 && outCaps.dwFlags & DSCAPS_PRIMARY8BIT ) ) { - waveFormat.wBitsPerSample = 16; - stream_.deviceFormat[mode] = RTAUDIO_SINT16; - } - else { - waveFormat.wBitsPerSample = 8; - stream_.deviceFormat[mode] = RTAUDIO_SINT8; - } - stream_.userFormat = format; - - // Update wave format structure and buffer information. - waveFormat.nBlockAlign = waveFormat.nChannels * waveFormat.wBitsPerSample / 8; - waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAlign; - dsPointerLeadTime = nBuffers * (*bufferSize) * (waveFormat.wBitsPerSample / 8) * channels; - - // If the user wants an even bigger buffer, increase the device buffer size accordingly. - while ( dsPointerLeadTime * 2U > dsBufferSize ) - dsBufferSize *= 2; - - // Set cooperative level to DSSCL_EXCLUSIVE ... sound stops when window focus changes. - // result = output->SetCooperativeLevel( hWnd, DSSCL_EXCLUSIVE ); - // Set cooperative level to DSSCL_PRIORITY ... sound remains when window focus changes. - result = output->SetCooperativeLevel( hWnd, DSSCL_PRIORITY ); - if ( FAILED( result ) ) { - output->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") setting cooperative level (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Even though we will write to the secondary buffer, we need to - // access the primary buffer to set the correct output format - // (since the default is 8-bit, 22 kHz!). Setup the DS primary - // buffer description. - DSBUFFERDESC bufferDescription; - ZeroMemory( &bufferDescription, sizeof( DSBUFFERDESC ) ); - bufferDescription.dwSize = sizeof( DSBUFFERDESC ); - bufferDescription.dwFlags = DSBCAPS_PRIMARYBUFFER; - - // Obtain the primary buffer - LPDIRECTSOUNDBUFFER buffer; - result = output->CreateSoundBuffer( &bufferDescription, &buffer, NULL ); - if ( FAILED( result ) ) { - output->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") accessing primary buffer (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Set the primary DS buffer sound format. - result = buffer->SetFormat( &waveFormat ); - if ( FAILED( result ) ) { - output->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") setting primary buffer format (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Setup the secondary DS buffer description. - ZeroMemory( &bufferDescription, sizeof( DSBUFFERDESC ) ); - bufferDescription.dwSize = sizeof( DSBUFFERDESC ); - bufferDescription.dwFlags = ( DSBCAPS_STICKYFOCUS | - DSBCAPS_GLOBALFOCUS | - DSBCAPS_GETCURRENTPOSITION2 | - DSBCAPS_LOCHARDWARE ); // Force hardware mixing - bufferDescription.dwBufferBytes = dsBufferSize; - bufferDescription.lpwfxFormat = &waveFormat; - - // Try to create the secondary DS buffer. If that doesn't work, - // try to use software mixing. Otherwise, there's a problem. - result = output->CreateSoundBuffer( &bufferDescription, &buffer, NULL ); - if ( FAILED( result ) ) { - bufferDescription.dwFlags = ( DSBCAPS_STICKYFOCUS | - DSBCAPS_GLOBALFOCUS | - DSBCAPS_GETCURRENTPOSITION2 | - DSBCAPS_LOCSOFTWARE ); // Force software mixing - result = output->CreateSoundBuffer( &bufferDescription, &buffer, NULL ); - if ( FAILED( result ) ) { - output->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") creating secondary buffer (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - } - - // Get the buffer size ... might be different from what we specified. - DSBCAPS dsbcaps; - dsbcaps.dwSize = sizeof( DSBCAPS ); - result = buffer->GetCaps( &dsbcaps ); - if ( FAILED( result ) ) { - output->Release(); - buffer->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") getting buffer settings (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - dsBufferSize = dsbcaps.dwBufferBytes; - - // Lock the DS buffer - LPVOID audioPtr; - DWORD dataLen; - result = buffer->Lock( 0, dsBufferSize, &audioPtr, &dataLen, NULL, NULL, 0 ); - if ( FAILED( result ) ) { - output->Release(); - buffer->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") locking buffer (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Zero the DS buffer - ZeroMemory( audioPtr, dataLen ); - - // Unlock the DS buffer - result = buffer->Unlock( audioPtr, dataLen, NULL, 0 ); - if ( FAILED( result ) ) { - output->Release(); - buffer->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") unlocking buffer (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - ohandle = (void *) output; - bhandle = (void *) buffer; - } - - if ( mode == INPUT ) { - - LPDIRECTSOUNDCAPTURE input; - result = DirectSoundCaptureCreate( dsDevices[ device ].id[1], &input, NULL ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") opening input device (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - DSCCAPS inCaps; - inCaps.dwSize = sizeof( inCaps ); - result = input->GetCaps( &inCaps ); - if ( FAILED( result ) ) { - input->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") getting input capabilities (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Check channel information. - if ( inCaps.dwChannels < channels + firstChannel ) { - errorText_ = "RtApiDs::getDeviceInfo: the input device does not support requested input channels."; - return FAILURE; - } - - // Check format information. Use 16-bit format unless user - // requests 8-bit. - DWORD deviceFormats; - if ( channels + firstChannel == 2 ) { - deviceFormats = WAVE_FORMAT_1S08 | WAVE_FORMAT_2S08 | WAVE_FORMAT_4S08 | WAVE_FORMAT_96S08; - if ( format == RTAUDIO_SINT8 && inCaps.dwFormats & deviceFormats ) { - waveFormat.wBitsPerSample = 8; - stream_.deviceFormat[mode] = RTAUDIO_SINT8; - } - else { // assume 16-bit is supported - waveFormat.wBitsPerSample = 16; - stream_.deviceFormat[mode] = RTAUDIO_SINT16; - } - } - else { // channel == 1 - deviceFormats = WAVE_FORMAT_1M08 | WAVE_FORMAT_2M08 | WAVE_FORMAT_4M08 | WAVE_FORMAT_96M08; - if ( format == RTAUDIO_SINT8 && inCaps.dwFormats & deviceFormats ) { - waveFormat.wBitsPerSample = 8; - stream_.deviceFormat[mode] = RTAUDIO_SINT8; - } - else { // assume 16-bit is supported - waveFormat.wBitsPerSample = 16; - stream_.deviceFormat[mode] = RTAUDIO_SINT16; - } - } - stream_.userFormat = format; - - // Update wave format structure and buffer information. - waveFormat.nBlockAlign = waveFormat.nChannels * waveFormat.wBitsPerSample / 8; - waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAlign; - dsPointerLeadTime = nBuffers * (*bufferSize) * (waveFormat.wBitsPerSample / 8) * channels; - - // If the user wants an even bigger buffer, increase the device buffer size accordingly. - while ( dsPointerLeadTime * 2U > dsBufferSize ) - dsBufferSize *= 2; - - // Setup the secondary DS buffer description. - DSCBUFFERDESC bufferDescription; - ZeroMemory( &bufferDescription, sizeof( DSCBUFFERDESC ) ); - bufferDescription.dwSize = sizeof( DSCBUFFERDESC ); - bufferDescription.dwFlags = 0; - bufferDescription.dwReserved = 0; - bufferDescription.dwBufferBytes = dsBufferSize; - bufferDescription.lpwfxFormat = &waveFormat; - - // Create the capture buffer. - LPDIRECTSOUNDCAPTUREBUFFER buffer; - result = input->CreateCaptureBuffer( &bufferDescription, &buffer, NULL ); - if ( FAILED( result ) ) { - input->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") creating input buffer (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Get the buffer size ... might be different from what we specified. - DSCBCAPS dscbcaps; - dscbcaps.dwSize = sizeof( DSCBCAPS ); - result = buffer->GetCaps( &dscbcaps ); - if ( FAILED( result ) ) { - input->Release(); - buffer->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") getting buffer settings (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - dsBufferSize = dscbcaps.dwBufferBytes; - - // NOTE: We could have a problem here if this is a duplex stream - // and the play and capture hardware buffer sizes are different - // (I'm actually not sure if that is a problem or not). - // Currently, we are not verifying that. - - // Lock the capture buffer - LPVOID audioPtr; - DWORD dataLen; - result = buffer->Lock( 0, dsBufferSize, &audioPtr, &dataLen, NULL, NULL, 0 ); - if ( FAILED( result ) ) { - input->Release(); - buffer->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") locking input buffer (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Zero the buffer - ZeroMemory( audioPtr, dataLen ); - - // Unlock the buffer - result = buffer->Unlock( audioPtr, dataLen, NULL, 0 ); - if ( FAILED( result ) ) { - input->Release(); - buffer->Release(); - errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") unlocking input buffer (" << dsDevices[ device ].name << ")!"; - errorText_ = errorStream_.str(); - return FAILURE; - } - - ohandle = (void *) input; - bhandle = (void *) buffer; - } - - // Set various stream parameters - DsHandle *handle = 0; - stream_.nDeviceChannels[mode] = channels + firstChannel; - stream_.nUserChannels[mode] = channels; - stream_.bufferSize = *bufferSize; - stream_.channelOffset[mode] = firstChannel; - stream_.deviceInterleaved[mode] = true; - if ( options && options->flags & RTAUDIO_NONINTERLEAVED ) stream_.userInterleaved = false; - else stream_.userInterleaved = true; - - // Set flag for buffer conversion - stream_.doConvertBuffer[mode] = false; - if (stream_.nUserChannels[mode] != stream_.nDeviceChannels[mode]) - stream_.doConvertBuffer[mode] = true; - if (stream_.userFormat != stream_.deviceFormat[mode]) - stream_.doConvertBuffer[mode] = true; - if ( stream_.userInterleaved != stream_.deviceInterleaved[mode] && - stream_.nUserChannels[mode] > 1 ) - stream_.doConvertBuffer[mode] = true; - - // Allocate necessary internal buffers - long bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat ); - stream_.userBuffer[mode] = (char *) calloc( bufferBytes, 1 ); - if ( stream_.userBuffer[mode] == NULL ) { - errorText_ = "RtApiDs::probeDeviceOpen: error allocating user buffer memory."; - goto error; - } - - if ( stream_.doConvertBuffer[mode] ) { - - bool makeBuffer = true; - bufferBytes = stream_.nDeviceChannels[mode] * formatBytes( stream_.deviceFormat[mode] ); - if ( mode == INPUT ) { - if ( stream_.mode == OUTPUT && stream_.deviceBuffer ) { - unsigned long bytesOut = stream_.nDeviceChannels[0] * formatBytes( stream_.deviceFormat[0] ); - if ( bufferBytes <= (long) bytesOut ) makeBuffer = false; - } - } - - if ( makeBuffer ) { - bufferBytes *= *bufferSize; - if ( stream_.deviceBuffer ) free( stream_.deviceBuffer ); - stream_.deviceBuffer = (char *) calloc( bufferBytes, 1 ); - if ( stream_.deviceBuffer == NULL ) { - errorText_ = "RtApiDs::probeDeviceOpen: error allocating device buffer memory."; - goto error; - } - } - } - - // Allocate our DsHandle structures for the stream. - if ( stream_.apiHandle == 0 ) { - try { - handle = new DsHandle; - } - catch ( std::bad_alloc& ) { - errorText_ = "RtApiDs::probeDeviceOpen: error allocating AsioHandle memory."; - goto error; - } - - // Create a manual-reset event. - handle->condition = CreateEvent( NULL, // no security - TRUE, // manual-reset - FALSE, // non-signaled initially - NULL ); // unnamed - stream_.apiHandle = (void *) handle; - } - else - handle = (DsHandle *) stream_.apiHandle; - handle->id[mode] = ohandle; - handle->buffer[mode] = bhandle; - handle->dsBufferSize[mode] = dsBufferSize; - handle->dsPointerLeadTime[mode] = dsPointerLeadTime; - - stream_.device[mode] = device; - stream_.state = STREAM_STOPPED; - if ( stream_.mode == OUTPUT && mode == INPUT ) - // We had already set up an output stream. - stream_.mode = DUPLEX; - else - stream_.mode = mode; - stream_.nBuffers = nBuffers; - stream_.sampleRate = sampleRate; - - // Setup the buffer conversion information structure. - if ( stream_.doConvertBuffer[mode] ) setConvertInfo( mode, firstChannel ); - - // Setup the callback thread. - if ( stream_.callbackInfo.isRunning == false ) { - unsigned threadId; - stream_.callbackInfo.isRunning = true; - stream_.callbackInfo.object = (void *) this; - stream_.callbackInfo.thread = _beginthreadex( NULL, 0, &callbackHandler, - &stream_.callbackInfo, 0, &threadId ); - if ( stream_.callbackInfo.thread == 0 ) { - errorText_ = "RtApiDs::probeDeviceOpen: error creating callback thread!"; - goto error; - } - - // Boost DS thread priority - SetThreadPriority( (HANDLE) stream_.callbackInfo.thread, THREAD_PRIORITY_HIGHEST ); - } - return SUCCESS; - - error: - if ( handle ) { - if ( handle->buffer[0] ) { // the object pointer can be NULL and valid - LPDIRECTSOUND object = (LPDIRECTSOUND) handle->id[0]; - LPDIRECTSOUNDBUFFER buffer = (LPDIRECTSOUNDBUFFER) handle->buffer[0]; - if ( buffer ) buffer->Release(); - object->Release(); - } - if ( handle->buffer[1] ) { - LPDIRECTSOUNDCAPTURE object = (LPDIRECTSOUNDCAPTURE) handle->id[1]; - LPDIRECTSOUNDCAPTUREBUFFER buffer = (LPDIRECTSOUNDCAPTUREBUFFER) handle->buffer[1]; - if ( buffer ) buffer->Release(); - object->Release(); - } - CloseHandle( handle->condition ); - delete handle; - stream_.apiHandle = 0; - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - return FAILURE; -} - -void RtApiDs :: closeStream() -{ - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiDs::closeStream(): no open stream to close!"; - error( RtError::WARNING ); - return; - } - - // Stop the callback thread. - stream_.callbackInfo.isRunning = false; - WaitForSingleObject( (HANDLE) stream_.callbackInfo.thread, INFINITE ); - CloseHandle( (HANDLE) stream_.callbackInfo.thread ); - - DsHandle *handle = (DsHandle *) stream_.apiHandle; - if ( handle ) { - if ( handle->buffer[0] ) { // the object pointer can be NULL and valid - LPDIRECTSOUND object = (LPDIRECTSOUND) handle->id[0]; - LPDIRECTSOUNDBUFFER buffer = (LPDIRECTSOUNDBUFFER) handle->buffer[0]; - if ( buffer ) { - buffer->Stop(); - buffer->Release(); - } - object->Release(); - } - if ( handle->buffer[1] ) { - LPDIRECTSOUNDCAPTURE object = (LPDIRECTSOUNDCAPTURE) handle->id[1]; - LPDIRECTSOUNDCAPTUREBUFFER buffer = (LPDIRECTSOUNDCAPTUREBUFFER) handle->buffer[1]; - if ( buffer ) { - buffer->Stop(); - buffer->Release(); - } - object->Release(); - } - CloseHandle( handle->condition ); - delete handle; - stream_.apiHandle = 0; - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - stream_.mode = UNINITIALIZED; - stream_.state = STREAM_CLOSED; -} - -void RtApiDs :: startStream() -{ - verifyStream(); - if ( stream_.state == STREAM_RUNNING ) { - errorText_ = "RtApiDs::startStream(): the stream is already running!"; - error( RtError::WARNING ); - return; - } - - DsHandle *handle = (DsHandle *) stream_.apiHandle; - - // Increase scheduler frequency on lesser windows (a side-effect of - // increasing timer accuracy). On greater windows (Win2K or later), - // this is already in effect. - timeBeginPeriod( 1 ); - - buffersRolling = false; - duplexPrerollBytes = 0; - - if ( stream_.mode == DUPLEX ) { - // 0.5 seconds of silence in DUPLEX mode while the devices spin up and synchronize. - duplexPrerollBytes = (int) ( 0.5 * stream_.sampleRate * formatBytes( stream_.deviceFormat[1] ) * stream_.nDeviceChannels[1] ); - } - - HRESULT result = 0; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - - LPDIRECTSOUNDBUFFER buffer = (LPDIRECTSOUNDBUFFER) handle->buffer[0]; - result = buffer->Play( 0, 0, DSBPLAY_LOOPING ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::startStream: error (" << getErrorString( result ) << ") starting output buffer!"; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) { - - LPDIRECTSOUNDCAPTUREBUFFER buffer = (LPDIRECTSOUNDCAPTUREBUFFER) handle->buffer[1]; - result = buffer->Start( DSCBSTART_LOOPING ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::startStream: error (" << getErrorString( result ) << ") starting input buffer!"; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - handle->drainCounter = 0; - handle->internalDrain = false; - ResetEvent( handle->condition ); - stream_.state = STREAM_RUNNING; - - unlock: - if ( FAILED( result ) ) error( RtError::SYSTEM_ERROR ); -} - -void RtApiDs :: stopStream() -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiDs::stopStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - HRESULT result = 0; - LPVOID audioPtr; - DWORD dataLen; - DsHandle *handle = (DsHandle *) stream_.apiHandle; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - if ( handle->drainCounter == 0 ) { - handle->drainCounter = 2; - WaitForSingleObject( handle->condition, INFINITE ); // block until signaled - } - - stream_.state = STREAM_STOPPED; - - // Stop the buffer and clear memory - LPDIRECTSOUNDBUFFER buffer = (LPDIRECTSOUNDBUFFER) handle->buffer[0]; - result = buffer->Stop(); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::stopStream: error (" << getErrorString( result ) << ") stopping output buffer!"; - errorText_ = errorStream_.str(); - goto unlock; - } - - // Lock the buffer and clear it so that if we start to play again, - // we won't have old data playing. - result = buffer->Lock( 0, handle->dsBufferSize[0], &audioPtr, &dataLen, NULL, NULL, 0 ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::stopStream: error (" << getErrorString( result ) << ") locking output buffer!"; - errorText_ = errorStream_.str(); - goto unlock; - } - - // Zero the DS buffer - ZeroMemory( audioPtr, dataLen ); - - // Unlock the DS buffer - result = buffer->Unlock( audioPtr, dataLen, NULL, 0 ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::stopStream: error (" << getErrorString( result ) << ") unlocking output buffer!"; - errorText_ = errorStream_.str(); - goto unlock; - } - - // If we start playing again, we must begin at beginning of buffer. - handle->bufferPointer[0] = 0; - } - - if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) { - LPDIRECTSOUNDCAPTUREBUFFER buffer = (LPDIRECTSOUNDCAPTUREBUFFER) handle->buffer[1]; - audioPtr = NULL; - dataLen = 0; - - stream_.state = STREAM_STOPPED; - - result = buffer->Stop(); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::stopStream: error (" << getErrorString( result ) << ") stopping input buffer!"; - errorText_ = errorStream_.str(); - goto unlock; - } - - // Lock the buffer and clear it so that if we start to play again, - // we won't have old data playing. - result = buffer->Lock( 0, handle->dsBufferSize[1], &audioPtr, &dataLen, NULL, NULL, 0 ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::stopStream: error (" << getErrorString( result ) << ") locking input buffer!"; - errorText_ = errorStream_.str(); - goto unlock; - } - - // Zero the DS buffer - ZeroMemory( audioPtr, dataLen ); - - // Unlock the DS buffer - result = buffer->Unlock( audioPtr, dataLen, NULL, 0 ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::stopStream: error (" << getErrorString( result ) << ") unlocking input buffer!"; - errorText_ = errorStream_.str(); - goto unlock; - } - - // If we start recording again, we must begin at beginning of buffer. - handle->bufferPointer[1] = 0; - } - - unlock: - timeEndPeriod( 1 ); // revert to normal scheduler frequency on lesser windows. - if ( FAILED( result ) ) error( RtError::SYSTEM_ERROR ); -} - -void RtApiDs :: abortStream() -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiDs::abortStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - DsHandle *handle = (DsHandle *) stream_.apiHandle; - handle->drainCounter = 2; - - stopStream(); -} - -void RtApiDs :: callbackEvent() -{ - if ( stream_.state == STREAM_STOPPED || stream_.state == STREAM_STOPPING ) { - Sleep( 50 ); // sleep 50 milliseconds - return; - } - - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiDs::callbackEvent(): the stream is closed ... this shouldn't happen!"; - error( RtError::WARNING ); - return; - } - - CallbackInfo *info = (CallbackInfo *) &stream_.callbackInfo; - DsHandle *handle = (DsHandle *) stream_.apiHandle; - - // Check if we were draining the stream and signal is finished. - if ( handle->drainCounter > stream_.nBuffers + 2 ) { - - stream_.state = STREAM_STOPPING; - if ( handle->internalDrain == false ) - SetEvent( handle->condition ); - else - stopStream(); - return; - } - - // Invoke user callback to get fresh output data UNLESS we are - // draining stream. - if ( handle->drainCounter == 0 ) { - RtAudioCallback callback = (RtAudioCallback) info->callback; - double streamTime = getStreamTime(); - RtAudioStreamStatus status = 0; - if ( stream_.mode != INPUT && handle->xrun[0] == true ) { - status |= RTAUDIO_OUTPUT_UNDERFLOW; - handle->xrun[0] = false; - } - if ( stream_.mode != OUTPUT && handle->xrun[1] == true ) { - status |= RTAUDIO_INPUT_OVERFLOW; - handle->xrun[1] = false; - } - int cbReturnValue = callback( stream_.userBuffer[0], stream_.userBuffer[1], - stream_.bufferSize, streamTime, status, info->userData ); - if ( cbReturnValue == 2 ) { - stream_.state = STREAM_STOPPING; - handle->drainCounter = 2; - abortStream(); - return; - } - else if ( cbReturnValue == 1 ) { - handle->drainCounter = 1; - handle->internalDrain = true; - } - } - - HRESULT result; - DWORD currentWritePointer, safeWritePointer; - DWORD currentReadPointer, safeReadPointer; - UINT nextWritePointer; - - LPVOID buffer1 = NULL; - LPVOID buffer2 = NULL; - DWORD bufferSize1 = 0; - DWORD bufferSize2 = 0; - - char *buffer; - long bufferBytes; - - if ( buffersRolling == false ) { - if ( stream_.mode == DUPLEX ) { - //assert( handle->dsBufferSize[0] == handle->dsBufferSize[1] ); - - // It takes a while for the devices to get rolling. As a result, - // there's no guarantee that the capture and write device pointers - // will move in lockstep. Wait here for both devices to start - // rolling, and then set our buffer pointers accordingly. - // e.g. Crystal Drivers: the capture buffer starts up 5700 to 9600 - // bytes later than the write buffer. - - // Stub: a serious risk of having a pre-emptive scheduling round - // take place between the two GetCurrentPosition calls... but I'm - // really not sure how to solve the problem. Temporarily boost to - // Realtime priority, maybe; but I'm not sure what priority the - // DirectSound service threads run at. We *should* be roughly - // within a ms or so of correct. - - LPDIRECTSOUNDBUFFER dsWriteBuffer = (LPDIRECTSOUNDBUFFER) handle->buffer[0]; - LPDIRECTSOUNDCAPTUREBUFFER dsCaptureBuffer = (LPDIRECTSOUNDCAPTUREBUFFER) handle->buffer[1]; - - DWORD startSafeWritePointer, startSafeReadPointer; - - result = dsWriteBuffer->GetCurrentPosition( NULL, &startSafeWritePointer ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") getting current write position!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - result = dsCaptureBuffer->GetCurrentPosition( NULL, &startSafeReadPointer ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") getting current read position!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - while ( true ) { - result = dsWriteBuffer->GetCurrentPosition( NULL, &safeWritePointer ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") getting current write position!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - result = dsCaptureBuffer->GetCurrentPosition( NULL, &safeReadPointer ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") getting current read position!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - if ( safeWritePointer != startSafeWritePointer && safeReadPointer != startSafeReadPointer ) break; - Sleep( 1 ); - } - - //assert( handle->dsBufferSize[0] == handle->dsBufferSize[1] ); - - handle->bufferPointer[0] = safeWritePointer + handle->dsPointerLeadTime[0]; - if ( handle->bufferPointer[0] >= handle->dsBufferSize[0] ) handle->bufferPointer[0] -= handle->dsBufferSize[0]; - handle->bufferPointer[1] = safeReadPointer; - } - else if ( stream_.mode == OUTPUT ) { - - // Set the proper nextWritePosition after initial startup. - LPDIRECTSOUNDBUFFER dsWriteBuffer = (LPDIRECTSOUNDBUFFER) handle->buffer[0]; - result = dsWriteBuffer->GetCurrentPosition( ¤tWritePointer, &safeWritePointer ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") getting current write position!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - handle->bufferPointer[0] = safeWritePointer + handle->dsPointerLeadTime[0]; - if ( handle->bufferPointer[0] >= handle->dsBufferSize[0] ) handle->bufferPointer[0] -= handle->dsBufferSize[0]; - } - - buffersRolling = true; - } - - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - - LPDIRECTSOUNDBUFFER dsBuffer = (LPDIRECTSOUNDBUFFER) handle->buffer[0]; - - if ( handle->drainCounter > 1 ) { // write zeros to the output stream - bufferBytes = stream_.bufferSize * stream_.nUserChannels[0]; - bufferBytes *= formatBytes( stream_.userFormat ); - memset( stream_.userBuffer[0], 0, bufferBytes ); - } - - // Setup parameters and do buffer conversion if necessary. - if ( stream_.doConvertBuffer[0] ) { - buffer = stream_.deviceBuffer; - convertBuffer( buffer, stream_.userBuffer[0], stream_.convertInfo[0] ); - bufferBytes = stream_.bufferSize * stream_.nDeviceChannels[0]; - bufferBytes *= formatBytes( stream_.deviceFormat[0] ); - } - else { - buffer = stream_.userBuffer[0]; - bufferBytes = stream_.bufferSize * stream_.nUserChannels[0]; - bufferBytes *= formatBytes( stream_.userFormat ); - } - - // No byte swapping necessary in DirectSound implementation. - - // Ahhh ... windoze. 16-bit data is signed but 8-bit data is - // unsigned. So, we need to convert our signed 8-bit data here to - // unsigned. - if ( stream_.deviceFormat[0] == RTAUDIO_SINT8 ) - for ( int i=0; idsBufferSize[0]; - nextWritePointer = handle->bufferPointer[0]; - - DWORD endWrite, leadPointer; - while ( true ) { - // Find out where the read and "safe write" pointers are. - result = dsBuffer->GetCurrentPosition( ¤tWritePointer, &safeWritePointer ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") getting current write position!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - - // We will copy our output buffer into the region between - // safeWritePointer and leadPointer. If leadPointer is not - // beyond the next endWrite position, wait until it is. - leadPointer = safeWritePointer + handle->dsPointerLeadTime[0]; - //std::cout << "safeWritePointer = " << safeWritePointer << ", leadPointer = " << leadPointer << ", nextWritePointer = " << nextWritePointer << std::endl; - if ( leadPointer > dsBufferSize ) leadPointer -= dsBufferSize; - if ( leadPointer < nextWritePointer ) leadPointer += dsBufferSize; // unwrap offset - endWrite = nextWritePointer + bufferBytes; - - // Check whether the entire write region is behind the play pointer. - if ( leadPointer >= endWrite ) break; - - // If we are here, then we must wait until the leadPointer advances - // beyond the end of our next write region. We use the - // Sleep() function to suspend operation until that happens. - double millis = ( endWrite - leadPointer ) * 1000.0; - millis /= ( formatBytes( stream_.deviceFormat[0]) * stream_.nDeviceChannels[0] * stream_.sampleRate); - if ( millis < 1.0 ) millis = 1.0; - Sleep( (DWORD) millis ); - } - - if ( dsPointerBetween( nextWritePointer, safeWritePointer, currentWritePointer, dsBufferSize ) - || dsPointerBetween( endWrite, safeWritePointer, currentWritePointer, dsBufferSize ) ) { - // We've strayed into the forbidden zone ... resync the read pointer. - handle->xrun[0] = true; - nextWritePointer = safeWritePointer + handle->dsPointerLeadTime[0] - bufferBytes; - if ( nextWritePointer >= dsBufferSize ) nextWritePointer -= dsBufferSize; - handle->bufferPointer[0] = nextWritePointer; - endWrite = nextWritePointer + bufferBytes; - } - - // Lock free space in the buffer - result = dsBuffer->Lock( nextWritePointer, bufferBytes, &buffer1, - &bufferSize1, &buffer2, &bufferSize2, 0 ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") locking buffer during playback!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - - // Copy our buffer into the DS buffer - CopyMemory( buffer1, buffer, bufferSize1 ); - if ( buffer2 != NULL ) CopyMemory( buffer2, buffer+bufferSize1, bufferSize2 ); - - // Update our buffer offset and unlock sound buffer - dsBuffer->Unlock( buffer1, bufferSize1, buffer2, bufferSize2 ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") unlocking buffer during playback!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - nextWritePointer = ( nextWritePointer + bufferSize1 + bufferSize2 ) % dsBufferSize; - handle->bufferPointer[0] = nextWritePointer; - - if ( handle->drainCounter ) { - handle->drainCounter++; - goto unlock; - } - } - - if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) { - - // Setup parameters. - if ( stream_.doConvertBuffer[1] ) { - buffer = stream_.deviceBuffer; - bufferBytes = stream_.bufferSize * stream_.nDeviceChannels[1]; - bufferBytes *= formatBytes( stream_.deviceFormat[1] ); - } - else { - buffer = stream_.userBuffer[1]; - bufferBytes = stream_.bufferSize * stream_.nUserChannels[1]; - bufferBytes *= formatBytes( stream_.userFormat ); - } - - LPDIRECTSOUNDCAPTUREBUFFER dsBuffer = (LPDIRECTSOUNDCAPTUREBUFFER) handle->buffer[1]; - long nextReadPointer = handle->bufferPointer[1]; - DWORD dsBufferSize = handle->dsBufferSize[1]; - - // Find out where the write and "safe read" pointers are. - result = dsBuffer->GetCurrentPosition( ¤tReadPointer, &safeReadPointer ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") getting current read position!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - - if ( safeReadPointer < (DWORD)nextReadPointer ) safeReadPointer += dsBufferSize; // unwrap offset - DWORD endRead = nextReadPointer + bufferBytes; - - // Handling depends on whether we are INPUT or DUPLEX. - // If we're in INPUT mode then waiting is a good thing. If we're in DUPLEX mode, - // then a wait here will drag the write pointers into the forbidden zone. - // - // In DUPLEX mode, rather than wait, we will back off the read pointer until - // it's in a safe position. This causes dropouts, but it seems to be the only - // practical way to sync up the read and write pointers reliably, given the - // the very complex relationship between phase and increment of the read and write - // pointers. - // - // In order to minimize audible dropouts in DUPLEX mode, we will - // provide a pre-roll period of 0.5 seconds in which we return - // zeros from the read buffer while the pointers sync up. - - if ( stream_.mode == DUPLEX ) { - if ( safeReadPointer < endRead ) { - if ( duplexPrerollBytes <= 0 ) { - // Pre-roll time over. Be more agressive. - int adjustment = endRead-safeReadPointer; - - handle->xrun[1] = true; - // Two cases: - // - large adjustments: we've probably run out of CPU cycles, so just resync exactly, - // and perform fine adjustments later. - // - small adjustments: back off by twice as much. - if ( adjustment >= 2*bufferBytes ) - nextReadPointer = safeReadPointer-2*bufferBytes; - else - nextReadPointer = safeReadPointer-bufferBytes-adjustment; - - if ( nextReadPointer < 0 ) nextReadPointer += dsBufferSize; - - } - else { - // In pre=roll time. Just do it. - nextReadPointer = safeReadPointer - bufferBytes; - while ( nextReadPointer < 0 ) nextReadPointer += dsBufferSize; - } - endRead = nextReadPointer + bufferBytes; - } - } - else { // mode == INPUT - while ( safeReadPointer < endRead && stream_.callbackInfo.isRunning ) { - // See comments for playback. - double millis = (endRead - safeReadPointer) * 1000.0; - millis /= ( formatBytes(stream_.deviceFormat[1]) * stream_.nDeviceChannels[1] * stream_.sampleRate); - if ( millis < 1.0 ) millis = 1.0; - Sleep( (DWORD) millis ); - - // Wake up and find out where we are now. - result = dsBuffer->GetCurrentPosition( ¤tReadPointer, &safeReadPointer ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") getting current read position!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - - if ( safeReadPointer < (DWORD)nextReadPointer ) safeReadPointer += dsBufferSize; // unwrap offset - } - } - - // Lock free space in the buffer - result = dsBuffer->Lock( nextReadPointer, bufferBytes, &buffer1, - &bufferSize1, &buffer2, &bufferSize2, 0 ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") locking capture buffer!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - - if ( duplexPrerollBytes <= 0 ) { - // Copy our buffer into the DS buffer - CopyMemory( buffer, buffer1, bufferSize1 ); - if ( buffer2 != NULL ) CopyMemory( buffer+bufferSize1, buffer2, bufferSize2 ); - } - else { - memset( buffer, 0, bufferSize1 ); - if ( buffer2 != NULL ) memset( buffer + bufferSize1, 0, bufferSize2 ); - duplexPrerollBytes -= bufferSize1 + bufferSize2; - } - - // Update our buffer offset and unlock sound buffer - nextReadPointer = ( nextReadPointer + bufferSize1 + bufferSize2 ) % dsBufferSize; - dsBuffer->Unlock( buffer1, bufferSize1, buffer2, bufferSize2 ); - if ( FAILED( result ) ) { - errorStream_ << "RtApiDs::callbackEvent: error (" << getErrorString( result ) << ") unlocking capture buffer!"; - errorText_ = errorStream_.str(); - error( RtError::SYSTEM_ERROR ); - } - handle->bufferPointer[1] = nextReadPointer; - - // No byte swapping necessary in DirectSound implementation. - - // If necessary, convert 8-bit data from unsigned to signed. - if ( stream_.deviceFormat[1] == RTAUDIO_SINT8 ) - for ( int j=0; jobject; - bool* isRunning = &info->isRunning; - - while ( *isRunning == true ) { - object->callbackEvent(); - } - - _endthreadex( 0 ); - return 0; -} - -#include "tchar.h" - -std::string convertTChar( LPCTSTR name ) -{ -#if defined( UNICODE ) || defined( _UNICODE ) - int length = WideCharToMultiByte(CP_UTF8, 0, name, -1, NULL, 0, NULL, NULL); - std::string s( length, 0 ); - length = WideCharToMultiByte(CP_UTF8, 0, name, wcslen(name), &s[0], length, NULL, NULL); -#else - std::string s( name ); -#endif - - return s; -} - -static BOOL CALLBACK deviceQueryCallback( LPGUID lpguid, - LPCTSTR description, - LPCTSTR module, - LPVOID lpContext ) -{ - bool *isInput = (bool *) lpContext; - - HRESULT hr; - bool validDevice = false; - if ( *isInput == true ) { - DSCCAPS caps; - LPDIRECTSOUNDCAPTURE object; - - hr = DirectSoundCaptureCreate( lpguid, &object, NULL ); - if ( hr != DS_OK ) return TRUE; - - caps.dwSize = sizeof(caps); - hr = object->GetCaps( &caps ); - if ( hr == DS_OK ) { - if ( caps.dwChannels > 0 && caps.dwFormats > 0 ) - validDevice = true; - } - object->Release(); - } - else { - DSCAPS caps; - LPDIRECTSOUND object; - hr = DirectSoundCreate( lpguid, &object, NULL ); - if ( hr != DS_OK ) return TRUE; - - caps.dwSize = sizeof(caps); - hr = object->GetCaps( &caps ); - if ( hr == DS_OK ) { - if ( caps.dwFlags & DSCAPS_PRIMARYMONO || caps.dwFlags & DSCAPS_PRIMARYSTEREO ) - validDevice = true; - } - object->Release(); - } - - // If good device, then save its name and guid. - std::string name = convertTChar( description ); - if ( name == "Primary Sound Driver" || name == "Primary Sound Capture Driver" ) - name = "Default Device"; - if ( validDevice ) { - for ( unsigned int i=0; i -#include - - // A structure to hold various information related to the ALSA API - // implementation. -struct AlsaHandle { - snd_pcm_t *handles[2]; - bool synchronized; - bool xrun[2]; - pthread_cond_t runnable_cv; - bool runnable; - - AlsaHandle() - :synchronized(false), runnable(false) { xrun[0] = false; xrun[1] = false; } -}; - -extern "C" void *alsaCallbackHandler( void * ptr ); - -RtApiAlsa :: RtApiAlsa() -{ - // Nothing to do here. -} - -RtApiAlsa :: ~RtApiAlsa() -{ - if ( stream_.state != STREAM_CLOSED ) closeStream(); -} - -unsigned int RtApiAlsa :: getDeviceCount( void ) -{ - unsigned nDevices = 0; - int result, subdevice, card; - char name[64]; - snd_ctl_t *handle; - - // Count cards and devices - card = -1; - snd_card_next( &card ); - while ( card >= 0 ) { - sprintf( name, "hw:%d", card ); - result = snd_ctl_open( &handle, name, 0 ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::getDeviceCount: control open, card = " << card << ", " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - goto nextcard; - } - subdevice = -1; - while( 1 ) { - result = snd_ctl_pcm_next_device( handle, &subdevice ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::getDeviceCount: control next device, card = " << card << ", " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - break; - } - if ( subdevice < 0 ) - break; - nDevices++; - } - nextcard: - snd_ctl_close( handle ); - snd_card_next( &card ); - } - - return nDevices; -} - -RtAudio::DeviceInfo RtApiAlsa :: getDeviceInfo( unsigned int device ) -{ - RtAudio::DeviceInfo info; - info.probed = false; - - unsigned nDevices = 0; - int result, subdevice, card; - char name[64]; - snd_ctl_t *chandle; - - // Count cards and devices - card = -1; - snd_card_next( &card ); - while ( card >= 0 ) { - sprintf( name, "hw:%d", card ); - result = snd_ctl_open( &chandle, name, SND_CTL_NONBLOCK ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::getDeviceInfo: control open, card = " << card << ", " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - goto nextcard; - } - subdevice = -1; - while( 1 ) { - result = snd_ctl_pcm_next_device( chandle, &subdevice ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::getDeviceInfo: control next device, card = " << card << ", " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - break; - } - if ( subdevice < 0 ) break; - if ( nDevices == device ) { - sprintf( name, "hw:%d,%d", card, subdevice ); - goto foundDevice; - } - nDevices++; - } - nextcard: - snd_ctl_close( chandle ); - snd_card_next( &card ); - } - - if ( nDevices == 0 ) { - errorText_ = "RtApiAlsa::getDeviceInfo: no devices found!"; - error( RtError::INVALID_USE ); - } - - if ( device >= nDevices ) { - errorText_ = "RtApiAlsa::getDeviceInfo: device ID is invalid!"; - error( RtError::INVALID_USE ); - } - - foundDevice: - - // If a stream is already open, we cannot probe the stream devices. - // Thus, use the saved results. - if ( stream_.state != STREAM_CLOSED && - ( stream_.device[0] == device || stream_.device[1] == device ) ) { - snd_ctl_close( chandle ); - if ( device >= devices_.size() ) { - errorText_ = "RtApiAlsa::getDeviceInfo: device ID was not present before stream was opened."; - error( RtError::WARNING ); - return info; - } - return devices_[ device ]; - } - - int openMode = SND_PCM_ASYNC; - snd_pcm_stream_t stream; - snd_pcm_info_t *pcminfo; - snd_pcm_info_alloca( &pcminfo ); - snd_pcm_t *phandle; - snd_pcm_hw_params_t *params; - snd_pcm_hw_params_alloca( ¶ms ); - - // First try for playback - stream = SND_PCM_STREAM_PLAYBACK; - snd_pcm_info_set_device( pcminfo, subdevice ); - snd_pcm_info_set_subdevice( pcminfo, 0 ); - snd_pcm_info_set_stream( pcminfo, stream ); - - result = snd_ctl_pcm_info( chandle, pcminfo ); - if ( result < 0 ) { - // Device probably doesn't support playback. - goto captureProbe; - } - - result = snd_pcm_open( &phandle, name, stream, openMode | SND_PCM_NONBLOCK ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::getDeviceInfo: snd_pcm_open error for device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - goto captureProbe; - } - - // The device is open ... fill the parameter structure. - result = snd_pcm_hw_params_any( phandle, params ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::getDeviceInfo: snd_pcm_hw_params error for device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - goto captureProbe; - } - - // Get output channel information. - unsigned int value; - result = snd_pcm_hw_params_get_channels_max( params, &value ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::getDeviceInfo: error getting device (" << name << ") output channels, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - goto captureProbe; - } - info.outputChannels = value; - snd_pcm_close( phandle ); - - captureProbe: - // Now try for capture - stream = SND_PCM_STREAM_CAPTURE; - snd_pcm_info_set_stream( pcminfo, stream ); - - result = snd_ctl_pcm_info( chandle, pcminfo ); - snd_ctl_close( chandle ); - if ( result < 0 ) { - // Device probably doesn't support capture. - if ( info.outputChannels == 0 ) return info; - goto probeParameters; - } - - result = snd_pcm_open( &phandle, name, stream, openMode | SND_PCM_NONBLOCK); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::getDeviceInfo: snd_pcm_open error for device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - if ( info.outputChannels == 0 ) return info; - goto probeParameters; - } - - // The device is open ... fill the parameter structure. - result = snd_pcm_hw_params_any( phandle, params ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::getDeviceInfo: snd_pcm_hw_params error for device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - if ( info.outputChannels == 0 ) return info; - goto probeParameters; - } - - result = snd_pcm_hw_params_get_channels_max( params, &value ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::getDeviceInfo: error getting device (" << name << ") input channels, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - if ( info.outputChannels == 0 ) return info; - goto probeParameters; - } - info.inputChannels = value; - snd_pcm_close( phandle ); - - // If device opens for both playback and capture, we determine the channels. - if ( info.outputChannels > 0 && info.inputChannels > 0 ) - info.duplexChannels = (info.outputChannels > info.inputChannels) ? info.inputChannels : info.outputChannels; - - // ALSA doesn't provide default devices so we'll use the first available one. - if ( device == 0 && info.outputChannels > 0 ) - info.isDefaultOutput = true; - if ( device == 0 && info.inputChannels > 0 ) - info.isDefaultInput = true; - - probeParameters: - // At this point, we just need to figure out the supported data - // formats and sample rates. We'll proceed by opening the device in - // the direction with the maximum number of channels, or playback if - // they are equal. This might limit our sample rate options, but so - // be it. - - if ( info.outputChannels >= info.inputChannels ) - stream = SND_PCM_STREAM_PLAYBACK; - else - stream = SND_PCM_STREAM_CAPTURE; - snd_pcm_info_set_stream( pcminfo, stream ); - - result = snd_pcm_open( &phandle, name, stream, openMode | SND_PCM_NONBLOCK); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::getDeviceInfo: snd_pcm_open error for device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // The device is open ... fill the parameter structure. - result = snd_pcm_hw_params_any( phandle, params ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::getDeviceInfo: snd_pcm_hw_params error for device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // Test our discrete set of sample rate values. - info.sampleRates.clear(); - for ( unsigned int i=0; i= 0 ) - sprintf( name, "hw:%s,%d", cardname, subdevice ); - info.name = name; - - // That's all ... close the device and return - snd_pcm_close( phandle ); - info.probed = true; - return info; -} - -void RtApiAlsa :: saveDeviceInfo( void ) -{ - devices_.clear(); - - unsigned int nDevices = getDeviceCount(); - devices_.resize( nDevices ); - for ( unsigned int i=0; iflags & RTAUDIO_ALSA_USE_DEFAULT ) - snprintf(name, sizeof(name), "%s", "default"); - else { - // Count cards and devices - card = -1; - snd_card_next( &card ); - while ( card >= 0 ) { - sprintf( name, "hw:%d", card ); - result = snd_ctl_open( &chandle, name, SND_CTL_NONBLOCK ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::probeDeviceOpen: control open, card = " << card << ", " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - subdevice = -1; - while( 1 ) { - result = snd_ctl_pcm_next_device( chandle, &subdevice ); - if ( result < 0 ) break; - if ( subdevice < 0 ) break; - if ( nDevices == device ) { - sprintf( name, "hw:%d,%d", card, subdevice ); - snd_ctl_close( chandle ); - goto foundDevice; - } - nDevices++; - } - snd_ctl_close( chandle ); - snd_card_next( &card ); - } - - if ( nDevices == 0 ) { - // This should not happen because a check is made before this function is called. - errorText_ = "RtApiAlsa::probeDeviceOpen: no devices found!"; - return FAILURE; - } - - if ( device >= nDevices ) { - // This should not happen because a check is made before this function is called. - errorText_ = "RtApiAlsa::probeDeviceOpen: device ID is invalid!"; - return FAILURE; - } - } - - foundDevice: - - // The getDeviceInfo() function will not work for a device that is - // already open. Thus, we'll probe the system before opening a - // stream and save the results for use by getDeviceInfo(). - if ( mode == OUTPUT || ( mode == INPUT && stream_.mode != OUTPUT ) ) // only do once - this->saveDeviceInfo(); - - snd_pcm_stream_t stream; - if ( mode == OUTPUT ) - stream = SND_PCM_STREAM_PLAYBACK; - else - stream = SND_PCM_STREAM_CAPTURE; - - snd_pcm_t *phandle; - int openMode = SND_PCM_ASYNC; - result = snd_pcm_open( &phandle, name, stream, openMode ); - if ( result < 0 ) { - if ( mode == OUTPUT ) - errorStream_ << "RtApiAlsa::probeDeviceOpen: pcm device (" << name << ") won't open for output."; - else - errorStream_ << "RtApiAlsa::probeDeviceOpen: pcm device (" << name << ") won't open for input."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Fill the parameter structure. - snd_pcm_hw_params_t *hw_params; - snd_pcm_hw_params_alloca( &hw_params ); - result = snd_pcm_hw_params_any( phandle, hw_params ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error getting pcm device (" << name << ") parameters, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - -#if defined(__RTAUDIO_DEBUG__) - fprintf( stderr, "\nRtApiAlsa: dump hardware params just after device open:\n\n" ); - snd_pcm_hw_params_dump( hw_params, out ); -#endif - - // Set access ... check user preference. - if ( options && options->flags & RTAUDIO_NONINTERLEAVED ) { - stream_.userInterleaved = false; - result = snd_pcm_hw_params_set_access( phandle, hw_params, SND_PCM_ACCESS_RW_NONINTERLEAVED ); - if ( result < 0 ) { - result = snd_pcm_hw_params_set_access( phandle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED ); - stream_.deviceInterleaved[mode] = true; - } - else - stream_.deviceInterleaved[mode] = false; - } - else { - stream_.userInterleaved = true; - result = snd_pcm_hw_params_set_access( phandle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED ); - if ( result < 0 ) { - result = snd_pcm_hw_params_set_access( phandle, hw_params, SND_PCM_ACCESS_RW_NONINTERLEAVED ); - stream_.deviceInterleaved[mode] = false; - } - else - stream_.deviceInterleaved[mode] = true; - } - - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error setting pcm device (" << name << ") access, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Determine how to set the device format. - stream_.userFormat = format; - snd_pcm_format_t deviceFormat = SND_PCM_FORMAT_UNKNOWN; - - if ( format == RTAUDIO_SINT8 ) - deviceFormat = SND_PCM_FORMAT_S8; - else if ( format == RTAUDIO_SINT16 ) - deviceFormat = SND_PCM_FORMAT_S16; - else if ( format == RTAUDIO_SINT24 ) - deviceFormat = SND_PCM_FORMAT_S24; - else if ( format == RTAUDIO_SINT32 ) - deviceFormat = SND_PCM_FORMAT_S32; - else if ( format == RTAUDIO_FLOAT32 ) - deviceFormat = SND_PCM_FORMAT_FLOAT; - else if ( format == RTAUDIO_FLOAT64 ) - deviceFormat = SND_PCM_FORMAT_FLOAT64; - - if ( snd_pcm_hw_params_test_format(phandle, hw_params, deviceFormat) == 0) { - stream_.deviceFormat[mode] = format; - goto setFormat; - } - - // The user requested format is not natively supported by the device. - deviceFormat = SND_PCM_FORMAT_FLOAT64; - if ( snd_pcm_hw_params_test_format( phandle, hw_params, deviceFormat ) == 0 ) { - stream_.deviceFormat[mode] = RTAUDIO_FLOAT64; - goto setFormat; - } - - deviceFormat = SND_PCM_FORMAT_FLOAT; - if ( snd_pcm_hw_params_test_format(phandle, hw_params, deviceFormat ) == 0 ) { - stream_.deviceFormat[mode] = RTAUDIO_FLOAT32; - goto setFormat; - } - - deviceFormat = SND_PCM_FORMAT_S32; - if ( snd_pcm_hw_params_test_format(phandle, hw_params, deviceFormat ) == 0 ) { - stream_.deviceFormat[mode] = RTAUDIO_SINT32; - goto setFormat; - } - - deviceFormat = SND_PCM_FORMAT_S24; - if ( snd_pcm_hw_params_test_format(phandle, hw_params, deviceFormat ) == 0 ) { - stream_.deviceFormat[mode] = RTAUDIO_SINT24; - goto setFormat; - } - - deviceFormat = SND_PCM_FORMAT_S16; - if ( snd_pcm_hw_params_test_format(phandle, hw_params, deviceFormat ) == 0 ) { - stream_.deviceFormat[mode] = RTAUDIO_SINT16; - goto setFormat; - } - - deviceFormat = SND_PCM_FORMAT_S8; - if ( snd_pcm_hw_params_test_format(phandle, hw_params, deviceFormat ) == 0 ) { - stream_.deviceFormat[mode] = RTAUDIO_SINT8; - goto setFormat; - } - - // If we get here, no supported format was found. - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: pcm device " << device << " data format not supported by RtAudio."; - errorText_ = errorStream_.str(); - return FAILURE; - - setFormat: - result = snd_pcm_hw_params_set_format( phandle, hw_params, deviceFormat ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error setting pcm device (" << name << ") data format, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Determine whether byte-swaping is necessary. - stream_.doByteSwap[mode] = false; - if ( deviceFormat != SND_PCM_FORMAT_S8 ) { - result = snd_pcm_format_cpu_endian( deviceFormat ); - if ( result == 0 ) - stream_.doByteSwap[mode] = true; - else if (result < 0) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error getting pcm device (" << name << ") endian-ness, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - } - - // Set the sample rate. - result = snd_pcm_hw_params_set_rate_near( phandle, hw_params, (unsigned int*) &sampleRate, 0 ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error setting sample rate on device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Determine the number of channels for this device. We support a possible - // minimum device channel number > than the value requested by the user. - stream_.nUserChannels[mode] = channels; - unsigned int value; - result = snd_pcm_hw_params_get_channels_max( hw_params, &value ); - unsigned int deviceChannels = value; - if ( result < 0 || deviceChannels < channels + firstChannel ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: requested channel parameters not supported by device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - result = snd_pcm_hw_params_get_channels_min( hw_params, &value ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error getting minimum channels for device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - deviceChannels = value; - if ( deviceChannels < channels + firstChannel ) deviceChannels = channels + firstChannel; - stream_.nDeviceChannels[mode] = deviceChannels; - - // Set the device channels. - result = snd_pcm_hw_params_set_channels( phandle, hw_params, deviceChannels ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error setting channels for device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Set the buffer (or period) size. - int dir = 0; - snd_pcm_uframes_t periodSize = *bufferSize; - result = snd_pcm_hw_params_set_period_size_near( phandle, hw_params, &periodSize, &dir ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error setting period size for device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - *bufferSize = periodSize; - - // Set the buffer number, which in ALSA is referred to as the "period". - unsigned int periods = 0; - if ( options && options->flags & RTAUDIO_MINIMIZE_LATENCY ) periods = 2; - if ( options && options->numberOfBuffers > 0 ) periods = options->numberOfBuffers; - if ( periods < 2 ) periods = 4; // a fairly safe default value - result = snd_pcm_hw_params_set_periods_near( phandle, hw_params, &periods, &dir ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error setting periods for device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // If attempting to setup a duplex stream, the bufferSize parameter - // MUST be the same in both directions! - if ( stream_.mode == OUTPUT && mode == INPUT && *bufferSize != stream_.bufferSize ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: system error setting buffer size for duplex stream on device (" << name << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - stream_.bufferSize = *bufferSize; - - // Install the hardware configuration - result = snd_pcm_hw_params( phandle, hw_params ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error installing hardware configuration on device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - -#if defined(__RTAUDIO_DEBUG__) - fprintf(stderr, "\nRtApiAlsa: dump hardware params after installation:\n\n"); - snd_pcm_hw_params_dump( hw_params, out ); -#endif - - // Set the software configuration to fill buffers with zeros and prevent device stopping on xruns. - snd_pcm_sw_params_t *sw_params = NULL; - snd_pcm_sw_params_alloca( &sw_params ); - snd_pcm_sw_params_current( phandle, sw_params ); - snd_pcm_sw_params_set_start_threshold( phandle, sw_params, *bufferSize ); - snd_pcm_sw_params_set_stop_threshold( phandle, sw_params, ULONG_MAX ); - snd_pcm_sw_params_set_silence_threshold( phandle, sw_params, 0 ); - - // The following two settings were suggested by Theo Veenker - //snd_pcm_sw_params_set_avail_min( phandle, sw_params, *bufferSize ); - //snd_pcm_sw_params_set_xfer_align( phandle, sw_params, 1 ); - - // here are two options for a fix - //snd_pcm_sw_params_set_silence_size( phandle, sw_params, ULONG_MAX ); - snd_pcm_uframes_t val; - snd_pcm_sw_params_get_boundary( sw_params, &val ); - snd_pcm_sw_params_set_silence_size( phandle, sw_params, val ); - - result = snd_pcm_sw_params( phandle, sw_params ); - if ( result < 0 ) { - snd_pcm_close( phandle ); - errorStream_ << "RtApiAlsa::probeDeviceOpen: error installing software configuration on device (" << name << "), " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - return FAILURE; - } - -#if defined(__RTAUDIO_DEBUG__) - fprintf(stderr, "\nRtApiAlsa: dump software params after installation:\n\n"); - snd_pcm_sw_params_dump( sw_params, out ); -#endif - - // Set flags for buffer conversion - stream_.doConvertBuffer[mode] = false; - if ( stream_.userFormat != stream_.deviceFormat[mode] ) - stream_.doConvertBuffer[mode] = true; - if ( stream_.nUserChannels[mode] < stream_.nDeviceChannels[mode] ) - stream_.doConvertBuffer[mode] = true; - if ( stream_.userInterleaved != stream_.deviceInterleaved[mode] && - stream_.nUserChannels[mode] > 1 ) - stream_.doConvertBuffer[mode] = true; - - // Allocate the ApiHandle if necessary and then save. - AlsaHandle *apiInfo = 0; - if ( stream_.apiHandle == 0 ) { - try { - apiInfo = (AlsaHandle *) new AlsaHandle; - } - catch ( std::bad_alloc& ) { - errorText_ = "RtApiAlsa::probeDeviceOpen: error allocating AlsaHandle memory."; - goto error; - } - - if ( pthread_cond_init( &apiInfo->runnable_cv, NULL ) ) { - errorText_ = "RtApiAlsa::probeDeviceOpen: error initializing pthread condition variable."; - goto error; - } - - stream_.apiHandle = (void *) apiInfo; - apiInfo->handles[0] = 0; - apiInfo->handles[1] = 0; - } - else { - apiInfo = (AlsaHandle *) stream_.apiHandle; - } - apiInfo->handles[mode] = phandle; - phandle = 0; - - // Allocate necessary internal buffers. - unsigned long bufferBytes; - bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat ); - stream_.userBuffer[mode] = (char *) calloc( bufferBytes, 1 ); - if ( stream_.userBuffer[mode] == NULL ) { - errorText_ = "RtApiAlsa::probeDeviceOpen: error allocating user buffer memory."; - goto error; - } - - if ( stream_.doConvertBuffer[mode] ) { - - bool makeBuffer = true; - bufferBytes = stream_.nDeviceChannels[mode] * formatBytes( stream_.deviceFormat[mode] ); - if ( mode == INPUT ) { - if ( stream_.mode == OUTPUT && stream_.deviceBuffer ) { - unsigned long bytesOut = stream_.nDeviceChannels[0] * formatBytes( stream_.deviceFormat[0] ); - if ( bufferBytes <= bytesOut ) makeBuffer = false; - } - } - - if ( makeBuffer ) { - bufferBytes *= *bufferSize; - if ( stream_.deviceBuffer ) free( stream_.deviceBuffer ); - stream_.deviceBuffer = (char *) calloc( bufferBytes, 1 ); - if ( stream_.deviceBuffer == NULL ) { - errorText_ = "RtApiAlsa::probeDeviceOpen: error allocating device buffer memory."; - goto error; - } - } - } - - stream_.sampleRate = sampleRate; - stream_.nBuffers = periods; - stream_.device[mode] = device; - stream_.state = STREAM_STOPPED; - - // Setup the buffer conversion information structure. - if ( stream_.doConvertBuffer[mode] ) setConvertInfo( mode, firstChannel ); - - // Setup thread if necessary. - if ( stream_.mode == OUTPUT && mode == INPUT ) { - // We had already set up an output stream. - stream_.mode = DUPLEX; - // Link the streams if possible. - apiInfo->synchronized = false; - if ( snd_pcm_link( apiInfo->handles[0], apiInfo->handles[1] ) == 0 ) - apiInfo->synchronized = true; - else { - errorText_ = "RtApiAlsa::probeDeviceOpen: unable to synchronize input and output devices."; - error( RtError::WARNING ); - } - } - else { - stream_.mode = mode; - - // Setup callback thread. - stream_.callbackInfo.object = (void *) this; - - // Set the thread attributes for joinable and realtime scheduling - // priority (optional). The higher priority will only take affect - // if the program is run as root or suid. Note, under Linux - // processes with CAP_SYS_NICE privilege, a user can change - // scheduling policy and priority (thus need not be root). See - // POSIX "capabilities". - pthread_attr_t attr; - pthread_attr_init( &attr ); - pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE ); -#ifdef SCHED_RR // Undefined with some OSes (eg: NetBSD 1.6.x with GNU Pthread) - if ( options && options->flags & RTAUDIO_SCHEDULE_REALTIME ) { - struct sched_param param; - int priority = options->priority; - int min = sched_get_priority_min( SCHED_RR ); - int max = sched_get_priority_max( SCHED_RR ); - if ( priority < min ) priority = min; - else if ( priority > max ) priority = max; - param.sched_priority = priority; - pthread_attr_setschedparam( &attr, ¶m ); - pthread_attr_setschedpolicy( &attr, SCHED_RR ); - } - else - pthread_attr_setschedpolicy( &attr, SCHED_OTHER ); -#else - pthread_attr_setschedpolicy( &attr, SCHED_OTHER ); -#endif - - stream_.callbackInfo.isRunning = true; - result = pthread_create( &stream_.callbackInfo.thread, &attr, alsaCallbackHandler, &stream_.callbackInfo ); - pthread_attr_destroy( &attr ); - if ( result ) { - stream_.callbackInfo.isRunning = false; - errorText_ = "RtApiAlsa::error creating callback thread!"; - goto error; - } - } - - return SUCCESS; - - error: - if ( apiInfo ) { - pthread_cond_destroy( &apiInfo->runnable_cv ); - if ( apiInfo->handles[0] ) snd_pcm_close( apiInfo->handles[0] ); - if ( apiInfo->handles[1] ) snd_pcm_close( apiInfo->handles[1] ); - delete apiInfo; - stream_.apiHandle = 0; - } - - if ( phandle) snd_pcm_close( phandle ); - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - return FAILURE; -} - -void RtApiAlsa :: closeStream() -{ - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiAlsa::closeStream(): no open stream to close!"; - error( RtError::WARNING ); - return; - } - - AlsaHandle *apiInfo = (AlsaHandle *) stream_.apiHandle; - stream_.callbackInfo.isRunning = false; - MUTEX_LOCK( &stream_.mutex ); - if ( stream_.state == STREAM_STOPPED ) { - apiInfo->runnable = true; - pthread_cond_signal( &apiInfo->runnable_cv ); - } - MUTEX_UNLOCK( &stream_.mutex ); - pthread_join( stream_.callbackInfo.thread, NULL ); - - if ( stream_.state == STREAM_RUNNING ) { - stream_.state = STREAM_STOPPED; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) - snd_pcm_drop( apiInfo->handles[0] ); - if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) - snd_pcm_drop( apiInfo->handles[1] ); - } - - if ( apiInfo ) { - pthread_cond_destroy( &apiInfo->runnable_cv ); - if ( apiInfo->handles[0] ) snd_pcm_close( apiInfo->handles[0] ); - if ( apiInfo->handles[1] ) snd_pcm_close( apiInfo->handles[1] ); - delete apiInfo; - stream_.apiHandle = 0; - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - stream_.mode = UNINITIALIZED; - stream_.state = STREAM_CLOSED; -} - -void RtApiAlsa :: startStream() -{ - // This method calls snd_pcm_prepare if the device isn't already in that state. - - verifyStream(); - if ( stream_.state == STREAM_RUNNING ) { - errorText_ = "RtApiAlsa::startStream(): the stream is already running!"; - error( RtError::WARNING ); - return; - } - - MUTEX_LOCK( &stream_.mutex ); - - int result = 0; - snd_pcm_state_t state; - AlsaHandle *apiInfo = (AlsaHandle *) stream_.apiHandle; - snd_pcm_t **handle = (snd_pcm_t **) apiInfo->handles; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - state = snd_pcm_state( handle[0] ); - if ( state != SND_PCM_STATE_PREPARED ) { - result = snd_pcm_prepare( handle[0] ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::startStream: error preparing output pcm device, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - } - - if ( ( stream_.mode == INPUT || stream_.mode == DUPLEX ) && !apiInfo->synchronized ) { - state = snd_pcm_state( handle[1] ); - if ( state != SND_PCM_STATE_PREPARED ) { - result = snd_pcm_prepare( handle[1] ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::startStream: error preparing input pcm device, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - } - - stream_.state = STREAM_RUNNING; - - unlock: - apiInfo->runnable = true; - pthread_cond_signal( &apiInfo->runnable_cv ); - MUTEX_UNLOCK( &stream_.mutex ); - - if ( result >= 0 ) return; - error( RtError::SYSTEM_ERROR ); -} - -void RtApiAlsa :: stopStream() -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiAlsa::stopStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - stream_.state = STREAM_STOPPED; - MUTEX_LOCK( &stream_.mutex ); - - int result = 0; - AlsaHandle *apiInfo = (AlsaHandle *) stream_.apiHandle; - snd_pcm_t **handle = (snd_pcm_t **) apiInfo->handles; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - if ( apiInfo->synchronized ) - result = snd_pcm_drop( handle[0] ); - else - result = snd_pcm_drain( handle[0] ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::stopStream: error draining output pcm device, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - if ( ( stream_.mode == INPUT || stream_.mode == DUPLEX ) && !apiInfo->synchronized ) { - result = snd_pcm_drop( handle[1] ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::stopStream: error stopping input pcm device, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - unlock: - MUTEX_UNLOCK( &stream_.mutex ); - - if ( result >= 0 ) return; - error( RtError::SYSTEM_ERROR ); -} - -void RtApiAlsa :: abortStream() -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiAlsa::abortStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - stream_.state = STREAM_STOPPED; - MUTEX_LOCK( &stream_.mutex ); - - int result = 0; - AlsaHandle *apiInfo = (AlsaHandle *) stream_.apiHandle; - snd_pcm_t **handle = (snd_pcm_t **) apiInfo->handles; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - result = snd_pcm_drop( handle[0] ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::abortStream: error aborting output pcm device, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - if ( ( stream_.mode == INPUT || stream_.mode == DUPLEX ) && !apiInfo->synchronized ) { - result = snd_pcm_drop( handle[1] ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::abortStream: error aborting input pcm device, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - unlock: - MUTEX_UNLOCK( &stream_.mutex ); - - if ( result >= 0 ) return; - error( RtError::SYSTEM_ERROR ); -} - -void RtApiAlsa :: callbackEvent() -{ - AlsaHandle *apiInfo = (AlsaHandle *) stream_.apiHandle; - if ( stream_.state == STREAM_STOPPED ) { - MUTEX_LOCK( &stream_.mutex ); - while ( !apiInfo->runnable ) - pthread_cond_wait( &apiInfo->runnable_cv, &stream_.mutex ); - - if ( stream_.state != STREAM_RUNNING ) { - MUTEX_UNLOCK( &stream_.mutex ); - return; - } - MUTEX_UNLOCK( &stream_.mutex ); - } - - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiAlsa::callbackEvent(): the stream is closed ... this shouldn't happen!"; - error( RtError::WARNING ); - return; - } - - int doStopStream = 0; - RtAudioCallback callback = (RtAudioCallback) stream_.callbackInfo.callback; - double streamTime = getStreamTime(); - RtAudioStreamStatus status = 0; - if ( stream_.mode != INPUT && apiInfo->xrun[0] == true ) { - status |= RTAUDIO_OUTPUT_UNDERFLOW; - apiInfo->xrun[0] = false; - } - if ( stream_.mode != OUTPUT && apiInfo->xrun[1] == true ) { - status |= RTAUDIO_INPUT_OVERFLOW; - apiInfo->xrun[1] = false; - } - doStopStream = callback( stream_.userBuffer[0], stream_.userBuffer[1], - stream_.bufferSize, streamTime, status, stream_.callbackInfo.userData ); - - if ( doStopStream == 2 ) { - abortStream(); - return; - } - - MUTEX_LOCK( &stream_.mutex ); - - // The state might change while waiting on a mutex. - if ( stream_.state == STREAM_STOPPED ) goto unlock; - - int result; - char *buffer; - int channels; - snd_pcm_t **handle; - snd_pcm_sframes_t frames; - RtAudioFormat format; - handle = (snd_pcm_t **) apiInfo->handles; - - if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) { - - // Setup parameters. - if ( stream_.doConvertBuffer[1] ) { - buffer = stream_.deviceBuffer; - channels = stream_.nDeviceChannels[1]; - format = stream_.deviceFormat[1]; - } - else { - buffer = stream_.userBuffer[1]; - channels = stream_.nUserChannels[1]; - format = stream_.userFormat; - } - - // Read samples from device in interleaved/non-interleaved format. - if ( stream_.deviceInterleaved[1] ) - result = snd_pcm_readi( handle[1], buffer, stream_.bufferSize ); - else { - void *bufs[channels]; - size_t offset = stream_.bufferSize * formatBytes( format ); - for ( int i=0; ixrun[1] = true; - result = snd_pcm_prepare( handle[1] ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::callbackEvent: error preparing device after overrun, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - } - } - else { - errorStream_ << "RtApiAlsa::callbackEvent: error, current state is " << snd_pcm_state_name( state ) << ", " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - } - } - else { - errorStream_ << "RtApiAlsa::callbackEvent: audio read error, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - } - error( RtError::WARNING ); - goto tryOutput; - } - - // Do byte swapping if necessary. - if ( stream_.doByteSwap[1] ) - byteSwapBuffer( buffer, stream_.bufferSize * channels, format ); - - // Do buffer conversion if necessary. - if ( stream_.doConvertBuffer[1] ) - convertBuffer( stream_.userBuffer[1], stream_.deviceBuffer, stream_.convertInfo[1] ); - - // Check stream latency - result = snd_pcm_delay( handle[1], &frames ); - if ( result == 0 && frames > 0 ) stream_.latency[1] = frames; - } - - tryOutput: - - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - - // Setup parameters and do buffer conversion if necessary. - if ( stream_.doConvertBuffer[0] ) { - buffer = stream_.deviceBuffer; - convertBuffer( buffer, stream_.userBuffer[0], stream_.convertInfo[0] ); - channels = stream_.nDeviceChannels[0]; - format = stream_.deviceFormat[0]; - } - else { - buffer = stream_.userBuffer[0]; - channels = stream_.nUserChannels[0]; - format = stream_.userFormat; - } - - // Do byte swapping if necessary. - if ( stream_.doByteSwap[0] ) - byteSwapBuffer(buffer, stream_.bufferSize * channels, format); - - // Write samples to device in interleaved/non-interleaved format. - if ( stream_.deviceInterleaved[0] ) - result = snd_pcm_writei( handle[0], buffer, stream_.bufferSize ); - else { - void *bufs[channels]; - size_t offset = stream_.bufferSize * formatBytes( format ); - for ( int i=0; ixrun[0] = true; - result = snd_pcm_prepare( handle[0] ); - if ( result < 0 ) { - errorStream_ << "RtApiAlsa::callbackEvent: error preparing device after underrun, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - } - } - else { - errorStream_ << "RtApiAlsa::callbackEvent: error, current state is " << snd_pcm_state_name( state ) << ", " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - } - } - else { - errorStream_ << "RtApiAlsa::callbackEvent: audio write error, " << snd_strerror( result ) << "."; - errorText_ = errorStream_.str(); - } - error( RtError::WARNING ); - goto unlock; - } - - // Check stream latency - result = snd_pcm_delay( handle[0], &frames ); - if ( result == 0 && frames > 0 ) stream_.latency[0] = frames; - } - - unlock: - MUTEX_UNLOCK( &stream_.mutex ); - - RtApi::tickStreamTime(); - if ( doStopStream == 1 ) this->stopStream(); -} - -extern "C" void *alsaCallbackHandler( void *ptr ) -{ - CallbackInfo *info = (CallbackInfo *) ptr; - RtApiAlsa *object = (RtApiAlsa *) info->object; - bool *isRunning = &info->isRunning; - - while ( *isRunning == true ) { - pthread_testcancel(); - object->callbackEvent(); - } - - pthread_exit( NULL ); -} - -//******************** End of __LINUX_ALSA__ *********************// -#endif - -#if defined(__LINUX_PULSE__) - -// Code written by Peter Meerwald, pmeerw@pmeerw.net -// and Tristan Matthews. - -#include -#include -#include - -namespace { -const unsigned int SUPPORTED_SAMPLERATES[] = { 8000, 16000, 22050, 32000, - 44100, 48000, 96000, 0}; } - -struct rtaudio_pa_format_mapping_t { - RtAudioFormat rtaudio_format; - pa_sample_format_t pa_format; -}; - -static const rtaudio_pa_format_mapping_t supported_sampleformats[] = { - {RTAUDIO_SINT16, PA_SAMPLE_S16LE}, - {RTAUDIO_SINT32, PA_SAMPLE_S32LE}, - {RTAUDIO_FLOAT32, PA_SAMPLE_FLOAT32LE}, - {0, PA_SAMPLE_INVALID}}; - -struct PulseAudioHandle { - pa_simple *s_play; - pa_simple *s_rec; - pthread_t thread; - pthread_cond_t runnable_cv; - bool runnable; - PulseAudioHandle() : s_play(0), s_rec(0), runnable(false) { } -}; - -RtApiPulse::~RtApiPulse() -{ - if ( stream_.state != STREAM_CLOSED ) - closeStream(); -} - -unsigned int RtApiPulse::getDeviceCount( void ) -{ - return 1; -} - -RtAudio::DeviceInfo RtApiPulse::getDeviceInfo( unsigned int device ) -{ - RtAudio::DeviceInfo info; - info.probed = true; - info.name = "PulseAudio"; - info.outputChannels = 2; - info.inputChannels = 2; - info.duplexChannels = 2; - info.isDefaultOutput = true; - info.isDefaultInput = true; - - for ( const unsigned int *sr = SUPPORTED_SAMPLERATES; *sr; ++sr ) - info.sampleRates.push_back( *sr ); - - info.nativeFormats = RTAUDIO_SINT16 | RTAUDIO_SINT32 | RTAUDIO_FLOAT32; - - return info; -} - -extern "C" void *pulseaudio_callback( void * user ) -{ - CallbackInfo *cbi = static_cast( user ); - RtApiPulse *context = static_cast( cbi->object ); - volatile bool *isRunning = &cbi->isRunning; - - while ( *isRunning ) { - pthread_testcancel(); - context->callbackEvent(); - } - - pthread_exit( NULL ); -} - -void RtApiPulse::closeStream( void ) -{ - PulseAudioHandle *pah = static_cast( stream_.apiHandle ); - - stream_.callbackInfo.isRunning = false; - if ( pah ) { - MUTEX_LOCK( &stream_.mutex ); - if ( stream_.state == STREAM_STOPPED ) { - pah->runnable = true; - pthread_cond_signal( &pah->runnable_cv ); - } - MUTEX_UNLOCK( &stream_.mutex ); - - pthread_join( pah->thread, 0 ); - if ( pah->s_play ) { - pa_simple_flush( pah->s_play, NULL ); - pa_simple_free( pah->s_play ); - } - if ( pah->s_rec ) - pa_simple_free( pah->s_rec ); - - pthread_cond_destroy( &pah->runnable_cv ); - delete pah; - stream_.apiHandle = 0; - } - - if ( stream_.userBuffer[0] ) { - free( stream_.userBuffer[0] ); - stream_.userBuffer[0] = 0; - } - if ( stream_.userBuffer[1] ) { - free( stream_.userBuffer[1] ); - stream_.userBuffer[1] = 0; - } - - stream_.state = STREAM_CLOSED; - stream_.mode = UNINITIALIZED; -} - -void RtApiPulse::callbackEvent( void ) -{ - PulseAudioHandle *pah = static_cast( stream_.apiHandle ); - - if ( stream_.state == STREAM_STOPPED ) { - MUTEX_LOCK( &stream_.mutex ); - while ( !pah->runnable ) - pthread_cond_wait( &pah->runnable_cv, &stream_.mutex ); - - if ( stream_.state != STREAM_RUNNING ) { - MUTEX_UNLOCK( &stream_.mutex ); - return; - } - MUTEX_UNLOCK( &stream_.mutex ); - } - - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiPulse::callbackEvent(): the stream is closed ... " - "this shouldn't happen!"; - error( RtError::WARNING ); - return; - } - - RtAudioCallback callback = (RtAudioCallback) stream_.callbackInfo.callback; - double streamTime = getStreamTime(); - RtAudioStreamStatus status = 0; - int doStopStream = callback( stream_.userBuffer[0], stream_.userBuffer[1], - stream_.bufferSize, streamTime, status, - stream_.callbackInfo.userData ); - - if ( doStopStream == 2 ) { - abortStream(); - return; - } - - MUTEX_LOCK( &stream_.mutex ); - - if ( stream_.state != STREAM_RUNNING ) - goto unlock; - - int pa_error; - size_t bytes; - switch ( stream_.mode ) { - case INPUT: - bytes = stream_.nUserChannels[1] * stream_.bufferSize * formatBytes( stream_.userFormat ); - if ( pa_simple_read( pah->s_rec, stream_.userBuffer[1], bytes, &pa_error ) < 0 ) { - errorStream_ << "RtApiPulse::callbackEvent: audio read error, " << - pa_strerror( pa_error ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - } - break; - case OUTPUT: - bytes = stream_.nUserChannels[0] * stream_.bufferSize * formatBytes( stream_.userFormat ); - if ( pa_simple_write( pah->s_play, stream_.userBuffer[0], bytes, &pa_error ) < 0 ) { - errorStream_ << "RtApiPulse::callbackEvent: audio write error, " << - pa_strerror( pa_error ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - } - break; - case DUPLEX: - bytes = stream_.nUserChannels[1] * stream_.bufferSize * formatBytes( stream_.userFormat ); - if ( pa_simple_read( pah->s_rec, stream_.userBuffer[1], bytes, &pa_error ) < 0 ) { - errorStream_ << "RtApiPulse::callbackEvent: audio read error, " << - pa_strerror( pa_error ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - } - bytes = stream_.nUserChannels[0] * stream_.bufferSize * formatBytes( stream_.userFormat ); - if ( pa_simple_write( pah->s_play, stream_.userBuffer[0], bytes, &pa_error ) < 0) { - errorStream_ << "RtApiPulse::callbackEvent: audio write error, " << - pa_strerror( pa_error ) << "."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - } - break; - default: - // ERROR - break; - } - - unlock: - MUTEX_UNLOCK( &stream_.mutex ); - RtApi::tickStreamTime(); - - if ( doStopStream == 1 ) - stopStream(); -} - -void RtApiPulse::startStream( void ) -{ - PulseAudioHandle *pah = static_cast( stream_.apiHandle ); - - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiPulse::startStream(): the stream is not open!"; - error( RtError::INVALID_USE ); - return; - } - if ( stream_.state == STREAM_RUNNING ) { - errorText_ = "RtApiPulse::startStream(): the stream is already running!"; - error( RtError::WARNING ); - return; - } - - MUTEX_LOCK( &stream_.mutex ); - - stream_.state = STREAM_RUNNING; - - pah->runnable = true; - pthread_cond_signal( &pah->runnable_cv ); - MUTEX_UNLOCK( &stream_.mutex ); -} - -void RtApiPulse::stopStream( void ) -{ - PulseAudioHandle *pah = static_cast( stream_.apiHandle ); - - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiPulse::stopStream(): the stream is not open!"; - error( RtError::INVALID_USE ); - return; - } - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiPulse::stopStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - stream_.state = STREAM_STOPPED; - MUTEX_LOCK( &stream_.mutex ); - - if ( pah && pah->s_play ) { - int pa_error; - if ( pa_simple_drain( pah->s_play, &pa_error ) < 0 ) { - errorStream_ << "RtApiPulse::stopStream: error draining output device, " << - pa_strerror( pa_error ) << "."; - errorText_ = errorStream_.str(); - MUTEX_UNLOCK( &stream_.mutex ); - error( RtError::SYSTEM_ERROR ); - } - } - - stream_.state = STREAM_STOPPED; - MUTEX_UNLOCK( &stream_.mutex ); -} - -void RtApiPulse::abortStream( void ) -{ - PulseAudioHandle *pah = static_cast( stream_.apiHandle ); - - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiPulse::abortStream(): the stream is not open!"; - error( RtError::INVALID_USE ); - return; - } - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiPulse::abortStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - stream_.state = STREAM_STOPPED; - MUTEX_LOCK( &stream_.mutex ); - - if ( pah && pah->s_play ) { - int pa_error; - if ( pa_simple_flush( pah->s_play, &pa_error ) < 0 ) { - errorStream_ << "RtApiPulse::abortStream: error flushing output device, " << - pa_strerror( pa_error ) << "."; - errorText_ = errorStream_.str(); - MUTEX_UNLOCK( &stream_.mutex ); - error( RtError::SYSTEM_ERROR ); - } - } - - stream_.state = STREAM_STOPPED; - MUTEX_UNLOCK( &stream_.mutex ); -} - -bool RtApiPulse::probeDeviceOpen( unsigned int device, StreamMode mode, - unsigned int channels, unsigned int firstChannel, - unsigned int sampleRate, RtAudioFormat format, - unsigned int *bufferSize, RtAudio::StreamOptions *options ) -{ - PulseAudioHandle *pah = 0; - unsigned long bufferBytes = 0; - pa_sample_spec ss; - - if ( device != 0 ) return false; - if ( mode != INPUT && mode != OUTPUT ) return false; - if ( channels != 1 && channels != 2 ) { - errorText_ = "RtApiPulse::probeDeviceOpen: unsupported number of channels."; - return false; - } - ss.channels = channels; - - if ( firstChannel != 0 ) return false; - - bool sr_found = false; - for ( const unsigned int *sr = SUPPORTED_SAMPLERATES; *sr; ++sr ) { - if ( sampleRate == *sr ) { - sr_found = true; - stream_.sampleRate = sampleRate; - ss.rate = sampleRate; - break; - } - } - if ( !sr_found ) { - errorText_ = "RtApiPulse::probeDeviceOpen: unsupported sample rate."; - return false; - } - - bool sf_found = 0; - for ( const rtaudio_pa_format_mapping_t *sf = supported_sampleformats; - sf->rtaudio_format && sf->pa_format != PA_SAMPLE_INVALID; ++sf ) { - if ( format == sf->rtaudio_format ) { - sf_found = true; - stream_.userFormat = sf->rtaudio_format; - ss.format = sf->pa_format; - break; - } - } - if ( !sf_found ) { - errorText_ = "RtApiPulse::probeDeviceOpen: unsupported sample format."; - return false; - } - - if ( options && ( options->flags & RTAUDIO_NONINTERLEAVED ) ) { - errorText_ = "RtApiPulse::probeDeviceOpen: only interleaved audio data supported."; - return false; - } - - stream_.userInterleaved = true; - stream_.nBuffers = 1; - - stream_.deviceInterleaved[mode] = true; - stream_.doByteSwap[mode] = false; - stream_.doConvertBuffer[mode] = false; - stream_.deviceFormat[mode] = stream_.userFormat; - stream_.nUserChannels[mode] = channels; - stream_.nDeviceChannels[mode] = channels; - stream_.channelOffset[mode] = 0; - - // Allocate necessary internal buffers. - bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat ); - stream_.userBuffer[mode] = (char *) calloc( bufferBytes, 1 ); - if ( stream_.userBuffer[mode] == NULL ) { - errorText_ = "RtApiPulse::probeDeviceOpen: error allocating user buffer memory."; - goto error; - } - stream_.bufferSize = *bufferSize; - - if ( !stream_.apiHandle ) { - PulseAudioHandle *pah = new PulseAudioHandle; - if ( !pah ) { - errorText_ = "RtApiPulse::probeDeviceOpen: error allocating memory for handle."; - goto error; - } - - stream_.apiHandle = pah; - if ( pthread_cond_init( &pah->runnable_cv, NULL ) != 0 ) { - errorText_ = "RtApiPulse::probeDeviceOpen: error creating condition variable."; - goto error; - } - } - pah = static_cast( stream_.apiHandle ); - - int error; - switch ( mode ) { - case INPUT: - pah->s_rec = pa_simple_new( NULL, "RtAudio", PA_STREAM_RECORD, NULL, "Record", &ss, NULL, NULL, &error ); - if ( !pah->s_rec ) { - errorText_ = "RtApiPulse::probeDeviceOpen: error connecting input to PulseAudio server."; - goto error; - } - break; - case OUTPUT: - pah->s_play = pa_simple_new( NULL, "RtAudio", PA_STREAM_PLAYBACK, NULL, "Playback", &ss, NULL, NULL, &error ); - if ( !pah->s_play ) { - errorText_ = "RtApiPulse::probeDeviceOpen: error connecting output to PulseAudio server."; - goto error; - } - break; - default: - goto error; - } - - if ( stream_.mode == UNINITIALIZED ) - stream_.mode = mode; - else if ( stream_.mode == mode ) - goto error; - else - stream_.mode = DUPLEX; - - stream_.state = STREAM_STOPPED; - - if ( !stream_.callbackInfo.isRunning ) { - stream_.callbackInfo.object = this; - stream_.callbackInfo.isRunning = true; - if ( pthread_create( &pah->thread, NULL, pulseaudio_callback, (void *)&stream_.callbackInfo) != 0 ) { - errorText_ = "RtApiPulse::probeDeviceOpen: error creating thread."; - goto error; - } - } - return true; - - error: - closeStream(); - return false; -} - -//******************** End of __LINUX_PULSE__ *********************// -#endif - -#if defined(__LINUX_OSS__) - -#include -#include -#include -#include -#include "soundcard.h" -#include -#include - -extern "C" void *ossCallbackHandler(void * ptr); - -// A structure to hold various information related to the OSS API -// implementation. -struct OssHandle { - int id[2]; // device ids - bool xrun[2]; - bool triggered; - pthread_cond_t runnable; - - OssHandle() - :triggered(false) { id[0] = 0; id[1] = 0; xrun[0] = false; xrun[1] = false; } -}; - -RtApiOss :: RtApiOss() -{ - // Nothing to do here. -} - -RtApiOss :: ~RtApiOss() -{ - if ( stream_.state != STREAM_CLOSED ) closeStream(); -} - -unsigned int RtApiOss :: getDeviceCount( void ) -{ - int mixerfd = open( "/dev/mixer", O_RDWR, 0 ); - if ( mixerfd == -1 ) { - errorText_ = "RtApiOss::getDeviceCount: error opening '/dev/mixer'."; - error( RtError::WARNING ); - return 0; - } - - oss_sysinfo sysinfo; - if ( ioctl( mixerfd, SNDCTL_SYSINFO, &sysinfo ) == -1 ) { - close( mixerfd ); - errorText_ = "RtApiOss::getDeviceCount: error getting sysinfo, OSS version >= 4.0 is required."; - error( RtError::WARNING ); - return 0; - } - - close( mixerfd ); - return sysinfo.numaudios; -} - -RtAudio::DeviceInfo RtApiOss :: getDeviceInfo( unsigned int device ) -{ - RtAudio::DeviceInfo info; - info.probed = false; - - int mixerfd = open( "/dev/mixer", O_RDWR, 0 ); - if ( mixerfd == -1 ) { - errorText_ = "RtApiOss::getDeviceInfo: error opening '/dev/mixer'."; - error( RtError::WARNING ); - return info; - } - - oss_sysinfo sysinfo; - int result = ioctl( mixerfd, SNDCTL_SYSINFO, &sysinfo ); - if ( result == -1 ) { - close( mixerfd ); - errorText_ = "RtApiOss::getDeviceInfo: error getting sysinfo, OSS version >= 4.0 is required."; - error( RtError::WARNING ); - return info; - } - - unsigned nDevices = sysinfo.numaudios; - if ( nDevices == 0 ) { - close( mixerfd ); - errorText_ = "RtApiOss::getDeviceInfo: no devices found!"; - error( RtError::INVALID_USE ); - } - - if ( device >= nDevices ) { - close( mixerfd ); - errorText_ = "RtApiOss::getDeviceInfo: device ID is invalid!"; - error( RtError::INVALID_USE ); - } - - oss_audioinfo ainfo; - ainfo.dev = device; - result = ioctl( mixerfd, SNDCTL_AUDIOINFO, &ainfo ); - close( mixerfd ); - if ( result == -1 ) { - errorStream_ << "RtApiOss::getDeviceInfo: error getting device (" << ainfo.name << ") info."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // Probe channels - if ( ainfo.caps & PCM_CAP_OUTPUT ) info.outputChannels = ainfo.max_channels; - if ( ainfo.caps & PCM_CAP_INPUT ) info.inputChannels = ainfo.max_channels; - if ( ainfo.caps & PCM_CAP_DUPLEX ) { - if ( info.outputChannels > 0 && info.inputChannels > 0 && ainfo.caps & PCM_CAP_DUPLEX ) - info.duplexChannels = (info.outputChannels > info.inputChannels) ? info.inputChannels : info.outputChannels; - } - - // Probe data formats ... do for input - unsigned long mask = ainfo.iformats; - if ( mask & AFMT_S16_LE || mask & AFMT_S16_BE ) - info.nativeFormats |= RTAUDIO_SINT16; - if ( mask & AFMT_S8 ) - info.nativeFormats |= RTAUDIO_SINT8; - if ( mask & AFMT_S32_LE || mask & AFMT_S32_BE ) - info.nativeFormats |= RTAUDIO_SINT32; - if ( mask & AFMT_FLOAT ) - info.nativeFormats |= RTAUDIO_FLOAT32; - if ( mask & AFMT_S24_LE || mask & AFMT_S24_BE ) - info.nativeFormats |= RTAUDIO_SINT24; - - // Check that we have at least one supported format - if ( info.nativeFormats == 0 ) { - errorStream_ << "RtApiOss::getDeviceInfo: device (" << ainfo.name << ") data format not supported by RtAudio."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - return info; - } - - // Probe the supported sample rates. - info.sampleRates.clear(); - if ( ainfo.nrates ) { - for ( unsigned int i=0; i= (int) SAMPLE_RATES[k] ) - info.sampleRates.push_back( SAMPLE_RATES[k] ); - } - } - - if ( info.sampleRates.size() == 0 ) { - errorStream_ << "RtApiOss::getDeviceInfo: no supported sample rates found for device (" << ainfo.name << ")."; - errorText_ = errorStream_.str(); - error( RtError::WARNING ); - } - else { - info.probed = true; - info.name = ainfo.name; - } - - return info; -} - - -bool RtApiOss :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels, - unsigned int firstChannel, unsigned int sampleRate, - RtAudioFormat format, unsigned int *bufferSize, - RtAudio::StreamOptions *options ) -{ - int mixerfd = open( "/dev/mixer", O_RDWR, 0 ); - if ( mixerfd == -1 ) { - errorText_ = "RtApiOss::probeDeviceOpen: error opening '/dev/mixer'."; - return FAILURE; - } - - oss_sysinfo sysinfo; - int result = ioctl( mixerfd, SNDCTL_SYSINFO, &sysinfo ); - if ( result == -1 ) { - close( mixerfd ); - errorText_ = "RtApiOss::probeDeviceOpen: error getting sysinfo, OSS version >= 4.0 is required."; - return FAILURE; - } - - unsigned nDevices = sysinfo.numaudios; - if ( nDevices == 0 ) { - // This should not happen because a check is made before this function is called. - close( mixerfd ); - errorText_ = "RtApiOss::probeDeviceOpen: no devices found!"; - return FAILURE; - } - - if ( device >= nDevices ) { - // This should not happen because a check is made before this function is called. - close( mixerfd ); - errorText_ = "RtApiOss::probeDeviceOpen: device ID is invalid!"; - return FAILURE; - } - - oss_audioinfo ainfo; - ainfo.dev = device; - result = ioctl( mixerfd, SNDCTL_AUDIOINFO, &ainfo ); - close( mixerfd ); - if ( result == -1 ) { - errorStream_ << "RtApiOss::getDeviceInfo: error getting device (" << ainfo.name << ") info."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Check if device supports input or output - if ( ( mode == OUTPUT && !( ainfo.caps & PCM_CAP_OUTPUT ) ) || - ( mode == INPUT && !( ainfo.caps & PCM_CAP_INPUT ) ) ) { - if ( mode == OUTPUT ) - errorStream_ << "RtApiOss::probeDeviceOpen: device (" << ainfo.name << ") does not support output."; - else - errorStream_ << "RtApiOss::probeDeviceOpen: device (" << ainfo.name << ") does not support input."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - int flags = 0; - OssHandle *handle = (OssHandle *) stream_.apiHandle; - if ( mode == OUTPUT ) - flags |= O_WRONLY; - else { // mode == INPUT - if (stream_.mode == OUTPUT && stream_.device[0] == device) { - // We just set the same device for playback ... close and reopen for duplex (OSS only). - close( handle->id[0] ); - handle->id[0] = 0; - if ( !( ainfo.caps & PCM_CAP_DUPLEX ) ) { - errorStream_ << "RtApiOss::probeDeviceOpen: device (" << ainfo.name << ") does not support duplex mode."; - errorText_ = errorStream_.str(); - return FAILURE; - } - // Check that the number previously set channels is the same. - if ( stream_.nUserChannels[0] != channels ) { - errorStream_ << "RtApiOss::probeDeviceOpen: input/output channels must be equal for OSS duplex device (" << ainfo.name << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - flags |= O_RDWR; - } - else - flags |= O_RDONLY; - } - - // Set exclusive access if specified. - if ( options && options->flags & RTAUDIO_HOG_DEVICE ) flags |= O_EXCL; - - // Try to open the device. - int fd; - fd = open( ainfo.devnode, flags, 0 ); - if ( fd == -1 ) { - if ( errno == EBUSY ) - errorStream_ << "RtApiOss::probeDeviceOpen: device (" << ainfo.name << ") is busy."; - else - errorStream_ << "RtApiOss::probeDeviceOpen: error opening device (" << ainfo.name << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // For duplex operation, specifically set this mode (this doesn't seem to work). - /* - if ( flags | O_RDWR ) { - result = ioctl( fd, SNDCTL_DSP_SETDUPLEX, NULL ); - if ( result == -1) { - errorStream_ << "RtApiOss::probeDeviceOpen: error setting duplex mode for device (" << ainfo.name << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - } - */ - - // Check the device channel support. - stream_.nUserChannels[mode] = channels; - if ( ainfo.max_channels < (int)(channels + firstChannel) ) { - close( fd ); - errorStream_ << "RtApiOss::probeDeviceOpen: the device (" << ainfo.name << ") does not support requested channel parameters."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Set the number of channels. - int deviceChannels = channels + firstChannel; - result = ioctl( fd, SNDCTL_DSP_CHANNELS, &deviceChannels ); - if ( result == -1 || deviceChannels < (int)(channels + firstChannel) ) { - close( fd ); - errorStream_ << "RtApiOss::probeDeviceOpen: error setting channel parameters on device (" << ainfo.name << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - stream_.nDeviceChannels[mode] = deviceChannels; - - // Get the data format mask - int mask; - result = ioctl( fd, SNDCTL_DSP_GETFMTS, &mask ); - if ( result == -1 ) { - close( fd ); - errorStream_ << "RtApiOss::probeDeviceOpen: error getting device (" << ainfo.name << ") data formats."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Determine how to set the device format. - stream_.userFormat = format; - int deviceFormat = -1; - stream_.doByteSwap[mode] = false; - if ( format == RTAUDIO_SINT8 ) { - if ( mask & AFMT_S8 ) { - deviceFormat = AFMT_S8; - stream_.deviceFormat[mode] = RTAUDIO_SINT8; - } - } - else if ( format == RTAUDIO_SINT16 ) { - if ( mask & AFMT_S16_NE ) { - deviceFormat = AFMT_S16_NE; - stream_.deviceFormat[mode] = RTAUDIO_SINT16; - } - else if ( mask & AFMT_S16_OE ) { - deviceFormat = AFMT_S16_OE; - stream_.deviceFormat[mode] = RTAUDIO_SINT16; - stream_.doByteSwap[mode] = true; - } - } - else if ( format == RTAUDIO_SINT24 ) { - if ( mask & AFMT_S24_NE ) { - deviceFormat = AFMT_S24_NE; - stream_.deviceFormat[mode] = RTAUDIO_SINT24; - } - else if ( mask & AFMT_S24_OE ) { - deviceFormat = AFMT_S24_OE; - stream_.deviceFormat[mode] = RTAUDIO_SINT24; - stream_.doByteSwap[mode] = true; - } - } - else if ( format == RTAUDIO_SINT32 ) { - if ( mask & AFMT_S32_NE ) { - deviceFormat = AFMT_S32_NE; - stream_.deviceFormat[mode] = RTAUDIO_SINT32; - } - else if ( mask & AFMT_S32_OE ) { - deviceFormat = AFMT_S32_OE; - stream_.deviceFormat[mode] = RTAUDIO_SINT32; - stream_.doByteSwap[mode] = true; - } - } - - if ( deviceFormat == -1 ) { - // The user requested format is not natively supported by the device. - if ( mask & AFMT_S16_NE ) { - deviceFormat = AFMT_S16_NE; - stream_.deviceFormat[mode] = RTAUDIO_SINT16; - } - else if ( mask & AFMT_S32_NE ) { - deviceFormat = AFMT_S32_NE; - stream_.deviceFormat[mode] = RTAUDIO_SINT32; - } - else if ( mask & AFMT_S24_NE ) { - deviceFormat = AFMT_S24_NE; - stream_.deviceFormat[mode] = RTAUDIO_SINT24; - } - else if ( mask & AFMT_S16_OE ) { - deviceFormat = AFMT_S16_OE; - stream_.deviceFormat[mode] = RTAUDIO_SINT16; - stream_.doByteSwap[mode] = true; - } - else if ( mask & AFMT_S32_OE ) { - deviceFormat = AFMT_S32_OE; - stream_.deviceFormat[mode] = RTAUDIO_SINT32; - stream_.doByteSwap[mode] = true; - } - else if ( mask & AFMT_S24_OE ) { - deviceFormat = AFMT_S24_OE; - stream_.deviceFormat[mode] = RTAUDIO_SINT24; - stream_.doByteSwap[mode] = true; - } - else if ( mask & AFMT_S8) { - deviceFormat = AFMT_S8; - stream_.deviceFormat[mode] = RTAUDIO_SINT8; - } - } - - if ( stream_.deviceFormat[mode] == 0 ) { - // This really shouldn't happen ... - close( fd ); - errorStream_ << "RtApiOss::probeDeviceOpen: device (" << ainfo.name << ") data format not supported by RtAudio."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Set the data format. - int temp = deviceFormat; - result = ioctl( fd, SNDCTL_DSP_SETFMT, &deviceFormat ); - if ( result == -1 || deviceFormat != temp ) { - close( fd ); - errorStream_ << "RtApiOss::probeDeviceOpen: error setting data format on device (" << ainfo.name << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Attempt to set the buffer size. According to OSS, the minimum - // number of buffers is two. The supposed minimum buffer size is 16 - // bytes, so that will be our lower bound. The argument to this - // call is in the form 0xMMMMSSSS (hex), where the buffer size (in - // bytes) is given as 2^SSSS and the number of buffers as 2^MMMM. - // We'll check the actual value used near the end of the setup - // procedure. - int ossBufferBytes = *bufferSize * formatBytes( stream_.deviceFormat[mode] ) * deviceChannels; - if ( ossBufferBytes < 16 ) ossBufferBytes = 16; - int buffers = 0; - if ( options ) buffers = options->numberOfBuffers; - if ( options && options->flags & RTAUDIO_MINIMIZE_LATENCY ) buffers = 2; - if ( buffers < 2 ) buffers = 3; - temp = ((int) buffers << 16) + (int)( log10( (double)ossBufferBytes ) / log10( 2.0 ) ); - result = ioctl( fd, SNDCTL_DSP_SETFRAGMENT, &temp ); - if ( result == -1 ) { - close( fd ); - errorStream_ << "RtApiOss::probeDeviceOpen: error setting buffer size on device (" << ainfo.name << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - stream_.nBuffers = buffers; - - // Save buffer size (in sample frames). - *bufferSize = ossBufferBytes / ( formatBytes(stream_.deviceFormat[mode]) * deviceChannels ); - stream_.bufferSize = *bufferSize; - - // Set the sample rate. - int srate = sampleRate; - result = ioctl( fd, SNDCTL_DSP_SPEED, &srate ); - if ( result == -1 ) { - close( fd ); - errorStream_ << "RtApiOss::probeDeviceOpen: error setting sample rate (" << sampleRate << ") on device (" << ainfo.name << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - - // Verify the sample rate setup worked. - if ( abs( srate - sampleRate ) > 100 ) { - close( fd ); - errorStream_ << "RtApiOss::probeDeviceOpen: device (" << ainfo.name << ") does not support sample rate (" << sampleRate << ")."; - errorText_ = errorStream_.str(); - return FAILURE; - } - stream_.sampleRate = sampleRate; - - if ( mode == INPUT && stream_.mode == OUTPUT && stream_.device[0] == device) { - // We're doing duplex setup here. - stream_.deviceFormat[0] = stream_.deviceFormat[1]; - stream_.nDeviceChannels[0] = deviceChannels; - } - - // Set interleaving parameters. - stream_.userInterleaved = true; - stream_.deviceInterleaved[mode] = true; - if ( options && options->flags & RTAUDIO_NONINTERLEAVED ) - stream_.userInterleaved = false; - - // Set flags for buffer conversion - stream_.doConvertBuffer[mode] = false; - if ( stream_.userFormat != stream_.deviceFormat[mode] ) - stream_.doConvertBuffer[mode] = true; - if ( stream_.nUserChannels[mode] < stream_.nDeviceChannels[mode] ) - stream_.doConvertBuffer[mode] = true; - if ( stream_.userInterleaved != stream_.deviceInterleaved[mode] && - stream_.nUserChannels[mode] > 1 ) - stream_.doConvertBuffer[mode] = true; - - // Allocate the stream handles if necessary and then save. - if ( stream_.apiHandle == 0 ) { - try { - handle = new OssHandle; - } - catch ( std::bad_alloc& ) { - errorText_ = "RtApiOss::probeDeviceOpen: error allocating OssHandle memory."; - goto error; - } - - if ( pthread_cond_init( &handle->runnable, NULL ) ) { - errorText_ = "RtApiOss::probeDeviceOpen: error initializing pthread condition variable."; - goto error; - } - - stream_.apiHandle = (void *) handle; - } - else { - handle = (OssHandle *) stream_.apiHandle; - } - handle->id[mode] = fd; - - // Allocate necessary internal buffers. - unsigned long bufferBytes; - bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat ); - stream_.userBuffer[mode] = (char *) calloc( bufferBytes, 1 ); - if ( stream_.userBuffer[mode] == NULL ) { - errorText_ = "RtApiOss::probeDeviceOpen: error allocating user buffer memory."; - goto error; - } - - if ( stream_.doConvertBuffer[mode] ) { - - bool makeBuffer = true; - bufferBytes = stream_.nDeviceChannels[mode] * formatBytes( stream_.deviceFormat[mode] ); - if ( mode == INPUT ) { - if ( stream_.mode == OUTPUT && stream_.deviceBuffer ) { - unsigned long bytesOut = stream_.nDeviceChannels[0] * formatBytes( stream_.deviceFormat[0] ); - if ( bufferBytes <= bytesOut ) makeBuffer = false; - } - } - - if ( makeBuffer ) { - bufferBytes *= *bufferSize; - if ( stream_.deviceBuffer ) free( stream_.deviceBuffer ); - stream_.deviceBuffer = (char *) calloc( bufferBytes, 1 ); - if ( stream_.deviceBuffer == NULL ) { - errorText_ = "RtApiOss::probeDeviceOpen: error allocating device buffer memory."; - goto error; - } - } - } - - stream_.device[mode] = device; - stream_.state = STREAM_STOPPED; - - // Setup the buffer conversion information structure. - if ( stream_.doConvertBuffer[mode] ) setConvertInfo( mode, firstChannel ); - - // Setup thread if necessary. - if ( stream_.mode == OUTPUT && mode == INPUT ) { - // We had already set up an output stream. - stream_.mode = DUPLEX; - if ( stream_.device[0] == device ) handle->id[0] = fd; - } - else { - stream_.mode = mode; - - // Setup callback thread. - stream_.callbackInfo.object = (void *) this; - - // Set the thread attributes for joinable and realtime scheduling - // priority. The higher priority will only take affect if the - // program is run as root or suid. - pthread_attr_t attr; - pthread_attr_init( &attr ); - pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE ); -#ifdef SCHED_RR // Undefined with some OSes (eg: NetBSD 1.6.x with GNU Pthread) - if ( options && options->flags & RTAUDIO_SCHEDULE_REALTIME ) { - struct sched_param param; - int priority = options->priority; - int min = sched_get_priority_min( SCHED_RR ); - int max = sched_get_priority_max( SCHED_RR ); - if ( priority < min ) priority = min; - else if ( priority > max ) priority = max; - param.sched_priority = priority; - pthread_attr_setschedparam( &attr, ¶m ); - pthread_attr_setschedpolicy( &attr, SCHED_RR ); - } - else - pthread_attr_setschedpolicy( &attr, SCHED_OTHER ); -#else - pthread_attr_setschedpolicy( &attr, SCHED_OTHER ); -#endif - - stream_.callbackInfo.isRunning = true; - result = pthread_create( &stream_.callbackInfo.thread, &attr, ossCallbackHandler, &stream_.callbackInfo ); - pthread_attr_destroy( &attr ); - if ( result ) { - stream_.callbackInfo.isRunning = false; - errorText_ = "RtApiOss::error creating callback thread!"; - goto error; - } - } - - return SUCCESS; - - error: - if ( handle ) { - pthread_cond_destroy( &handle->runnable ); - if ( handle->id[0] ) close( handle->id[0] ); - if ( handle->id[1] ) close( handle->id[1] ); - delete handle; - stream_.apiHandle = 0; - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - return FAILURE; -} - -void RtApiOss :: closeStream() -{ - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiOss::closeStream(): no open stream to close!"; - error( RtError::WARNING ); - return; - } - - OssHandle *handle = (OssHandle *) stream_.apiHandle; - stream_.callbackInfo.isRunning = false; - MUTEX_LOCK( &stream_.mutex ); - if ( stream_.state == STREAM_STOPPED ) - pthread_cond_signal( &handle->runnable ); - MUTEX_UNLOCK( &stream_.mutex ); - pthread_join( stream_.callbackInfo.thread, NULL ); - - if ( stream_.state == STREAM_RUNNING ) { - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) - ioctl( handle->id[0], SNDCTL_DSP_HALT, 0 ); - else - ioctl( handle->id[1], SNDCTL_DSP_HALT, 0 ); - stream_.state = STREAM_STOPPED; - } - - if ( handle ) { - pthread_cond_destroy( &handle->runnable ); - if ( handle->id[0] ) close( handle->id[0] ); - if ( handle->id[1] ) close( handle->id[1] ); - delete handle; - stream_.apiHandle = 0; - } - - for ( int i=0; i<2; i++ ) { - if ( stream_.userBuffer[i] ) { - free( stream_.userBuffer[i] ); - stream_.userBuffer[i] = 0; - } - } - - if ( stream_.deviceBuffer ) { - free( stream_.deviceBuffer ); - stream_.deviceBuffer = 0; - } - - stream_.mode = UNINITIALIZED; - stream_.state = STREAM_CLOSED; -} - -void RtApiOss :: startStream() -{ - verifyStream(); - if ( stream_.state == STREAM_RUNNING ) { - errorText_ = "RtApiOss::startStream(): the stream is already running!"; - error( RtError::WARNING ); - return; - } - - MUTEX_LOCK( &stream_.mutex ); - - stream_.state = STREAM_RUNNING; - - // No need to do anything else here ... OSS automatically starts - // when fed samples. - - MUTEX_UNLOCK( &stream_.mutex ); - - OssHandle *handle = (OssHandle *) stream_.apiHandle; - pthread_cond_signal( &handle->runnable ); -} - -void RtApiOss :: stopStream() -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiOss::stopStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - MUTEX_LOCK( &stream_.mutex ); - - // The state might change while waiting on a mutex. - if ( stream_.state == STREAM_STOPPED ) { - MUTEX_UNLOCK( &stream_.mutex ); - return; - } - - int result = 0; - OssHandle *handle = (OssHandle *) stream_.apiHandle; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - - // Flush the output with zeros a few times. - char *buffer; - int samples; - RtAudioFormat format; - - if ( stream_.doConvertBuffer[0] ) { - buffer = stream_.deviceBuffer; - samples = stream_.bufferSize * stream_.nDeviceChannels[0]; - format = stream_.deviceFormat[0]; - } - else { - buffer = stream_.userBuffer[0]; - samples = stream_.bufferSize * stream_.nUserChannels[0]; - format = stream_.userFormat; - } - - memset( buffer, 0, samples * formatBytes(format) ); - for ( unsigned int i=0; iid[0], buffer, samples * formatBytes(format) ); - if ( result == -1 ) { - errorText_ = "RtApiOss::stopStream: audio write error."; - error( RtError::WARNING ); - } - } - - result = ioctl( handle->id[0], SNDCTL_DSP_HALT, 0 ); - if ( result == -1 ) { - errorStream_ << "RtApiOss::stopStream: system error stopping callback procedure on device (" << stream_.device[0] << ")."; - errorText_ = errorStream_.str(); - goto unlock; - } - handle->triggered = false; - } - - if ( stream_.mode == INPUT || ( stream_.mode == DUPLEX && handle->id[0] != handle->id[1] ) ) { - result = ioctl( handle->id[1], SNDCTL_DSP_HALT, 0 ); - if ( result == -1 ) { - errorStream_ << "RtApiOss::stopStream: system error stopping input callback procedure on device (" << stream_.device[0] << ")."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - unlock: - stream_.state = STREAM_STOPPED; - MUTEX_UNLOCK( &stream_.mutex ); - - if ( result != -1 ) return; - error( RtError::SYSTEM_ERROR ); -} - -void RtApiOss :: abortStream() -{ - verifyStream(); - if ( stream_.state == STREAM_STOPPED ) { - errorText_ = "RtApiOss::abortStream(): the stream is already stopped!"; - error( RtError::WARNING ); - return; - } - - MUTEX_LOCK( &stream_.mutex ); - - // The state might change while waiting on a mutex. - if ( stream_.state == STREAM_STOPPED ) { - MUTEX_UNLOCK( &stream_.mutex ); - return; - } - - int result = 0; - OssHandle *handle = (OssHandle *) stream_.apiHandle; - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - result = ioctl( handle->id[0], SNDCTL_DSP_HALT, 0 ); - if ( result == -1 ) { - errorStream_ << "RtApiOss::abortStream: system error stopping callback procedure on device (" << stream_.device[0] << ")."; - errorText_ = errorStream_.str(); - goto unlock; - } - handle->triggered = false; - } - - if ( stream_.mode == INPUT || ( stream_.mode == DUPLEX && handle->id[0] != handle->id[1] ) ) { - result = ioctl( handle->id[1], SNDCTL_DSP_HALT, 0 ); - if ( result == -1 ) { - errorStream_ << "RtApiOss::abortStream: system error stopping input callback procedure on device (" << stream_.device[0] << ")."; - errorText_ = errorStream_.str(); - goto unlock; - } - } - - unlock: - stream_.state = STREAM_STOPPED; - MUTEX_UNLOCK( &stream_.mutex ); - - if ( result != -1 ) return; - error( RtError::SYSTEM_ERROR ); -} - -void RtApiOss :: callbackEvent() -{ - OssHandle *handle = (OssHandle *) stream_.apiHandle; - if ( stream_.state == STREAM_STOPPED ) { - MUTEX_LOCK( &stream_.mutex ); - pthread_cond_wait( &handle->runnable, &stream_.mutex ); - if ( stream_.state != STREAM_RUNNING ) { - MUTEX_UNLOCK( &stream_.mutex ); - return; - } - MUTEX_UNLOCK( &stream_.mutex ); - } - - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApiOss::callbackEvent(): the stream is closed ... this shouldn't happen!"; - error( RtError::WARNING ); - return; - } - - // Invoke user callback to get fresh output data. - int doStopStream = 0; - RtAudioCallback callback = (RtAudioCallback) stream_.callbackInfo.callback; - double streamTime = getStreamTime(); - RtAudioStreamStatus status = 0; - if ( stream_.mode != INPUT && handle->xrun[0] == true ) { - status |= RTAUDIO_OUTPUT_UNDERFLOW; - handle->xrun[0] = false; - } - if ( stream_.mode != OUTPUT && handle->xrun[1] == true ) { - status |= RTAUDIO_INPUT_OVERFLOW; - handle->xrun[1] = false; - } - doStopStream = callback( stream_.userBuffer[0], stream_.userBuffer[1], - stream_.bufferSize, streamTime, status, stream_.callbackInfo.userData ); - if ( doStopStream == 2 ) { - this->abortStream(); - return; - } - - MUTEX_LOCK( &stream_.mutex ); - - // The state might change while waiting on a mutex. - if ( stream_.state == STREAM_STOPPED ) goto unlock; - - int result; - char *buffer; - int samples; - RtAudioFormat format; - - if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) { - - // Setup parameters and do buffer conversion if necessary. - if ( stream_.doConvertBuffer[0] ) { - buffer = stream_.deviceBuffer; - convertBuffer( buffer, stream_.userBuffer[0], stream_.convertInfo[0] ); - samples = stream_.bufferSize * stream_.nDeviceChannels[0]; - format = stream_.deviceFormat[0]; - } - else { - buffer = stream_.userBuffer[0]; - samples = stream_.bufferSize * stream_.nUserChannels[0]; - format = stream_.userFormat; - } - - // Do byte swapping if necessary. - if ( stream_.doByteSwap[0] ) - byteSwapBuffer( buffer, samples, format ); - - if ( stream_.mode == DUPLEX && handle->triggered == false ) { - int trig = 0; - ioctl( handle->id[0], SNDCTL_DSP_SETTRIGGER, &trig ); - result = write( handle->id[0], buffer, samples * formatBytes(format) ); - trig = PCM_ENABLE_INPUT|PCM_ENABLE_OUTPUT; - ioctl( handle->id[0], SNDCTL_DSP_SETTRIGGER, &trig ); - handle->triggered = true; - } - else - // Write samples to device. - result = write( handle->id[0], buffer, samples * formatBytes(format) ); - - if ( result == -1 ) { - // We'll assume this is an underrun, though there isn't a - // specific means for determining that. - handle->xrun[0] = true; - errorText_ = "RtApiOss::callbackEvent: audio write error."; - error( RtError::WARNING ); - // Continue on to input section. - } - } - - if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) { - - // Setup parameters. - if ( stream_.doConvertBuffer[1] ) { - buffer = stream_.deviceBuffer; - samples = stream_.bufferSize * stream_.nDeviceChannels[1]; - format = stream_.deviceFormat[1]; - } - else { - buffer = stream_.userBuffer[1]; - samples = stream_.bufferSize * stream_.nUserChannels[1]; - format = stream_.userFormat; - } - - // Read samples from device. - result = read( handle->id[1], buffer, samples * formatBytes(format) ); - - if ( result == -1 ) { - // We'll assume this is an overrun, though there isn't a - // specific means for determining that. - handle->xrun[1] = true; - errorText_ = "RtApiOss::callbackEvent: audio read error."; - error( RtError::WARNING ); - goto unlock; - } - - // Do byte swapping if necessary. - if ( stream_.doByteSwap[1] ) - byteSwapBuffer( buffer, samples, format ); - - // Do buffer conversion if necessary. - if ( stream_.doConvertBuffer[1] ) - convertBuffer( stream_.userBuffer[1], stream_.deviceBuffer, stream_.convertInfo[1] ); - } - - unlock: - MUTEX_UNLOCK( &stream_.mutex ); - - RtApi::tickStreamTime(); - if ( doStopStream == 1 ) this->stopStream(); -} - -extern "C" void *ossCallbackHandler( void *ptr ) -{ - CallbackInfo *info = (CallbackInfo *) ptr; - RtApiOss *object = (RtApiOss *) info->object; - bool *isRunning = &info->isRunning; - - while ( *isRunning == true ) { - pthread_testcancel(); - object->callbackEvent(); - } - - pthread_exit( NULL ); -} - -//******************** End of __LINUX_OSS__ *********************// -#endif - - -// *************************************************** // -// -// Protected common (OS-independent) RtAudio methods. -// -// *************************************************** // - -// This method can be modified to control the behavior of error -// message printing. -void RtApi :: error( RtError::Type type ) -{ - errorStream_.str(""); // clear the ostringstream - if ( type == RtError::WARNING && showWarnings_ == true ) - std::cerr << '\n' << errorText_ << "\n\n"; - else if ( type != RtError::WARNING ) - throw( RtError( errorText_, type ) ); -} - -void RtApi :: verifyStream() -{ - if ( stream_.state == STREAM_CLOSED ) { - errorText_ = "RtApi:: a stream is not open!"; - error( RtError::INVALID_USE ); - } -} - -void RtApi :: clearStreamInfo() -{ - stream_.mode = UNINITIALIZED; - stream_.state = STREAM_CLOSED; - stream_.sampleRate = 0; - stream_.bufferSize = 0; - stream_.nBuffers = 0; - stream_.userFormat = 0; - stream_.userInterleaved = true; - stream_.streamTime = 0.0; - stream_.apiHandle = 0; - stream_.deviceBuffer = 0; - stream_.callbackInfo.callback = 0; - stream_.callbackInfo.userData = 0; - stream_.callbackInfo.isRunning = false; - for ( int i=0; i<2; i++ ) { - stream_.device[i] = 11111; - stream_.doConvertBuffer[i] = false; - stream_.deviceInterleaved[i] = true; - stream_.doByteSwap[i] = false; - stream_.nUserChannels[i] = 0; - stream_.nDeviceChannels[i] = 0; - stream_.channelOffset[i] = 0; - stream_.deviceFormat[i] = 0; - stream_.latency[i] = 0; - stream_.userBuffer[i] = 0; - stream_.convertInfo[i].channels = 0; - stream_.convertInfo[i].inJump = 0; - stream_.convertInfo[i].outJump = 0; - stream_.convertInfo[i].inFormat = 0; - stream_.convertInfo[i].outFormat = 0; - stream_.convertInfo[i].inOffset.clear(); - stream_.convertInfo[i].outOffset.clear(); - } -} - -unsigned int RtApi :: formatBytes( RtAudioFormat format ) -{ - if ( format == RTAUDIO_SINT16 ) - return 2; - else if ( format == RTAUDIO_SINT24 || format == RTAUDIO_SINT32 || - format == RTAUDIO_FLOAT32 ) - return 4; - else if ( format == RTAUDIO_FLOAT64 ) - return 8; - else if ( format == RTAUDIO_SINT8 ) - return 1; - - errorText_ = "RtApi::formatBytes: undefined format."; - error( RtError::WARNING ); - - return 0; -} - -void RtApi :: setConvertInfo( StreamMode mode, unsigned int firstChannel ) -{ - if ( mode == INPUT ) { // convert device to user buffer - stream_.convertInfo[mode].inJump = stream_.nDeviceChannels[1]; - stream_.convertInfo[mode].outJump = stream_.nUserChannels[1]; - stream_.convertInfo[mode].inFormat = stream_.deviceFormat[1]; - stream_.convertInfo[mode].outFormat = stream_.userFormat; - } - else { // convert user to device buffer - stream_.convertInfo[mode].inJump = stream_.nUserChannels[0]; - stream_.convertInfo[mode].outJump = stream_.nDeviceChannels[0]; - stream_.convertInfo[mode].inFormat = stream_.userFormat; - stream_.convertInfo[mode].outFormat = stream_.deviceFormat[0]; - } - - if ( stream_.convertInfo[mode].inJump < stream_.convertInfo[mode].outJump ) - stream_.convertInfo[mode].channels = stream_.convertInfo[mode].inJump; - else - stream_.convertInfo[mode].channels = stream_.convertInfo[mode].outJump; - - // Set up the interleave/deinterleave offsets. - if ( stream_.deviceInterleaved[mode] != stream_.userInterleaved ) { - if ( ( mode == OUTPUT && stream_.deviceInterleaved[mode] ) || - ( mode == INPUT && stream_.userInterleaved ) ) { - for ( int k=0; k 0 ) { - if ( stream_.deviceInterleaved[mode] ) { - if ( mode == OUTPUT ) { - for ( int k=0; k>= 8; - } - in += info.inJump; - out += info.outJump; - } - } - else if (info.inFormat == RTAUDIO_FLOAT32) { - Float32 *in = (Float32 *)inBuffer; - for (unsigned int i=0; i> 8) & 0x0000ffff); - } - in += info.inJump; - out += info.outJump; - } - } - else if (info.inFormat == RTAUDIO_SINT32) { - Int32 *in = (Int32 *)inBuffer; - for (unsigned int i=0; i> 16) & 0x0000ffff); - } - in += info.inJump; - out += info.outJump; - } - } - else if (info.inFormat == RTAUDIO_FLOAT32) { - Float32 *in = (Float32 *)inBuffer; - for (unsigned int i=0; i> 8) & 0x00ff); - } - in += info.inJump; - out += info.outJump; - } - } - else if (info.inFormat == RTAUDIO_SINT24) { - Int32 *in = (Int32 *)inBuffer; - for (unsigned int i=0; i> 16) & 0x000000ff); - } - in += info.inJump; - out += info.outJump; - } - } - else if (info.inFormat == RTAUDIO_SINT32) { - Int32 *in = (Int32 *)inBuffer; - for (unsigned int i=0; i> 24) & 0x000000ff); - } - in += info.inJump; - out += info.outJump; - } - } - else if (info.inFormat == RTAUDIO_FLOAT32) { - Float32 *in = (Float32 *)inBuffer; - for (unsigned int i=0; i>8) | (x<<8); } - //static inline uint32_t bswap_32(uint32_t x) { return (bswap_16(x&0xffff)<<16) | (bswap_16(x>>16)); } - //static inline uint64_t bswap_64(uint64_t x) { return (((unsigned long long)bswap_32(x&0xffffffffull))<<32) | (bswap_32(x>>32)); } - -void RtApi :: byteSwapBuffer( char *buffer, unsigned int samples, RtAudioFormat format ) -{ - register char val; - register char *ptr; - - ptr = buffer; - if ( format == RTAUDIO_SINT16 ) { - for ( unsigned int i=0; i - -//*********************************************************************// -// RtMidi Definitions -//*********************************************************************// - -void RtMidi :: getCompiledApi( std::vector &apis ) throw() -{ - apis.clear(); - - // The order here will control the order of RtMidi's API search in - // the constructor. -#if defined(__MACOSX_CORE__) - apis.push_back( MACOSX_CORE ); -#endif -#if defined(__LINUX_ALSA__) - apis.push_back( LINUX_ALSA ); -#endif -#if defined(__UNIX_JACK__) - apis.push_back( UNIX_JACK ); -#endif -#if defined(__WINDOWS_MM__) - apis.push_back( WINDOWS_MM ); -#endif -#if defined(__WINDOWS_KS__) - apis.push_back( WINDOWS_KS ); -#endif -#if defined(__RTMIDI_DUMMY__) - apis.push_back( RTMIDI_DUMMY ); -#endif -} - -void RtMidi :: error( RtError::Type type, std::string errorString ) -{ - if (type == RtError::WARNING) { - std::cerr << '\n' << errorString << "\n\n"; - } - else if (type == RtError::DEBUG_WARNING) { -#if defined(__RTMIDI_DEBUG__) - std::cerr << '\n' << errorString << "\n\n"; -#endif - } - else { - std::cerr << '\n' << errorString << "\n\n"; - throw RtError( errorString, type ); - } -} - -//*********************************************************************// -// RtMidiIn Definitions -//*********************************************************************// - -void RtMidiIn :: openMidiApi( RtMidi::Api api, const std::string clientName, unsigned int queueSizeLimit ) -{ - if ( rtapi_ ) - delete rtapi_; - rtapi_ = 0; - -#if defined(__UNIX_JACK__) - if ( api == UNIX_JACK ) - rtapi_ = new MidiInJack( clientName, queueSizeLimit ); -#endif -#if defined(__LINUX_ALSA__) - if ( api == LINUX_ALSA ) - rtapi_ = new MidiInAlsa( clientName, queueSizeLimit ); -#endif -#if defined(__WINDOWS_MM__) - if ( api == WINDOWS_MM ) - rtapi_ = new MidiInWinMM( clientName, queueSizeLimit ); -#endif -#if defined(__WINDOWS_KS__) - if ( api == WINDOWS_KS ) - rtapi_ = new MidiInWinKS( clientName, queueSizeLimit ); -#endif -#if defined(__MACOSX_CORE__) - if ( api == MACOSX_CORE ) - rtapi_ = new MidiInCore( clientName, queueSizeLimit ); -#endif -#if defined(__RTMIDI_DUMMY__) - if ( api == RTMIDI_DUMMY ) - rtapi_ = new MidiInDummy( clientName, queueSizeLimit ); -#endif -} - -RtMidiIn :: RtMidiIn( RtMidi::Api api, const std::string clientName, unsigned int queueSizeLimit ) -{ - rtapi_ = 0; - - if ( api != UNSPECIFIED ) { - // Attempt to open the specified API. - openMidiApi( api, clientName, queueSizeLimit ); - if ( rtapi_ ) return; - - // No compiled support for specified API value. Issue a debug - // warning and continue as if no API was specified. - RtMidi::error( RtError::WARNING, "RtMidiIn: no compiled support for specified API argument!" ); - } - - // Iterate through the compiled APIs and return as soon as we find - // one with at least one port or we reach the end of the list. - std::vector< RtMidi::Api > apis; - getCompiledApi( apis ); - for ( unsigned int i=0; igetPortCount() ) break; - } - - if ( rtapi_ ) return; - - // It should not be possible to get here because the preprocessor - // definition __RTMIDI_DUMMY__ is automatically defined if no - // API-specific definitions are passed to the compiler. But just in - // case something weird happens, we'll print out an error message. - RtMidi::error( RtError::WARNING, "RtMidiIn: no compiled API support found ... critical error!!" ); -} - -RtMidiIn :: ~RtMidiIn() throw() -{ - delete rtapi_; -} - - -//*********************************************************************// -// RtMidiOut Definitions -//*********************************************************************// - -void RtMidiOut :: openMidiApi( RtMidi::Api api, const std::string clientName ) -{ - if ( rtapi_ ) - delete rtapi_; - rtapi_ = 0; - -#if defined(__UNIX_JACK__) - if ( api == UNIX_JACK ) - rtapi_ = new MidiOutJack( clientName ); -#endif -#if defined(__LINUX_ALSA__) - if ( api == LINUX_ALSA ) - rtapi_ = new MidiOutAlsa( clientName ); -#endif -#if defined(__WINDOWS_MM__) - if ( api == WINDOWS_MM ) - rtapi_ = new MidiOutWinMM( clientName ); -#endif -#if defined(__WINDOWS_KS__) - if ( api == WINDOWS_KS ) - rtapi_ = new MidiOutWinKS( clientName ); -#endif -#if defined(__MACOSX_CORE__) - if ( api == MACOSX_CORE ) - rtapi_ = new MidiOutCore( clientName ); -#endif -#if defined(__RTMIDI_DUMMY__) - if ( api == RTMIDI_DUMMY ) - rtapi_ = new MidiOutDummy( clientName ); -#endif -} - -RtMidiOut :: RtMidiOut( RtMidi::Api api, const std::string clientName ) -{ - rtapi_ = 0; - - if ( api != UNSPECIFIED ) { - // Attempt to open the specified API. - openMidiApi( api, clientName ); - if ( rtapi_ ) return; - - // No compiled support for specified API value. Issue a debug - // warning and continue as if no API was specified. - RtMidi::error( RtError::WARNING, "RtMidiOut: no compiled support for specified API argument!" ); - } - - // Iterate through the compiled APIs and return as soon as we find - // one with at least one port or we reach the end of the list. - std::vector< RtMidi::Api > apis; - getCompiledApi( apis ); - for ( unsigned int i=0; igetPortCount() ) break; - } - - if ( rtapi_ ) return; - - // It should not be possible to get here because the preprocessor - // definition __RTMIDI_DUMMY__ is automatically defined if no - // API-specific definitions are passed to the compiler. But just in - // case something weird happens, we'll print out an error message. - RtMidi::error( RtError::WARNING, "RtMidiOut: no compiled API support found ... critical error!!" ); -} - -RtMidiOut :: ~RtMidiOut() throw() -{ - delete rtapi_; -} - -//*********************************************************************// -// Common MidiInApi Definitions -//*********************************************************************// - -MidiInApi :: MidiInApi( unsigned int queueSizeLimit ) - : apiData_( 0 ), connected_( false ) -{ - // Allocate the MIDI queue. - inputData_.queue.ringSize = queueSizeLimit; - if ( inputData_.queue.ringSize > 0 ) - inputData_.queue.ring = new MidiMessage[ inputData_.queue.ringSize ]; -} - -MidiInApi :: ~MidiInApi( void ) -{ - // Delete the MIDI queue. - if ( inputData_.queue.ringSize > 0 ) delete [] inputData_.queue.ring; -} - -void MidiInApi :: setCallback( RtMidiIn::RtMidiCallback callback, void *userData ) -{ - if ( inputData_.usingCallback ) { - errorString_ = "MidiInApi::setCallback: a callback function is already set!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - if ( !callback ) { - errorString_ = "RtMidiIn::setCallback: callback function value is invalid!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - inputData_.userCallback = (void *) callback; - inputData_.userData = userData; - inputData_.usingCallback = true; -} - -void MidiInApi :: cancelCallback() -{ - if ( !inputData_.usingCallback ) { - errorString_ = "RtMidiIn::cancelCallback: no callback function was set!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - inputData_.userCallback = 0; - inputData_.userData = 0; - inputData_.usingCallback = false; -} - -void MidiInApi :: ignoreTypes( bool midiSysex, bool midiTime, bool midiSense ) -{ - inputData_.ignoreFlags = 0; - if ( midiSysex ) inputData_.ignoreFlags = 0x01; - if ( midiTime ) inputData_.ignoreFlags |= 0x02; - if ( midiSense ) inputData_.ignoreFlags |= 0x04; -} - -double MidiInApi :: getMessage( std::vector *message ) -{ - message->clear(); - - if ( inputData_.usingCallback ) { - errorString_ = "RtMidiIn::getNextMessage: a user callback is currently set for this port."; - RtMidi::error( RtError::WARNING, errorString_ ); - return 0.0; - } - - if ( inputData_.queue.size == 0 ) return 0.0; - - // Copy queued message to the vector pointer argument and then "pop" it. - std::vector *bytes = &(inputData_.queue.ring[inputData_.queue.front].bytes); - message->assign( bytes->begin(), bytes->end() ); - double deltaTime = inputData_.queue.ring[inputData_.queue.front].timeStamp; - inputData_.queue.size--; - inputData_.queue.front++; - if ( inputData_.queue.front == inputData_.queue.ringSize ) - inputData_.queue.front = 0; - - return deltaTime; -} - -//*********************************************************************// -// Common MidiOutApi Definitions -//*********************************************************************// - -MidiOutApi :: MidiOutApi( void ) - : apiData_( 0 ), connected_( false ) -{ -} - -MidiOutApi :: ~MidiOutApi( void ) -{ -} - -// *************************************************** // -// -// OS/API-specific methods. -// -// *************************************************** // - -#if defined(__MACOSX_CORE__) - -// The CoreMIDI API is based on the use of a callback function for -// MIDI input. We convert the system specific time stamps to delta -// time values. - -// OS-X CoreMIDI header files. -#include -#include -#include - -// A structure to hold variables related to the CoreMIDI API -// implementation. -struct CoreMidiData { - MIDIClientRef client; - MIDIPortRef port; - MIDIEndpointRef endpoint; - MIDIEndpointRef destinationId; - unsigned long long lastTime; - MIDISysexSendRequest sysexreq; -}; - -//*********************************************************************// -// API: OS-X -// Class Definitions: MidiInCore -//*********************************************************************// - -void midiInputCallback( const MIDIPacketList *list, void *procRef, void *srcRef ) -{ - MidiInApi::RtMidiInData *data = static_cast (procRef); - CoreMidiData *apiData = static_cast (data->apiData); - - unsigned char status; - unsigned short nBytes, iByte, size; - unsigned long long time; - - bool& continueSysex = data->continueSysex; - MidiInApi::MidiMessage& message = data->message; - - const MIDIPacket *packet = &list->packet[0]; - for ( unsigned int i=0; inumPackets; ++i ) { - - // My interpretation of the CoreMIDI documentation: all message - // types, except sysex, are complete within a packet and there may - // be several of them in a single packet. Sysex messages can be - // broken across multiple packets and PacketLists but are bundled - // alone within each packet (these packets do not contain other - // message types). If sysex messages are split across multiple - // MIDIPacketLists, they must be handled by multiple calls to this - // function. - - nBytes = packet->length; - if ( nBytes == 0 ) continue; - - // Calculate time stamp. - - if ( data->firstMessage ) { - message.timeStamp = 0.0; - data->firstMessage = false; - } - else { - time = packet->timeStamp; - if ( time == 0 ) { // this happens when receiving asynchronous sysex messages - time = AudioGetCurrentHostTime(); - } - time -= apiData->lastTime; - time = AudioConvertHostTimeToNanos( time ); - if ( !continueSysex ) - message.timeStamp = time * 0.000000001; - } - apiData->lastTime = packet->timeStamp; - if ( apiData->lastTime == 0 ) { // this happens when receiving asynchronous sysex messages - apiData->lastTime = AudioGetCurrentHostTime(); - } - //std::cout << "TimeStamp = " << packet->timeStamp << std::endl; - - iByte = 0; - if ( continueSysex ) { - // We have a continuing, segmented sysex message. - if ( !( data->ignoreFlags & 0x01 ) ) { - // If we're not ignoring sysex messages, copy the entire packet. - for ( unsigned int j=0; jdata[j] ); - } - continueSysex = packet->data[nBytes-1] != 0xF7; - - if ( !continueSysex ) { - // If not a continuing sysex message, invoke the user callback function or queue the message. - if ( data->usingCallback ) { - RtMidiIn::RtMidiCallback callback = (RtMidiIn::RtMidiCallback) data->userCallback; - callback( message.timeStamp, &message.bytes, data->userData ); - } - else { - // As long as we haven't reached our queue size limit, push the message. - if ( data->queue.size < data->queue.ringSize ) { - data->queue.ring[data->queue.back++] = message; - if ( data->queue.back == data->queue.ringSize ) - data->queue.back = 0; - data->queue.size++; - } - else - std::cerr << "\nMidiInCore: message queue limit reached!!\n\n"; - } - message.bytes.clear(); - } - } - else { - while ( iByte < nBytes ) { - size = 0; - // We are expecting that the next byte in the packet is a status byte. - status = packet->data[iByte]; - if ( !(status & 0x80) ) break; - // Determine the number of bytes in the MIDI message. - if ( status < 0xC0 ) size = 3; - else if ( status < 0xE0 ) size = 2; - else if ( status < 0xF0 ) size = 3; - else if ( status == 0xF0 ) { - // A MIDI sysex - if ( data->ignoreFlags & 0x01 ) { - size = 0; - iByte = nBytes; - } - else size = nBytes - iByte; - continueSysex = packet->data[nBytes-1] != 0xF7; - } - else if ( status == 0xF1 ) { - // A MIDI time code message - if ( data->ignoreFlags & 0x02 ) { - size = 0; - iByte += 2; - } - else size = 2; - } - else if ( status == 0xF2 ) size = 3; - else if ( status == 0xF3 ) size = 2; - else if ( status == 0xF8 && ( data->ignoreFlags & 0x02 ) ) { - // A MIDI timing tick message and we're ignoring it. - size = 0; - iByte += 1; - } - else if ( status == 0xFE && ( data->ignoreFlags & 0x04 ) ) { - // A MIDI active sensing message and we're ignoring it. - size = 0; - iByte += 1; - } - else size = 1; - - // Copy the MIDI data to our vector. - if ( size ) { - message.bytes.assign( &packet->data[iByte], &packet->data[iByte+size] ); - if ( !continueSysex ) { - // If not a continuing sysex message, invoke the user callback function or queue the message. - if ( data->usingCallback ) { - RtMidiIn::RtMidiCallback callback = (RtMidiIn::RtMidiCallback) data->userCallback; - callback( message.timeStamp, &message.bytes, data->userData ); - } - else { - // As long as we haven't reached our queue size limit, push the message. - if ( data->queue.size < data->queue.ringSize ) { - data->queue.ring[data->queue.back++] = message; - if ( data->queue.back == data->queue.ringSize ) - data->queue.back = 0; - data->queue.size++; - } - else - std::cerr << "\nMidiInCore: message queue limit reached!!\n\n"; - } - message.bytes.clear(); - } - iByte += size; - } - } - } - packet = MIDIPacketNext(packet); - } -} - -MidiInCore :: MidiInCore( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) -{ - initialize( clientName ); -} - -MidiInCore :: ~MidiInCore( void ) -{ - // Close a connection if it exists. - closePort(); - - // Cleanup. - CoreMidiData *data = static_cast (apiData_); - MIDIClientDispose( data->client ); - if ( data->endpoint ) MIDIEndpointDispose( data->endpoint ); - delete data; -} - -void MidiInCore :: initialize( const std::string& clientName ) -{ - // Set up our client. - MIDIClientRef client; - OSStatus result = MIDIClientCreate( CFStringCreateWithCString( NULL, clientName.c_str(), kCFStringEncodingASCII ), NULL, NULL, &client ); - if ( result != noErr ) { - errorString_ = "MidiInCore::initialize: error creating OS-X MIDI client object."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Save our api-specific connection information. - CoreMidiData *data = (CoreMidiData *) new CoreMidiData; - data->client = client; - data->endpoint = 0; - apiData_ = (void *) data; - inputData_.apiData = (void *) data; -} - -void MidiInCore :: openPort( unsigned int portNumber, const std::string portName ) -{ - if ( connected_ ) { - errorString_ = "MidiInCore::openPort: a valid connection already exists!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - unsigned int nSrc = MIDIGetNumberOfSources(); - if (nSrc < 1) { - errorString_ = "MidiInCore::openPort: no MIDI input sources found!"; - RtMidi::error( RtError::NO_DEVICES_FOUND, errorString_ ); - } - - std::ostringstream ost; - if ( portNumber >= nSrc ) { - ost << "MidiInCore::openPort: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - } - - MIDIPortRef port; - CoreMidiData *data = static_cast (apiData_); - OSStatus result = MIDIInputPortCreate( data->client, - CFStringCreateWithCString( NULL, portName.c_str(), kCFStringEncodingASCII ), - midiInputCallback, (void *)&inputData_, &port ); - if ( result != noErr ) { - MIDIClientDispose( data->client ); - errorString_ = "MidiInCore::openPort: error creating OS-X MIDI input port."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Get the desired input source identifier. - MIDIEndpointRef endpoint = MIDIGetSource( portNumber ); - if ( endpoint == 0 ) { - MIDIPortDispose( port ); - MIDIClientDispose( data->client ); - errorString_ = "MidiInCore::openPort: error getting MIDI input source reference."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Make the connection. - result = MIDIPortConnectSource( port, endpoint, NULL ); - if ( result != noErr ) { - MIDIPortDispose( port ); - MIDIClientDispose( data->client ); - errorString_ = "MidiInCore::openPort: error connecting OS-X MIDI input port."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Save our api-specific port information. - data->port = port; - - connected_ = true; -} - -void MidiInCore :: openVirtualPort( const std::string portName ) -{ - CoreMidiData *data = static_cast (apiData_); - - // Create a virtual MIDI input destination. - MIDIEndpointRef endpoint; - OSStatus result = MIDIDestinationCreate( data->client, - CFStringCreateWithCString( NULL, portName.c_str(), kCFStringEncodingASCII ), - midiInputCallback, (void *)&inputData_, &endpoint ); - if ( result != noErr ) { - errorString_ = "MidiInCore::openVirtualPort: error creating virtual OS-X MIDI destination."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Save our api-specific connection information. - data->endpoint = endpoint; -} - -void MidiInCore :: closePort( void ) -{ - if ( connected_ ) { - CoreMidiData *data = static_cast (apiData_); - MIDIPortDispose( data->port ); - connected_ = false; - } -} - -unsigned int MidiInCore :: getPortCount() -{ - return MIDIGetNumberOfSources(); -} - -// This function was submitted by Douglas Casey Tucker and apparently -// derived largely from PortMidi. -CFStringRef EndpointName( MIDIEndpointRef endpoint, bool isExternal ) -{ - CFMutableStringRef result = CFStringCreateMutable( NULL, 0 ); - CFStringRef str; - - // Begin with the endpoint's name. - str = NULL; - MIDIObjectGetStringProperty( endpoint, kMIDIPropertyName, &str ); - if ( str != NULL ) { - CFStringAppend( result, str ); - CFRelease( str ); - } - - MIDIEntityRef entity = NULL; - MIDIEndpointGetEntity( endpoint, &entity ); - if ( entity == 0 ) - // probably virtual - return result; - - if ( CFStringGetLength( result ) == 0 ) { - // endpoint name has zero length -- try the entity - str = NULL; - MIDIObjectGetStringProperty( entity, kMIDIPropertyName, &str ); - if ( str != NULL ) { - CFStringAppend( result, str ); - CFRelease( str ); - } - } - // now consider the device's name - MIDIDeviceRef device = 0; - MIDIEntityGetDevice( entity, &device ); - if ( device == 0 ) - return result; - - str = NULL; - MIDIObjectGetStringProperty( device, kMIDIPropertyName, &str ); - if ( CFStringGetLength( result ) == 0 ) { - CFRelease( result ); - return str; - } - if ( str != NULL ) { - // if an external device has only one entity, throw away - // the endpoint name and just use the device name - if ( isExternal && MIDIDeviceGetNumberOfEntities( device ) < 2 ) { - CFRelease( result ); - return str; - } else { - if ( CFStringGetLength( str ) == 0 ) { - CFRelease( str ); - return result; - } - // does the entity name already start with the device name? - // (some drivers do this though they shouldn't) - // if so, do not prepend - if ( CFStringCompareWithOptions( result, /* endpoint name */ - str /* device name */, - CFRangeMake(0, CFStringGetLength( str ) ), 0 ) != kCFCompareEqualTo ) { - // prepend the device name to the entity name - if ( CFStringGetLength( result ) > 0 ) - CFStringInsert( result, 0, CFSTR(" ") ); - CFStringInsert( result, 0, str ); - } - CFRelease( str ); - } - } - return result; -} - -// This function was submitted by Douglas Casey Tucker and apparently -// derived largely from PortMidi. -static CFStringRef ConnectedEndpointName( MIDIEndpointRef endpoint ) -{ - CFMutableStringRef result = CFStringCreateMutable( NULL, 0 ); - CFStringRef str; - OSStatus err; - int i; - - // Does the endpoint have connections? - CFDataRef connections = NULL; - int nConnected = 0; - bool anyStrings = false; - err = MIDIObjectGetDataProperty( endpoint, kMIDIPropertyConnectionUniqueID, &connections ); - if ( connections != NULL ) { - // It has connections, follow them - // Concatenate the names of all connected devices - nConnected = CFDataGetLength( connections ) / sizeof(MIDIUniqueID); - if ( nConnected ) { - const SInt32 *pid = (const SInt32 *)(CFDataGetBytePtr(connections)); - for ( i=0; i= MIDIGetNumberOfSources() ) { - ost << "MidiInCore::getPortName: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - //RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - return stringName; - } - - portRef = MIDIGetSource( portNumber ); - nameRef = ConnectedEndpointName(portRef); - CFStringGetCString( nameRef, name, sizeof(name), 0); - CFRelease( nameRef ); - - return stringName = name; -} - -//*********************************************************************// -// API: OS-X -// Class Definitions: MidiOutCore -//*********************************************************************// - -MidiOutCore :: MidiOutCore( const std::string clientName ) : MidiOutApi() -{ - initialize( clientName ); -} - -MidiOutCore :: ~MidiOutCore( void ) -{ - // Close a connection if it exists. - closePort(); - - // Cleanup. - CoreMidiData *data = static_cast (apiData_); - MIDIClientDispose( data->client ); - if ( data->endpoint ) MIDIEndpointDispose( data->endpoint ); - delete data; -} - -void MidiOutCore :: initialize( const std::string& clientName ) -{ - // Set up our client. - MIDIClientRef client; - OSStatus result = MIDIClientCreate( CFStringCreateWithCString( NULL, clientName.c_str(), kCFStringEncodingASCII ), NULL, NULL, &client ); - if ( result != noErr ) { - errorString_ = "MidiOutCore::initialize: error creating OS-X MIDI client object."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Save our api-specific connection information. - CoreMidiData *data = (CoreMidiData *) new CoreMidiData; - data->client = client; - data->endpoint = 0; - apiData_ = (void *) data; -} - -unsigned int MidiOutCore :: getPortCount() -{ - return MIDIGetNumberOfDestinations(); -} - -std::string MidiOutCore :: getPortName( unsigned int portNumber ) -{ - CFStringRef nameRef; - MIDIEndpointRef portRef; - std::ostringstream ost; - char name[128]; - - std::string stringName; - if ( portNumber >= MIDIGetNumberOfDestinations() ) { - ost << "MidiOutCore::getPortName: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - return stringName; - //RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - } - - portRef = MIDIGetDestination( portNumber ); - nameRef = ConnectedEndpointName(portRef); - CFStringGetCString( nameRef, name, sizeof(name), 0); - CFRelease( nameRef ); - - return stringName = name; -} - -void MidiOutCore :: openPort( unsigned int portNumber, const std::string portName ) -{ - if ( connected_ ) { - errorString_ = "MidiOutCore::openPort: a valid connection already exists!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - unsigned int nDest = MIDIGetNumberOfDestinations(); - if (nDest < 1) { - errorString_ = "MidiOutCore::openPort: no MIDI output destinations found!"; - RtMidi::error( RtError::NO_DEVICES_FOUND, errorString_ ); - } - - std::ostringstream ost; - if ( portNumber >= nDest ) { - ost << "MidiOutCore::openPort: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - } - - MIDIPortRef port; - CoreMidiData *data = static_cast (apiData_); - OSStatus result = MIDIOutputPortCreate( data->client, - CFStringCreateWithCString( NULL, portName.c_str(), kCFStringEncodingASCII ), - &port ); - if ( result != noErr ) { - MIDIClientDispose( data->client ); - errorString_ = "MidiOutCore::openPort: error creating OS-X MIDI output port."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Get the desired output port identifier. - MIDIEndpointRef destination = MIDIGetDestination( portNumber ); - if ( destination == 0 ) { - MIDIPortDispose( port ); - MIDIClientDispose( data->client ); - errorString_ = "MidiOutCore::openPort: error getting MIDI output destination reference."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Save our api-specific connection information. - data->port = port; - data->destinationId = destination; - connected_ = true; -} - -void MidiOutCore :: closePort( void ) -{ - if ( connected_ ) { - CoreMidiData *data = static_cast (apiData_); - MIDIPortDispose( data->port ); - connected_ = false; - } -} - -void MidiOutCore :: openVirtualPort( std::string portName ) -{ - CoreMidiData *data = static_cast (apiData_); - - if ( data->endpoint ) { - errorString_ = "MidiOutCore::openVirtualPort: a virtual output port already exists!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - // Create a virtual MIDI output source. - MIDIEndpointRef endpoint; - OSStatus result = MIDISourceCreate( data->client, - CFStringCreateWithCString( NULL, portName.c_str(), kCFStringEncodingASCII ), - &endpoint ); - if ( result != noErr ) { - errorString_ = "MidiOutCore::initialize: error creating OS-X virtual MIDI source."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Save our api-specific connection information. - data->endpoint = endpoint; -} - -char *sysexBuffer = 0; - -void sysexCompletionProc( MIDISysexSendRequest * sreq ) -{ - //std::cout << "Completed SysEx send\n"; - delete sysexBuffer; - sysexBuffer = 0; -} - -void MidiOutCore :: sendMessage( std::vector *message ) -{ - // We use the MIDISendSysex() function to asynchronously send sysex - // messages. Otherwise, we use a single CoreMidi MIDIPacket. - unsigned int nBytes = message->size(); - if ( nBytes == 0 ) { - errorString_ = "MidiOutCore::sendMessage: no data in message argument!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - // unsigned int packetBytes, bytesLeft = nBytes; - // unsigned int messageIndex = 0; - MIDITimeStamp timeStamp = AudioGetCurrentHostTime(); - CoreMidiData *data = static_cast (apiData_); - OSStatus result; - - if ( message->at(0) == 0xF0 ) { - - while ( sysexBuffer != 0 ) usleep( 1000 ); // sleep 1 ms - - sysexBuffer = new char[nBytes]; - if ( sysexBuffer == NULL ) { - errorString_ = "MidiOutCore::sendMessage: error allocating sysex message memory!"; - RtMidi::error( RtError::MEMORY_ERROR, errorString_ ); - } - - // Copy data to buffer. - for ( unsigned int i=0; iat(i); - - data->sysexreq.destination = data->destinationId; - data->sysexreq.data = (Byte *)sysexBuffer; - data->sysexreq.bytesToSend = nBytes; - data->sysexreq.complete = 0; - data->sysexreq.completionProc = sysexCompletionProc; - data->sysexreq.completionRefCon = &(data->sysexreq); - - result = MIDISendSysex( &(data->sysexreq) ); - if ( result != noErr ) { - errorString_ = "MidiOutCore::sendMessage: error sending MIDI to virtual destinations."; - RtMidi::error( RtError::WARNING, errorString_ ); - } - return; - } - else if ( nBytes > 3 ) { - errorString_ = "MidiOutCore::sendMessage: message format problem ... not sysex but > 3 bytes?"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - MIDIPacketList packetList; - MIDIPacket *packet = MIDIPacketListInit( &packetList ); - packet = MIDIPacketListAdd( &packetList, sizeof(packetList), packet, timeStamp, nBytes, (const Byte *) &message->at( 0 ) ); - if ( !packet ) { - errorString_ = "MidiOutCore::sendMessage: could not allocate packet list"; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Send to any destinations that may have connected to us. - if ( data->endpoint ) { - result = MIDIReceived( data->endpoint, &packetList ); - if ( result != noErr ) { - errorString_ = "MidiOutCore::sendMessage: error sending MIDI to virtual destinations."; - RtMidi::error( RtError::WARNING, errorString_ ); - } - } - - // And send to an explicit destination port if we're connected. - if ( connected_ ) { - result = MIDISend( data->port, data->destinationId, &packetList ); - if ( result != noErr ) { - errorString_ = "MidiOutCore::sendMessage: error sending MIDI message to port."; - RtMidi::error( RtError::WARNING, errorString_ ); - } - } - -} - -#endif // __MACOSX_CORE__ - - -//*********************************************************************// -// API: LINUX ALSA SEQUENCER -//*********************************************************************// - -// API information found at: -// - http://www.alsa-project.org/documentation.php#Library - -#if defined(__LINUX_ALSA__) - -// The ALSA Sequencer API is based on the use of a callback function for -// MIDI input. -// -// Thanks to Pedro Lopez-Cabanillas for help with the ALSA sequencer -// time stamps and other assorted fixes!!! - -// If you don't need timestamping for incoming MIDI events, define the -// preprocessor definition AVOID_TIMESTAMPING to save resources -// associated with the ALSA sequencer queues. - -#include -#include - -// ALSA header file. -#include - -// Global sequencer instance created when first In/Out object is -// created, then destroyed when last In/Out is deleted. -static snd_seq_t *s_seq = NULL; - -// Variable to keep track of how many ports are open. -static unsigned int s_numPorts = 0; - -// The client name to use when creating the sequencer, which is -// currently set on the first call to createSequencer. -static std::string s_clientName = "RtMidi Client"; - -// A structure to hold variables related to the ALSA API -// implementation. -struct AlsaMidiData { - snd_seq_t *seq; - unsigned int portNum; - int vport; - snd_seq_port_subscribe_t *subscription; - snd_midi_event_t *coder; - unsigned int bufferSize; - unsigned char *buffer; - pthread_t thread; - pthread_t dummy_thread_id; - unsigned long long lastTime; - int queue_id; // an input queue is needed to get timestamped events - int trigger_fds[2]; -}; - -#define PORT_TYPE( pinfo, bits ) ((snd_seq_port_info_get_capability(pinfo) & (bits)) == (bits)) - -snd_seq_t* createSequencer( const std::string& clientName ) -{ - // Set up the ALSA sequencer client. - if ( s_seq == NULL ) { - int result = snd_seq_open(&s_seq, "default", SND_SEQ_OPEN_DUPLEX, SND_SEQ_NONBLOCK); - if ( result < 0 ) { - s_seq = NULL; - } - else { - // Set client name, use current name if given string is empty. - if ( clientName != "" ) { - s_clientName = clientName; - } - snd_seq_set_client_name( s_seq, s_clientName.c_str() ); - } - } - - // Increment port count. - s_numPorts++; - - return s_seq; -} - -void freeSequencer ( void ) -{ - s_numPorts--; - if ( s_numPorts == 0 && s_seq != NULL ) { - snd_seq_close( s_seq ); - s_seq = NULL; - } -} - -//*********************************************************************// -// API: LINUX ALSA -// Class Definitions: MidiInAlsa -//*********************************************************************// - -extern "C" void *alsaMidiHandler( void *ptr ) -{ - MidiInApi::RtMidiInData *data = static_cast (ptr); - AlsaMidiData *apiData = static_cast (data->apiData); - - long nBytes; - unsigned long long time, lastTime; - bool continueSysex = false; - bool doDecode = false; - MidiInApi::MidiMessage message; - int poll_fd_count; - struct pollfd *poll_fds; - - snd_seq_event_t *ev; - int result; - apiData->bufferSize = 32; - result = snd_midi_event_new( 0, &apiData->coder ); - if ( result < 0 ) { - data->doInput = false; - std::cerr << "\nMidiInAlsa::alsaMidiHandler: error initializing MIDI event parser!\n\n"; - return 0; - } - unsigned char *buffer = (unsigned char *) malloc( apiData->bufferSize ); - if ( buffer == NULL ) { - data->doInput = false; - snd_midi_event_free( apiData->coder ); - apiData->coder = 0; - std::cerr << "\nMidiInAlsa::alsaMidiHandler: error initializing buffer memory!\n\n"; - return 0; - } - snd_midi_event_init( apiData->coder ); - snd_midi_event_no_status( apiData->coder, 1 ); // suppress running status messages - - poll_fd_count = snd_seq_poll_descriptors_count( apiData->seq, POLLIN ) + 1; - poll_fds = (struct pollfd*)alloca( poll_fd_count * sizeof( struct pollfd )); - snd_seq_poll_descriptors( apiData->seq, poll_fds + 1, poll_fd_count - 1, POLLIN ); - poll_fds[0].fd = apiData->trigger_fds[0]; - poll_fds[0].events = POLLIN; - - while ( data->doInput ) { - - if ( snd_seq_event_input_pending( apiData->seq, 1 ) == 0 ) { - // No data pending - if ( poll( poll_fds, poll_fd_count, -1) >= 0 ) { - if ( poll_fds[0].revents & POLLIN ) { - bool dummy; - int res = read( poll_fds[0].fd, &dummy, sizeof(dummy) ); - (void) res; - } - } - continue; - } - - // If here, there should be data. - result = snd_seq_event_input( apiData->seq, &ev ); - if ( result == -ENOSPC ) { - std::cerr << "\nMidiInAlsa::alsaMidiHandler: MIDI input buffer overrun!\n\n"; - continue; - } - else if ( result <= 0 ) { - std::cerr << "MidiInAlsa::alsaMidiHandler: unknown MIDI input error!\n"; - continue; - } - - // This is a bit weird, but we now have to decode an ALSA MIDI - // event (back) into MIDI bytes. We'll ignore non-MIDI types. - if ( !continueSysex ) message.bytes.clear(); - - doDecode = false; - switch ( ev->type ) { - - case SND_SEQ_EVENT_PORT_SUBSCRIBED: -#if defined(__RTMIDI_DEBUG__) - std::cout << "MidiInAlsa::alsaMidiHandler: port connection made!\n"; -#endif - break; - - case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: -#if defined(__RTMIDI_DEBUG__) - std::cerr << "MidiInAlsa::alsaMidiHandler: port connection has closed!\n"; - std::cout << "sender = " << (int) ev->data.connect.sender.client << ":" - << (int) ev->data.connect.sender.port - << ", dest = " << (int) ev->data.connect.dest.client << ":" - << (int) ev->data.connect.dest.port - << std::endl; -#endif - break; - - case SND_SEQ_EVENT_QFRAME: // MIDI time code - if ( !( data->ignoreFlags & 0x02 ) ) doDecode = true; - break; - - case SND_SEQ_EVENT_TICK: // MIDI timing tick - if ( !( data->ignoreFlags & 0x02 ) ) doDecode = true; - break; - - case SND_SEQ_EVENT_SENSING: // Active sensing - if ( !( data->ignoreFlags & 0x04 ) ) doDecode = true; - break; - - case SND_SEQ_EVENT_SYSEX: - if ( (data->ignoreFlags & 0x01) ) break; - if ( ev->data.ext.len > apiData->bufferSize ) { - apiData->bufferSize = ev->data.ext.len; - free( buffer ); - buffer = (unsigned char *) malloc( apiData->bufferSize ); - if ( buffer == NULL ) { - data->doInput = false; - std::cerr << "\nMidiInAlsa::alsaMidiHandler: error resizing buffer memory!\n\n"; - break; - } - } - - default: - doDecode = true; - } - - if ( doDecode ) { - - nBytes = snd_midi_event_decode( apiData->coder, buffer, apiData->bufferSize, ev ); - if ( nBytes > 0 ) { - // The ALSA sequencer has a maximum buffer size for MIDI sysex - // events of 256 bytes. If a device sends sysex messages larger - // than this, they are segmented into 256 byte chunks. So, - // we'll watch for this and concatenate sysex chunks into a - // single sysex message if necessary. - if ( !continueSysex ) - message.bytes.assign( buffer, &buffer[nBytes] ); - else - message.bytes.insert( message.bytes.end(), buffer, &buffer[nBytes] ); - - continueSysex = ( ( ev->type == SND_SEQ_EVENT_SYSEX ) && ( message.bytes.back() != 0xF7 ) ); - if ( !continueSysex ) { - - // Calculate the time stamp: - message.timeStamp = 0.0; - - // Method 1: Use the system time. - //(void)gettimeofday(&tv, (struct timezone *)NULL); - //time = (tv.tv_sec * 1000000) + tv.tv_usec; - - // Method 2: Use the ALSA sequencer event time data. - // (thanks to Pedro Lopez-Cabanillas!). - time = ( ev->time.time.tv_sec * 1000000 ) + ( ev->time.time.tv_nsec/1000 ); - lastTime = time; - time -= apiData->lastTime; - apiData->lastTime = lastTime; - if ( data->firstMessage == true ) - data->firstMessage = false; - else - message.timeStamp = time * 0.000001; - } - else { -#if defined(__RTMIDI_DEBUG__) - std::cerr << "\nMidiInAlsa::alsaMidiHandler: event parsing error or not a MIDI event!\n\n"; -#endif - } - } - } - - snd_seq_free_event( ev ); - if ( message.bytes.size() == 0 || continueSysex ) continue; - - if ( data->usingCallback ) { - RtMidiIn::RtMidiCallback callback = (RtMidiIn::RtMidiCallback) data->userCallback; - callback( message.timeStamp, &message.bytes, data->userData ); - } - else { - // As long as we haven't reached our queue size limit, push the message. - if ( data->queue.size < data->queue.ringSize ) { - data->queue.ring[data->queue.back++] = message; - if ( data->queue.back == data->queue.ringSize ) - data->queue.back = 0; - data->queue.size++; - } - else - std::cerr << "\nMidiInAlsa: message queue limit reached!!\n\n"; - } - } - - if ( buffer ) free( buffer ); - snd_midi_event_free( apiData->coder ); - apiData->coder = 0; - apiData->thread = apiData->dummy_thread_id; - return 0; -} - -MidiInAlsa :: MidiInAlsa( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) -{ - initialize( clientName ); -} - -MidiInAlsa :: ~MidiInAlsa() -{ - // Close a connection if it exists. - closePort(); - - // Shutdown the input thread. - AlsaMidiData *data = static_cast (apiData_); - if ( inputData_.doInput ) { - inputData_.doInput = false; - int res = write( data->trigger_fds[1], &inputData_.doInput, sizeof(inputData_.doInput) ); - (void) res; - if ( !pthread_equal(data->thread, data->dummy_thread_id) ) - pthread_join( data->thread, NULL ); - } - - // Cleanup. - close ( data->trigger_fds[0] ); - close ( data->trigger_fds[1] ); - if ( data->vport >= 0 ) snd_seq_delete_port( data->seq, data->vport ); -#ifndef AVOID_TIMESTAMPING - snd_seq_free_queue( data->seq, data->queue_id ); -#endif - freeSequencer(); - delete data; -} - -void MidiInAlsa :: initialize( const std::string& clientName ) -{ - snd_seq_t* seq = createSequencer( clientName ); - if ( seq == NULL ) { - s_seq = NULL; - errorString_ = "MidiInAlsa::initialize: error creating ALSA sequencer client object."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Save our api-specific connection information. - AlsaMidiData *data = (AlsaMidiData *) new AlsaMidiData; - data->seq = seq; - data->portNum = -1; - data->vport = -1; - data->subscription = 0; - data->dummy_thread_id = pthread_self(); - data->thread = data->dummy_thread_id; - data->trigger_fds[0] = -1; - data->trigger_fds[1] = -1; - apiData_ = (void *) data; - inputData_.apiData = (void *) data; - - if ( pipe(data->trigger_fds) == -1 ) { - errorString_ = "MidiInAlsa::initialize: error creating pipe objects."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Create the input queue -#ifndef AVOID_TIMESTAMPING - data->queue_id = snd_seq_alloc_named_queue(s_seq, "RtMidi Queue"); - // Set arbitrary tempo (mm=100) and resolution (240) - snd_seq_queue_tempo_t *qtempo; - snd_seq_queue_tempo_alloca(&qtempo); - snd_seq_queue_tempo_set_tempo(qtempo, 600000); - snd_seq_queue_tempo_set_ppq(qtempo, 240); - snd_seq_set_queue_tempo(data->seq, data->queue_id, qtempo); - snd_seq_drain_output(data->seq); -#endif -} - -// This function is used to count or get the pinfo structure for a given port number. -unsigned int portInfo( snd_seq_t *seq, snd_seq_port_info_t *pinfo, unsigned int type, int portNumber ) -{ - snd_seq_client_info_t *cinfo; - int client; - int count = 0; - snd_seq_client_info_alloca( &cinfo ); - - snd_seq_client_info_set_client( cinfo, -1 ); - while ( snd_seq_query_next_client( seq, cinfo ) >= 0 ) { - client = snd_seq_client_info_get_client( cinfo ); - if ( client == 0 ) continue; - // Reset query info - snd_seq_port_info_set_client( pinfo, client ); - snd_seq_port_info_set_port( pinfo, -1 ); - while ( snd_seq_query_next_port( seq, pinfo ) >= 0 ) { - unsigned int atyp = snd_seq_port_info_get_type( pinfo ); - if ( ( atyp & SND_SEQ_PORT_TYPE_MIDI_GENERIC ) == 0 ) continue; - unsigned int caps = snd_seq_port_info_get_capability( pinfo ); - if ( ( caps & type ) != type ) continue; - if ( count == portNumber ) return 1; - ++count; - } - } - - // If a negative portNumber was used, return the port count. - if ( portNumber < 0 ) return count; - return 0; -} - -unsigned int MidiInAlsa :: getPortCount() -{ - snd_seq_port_info_t *pinfo; - snd_seq_port_info_alloca( &pinfo ); - - AlsaMidiData *data = static_cast (apiData_); - return portInfo( data->seq, pinfo, SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ, -1 ); -} - -std::string MidiInAlsa :: getPortName( unsigned int portNumber ) -{ - snd_seq_client_info_t *cinfo; - snd_seq_port_info_t *pinfo; - snd_seq_client_info_alloca( &cinfo ); - snd_seq_port_info_alloca( &pinfo ); - - std::string stringName; - AlsaMidiData *data = static_cast (apiData_); - if ( portInfo( data->seq, pinfo, SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ, (int) portNumber ) ) { - int cnum = snd_seq_port_info_get_client( pinfo ); - snd_seq_get_any_client_info( data->seq, cnum, cinfo ); - std::ostringstream os; - os << snd_seq_client_info_get_name( cinfo ); - os << " "; // GO: These lines added to make sure devices are listed - os << snd_seq_port_info_get_client( pinfo ); // GO: with full portnames added to ensure individual device names - os << ":"; - os << snd_seq_port_info_get_port( pinfo ); - stringName = os.str(); - return stringName; - } - - // If we get here, we didn't find a match. - errorString_ = "MidiInAlsa::getPortName: error looking for port name!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return stringName; - //RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); -} - -void MidiInAlsa :: openPort( unsigned int portNumber, const std::string portName ) -{ - if ( connected_ ) { - errorString_ = "MidiInAlsa::openPort: a valid connection already exists!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - unsigned int nSrc = this->getPortCount(); - if (nSrc < 1) { - errorString_ = "MidiInAlsa::openPort: no MIDI input sources found!"; - RtMidi::error( RtError::NO_DEVICES_FOUND, errorString_ ); - } - - snd_seq_port_info_t *pinfo; - snd_seq_port_info_alloca( &pinfo ); - std::ostringstream ost; - AlsaMidiData *data = static_cast (apiData_); - if ( portInfo( data->seq, pinfo, SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ, (int) portNumber ) == 0 ) { - ost << "MidiInAlsa::openPort: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - } - - - snd_seq_addr_t sender, receiver; - sender.client = snd_seq_port_info_get_client( pinfo ); - sender.port = snd_seq_port_info_get_port( pinfo ); - receiver.client = snd_seq_client_id( data->seq ); - if ( data->vport < 0 ) { - snd_seq_port_info_set_client( pinfo, 0 ); - snd_seq_port_info_set_port( pinfo, 0 ); - snd_seq_port_info_set_capability( pinfo, - SND_SEQ_PORT_CAP_WRITE | - SND_SEQ_PORT_CAP_SUBS_WRITE ); - snd_seq_port_info_set_type( pinfo, - SND_SEQ_PORT_TYPE_MIDI_GENERIC | - SND_SEQ_PORT_TYPE_APPLICATION ); - snd_seq_port_info_set_midi_channels(pinfo, 16); -#ifndef AVOID_TIMESTAMPING - snd_seq_port_info_set_timestamping(pinfo, 1); - snd_seq_port_info_set_timestamp_real(pinfo, 1); - snd_seq_port_info_set_timestamp_queue(pinfo, data->queue_id); -#endif - snd_seq_port_info_set_name(pinfo, portName.c_str() ); - data->vport = snd_seq_create_port(data->seq, pinfo); - - if ( data->vport < 0 ) { - errorString_ = "MidiInAlsa::openPort: ALSA error creating input port."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - } - - receiver.port = data->vport; - - if ( !data->subscription ) { - // Make subscription - if (snd_seq_port_subscribe_malloc( &data->subscription ) < 0) { - errorString_ = "MidiInAlsa::openPort: ALSA error allocation port subscription."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - snd_seq_port_subscribe_set_sender(data->subscription, &sender); - snd_seq_port_subscribe_set_dest(data->subscription, &receiver); - if ( snd_seq_subscribe_port(data->seq, data->subscription) ) { - snd_seq_port_subscribe_free( data->subscription ); - data->subscription = 0; - errorString_ = "MidiInAlsa::openPort: ALSA error making port connection."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - } - - if ( inputData_.doInput == false ) { - // Start the input queue -#ifndef AVOID_TIMESTAMPING - snd_seq_start_queue( data->seq, data->queue_id, NULL ); - snd_seq_drain_output( data->seq ); -#endif - // Start our MIDI input thread. - pthread_attr_t attr; - pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); - pthread_attr_setschedpolicy(&attr, SCHED_OTHER); - - inputData_.doInput = true; - int err = pthread_create(&data->thread, &attr, alsaMidiHandler, &inputData_); - pthread_attr_destroy(&attr); - if ( err ) { - snd_seq_unsubscribe_port( data->seq, data->subscription ); - snd_seq_port_subscribe_free( data->subscription ); - data->subscription = 0; - inputData_.doInput = false; - errorString_ = "MidiInAlsa::openPort: error starting MIDI input thread!"; - RtMidi::error( RtError::THREAD_ERROR, errorString_ ); - } - } - - connected_ = true; -} - -void MidiInAlsa :: openVirtualPort( std::string portName ) -{ - AlsaMidiData *data = static_cast (apiData_); - if ( data->vport < 0 ) { - snd_seq_port_info_t *pinfo; - snd_seq_port_info_alloca( &pinfo ); - snd_seq_port_info_set_capability( pinfo, - SND_SEQ_PORT_CAP_WRITE | - SND_SEQ_PORT_CAP_SUBS_WRITE ); - snd_seq_port_info_set_type( pinfo, - SND_SEQ_PORT_TYPE_MIDI_GENERIC | - SND_SEQ_PORT_TYPE_APPLICATION ); - snd_seq_port_info_set_midi_channels(pinfo, 16); -#ifndef AVOID_TIMESTAMPING - snd_seq_port_info_set_timestamping(pinfo, 1); - snd_seq_port_info_set_timestamp_real(pinfo, 1); - snd_seq_port_info_set_timestamp_queue(pinfo, data->queue_id); -#endif - snd_seq_port_info_set_name(pinfo, portName.c_str()); - data->vport = snd_seq_create_port(data->seq, pinfo); - - if ( data->vport < 0 ) { - errorString_ = "MidiInAlsa::openVirtualPort: ALSA error creating virtual port."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - } - - if ( inputData_.doInput == false ) { - // Wait for old thread to stop, if still running - if ( !pthread_equal(data->thread, data->dummy_thread_id) ) - pthread_join( data->thread, NULL ); - - // Start the input queue -#ifndef AVOID_TIMESTAMPING - snd_seq_start_queue( data->seq, data->queue_id, NULL ); - snd_seq_drain_output( data->seq ); -#endif - // Start our MIDI input thread. - pthread_attr_t attr; - pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); - pthread_attr_setschedpolicy(&attr, SCHED_OTHER); - - inputData_.doInput = true; - int err = pthread_create(&data->thread, &attr, alsaMidiHandler, &inputData_); - pthread_attr_destroy(&attr); - if ( err ) { - if ( data->subscription ) { - snd_seq_unsubscribe_port( data->seq, data->subscription ); - snd_seq_port_subscribe_free( data->subscription ); - data->subscription = 0; - } - inputData_.doInput = false; - errorString_ = "MidiInAlsa::openPort: error starting MIDI input thread!"; - RtMidi::error( RtError::THREAD_ERROR, errorString_ ); - } - } -} - -void MidiInAlsa :: closePort( void ) -{ - AlsaMidiData *data = static_cast (apiData_); - - if ( connected_ ) { - if ( data->subscription ) { - snd_seq_unsubscribe_port( data->seq, data->subscription ); - snd_seq_port_subscribe_free( data->subscription ); - data->subscription = 0; - } - // Stop the input queue -#ifndef AVOID_TIMESTAMPING - snd_seq_stop_queue( data->seq, data->queue_id, NULL ); - snd_seq_drain_output( data->seq ); -#endif - connected_ = false; - } - - // Stop thread to avoid triggering the callback, while the port is intended to be closed - if ( inputData_.doInput ) { - inputData_.doInput = false; - int res = write( data->trigger_fds[1], &inputData_.doInput, sizeof(inputData_.doInput) ); - (void) res; - if ( !pthread_equal(data->thread, data->dummy_thread_id) ) - pthread_join( data->thread, NULL ); - } -} - -//*********************************************************************// -// API: LINUX ALSA -// Class Definitions: MidiOutAlsa -//*********************************************************************// - -MidiOutAlsa :: MidiOutAlsa( const std::string clientName ) : MidiOutApi() -{ - initialize( clientName ); -} - -MidiOutAlsa :: ~MidiOutAlsa() -{ - // Close a connection if it exists. - closePort(); - - // Cleanup. - AlsaMidiData *data = static_cast (apiData_); - if ( data->vport >= 0 ) snd_seq_delete_port( data->seq, data->vport ); - if ( data->coder ) snd_midi_event_free( data->coder ); - if ( data->buffer ) free( data->buffer ); - freeSequencer(); - delete data; -} - -void MidiOutAlsa :: initialize( const std::string& clientName ) -{ - snd_seq_t* seq = createSequencer( clientName ); - if ( seq == NULL ) { - s_seq = NULL; - errorString_ = "MidiOutAlsa::initialize: error creating ALSA sequencer client object."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Save our api-specific connection information. - AlsaMidiData *data = (AlsaMidiData *) new AlsaMidiData; - data->seq = seq; - data->portNum = -1; - data->vport = -1; - data->bufferSize = 32; - data->coder = 0; - data->buffer = 0; - int result = snd_midi_event_new( data->bufferSize, &data->coder ); - if ( result < 0 ) { - delete data; - errorString_ = "MidiOutAlsa::initialize: error initializing MIDI event parser!\n\n"; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - data->buffer = (unsigned char *) malloc( data->bufferSize ); - if ( data->buffer == NULL ) { - delete data; - errorString_ = "MidiOutAlsa::initialize: error allocating buffer memory!\n\n"; - RtMidi::error( RtError::MEMORY_ERROR, errorString_ ); - } - snd_midi_event_init( data->coder ); - apiData_ = (void *) data; -} - -unsigned int MidiOutAlsa :: getPortCount() -{ - snd_seq_port_info_t *pinfo; - snd_seq_port_info_alloca( &pinfo ); - - AlsaMidiData *data = static_cast (apiData_); - return portInfo( data->seq, pinfo, SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE, -1 ); -} - -std::string MidiOutAlsa :: getPortName( unsigned int portNumber ) -{ - snd_seq_client_info_t *cinfo; - snd_seq_port_info_t *pinfo; - snd_seq_client_info_alloca( &cinfo ); - snd_seq_port_info_alloca( &pinfo ); - - std::string stringName; - AlsaMidiData *data = static_cast (apiData_); - if ( portInfo( data->seq, pinfo, SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE, (int) portNumber ) ) { - int cnum = snd_seq_port_info_get_client(pinfo); - snd_seq_get_any_client_info( data->seq, cnum, cinfo ); - std::ostringstream os; - os << snd_seq_client_info_get_name(cinfo); - os << ":"; - os << snd_seq_port_info_get_port(pinfo); - stringName = os.str(); - return stringName; - } - - // If we get here, we didn't find a match. - errorString_ = "MidiOutAlsa::getPortName: error looking for port name!"; - //RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - RtMidi::error( RtError::WARNING, errorString_ ); - return stringName; -} - -void MidiOutAlsa :: openPort( unsigned int portNumber, const std::string portName ) -{ - if ( connected_ ) { - errorString_ = "MidiOutAlsa::openPort: a valid connection already exists!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - unsigned int nSrc = this->getPortCount(); - if (nSrc < 1) { - errorString_ = "MidiOutAlsa::openPort: no MIDI output sources found!"; - RtMidi::error( RtError::NO_DEVICES_FOUND, errorString_ ); - } - - snd_seq_port_info_t *pinfo; - snd_seq_port_info_alloca( &pinfo ); - std::ostringstream ost; - AlsaMidiData *data = static_cast (apiData_); - if ( portInfo( data->seq, pinfo, SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE, (int) portNumber ) == 0 ) { - ost << "MidiOutAlsa::openPort: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - } - - snd_seq_addr_t sender, receiver; - receiver.client = snd_seq_port_info_get_client( pinfo ); - receiver.port = snd_seq_port_info_get_port( pinfo ); - sender.client = snd_seq_client_id( data->seq ); - - if ( data->vport < 0 ) { - data->vport = snd_seq_create_simple_port( data->seq, portName.c_str(), - SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ, - SND_SEQ_PORT_TYPE_MIDI_GENERIC|SND_SEQ_PORT_TYPE_APPLICATION ); - if ( data->vport < 0 ) { - errorString_ = "MidiOutAlsa::openPort: ALSA error creating output port."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - } - - sender.port = data->vport; - - // Make subscription - if (snd_seq_port_subscribe_malloc( &data->subscription ) < 0) { - snd_seq_port_subscribe_free( data->subscription ); - errorString_ = "MidiOutAlsa::openPort: error allocation port subscribtion."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - snd_seq_port_subscribe_set_sender(data->subscription, &sender); - snd_seq_port_subscribe_set_dest(data->subscription, &receiver); - snd_seq_port_subscribe_set_time_update(data->subscription, 1); - snd_seq_port_subscribe_set_time_real(data->subscription, 1); - if ( snd_seq_subscribe_port(data->seq, data->subscription) ) { - snd_seq_port_subscribe_free( data->subscription ); - errorString_ = "MidiOutAlsa::openPort: ALSA error making port connection."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - connected_ = true; -} - -void MidiOutAlsa :: closePort( void ) -{ - if ( connected_ ) { - AlsaMidiData *data = static_cast (apiData_); - snd_seq_unsubscribe_port( data->seq, data->subscription ); - snd_seq_port_subscribe_free( data->subscription ); - connected_ = false; - } -} - -void MidiOutAlsa :: openVirtualPort( std::string portName ) -{ - AlsaMidiData *data = static_cast (apiData_); - if ( data->vport < 0 ) { - data->vport = snd_seq_create_simple_port( data->seq, portName.c_str(), - SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ, - SND_SEQ_PORT_TYPE_MIDI_GENERIC|SND_SEQ_PORT_TYPE_APPLICATION ); - - if ( data->vport < 0 ) { - errorString_ = "MidiOutAlsa::openVirtualPort: ALSA error creating virtual port."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - } -} - -void MidiOutAlsa :: sendMessage( std::vector *message ) -{ - int result; - AlsaMidiData *data = static_cast (apiData_); - unsigned int nBytes = message->size(); - if ( nBytes > data->bufferSize ) { - data->bufferSize = nBytes; - result = snd_midi_event_resize_buffer ( data->coder, nBytes); - if ( result != 0 ) { - errorString_ = "MidiOutAlsa::sendMessage: ALSA error resizing MIDI event buffer."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - free (data->buffer); - data->buffer = (unsigned char *) malloc( data->bufferSize ); - if ( data->buffer == NULL ) { - errorString_ = "MidiOutAlsa::initialize: error allocating buffer memory!\n\n"; - RtMidi::error( RtError::MEMORY_ERROR, errorString_ ); - } - } - - snd_seq_event_t ev; - snd_seq_ev_clear(&ev); - snd_seq_ev_set_source(&ev, data->vport); - snd_seq_ev_set_subs(&ev); - snd_seq_ev_set_direct(&ev); - for ( unsigned int i=0; ibuffer[i] = message->at(i); - result = snd_midi_event_encode( data->coder, data->buffer, (long)nBytes, &ev ); - if ( result < (int)nBytes ) { - errorString_ = "MidiOutAlsa::sendMessage: event parsing error!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - // Send the event. - result = snd_seq_event_output(data->seq, &ev); - if ( result < 0 ) { - errorString_ = "MidiOutAlsa::sendMessage: error sending MIDI message to port."; - RtMidi::error( RtError::WARNING, errorString_ ); - } - snd_seq_drain_output(data->seq); -} - -#endif // __LINUX_ALSA__ - - -//*********************************************************************// -// API: Windows Multimedia Library (MM) -//*********************************************************************// - -// API information deciphered from: -// - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_midi_reference.asp - -// Thanks to Jean-Baptiste Berruchon for the sysex code. - -#if defined(__WINDOWS_MM__) - -// The Windows MM API is based on the use of a callback function for -// MIDI input. We convert the system specific time stamps to delta -// time values. - -// Windows MM MIDI header files. -#include -#include - -#define RT_SYSEX_BUFFER_SIZE 1024 -#define RT_SYSEX_BUFFER_COUNT 4 - -// A structure to hold variables related to the CoreMIDI API -// implementation. -struct WinMidiData { - HMIDIIN inHandle; // Handle to Midi Input Device - HMIDIOUT outHandle; // Handle to Midi Output Device - DWORD lastTime; - MidiInApi::MidiMessage message; - LPMIDIHDR sysexBuffer[RT_SYSEX_BUFFER_COUNT]; -}; - -//*********************************************************************// -// API: Windows MM -// Class Definitions: MidiInWinMM -//*********************************************************************// - -static void CALLBACK midiInputCallback( HMIDIIN hmin, - UINT inputStatus, - DWORD_PTR instancePtr, - DWORD_PTR midiMessage, - DWORD timestamp ) -{ - if ( inputStatus != MIM_DATA && inputStatus != MIM_LONGDATA && inputStatus != MIM_LONGERROR ) return; - - //MidiInApi::RtMidiInData *data = static_cast (instancePtr); - MidiInApi::RtMidiInData *data = (MidiInApi::RtMidiInData *)instancePtr; - WinMidiData *apiData = static_cast (data->apiData); - - // Calculate time stamp. - if ( data->firstMessage == true ) { - apiData->message.timeStamp = 0.0; - data->firstMessage = false; - } - else apiData->message.timeStamp = (double) ( timestamp - apiData->lastTime ) * 0.001; - apiData->lastTime = timestamp; - - if ( inputStatus == MIM_DATA ) { // Channel or system message - - // Make sure the first byte is a status byte. - unsigned char status = (unsigned char) (midiMessage & 0x000000FF); - if ( !(status & 0x80) ) return; - - // Determine the number of bytes in the MIDI message. - unsigned short nBytes = 1; - if ( status < 0xC0 ) nBytes = 3; - else if ( status < 0xE0 ) nBytes = 2; - else if ( status < 0xF0 ) nBytes = 3; - else if ( status == 0xF1 ) { - if ( data->ignoreFlags & 0x02 ) return; - else nBytes = 2; - } - else if ( status == 0xF2 ) nBytes = 3; - else if ( status == 0xF3 ) nBytes = 2; - else if ( status == 0xF8 && (data->ignoreFlags & 0x02) ) { - // A MIDI timing tick message and we're ignoring it. - return; - } - else if ( status == 0xFE && (data->ignoreFlags & 0x04) ) { - // A MIDI active sensing message and we're ignoring it. - return; - } - - // Copy bytes to our MIDI message. - unsigned char *ptr = (unsigned char *) &midiMessage; - for ( int i=0; imessage.bytes.push_back( *ptr++ ); - } - else { // Sysex message ( MIM_LONGDATA or MIM_LONGERROR ) - MIDIHDR *sysex = ( MIDIHDR *) midiMessage; - if ( !( data->ignoreFlags & 0x01 ) && inputStatus != MIM_LONGERROR ) { - // Sysex message and we're not ignoring it - for ( int i=0; i<(int)sysex->dwBytesRecorded; ++i ) - apiData->message.bytes.push_back( sysex->lpData[i] ); - } - - // The WinMM API requires that the sysex buffer be requeued after - // input of each sysex message. Even if we are ignoring sysex - // messages, we still need to requeue the buffer in case the user - // decides to not ignore sysex messages in the future. However, - // it seems that WinMM calls this function with an empty sysex - // buffer when an application closes and in this case, we should - // avoid requeueing it, else the computer suddenly reboots after - // one or two minutes. - if ( apiData->sysexBuffer[sysex->dwUser]->dwBytesRecorded > 0 ) { - //if ( sysex->dwBytesRecorded > 0 ) { - MMRESULT result = midiInAddBuffer( apiData->inHandle, apiData->sysexBuffer[sysex->dwUser], sizeof(MIDIHDR) ); - if ( result != MMSYSERR_NOERROR ) - std::cerr << "\nRtMidiIn::midiInputCallback: error sending sysex to Midi device!!\n\n"; - - if ( data->ignoreFlags & 0x01 ) return; - } - else return; - } - - if ( data->usingCallback ) { - RtMidiIn::RtMidiCallback callback = (RtMidiIn::RtMidiCallback) data->userCallback; - callback( apiData->message.timeStamp, &apiData->message.bytes, data->userData ); - } - else { - // As long as we haven't reached our queue size limit, push the message. - if ( data->queue.size < data->queue.ringSize ) { - data->queue.ring[data->queue.back++] = apiData->message; - if ( data->queue.back == data->queue.ringSize ) - data->queue.back = 0; - data->queue.size++; - } - else - std::cerr << "\nRtMidiIn: message queue limit reached!!\n\n"; - } - - // Clear the vector for the next input message. - apiData->message.bytes.clear(); -} - -MidiInWinMM :: MidiInWinMM( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) -{ - initialize( clientName ); -} - -MidiInWinMM :: ~MidiInWinMM() -{ - // Close a connection if it exists. - closePort(); - - // Cleanup. - WinMidiData *data = static_cast (apiData_); - delete data; -} - -void MidiInWinMM :: initialize( const std::string& /*clientName*/ ) -{ - // We'll issue a warning here if no devices are available but not - // throw an error since the user can plugin something later. - unsigned int nDevices = midiInGetNumDevs(); - if ( nDevices == 0 ) { - errorString_ = "MidiInWinMM::initialize: no MIDI input devices currently available."; - RtMidi::error( RtError::WARNING, errorString_ ); - } - - // Save our api-specific connection information. - WinMidiData *data = (WinMidiData *) new WinMidiData; - apiData_ = (void *) data; - inputData_.apiData = (void *) data; - data->message.bytes.clear(); // needs to be empty for first input message -} - -void MidiInWinMM :: openPort( unsigned int portNumber, const std::string /*portName*/ ) -{ - if ( connected_ ) { - errorString_ = "MidiInWinMM::openPort: a valid connection already exists!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - unsigned int nDevices = midiInGetNumDevs(); - if (nDevices == 0) { - errorString_ = "MidiInWinMM::openPort: no MIDI input sources found!"; - RtMidi::error( RtError::NO_DEVICES_FOUND, errorString_ ); - } - - std::ostringstream ost; - if ( portNumber >= nDevices ) { - ost << "MidiInWinMM::openPort: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - } - - WinMidiData *data = static_cast (apiData_); - MMRESULT result = midiInOpen( &data->inHandle, - portNumber, - (DWORD_PTR)&midiInputCallback, - (DWORD_PTR)&inputData_, - CALLBACK_FUNCTION ); - if ( result != MMSYSERR_NOERROR ) { - errorString_ = "MidiInWinMM::openPort: error creating Windows MM MIDI input port."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Allocate and init the sysex buffers. - for ( int i=0; isysexBuffer[i] = (MIDIHDR*) new char[ sizeof(MIDIHDR) ]; - data->sysexBuffer[i]->lpData = new char[ RT_SYSEX_BUFFER_SIZE ]; - data->sysexBuffer[i]->dwBufferLength = RT_SYSEX_BUFFER_SIZE; - data->sysexBuffer[i]->dwUser = i; // We use the dwUser parameter as buffer indicator - data->sysexBuffer[i]->dwFlags = 0; - - result = midiInPrepareHeader( data->inHandle, data->sysexBuffer[i], sizeof(MIDIHDR) ); - if ( result != MMSYSERR_NOERROR ) { - midiInClose( data->inHandle ); - errorString_ = "MidiInWinMM::openPort: error starting Windows MM MIDI input port (PrepareHeader)."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Register the buffer. - result = midiInAddBuffer( data->inHandle, data->sysexBuffer[i], sizeof(MIDIHDR) ); - if ( result != MMSYSERR_NOERROR ) { - midiInClose( data->inHandle ); - errorString_ = "MidiInWinMM::openPort: error starting Windows MM MIDI input port (AddBuffer)."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - } - - result = midiInStart( data->inHandle ); - if ( result != MMSYSERR_NOERROR ) { - midiInClose( data->inHandle ); - errorString_ = "MidiInWinMM::openPort: error starting Windows MM MIDI input port."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - connected_ = true; -} - -void MidiInWinMM :: openVirtualPort( std::string portName ) -{ - // This function cannot be implemented for the Windows MM MIDI API. - errorString_ = "MidiInWinMM::openVirtualPort: cannot be implemented in Windows MM MIDI API!"; - RtMidi::error( RtError::WARNING, errorString_ ); -} - -void MidiInWinMM :: closePort( void ) -{ - if ( connected_ ) { - WinMidiData *data = static_cast (apiData_); - midiInReset( data->inHandle ); - midiInStop( data->inHandle ); - - for ( int i=0; iinHandle, data->sysexBuffer[i], sizeof(MIDIHDR)); - delete [] data->sysexBuffer[i]->lpData; - delete [] data->sysexBuffer[i]; - if ( result != MMSYSERR_NOERROR ) { - midiInClose( data->inHandle ); - errorString_ = "MidiInWinMM::openPort: error closing Windows MM MIDI input port (midiInUnprepareHeader)."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - } - - midiInClose( data->inHandle ); - connected_ = false; - } -} - -unsigned int MidiInWinMM :: getPortCount() -{ - return midiInGetNumDevs(); -} - -std::string MidiInWinMM :: getPortName( unsigned int portNumber ) -{ - std::string stringName; - unsigned int nDevices = midiInGetNumDevs(); - if ( portNumber >= nDevices ) { - std::ostringstream ost; - ost << "MidiInWinMM::getPortName: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - //RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - RtMidi::error( RtError::WARNING, errorString_ ); - return stringName; - } - - MIDIINCAPS deviceCaps; - midiInGetDevCaps( portNumber, &deviceCaps, sizeof(MIDIINCAPS)); - -#if defined( UNICODE ) || defined( _UNICODE ) - int length = WideCharToMultiByte(CP_UTF8, 0, deviceCaps.szPname, -1, NULL, 0, NULL, NULL); - stringName.assign( length, 0 ); - length = WideCharToMultiByte(CP_UTF8, 0, deviceCaps.szPname, wcslen(deviceCaps.szPname), &stringName[0], length, NULL, NULL); -#else - stringName = std::string( deviceCaps.szPname ); -#endif - - // Next lines added to add the portNumber to the name so that - // the device's names are sure to be listed with individual names - // even when they have the same brand name - std::ostringstream os; - os << " "; - os << portNumber; - stringName += os.str(); - - return stringName; -} - -//*********************************************************************// -// API: Windows MM -// Class Definitions: MidiOutWinMM -//*********************************************************************// - -MidiOutWinMM :: MidiOutWinMM( const std::string clientName ) : MidiOutApi() -{ - initialize( clientName ); -} - -MidiOutWinMM :: ~MidiOutWinMM() -{ - // Close a connection if it exists. - closePort(); - - // Cleanup. - WinMidiData *data = static_cast (apiData_); - delete data; -} - -void MidiOutWinMM :: initialize( const std::string& /*clientName*/ ) -{ - // We'll issue a warning here if no devices are available but not - // throw an error since the user can plug something in later. - unsigned int nDevices = midiOutGetNumDevs(); - if ( nDevices == 0 ) { - errorString_ = "MidiOutWinMM::initialize: no MIDI output devices currently available."; - RtMidi::error( RtError::WARNING, errorString_ ); - } - - // Save our api-specific connection information. - WinMidiData *data = (WinMidiData *) new WinMidiData; - apiData_ = (void *) data; -} - -unsigned int MidiOutWinMM :: getPortCount() -{ - return midiOutGetNumDevs(); -} - -std::string MidiOutWinMM :: getPortName( unsigned int portNumber ) -{ - std::string stringName; - unsigned int nDevices = midiOutGetNumDevs(); - if ( portNumber >= nDevices ) { - std::ostringstream ost; - ost << "MidiOutWinMM::getPortName: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - //RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - RtMidi::error( RtError::WARNING, errorString_ ); - return stringName; - } - - MIDIOUTCAPS deviceCaps; - midiOutGetDevCaps( portNumber, &deviceCaps, sizeof(MIDIOUTCAPS)); - -#if defined( UNICODE ) || defined( _UNICODE ) - int length = WideCharToMultiByte(CP_UTF8, 0, deviceCaps.szPname, -1, NULL, 0, NULL, NULL); - stringName.assign( length, 0 ); - length = WideCharToMultiByte(CP_UTF8, 0, deviceCaps.szPname, wcslen(deviceCaps.szPname), &stringName[0], length, NULL, NULL); -#else - stringName = std::string( deviceCaps.szPname ); -#endif - - return stringName; -} - -void MidiOutWinMM :: openPort( unsigned int portNumber, const std::string /*portName*/ ) -{ - if ( connected_ ) { - errorString_ = "MidiOutWinMM::openPort: a valid connection already exists!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - unsigned int nDevices = midiOutGetNumDevs(); - if (nDevices < 1) { - errorString_ = "MidiOutWinMM::openPort: no MIDI output destinations found!"; - RtMidi::error( RtError::NO_DEVICES_FOUND, errorString_ ); - } - - std::ostringstream ost; - if ( portNumber >= nDevices ) { - ost << "MidiOutWinMM::openPort: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::INVALID_PARAMETER, errorString_ ); - } - - WinMidiData *data = static_cast (apiData_); - MMRESULT result = midiOutOpen( &data->outHandle, - portNumber, - (DWORD)NULL, - (DWORD)NULL, - CALLBACK_NULL ); - if ( result != MMSYSERR_NOERROR ) { - errorString_ = "MidiOutWinMM::openPort: error creating Windows MM MIDI output port."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - connected_ = true; -} - -void MidiOutWinMM :: closePort( void ) -{ - if ( connected_ ) { - WinMidiData *data = static_cast (apiData_); - midiOutReset( data->outHandle ); - midiOutClose( data->outHandle ); - connected_ = false; - } -} - -void MidiOutWinMM :: openVirtualPort( std::string portName ) -{ - // This function cannot be implemented for the Windows MM MIDI API. - errorString_ = "MidiOutWinMM::openVirtualPort: cannot be implemented in Windows MM MIDI API!"; - RtMidi::error( RtError::WARNING, errorString_ ); -} - -void MidiOutWinMM :: sendMessage( std::vector *message ) -{ - unsigned int nBytes = static_cast(message->size()); - if ( nBytes == 0 ) { - errorString_ = "MidiOutWinMM::sendMessage: message argument is empty!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - MMRESULT result; - WinMidiData *data = static_cast (apiData_); - if ( message->at(0) == 0xF0 ) { // Sysex message - - // Allocate buffer for sysex data. - char *buffer = (char *) malloc( nBytes ); - if ( buffer == NULL ) { - errorString_ = "MidiOutWinMM::sendMessage: error allocating sysex message memory!"; - RtMidi::error( RtError::MEMORY_ERROR, errorString_ ); - } - - // Copy data to buffer. - for ( unsigned int i=0; iat(i); - - // Create and prepare MIDIHDR structure. - MIDIHDR sysex; - sysex.lpData = (LPSTR) buffer; - sysex.dwBufferLength = nBytes; - sysex.dwFlags = 0; - result = midiOutPrepareHeader( data->outHandle, &sysex, sizeof(MIDIHDR) ); - if ( result != MMSYSERR_NOERROR ) { - free( buffer ); - errorString_ = "MidiOutWinMM::sendMessage: error preparing sysex header."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Send the message. - result = midiOutLongMsg( data->outHandle, &sysex, sizeof(MIDIHDR) ); - if ( result != MMSYSERR_NOERROR ) { - free( buffer ); - errorString_ = "MidiOutWinMM::sendMessage: error sending sysex message."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Unprepare the buffer and MIDIHDR. - while ( MIDIERR_STILLPLAYING == midiOutUnprepareHeader( data->outHandle, &sysex, sizeof (MIDIHDR) ) ) Sleep( 1 ); - free( buffer ); - - } - else { // Channel or system message. - - // Make sure the message size isn't too big. - if ( nBytes > 3 ) { - errorString_ = "MidiOutWinMM::sendMessage: message size is greater than 3 bytes (and not sysex)!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return; - } - - // Pack MIDI bytes into double word. - DWORD packet; - unsigned char *ptr = (unsigned char *) &packet; - for ( unsigned int i=0; iat(i); - ++ptr; - } - - // Send the message immediately. - result = midiOutShortMsg( data->outHandle, packet ); - if ( result != MMSYSERR_NOERROR ) { - errorString_ = "MidiOutWinMM::sendMessage: error sending MIDI message."; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - } -} - -#endif // __WINDOWS_MM__ - -// *********************************************************************// -// API: WINDOWS Kernel Streaming -// -// Written by Sebastien Alaiwan, 2012. -// -// NOTE BY GARY: much of the KS-specific code below probably should go in a separate file. -// -// *********************************************************************// - -#if defined(__WINDOWS_KS__) - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ks.h" -#include "ksmedia.h" - -#define INSTANTIATE_GUID(a) GUID const a = { STATIC_ ## a } - -INSTANTIATE_GUID(GUID_NULL); -INSTANTIATE_GUID(KSPROPSETID_Pin); -INSTANTIATE_GUID(KSPROPSETID_Connection); -INSTANTIATE_GUID(KSPROPSETID_Topology); -INSTANTIATE_GUID(KSINTERFACESETID_Standard); -INSTANTIATE_GUID(KSMEDIUMSETID_Standard); -INSTANTIATE_GUID(KSDATAFORMAT_TYPE_MUSIC); -INSTANTIATE_GUID(KSDATAFORMAT_SUBTYPE_MIDI); -INSTANTIATE_GUID(KSDATAFORMAT_SPECIFIER_NONE); - -#undef INSTANTIATE_GUID - -typedef std::basic_string tstring; - -inline bool IsValid(HANDLE handle) -{ - return handle != NULL && handle != INVALID_HANDLE_VALUE; -} - -class ComException : public std::runtime_error -{ -private: - static std::string MakeString(std::string const& s, HRESULT hr) - { - std::stringstream ss; - ss << "(error 0x" << std::hex << hr << ")"; - return s + ss.str(); - } - -public: - ComException(std::string const& s, HRESULT hr) : - std::runtime_error(MakeString(s, hr)) - { - } -}; - -template -class CKsEnumFilters -{ -public: - ~CKsEnumFilters() - { - DestroyLists(); - } - - void EnumFilters(GUID const* categories, size_t numCategories) - { - DestroyLists(); - - if (categories == 0) - throw std::runtime_error("CKsEnumFilters: invalid argument"); - - // Get a handle to the device set specified by the guid - HDEVINFO hDevInfo = ::SetupDiGetClassDevs(&categories[0], NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); - if (!IsValid(hDevInfo)) - throw std::runtime_error("CKsEnumFilters: no devices found"); - - // Loop through members of the set and get details for each - for (int iClassMember=0;;iClassMember++) { - try { - SP_DEVICE_INTERFACE_DATA DID; - DID.cbSize = sizeof(DID); - DID.Reserved = 0; - - bool fRes = ::SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &categories[0], iClassMember, &DID); - if (!fRes) - break; - - // Get filter friendly name - HKEY hRegKey = ::SetupDiOpenDeviceInterfaceRegKey(hDevInfo, &DID, 0, KEY_READ); - if (hRegKey == INVALID_HANDLE_VALUE) - throw std::runtime_error("CKsEnumFilters: interface has no registry"); - - char friendlyName[256]; - DWORD dwSize = sizeof friendlyName; - LONG lval = ::RegQueryValueEx(hRegKey, TEXT("FriendlyName"), NULL, NULL, (LPBYTE)friendlyName, &dwSize); - ::RegCloseKey(hRegKey); - if (lval != ERROR_SUCCESS) - throw std::runtime_error("CKsEnumFilters: interface has no friendly name"); - - // Get details for the device registered in this class - DWORD const cbItfDetails = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA) + MAX_PATH * sizeof(WCHAR); - std::vector buffer(cbItfDetails); - - SP_DEVICE_INTERFACE_DETAIL_DATA* pDevInterfaceDetails = reinterpret_cast(&buffer[0]); - pDevInterfaceDetails->cbSize = sizeof(*pDevInterfaceDetails); - - SP_DEVINFO_DATA DevInfoData; - DevInfoData.cbSize = sizeof(DevInfoData); - DevInfoData.Reserved = 0; - - fRes = ::SetupDiGetDeviceInterfaceDetail(hDevInfo, &DID, pDevInterfaceDetails, cbItfDetails, NULL, &DevInfoData); - if (!fRes) - throw std::runtime_error("CKsEnumFilters: could not get interface details"); - - // check additional category guids which may (or may not) have been supplied - for (size_t i=1; i < numCategories; ++i) { - SP_DEVICE_INTERFACE_DATA DIDAlias; - DIDAlias.cbSize = sizeof(DIDAlias); - DIDAlias.Reserved = 0; - - fRes = ::SetupDiGetDeviceInterfaceAlias(hDevInfo, &DID, &categories[i], &DIDAlias); - if (!fRes) - throw std::runtime_error("CKsEnumFilters: could not get interface alias"); - - // Check if the this interface alias is enabled. - if (!DIDAlias.Flags || (DIDAlias.Flags & SPINT_REMOVED)) - throw std::runtime_error("CKsEnumFilters: interface alias is not enabled"); - } - - std::auto_ptr pFilter(new TFilterType(pDevInterfaceDetails->DevicePath, friendlyName)); - - pFilter->Instantiate(); - pFilter->FindMidiPins(); - pFilter->Validate(); - - m_Filters.push_back(pFilter.release()); - } - catch (std::runtime_error const& e) { - } - } - - ::SetupDiDestroyDeviceInfoList(hDevInfo); - } - -private: - void DestroyLists() - { - for (size_t i=0;i < m_Filters.size();++i) - delete m_Filters[i]; - m_Filters.clear(); - } - -public: - // TODO: make this private. - std::vector m_Filters; -}; - -class CKsObject -{ -public: - CKsObject(HANDLE handle) : m_handle(handle) - { - } - -protected: - HANDLE m_handle; - - void SetProperty(REFGUID guidPropertySet, ULONG nProperty, void* pvValue, ULONG cbValue) - { - KSPROPERTY ksProperty; - memset(&ksProperty, 0, sizeof ksProperty); - ksProperty.Set = guidPropertySet; - ksProperty.Id = nProperty; - ksProperty.Flags = KSPROPERTY_TYPE_SET; - - HRESULT hr = DeviceIoControlKsProperty(ksProperty, pvValue, cbValue); - if (FAILED(hr)) - throw ComException("CKsObject::SetProperty: could not set property", hr); - } - -private: - - HRESULT DeviceIoControlKsProperty(KSPROPERTY& ksProperty, void* pvValue, ULONG cbValue) - { - ULONG ulReturned; - return ::DeviceIoControl( - m_handle, - IOCTL_KS_PROPERTY, - &ksProperty, - sizeof(ksProperty), - pvValue, - cbValue, - &ulReturned, - NULL); - } -}; - -class CKsPin; - -class CKsFilter : public CKsObject -{ - friend class CKsPin; - -public: - CKsFilter(tstring const& name, std::string const& sFriendlyName); - virtual ~CKsFilter(); - - virtual void Instantiate(); - - template - T GetPinProperty(ULONG nPinId, ULONG nProperty) - { - ULONG ulReturned = 0; - T value; - - KSP_PIN ksPProp; - ksPProp.Property.Set = KSPROPSETID_Pin; - ksPProp.Property.Id = nProperty; - ksPProp.Property.Flags = KSPROPERTY_TYPE_GET; - ksPProp.PinId = nPinId; - ksPProp.Reserved = 0; - - HRESULT hr = ::DeviceIoControl( - m_handle, - IOCTL_KS_PROPERTY, - &ksPProp, - sizeof(KSP_PIN), - &value, - sizeof(value), - &ulReturned, - NULL); - if (FAILED(hr)) - throw ComException("CKsFilter::GetPinProperty: failed to retrieve property", hr); - - return value; - } - - void GetPinPropertyMulti(ULONG nPinId, REFGUID guidPropertySet, ULONG nProperty, PKSMULTIPLE_ITEM* ppKsMultipleItem) - { - HRESULT hr; - - KSP_PIN ksPProp; - ksPProp.Property.Set = guidPropertySet; - ksPProp.Property.Id = nProperty; - ksPProp.Property.Flags = KSPROPERTY_TYPE_GET; - ksPProp.PinId = nPinId; - ksPProp.Reserved = 0; - - ULONG cbMultipleItem = 0; - hr = ::DeviceIoControl(m_handle, - IOCTL_KS_PROPERTY, - &ksPProp.Property, - sizeof(KSP_PIN), - NULL, - 0, - &cbMultipleItem, - NULL); - if (FAILED(hr)) - throw ComException("CKsFilter::GetPinPropertyMulti: cannot get property", hr); - - *ppKsMultipleItem = (PKSMULTIPLE_ITEM) new BYTE[cbMultipleItem]; - - ULONG ulReturned = 0; - hr = ::DeviceIoControl( - m_handle, - IOCTL_KS_PROPERTY, - &ksPProp, - sizeof(KSP_PIN), - (PVOID)*ppKsMultipleItem, - cbMultipleItem, - &ulReturned, - NULL); - if (FAILED(hr)) - throw ComException("CKsFilter::GetPinPropertyMulti: cannot get property", hr); - } - - std::string const& GetFriendlyName() const - { - return m_sFriendlyName; - } - -protected: - - std::vector m_Pins; // this list owns the pins. - - std::vector m_RenderPins; - std::vector m_CapturePins; - -private: - std::string const m_sFriendlyName; // friendly name eg "Virus TI Synth" - tstring const m_sName; // Filter path, eg "\\?\usb#vid_133e&pid_0815...\vtimidi02" -}; - -class CKsPin : public CKsObject -{ -public: - CKsPin(CKsFilter* pFilter, ULONG nId); - virtual ~CKsPin(); - - virtual void Instantiate(); - - void ClosePin(); - - void SetState(KSSTATE ksState); - - void WriteData(KSSTREAM_HEADER* pKSSTREAM_HEADER, OVERLAPPED* pOVERLAPPED); - void ReadData(KSSTREAM_HEADER* pKSSTREAM_HEADER, OVERLAPPED* pOVERLAPPED); - - KSPIN_DATAFLOW GetDataFlow() const - { - return m_DataFlow; - } - - bool IsSink() const - { - return m_Communication == KSPIN_COMMUNICATION_SINK - || m_Communication == KSPIN_COMMUNICATION_BOTH; - } - - -protected: - PKSPIN_CONNECT m_pKsPinConnect; // creation parameters of pin - CKsFilter* const m_pFilter; - - ULONG m_cInterfaces; - PKSIDENTIFIER m_pInterfaces; - PKSMULTIPLE_ITEM m_pmiInterfaces; - - ULONG m_cMediums; - PKSIDENTIFIER m_pMediums; - PKSMULTIPLE_ITEM m_pmiMediums; - - ULONG m_cDataRanges; - PKSDATARANGE m_pDataRanges; - PKSMULTIPLE_ITEM m_pmiDataRanges; - - KSPIN_DATAFLOW m_DataFlow; - KSPIN_COMMUNICATION m_Communication; -}; - -CKsFilter::CKsFilter(tstring const& sName, std::string const& sFriendlyName) : - CKsObject(INVALID_HANDLE_VALUE), - m_sFriendlyName(sFriendlyName), - m_sName(sName) -{ - if (sName.empty()) - throw std::runtime_error("CKsFilter::CKsFilter: name can't be empty"); -} - -CKsFilter::~CKsFilter() -{ - for (size_t i=0;i < m_Pins.size();++i) - delete m_Pins[i]; - - if (IsValid(m_handle)) - ::CloseHandle(m_handle); -} - -void CKsFilter::Instantiate() -{ - m_handle = CreateFile( - m_sName.c_str(), - GENERIC_READ | GENERIC_WRITE, - 0, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, - NULL); - - if (!IsValid(m_handle)) - { - DWORD const dwError = GetLastError(); - throw ComException("CKsFilter::Instantiate: can't open driver", HRESULT_FROM_WIN32(dwError)); - } -} - -CKsPin::CKsPin(CKsFilter* pFilter, ULONG PinId) : - CKsObject(INVALID_HANDLE_VALUE), - m_pKsPinConnect(NULL), - m_pFilter(pFilter) -{ - m_Communication = m_pFilter->GetPinProperty(PinId, KSPROPERTY_PIN_COMMUNICATION); - m_DataFlow = m_pFilter->GetPinProperty(PinId, KSPROPERTY_PIN_DATAFLOW); - - // Interfaces - m_pFilter->GetPinPropertyMulti( - PinId, - KSPROPSETID_Pin, - KSPROPERTY_PIN_INTERFACES, - &m_pmiInterfaces); - - m_cInterfaces = m_pmiInterfaces->Count; - m_pInterfaces = (PKSPIN_INTERFACE)(m_pmiInterfaces + 1); - - // Mediums - m_pFilter->GetPinPropertyMulti( - PinId, - KSPROPSETID_Pin, - KSPROPERTY_PIN_MEDIUMS, - &m_pmiMediums); - - m_cMediums = m_pmiMediums->Count; - m_pMediums = (PKSPIN_MEDIUM)(m_pmiMediums + 1); - - // Data ranges - m_pFilter->GetPinPropertyMulti( - PinId, - KSPROPSETID_Pin, - KSPROPERTY_PIN_DATARANGES, - &m_pmiDataRanges); - - m_cDataRanges = m_pmiDataRanges->Count; - m_pDataRanges = (PKSDATARANGE)(m_pmiDataRanges + 1); -} - -CKsPin::~CKsPin() -{ - ClosePin(); - - delete[] (BYTE*)m_pKsPinConnect; - delete[] (BYTE*)m_pmiDataRanges; - delete[] (BYTE*)m_pmiInterfaces; - delete[] (BYTE*)m_pmiMediums; -} - -void CKsPin::ClosePin() -{ - if (IsValid(m_handle)) { - SetState(KSSTATE_STOP); - ::CloseHandle(m_handle); - } - m_handle = INVALID_HANDLE_VALUE; -} - -void CKsPin::SetState(KSSTATE ksState) -{ - SetProperty(KSPROPSETID_Connection, KSPROPERTY_CONNECTION_STATE, &ksState, sizeof(ksState)); -} - -void CKsPin::Instantiate() -{ - if (!m_pKsPinConnect) - throw std::runtime_error("CKsPin::Instanciate: abstract pin"); - - DWORD const dwResult = KsCreatePin(m_pFilter->m_handle, m_pKsPinConnect, GENERIC_WRITE | GENERIC_READ, &m_handle); - if (dwResult != ERROR_SUCCESS) - throw ComException("CKsMidiCapFilter::CreateRenderPin: Pin instanciation failed", HRESULT_FROM_WIN32(dwResult)); -} - -void CKsPin::WriteData(KSSTREAM_HEADER* pKSSTREAM_HEADER, OVERLAPPED* pOVERLAPPED) -{ - DWORD cbWritten; - BOOL fRes = ::DeviceIoControl( - m_handle, - IOCTL_KS_WRITE_STREAM, - NULL, - 0, - pKSSTREAM_HEADER, - pKSSTREAM_HEADER->Size, - &cbWritten, - pOVERLAPPED); - if (!fRes) { - DWORD const dwError = GetLastError(); - if (dwError != ERROR_IO_PENDING) - throw ComException("CKsPin::WriteData: DeviceIoControl failed", HRESULT_FROM_WIN32(dwError)); - } -} - -void CKsPin::ReadData(KSSTREAM_HEADER* pKSSTREAM_HEADER, OVERLAPPED* pOVERLAPPED) -{ - DWORD cbReturned; - BOOL fRes = ::DeviceIoControl( - m_handle, - IOCTL_KS_READ_STREAM, - NULL, - 0, - pKSSTREAM_HEADER, - pKSSTREAM_HEADER->Size, - &cbReturned, - pOVERLAPPED); - if (!fRes) { - DWORD const dwError = GetLastError(); - if (dwError != ERROR_IO_PENDING) - throw ComException("CKsPin::ReadData: DeviceIoControl failed", HRESULT_FROM_WIN32(dwError)); - } -} - -class CKsMidiFilter : public CKsFilter -{ -public: - void FindMidiPins(); - -protected: - CKsMidiFilter(tstring const& sPath, std::string const& sFriendlyName); -}; - -class CKsMidiPin : public CKsPin -{ -public: - CKsMidiPin(CKsFilter* pFilter, ULONG nId); -}; - -class CKsMidiRenFilter : public CKsMidiFilter -{ -public: - CKsMidiRenFilter(tstring const& sPath, std::string const& sFriendlyName); - CKsMidiPin* CreateRenderPin(); - - void Validate() - { - if (m_RenderPins.empty()) - throw std::runtime_error("Could not find a MIDI render pin"); - } -}; - -class CKsMidiCapFilter : public CKsMidiFilter -{ -public: - CKsMidiCapFilter(tstring const& sPath, std::string const& sFriendlyName); - CKsMidiPin* CreateCapturePin(); - - void Validate() - { - if (m_CapturePins.empty()) - throw std::runtime_error("Could not find a MIDI capture pin"); - } -}; - -CKsMidiFilter::CKsMidiFilter(tstring const& sPath, std::string const& sFriendlyName) : - CKsFilter(sPath, sFriendlyName) -{ -} - -void CKsMidiFilter::FindMidiPins() -{ - ULONG numPins = GetPinProperty(0, KSPROPERTY_PIN_CTYPES); - - for (ULONG iPin = 0; iPin < numPins; ++iPin) { - try { - KSPIN_COMMUNICATION com = GetPinProperty(iPin, KSPROPERTY_PIN_COMMUNICATION); - if (com != KSPIN_COMMUNICATION_SINK && com != KSPIN_COMMUNICATION_BOTH) - throw std::runtime_error("Unknown pin communication value"); - - m_Pins.push_back(new CKsMidiPin(this, iPin)); - } - catch (std::runtime_error const&) { - // pin instanciation has failed, continue to the next pin. - } - } - - m_RenderPins.clear(); - m_CapturePins.clear(); - - for (size_t i = 0; i < m_Pins.size(); ++i) { - CKsPin* const pPin = m_Pins[i]; - - if (pPin->IsSink()) { - if (pPin->GetDataFlow() == KSPIN_DATAFLOW_IN) - m_RenderPins.push_back(pPin); - else - m_CapturePins.push_back(pPin); - } - } - - if (m_RenderPins.empty() && m_CapturePins.empty()) - throw std::runtime_error("No valid pins found on the filter."); -} - -CKsMidiRenFilter::CKsMidiRenFilter(tstring const& sPath, std::string const& sFriendlyName) : - CKsMidiFilter(sPath, sFriendlyName) -{ -} - -CKsMidiPin* CKsMidiRenFilter::CreateRenderPin() -{ - if (m_RenderPins.empty()) - throw std::runtime_error("Could not find a MIDI render pin"); - - CKsMidiPin* pPin = (CKsMidiPin*)m_RenderPins[0]; - pPin->Instantiate(); - return pPin; -} - -CKsMidiCapFilter::CKsMidiCapFilter(tstring const& sPath, std::string const& sFriendlyName) : - CKsMidiFilter(sPath, sFriendlyName) -{ -} - -CKsMidiPin* CKsMidiCapFilter::CreateCapturePin() -{ - if (m_CapturePins.empty()) - throw std::runtime_error("Could not find a MIDI capture pin"); - - CKsMidiPin* pPin = (CKsMidiPin*)m_CapturePins[0]; - pPin->Instantiate(); - return pPin; -} - -CKsMidiPin::CKsMidiPin(CKsFilter* pFilter, ULONG nId) : - CKsPin(pFilter, nId) -{ - DWORD const cbPinCreateSize = sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT); - m_pKsPinConnect = (PKSPIN_CONNECT) new BYTE[cbPinCreateSize]; - - m_pKsPinConnect->Interface.Set = KSINTERFACESETID_Standard; - m_pKsPinConnect->Interface.Id = KSINTERFACE_STANDARD_STREAMING; - m_pKsPinConnect->Interface.Flags = 0; - m_pKsPinConnect->Medium.Set = KSMEDIUMSETID_Standard; - m_pKsPinConnect->Medium.Id = KSMEDIUM_TYPE_ANYINSTANCE; - m_pKsPinConnect->Medium.Flags = 0; - m_pKsPinConnect->PinId = nId; - m_pKsPinConnect->PinToHandle = NULL; - m_pKsPinConnect->Priority.PriorityClass = KSPRIORITY_NORMAL; - m_pKsPinConnect->Priority.PrioritySubClass = 1; - - // point m_pDataFormat to just after the pConnect struct - KSDATAFORMAT* m_pDataFormat = (KSDATAFORMAT*)(m_pKsPinConnect + 1); - m_pDataFormat->FormatSize = sizeof(KSDATAFORMAT); - m_pDataFormat->Flags = 0; - m_pDataFormat->SampleSize = 0; - m_pDataFormat->Reserved = 0; - m_pDataFormat->MajorFormat = GUID(KSDATAFORMAT_TYPE_MUSIC); - m_pDataFormat->SubFormat = GUID(KSDATAFORMAT_SUBTYPE_MIDI); - m_pDataFormat->Specifier = GUID(KSDATAFORMAT_SPECIFIER_NONE); - - bool hasStdStreamingInterface = false; - bool hasStdStreamingMedium = false; - - for ( ULONG i = 0; i < m_cInterfaces; i++ ) { - if (m_pInterfaces[i].Set == KSINTERFACESETID_Standard - && m_pInterfaces[i].Id == KSINTERFACE_STANDARD_STREAMING) - hasStdStreamingInterface = true; - } - - for (ULONG i = 0; i < m_cMediums; i++) { - if (m_pMediums[i].Set == KSMEDIUMSETID_Standard - && m_pMediums[i].Id == KSMEDIUM_STANDARD_DEVIO) - hasStdStreamingMedium = true; - } - - if (!hasStdStreamingInterface) // No standard streaming interfaces on the pin - throw std::runtime_error("CKsMidiPin::CKsMidiPin: no standard streaming interface"); - - if (!hasStdStreamingMedium) // No standard streaming mediums on the pin - throw std::runtime_error("CKsMidiPin::CKsMidiPin: no standard streaming medium"); - - bool hasMidiDataRange = false; - - BYTE const* pDataRangePtr = reinterpret_cast(m_pDataRanges); - - for (ULONG i = 0; i < m_cDataRanges; ++i) { - KSDATARANGE const* pDataRange = reinterpret_cast(pDataRangePtr); - - if (pDataRange->SubFormat == KSDATAFORMAT_SUBTYPE_MIDI) { - hasMidiDataRange = true; - break; - } - - pDataRangePtr += pDataRange->FormatSize; - } - - if (!hasMidiDataRange) // No MIDI dataranges on the pin - throw std::runtime_error("CKsMidiPin::CKsMidiPin: no MIDI datarange"); -} - - -struct WindowsKsData -{ - WindowsKsData() : m_pPin(NULL), m_Buffer(1024), m_hInputThread(NULL) - { - memset(&overlapped, 0, sizeof(OVERLAPPED)); - m_hExitEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); - overlapped.hEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); - m_hInputThread = NULL; - } - - ~WindowsKsData() - { - ::CloseHandle(overlapped.hEvent); - ::CloseHandle(m_hExitEvent); - } - - OVERLAPPED overlapped; - CKsPin* m_pPin; - std::vector m_Buffer; - std::auto_ptr > m_pCaptureEnum; - std::auto_ptr > m_pRenderEnum; - HANDLE m_hInputThread; - HANDLE m_hExitEvent; -}; - -// *********************************************************************// -// API: WINDOWS Kernel Streaming -// Class Definitions: MidiInWinKS -// *********************************************************************// - -DWORD WINAPI midiKsInputThread(VOID* pUser) -{ - MidiInApi::RtMidiInData* data = static_cast(pUser); - WindowsKsData* apiData = static_cast(data->apiData); - - HANDLE hEvents[] = { apiData->overlapped.hEvent, apiData->m_hExitEvent }; - - while ( true ) { - KSSTREAM_HEADER packet; - memset(&packet, 0, sizeof packet); - packet.Size = sizeof(KSSTREAM_HEADER); - packet.PresentationTime.Time = 0; - packet.PresentationTime.Numerator = 1; - packet.PresentationTime.Denominator = 1; - packet.Data = &apiData->m_Buffer[0]; - packet.DataUsed = 0; - packet.FrameExtent = apiData->m_Buffer.size(); - apiData->m_pPin->ReadData(&packet, &apiData->overlapped); - - DWORD dwRet = ::WaitForMultipleObjects(2, hEvents, FALSE, INFINITE); - - if ( dwRet == WAIT_OBJECT_0 ) { - // parse packet - unsigned char* pData = (unsigned char*)packet.Data; - unsigned int iOffset = 0; - - while ( iOffset < packet.DataUsed ) { - KSMUSICFORMAT* pMusic = (KSMUSICFORMAT*)&pData[iOffset]; - iOffset += sizeof(KSMUSICFORMAT); - - MidiInApi::MidiMessage message; - message.timeStamp = 0; - for(size_t i=0;i < pMusic->ByteCount;++i) - message.bytes.push_back(pData[iOffset+i]); - - if ( data->usingCallback ) { - RtMidiIn::RtMidiCallback callback = (RtMidiIn::RtMidiCallback)data->userCallback; - callback(message.timeStamp, &message.bytes, data->userData); - } - else { - // As long as we haven't reached our queue size limit, push the message. - if ( data->queue.size < data->queue.ringSize ) { - data->queue.ring[data->queue.back++] = message; - if(data->queue.back == data->queue.ringSize) - data->queue.back = 0; - data->queue.size++; - } - else - std::cerr << "\nRtMidiIn: message queue limit reached!!\n\n"; - } - - iOffset += pMusic->ByteCount; - - // re-align on 32 bits - if ( iOffset % 4 != 0 ) - iOffset += (4 - iOffset % 4); - } - } - else - break; - } - return 0; -} - -MidiInWinKS :: MidiInWinKS( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) -{ - initialize( clientName ); -} - -void MidiInWinKS :: initialize( const std::string& clientName ) -{ - WindowsKsData* data = new WindowsKsData; - apiData_ = (void*)data; - inputData_.apiData = data; - - GUID const aguidEnumCats[] = - { - { STATIC_KSCATEGORY_AUDIO }, { STATIC_KSCATEGORY_CAPTURE } - }; - data->m_pCaptureEnum.reset(new CKsEnumFilters ); - data->m_pCaptureEnum->EnumFilters(aguidEnumCats, 2); -} - -MidiInWinKS :: ~MidiInWinKS() -{ - WindowsKsData* data = static_cast(apiData_); - try { - if ( data->m_pPin ) - closePort(); - } - catch(...) { - } - - delete data; -} - -void MidiInWinKS :: openPort( unsigned int portNumber, const std::string portName ) -{ - WindowsKsData* data = static_cast(apiData_); - - if ( portNumber < 0 || portNumber >= data->m_pCaptureEnum->m_Filters.size() ) { - std::stringstream ost; - ost << "MidiInWinKS::openPort: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - - CKsMidiCapFilter* pFilter = data->m_pCaptureEnum->m_Filters[portNumber]; - data->m_pPin = pFilter->CreateCapturePin(); - - if ( data->m_pPin == NULL ) { - std::stringstream ost; - ost << "MidiInWinKS::openPort: KS error opening port (could not create pin)"; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - - data->m_pPin->SetState(KSSTATE_RUN); - - DWORD threadId; - data->m_hInputThread = ::CreateThread(NULL, 0, &midiKsInputThread, &inputData_, 0, &threadId); - if ( data->m_hInputThread == NULL ) { - std::stringstream ost; - ost << "MidiInWinKS::initialize: Could not create input thread : Windows error " << GetLastError() << std::endl;; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - - connected_ = true; -} - -void MidiInWinKS :: openVirtualPort( const std::string portName ) -{ - // This function cannot be implemented for the Windows KS MIDI API. - errorString_ = "MidiInWinKS::openVirtualPort: cannot be implemented in Windows KS MIDI API!"; - RtMidi::error( RtError::WARNING, errorString_ ); -} - -unsigned int MidiInWinKS :: getPortCount() -{ - WindowsKsData* data = static_cast(apiData_); - return (unsigned int)data->m_pCaptureEnum->m_Filters.size(); -} - -std::string MidiInWinKS :: getPortName(unsigned int portNumber) -{ - WindowsKsData* data = static_cast(apiData_); - - if(portNumber < 0 || portNumber >= data->m_pCaptureEnum->m_Filters.size()) { - std::stringstream ost; - ost << "MidiInWinKS::getPortName: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - - CKsMidiCapFilter* pFilter = data->m_pCaptureEnum->m_Filters[portNumber]; - return pFilter->GetFriendlyName(); -} - -void MidiInWinKS :: closePort() -{ - WindowsKsData* data = static_cast(apiData_); - connected_ = false; - - if(data->m_hInputThread) { - ::SignalObjectAndWait(data->m_hExitEvent, data->m_hInputThread, INFINITE, FALSE); - ::CloseHandle(data->m_hInputThread); - } - - if(data->m_pPin) { - data->m_pPin->SetState(KSSTATE_PAUSE); - data->m_pPin->SetState(KSSTATE_STOP); - data->m_pPin->ClosePin(); - data->m_pPin = NULL; - } -} - -// *********************************************************************// -// API: WINDOWS Kernel Streaming -// Class Definitions: MidiOutWinKS -// *********************************************************************// - -MidiOutWinKS :: MidiOutWinKS( const std::string clientName ) : MidiOutApi() -{ - initialize( clientName ); -} - -void MidiOutWinKS :: initialize( const std::string& clientName ) -{ - WindowsKsData* data = new WindowsKsData; - - data->m_pPin = NULL; - data->m_pRenderEnum.reset(new CKsEnumFilters ); - GUID const aguidEnumCats[] = - { - { STATIC_KSCATEGORY_AUDIO }, { STATIC_KSCATEGORY_RENDER } - }; - data->m_pRenderEnum->EnumFilters(aguidEnumCats, 2); - - apiData_ = (void*)data; -} - -MidiOutWinKS :: ~MidiOutWinKS() -{ - // Close a connection if it exists. - closePort(); - - // Cleanup. - WindowsKsData* data = static_cast(apiData_); - delete data; -} - -void MidiOutWinKS :: openPort( unsigned int portNumber, const std::string portName ) -{ - WindowsKsData* data = static_cast(apiData_); - - if(portNumber < 0 || portNumber >= data->m_pRenderEnum->m_Filters.size()) { - std::stringstream ost; - ost << "MidiOutWinKS::openPort: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - - CKsMidiRenFilter* pFilter = data->m_pRenderEnum->m_Filters[portNumber]; - data->m_pPin = pFilter->CreateRenderPin(); - - if(data->m_pPin == NULL) { - std::stringstream ost; - ost << "MidiOutWinKS::openPort: KS error opening port (could not create pin)"; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - - data->m_pPin->SetState(KSSTATE_RUN); - connected_ = true; -} - -void MidiOutWinKS :: openVirtualPort( const std::string portName ) -{ - // This function cannot be implemented for the Windows KS MIDI API. - errorString_ = "MidiOutWinKS::openVirtualPort: cannot be implemented in Windows KS MIDI API!"; - RtMidi::error( RtError::WARNING, errorString_ ); -} - -unsigned int MidiOutWinKS :: getPortCount() -{ - WindowsKsData* data = static_cast(apiData_); - - return (unsigned int)data->m_pRenderEnum->m_Filters.size(); -} - -std::string MidiOutWinKS :: getPortName( unsigned int portNumber ) -{ - WindowsKsData* data = static_cast(apiData_); - - if ( portNumber < 0 || portNumber >= data->m_pRenderEnum->m_Filters.size() ) { - std::stringstream ost; - ost << "MidiOutWinKS::getPortName: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - - CKsMidiRenFilter* pFilter = data->m_pRenderEnum->m_Filters[portNumber]; - return pFilter->GetFriendlyName(); -} - -void MidiOutWinKS :: closePort() -{ - WindowsKsData* data = static_cast(apiData_); - connected_ = false; - - if ( data->m_pPin ) { - data->m_pPin->SetState(KSSTATE_PAUSE); - data->m_pPin->SetState(KSSTATE_STOP); - data->m_pPin->ClosePin(); - data->m_pPin = NULL; - } -} - -void MidiOutWinKS :: sendMessage(std::vector* pMessage) -{ - std::vector const& msg = *pMessage; - WindowsKsData* data = static_cast(apiData_); - size_t iNumMidiBytes = msg.size(); - size_t pos = 0; - - // write header - KSMUSICFORMAT* pKsMusicFormat = reinterpret_cast(&data->m_Buffer[pos]); - pKsMusicFormat->TimeDeltaMs = 0; - pKsMusicFormat->ByteCount = iNumMidiBytes; - pos += sizeof(KSMUSICFORMAT); - - // write MIDI bytes - if ( pos + iNumMidiBytes > data->m_Buffer.size() ) { - std::stringstream ost; - ost << "KsMidiInput::Write: MIDI buffer too small. Required " << pos + iNumMidiBytes << " bytes, only has " << data->m_Buffer.size(); - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - - if ( data->m_pPin == NULL ) { - std::stringstream ost; - ost << "MidiOutWinKS::sendMessage: port is not open"; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - - memcpy(&data->m_Buffer[pos], &msg[0], iNumMidiBytes); - pos += iNumMidiBytes; - - KSSTREAM_HEADER packet; - memset(&packet, 0, sizeof packet); - packet.Size = sizeof(packet); - packet.PresentationTime.Time = 0; - packet.PresentationTime.Numerator = 1; - packet.PresentationTime.Denominator = 1; - packet.Data = const_cast(&data->m_Buffer[0]); - packet.DataUsed = ((pos+3)/4)*4; - packet.FrameExtent = data->m_Buffer.size(); - - data->m_pPin->WriteData(&packet, NULL); -} - -#endif // __WINDOWS_KS__ - -//*********************************************************************// -// API: UNIX JACK -// -// Written primarily by Alexander Svetalkin, with updates for delta -// time by Gary Scavone, April 2011. -// -// *********************************************************************// - -#if defined(__UNIX_JACK__) - -// JACK header files -#include -#include -#include - -#define JACK_RINGBUFFER_SIZE 16384 // Default size for ringbuffer - -struct JackMidiData { - jack_client_t *client; - jack_port_t *port; - jack_ringbuffer_t *buffSize; - jack_ringbuffer_t *buffMessage; - jack_time_t lastTime; - MidiInApi :: RtMidiInData *rtMidiIn; - }; - -//*********************************************************************// -// API: JACK -// Class Definitions: MidiInJack -//*********************************************************************// - -int jackProcessIn( jack_nframes_t nframes, void *arg ) -{ - JackMidiData *jData = (JackMidiData *) arg; - MidiInApi :: RtMidiInData *rtData = jData->rtMidiIn; - jack_midi_event_t event; - jack_time_t long long time; - - // Is port created? - if ( jData->port == NULL ) return 0; - void *buff = jack_port_get_buffer( jData->port, nframes ); - - // We have midi events in buffer - int evCount = jack_midi_get_event_count( buff ); - if ( evCount > 0 ) { - MidiInApi::MidiMessage message; - message.bytes.clear(); - - jack_midi_event_get( &event, buff, 0 ); - - for (unsigned int i = 0; i < event.size; i++ ) - message.bytes.push_back( event.buffer[i] ); - - // Compute the delta time. - time = jack_get_time(); - if ( rtData->firstMessage == true ) - rtData->firstMessage = false; - else - message.timeStamp = ( time - jData->lastTime ) * 0.000001; - - jData->lastTime = time; - - if ( !rtData->continueSysex ) { - if ( rtData->usingCallback ) { - RtMidiIn::RtMidiCallback callback = (RtMidiIn::RtMidiCallback) rtData->userCallback; - callback( message.timeStamp, &message.bytes, rtData->userData ); - } - else { - // As long as we haven't reached our queue size limit, push the message. - if ( rtData->queue.size < rtData->queue.ringSize ) { - rtData->queue.ring[rtData->queue.back++] = message; - if ( rtData->queue.back == rtData->queue.ringSize ) - rtData->queue.back = 0; - rtData->queue.size++; - } - else - std::cerr << "\nMidiInJack: message queue limit reached!!\n\n"; - } - } - } - - return 0; -} - -MidiInJack :: MidiInJack( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) -{ - initialize( clientName ); -} - -void MidiInJack :: initialize( const std::string& clientName ) -{ - JackMidiData *data = new JackMidiData; - apiData_ = (void *) data; - - // Initialize JACK client - if (( data->client = jack_client_open( clientName.c_str(), JackNullOption, NULL )) == 0) { - errorString_ = "MidiInJack::initialize: JACK server not running?"; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - return; - } - - data->rtMidiIn = &inputData_; - data->port = NULL; - - jack_set_process_callback( data->client, jackProcessIn, data ); - jack_activate( data->client ); -} - -MidiInJack :: ~MidiInJack() -{ - JackMidiData *data = static_cast (apiData_); - closePort(); - - jack_client_close( data->client ); -} - -void MidiInJack :: openPort( unsigned int portNumber, const std::string portName ) -{ - JackMidiData *data = static_cast (apiData_); - - // Creating new port - if ( data->port == NULL) - data->port = jack_port_register( data->client, portName.c_str(), - JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0 ); - - if ( data->port == NULL) { - errorString_ = "MidiInJack::openVirtualPort: JACK error creating virtual port"; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Connecting to the output - std::string name = getPortName( portNumber ); - jack_connect( data->client, name.c_str(), jack_port_name( data->port ) ); -} - -void MidiInJack :: openVirtualPort( const std::string portName ) -{ - JackMidiData *data = static_cast (apiData_); - - if ( data->port == NULL ) - data->port = jack_port_register( data->client, portName.c_str(), - JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0 ); - - if ( data->port == NULL ) { - errorString_ = "MidiInJack::openVirtualPort: JACK error creating virtual port"; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } -} - -unsigned int MidiInJack :: getPortCount() -{ - int count = 0; - JackMidiData *data = static_cast (apiData_); - - // List of available ports - const char **ports = jack_get_ports( data->client, NULL, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput ); - - if ( ports == NULL ) return 0; - while ( ports[count] != NULL ) - count++; - - free( ports ); - - return count; -} - -std::string MidiInJack :: getPortName( unsigned int portNumber ) -{ - JackMidiData *data = static_cast (apiData_); - std::ostringstream ost; - std::string retStr(""); - - // List of available ports - const char **ports = jack_get_ports( data->client, NULL, - JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput ); - - // Check port validity - if ( ports == NULL ) { - errorString_ = "MidiInJack::getPortName: no ports available!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return retStr; - } - - if ( ports[portNumber] == NULL ) { - ost << "MidiInJack::getPortName: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - else retStr.assign( ports[portNumber] ); - - free( ports ); - - return retStr; -} - -void MidiInJack :: closePort() -{ - JackMidiData *data = static_cast (apiData_); - - if ( data->port == NULL ) return; - jack_port_unregister( data->client, data->port ); - data->port = NULL; -} - -//*********************************************************************// -// API: JACK -// Class Definitions: MidiOutJack -//*********************************************************************// - -// Jack process callback -int jackProcessOut( jack_nframes_t nframes, void *arg ) -{ - JackMidiData *data = (JackMidiData *) arg; - jack_midi_data_t *midiData; - int space; - - // Is port created? - if ( data->port == NULL ) return 0; - - void *buff = jack_port_get_buffer( data->port, nframes ); - jack_midi_clear_buffer( buff ); - - while ( jack_ringbuffer_read_space( data->buffSize ) > 0 ) { - jack_ringbuffer_read( data->buffSize, (char *) &space, (size_t) sizeof(space) ); - midiData = jack_midi_event_reserve( buff, 0, space ); - - jack_ringbuffer_read( data->buffMessage, (char *) midiData, (size_t) space ); - } - - return 0; -} - -MidiOutJack :: MidiOutJack( const std::string clientName ) : MidiOutApi() -{ - initialize( clientName ); -} - -void MidiOutJack :: initialize( const std::string& clientName ) -{ - JackMidiData *data = new JackMidiData; - - data->port = NULL; - - // Initialize JACK client - if (( data->client = jack_client_open( clientName.c_str(), JackNullOption, NULL )) == 0) { - errorString_ = "MidiOutJack::initialize: JACK server not running?"; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - return; - } - - jack_set_process_callback( data->client, jackProcessOut, data ); - data->buffSize = jack_ringbuffer_create( JACK_RINGBUFFER_SIZE ); - data->buffMessage = jack_ringbuffer_create( JACK_RINGBUFFER_SIZE ); - jack_activate( data->client ); - - apiData_ = (void *) data; -} - -MidiOutJack :: ~MidiOutJack() -{ - JackMidiData *data = static_cast (apiData_); - closePort(); - - // Cleanup - jack_client_close( data->client ); - jack_ringbuffer_free( data->buffSize ); - jack_ringbuffer_free( data->buffMessage ); - - delete data; -} - -void MidiOutJack :: openPort( unsigned int portNumber, const std::string portName ) -{ - JackMidiData *data = static_cast (apiData_); - - // Creating new port - if ( data->port == NULL ) - data->port = jack_port_register( data->client, portName.c_str(), - JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0 ); - - if ( data->port == NULL ) { - errorString_ = "MidiOutJack::openVirtualPort: JACK error creating virtual port"; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } - - // Connecting to the output - std::string name = getPortName( portNumber ); - jack_connect( data->client, jack_port_name( data->port ), name.c_str() ); -} - -void MidiOutJack :: openVirtualPort( const std::string portName ) -{ - JackMidiData *data = static_cast (apiData_); - - if ( data->port == NULL ) - data->port = jack_port_register( data->client, portName.c_str(), - JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0 ); - - if ( data->port == NULL ) { - errorString_ = "MidiOutJack::openVirtualPort: JACK error creating virtual port"; - RtMidi::error( RtError::DRIVER_ERROR, errorString_ ); - } -} - -unsigned int MidiOutJack :: getPortCount() -{ - int count = 0; - JackMidiData *data = static_cast (apiData_); - - // List of available ports - const char **ports = jack_get_ports( data->client, NULL, - JACK_DEFAULT_MIDI_TYPE, JackPortIsInput ); - - if ( ports == NULL ) return 0; - while ( ports[count] != NULL ) - count++; - - free( ports ); - - return count; -} - -std::string MidiOutJack :: getPortName( unsigned int portNumber ) -{ - JackMidiData *data = static_cast (apiData_); - std::ostringstream ost; - std::string retStr(""); - - // List of available ports - const char **ports = jack_get_ports( data->client, NULL, - JACK_DEFAULT_MIDI_TYPE, JackPortIsInput ); - - // Check port validity - if ( ports == NULL) { - errorString_ = "MidiOutJack::getPortName: no ports available!"; - RtMidi::error( RtError::WARNING, errorString_ ); - return retStr; - } - - if ( ports[portNumber] == NULL) { - ost << "MidiOutJack::getPortName: the 'portNumber' argument (" << portNumber << ") is invalid."; - errorString_ = ost.str(); - RtMidi::error( RtError::WARNING, errorString_ ); - } - else retStr.assign( ports[portNumber] ); - - free( ports ); - - return retStr; -} - -void MidiOutJack :: closePort() -{ - JackMidiData *data = static_cast (apiData_); - - if ( data->port == NULL ) return; - jack_port_unregister( data->client, data->port ); - data->port = NULL; -} - -void MidiOutJack :: sendMessage( std::vector *message ) -{ - int nBytes = message->size(); - JackMidiData *data = static_cast (apiData_); - - // Write full message to buffer - jack_ringbuffer_write( data->buffMessage, ( const char * ) &( *message )[0], - message->size() ); - jack_ringbuffer_write( data->buffSize, ( char * ) &nBytes, sizeof( nBytes ) ); -} - -#endif // __UNIX_JACK__ diff --git a/source/StkUGens/stk-4.4.4/src/RtWvIn.cpp b/source/StkUGens/stk-4.4.4/src/RtWvIn.cpp deleted file mode 100644 index f81d64bfe2..0000000000 --- a/source/StkUGens/stk-4.4.4/src/RtWvIn.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/***************************************************/ -/*! \class RtWvIn - \brief STK realtime audio (blocking) input class. - - This class provides a simplified interface to RtAudio for realtime - audio input. It is a subclass of WvIn. This class makes use of - RtAudio's callback functionality by creating a large ring-buffer - from which data is read. This class should not be used when - low-latency is desired. - - RtWvIn supports multi-channel data in both interleaved and - non-interleaved formats. It is important to distinguish the - tick() method that computes a single frame (and returns only the - specified sample of a multi-channel frame) from the overloaded one - that takes an StkFrames object for multi-channel and/or - multi-frame data. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "RtWvIn.h" -#include - -namespace stk { - -// This function is automatically called by RtAudio to supply input audio data. -int read( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, - double streamTime, RtAudioStreamStatus status, void *dataPointer ) -{ - ( (RtWvIn *) dataPointer )->fillBuffer( inputBuffer, nBufferFrames ); - return 0; -} - -// This function does not block. If the user does not read the buffer -// data fast enough, unread data will be overwritten (data overrun). -void RtWvIn :: fillBuffer( void *buffer, unsigned int nFrames ) -{ - StkFloat *samples = (StkFloat *) buffer; - unsigned int counter, iStart, nSamples = nFrames * data_.channels(); - - while ( nSamples > 0 ) { - - // I'm assuming that both the RtAudio and StkFrames buffers - // contain interleaved data. - iStart = writeIndex_ * data_.channels(); - counter = nSamples; - - // Pre-increment write pointer and check bounds. - writeIndex_ += nSamples / data_.channels(); - if ( writeIndex_ >= data_.frames() ) { - writeIndex_ = 0; - counter = data_.size() - iStart; - } - - // Copy data to the StkFrames container. - for ( unsigned int i=0; i data_.frames() ) { - framesFilled_ = data_.frames(); - oStream_ << "RtWvIn: audio buffer overrun!"; - handleError( StkError::WARNING ); - } -} - -RtWvIn :: RtWvIn( unsigned int nChannels, StkFloat sampleRate, int device, int bufferFrames, int nBuffers ) - : stopped_( true ), readIndex_( 0 ), writeIndex_( 0 ), framesFilled_( 0 ) -{ - // We'll let RtAudio deal with channel and sample rate limitations. - RtAudio::StreamParameters parameters; - if ( device == 0 ) - parameters.deviceId = adc_.getDefaultInputDevice(); - else - parameters.deviceId = device - 1; - parameters.nChannels = nChannels; - unsigned int size = bufferFrames; - RtAudioFormat format = ( sizeof(StkFloat) == 8 ) ? RTAUDIO_FLOAT64 : RTAUDIO_FLOAT32; - - try { - adc_.openStream( NULL, ¶meters, format, (unsigned int)Stk::sampleRate(), &size, &read, (void *)this ); - } - catch ( RtError &error ) { - handleError( error.what(), StkError::AUDIO_SYSTEM ); - } - - data_.resize( size * nBuffers, nChannels ); - lastFrame_.resize( 1, nChannels ); -} - -RtWvIn :: ~RtWvIn() -{ - if ( !stopped_ ) adc_.stopStream(); - adc_.closeStream(); -} - -void RtWvIn :: start() -{ - if ( stopped_ ) { - adc_.startStream(); - stopped_ = false; - } -} - -void RtWvIn :: stop() -{ - if ( !stopped_ ) { - adc_.stopStream(); - stopped_ = true; - for ( unsigned int i=0; i= data_.channels() ) { - oStream_ << "RtWvIn::tick(): channel argument is incompatible with streamed channels!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - if ( stopped_ ) this->start(); - - // Block until at least one frame is available. - while ( framesFilled_ == 0 ) Stk::sleep( 1 ); - - unsigned long index = readIndex_ * lastFrame_.channels(); - for ( unsigned int i=0; i= data_.frames() ) - readIndex_ = 0; - - return lastFrame_[channel]; -} - -StkFrames& RtWvIn :: tick( StkFrames& frames ) -{ - unsigned int nChannels = lastFrame_.channels(); -#if defined(_STK_DEBUG_) - if ( nChannels != frames.channels() ) { - oStream_ << "RtWvIn::tick(): StkFrames argument is incompatible with adc channels!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } -#endif - - if ( stopped_ ) this->start(); - - // See how much space we have and fill as much as we can ... if we - // still have space left in the frames object, then wait and repeat. - unsigned int nFrames, bytes, framesRead = 0; - while ( framesRead < frames.frames() ) { - - // Block until we have some input data. - while ( framesFilled_ == 0 ) Stk::sleep( 1 ); - - // Copy data in one chunk up to the end of the data buffer. - nFrames = framesFilled_; - if ( readIndex_ + nFrames > data_.frames() ) - nFrames = data_.frames() - readIndex_; - if ( nFrames > frames.frames() - framesRead ) - nFrames = frames.frames() - framesRead; - bytes = nFrames * nChannels * sizeof( StkFloat ); - StkFloat *samples = &data_[readIndex_ * nChannels]; - memcpy( &frames[framesRead * nChannels], samples, bytes ); - - readIndex_ += nFrames; - if ( readIndex_ == data_.frames() ) readIndex_ = 0; - - framesRead += nFrames; - mutex_.lock(); - framesFilled_ -= nFrames; - mutex_.unlock(); - } - - unsigned long index = (frames.frames() - 1) * nChannels; - for ( unsigned int i=0; i - -namespace stk { - -// Streaming status states. -enum { RUNNING, EMPTYING, FINISHED }; - -// This function is automatically called by RtAudio to get audio data for output. -int write( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, - double streamTime, RtAudioStreamStatus status, void *dataPointer ) -{ - return ( (RtWvOut *) dataPointer )->readBuffer( outputBuffer, nBufferFrames ); -} - -// This function does not block. If the user does not write output -// data to the buffer fast enough, previous data will be re-output -// (data underrun). -int RtWvOut :: readBuffer( void *buffer, unsigned int frameCount ) -{ - unsigned int nSamples, nChannels = data_.channels(); - unsigned int nFrames = frameCount; - StkFloat *input = (StkFloat *) &data_[ readIndex_ * nChannels ]; - StkFloat *output = (StkFloat *) buffer; - long counter; - - while ( nFrames > 0 ) { - - // I'm assuming that both the RtAudio and StkFrames buffers - // contain interleaved data. - counter = nFrames; - - // Pre-increment read pointer and check bounds. - readIndex_ += nFrames; - if ( readIndex_ >= data_.frames() ) { - counter -= readIndex_ - data_.frames(); - readIndex_ = 0; - } - - // Copy data from the StkFrames container. - if ( status_ == EMPTYING && framesFilled_ <= counter ) { - nSamples = framesFilled_ * nChannels; - unsigned int i; - for ( i=0; istart(); - - // Block until we have room for at least one frame of output data. - while ( framesFilled_ == (long) data_.frames() ) Stk::sleep( 1 ); - - unsigned int nChannels = data_.channels(); - StkFloat input = sample; - clipTest( input ); - unsigned long index = writeIndex_ * nChannels; - for ( unsigned int j=0; jstart(); - - // See how much space we have and fill as much as we can ... if we - // still have samples left in the frames object, then wait and - // repeat. - unsigned int framesEmpty, nFrames, bytes, framesWritten = 0; - unsigned int nChannels = data_.channels(); - while ( framesWritten < frames.frames() ) { - - // Block until we have some room for output data. - while ( framesFilled_ == (long) data_.frames() ) Stk::sleep( 1 ); - framesEmpty = data_.frames() - framesFilled_; - - // Copy data in one chunk up to the end of the data buffer. - nFrames = framesEmpty; - if ( writeIndex_ + nFrames > data_.frames() ) - nFrames = data_.frames() - writeIndex_; - if ( nFrames > frames.frames() - framesWritten ) - nFrames = frames.frames() - framesWritten; - bytes = nFrames * nChannels * sizeof( StkFloat ); - StkFloat *samples = &data_[writeIndex_ * nChannels]; - StkFrames *ins = (StkFrames *) &frames; - memcpy( samples, &(*ins)[framesWritten * nChannels], bytes ); - for ( unsigned int i=0; ireset(); - - // Start the envelope. - adsr_.keyOn(); - -} - -void Sampler :: keyOff( void ) -{ - adsr_.keyOff(); -} - -void Sampler :: noteOff( StkFloat amplitude ) -{ - this->keyOff(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Saxofony.cpp b/source/StkUGens/stk-4.4.4/src/Saxofony.cpp deleted file mode 100644 index 68ba129461..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Saxofony.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/***************************************************/ -/*! \class Saxofony - \brief STK faux conical bore reed instrument class. - - This class implements a "hybrid" digital - waveguide instrument that can generate a - variety of wind-like sounds. It has also been - referred to as the "blowed string" model. The - waveguide section is essentially that of a - string, with one rigid and one lossy - termination. The non-linear function is a - reed table. The string can be "blown" at any - point between the terminations, though just as - with strings, it is impossible to excite the - system at either end. If the excitation is - placed at the string mid-point, the sound is - that of a clarinet. At points closer to the - "bridge", the sound is closer to that of a - saxophone. See Scavone (2002) for more details. - - This is a digital waveguide model, making its - use possibly subject to patents held by Stanford - University, Yamaha, and others. - - Control Change Numbers: - - Reed Stiffness = 2 - - Reed Aperture = 26 - - Noise Gain = 4 - - Blow Position = 11 - - Vibrato Frequency = 29 - - Vibrato Gain = 1 - - Breath Pressure = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Saxofony.h" -#include "SKINI.msg" - -namespace stk { - -Saxofony :: Saxofony( StkFloat lowestFrequency ) -{ - if ( lowestFrequency <= 0.0 ) { - oStream_ << "Saxofony::Saxofony: argument is less than or equal to zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - unsigned long nDelays = (unsigned long) ( Stk::sampleRate() / lowestFrequency ); - delays_[0].setMaximumDelay( nDelays + 1 ); - delays_[1].setMaximumDelay( nDelays + 1 ); - - // Initialize blowing position to 0.2 of length. - position_ = 0.2; - - reedTable_.setOffset( 0.7 ); - reedTable_.setSlope( 0.3 ); - - vibrato_.setFrequency( 5.735 ); - - outputGain_ = 0.3; - noiseGain_ = 0.2; - vibratoGain_ = 0.1; - - this->setFrequency( 220.0 ); - this->clear(); -} - -Saxofony :: ~Saxofony( void ) -{ -} - -void Saxofony :: clear( void ) -{ - delays_[0].clear(); - delays_[1].clear(); - filter_.clear(); -} - -void Saxofony :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Saxofony::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - // Account for filter delay and one sample "lastOut" delay. - StkFloat delay = ( Stk::sampleRate() / frequency ) - filter_.phaseDelay( frequency ) - 1.0; - delays_[0].setDelay( (1.0-position_) * delay ); - delays_[1].setDelay( position_ * delay ); -} - -void Saxofony :: setBlowPosition( StkFloat position ) -{ - if ( position_ == position ) return; - - if ( position < 0.0 ) position_ = 0.0; - else if ( position > 1.0 ) position_ = 1.0; - else position_ = position; - - StkFloat totalDelay = delays_[0].getDelay(); - totalDelay += delays_[1].getDelay(); - - delays_[0].setDelay( (1.0-position_) * totalDelay ); - delays_[1].setDelay( position_ * totalDelay ); -} - -void Saxofony :: startBlowing( StkFloat amplitude, StkFloat rate ) -{ - if ( amplitude <= 0.0 || rate <= 0.0 ) { - oStream_ << "Saxofony::startBlowing: one or more arguments is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - envelope_.setRate( rate ); - envelope_.setTarget( amplitude ); -} - -void Saxofony :: stopBlowing( StkFloat rate ) -{ - if ( rate <= 0.0 ) { - oStream_ << "Saxofony::stopBlowing: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - envelope_.setRate( rate ); - envelope_.setTarget( 0.0 ); -} - -void Saxofony :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - this->startBlowing( 0.55 + (amplitude * 0.30), amplitude * 0.005 ); - outputGain_ = amplitude + 0.001; -} - -void Saxofony :: noteOff( StkFloat amplitude ) -{ - this->stopBlowing( amplitude * 0.01 ); -} - -void Saxofony :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Saxofony::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_ReedStiffness_) // 2 - reedTable_.setSlope( 0.1 + (0.4 * normalizedValue) ); - else if (number == __SK_NoiseLevel_) // 4 - noiseGain_ = ( normalizedValue * 0.4 ); - else if (number == 29) // 29 - vibrato_.setFrequency( normalizedValue * 12.0 ); - else if (number == __SK_ModWheel_) // 1 - vibratoGain_ = ( normalizedValue * 0.5 ); - else if (number == __SK_AfterTouch_Cont_) // 128 - envelope_.setValue( normalizedValue ); - else if (number == 11) // 11 - this->setBlowPosition( normalizedValue ); - else if (number == 26) // reed table offset - reedTable_.setOffset(0.4 + ( normalizedValue * 0.6)); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Saxofony::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Shakers.cpp b/source/StkUGens/stk-4.4.4/src/Shakers.cpp deleted file mode 100644 index 1eddaf4979..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Shakers.cpp +++ /dev/null @@ -1,729 +0,0 @@ -/***************************************************/ -/*! \class Shakers - \brief PhISEM and PhOLIES class. - - PhISEM (Physically Informed Stochastic Event Modeling) is an - algorithmic approach for simulating collisions of multiple - independent sound producing objects. This class is a meta-model - that can simulate a Maraca, Sekere, Cabasa, Bamboo Wind Chimes, - Water Drops, Tambourine, Sleighbells, and a Guiro. - - PhOLIES (Physically-Oriented Library of Imitated Environmental - Sounds) is a similar approach for the synthesis of environmental - sounds. This class implements simulations of breaking sticks, - crunchy snow (or not), a wrench, sandpaper, and more. - - Control Change Numbers: - - Shake Energy = 2 - - System Decay = 4 - - Number Of Objects = 11 - - Resonance Frequency = 1 - - Shake Energy = 128 - - Instrument Selection = 1071 - - Maraca = 0 - - Cabasa = 1 - - Sekere = 2 - - Tambourine = 3 - - Sleigh Bells = 4 - - Bamboo Chimes = 5 - - Sand Paper = 6 - - Coke Can = 7 - - Sticks = 8 - - Crunch = 9 - - Big Rocks = 10 - - Little Rocks = 11 - - Next Mug = 12 - - Penny + Mug = 13 - - Nickle + Mug = 14 - - Dime + Mug = 15 - - Quarter + Mug = 16 - - Franc + Mug = 17 - - Peso + Mug = 18 - - Guiro = 19 - - Wrench = 20 - - Water Drops = 21 - - Tuned Bamboo Chimes = 22 - - by Perry R. Cook with updates by Gary Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Shakers.h" -#include "SKINI.msg" - -namespace stk { - -// Maraca -const StkFloat MARACA_SOUND_DECAY = 0.95; -const StkFloat MARACA_SYSTEM_DECAY = 0.999; -const StkFloat MARACA_GAIN = 4.0; -const StkFloat MARACA_NUM_BEANS = 25; -const int MARACA_RESONANCES = 1; -const StkFloat MARACA_FREQUENCIES[MARACA_RESONANCES] = { 3200 }; -const StkFloat MARACA_RADII[MARACA_RESONANCES] = { 0.96 }; -const StkFloat MARACA_GAINS[MARACA_RESONANCES] = { 1.0 }; - -// Cabasa -const StkFloat CABASA_SOUND_DECAY = 0.96; -const StkFloat CABASA_SYSTEM_DECAY = 0.997; -const StkFloat CABASA_GAIN = 8.0; -const StkFloat CABASA_NUM_BEADS = 512; -const int CABASA_RESONANCES = 1; -const StkFloat CABASA_FREQUENCIES[CABASA_RESONANCES] = { 3000 }; -const StkFloat CABASA_RADII[CABASA_RESONANCES] = { 0.7 }; -const StkFloat CABASA_GAINS[CABASA_RESONANCES] = { 1.0 }; - -// Sekere -const StkFloat SEKERE_SOUND_DECAY = 0.96; -const StkFloat SEKERE_SYSTEM_DECAY = 0.999; -const StkFloat SEKERE_GAIN = 4.0; -const StkFloat SEKERE_NUM_BEANS = 64; -const int SEKERE_RESONANCES = 1; -const StkFloat SEKERE_FREQUENCIES[SEKERE_RESONANCES] = { 5500 }; -const StkFloat SEKERE_RADII[SEKERE_RESONANCES] = { 0.6 }; -const StkFloat SEKERE_GAINS[SEKERE_RESONANCES] = { 1.0 }; - -// Bamboo Wind Chimes -const StkFloat BAMBOO_SOUND_DECAY = 0.9; -const StkFloat BAMBOO_SYSTEM_DECAY = 0.9999; -const StkFloat BAMBOO_GAIN = 0.4; -const StkFloat BAMBOO_NUM_TUBES = 1.2; -const int BAMBOO_RESONANCES = 3; -const StkFloat BAMBOO_FREQUENCIES[BAMBOO_RESONANCES] = { 2800, 0.8 * 2800.0, 1.2 * 2800.0 }; -const StkFloat BAMBOO_RADII[BAMBOO_RESONANCES] = { 0.995, 0.995, 0.995 }; -const StkFloat BAMBOO_GAINS[BAMBOO_RESONANCES] = { 1.0, 1.0, 1.0 }; - -// Tambourine -const StkFloat TAMBOURINE_SOUND_DECAY = 0.95; -const StkFloat TAMBOURINE_SYSTEM_DECAY = 0.9985; -const StkFloat TAMBOURINE_GAIN = 1.0; -const StkFloat TAMBOURINE_NUM_TIMBRELS = 32; -const int TAMBOURINE_RESONANCES = 3; // Fixed shell + 2 moving cymbal resonances -const StkFloat TAMBOURINE_FREQUENCIES[TAMBOURINE_RESONANCES] = { 2300, 5600, 8100 }; -const StkFloat TAMBOURINE_RADII[TAMBOURINE_RESONANCES] = { 0.96, 0.99, 0.99 }; -const StkFloat TAMBOURINE_GAINS[TAMBOURINE_RESONANCES] = { 0.1, 0.8, 1.0 }; - -// Sleighbells -const StkFloat SLEIGH_SOUND_DECAY = 0.97; -const StkFloat SLEIGH_SYSTEM_DECAY = 0.9994; -const StkFloat SLEIGH_GAIN = 1.0; -const StkFloat SLEIGH_NUM_BELLS = 32; -const int SLEIGH_RESONANCES = 5; -const StkFloat SLEIGH_FREQUENCIES[SLEIGH_RESONANCES] = { 2500, 5300, 6500, 8300, 9800 }; -const StkFloat SLEIGH_RADII[SLEIGH_RESONANCES] = { 0.99, 0.99, 0.99, 0.99, 0.99 }; -const StkFloat SLEIGH_GAINS[SLEIGH_RESONANCES] = { 1.0, 1.0, 1.0, 0.5, 0.3 }; - -// Sandpaper -const StkFloat SANDPAPER_SOUND_DECAY = 0.999; -const StkFloat SANDPAPER_SYSTEM_DECAY = 0.999; -const StkFloat SANDPAPER_GAIN = 0.5; -const StkFloat SANDPAPER_NUM_GRAINS = 128; -const int SANDPAPER_RESONANCES = 1; -const StkFloat SANDPAPER_FREQUENCIES[SANDPAPER_RESONANCES] = { 4500 }; -const StkFloat SANDPAPER_RADII[SANDPAPER_RESONANCES] = { 0.6 }; -const StkFloat SANDPAPER_GAINS[SANDPAPER_RESONANCES] = { 1.0 }; - -// Cokecan -const StkFloat COKECAN_SOUND_DECAY = 0.97; -const StkFloat COKECAN_SYSTEM_DECAY = 0.999; -const StkFloat COKECAN_GAIN = 0.5; -const StkFloat COKECAN_NUM_PARTS = 48; -const int COKECAN_RESONANCES = 5; // Helmholtz + 4 metal resonances -const StkFloat COKECAN_FREQUENCIES[COKECAN_RESONANCES] = { 370, 1025, 1424, 2149, 3596 }; -const StkFloat COKECAN_RADII[COKECAN_RESONANCES] = { 0.99, 0.992, 0.992, 0.992, 0.992 }; -const StkFloat COKECAN_GAINS[COKECAN_RESONANCES] = { 1.0, 1.8, 1.8, 1.8, 1.8 }; - -// Tuned Bamboo Wind Chimes (Angklung) -const StkFloat ANGKLUNG_SOUND_DECAY = 0.95; -const StkFloat ANGKLUNG_SYSTEM_DECAY = 0.9999; -const StkFloat ANGKLUNG_GAIN = 0.5; -const StkFloat ANGKLUNG_NUM_TUBES = 1.2; -const int ANGKLUNG_RESONANCES = 7; -const StkFloat ANGKLUNG_FREQUENCIES[ANGKLUNG_RESONANCES] = { 1046.6, 1174.8, 1397.0, 1568, 1760, 2093.3, 2350 }; -const StkFloat ANGKLUNG_RADII[ANGKLUNG_RESONANCES] = { 0.996, 0.996, 0.996, 0.996, 0.996, 0.996, 0.996 }; -const StkFloat ANGKLUNG_GAINS[ANGKLUNG_RESONANCES] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }; - -// Guiro -const StkFloat GUIRO_SOUND_DECAY = 0.95; -const StkFloat GUIRO_GAIN = 0.4; -const StkFloat GUIRO_NUM_PARTS = 128; -const int GUIRO_RESONANCES = 2; -const StkFloat GUIRO_FREQUENCIES[GUIRO_RESONANCES] = { 2500, 4000 }; -const StkFloat GUIRO_RADII[GUIRO_RESONANCES] = { 0.97, 0.97 }; -const StkFloat GUIRO_GAINS[GUIRO_RESONANCES] = { 1.0, 1.0 }; - -// Wrench -const StkFloat WRENCH_SOUND_DECAY = 0.95; -const StkFloat WRENCH_GAIN = 0.4; -const StkFloat WRENCH_NUM_PARTS = 128; -const int WRENCH_RESONANCES = 2; -const StkFloat WRENCH_FREQUENCIES[WRENCH_RESONANCES] = { 3200, 8000 }; -const StkFloat WRENCH_RADII[WRENCH_RESONANCES] = { 0.99, 0.992 }; -const StkFloat WRENCH_GAINS[WRENCH_RESONANCES] = { 1.0, 1.0 }; - -// Water Drops -const StkFloat WATER_SOUND_DECAY = 0.95; -const StkFloat WATER_SYSTEM_DECAY = 0.996; -const StkFloat WATER_GAIN = 1.0; -const StkFloat WATER_NUM_SOURCES = 10; -const int WATER_RESONANCES = 3; -const StkFloat WATER_FREQUENCIES[WATER_RESONANCES] = { 450, 600, 750 }; -const StkFloat WATER_RADII[WATER_RESONANCES] = { 0.9985, 0.9985, 0.9985 }; -const StkFloat WATER_GAINS[WATER_RESONANCES] = { 1.0, 1.0, 1.0 }; - -// PhOLIES (Physically-Oriented Library of Imitated Environmental -// Sounds), Perry Cook, 1997-8 - -// Stix1 -const StkFloat STIX1_SOUND_DECAY = 0.96; -const StkFloat STIX1_SYSTEM_DECAY = 0.998; -const StkFloat STIX1_GAIN = 6.0; -const StkFloat STIX1_NUM_BEANS = 2; -const int STIX1_RESONANCES = 1; -const StkFloat STIX1_FREQUENCIES[STIX1_RESONANCES] = { 5500 }; -const StkFloat STIX1_RADII[STIX1_RESONANCES] = { 0.6 }; -const StkFloat STIX1_GAINS[STIX1_RESONANCES] = { 1.0 }; - -// Crunch1 -const StkFloat CRUNCH1_SOUND_DECAY = 0.95; -const StkFloat CRUNCH1_SYSTEM_DECAY = 0.99806; -const StkFloat CRUNCH1_GAIN = 4.0; -const StkFloat CRUNCH1_NUM_BEADS = 7; -const int CRUNCH1_RESONANCES = 1; -const StkFloat CRUNCH1_FREQUENCIES[CRUNCH1_RESONANCES] = { 800 }; -const StkFloat CRUNCH1_RADII[CRUNCH1_RESONANCES] = { 0.95 }; -const StkFloat CRUNCH1_GAINS[CRUNCH1_RESONANCES] = { 1.0 }; - -// Nextmug + Coins -const StkFloat NEXTMUG_SOUND_DECAY = 0.97; -const StkFloat NEXTMUG_SYSTEM_DECAY = 0.9995; -const StkFloat NEXTMUG_GAIN = 0.8; -const StkFloat NEXTMUG_NUM_PARTS = 3; -const int NEXTMUG_RESONANCES = 4; -const StkFloat NEXTMUG_FREQUENCIES[NEXTMUG_RESONANCES] = { 2123, 4518, 8856, 10753 }; -const StkFloat NEXTMUG_RADII[NEXTMUG_RESONANCES] = { 0.997, 0.997, 0.997, 0.997 }; -const StkFloat NEXTMUG_GAINS[NEXTMUG_RESONANCES] = { 1.0, 0.8, 0.6, 0.4 }; - -const int COIN_RESONANCES = 3; -const StkFloat PENNY_FREQUENCIES[COIN_RESONANCES] = { 11000, 5200, 3835 }; -const StkFloat PENNY_RADII[COIN_RESONANCES] = { 0.999, 0.999, 0.999 }; -const StkFloat PENNY_GAINS[COIN_RESONANCES] = { 1.0, 0.8, 0.5 }; - -const StkFloat NICKEL_FREQUENCIES[COIN_RESONANCES] = { 5583, 9255, 9805 }; -const StkFloat NICKEL_RADII[COIN_RESONANCES] = { 0.9992, 0.9992, 0.9992 }; -const StkFloat NICKEL_GAINS[COIN_RESONANCES] = { 1.0, 0.8, 0.5 }; - -const StkFloat DIME_FREQUENCIES[COIN_RESONANCES] = { 4450, 4974, 9945 }; -const StkFloat DIME_RADII[COIN_RESONANCES] = { 0.9993, 0.9993, 0.9993 }; -const StkFloat DIME_GAINS[COIN_RESONANCES] = { 1.0, 0.8, 0.5 }; - -const StkFloat QUARTER_FREQUENCIES[COIN_RESONANCES] = { 1708, 8863, 9045 }; -const StkFloat QUARTER_RADII[COIN_RESONANCES] = { 0.9995, 0.9995, 0.9995 }; -const StkFloat QUARTER_GAINS[COIN_RESONANCES] = { 1.0, 0.8, 0.5 }; - -const StkFloat FRANC_FREQUENCIES[COIN_RESONANCES] = { 5583, 11010, 1917 }; -const StkFloat FRANC_RADII[COIN_RESONANCES] = { 0.9995, 0.9995, 0.9995 }; -const StkFloat FRANC_GAINS[COIN_RESONANCES] = { 0.7, 0.4, 0.3 }; - -const StkFloat PESO_FREQUENCIES[COIN_RESONANCES] = { 7250, 8150, 10060 }; -const StkFloat PESO_RADII[COIN_RESONANCES] = { 0.9996, 0.9996, 0.9996 }; -const StkFloat PESO_GAINS[COIN_RESONANCES] = { 1.0, 1.2, 0.7 }; - -// Big Gravel -const StkFloat BIGROCKS_SOUND_DECAY = 0.98; -const StkFloat BIGROCKS_SYSTEM_DECAY = 0.9965; -const StkFloat BIGROCKS_GAIN = 4.0; -const StkFloat BIGROCKS_NUM_PARTS = 23; -const int BIGROCKS_RESONANCES = 1; -const StkFloat BIGROCKS_FREQUENCIES[BIGROCKS_RESONANCES] = { 6460 }; -const StkFloat BIGROCKS_RADII[BIGROCKS_RESONANCES] = { 0.932 }; -const StkFloat BIGROCKS_GAINS[BIGROCKS_RESONANCES] = { 1.0 }; - -// Little Gravel -const StkFloat LITTLEROCKS_SOUND_DECAY = 0.98; -const StkFloat LITTLEROCKS_SYSTEM_DECAY = 0.99586; -const StkFloat LITTLEROCKS_GAIN = 4.0; -const StkFloat LITTLEROCKS_NUM_PARTS = 1600; -const int LITTLEROCKS_RESONANCES = 1; -const StkFloat LITTLEROCKS_FREQUENCIES[LITTLEROCKS_RESONANCES] = { 9000 }; -const StkFloat LITTLEROCKS_RADII[LITTLEROCKS_RESONANCES] = { 0.843 }; -const StkFloat LITTLEROCKS_GAINS[LITTLEROCKS_RESONANCES] = { 1.0 }; - -Shakers :: Shakers( int type ) -{ - shakerType_ = -1; - this->setType( type ); -} - -void Shakers :: setType( int type ) -{ - if ( shakerType_ == type ) return; - varyFactor_ = 0.0; - shakerType_ = type; - if ( type == 1 ) { // Cabasa - nResonances_ = CABASA_RESONANCES; - filters_.resize( nResonances_ ); - baseFrequencies_.resize( nResonances_ ); - baseRadii_.resize( nResonances_ ); - doVaryFrequency_.resize( nResonances_ ); - baseObjects_ = CABASA_NUM_BEADS; - for ( unsigned int i=0; i 11 && type < 19 ) { // Nextmug - nResonances_ = NEXTMUG_RESONANCES; - if ( type > 12 ) // mug + coin - nResonances_ += COIN_RESONANCES; - filters_.resize( nResonances_ ); - baseFrequencies_.resize( nResonances_ ); - baseRadii_.resize( nResonances_ ); - doVaryFrequency_.resize( nResonances_ ); - baseObjects_ = NEXTMUG_NUM_PARTS; - for ( int i=0; isetType( noteNumber ); - - shakeEnergy_ += amplitude * MAX_SHAKE * 0.1; - if ( shakeEnergy_ > MAX_SHAKE ) shakeEnergy_ = MAX_SHAKE; - if ( shakerType_==19 || shakerType_==20 ) ratchetCount_ += 1; -} - -void Shakers :: noteOff( StkFloat amplitude ) -{ - shakeEnergy_ = 0.0; - if ( shakerType_==19 || shakerType_==20 ) ratchetCount_ = 0; -} - -void Shakers :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Shakers::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if ( number == __SK_Breath_ || number == __SK_AfterTouch_Cont_ ) { // 2 or 128 ... energy - if ( shakerType_ == 19 || shakerType_ == 20 ) { - if ( lastRatchetValue_ < 0.0 ) ratchetCount_++; - else ratchetCount_ = (int) fabs(value - lastRatchetValue_); - ratchetDelta_ = baseRatchetDelta_ * ratchetCount_; - lastRatchetValue_ = (int) value; - } - else { - shakeEnergy_ += normalizedValue * MAX_SHAKE * 0.1; - if ( shakeEnergy_ > MAX_SHAKE ) shakeEnergy_ = MAX_SHAKE; - } - } - else if ( number == __SK_ModFrequency_ ) { // 4 ... decay - systemDecay_ = baseDecay_ + ( 2.0 * (normalizedValue - 0.5) * decayScale_ * (1.0 - baseDecay_) ); - } - else if ( number == __SK_FootControl_ ) { // 11 ... number of objects - nObjects_ = (StkFloat) ( 2.0 * normalizedValue * baseObjects_ ) + 1.1; - currentGain_ = log( nObjects_ ) * baseGain_ / nObjects_; - } - else if ( number == __SK_ModWheel_ ) { // 1 ... resonance frequency - for ( unsigned int i=0; isetType( type ); - } -#if defined(_STK_DEBUG_) - else { - oStream_ << "Shakers::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Simple.cpp b/source/StkUGens/stk-4.4.4/src/Simple.cpp deleted file mode 100644 index 8fc8d8cc48..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Simple.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/***************************************************/ -/*! \class Simple - \brief STK wavetable/noise instrument. - - This class combines a looped wave, a - noise source, a biquad resonance filter, - a one-pole filter, and an ADSR envelope - to create some interesting sounds. - - Control Change Numbers: - - Filter Pole Position = 2 - - Noise/Pitched Cross-Fade = 4 - - Envelope Rate = 11 - - Gain = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Simple.h" -#include "SKINI.msg" - -namespace stk { - -Simple :: Simple( void ) -{ - // Concatenate the STK rawwave path to the rawwave file - loop_ = new FileLoop( (Stk::rawwavePath() + "impuls10.raw").c_str(), true ); - - filter_.setPole( 0.5 ); - baseFrequency_ = 440.0; - setFrequency( baseFrequency_ ); - loopGain_ = 0.5; -} - -Simple :: ~Simple( void ) -{ - delete loop_; -} - -void Simple :: keyOn( void ) -{ - adsr_.keyOn(); -} - -void Simple :: keyOff( void ) -{ - adsr_.keyOff(); -} - -void Simple :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->keyOn(); - this->setFrequency( frequency ); - filter_.setGain( amplitude ); -} -void Simple :: noteOff( StkFloat amplitude ) -{ - this->keyOff(); -} - -void Simple :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Simple::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - biquad_.setResonance( frequency, 0.98, true ); - loop_->setFrequency( frequency ); -} - -void Simple :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Simple::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_Breath_) // 2 - filter_.setPole( 0.99 * (1.0 - (normalizedValue * 2.0)) ); - else if (number == __SK_NoiseLevel_) // 4 - loopGain_ = normalizedValue; - else if (number == __SK_ModFrequency_) { // 11 - normalizedValue /= 0.2 * Stk::sampleRate(); - adsr_.setAttackRate( normalizedValue ); - adsr_.setDecayRate( normalizedValue ); - adsr_.setReleaseRate( normalizedValue ); - } - else if (number == __SK_AfterTouch_Cont_) // 128 - adsr_.setTarget( normalizedValue ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "Simple::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/SineWave.cpp b/source/StkUGens/stk-4.4.4/src/SineWave.cpp deleted file mode 100644 index bdc9578672..0000000000 --- a/source/StkUGens/stk-4.4.4/src/SineWave.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/***************************************************/ -/*! \class SineWave - \brief STK sinusoid oscillator class. - - This class computes and saves a static sine "table" that can be - shared by multiple instances. It has an interface similar to the - WaveLoop class but inherits from the Generator class. Output - values are computed using linear interpolation. - - The "table" length, set in SineWave.h, is 2048 samples by default. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "SineWave.h" -#include - -namespace stk { - -StkFrames SineWave :: table_; - -SineWave :: SineWave( void ) - : time_(0.0), rate_(1.0), phaseOffset_(0.0) -{ - if ( table_.empty() ) { - table_.resize( TABLE_SIZE + 1, 1 ); - StkFloat temp = 1.0 / TABLE_SIZE; - for ( unsigned long i=0; i<=TABLE_SIZE; i++ ) - table_[i] = sin( TWO_PI * i * temp ); - } - - Stk::addSampleRateAlert( this ); -} - -SineWave :: ~SineWave() -{ - Stk::removeSampleRateAlert( this ); -} - -void SineWave :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - if ( !ignoreSampleRateChange_ ) - this->setRate( oldRate * rate_ / newRate ); -} - -void SineWave :: reset( void ) -{ - time_ = 0.0; - lastFrame_[0] = 0; -} - -void SineWave :: setFrequency( StkFloat frequency ) -{ - // This is a looping frequency. - this->setRate( TABLE_SIZE * frequency / Stk::sampleRate() ); -} - -void SineWave :: addTime( StkFloat time ) -{ - // Add an absolute time in samples. - time_ += time; -} - -void SineWave :: addPhase( StkFloat phase ) -{ - // Add a time in cycles (one cycle = TABLE_SIZE). - time_ += TABLE_SIZE * phase; -} - -void SineWave :: addPhaseOffset( StkFloat phaseOffset ) -{ - // Add a phase offset relative to any previous offset value. - time_ += ( phaseOffset - phaseOffset_ ) * TABLE_SIZE; - phaseOffset_ = phaseOffset; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/SingWave.cpp b/source/StkUGens/stk-4.4.4/src/SingWave.cpp deleted file mode 100644 index 7fc5666cf5..0000000000 --- a/source/StkUGens/stk-4.4.4/src/SingWave.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/***************************************************/ -/*! \class SingWave - \brief STK "singing" looped soundfile class. - - This class loops a specified soundfile and modulates it both - periodically and randomly to produce a pitched musical sound, like - a simple voice or violin. In general, it is not be used alone - because of "munchkinification" effects from pitch shifting. - Within STK, it is used as an excitation source for other - instruments. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "SingWave.h" - -namespace stk { - -SingWave :: SingWave( std::string fileName, bool raw ) -{ - // An exception could be thrown here. - wave_.openFile( fileName, raw ); - - rate_ = 1.0; - sweepRate_ = 0.001; - - modulator_.setVibratoRate( 6.0 ); - modulator_.setVibratoGain( 0.04 ); - modulator_.setRandomGain( 0.005 ); - - this->setFrequency( 75.0 ); - pitchEnvelope_.setRate( 1.0 ); - this->tick(); - this->tick(); - pitchEnvelope_.setRate( sweepRate_ * rate_ ); -} - -SingWave :: ~SingWave() -{ -} - -void SingWave :: setFrequency( StkFloat frequency ) -{ - StkFloat temp = rate_; - rate_ = wave_.getSize() * frequency / Stk::sampleRate(); - temp -= rate_; - if ( temp < 0) temp = -temp; - pitchEnvelope_.setTarget( rate_ ); - pitchEnvelope_.setRate( sweepRate_ * temp ); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Sitar.cpp b/source/StkUGens/stk-4.4.4/src/Sitar.cpp deleted file mode 100644 index 16027ca86a..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Sitar.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/***************************************************/ -/*! \class Sitar - \brief STK sitar string model class. - - This class implements a sitar plucked string - physical model based on the Karplus-Strong - algorithm. - - This is a digital waveguide model, making its - use possibly subject to patents held by - Stanford University, Yamaha, and others. - There exist at least two patents, assigned to - Stanford, bearing the names of Karplus and/or - Strong. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Sitar.h" - -namespace stk { - -Sitar :: Sitar( StkFloat lowestFrequency ) -{ - if ( lowestFrequency <= 0.0 ) { - oStream_ << "Sitar::Sitar: argument is less than or equal to zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - unsigned long length = (unsigned long) ( Stk::sampleRate() / lowestFrequency + 1 ); - delayLine_.setMaximumDelay( length ); - delay_ = 0.5 * length; - delayLine_.setDelay( delay_ ); - targetDelay_ = delay_; - - loopFilter_.setZero( 0.01 ); - loopGain_ = 0.999; - - envelope_.setAllTimes( 0.001, 0.04, 0.0, 0.5 ); - this->clear(); -} - -Sitar :: ~Sitar( void ) -{ -} - -void Sitar :: clear( void ) -{ - delayLine_.clear(); - loopFilter_.clear(); -} - -void Sitar :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Sitar::setFrequency: parameter is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - targetDelay_ = (Stk::sampleRate() / frequency); - delay_ = targetDelay_ * (1.0 + (0.05 * noise_.tick())); - delayLine_.setDelay( delay_ ); - loopGain_ = 0.995 + (frequency * 0.0000005); - if ( loopGain_ > 0.9995 ) loopGain_ = 0.9995; -} - -void Sitar :: pluck( StkFloat amplitude ) -{ - envelope_.keyOn(); -} - -void Sitar :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - this->pluck( amplitude ); - amGain_ = 0.1 * amplitude; -} - -void Sitar :: noteOff( StkFloat amplitude ) -{ - if ( amplitude < 0.0 || amplitude > 1.0 ) { - oStream_ << "Sitar::noteOff: amplitude is out of range!"; - handleError( StkError::WARNING ); return; - } - - loopGain_ = (StkFloat) 1.0 - amplitude; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Skini.cpp b/source/StkUGens/stk-4.4.4/src/Skini.cpp deleted file mode 100644 index f5700676f0..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Skini.cpp +++ /dev/null @@ -1,223 +0,0 @@ -/***************************************************/ -/*! \class Skini - \brief STK SKINI parsing class - - This class parses SKINI formatted text - messages. It can be used to parse individual - messages or it can be passed an entire file. - The SKINI specification is Perry's and his - alone, but it's all text so it shouldn't be too - hard to figure out. - - SKINI (Synthesis toolKit Instrument Network - Interface) is like MIDI, but allows for - floating-point control changes, note numbers, - etc. The following example causes a sharp - middle C to be played with a velocity of 111.132: - - noteOn 60.01 111.132 - - See also SKINI.txt. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Skini.h" -#include "SKINI.tbl" -#include -#include - -namespace stk { - -Skini :: Skini() -{ -} - -Skini :: ~Skini() -{ -} - -bool Skini :: setFile( std::string fileName ) -{ - if ( file_.is_open() ) { - oStream_ << "Skini::setFile: already reaading a file!"; - handleError( StkError::WARNING ); - return false; - } - - file_.open( fileName.c_str() ); - if ( !file_ ) { - oStream_ << "Skini::setFile: unable to open file (" << fileName << ")"; - handleError( StkError::WARNING ); - return false; - } - - return true; -} - -long Skini :: nextMessage( Message& message ) -{ - if ( !file_.is_open() ) return 0; - - std::string line; - bool done = false; - while ( !done ) { - - // Read a line from the file and skip over invalid messages. - if ( std::getline( file_, line ).eof() ) { - oStream_ << "// End of Score. Thanks for using SKINI!!"; - handleError( StkError::STATUS ); - file_.close(); - message.type = 0; - done = true; - } - else if ( parseString( line, message ) > 0 ) done = true; - } - - return message.type; -} - -void Skini :: tokenize( const std::string& str, - std::vector& tokens, - const std::string& delimiters ) -{ - // Skip delimiters at beginning. - std::string::size_type lastPos = str.find_first_not_of(delimiters, 0); - // Find first "non-delimiter". - std::string::size_type pos = str.find_first_of(delimiters, lastPos); - - while (std::string::npos != pos || std::string::npos != lastPos) { - // Found a token, add it to the vector. - tokens.push_back(str.substr(lastPos, pos - lastPos)); - // Skip delimiters. Note the "not_of" - lastPos = str.find_first_not_of(delimiters, pos); - // Find next "non-delimiter" - pos = str.find_first_of(delimiters, lastPos); - } -} - -long Skini :: parseString( std::string& line, Message& message ) -{ - message.type = 0; - if ( line.empty() ) return message.type; - - // Check for comment lines. - std::string::size_type lastPos = line.find_first_not_of(" ,\t", 0); - std::string::size_type pos = line.find_first_of("/", lastPos); - if ( std::string::npos != pos ) { - oStream_ << "// Comment Line: " << line; - handleError( StkError::STATUS ); - return message.type; - } - - // Tokenize the string. - std::vector tokens; - this->tokenize( line, tokens, " ,\t"); - - // Valid SKINI messages must have at least three fields (type, time, - // and channel). - if ( tokens.size() < 3 ) return message.type; - - // Determine message type. - int iSkini = 0; - while ( iSkini < __SK_MaxMsgTypes_ ) { - if ( tokens[0] == skini_msgs[iSkini].messageString ) break; - iSkini++; - } - - if ( iSkini >= __SK_MaxMsgTypes_ ) { - oStream_ << "Skini::parseString: couldn't parse this line:\n " << line; - handleError( StkError::WARNING ); - return message.type; - } - - // Found the type. - message.type = skini_msgs[iSkini].type; - - // Parse time field. - if ( tokens[1][0] == '=' ) { - tokens[1].erase( tokens[1].begin() ); - if ( tokens[1].empty() ) { - oStream_ << "Skini::parseString: couldn't parse time field in line:\n " << line; - handleError( StkError::WARNING ); - return message.type = 0; - } - message.time = (StkFloat) -atof( tokens[1].c_str() ); - } - else - message.time = (StkFloat) atof( tokens[1].c_str() ); - - // Parse the channel field. - message.channel = atoi( tokens[2].c_str() ); - - // Parse the remaining fields (maximum of 2 more). - int iValue = 0; - long dataType = skini_msgs[iSkini].data2; - while ( dataType != NOPE ) { - - if ( tokens.size() <= (unsigned int) (iValue+3) ) { - oStream_ << "Skini::parseString: inconsistency between type table and parsed line:\n " << line; - handleError( StkError::WARNING ); - return message.type = 0; - } - - switch ( dataType ) { - - case SK_INT: - message.intValues[iValue] = atoi( tokens[iValue+3].c_str() ); - message.floatValues[iValue] = (StkFloat) message.intValues[iValue]; - break; - - case SK_DBL: - message.floatValues[iValue] = atof( tokens[iValue+3].c_str() ); - message.intValues[iValue] = (long) message.floatValues[iValue]; - break; - - case SK_STR: // Must be the last field. - message.remainder = tokens[iValue+3]; - return message.type; - - default: // MIDI extension message - message.intValues[iValue] = dataType; - message.floatValues[iValue] = (StkFloat) message.intValues[iValue]; - iValue--; - } - - if ( ++iValue == 1 ) - dataType = skini_msgs[iSkini].data3; - else - dataType = NOPE; - } - - return message.type; -} - -std::string Skini :: whatsThisType(long type) -{ - std::string typeString; - - for ( int i=0; i<__SK_MaxMsgTypes_; i++ ) { - if ( type == skini_msgs[i].type ) { - typeString = skini_msgs[i].messageString; - break; - } - } - return typeString; -} - -std::string Skini :: whatsThisController( long number ) -{ - std::string controller; - - for ( int i=0; i<__SK_MaxMsgTypes_; i++) { - if ( skini_msgs[i].type == __SK_ControlChange_ && - number == skini_msgs[i].data2) { - controller = skini_msgs[i].messageString; - break; - } - } - return controller; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Socket.cpp b/source/StkUGens/stk-4.4.4/src/Socket.cpp deleted file mode 100644 index 75474af6d7..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Socket.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/***************************************************/ -/*! \class Socket - \brief STK internet socket abstract base class. - - This class provides common functionality for TCP and UDP internet - socket server and client subclasses. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Socket.h" - -namespace stk { - -Socket :: Socket() -{ - soket_ = -1; - port_ = -1; -} - -Socket :: ~Socket() -{ - this->close( soket_ ); - -#if defined(__OS_WINDOWS__) - - WSACleanup(); - -#endif -} - -void Socket :: close( int socket ) -{ - if ( !isValid( socket ) ) return; - -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - ::close( socket ); - -#elif defined(__OS_WINDOWS__) - - ::closesocket( socket ); - -#endif -} - -void Socket :: setBlocking( int socket, bool enable ) -{ - if ( !isValid( socket ) ) return; - -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - int tmp = ::fcntl( socket, F_GETFL, 0 ); - if ( tmp >= 0 ) - tmp = ::fcntl( socket, F_SETFL, enable ? (tmp &~ O_NONBLOCK) : (tmp | O_NONBLOCK) ); - -#elif defined(__OS_WINDOWS__) - - unsigned long non_block = !enable; - ioctlsocket( socket, FIONBIO, &non_block ); - -#endif -} - -int Socket :: writeBuffer(int socket, const void *buffer, long bufferSize, int flags ) -{ - if ( !isValid( socket ) ) return -1; - return send( socket, (const char *)buffer, bufferSize, flags ); -} - -int Socket :: readBuffer(int socket, void *buffer, long bufferSize, int flags ) -{ - if ( !isValid( socket ) ) return -1; - return recv( socket, (char *)buffer, bufferSize, flags ); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Sphere.cpp b/source/StkUGens/stk-4.4.4/src/Sphere.cpp deleted file mode 100644 index 2bf3fb9424..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Sphere.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/***************************************************/ -/*! \class Sphere - \brief STK sphere class. - - This class implements a spherical ball with - radius, mass, position, and velocity parameters. - - by Perry R. Cook, 1995-2012. -*/ -/***************************************************/ - -#include "Sphere.h" -#include - -namespace stk { - -Vector3D* Sphere::getRelativePosition( Vector3D* position ) -{ - workingVector_.setXYZ(position->getX() - position_.getX(), - position->getY() - position_.getY(), - position->getZ() - position_.getZ()); - return &workingVector_; -}; - -StkFloat Sphere::getVelocity( Vector3D* velocity ) -{ - velocity->setXYZ( velocity_.getX(), velocity_.getY(), velocity_.getZ() ); - return velocity_.getLength(); -}; - -StkFloat Sphere::isInside( Vector3D *position ) -{ - // Return directed distance from aPosition to spherical boundary ( < - // 0 if inside). - StkFloat distance; - Vector3D *tempVector; - - tempVector = this->getRelativePosition( position ); - distance = tempVector->getLength(); - return distance - radius_; -}; - -void Sphere::addVelocity(StkFloat x, StkFloat y, StkFloat z) -{ - velocity_.setX(velocity_.getX() + x); - velocity_.setY(velocity_.getY() + y); - velocity_.setZ(velocity_.getZ() + z); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/StifKarp.cpp b/source/StkUGens/stk-4.4.4/src/StifKarp.cpp deleted file mode 100644 index 5c460c194f..0000000000 --- a/source/StkUGens/stk-4.4.4/src/StifKarp.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/***************************************************/ -/*! \class StifKarp - \brief STK plucked stiff string instrument. - - This class implements a simple plucked string - algorithm (Karplus Strong) with enhancements - (Jaffe-Smith, Smith, and others), including - string stiffness and pluck position controls. - The stiffness is modeled with allpass filters. - - This is a digital waveguide model, making its - use possibly subject to patents held by - Stanford University, Yamaha, and others. - - Control Change Numbers: - - Pickup Position = 4 - - String Sustain = 11 - - String Stretch = 1 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "StifKarp.h" -#include "SKINI.msg" -#include - -namespace stk { - -StifKarp :: StifKarp( StkFloat lowestFrequency ) -{ - if ( lowestFrequency <= 0.0 ) { - oStream_ << "StifKarp::StifKarp: argument is less than or equal to zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - unsigned long nDelays = (unsigned long) ( Stk::sampleRate() / lowestFrequency ); - delayLine_.setMaximumDelay( nDelays + 1 ); - combDelay_.setMaximumDelay( nDelays + 1 ); - - pluckAmplitude_ = 0.3; - pickupPosition_ = 0.4; - - stretching_ = 0.9999; - baseLoopGain_ = 0.995; - loopGain_ = 0.999; - - this->clear(); - this->setFrequency( 220.0 ); -} - -StifKarp :: ~StifKarp( void ) -{ -} - -void StifKarp :: clear( void ) -{ - delayLine_.clear(); - combDelay_.clear(); - filter_.clear(); -} - -void StifKarp :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "StifKarp::setFrequency: parameter is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - lastFrequency_ = frequency; - lastLength_ = Stk::sampleRate() / lastFrequency_; - StkFloat delay = lastLength_ - 0.5; - delayLine_.setDelay( delay ); - - loopGain_ = baseLoopGain_ + (frequency * 0.000005); - if (loopGain_ >= 1.0) loopGain_ = 0.99999; - - setStretch(stretching_); - - combDelay_.setDelay( 0.5 * pickupPosition_ * lastLength_ ); -} - -void StifKarp :: setStretch( StkFloat stretch ) -{ - stretching_ = stretch; - StkFloat coefficient; - StkFloat freq = lastFrequency_ * 2.0; - StkFloat dFreq = ( (0.5 * Stk::sampleRate()) - freq ) * 0.25; - StkFloat temp = 0.5 + (stretch * 0.5); - if ( temp > 0.9999 ) temp = 0.9999; - for ( int i=0; i<4; i++ ) { - coefficient = temp * temp; - biquad_[i].setA2( coefficient ); - biquad_[i].setB0( coefficient ); - biquad_[i].setB2( 1.0 ); - - coefficient = -2.0 * temp * cos(TWO_PI * freq / Stk::sampleRate()); - biquad_[i].setA1( coefficient ); - biquad_[i].setB1( coefficient ); - - freq += dFreq; - } -} - -void StifKarp :: setPickupPosition( StkFloat position ) { - - if ( position < 0.0 || position > 1.0 ) { - oStream_ << "StifKarp::setPickupPosition: parameter is out of range!"; - handleError( StkError::WARNING ); return; - } - - // Set the pick position, which puts zeroes at position * length. - pickupPosition_ = position; - combDelay_.setDelay( 0.5 * pickupPosition_ * lastLength_ ); -} - -void StifKarp :: setBaseLoopGain( StkFloat aGain ) -{ - baseLoopGain_ = aGain; - loopGain_ = baseLoopGain_ + (lastFrequency_ * 0.000005); - if ( loopGain_ > 0.99999 ) loopGain_ = (StkFloat) 0.99999; -} - -void StifKarp :: pluck( StkFloat amplitude ) -{ - if ( amplitude < 0.0 || amplitude > 1.0 ) { - oStream_ << "StifKarp::pluck: amplitude is out of range!"; - handleError( StkError::WARNING ); return; - } - - pluckAmplitude_ = amplitude; - for ( unsigned long i=0; itick() * pluckAmplitude_) ); - } -} - -void StifKarp :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - this->pluck( amplitude ); -} - -void StifKarp :: noteOff( StkFloat amplitude ) -{ - if ( amplitude < 0.0 || amplitude > 1.0 ) { - oStream_ << "StifKarp::noteOff: amplitude is out of range!"; - handleError( StkError::WARNING ); return; - } - - loopGain_ = (1.0 - amplitude) * 0.5; -} - -void StifKarp :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Clarinet::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_PickPosition_) // 4 - this->setPickupPosition( normalizedValue ); - else if (number == __SK_StringDamping_) // 11 - this->setBaseLoopGain( 0.97 + (normalizedValue * 0.03) ); - else if (number == __SK_StringDetune_) // 1 - this->setStretch( 0.9 + (0.1 * (1.0 - normalizedValue)) ); -#if defined(_STK_DEBUG_) - else { - oStream_ << "StifKarp::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Stk.cpp b/source/StkUGens/stk-4.4.4/src/Stk.cpp deleted file mode 100644 index ab90da91c5..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Stk.cpp +++ /dev/null @@ -1,340 +0,0 @@ -/***************************************************/ -/*! \class Stk - \brief STK base class - - Nearly all STK classes inherit from this class. - The global sample rate can be queried and - modified via Stk. In addition, this class - provides error handling and byte-swapping - functions. - - 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. STK currently runs - with realtime support (audio and MIDI) on Linux, Macintosh OS X, - and Windows computer platforms. Generic, non-realtime support has - been tested under NeXTStep, Sun, and other platforms and should - work with any standard C++ compiler. - - STK WWW site: http://ccrma.stanford.edu/software/stk/ - - The Synthesis ToolKit in C++ (STK) - Copyright (c) 1995-2012 Perry R. Cook and Gary P. Scavone - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - Any person wishing to distribute modifications to the Software is - asked to send the modifications to the original developer so that - they can be incorporated into the canonical version. This is, - however, not a binding provision of this license. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR - ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/***************************************************/ - -#include "Stk.h" -#include - -namespace stk { - -StkFloat Stk :: srate_ = (StkFloat) SRATE; -std::string Stk :: rawwavepath_ = RAWWAVE_PATH; -const Stk::StkFormat Stk :: STK_SINT8 = 0x1; -const Stk::StkFormat Stk :: STK_SINT16 = 0x2; -const Stk::StkFormat Stk :: STK_SINT24 = 0x4; -const Stk::StkFormat Stk :: STK_SINT32 = 0x8; -const Stk::StkFormat Stk :: STK_FLOAT32 = 0x10; -const Stk::StkFormat Stk :: STK_FLOAT64 = 0x20; -bool Stk :: showWarnings_ = true; -bool Stk :: printErrors_ = true; -std::vector Stk :: alertList_; -std::ostringstream Stk :: oStream_; - -Stk :: Stk( void ) - : ignoreSampleRateChange_(false) -{ -} - -Stk :: ~Stk( void ) -{ -} - -void Stk :: setSampleRate( StkFloat rate ) -{ - if ( rate > 0.0 && rate != srate_ ) { - StkFloat oldRate = srate_; - srate_ = rate; - - for ( unsigned int i=0; isampleRateChanged( srate_, oldRate ); - } -} - -void Stk :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - // This function should be reimplemented in classes that need to - // make internal variable adjustments in response to a global sample - // rate change. -} - -void Stk :: addSampleRateAlert( Stk *ptr ) -{ - for ( unsigned int i=0; i -#elif defined(__OS_WINDOWS__) - #include -#endif - -void Stk :: sleep(unsigned long milliseconds) -{ -#if defined(__OS_WINDOWS__) - Sleep((DWORD) milliseconds); -#elif (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - usleep( (unsigned long) (milliseconds * 1000.0) ); -#endif -} - -void Stk :: handleError( StkError::Type type ) -{ - handleError( oStream_.str(), type ); - oStream_.str( std::string() ); // reset the ostringstream buffer -} - -void Stk :: handleError( const char *message, StkError::Type type ) -{ - std::string msg( message ); - handleError( msg, type ); -} - -void Stk :: handleError( std::string message, StkError::Type type ) -{ - if ( type == StkError::WARNING || type == StkError::STATUS ) { - if ( !showWarnings_ ) return; - std::cerr << '\n' << message << '\n' << std::endl; - } - else if (type == StkError::DEBUG_PRINT) { -#if defined(_STK_DEBUG_) - std::cerr << '\n' << message << '\n' << std::endl; -#endif - } - else { - if ( printErrors_ ) { - // Print error message before throwing. - std::cerr << '\n' << message << '\n' << std::endl; - } - throw StkError(message, type); - } -} - -// -// StkFrames definitions -// - -StkFrames :: StkFrames( unsigned int nFrames, unsigned int nChannels ) - : data_( 0 ), nFrames_( nFrames ), nChannels_( nChannels ) -{ - size_ = nFrames_ * nChannels_; - bufferSize_ = size_; - - if ( size_ > 0 ) { - data_ = (StkFloat *) calloc( size_, sizeof( StkFloat ) ); -#if defined(_STK_DEBUG_) - if ( data_ == NULL ) { - std::string error = "StkFrames: memory allocation error in constructor!"; - Stk::handleError( error, StkError::MEMORY_ALLOCATION ); - } -#endif - } - - dataRate_ = Stk::sampleRate(); -} - -StkFrames :: StkFrames( const StkFloat& value, unsigned int nFrames, unsigned int nChannels ) - : data_( 0 ), nFrames_( nFrames ), nChannels_( nChannels ) -{ - size_ = nFrames_ * nChannels_; - bufferSize_ = size_; - if ( size_ > 0 ) { - data_ = (StkFloat *) malloc( size_ * sizeof( StkFloat ) ); -#if defined(_STK_DEBUG_) - if ( data_ == NULL ) { - std::string error = "StkFrames: memory allocation error in constructor!"; - Stk::handleError( error, StkError::MEMORY_ALLOCATION ); - } -#endif - for ( long i=0; i<(long)size_; i++ ) data_[i] = value; - } - - dataRate_ = Stk::sampleRate(); -} - -StkFrames :: ~StkFrames() -{ - if ( data_ ) free( data_ ); -} - -StkFrames :: StkFrames( const StkFrames& f ) - : data_(0), size_(0), bufferSize_(0) -{ - resize( f.frames(), f.channels() ); - dataRate_ = Stk::sampleRate(); - for ( unsigned int i=0; i bufferSize_ ) { - if ( data_ ) free( data_ ); - data_ = (StkFloat *) malloc( size_ * sizeof( StkFloat ) ); -#if defined(_STK_DEBUG_) - if ( data_ == NULL ) { - std::string error = "StkFrames::resize: memory allocation error!"; - Stk::handleError( error, StkError::MEMORY_ALLOCATION ); - } -#endif - bufferSize_ = size_; - } -} - -void StkFrames :: resize( size_t nFrames, unsigned int nChannels, StkFloat value ) -{ - this->resize( nFrames, nChannels ); - - for ( size_t i=0; i (StkFloat) ( nFrames_ - 1 ) || channel >= nChannels_ ) { - std::ostringstream error; - error << "StkFrames::interpolate: invalid frame (" << frame << ") or channel (" << channel << ") value!"; - Stk::handleError( error.str(), StkError::MEMORY_ACCESS ); - } -#endif - - size_t iIndex = ( size_t ) frame; // integer part of index - StkFloat output, alpha = frame - (StkFloat) iIndex; // fractional part of index - - iIndex = iIndex * nChannels_ + channel; - output = data_[ iIndex ]; - if ( alpha > 0.0 ) - output += ( alpha * ( data_[ iIndex + nChannels_ ] - output ) ); - - return output; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/TapDelay.cpp b/source/StkUGens/stk-4.4.4/src/TapDelay.cpp deleted file mode 100644 index 67c2c640aa..0000000000 --- a/source/StkUGens/stk-4.4.4/src/TapDelay.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/***************************************************/ -/*! \class TapDelay - \brief STK non-interpolating tapped delay line class. - - This class implements a non-interpolating digital delay-line with - an arbitrary number of output "taps". If the maximum length and - tap delays are not specified during instantiation, a fixed maximum - length of 4095 and a single tap delay of zero is set. - - A non-interpolating delay line is typically used in fixed - delay-length applications, such as for reverberation. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "TapDelay.h" - -namespace stk { - -TapDelay :: TapDelay( std::vector taps, unsigned long maxDelay ) -{ - // Writing before reading allows delays from 0 to length-1. - // If we want to allow a delay of maxDelay, we need a - // delayline of length = maxDelay+1. - if ( maxDelay < 1 ) { - oStream_ << "TapDelay::TapDelay: maxDelay must be > 0!\n"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - for ( unsigned int i=0; i maxDelay ) { - oStream_ << "TapDelay::TapDelay: maxDelay must be > than all tap delay values!\n"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - } - - if ( ( maxDelay + 1 ) > inputs_.size() ) - inputs_.resize( maxDelay + 1, 1, 0.0 ); - - inPoint_ = 0; - this->setTapDelays( taps ); -} - -TapDelay :: ~TapDelay() -{ -} - -void TapDelay :: setMaximumDelay( unsigned long delay ) -{ - if ( delay < inputs_.size() ) return; - - for ( unsigned int i=0; i taps ) -{ - for ( unsigned int i=0; i inputs_.size() - 1 ) { // The value is too big. - oStream_ << "TapDelay::setTapDelay: argument (" << taps[i] << ") greater than maximum!\n"; - handleError( StkError::WARNING ); return; - } - - if ( taps[i] < 0 ) { - oStream_ << "TapDelay::setDelay: argument (" << taps[i] << ") less than zero!\n"; - handleError( StkError::WARNING ); return; - } - } - - if ( taps.size() != outPoint_.size() ) { - outPoint_.resize( taps.size() ); - delays_.resize( taps.size() ); - lastFrame_.resize( 1, taps.size(), 0.0 ); - } - - for ( unsigned int i=0; i= taps[i] ) outPoint_[i] = inPoint_ - taps[i]; - else outPoint_[i] = inputs_.size() + inPoint_ - taps[i]; - delays_[i] = taps[i]; - } -} - -} // stk namespace - diff --git a/source/StkUGens/stk-4.4.4/src/TcpClient.cpp b/source/StkUGens/stk-4.4.4/src/TcpClient.cpp deleted file mode 100644 index cb811f988e..0000000000 --- a/source/StkUGens/stk-4.4.4/src/TcpClient.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/***************************************************/ -/*! \class TcpClient - \brief STK TCP socket client class. - - This class provides a uniform cross-platform TCP socket client - interface. Methods are provided for reading or writing data - buffers to/from connections. - - TCP sockets are reliable and connection-oriented. A TCP socket - client must be connected to a TCP server before data can be sent - or received. Data delivery is guaranteed in order, without loss, - error, or duplication. That said, TCP transmissions tend to be - slower than those using the UDP protocol and data sent with - multiple \e write() calls can be arbitrarily combined by the - underlying system. - - The user is responsible for checking the values - returned by the read/write methods. Values - less than or equal to zero indicate a closed - or lost connection or the occurence of an error. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "TcpClient.h" -#include -#include - -namespace stk { - -TcpClient :: TcpClient( int port, std::string hostname ) -{ -#if defined(__OS_WINDOWS__) // windoze-only stuff - WSADATA wsaData; - WORD wVersionRequested = MAKEWORD(1,1); - - WSAStartup( wVersionRequested, &wsaData ); - if ( wsaData.wVersion != wVersionRequested ) { - oStream_ << "TcpClient: Incompatible Windows socket library version!"; - handleError( StkError::PROCESS_SOCKET ); - } -#endif - - // Create a socket client connection. - connect( port, hostname ); -} - -TcpClient :: ~TcpClient( void ) -{ -} - -int TcpClient :: connect( int port, std::string hostname ) -{ - // Close any existing connections. - this->close( soket_ ); - - // Create the client-side socket - soket_ = ::socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); - if ( soket_ < 0 ) { - oStream_ << "TcpClient: Couldn't create socket client!"; - handleError( StkError::PROCESS_SOCKET ); - } - - int flag = 1; - int result = setsockopt( soket_, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int) ); - if ( result < 0 ) { - oStream_ << "TcpClient: Error setting socket options!"; - handleError( StkError::PROCESS_SOCKET ); - } - - struct hostent *hostp; - if ( ( hostp = gethostbyname( hostname.c_str() ) ) == 0 ) { - oStream_ << "TcpClient: unknown host (" << hostname << ")!"; - handleError( StkError::PROCESS_SOCKET_IPADDR ); - } - - // Fill in the address structure - struct sockaddr_in server_address; - server_address.sin_family = AF_INET; - memcpy( (void *)&server_address.sin_addr, hostp->h_addr, hostp->h_length ); - server_address.sin_port = htons(port); - - // Connect to the server - if ( ::connect( soket_, (struct sockaddr *)&server_address, sizeof(server_address) ) < 0 ) { - oStream_ << "TcpClient: Couldn't connect to socket server!"; - handleError( StkError::PROCESS_SOCKET ); - } - - return soket_; -} - -int TcpClient :: writeBuffer( const void *buffer, long bufferSize, int flags ) -{ - if ( !isValid( soket_ ) ) return -1; - return send( soket_, (const char *)buffer, bufferSize, flags ); -} - -int TcpClient :: readBuffer( void *buffer, long bufferSize, int flags ) -{ - if ( !isValid( soket_ ) ) return -1; - return recv( soket_, (char *)buffer, bufferSize, flags ); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/TcpServer.cpp b/source/StkUGens/stk-4.4.4/src/TcpServer.cpp deleted file mode 100644 index 405f7d63be..0000000000 --- a/source/StkUGens/stk-4.4.4/src/TcpServer.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/***************************************************/ -/*! \class TcpServer - \brief STK TCP socket server class. - - This class provides a uniform cross-platform TCP socket server - interface. Methods are provided for reading or writing data - buffers to/from connections. - - TCP sockets are reliable and connection-oriented. A TCP socket - server must accept a connection from a TCP client before data can - be sent or received. Data delivery is guaranteed in order, - without loss, error, or duplication. That said, TCP transmissions - tend to be slower than those using the UDP protocol and data sent - with multiple \e write() calls can be arbitrarily combined by the - underlying system. - - The user is responsible for checking the values - returned by the read/write methods. Values - less than or equal to zero indicate a closed - or lost connection or the occurence of an error. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "TcpServer.h" - -namespace stk { - -TcpServer :: TcpServer( int port ) -{ - // Create a socket server. -#if defined(__OS_WINDOWS__) // windoze-only stuff - WSADATA wsaData; - WORD wVersionRequested = MAKEWORD(1,1); - - WSAStartup(wVersionRequested, &wsaData); - if (wsaData.wVersion != wVersionRequested) { - oStream_ << "TcpServer: Incompatible Windows socket library version!"; - handleError( StkError::PROCESS_SOCKET ); - } -#endif - - // Create the server-side socket - soket_ = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (soket_ < 0) { - oStream_ << "TcpServer: Couldn't create socket server!"; - handleError( StkError::PROCESS_SOCKET ); - } - - int flag = 1; - int result = setsockopt( soket_, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int) ); - if (result < 0) { - oStream_ << "TcpServer: Error setting socket options!"; - handleError( StkError::PROCESS_SOCKET ); - } - - struct sockaddr_in address; - address.sin_family = AF_INET; - address.sin_addr.s_addr = INADDR_ANY; - address.sin_port = htons( port ); - - // Bind socket to the appropriate port and interface (INADDR_ANY) - if ( bind( soket_, (struct sockaddr *)&address, sizeof(address) ) < 0 ) { - oStream_ << "TcpServer: Couldn't bind socket!"; - handleError( StkError::PROCESS_SOCKET ); - } - - // Listen for incoming connection(s) - if ( listen( soket_, 1 ) < 0 ) { - oStream_ << "TcpServer: Couldn't start server listening!"; - handleError( StkError::PROCESS_SOCKET ); - } - - port_ = port; -} - -TcpServer :: ~TcpServer() -{ -} - -int TcpServer :: accept( void ) -{ - return ::accept( soket_, NULL, NULL ); -} - -int TcpServer :: writeBuffer(const void *buffer, long bufferSize, int flags ) -{ - if ( !isValid( soket_ ) ) return -1; - return send( soket_, (const char *)buffer, bufferSize, flags ); -} - -int TcpServer :: readBuffer(void *buffer, long bufferSize, int flags ) -{ - if ( !isValid( soket_ ) ) return -1; - return recv( soket_, (char *)buffer, bufferSize, flags ); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Thread.cpp b/source/StkUGens/stk-4.4.4/src/Thread.cpp deleted file mode 100644 index ed2907b676..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Thread.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/***************************************************/ -/*! \class Thread - \brief STK thread class. - - This class provides a uniform interface for cross-platform - threads. On unix systems, the pthread library is used. Under - Windows, the C runtime threadex functions are used. - - Each instance of the Thread class can be used to control a single - thread process. Routines are provided to signal cancelation - and/or joining with a thread, though it is not possible for this - class to know the running status of a thread once it is started. - - For cross-platform compatability, thread functions should be - declared as follows: - - THREAD_RETURN THREAD_TYPE thread_function(void *ptr) - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Thread.h" - -namespace stk { - -Thread :: Thread() -{ - thread_ = 0; -} - -Thread :: ~Thread() -{ -} - -bool Thread :: start( THREAD_FUNCTION routine, void * ptr ) -{ - if ( thread_ ) { - oStream_ << "Thread:: a thread is already running!"; - handleError( StkError::WARNING ); - return false; - } - -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - if ( pthread_create(&thread_, NULL, *routine, ptr) == 0 ) - return true; - -#elif defined(__OS_WINDOWS__) - unsigned thread_id; - thread_ = _beginthreadex(NULL, 0, routine, ptr, 0, &thread_id); - if ( thread_ ) return true; - -#endif - return false; -} - -bool Thread :: cancel() -{ -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - if ( pthread_cancel(thread_) == 0 ) { - return true; - } - -#elif defined(__OS_WINDOWS__) - - TerminateThread((HANDLE)thread_, 0); - return true; - -#endif - return false; -} - -bool Thread :: wait() -{ -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - if ( pthread_join(thread_, NULL) == 0 ) { - thread_ = 0; - return true; - } - -#elif defined(__OS_WINDOWS__) - - long retval = WaitForSingleObject( (HANDLE)thread_, INFINITE ); - if ( retval == WAIT_OBJECT_0 ) { - CloseHandle( (HANDLE)thread_ ); - thread_ = 0; - return true; - } - -#endif - return false; -} - -void Thread :: testCancel(void) -{ -#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) - - pthread_testcancel(); - -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/TubeBell.cpp b/source/StkUGens/stk-4.4.4/src/TubeBell.cpp deleted file mode 100644 index 94ffc47f38..0000000000 --- a/source/StkUGens/stk-4.4.4/src/TubeBell.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/***************************************************/ -/*! \class TubeBell - \brief STK tubular bell (orchestral chime) FM - synthesis instrument. - - This class implements two simple FM Pairs - summed together, also referred to as algorithm - 5 of the TX81Z. - - \code - Algorithm 5 is : 4->3--\ - + --> Out - 2->1--/ - \endcode - - Control Change Numbers: - - Modulator Index One = 2 - - Crossfade of Outputs = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "TubeBell.h" - -namespace stk { - -TubeBell :: TubeBell( void ) - : FM() -{ - // Concatenate the STK rawwave path to the rawwave files - for ( unsigned int i=0; i<3; i++ ) - waves_[i] = new FileLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), true ); - waves_[3] = new FileLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), true ); - - this->setRatio(0, 1.0 * 0.995); - this->setRatio(1, 1.414 * 0.995); - this->setRatio(2, 1.0 * 1.005); - this->setRatio(3, 1.414 * 1.000); - - gains_[0] = fmGains_[94]; - gains_[1] = fmGains_[76]; - gains_[2] = fmGains_[99]; - gains_[3] = fmGains_[71]; - - adsr_[0]->setAllTimes( 0.005, 4.0, 0.0, 0.04); - adsr_[1]->setAllTimes( 0.005, 4.0, 0.0, 0.04); - adsr_[2]->setAllTimes( 0.001, 2.0, 0.0, 0.04); - adsr_[3]->setAllTimes( 0.004, 4.0, 0.0, 0.04); - - twozero_.setGain( 0.5 ); - vibrato_.setFrequency( 2.0 ); -} - -TubeBell :: ~TubeBell( void ) -{ -} - -void TubeBell :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - gains_[0] = amplitude * fmGains_[94]; - gains_[1] = amplitude * fmGains_[76]; - gains_[2] = amplitude * fmGains_[99]; - gains_[3] = amplitude * fmGains_[71]; - this->setFrequency( frequency ); - this->keyOn(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Twang.cpp b/source/StkUGens/stk-4.4.4/src/Twang.cpp deleted file mode 100644 index e9ddd0c690..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Twang.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/***************************************************/ -/*! \class Twang - \brief STK enhanced plucked string class. - - This class implements an enhanced plucked-string - physical model, a la Jaffe-Smith, Smith, - Karjalainen and others. It includes a comb - filter to simulate pluck position. The tick() - function takes an input sample, which is added - to the delayline input. This can be used to - implement commuted synthesis (if the input - samples are derived from the impulse response of - a body filter) or feedback (as in an electric - guitar model). - - This is a digital waveguide model, making its - use possibly subject to patents held by Stanford - University, Yamaha, and others. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Twang.h" - -namespace stk { - -Twang :: Twang( StkFloat lowestFrequency ) -{ - if ( lowestFrequency <= 0.0 ) { - oStream_ << "Twang::Twang: argument is less than or equal to zero!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - this->setLowestFrequency( lowestFrequency ); - - std::vector coefficients( 2, 0.5 ); - loopFilter_.setCoefficients( coefficients ); - - loopGain_ = 0.995; - pluckPosition_ = 0.4; - this->setFrequency( 220.0 ); -} - -void Twang :: clear( void ) -{ - delayLine_.clear(); - combDelay_.clear(); - loopFilter_.clear(); - lastOutput_ = 0.0; -} - -void Twang :: setLowestFrequency( StkFloat frequency ) -{ - unsigned long nDelays = (unsigned long) ( Stk::sampleRate() / frequency ); - delayLine_.setMaximumDelay( nDelays + 1 ); - combDelay_.setMaximumDelay( nDelays + 1 ); -} - -void Twang :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Twang::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - // Delay = length - filter delay. - StkFloat delay = ( Stk::sampleRate() / frequency ) - loopFilter_.phaseDelay( frequency ); - delayLine_.setDelay( delay ); - - this->setLoopGain( loopGain_ ); - - // Set the pluck position, which puts zeroes at position * length. - combDelay_.setDelay( 0.5 * pluckPosition_ * delay ); -} - -void Twang :: setLoopGain( StkFloat loopGain ) -{ - if ( loopGain < 0.0 || loopGain >= 1.0 ) { - oStream_ << "Twang::setLoopGain: parameter is out of range!"; - handleError( StkError::WARNING ); return; - } - - loopGain_ = loopGain; - StkFloat gain = loopGain_ + (frequency_ * 0.000005); - if ( gain >= 1.0 ) gain = 0.99999; - loopFilter_.setGain( gain ); -} - -void Twang :: setPluckPosition( StkFloat position ) -{ - if ( position < 0.0 || position > 1.0 ) { - oStream_ << "Twang::setPluckPosition: argument (" << position << ") is out of range!"; - handleError( StkError::WARNING ); return; - } - - pluckPosition_ = position; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/TwoPole.cpp b/source/StkUGens/stk-4.4.4/src/TwoPole.cpp deleted file mode 100644 index 2021d560f9..0000000000 --- a/source/StkUGens/stk-4.4.4/src/TwoPole.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/***************************************************/ -/*! \class TwoPole - \brief STK two-pole filter class. - - This class implements a two-pole digital filter. A method is - provided for creating a resonance in the frequency response while - maintaining a nearly constant filter gain. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "TwoPole.h" -#include - -namespace stk { - -TwoPole :: TwoPole( void ) -{ - b_.resize( 1 ); - a_.resize( 3 ); - inputs_.resize( 1, 1, 0.0 ); - outputs_.resize( 3, 1, 0.0 ); - b_[0] = 1.0; - a_[0] = 1.0; - - Stk::addSampleRateAlert( this ); -} - -TwoPole :: ~TwoPole() -{ - Stk::removeSampleRateAlert( this ); -} - -void TwoPole :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - if ( !ignoreSampleRateChange_ ) { - oStream_ << "TwoPole::sampleRateChanged: you may need to recompute filter coefficients!"; - handleError( StkError::WARNING ); - } -} - -void TwoPole :: setResonance( StkFloat frequency, StkFloat radius, bool normalize ) -{ -#if defined(_STK_DEBUG_) - if ( frequency < 0.0 || frequency > 0.5 * Stk::sampleRate() ) { - oStream_ << "TwoPole::setResonance: frequency argument (" << frequency << ") is out of range!"; - handleError( StkError::WARNING ); return; - } - if ( radius < 0.0 || radius >= 1.0 ) { - oStream_ << "TwoPole::setResonance: radius argument (" << radius << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - a_[2] = radius * radius; - a_[1] = (StkFloat) -2.0 * radius * cos(TWO_PI * frequency / Stk::sampleRate()); - - if ( normalize ) { - // Normalize the filter gain ... not terribly efficient. - StkFloat real = 1 - radius + (a_[2] - radius) * cos(TWO_PI * 2 * frequency / Stk::sampleRate()); - StkFloat imag = (a_[2] - radius) * sin(TWO_PI * 2 * frequency / Stk::sampleRate()); - b_[0] = sqrt( pow(real, 2) + pow(imag, 2) ); - } -} - -void TwoPole :: setCoefficients( StkFloat b0, StkFloat a1, StkFloat a2, bool clearState ) -{ - b_[0] = b0; - a_[1] = a1; - a_[2] = a2; - - if ( clearState ) this->clear(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/TwoZero.cpp b/source/StkUGens/stk-4.4.4/src/TwoZero.cpp deleted file mode 100644 index bda3c1ade0..0000000000 --- a/source/StkUGens/stk-4.4.4/src/TwoZero.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/***************************************************/ -/*! \class TwoZero - \brief STK two-zero filter class. - - This class implements a two-zero digital filter. A method is - provided for creating a "notch" in the frequency response while - maintaining a constant filter gain. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "TwoZero.h" -#include - -namespace stk { - -TwoZero :: TwoZero( void ) -{ - b_.resize( 3, 0.0 ); - inputs_.resize( 3, 1, 0.0 ); - b_[0] = 1.0; - - Stk::addSampleRateAlert( this ); -} - -TwoZero :: ~TwoZero() -{ - Stk::removeSampleRateAlert( this ); -} - -void TwoZero :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) -{ - if ( !ignoreSampleRateChange_ ) { - oStream_ << "TwoZero::sampleRateChanged: you may need to recompute filter coefficients!"; - handleError( StkError::WARNING ); - } -} - -void TwoZero :: setCoefficients( StkFloat b0, StkFloat b1, StkFloat b2, bool clearState ) -{ - b_[0] = b0; - b_[1] = b1; - b_[2] = b2; - - if ( clearState ) this->clear(); -} - -void TwoZero :: setNotch( StkFloat frequency, StkFloat radius ) -{ -#if defined(_STK_DEBUG_) - if ( frequency < 0.0 || frequency > 0.5 * Stk::sampleRate() ) { - oStream_ << "TwoZero::setNotch: frequency argument (" << frequency << ") is out of range!"; - handleError( StkError::WARNING ); return; - } - if ( radius < 0.0 ) { - oStream_ << "TwoZero::setNotch: radius argument (" << radius << ") is negative!"; - handleError( StkError::WARNING ); return; - } -#endif - - b_[2] = radius * radius; - b_[1] = -2.0 * radius * cos(TWO_PI * frequency / Stk::sampleRate()); - - // Normalize the filter gain. - if ( b_[1] > 0.0 ) // Maximum at z = 0. - b_[0] = 1.0 / ( 1.0 + b_[1] + b_[2] ); - else // Maximum at z = -1. - b_[0] = 1.0 / ( 1.0 - b_[1] + b_[2] ); - b_[1] *= b_[0]; - b_[2] *= b_[0]; -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/UdpSocket.cpp b/source/StkUGens/stk-4.4.4/src/UdpSocket.cpp deleted file mode 100644 index 89c666d6c6..0000000000 --- a/source/StkUGens/stk-4.4.4/src/UdpSocket.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/***************************************************/ -/*! \class UdpSocket - \brief STK UDP socket server/client class. - - This class provides a uniform cross-platform UDP socket - server/client interface. Methods are provided for reading or - writing data buffers. The constructor creates a UDP socket and - binds it to the specified port. Note that only one socket can be - bound to a given port on the same machine. - - UDP sockets provide unreliable, connection-less service. Messages - can be lost, duplicated, or received out of order. That said, - data transmission tends to be faster than with TCP connections and - datagrams are not potentially combined by the underlying system. - - The user is responsible for checking the values returned by the - read/write methods. Values less than or equal to zero indicate - the occurence of an error. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "UdpSocket.h" -#include -#include - -namespace stk { - -UdpSocket :: UdpSocket(int port ) -{ - validAddress_ = false; - -#if defined(__OS_WINDOWS__) // windoze-only stuff - WSADATA wsaData; - WORD wVersionRequested = MAKEWORD(1,1); - - WSAStartup(wVersionRequested, &wsaData); - if (wsaData.wVersion != wVersionRequested) { - oStream_ << "UdpSocket: Incompatible Windows socket library version!"; - handleError( StkError::PROCESS_SOCKET ); - } -#endif - - // Create the UDP socket - soket_ = ::socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP ); - if ( soket_ < 0 ) { - oStream_ << "UdpSocket: Couldn't create UDP socket!"; - handleError( StkError::PROCESS_SOCKET ); - } - - struct sockaddr_in address; - address.sin_family = AF_INET; - address.sin_addr.s_addr = INADDR_ANY; - address.sin_port = htons( port ); - - // Bind socket to the appropriate port and interface (INADDR_ANY) - if ( bind(soket_, (struct sockaddr *)&address, sizeof(address)) < 0 ) { - oStream_ << "UdpSocket: Couldn't bind socket in constructor!"; - handleError( StkError::PROCESS_SOCKET ); - } - - port_ = port; -} - -UdpSocket :: ~UdpSocket() -{ -} - -void UdpSocket :: setDestination( int port, std::string hostname ) -{ - this->setAddress( &address_, port, hostname ); - validAddress_ = true; -} - -void UdpSocket :: setAddress( struct sockaddr_in *address, int port, std::string hostname ) -{ - struct hostent *hostp; - if ( (hostp = gethostbyname( hostname.c_str() )) == 0 ) { - oStream_ << "UdpSocket::setAddress: unknown host (" << hostname << ")!"; - handleError( StkError::PROCESS_SOCKET_IPADDR ); - } - - // Fill in the address structure - address->sin_family = AF_INET; - memcpy((void *)&address->sin_addr, hostp->h_addr, hostp->h_length); - address->sin_port = htons( port ); -} - -int UdpSocket :: writeBuffer( const void *buffer, long bufferSize, int flags ) -{ - if ( !isValid( soket_ ) || !validAddress_ ) return -1; - return sendto( soket_, (const char *)buffer, bufferSize, flags, (struct sockaddr *)&address_, sizeof(address_) ); -} - -int UdpSocket :: readBuffer( void *buffer, long bufferSize, int flags ) -{ - if ( !isValid( soket_ ) ) return -1; - return recvfrom( soket_, (char *)buffer, bufferSize, flags, NULL, NULL ); -} - -int UdpSocket :: writeBufferTo( const void *buffer, long bufferSize, int port, std::string hostname, int flags ) -{ - if ( !isValid( soket_ ) ) return -1; - struct sockaddr_in address; - this->setAddress( &address, port, hostname ); - return sendto( soket_, (const char *)buffer, bufferSize, flags, (struct sockaddr *)&address, sizeof(address) ); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/VoicForm.cpp b/source/StkUGens/stk-4.4.4/src/VoicForm.cpp deleted file mode 100644 index 19e8bd93c8..0000000000 --- a/source/StkUGens/stk-4.4.4/src/VoicForm.cpp +++ /dev/null @@ -1,189 +0,0 @@ -/***************************************************/ -/*! \class VoicForm - \brief Four formant synthesis instrument. - - This instrument contains an excitation singing - wavetable (looping wave with random and - periodic vibrato, smoothing on frequency, - etc.), excitation noise, and four sweepable - complex resonances. - - Measured formant data is included, and enough - data is there to support either parallel or - cascade synthesis. In the floating point case - cascade synthesis is the most natural so - that's what you'll find here. - - Control Change Numbers: - - Voiced/Unvoiced Mix = 2 - - Vowel/Phoneme Selection = 4 - - Vibrato Frequency = 11 - - Vibrato Gain = 1 - - Loudness (Spectral Tilt) = 128 - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "VoicForm.h" -#include "Phonemes.h" -#include "SKINI.msg" -#include -#include - -namespace stk { - -VoicForm :: VoicForm( void ) : Instrmnt() -{ - // Concatenate the STK rawwave path to the rawwave file - voiced_ = new SingWave( (Stk::rawwavePath() + "impuls20.raw").c_str(), true ); - voiced_->setGainRate( 0.001 ); - voiced_->setGainTarget( 0.0 ); - - for ( int i=0; i<4; i++ ) - filters_[i].setSweepRate( 0.001 ); - - onezero_.setZero( -0.9 ); - onepole_.setPole( 0.9 ); - - noiseEnv_.setRate( 0.001 ); - noiseEnv_.setTarget( 0.0 ); - - this->setPhoneme( "eee" ); - this->clear(); -} - -VoicForm :: ~VoicForm( void ) -{ - delete voiced_; -} - -void VoicForm :: clear( void ) -{ - onezero_.clear(); - onepole_.clear(); - for ( int i=0; i<4; i++ ) { - filters_[i].clear(); - } -} - -void VoicForm :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "VoicForm::setFrequency: parameter is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - voiced_->setFrequency( frequency ); -} - -bool VoicForm :: setPhoneme( const char *phoneme ) -{ - bool found = false; - unsigned int i = 0; - while( i < 32 && !found ) { - if ( !strcmp( Phonemes::name(i), phoneme ) ) { - found = true; - filters_[0].setTargets( Phonemes::formantFrequency(i, 0), Phonemes::formantRadius(i, 0), pow(10.0, Phonemes::formantGain(i, 0 ) / 20.0) ); - filters_[1].setTargets( Phonemes::formantFrequency(i, 1), Phonemes::formantRadius(i, 1), pow(10.0, Phonemes::formantGain(i, 1 ) / 20.0) ); - filters_[2].setTargets( Phonemes::formantFrequency(i, 2), Phonemes::formantRadius(i, 2), pow(10.0, Phonemes::formantGain(i, 2 ) / 20.0) ); - filters_[3].setTargets( Phonemes::formantFrequency(i, 3), Phonemes::formantRadius(i, 3), pow(10.0, Phonemes::formantGain(i, 3 ) / 20.0) ); - this->setVoiced( Phonemes::voiceGain( i ) ); - this->setUnVoiced( Phonemes::noiseGain( i ) ); - } - i++; - } - - if ( !found ) { - oStream_ << "VoicForm::setPhoneme: phoneme " << phoneme << " not found!"; - handleError( StkError::WARNING ); - } - - return found; -} - -void VoicForm :: setFilterSweepRate( unsigned int whichOne, StkFloat rate ) -{ - if ( whichOne > 3 ) { - oStream_ << "VoicForm::setFilterSweepRate: filter select argument outside range 0-3!"; - handleError( StkError::WARNING ); return; - } - - filters_[whichOne].setSweepRate(rate); -} - -void VoicForm :: quiet( void ) -{ - voiced_->noteOff(); - noiseEnv_.setTarget( 0.0 ); -} - -void VoicForm :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - voiced_->setGainTarget( amplitude ); - onepole_.setPole( 0.97 - (amplitude * 0.2) ); -} - -void VoicForm :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Clarinet::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if (number == __SK_Breath_) { // 2 - this->setVoiced( 1.0 - normalizedValue ); - this->setUnVoiced( 0.01 * normalizedValue ); - } - else if (number == __SK_FootControl_) { // 4 - StkFloat temp = 0.0; - unsigned int i = (int) value; - if (i < 32) { - temp = 0.9; - } - else if (i < 64) { - i -= 32; - temp = 1.0; - } - else if (i < 96) { - i -= 64; - temp = 1.1; - } - else if (i < 128) { - i -= 96; - temp = 1.2; - } - else if (i == 128) { - i = 0; - temp = 1.4; - } - filters_[0].setTargets( temp * Phonemes::formantFrequency(i, 0), Phonemes::formantRadius(i, 0), pow(10.0, Phonemes::formantGain(i, 0 ) / 20.0) ); - filters_[1].setTargets( temp * Phonemes::formantFrequency(i, 1), Phonemes::formantRadius(i, 1), pow(10.0, Phonemes::formantGain(i, 1 ) / 20.0) ); - filters_[2].setTargets( temp * Phonemes::formantFrequency(i, 2), Phonemes::formantRadius(i, 2), pow(10.0, Phonemes::formantGain(i, 2 ) / 20.0) ); - filters_[3].setTargets( temp * Phonemes::formantFrequency(i, 3), Phonemes::formantRadius(i, 3), pow(10.0, Phonemes::formantGain(i, 3 ) / 20.0) ); - this->setVoiced( Phonemes::voiceGain( i ) ); - this->setUnVoiced( Phonemes::noiseGain( i ) ); - } - else if (number == __SK_ModFrequency_) // 11 - voiced_->setVibratoRate( normalizedValue * 12.0); // 0 to 12 Hz - else if (number == __SK_ModWheel_) // 1 - voiced_->setVibratoGain( normalizedValue * 0.2); - else if (number == __SK_AfterTouch_Cont_) { // 128 - this->setVoiced( normalizedValue ); - onepole_.setPole( 0.97 - ( normalizedValue * 0.2) ); - } -#if defined(_STK_DEBUG_) - else { - oStream_ << "VoicForm::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Voicer.cpp b/source/StkUGens/stk-4.4.4/src/Voicer.cpp deleted file mode 100644 index 7c57ee19e9..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Voicer.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/***************************************************/ -/*! \class Voicer - \brief STK voice manager class. - - This class can be used to manage a group of STK instrument - classes. Individual voices can be controlled via unique note - tags. Instrument groups can be controlled by group number. - - A previously constructed STK instrument class is linked with a - voice manager using the addInstrument() function. An optional - group number argument can be specified to the addInstrument() - function as well (default group = 0). The voice manager does not - delete any instrument instances ... it is the responsibility of - the user to allocate and deallocate all instruments. - - The tick() function returns the mix of all sounding voices. Each - noteOn returns a unique tag (credits to the NeXT MusicKit), so you - can send control changes to specific voices within an ensemble. - Alternately, control changes can be sent to all voices in a given - group. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Voicer.h" -#include - -namespace stk { - -Voicer :: Voicer( StkFloat decayTime ) -{ - if ( decayTime < 0.0 ) { - oStream_ << "Voicer::Voicer: argument (" << decayTime << ") must be positive!"; - handleError( StkError::FUNCTION_ARGUMENT ); - } - - tags_ = 23456; - muteTime_ = (int) ( decayTime * Stk::sampleRate() ); - lastFrame_.resize( 1, 1, 0.0 ); -} - -void Voicer :: addInstrument( Instrmnt *instrument, int group ) -{ - Voicer::Voice voice; - voice.instrument = instrument; - voice.group = group; - voice.noteNumber = -1; - voices_.push_back( voice ); - - // Check output channels and resize lastFrame_ if necessary. - if ( instrument->channelsOut() > lastFrame_.channels() ) { - unsigned int startChannel = lastFrame_.channels(); - lastFrame_.resize( 1, instrument->channelsOut() ); - for ( unsigned int i=startChannel; i::iterator i; - for ( i=voices_.begin(); i!=voices_.end(); ++i ) { - if ( (*i).instrument != instrument ) continue; - voices_.erase( i ); - found = true; - break; - } - - if ( found ) { - // Check output channels and resize lastFrame_ if necessary. - unsigned int maxChannels = 1; - for ( i=voices_.begin(); i!=voices_.end(); ++i ) { - if ( (*i).instrument->channelsOut() > maxChannels ) maxChannels = (*i).instrument->channelsOut(); - } - if ( maxChannels < lastFrame_.channels() ) - lastFrame_.resize( 1, maxChannels ); - } - else { - oStream_ << "Voicer::removeInstrument: instrument pointer not found in current voices!"; - handleError( StkError::WARNING ); - } -} - -long Voicer :: noteOn(StkFloat noteNumber, StkFloat amplitude, int group ) -{ - unsigned int i; - StkFloat frequency = (StkFloat) 220.0 * pow( 2.0, (noteNumber - 57.0) / 12.0 ); - for ( i=0; inoteOn( frequency, amplitude * ONE_OVER_128 ); - voices_[i].sounding = 1; - return voices_[i].tag; - } - } - - // All voices are sounding, so interrupt the oldest voice. - int voice = -1; - for ( i=0; i= 0 ) { - voices_[voice].tag = tags_++; - voices_[voice].group = group; - voices_[voice].noteNumber = noteNumber; - voices_[voice].frequency = frequency; - voices_[voice].instrument->noteOn( frequency, amplitude * ONE_OVER_128 ); - voices_[voice].sounding = 1; - return voices_[voice].tag; - } - - return -1; -} - -void Voicer :: noteOff( StkFloat noteNumber, StkFloat amplitude, int group ) -{ - for ( unsigned int i=0; inoteOff( amplitude * ONE_OVER_128 ); - voices_[i].sounding = -muteTime_; - } - } -} - -void Voicer :: noteOff( long tag, StkFloat amplitude ) -{ - for ( unsigned int i=0; inoteOff( amplitude * ONE_OVER_128 ); - voices_[i].sounding = -muteTime_; - break; - } - } -} - -void Voicer :: setFrequency( StkFloat noteNumber, int group ) -{ - StkFloat frequency = (StkFloat) 220.0 * pow( 2.0, (noteNumber - 57.0) / 12.0 ); - for ( unsigned int i=0; isetFrequency( frequency ); - } - } -} - -void Voicer :: setFrequency( long tag, StkFloat noteNumber ) -{ - StkFloat frequency = (StkFloat) 220.0 * pow( 2.0, (noteNumber - 57.0) / 12.0 ); - for ( unsigned int i=0; isetFrequency( frequency ); - break; - } - } -} - -void Voicer :: pitchBend( StkFloat value, int group ) -{ - StkFloat pitchScaler; - if ( value < 8192.0 ) - pitchScaler = pow( 0.5, (8192.0-value) / 8192.0 ); - else - pitchScaler = pow( 2.0, (value-8192.0) / 8192.0 ); - for ( unsigned int i=0; isetFrequency( (StkFloat) (voices_[i].frequency * pitchScaler) ); - } -} - -void Voicer :: pitchBend( long tag, StkFloat value ) -{ - StkFloat pitchScaler; - if ( value < 8192.0 ) - pitchScaler = pow( 0.5, (8192.0-value) / 8192.0 ); - else - pitchScaler = pow( 2.0, (value-8192.0) / 8192.0 ); - for ( unsigned int i=0; isetFrequency( (StkFloat) (voices_[i].frequency * pitchScaler) ); - break; - } - } -} - -void Voicer :: controlChange( int number, StkFloat value, int group ) -{ - for ( unsigned int i=0; icontrolChange( number, value ); - } -} - -void Voicer :: controlChange( long tag, int number, StkFloat value ) -{ - for ( unsigned int i=0; icontrolChange( number, value ); - break; - } - } -} - -void Voicer :: silence( void ) -{ - for ( unsigned int i=0; i 0 ) - voices_[i].instrument->noteOff( 0.5 ); - } -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Whistle.cpp b/source/StkUGens/stk-4.4.4/src/Whistle.cpp deleted file mode 100644 index 72ad2cc126..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Whistle.cpp +++ /dev/null @@ -1,256 +0,0 @@ -/***************************************************/ -/*! \Class Whistle - \brief STK police/referee whistle instrument class. - - This class implements a hybrid physical/spectral - model of a police whistle (a la Cook). - - Control Change Numbers: - - Noise Gain = 4 - - Fipple Modulation Frequency = 11 - - Fipple Modulation Gain = 1 - - Blowing Frequency Modulation = 2 - - Volume = 128 - - by Perry R. Cook 1995-2012. -*/ -/***************************************************/ - -#include "Whistle.h" -#include "SKINI.msg" -#include - -namespace stk { - -const int CAN_RADIUS = 100; -const int PEA_RADIUS = 30; -const int BUMP_RADIUS = 5; - -const StkFloat NORM_CAN_LOSS = 0.97; -const StkFloat SLOW_CAN_LOSS = 0.90; -const StkFloat GRAVITY = 20.0; - -const StkFloat NORM_TICK_SIZE = 0.004; -const StkFloat SLOW_TICK_SIZE = 0.0001; - -const StkFloat ENV_RATE = 0.001; - -Whistle :: Whistle( void ) -{ - sine_.setFrequency( 2800.0 ); - - can_.setRadius( CAN_RADIUS ); - can_.setPosition(0, 0, 0); // set can location - can_.setVelocity(0, 0, 0); // and the velocity - - onepole_.setPole(0.95); // 0.99 - - bumper_.setRadius( BUMP_RADIUS ); - bumper_.setPosition(0.0, CAN_RADIUS-BUMP_RADIUS, 0); - bumper_.setPosition(0.0, CAN_RADIUS-BUMP_RADIUS, 0); - - pea_.setRadius( PEA_RADIUS ); - pea_.setPosition(0, CAN_RADIUS/2, 0); - pea_.setVelocity(35, 15, 0); - - envelope_.setRate( ENV_RATE ); - envelope_.keyOn(); - - fippleFreqMod_ = 0.5; - fippleGainMod_ = 0.5; - blowFreqMod_ = 0.25; - noiseGain_ = 0.125; - baseFrequency_ = 2000; - - tickSize_ = NORM_TICK_SIZE; - canLoss_ = NORM_CAN_LOSS; - - subSample_ = 1; - subSampCount_ = subSample_; -} - -Whistle :: ~Whistle( void ) -{ -#ifdef WHISTLE_ANIMATION - printf("Exit, Whistle bye bye!!\n"); -#endif -} - -void Whistle :: clear( void ) -{ -} - -void Whistle :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Whistle::setFrequency: parameter is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - baseFrequency_ = frequency * 4; // the whistle is a transposing instrument -} - -void Whistle :: startBlowing( StkFloat amplitude, StkFloat rate ) -{ - if ( amplitude <= 0.0 || rate <= 0.0 ) { - oStream_ << "Whistle::startBlowing: one or more arguments is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - envelope_.setRate( ENV_RATE ); - envelope_.setTarget( amplitude ); -} - -void Whistle :: stopBlowing( StkFloat rate ) -{ - if ( rate <= 0.0 ) { - oStream_ << "Whistle::stopBlowing: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } - - envelope_.setRate( rate ); - envelope_.keyOff(); -} - -void Whistle :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - this->setFrequency( frequency ); - this->startBlowing( amplitude*2.0 ,amplitude * 0.2 ); -} - -void Whistle :: noteOff( StkFloat amplitude ) -{ - this->stopBlowing( amplitude * 0.02 ); -} - -int frameCount = 0; - -StkFloat Whistle :: tick( unsigned int ) -{ - StkFloat soundMix, tempFreq; - StkFloat envOut = 0, temp, temp1, temp2, tempX, tempY; - double phi, cosphi, sinphi; - double gain = 0.5, mod = 0.0; - - if ( --subSampCount_ <= 0 ) { - tempVectorP_ = pea_.getPosition(); - subSampCount_ = subSample_; - temp = bumper_.isInside( tempVectorP_ ); -#ifdef WHISTLE_ANIMATION - frameCount += 1; - if ( frameCount >= (1470 / subSample_) ) { - frameCount = 0; - printf("%f %f %f\n",tempVectorP_->getX(),tempVectorP_->getY(),envOut); - fflush(stdout); - } -#endif - envOut = envelope_.tick(); - - if (temp < (BUMP_RADIUS + PEA_RADIUS)) { - tempX = envOut * tickSize_ * 2000 * noise_.tick(); - tempY = -envOut * tickSize_ * 1000 * (1.0 + noise_.tick()); - pea_.addVelocity( tempX, tempY, 0 ); - pea_.tick( tickSize_ ); - } - - mod = exp(-temp * 0.01); // exp. distance falloff of fipple/pea effect - temp = onepole_.tick(mod); // smooth it a little - gain = (1.0 - (fippleGainMod_*0.5)) + (2.0 * fippleGainMod_ * temp); - gain *= gain; // squared distance/gain - // tempFreq = 1.0 // Normalized Base Freq - // + (fippleFreqMod_ * 0.25) - (fippleFreqMod_ * temp) // fippleModulation - // - (blowFreqMod_) + (blowFreqMod_ * envOut); // blowingModulation - // short form of above - tempFreq = 1.0 + fippleFreqMod_*(0.25-temp) + blowFreqMod_*(envOut-1.0); - tempFreq *= baseFrequency_; - - sine_.setFrequency(tempFreq); - - tempVectorP_ = pea_.getPosition(); - temp = can_.isInside(tempVectorP_); - temp = -temp; // We know (hope) it's inside, just how much?? - if (temp < (PEA_RADIUS * 1.25)) { - pea_.getVelocity( &tempVector_ ); // This is the can/pea collision - tempX = tempVectorP_->getX(); // calculation. Could probably - tempY = tempVectorP_->getY(); // simplify using tables, etc. - phi = -atan2(tempY,tempX); - - cosphi = cos(phi); - sinphi = sin(phi); - temp1 = (cosphi*tempVector_.getX()) - (sinphi*tempVector_.getY()); - temp2 = (sinphi*tempVector_.getX()) + (cosphi*tempVector_.getY()); - temp1 = -temp1; - tempX = (cosphi*temp1) + (sinphi*temp2); - tempY = (-sinphi*temp1) + (cosphi*temp2); - pea_.setVelocity(tempX, tempY, 0); - pea_.tick(tickSize_); - pea_.setVelocity( tempX*canLoss_, tempY*canLoss_, 0 ); - pea_.tick(tickSize_); - } - - temp = tempVectorP_->getLength(); - if (temp > 0.01) { - tempX = tempVectorP_->getX(); - tempY = tempVectorP_->getY(); - phi = atan2( tempY, tempX ); - phi += 0.3 * temp / CAN_RADIUS; - cosphi = cos(phi); - sinphi = sin(phi); - tempX = 3.0 * temp * cosphi; - tempY = 3.0 * temp * sinphi; - } - else { - tempX = 0.0; - tempY = 0.0; - } - - temp = (0.9 + 0.1*subSample_*noise_.tick()) * envOut * 0.6 * tickSize_; - pea_.addVelocity( temp * tempX, (temp*tempY) - (GRAVITY*tickSize_), 0 ); - pea_.tick( tickSize_ ); - - // bumper_.tick(0.0); - } - - temp = envOut * envOut * gain / 2; - soundMix = temp * ( sine_.tick() + ( noiseGain_*noise_.tick() ) ); - lastFrame_[0] = 0.20 * soundMix; // should probably do one-zero filter here - - return lastFrame_[0]; -} - -void Whistle :: controlChange( int number, StkFloat value ) -{ -#if defined(_STK_DEBUG_) - if ( Stk::inRange( value, 0.0, 128.0 ) == false ) { - oStream_ << "Whistle::controlChange: value (" << value << ") is out of range!"; - handleError( StkError::WARNING ); return; - } -#endif - - StkFloat normalizedValue = value * ONE_OVER_128; - if ( number == __SK_NoiseLevel_ ) // 4 - noiseGain_ = 0.25 * normalizedValue; - else if ( number == __SK_ModFrequency_ ) // 11 - fippleFreqMod_ = normalizedValue; - else if ( number == __SK_ModWheel_ ) // 1 - fippleGainMod_ = normalizedValue; - else if ( number == __SK_AfterTouch_Cont_ ) // 128 - envelope_.setTarget( normalizedValue * 2.0 ); - else if ( number == __SK_Breath_ ) // 2 - blowFreqMod_ = normalizedValue * 0.5; - else if ( number == __SK_Sustain_ ) { // 64 - subSample_ = (int) value; - if ( subSample_ < 1.0 ) subSample_ = 1; - envelope_.setRate( ENV_RATE / subSample_ ); - } -#if defined(_STK_DEBUG_) - else { - oStream_ << "Whistle::controlChange: undefined control number (" << number << ")!"; - handleError( StkError::WARNING ); - } -#endif -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/Wurley.cpp b/source/StkUGens/stk-4.4.4/src/Wurley.cpp deleted file mode 100644 index 9ad3269dbe..0000000000 --- a/source/StkUGens/stk-4.4.4/src/Wurley.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/***************************************************/ -/*! \class Wurley - \brief STK Wurlitzer electric piano FM - synthesis instrument. - - This class implements two simple FM Pairs - summed together, also referred to as algorithm - 5 of the TX81Z. - - \code - Algorithm 5 is : 4->3--\ - + --> Out - 2->1--/ - \endcode - - Control Change Numbers: - - Modulator Index One = 2 - - Crossfade of Outputs = 4 - - LFO Speed = 11 - - LFO Depth = 1 - - ADSR 2 & 4 Target = 128 - - The basic Chowning/Stanford FM patent expired - in 1995, but there exist follow-on patents, - mostly assigned to Yamaha. If you are of the - type who should worry about this (making - money) worry away. - - by Perry R. Cook and Gary P. Scavone, 1995-2012. -*/ -/***************************************************/ - -#include "Wurley.h" - -namespace stk { - -Wurley :: Wurley( void ) - : FM() -{ - // Concatenate the STK rawwave path to the rawwave files - for ( unsigned int i=0; i<3; i++ ) - waves_[i] = new FileLoop( (Stk::rawwavePath() + "sinewave.raw").c_str(), true ); - waves_[3] = new FileLoop( (Stk::rawwavePath() + "fwavblnk.raw").c_str(), true ); - - this->setRatio(0, 1.0); - this->setRatio(1, 4.0); - this->setRatio(2, -510.0); - this->setRatio(3, -510.0); - - gains_[0] = fmGains_[99]; - gains_[1] = fmGains_[82]; - gains_[2] = fmGains_[92]; - gains_[3] = fmGains_[68]; - - adsr_[0]->setAllTimes( 0.001, 1.50, 0.0, 0.04); - adsr_[1]->setAllTimes( 0.001, 1.50, 0.0, 0.04); - adsr_[2]->setAllTimes( 0.001, 0.25, 0.0, 0.04); - adsr_[3]->setAllTimes( 0.001, 0.15, 0.0, 0.04); - - twozero_.setGain( 2.0 ); - vibrato_.setFrequency( 8.0 ); -} - -Wurley :: ~Wurley( void ) -{ -} - -void Wurley :: setFrequency( StkFloat frequency ) -{ -#if defined(_STK_DEBUG_) - if ( frequency <= 0.0 ) { - oStream_ << "Wurley::setFrequency: argument is less than or equal to zero!"; - handleError( StkError::WARNING ); return; - } -#endif - - baseFrequency_ = frequency; - waves_[0]->setFrequency( baseFrequency_ * ratios_[0]); - waves_[1]->setFrequency( baseFrequency_ * ratios_[1]); - waves_[2]->setFrequency( ratios_[2] ); // Note here a 'fixed resonance'. - waves_[3]->setFrequency( ratios_[3] ); -} - -void Wurley :: noteOn( StkFloat frequency, StkFloat amplitude ) -{ - gains_[0] = amplitude * fmGains_[99]; - gains_[1] = amplitude * fmGains_[82]; - gains_[2] = amplitude * fmGains_[82]; - gains_[3] = amplitude * fmGains_[68]; - this->setFrequency( frequency ); - this->keyOn(); -} - -} // stk namespace diff --git a/source/StkUGens/stk-4.4.4/src/include/asio.cpp b/source/StkUGens/stk-4.4.4/src/include/asio.cpp deleted file mode 100644 index b241663b3d..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/asio.cpp +++ /dev/null @@ -1,257 +0,0 @@ -/* - Steinberg Audio Stream I/O API - (c) 1996, Steinberg Soft- und Hardware GmbH - - asio.cpp - - asio functions entries which translate the - asio interface to the asiodrvr class methods -*/ - -#include -#include "asiosys.h" // platform definition -#include "asio.h" - -#if MAC -#include "asiodrvr.h" - -#pragma export on - -AsioDriver *theAsioDriver = 0; - -extern "C" -{ - -long main() -{ - return 'ASIO'; -} - -#elif WINDOWS - -#include "windows.h" -#include "iasiodrv.h" -#include "asiodrivers.h" - -IASIO *theAsioDriver = 0; -extern AsioDrivers *asioDrivers; - -#elif SGI || SUN || BEOS || LINUX -#include "asiodrvr.h" -static AsioDriver *theAsioDriver = 0; -#endif - -//----------------------------------------------------------------------------------------------------- -ASIOError ASIOInit(ASIODriverInfo *info) -{ -#if MAC || SGI || SUN || BEOS || LINUX - if(theAsioDriver) - { - delete theAsioDriver; - theAsioDriver = 0; - } - info->driverVersion = 0; - strcpy(info->name, "No ASIO Driver"); - theAsioDriver = getDriver(); - if(!theAsioDriver) - { - strcpy(info->errorMessage, "Not enough memory for the ASIO driver!"); - return ASE_NotPresent; - } - if(!theAsioDriver->init(info->sysRef)) - { - theAsioDriver->getErrorMessage(info->errorMessage); - delete theAsioDriver; - theAsioDriver = 0; - return ASE_NotPresent; - } - strcpy(info->errorMessage, "No ASIO Driver Error"); - theAsioDriver->getDriverName(info->name); - info->driverVersion = theAsioDriver->getDriverVersion(); - return ASE_OK; - -#else - - info->driverVersion = 0; - strcpy(info->name, "No ASIO Driver"); - if(theAsioDriver) // must be loaded! - { - if(!theAsioDriver->init(info->sysRef)) - { - theAsioDriver->getErrorMessage(info->errorMessage); - theAsioDriver = 0; - return ASE_NotPresent; - } - - strcpy(info->errorMessage, "No ASIO Driver Error"); - theAsioDriver->getDriverName(info->name); - info->driverVersion = theAsioDriver->getDriverVersion(); - return ASE_OK; - } - return ASE_NotPresent; - -#endif // !MAC -} - -ASIOError ASIOExit(void) -{ - if(theAsioDriver) - { -#if WINDOWS - asioDrivers->removeCurrentDriver(); -#else - delete theAsioDriver; -#endif - } - theAsioDriver = 0; - return ASE_OK; -} - -ASIOError ASIOStart(void) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->start(); -} - -ASIOError ASIOStop(void) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->stop(); -} - -ASIOError ASIOGetChannels(long *numInputChannels, long *numOutputChannels) -{ - if(!theAsioDriver) - { - *numInputChannels = *numOutputChannels = 0; - return ASE_NotPresent; - } - return theAsioDriver->getChannels(numInputChannels, numOutputChannels); -} - -ASIOError ASIOGetLatencies(long *inputLatency, long *outputLatency) -{ - if(!theAsioDriver) - { - *inputLatency = *outputLatency = 0; - return ASE_NotPresent; - } - return theAsioDriver->getLatencies(inputLatency, outputLatency); -} - -ASIOError ASIOGetBufferSize(long *minSize, long *maxSize, long *preferredSize, long *granularity) -{ - if(!theAsioDriver) - { - *minSize = *maxSize = *preferredSize = *granularity = 0; - return ASE_NotPresent; - } - return theAsioDriver->getBufferSize(minSize, maxSize, preferredSize, granularity); -} - -ASIOError ASIOCanSampleRate(ASIOSampleRate sampleRate) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->canSampleRate(sampleRate); -} - -ASIOError ASIOGetSampleRate(ASIOSampleRate *currentRate) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->getSampleRate(currentRate); -} - -ASIOError ASIOSetSampleRate(ASIOSampleRate sampleRate) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->setSampleRate(sampleRate); -} - -ASIOError ASIOGetClockSources(ASIOClockSource *clocks, long *numSources) -{ - if(!theAsioDriver) - { - *numSources = 0; - return ASE_NotPresent; - } - return theAsioDriver->getClockSources(clocks, numSources); -} - -ASIOError ASIOSetClockSource(long reference) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->setClockSource(reference); -} - -ASIOError ASIOGetSamplePosition(ASIOSamples *sPos, ASIOTimeStamp *tStamp) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->getSamplePosition(sPos, tStamp); -} - -ASIOError ASIOGetChannelInfo(ASIOChannelInfo *info) -{ - if(!theAsioDriver) - { - info->channelGroup = -1; - info->type = ASIOSTInt16MSB; - strcpy(info->name, "None"); - return ASE_NotPresent; - } - return theAsioDriver->getChannelInfo(info); -} - -ASIOError ASIOCreateBuffers(ASIOBufferInfo *bufferInfos, long numChannels, - long bufferSize, ASIOCallbacks *callbacks) -{ - if(!theAsioDriver) - { - ASIOBufferInfo *info = bufferInfos; - for(long i = 0; i < numChannels; i++, info++) - info->buffers[0] = info->buffers[1] = 0; - return ASE_NotPresent; - } - return theAsioDriver->createBuffers(bufferInfos, numChannels, bufferSize, callbacks); -} - -ASIOError ASIODisposeBuffers(void) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->disposeBuffers(); -} - -ASIOError ASIOControlPanel(void) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->controlPanel(); -} - -ASIOError ASIOFuture(long selector, void *opt) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->future(selector, opt); -} - -ASIOError ASIOOutputReady(void) -{ - if(!theAsioDriver) - return ASE_NotPresent; - return theAsioDriver->outputReady(); -} - -#if MAC -} // extern "C" -#pragma export off -#endif - - diff --git a/source/StkUGens/stk-4.4.4/src/include/asio.h b/source/StkUGens/stk-4.4.4/src/include/asio.h deleted file mode 100644 index 8ec811f8fe..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/asio.h +++ /dev/null @@ -1,1054 +0,0 @@ -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- - -/* - Steinberg Audio Stream I/O API - (c) 1997 - 2005, Steinberg Media Technologies GmbH - - ASIO Interface Specification v 2.1 - - 2005 - Added support for DSD sample data (in cooperation with Sony) - - - basic concept is an i/o synchronous double-buffer scheme: - - on bufferSwitch(index == 0), host will read/write: - - after ASIOStart(), the - read first input buffer A (index 0) - | will be invalid (empty) - * ------------------------ - |------------------------|-----------------------| - | | | - | Input Buffer A (0) | Input Buffer B (1) | - | | | - |------------------------|-----------------------| - | | | - | Output Buffer A (0) | Output Buffer B (1) | - | | | - |------------------------|-----------------------| - * ------------------------- - | before calling ASIOStart(), - write host will have filled output - buffer B (index 1) already - - *please* take special care of proper statement of input - and output latencies (see ASIOGetLatencies()), these - control sequencer sync accuracy - -*/ - -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- - -/* - -prototypes summary: - -ASIOError ASIOInit(ASIODriverInfo *info); -ASIOError ASIOExit(void); -ASIOError ASIOStart(void); -ASIOError ASIOStop(void); -ASIOError ASIOGetChannels(long *numInputChannels, long *numOutputChannels); -ASIOError ASIOGetLatencies(long *inputLatency, long *outputLatency); -ASIOError ASIOGetBufferSize(long *minSize, long *maxSize, long *preferredSize, long *granularity); -ASIOError ASIOCanSampleRate(ASIOSampleRate sampleRate); -ASIOError ASIOGetSampleRate(ASIOSampleRate *currentRate); -ASIOError ASIOSetSampleRate(ASIOSampleRate sampleRate); -ASIOError ASIOGetClockSources(ASIOClockSource *clocks, long *numSources); -ASIOError ASIOSetClockSource(long reference); -ASIOError ASIOGetSamplePosition (ASIOSamples *sPos, ASIOTimeStamp *tStamp); -ASIOError ASIOGetChannelInfo(ASIOChannelInfo *info); -ASIOError ASIOCreateBuffers(ASIOBufferInfo *bufferInfos, long numChannels, - long bufferSize, ASIOCallbacks *callbacks); -ASIOError ASIODisposeBuffers(void); -ASIOError ASIOControlPanel(void); -void *ASIOFuture(long selector, void *params); -ASIOError ASIOOutputReady(void); - -*/ - -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- - -#ifndef __ASIO_H -#define __ASIO_H - -// force 4 byte alignment -#if defined(_MSC_VER) && !defined(__MWERKS__) -#pragma pack(push,4) -#elif PRAGMA_ALIGN_SUPPORTED -#pragma options align = native -#endif - -//- - - - - - - - - - - - - - - - - - - - - - - - - -// Type definitions -//- - - - - - - - - - - - - - - - - - - - - - - - - - -// number of samples data type is 64 bit integer -#if NATIVE_INT64 - typedef long long int ASIOSamples; -#else - typedef struct ASIOSamples { - unsigned long hi; - unsigned long lo; - } ASIOSamples; -#endif - -// Timestamp data type is 64 bit integer, -// Time format is Nanoseconds. -#if NATIVE_INT64 - typedef long long int ASIOTimeStamp ; -#else - typedef struct ASIOTimeStamp { - unsigned long hi; - unsigned long lo; - } ASIOTimeStamp; -#endif - -// Samplerates are expressed in IEEE 754 64 bit double float, -// native format as host computer -#if IEEE754_64FLOAT - typedef double ASIOSampleRate; -#else - typedef struct ASIOSampleRate { - char ieee[8]; - } ASIOSampleRate; -#endif - -// Boolean values are expressed as long -typedef long ASIOBool; -enum { - ASIOFalse = 0, - ASIOTrue = 1 -}; - -// Sample Types are expressed as long -typedef long ASIOSampleType; -enum { - ASIOSTInt16MSB = 0, - ASIOSTInt24MSB = 1, // used for 20 bits as well - ASIOSTInt32MSB = 2, - ASIOSTFloat32MSB = 3, // IEEE 754 32 bit float - ASIOSTFloat64MSB = 4, // IEEE 754 64 bit double float - - // these are used for 32 bit data buffer, with different alignment of the data inside - // 32 bit PCI bus systems can be more easily used with these - ASIOSTInt32MSB16 = 8, // 32 bit data with 16 bit alignment - ASIOSTInt32MSB18 = 9, // 32 bit data with 18 bit alignment - ASIOSTInt32MSB20 = 10, // 32 bit data with 20 bit alignment - ASIOSTInt32MSB24 = 11, // 32 bit data with 24 bit alignment - - ASIOSTInt16LSB = 16, - ASIOSTInt24LSB = 17, // used for 20 bits as well - ASIOSTInt32LSB = 18, - ASIOSTFloat32LSB = 19, // IEEE 754 32 bit float, as found on Intel x86 architecture - ASIOSTFloat64LSB = 20, // IEEE 754 64 bit double float, as found on Intel x86 architecture - - // these are used for 32 bit data buffer, with different alignment of the data inside - // 32 bit PCI bus systems can more easily used with these - ASIOSTInt32LSB16 = 24, // 32 bit data with 18 bit alignment - ASIOSTInt32LSB18 = 25, // 32 bit data with 18 bit alignment - ASIOSTInt32LSB20 = 26, // 32 bit data with 20 bit alignment - ASIOSTInt32LSB24 = 27, // 32 bit data with 24 bit alignment - - // ASIO DSD format. - ASIOSTDSDInt8LSB1 = 32, // DSD 1 bit data, 8 samples per byte. First sample in Least significant bit. - ASIOSTDSDInt8MSB1 = 33, // DSD 1 bit data, 8 samples per byte. First sample in Most significant bit. - ASIOSTDSDInt8NER8 = 40, // DSD 8 bit data, 1 sample per byte. No Endianness required. - - ASIOSTLastEntry -}; - -/*----------------------------------------------------------------------------- -// DSD operation and buffer layout -// Definition by Steinberg/Sony Oxford. -// -// We have tried to treat DSD as PCM and so keep a consistant structure across -// the ASIO interface. -// -// DSD's sample rate is normally referenced as a multiple of 44.1Khz, so -// the standard sample rate is refered to as 64Fs (or 2.8224Mhz). We looked -// at making a special case for DSD and adding a field to the ASIOFuture that -// would allow the user to select the Over Sampleing Rate (OSR) as a seperate -// entity but decided in the end just to treat it as a simple value of -// 2.8224Mhz and use the standard interface to set it. -// -// The second problem was the "word" size, in PCM the word size is always a -// greater than or equal to 8 bits (a byte). This makes life easy as we can -// then pack the samples into the "natural" size for the machine. -// In DSD the "word" size is 1 bit. This is not a major problem and can easily -// be dealt with if we ensure that we always deal with a multiple of 8 samples. -// -// DSD brings with it another twist to the Endianness religion. How are the -// samples packed into the byte. It would be nice to just say the most significant -// bit is always the first sample, however there would then be a performance hit -// on little endian machines. Looking at how some of the processing goes... -// Little endian machines like the first sample to be in the Least Significant Bit, -// this is because when you write it to memory the data is in the correct format -// to be shifted in and out of the words. -// Big endian machine prefer the first sample to be in the Most Significant Bit, -// again for the same reasion. -// -// And just when things were looking really muddy there is a proposed extension to -// DSD that uses 8 bit word sizes. It does not care what endianness you use. -// -// Switching the driver between DSD and PCM mode -// ASIOFuture allows for extending the ASIO API quite transparently. -// See kAsioSetIoFormat, kAsioGetIoFormat, kAsioCanDoIoFormat -// -//-----------------------------------------------------------------------------*/ - - -//- - - - - - - - - - - - - - - - - - - - - - - - - -// Error codes -//- - - - - - - - - - - - - - - - - - - - - - - - - - -typedef long ASIOError; -enum { - ASE_OK = 0, // This value will be returned whenever the call succeeded - ASE_SUCCESS = 0x3f4847a0, // unique success return value for ASIOFuture calls - ASE_NotPresent = -1000, // hardware input or output is not present or available - ASE_HWMalfunction, // hardware is malfunctioning (can be returned by any ASIO function) - ASE_InvalidParameter, // input parameter invalid - ASE_InvalidMode, // hardware is in a bad mode or used in a bad mode - ASE_SPNotAdvancing, // hardware is not running when sample position is inquired - ASE_NoClock, // sample clock or rate cannot be determined or is not present - ASE_NoMemory // not enough memory for completing the request -}; - -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- - -//- - - - - - - - - - - - - - - - - - - - - - - - - -// Time Info support -//- - - - - - - - - - - - - - - - - - - - - - - - - - -typedef struct ASIOTimeCode -{ - double speed; // speed relation (fraction of nominal speed) - // optional; set to 0. or 1. if not supported - ASIOSamples timeCodeSamples; // time in samples - unsigned long flags; // some information flags (see below) - char future[64]; -} ASIOTimeCode; - -typedef enum ASIOTimeCodeFlags -{ - kTcValid = 1, - kTcRunning = 1 << 1, - kTcReverse = 1 << 2, - kTcOnspeed = 1 << 3, - kTcStill = 1 << 4, - - kTcSpeedValid = 1 << 8 -} ASIOTimeCodeFlags; - -typedef struct AsioTimeInfo -{ - double speed; // absolute speed (1. = nominal) - ASIOTimeStamp systemTime; // system time related to samplePosition, in nanoseconds - // on mac, must be derived from Microseconds() (not UpTime()!) - // on windows, must be derived from timeGetTime() - ASIOSamples samplePosition; - ASIOSampleRate sampleRate; // current rate - unsigned long flags; // (see below) - char reserved[12]; -} AsioTimeInfo; - -typedef enum AsioTimeInfoFlags -{ - kSystemTimeValid = 1, // must always be valid - kSamplePositionValid = 1 << 1, // must always be valid - kSampleRateValid = 1 << 2, - kSpeedValid = 1 << 3, - - kSampleRateChanged = 1 << 4, - kClockSourceChanged = 1 << 5 -} AsioTimeInfoFlags; - -typedef struct ASIOTime // both input/output -{ - long reserved[4]; // must be 0 - struct AsioTimeInfo timeInfo; // required - struct ASIOTimeCode timeCode; // optional, evaluated if (timeCode.flags & kTcValid) -} ASIOTime; - -/* - -using time info: -it is recommended to use the new method with time info even if the asio -device does not support timecode; continuous calls to ASIOGetSamplePosition -and ASIOGetSampleRate are avoided, and there is a more defined relationship -between callback time and the time info. - -see the example below. -to initiate time info mode, after you have received the callbacks pointer in -ASIOCreateBuffers, you will call the asioMessage callback with kAsioSupportsTimeInfo -as the argument. if this returns 1, host has accepted time info mode. -now host expects the new callback bufferSwitchTimeInfo to be used instead -of the old bufferSwitch method. the ASIOTime structure is assumed to be valid -and accessible until the callback returns. - -using time code: -if the device supports reading time code, it will call host's asioMessage callback -with kAsioSupportsTimeCode as the selector. it may then fill the according -fields and set the kTcValid flag. -host will call the future method with the kAsioEnableTimeCodeRead selector when -it wants to enable or disable tc reading by the device. you should also support -the kAsioCanTimeInfo and kAsioCanTimeCode selectors in ASIOFuture (see example). - -note: -the AsioTimeInfo/ASIOTimeCode pair is supposed to work in both directions. -as a matter of convention, the relationship between the sample -position counter and the time code at buffer switch time is -(ignoring offset between tc and sample pos when tc is running): - -on input: sample 0 -> input buffer sample 0 -> time code 0 -on output: sample 0 -> output buffer sample 0 -> time code 0 - -this means that for 'real' calculations, one has to take into account -the according latencies. - -example: - -ASIOTime asioTime; - -in createBuffers() -{ - memset(&asioTime, 0, sizeof(ASIOTime)); - AsioTimeInfo* ti = &asioTime.timeInfo; - ti->sampleRate = theSampleRate; - ASIOTimeCode* tc = &asioTime.timeCode; - tc->speed = 1.; - timeInfoMode = false; - canTimeCode = false; - if(callbacks->asioMessage(kAsioSupportsTimeInfo, 0, 0, 0) == 1) - { - timeInfoMode = true; -#if kCanTimeCode - if(callbacks->asioMessage(kAsioSupportsTimeCode, 0, 0, 0) == 1) - canTimeCode = true; -#endif - } -} - -void switchBuffers(long doubleBufferIndex, bool processNow) -{ - if(timeInfoMode) - { - AsioTimeInfo* ti = &asioTime.timeInfo; - ti->flags = kSystemTimeValid | kSamplePositionValid | kSampleRateValid; - ti->systemTime = theNanoSeconds; - ti->samplePosition = theSamplePosition; - if(ti->sampleRate != theSampleRate) - ti->flags |= kSampleRateChanged; - ti->sampleRate = theSampleRate; - -#if kCanTimeCode - if(canTimeCode && timeCodeEnabled) - { - ASIOTimeCode* tc = &asioTime.timeCode; - tc->timeCodeSamples = tcSamples; // tc in samples - tc->flags = kTcValid | kTcRunning | kTcOnspeed; // if so... - } - ASIOTime* bb = callbacks->bufferSwitchTimeInfo(&asioTime, doubleBufferIndex, processNow ? ASIOTrue : ASIOFalse); -#else - callbacks->bufferSwitchTimeInfo(&asioTime, doubleBufferIndex, processNow ? ASIOTrue : ASIOFalse); -#endif - } - else - callbacks->bufferSwitch(doubleBufferIndex, ASIOFalse); -} - -ASIOError ASIOFuture(long selector, void *params) -{ - switch(selector) - { - case kAsioEnableTimeCodeRead: - timeCodeEnabled = true; - return ASE_SUCCESS; - case kAsioDisableTimeCodeRead: - timeCodeEnabled = false; - return ASE_SUCCESS; - case kAsioCanTimeInfo: - return ASE_SUCCESS; - #if kCanTimeCode - case kAsioCanTimeCode: - return ASE_SUCCESS; - #endif - } - return ASE_NotPresent; -}; - -*/ - -//- - - - - - - - - - - - - - - - - - - - - - - - - -// application's audio stream handler callbacks -//- - - - - - - - - - - - - - - - - - - - - - - - - - -typedef struct ASIOCallbacks -{ - void (*bufferSwitch) (long doubleBufferIndex, ASIOBool directProcess); - // bufferSwitch indicates that both input and output are to be processed. - // the current buffer half index (0 for A, 1 for B) determines - // - the output buffer that the host should start to fill. the other buffer - // will be passed to output hardware regardless of whether it got filled - // in time or not. - // - the input buffer that is now filled with incoming data. Note that - // because of the synchronicity of i/o, the input always has at - // least one buffer latency in relation to the output. - // directProcess suggests to the host whether it should immedeately - // start processing (directProcess == ASIOTrue), or whether its process - // should be deferred because the call comes from a very low level - // (for instance, a high level priority interrupt), and direct processing - // would cause timing instabilities for the rest of the system. If in doubt, - // directProcess should be set to ASIOFalse. - // Note: bufferSwitch may be called at interrupt time for highest efficiency. - - void (*sampleRateDidChange) (ASIOSampleRate sRate); - // gets called when the AudioStreamIO detects a sample rate change - // If sample rate is unknown, 0 is passed (for instance, clock loss - // when externally synchronized). - - long (*asioMessage) (long selector, long value, void* message, double* opt); - // generic callback for various purposes, see selectors below. - // note this is only present if the asio version is 2 or higher - - ASIOTime* (*bufferSwitchTimeInfo) (ASIOTime* params, long doubleBufferIndex, ASIOBool directProcess); - // new callback with time info. makes ASIOGetSamplePosition() and various - // calls to ASIOGetSampleRate obsolete, - // and allows for timecode sync etc. to be preferred; will be used if - // the driver calls asioMessage with selector kAsioSupportsTimeInfo. -} ASIOCallbacks; - -// asioMessage selectors -enum -{ - kAsioSelectorSupported = 1, // selector in , returns 1L if supported, - // 0 otherwise - kAsioEngineVersion, // returns engine (host) asio implementation version, - // 2 or higher - kAsioResetRequest, // request driver reset. if accepted, this - // will close the driver (ASIO_Exit() ) and - // re-open it again (ASIO_Init() etc). some - // drivers need to reconfigure for instance - // when the sample rate changes, or some basic - // changes have been made in ASIO_ControlPanel(). - // returns 1L; note the request is merely passed - // to the application, there is no way to determine - // if it gets accepted at this time (but it usually - // will be). - kAsioBufferSizeChange, // not yet supported, will currently always return 0L. - // for now, use kAsioResetRequest instead. - // once implemented, the new buffer size is expected - // in , and on success returns 1L - kAsioResyncRequest, // the driver went out of sync, such that - // the timestamp is no longer valid. this - // is a request to re-start the engine and - // slave devices (sequencer). returns 1 for ok, - // 0 if not supported. - kAsioLatenciesChanged, // the drivers latencies have changed. The engine - // will refetch the latencies. - kAsioSupportsTimeInfo, // if host returns true here, it will expect the - // callback bufferSwitchTimeInfo to be called instead - // of bufferSwitch - kAsioSupportsTimeCode, // - kAsioMMCCommand, // unused - value: number of commands, message points to mmc commands - kAsioSupportsInputMonitor, // kAsioSupportsXXX return 1 if host supports this - kAsioSupportsInputGain, // unused and undefined - kAsioSupportsInputMeter, // unused and undefined - kAsioSupportsOutputGain, // unused and undefined - kAsioSupportsOutputMeter, // unused and undefined - kAsioOverload, // driver detected an overload - - kAsioNumMessageSelectors -}; - -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- - -//- - - - - - - - - - - - - - - - - - - - - - - - - -// (De-)Construction -//- - - - - - - - - - - - - - - - - - - - - - - - - - -typedef struct ASIODriverInfo -{ - long asioVersion; // currently, 2 - long driverVersion; // driver specific - char name[32]; - char errorMessage[124]; - void *sysRef; // on input: system reference - // (Windows: application main window handle, Mac & SGI: 0) -} ASIODriverInfo; - -ASIOError ASIOInit(ASIODriverInfo *info); -/* Purpose: - Initialize the AudioStreamIO. - Parameter: - info: pointer to an ASIODriver structure: - - asioVersion: - - on input, the host version. *** Note *** this is 0 for earlier asio - implementations, and the asioMessage callback is implemeted - only if asioVersion is 2 or greater. sorry but due to a design fault - the driver doesn't have access to the host version in ASIOInit :-( - added selector for host (engine) version in the asioMessage callback - so we're ok from now on. - - on return, asio implementation version. - older versions are 1 - if you support this version (namely, ASIO_outputReady() ) - this should be 2 or higher. also see the note in - ASIO_getTimeStamp() ! - - version: on return, the driver version (format is driver specific) - - name: on return, a null-terminated string containing the driver's name - - error message: on return, should contain a user message describing - the type of error that occured during ASIOInit(), if any. - - sysRef: platform specific - Returns: - If neither input nor output is present ASE_NotPresent - will be returned. - ASE_NoMemory, ASE_HWMalfunction are other possible error conditions -*/ - -ASIOError ASIOExit(void); -/* Purpose: - Terminates the AudioStreamIO. - Parameter: - None. - Returns: - If neither input nor output is present ASE_NotPresent - will be returned. - Notes: this implies ASIOStop() and ASIODisposeBuffers(), - meaning that no host callbacks must be accessed after ASIOExit(). -*/ - -//- - - - - - - - - - - - - - - - - - - - - - - - - -// Start/Stop -//- - - - - - - - - - - - - - - - - - - - - - - - - - -ASIOError ASIOStart(void); -/* Purpose: - Start input and output processing synchronously. - This will - - reset the sample counter to zero - - start the hardware (both input and output) - The first call to the hosts' bufferSwitch(index == 0) then tells - the host to read from input buffer A (index 0), and start - processing to output buffer A while output buffer B (which - has been filled by the host prior to calling ASIOStart()) - is possibly sounding (see also ASIOGetLatencies()) - Parameter: - None. - Returns: - If neither input nor output is present, ASE_NotPresent - will be returned. - If the hardware fails to start, ASE_HWMalfunction will be returned. - Notes: - There is no restriction on the time that ASIOStart() takes - to perform (that is, it is not considered a realtime trigger). -*/ - -ASIOError ASIOStop(void); -/* Purpose: - Stops input and output processing altogether. - Parameter: - None. - Returns: - If neither input nor output is present ASE_NotPresent - will be returned. - Notes: - On return from ASIOStop(), the driver must in no - case call the hosts' bufferSwitch() routine. -*/ - -//- - - - - - - - - - - - - - - - - - - - - - - - - -// Inquiry methods and sample rate -//- - - - - - - - - - - - - - - - - - - - - - - - - - -ASIOError ASIOGetChannels(long *numInputChannels, long *numOutputChannels); -/* Purpose: - Returns number of individual input/output channels. - Parameter: - numInputChannels will hold the number of available input channels - numOutputChannels will hold the number of available output channels - Returns: - If no input/output is present ASE_NotPresent will be returned. - If only inputs, or only outputs are available, the according - other parameter will be zero, and ASE_OK is returned. -*/ - -ASIOError ASIOGetLatencies(long *inputLatency, long *outputLatency); -/* Purpose: - Returns the input and output latencies. This includes - device specific delays, like FIFOs etc. - Parameter: - inputLatency will hold the 'age' of the first sample frame - in the input buffer when the hosts reads it in bufferSwitch() - (this is theoretical, meaning it does not include the overhead - and delay between the actual physical switch, and the time - when bufferSitch() enters). - This will usually be the size of one block in sample frames, plus - device specific latencies. - - outputLatency will specify the time between the buffer switch, - and the time when the next play buffer will start to sound. - The next play buffer is defined as the one the host starts - processing after (or at) bufferSwitch(), indicated by the - index parameter (0 for buffer A, 1 for buffer B). - It will usually be either one block, if the host writes directly - to a dma buffer, or two or more blocks if the buffer is 'latched' by - the driver. As an example, on ASIOStart(), the host will have filled - the play buffer at index 1 already; when it gets the callback (with - the parameter index == 0), this tells it to read from the input - buffer 0, and start to fill the play buffer 0 (assuming that now - play buffer 1 is already sounding). In this case, the output - latency is one block. If the driver decides to copy buffer 1 - at that time, and pass it to the hardware at the next slot (which - is most commonly done, but should be avoided), the output latency - becomes two blocks instead, resulting in a total i/o latency of at least - 3 blocks. As memory access is the main bottleneck in native dsp processing, - and to acheive less latency, it is highly recommended to try to avoid - copying (this is also why the driver is the owner of the buffers). To - summarize, the minimum i/o latency can be acheived if the input buffer - is processed by the host into the output buffer which will physically - start to sound on the next time slice. Also note that the host expects - the bufferSwitch() callback to be accessed for each time slice in order - to retain sync, possibly recursively; if it fails to process a block in - time, it will suspend its operation for some time in order to recover. - Returns: - If no input/output is present ASE_NotPresent will be returned. -*/ - -ASIOError ASIOGetBufferSize(long *minSize, long *maxSize, long *preferredSize, long *granularity); -/* Purpose: - Returns min, max, and preferred buffer sizes for input/output - Parameter: - minSize will hold the minimum buffer size - maxSize will hold the maxium possible buffer size - preferredSize will hold the preferred buffer size (a size which - best fits performance and hardware requirements) - granularity will hold the granularity at which buffer sizes - may differ. Usually, the buffer size will be a power of 2; - in this case, granularity will hold -1 on return, signalling - possible buffer sizes starting from minSize, increased in - powers of 2 up to maxSize. - Returns: - If no input/output is present ASE_NotPresent will be returned. - Notes: - When minimum and maximum buffer size are equal, - the preferred buffer size has to be the same value as well; granularity - should be 0 in this case. -*/ - -ASIOError ASIOCanSampleRate(ASIOSampleRate sampleRate); -/* Purpose: - Inquires the hardware for the available sample rates. - Parameter: - sampleRate is the rate in question. - Returns: - If the inquired sample rate is not supported, ASE_NoClock will be returned. - If no input/output is present ASE_NotPresent will be returned. -*/ -ASIOError ASIOGetSampleRate(ASIOSampleRate *currentRate); -/* Purpose: - Get the current sample Rate. - Parameter: - currentRate will hold the current sample rate on return. - Returns: - If sample rate is unknown, sampleRate will be 0 and ASE_NoClock will be returned. - If no input/output is present ASE_NotPresent will be returned. - Notes: -*/ - -ASIOError ASIOSetSampleRate(ASIOSampleRate sampleRate); -/* Purpose: - Set the hardware to the requested sample Rate. If sampleRate == 0, - enable external sync. - Parameter: - sampleRate: on input, the requested rate - Returns: - If sampleRate is unknown ASE_NoClock will be returned. - If the current clock is external, and sampleRate is != 0, - ASE_InvalidMode will be returned - If no input/output is present ASE_NotPresent will be returned. - Notes: -*/ - -typedef struct ASIOClockSource -{ - long index; // as used for ASIOSetClockSource() - long associatedChannel; // for instance, S/PDIF or AES/EBU - long associatedGroup; // see channel groups (ASIOGetChannelInfo()) - ASIOBool isCurrentSource; // ASIOTrue if this is the current clock source - char name[32]; // for user selection -} ASIOClockSource; - -ASIOError ASIOGetClockSources(ASIOClockSource *clocks, long *numSources); -/* Purpose: - Get the available external audio clock sources - Parameter: - clocks points to an array of ASIOClockSource structures: - - index: this is used to identify the clock source - when ASIOSetClockSource() is accessed, should be - an index counting from zero - - associatedInputChannel: the first channel of an associated - input group, if any. - - associatedGroup: the group index of that channel. - groups of channels are defined to seperate for - instance analog, S/PDIF, AES/EBU, ADAT connectors etc, - when present simultaniously. Note that associated channel - is enumerated according to numInputs/numOutputs, means it - is independant from a group (see also ASIOGetChannelInfo()) - inputs are associated to a clock if the physical connection - transfers both data and clock (like S/PDIF, AES/EBU, or - ADAT inputs). if there is no input channel associated with - the clock source (like Word Clock, or internal oscillator), both - associatedChannel and associatedGroup should be set to -1. - - isCurrentSource: on exit, ASIOTrue if this is the current clock - source, ASIOFalse else - - name: a null-terminated string for user selection of the available sources. - numSources: - on input: the number of allocated array members - on output: the number of available clock sources, at least - 1 (internal clock generator). - Returns: - If no input/output is present ASE_NotPresent will be returned. - Notes: -*/ - -ASIOError ASIOSetClockSource(long index); -/* Purpose: - Set the audio clock source - Parameter: - index as obtained from an inquiry to ASIOGetClockSources() - Returns: - If no input/output is present ASE_NotPresent will be returned. - If the clock can not be selected because an input channel which - carries the current clock source is active, ASE_InvalidMode - *may* be returned (this depends on the properties of the driver - and/or hardware). - Notes: - Should *not* return ASE_NoClock if there is no clock signal present - at the selected source; this will be inquired via ASIOGetSampleRate(). - It should call the host callback procedure sampleRateHasChanged(), - if the switch causes a sample rate change, or if no external clock - is present at the selected source. -*/ - -ASIOError ASIOGetSamplePosition (ASIOSamples *sPos, ASIOTimeStamp *tStamp); -/* Purpose: - Inquires the sample position/time stamp pair. - Parameter: - sPos will hold the sample position on return. The sample - position is reset to zero when ASIOStart() gets called. - tStamp will hold the system time when the sample position - was latched. - Returns: - If no input/output is present, ASE_NotPresent will be returned. - If there is no clock, ASE_SPNotAdvancing will be returned. - Notes: - - in order to be able to synchronise properly, - the sample position / time stamp pair must refer to the current block, - that is, the engine will call ASIOGetSamplePosition() in its bufferSwitch() - callback and expect the time for the current block. thus, when requested - in the very first bufferSwitch after ASIO_Start(), the sample position - should be zero, and the time stamp should refer to the very time where - the stream was started. it also means that the sample position must be - block aligned. the driver must ensure proper interpolation if the system - time can not be determined for the block position. the driver is responsible - for precise time stamps as it usually has most direct access to lower - level resources. proper behaviour of ASIO_GetSamplePosition() and ASIO_GetLatencies() - are essential for precise media synchronization! -*/ - -typedef struct ASIOChannelInfo -{ - long channel; // on input, channel index - ASIOBool isInput; // on input - ASIOBool isActive; // on exit - long channelGroup; // dto - ASIOSampleType type; // dto - char name[32]; // dto -} ASIOChannelInfo; - -ASIOError ASIOGetChannelInfo(ASIOChannelInfo *info); -/* Purpose: - retreive information about the nature of a channel - Parameter: - info: pointer to a ASIOChannelInfo structure with - - channel: on input, the channel index of the channel in question. - - isInput: on input, ASIOTrue if info for an input channel is - requested, else output - - channelGroup: on return, the channel group that the channel - belongs to. For drivers which support different types of - channels, like analog, S/PDIF, AES/EBU, ADAT etc interfaces, - there should be a reasonable grouping of these types. Groups - are always independant form a channel index, that is, a channel - index always counts from 0 to numInputs/numOutputs regardless - of the group it may belong to. - There will always be at least one group (group 0). Please - also note that by default, the host may decide to activate - channels 0 and 1; thus, these should belong to the most - useful type (analog i/o, if present). - - type: on return, contains the sample type of the channel - - isActive: on return, ASIOTrue if channel is active as it was - installed by ASIOCreateBuffers(), ASIOFalse else - - name: describing the type of channel in question. Used to allow - for user selection, and enabling of specific channels. examples: - "Analog In", "SPDIF Out" etc - Returns: - If no input/output is present ASE_NotPresent will be returned. - Notes: - If possible, the string should be organised such that the first - characters are most significantly describing the nature of the - port, to allow for identification even if the view showing the - port name is too small to display more than 8 characters, for - instance. -*/ - -//- - - - - - - - - - - - - - - - - - - - - - - - - -// Buffer preparation -//- - - - - - - - - - - - - - - - - - - - - - - - - - -typedef struct ASIOBufferInfo -{ - ASIOBool isInput; // on input: ASIOTrue: input, else output - long channelNum; // on input: channel index - void *buffers[2]; // on output: double buffer addresses -} ASIOBufferInfo; - -ASIOError ASIOCreateBuffers(ASIOBufferInfo *bufferInfos, long numChannels, - long bufferSize, ASIOCallbacks *callbacks); - -/* Purpose: - Allocates input/output buffers for all input and output channels to be activated. - Parameter: - bufferInfos is a pointer to an array of ASIOBufferInfo structures: - - isInput: on input, ASIOTrue if the buffer is to be allocated - for an input, output buffer else - - channelNum: on input, the index of the channel in question - (counting from 0) - - buffers: on exit, 2 pointers to the halves of the channels' double-buffer. - the size of the buffer(s) of course depend on both the ASIOSampleType - as obtained from ASIOGetChannelInfo(), and bufferSize - numChannels is the sum of all input and output channels to be created; - thus bufferInfos is a pointer to an array of numChannels ASIOBufferInfo - structures. - bufferSize selects one of the possible buffer sizes as obtained from - ASIOGetBufferSizes(). - callbacks is a pointer to an ASIOCallbacks structure. - Returns: - If not enough memory is available ASE_NoMemory will be returned. - If no input/output is present ASE_NotPresent will be returned. - If bufferSize is not supported, or one or more of the bufferInfos elements - contain invalid settings, ASE_InvalidMode will be returned. - Notes: - If individual channel selection is not possible but requested, - the driver has to handle this. namely, bufferSwitch() will only - have filled buffers of enabled outputs. If possible, processing - and buss activities overhead should be avoided for channels which - were not enabled here. -*/ - -ASIOError ASIODisposeBuffers(void); -/* Purpose: - Releases all buffers for the device. - Parameter: - None. - Returns: - If no buffer were ever prepared, ASE_InvalidMode will be returned. - If no input/output is present ASE_NotPresent will be returned. - Notes: - This implies ASIOStop(). -*/ - -ASIOError ASIOControlPanel(void); -/* Purpose: - request the driver to start a control panel component - for device specific user settings. This will not be - accessed on some platforms (where the component is accessed - instead). - Parameter: - None. - Returns: - If no panel is available ASE_NotPresent will be returned. - Actually, the return code is ignored. - Notes: - if the user applied settings which require a re-configuration - of parts or all of the enigine and/or driver (such as a change of - the block size), the asioMessage callback can be used (see - ASIO_Callbacks). -*/ - -ASIOError ASIOFuture(long selector, void *params); -/* Purpose: - various - Parameter: - selector: operation Code as to be defined. zero is reserved for - testing purposes. - params: depends on the selector; usually pointer to a structure - for passing and retreiving any type and amount of parameters. - Returns: - the return value is also selector dependant. if the selector - is unknown, ASE_InvalidParameter should be returned to prevent - further calls with this selector. on success, ASE_SUCCESS - must be returned (note: ASE_OK is *not* sufficient!) - Notes: - see selectors defined below. -*/ - -enum -{ - kAsioEnableTimeCodeRead = 1, // no arguments - kAsioDisableTimeCodeRead, // no arguments - kAsioSetInputMonitor, // ASIOInputMonitor* in params - kAsioTransport, // ASIOTransportParameters* in params - kAsioSetInputGain, // ASIOChannelControls* in params, apply gain - kAsioGetInputMeter, // ASIOChannelControls* in params, fill meter - kAsioSetOutputGain, // ASIOChannelControls* in params, apply gain - kAsioGetOutputMeter, // ASIOChannelControls* in params, fill meter - kAsioCanInputMonitor, // no arguments for kAsioCanXXX selectors - kAsioCanTimeInfo, - kAsioCanTimeCode, - kAsioCanTransport, - kAsioCanInputGain, - kAsioCanInputMeter, - kAsioCanOutputGain, - kAsioCanOutputMeter, - - // DSD support - // The following extensions are required to allow switching - // and control of the DSD subsystem. - kAsioSetIoFormat = 0x23111961, /* ASIOIoFormat * in params. */ - kAsioGetIoFormat = 0x23111983, /* ASIOIoFormat * in params. */ - kAsioCanDoIoFormat = 0x23112004, /* ASIOIoFormat * in params. */ -}; - -typedef struct ASIOInputMonitor -{ - long input; // this input was set to monitor (or off), -1: all - long output; // suggested output for monitoring the input (if so) - long gain; // suggested gain, ranging 0 - 0x7fffffffL (-inf to +12 dB) - ASIOBool state; // ASIOTrue => on, ASIOFalse => off - long pan; // suggested pan, 0 => all left, 0x7fffffff => right -} ASIOInputMonitor; - -typedef struct ASIOChannelControls -{ - long channel; // on input, channel index - ASIOBool isInput; // on input - long gain; // on input, ranges 0 thru 0x7fffffff - long meter; // on return, ranges 0 thru 0x7fffffff - char future[32]; -} ASIOChannelControls; - -typedef struct ASIOTransportParameters -{ - long command; // see enum below - ASIOSamples samplePosition; - long track; - long trackSwitches[16]; // 512 tracks on/off - char future[64]; -} ASIOTransportParameters; - -enum -{ - kTransStart = 1, - kTransStop, - kTransLocate, // to samplePosition - kTransPunchIn, - kTransPunchOut, - kTransArmOn, // track - kTransArmOff, // track - kTransMonitorOn, // track - kTransMonitorOff, // track - kTransArm, // trackSwitches - kTransMonitor // trackSwitches -}; - -/* -// DSD support -// Some notes on how to use ASIOIoFormatType. -// -// The caller will fill the format with the request types. -// If the board can do the request then it will leave the -// values unchanged. If the board does not support the -// request then it will change that entry to Invalid (-1) -// -// So to request DSD then -// -// ASIOIoFormat NeedThis={kASIODSDFormat}; -// -// if(ASE_SUCCESS != ASIOFuture(kAsioSetIoFormat,&NeedThis) ){ -// // If the board did not accept one of the parameters then the -// // whole call will fail and the failing parameter will -// // have had its value changes to -1. -// } -// -// Note: Switching between the formats need to be done before the "prepared" -// state (see ASIO 2 documentation) is entered. -*/ -typedef long int ASIOIoFormatType; -enum ASIOIoFormatType_e -{ - kASIOFormatInvalid = -1, - kASIOPCMFormat = 0, - kASIODSDFormat = 1, -}; - -typedef struct ASIOIoFormat_s -{ - ASIOIoFormatType FormatType; - char future[512-sizeof(ASIOIoFormatType)]; -} ASIOIoFormat; - - -ASIOError ASIOOutputReady(void); -/* Purpose: - this tells the driver that the host has completed processing - the output buffers. if the data format required by the hardware - differs from the supported asio formats, but the hardware - buffers are DMA buffers, the driver will have to convert - the audio stream data; as the bufferSwitch callback is - usually issued at dma block switch time, the driver will - have to convert the *previous* host buffer, which increases - the output latency by one block. - when the host finds out that ASIOOutputReady() returns - true, it will issue this call whenever it completed - output processing. then the driver can convert the - host data directly to the dma buffer to be played next, - reducing output latency by one block. - another way to look at it is, that the buffer switch is called - in order to pass the *input* stream to the host, so that it can - process the input into the output, and the output stream is passed - to the driver when the host has completed its process. - Parameter: - None - Returns: - only if the above mentioned scenario is given, and a reduction - of output latency can be acheived by this mechanism, should - ASE_OK be returned. otherwise (and usually), ASE_NotPresent - should be returned in order to prevent further calls to this - function. note that the host may want to determine if it is - to use this when the system is not yet fully initialized, so - ASE_OK should always be returned if the mechanism makes sense. - Notes: - please remeber to adjust ASIOGetLatencies() according to - whether ASIOOutputReady() was ever called or not, if your - driver supports this scenario. - also note that the engine may fail to call ASIO_OutputReady() - in time in overload cases. as already mentioned, bufferSwitch - should be called for every block regardless of whether a block - could be processed in time. -*/ - -// restore old alignment -#if defined(_MSC_VER) && !defined(__MWERKS__) -#pragma pack(pop) -#elif PRAGMA_ALIGN_SUPPORTED -#pragma options align = reset -#endif - -#endif - diff --git a/source/StkUGens/stk-4.4.4/src/include/asiodrivers.cpp b/source/StkUGens/stk-4.4.4/src/include/asiodrivers.cpp deleted file mode 100644 index 5f56454c20..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/asiodrivers.cpp +++ /dev/null @@ -1,186 +0,0 @@ -#include -#include "asiodrivers.h" - -AsioDrivers* asioDrivers = 0; - -bool loadAsioDriver(char *name); - -bool loadAsioDriver(char *name) -{ - if(!asioDrivers) - asioDrivers = new AsioDrivers(); - if(asioDrivers) - return asioDrivers->loadDriver(name); - return false; -} - -//------------------------------------------------------------------------------------ - -#if MAC - -bool resolveASIO(unsigned long aconnID); - -AsioDrivers::AsioDrivers() : CodeFragments("ASIO Drivers", 'AsDr', 'Asio') -{ - connID = -1; - curIndex = -1; -} - -AsioDrivers::~AsioDrivers() -{ - removeCurrentDriver(); -} - -bool AsioDrivers::getCurrentDriverName(char *name) -{ - if(curIndex >= 0) - return getName(curIndex, name); - return false; -} - -long AsioDrivers::getDriverNames(char **names, long maxDrivers) -{ - for(long i = 0; i < getNumFragments() && i < maxDrivers; i++) - getName(i, names[i]); - return getNumFragments() < maxDrivers ? getNumFragments() : maxDrivers; -} - -bool AsioDrivers::loadDriver(char *name) -{ - char dname[64]; - unsigned long newID; - - for(long i = 0; i < getNumFragments(); i++) - { - if(getName(i, dname) && !strcmp(name, dname)) - { - if(newInstance(i, &newID)) - { - if(resolveASIO(newID)) - { - if(connID != -1) - removeInstance(curIndex, connID); - curIndex = i; - connID = newID; - return true; - } - } - break; - } - } - return false; -} - -void AsioDrivers::removeCurrentDriver() -{ - if(connID != -1) - removeInstance(curIndex, connID); - connID = -1; - curIndex = -1; -} - -//------------------------------------------------------------------------------------ - -#elif WINDOWS - -#include "iasiodrv.h" - -extern IASIO* theAsioDriver; - -AsioDrivers::AsioDrivers() : AsioDriverList() -{ - curIndex = -1; -} - -AsioDrivers::~AsioDrivers() -{ -} - -bool AsioDrivers::getCurrentDriverName(char *name) -{ - if(curIndex >= 0) - return asioGetDriverName(curIndex, name, 32) == 0 ? true : false; - name[0] = 0; - return false; -} - -long AsioDrivers::getDriverNames(char **names, long maxDrivers) -{ - for(long i = 0; i < asioGetNumDev() && i < maxDrivers; i++) - asioGetDriverName(i, names[i], 32); - return asioGetNumDev() < maxDrivers ? asioGetNumDev() : maxDrivers; -} - -bool AsioDrivers::loadDriver(char *name) -{ - char dname[64]; - char curName[64]; - - for(long i = 0; i < asioGetNumDev(); i++) - { - if(!asioGetDriverName(i, dname, 32) && !strcmp(name, dname)) - { - curName[0] = 0; - getCurrentDriverName(curName); // in case we fail... - removeCurrentDriver(); - - if(!asioOpenDriver(i, (void **)&theAsioDriver)) - { - curIndex = i; - return true; - } - else - { - theAsioDriver = 0; - if(curName[0] && strcmp(dname, curName)) - loadDriver(curName); // try restore - } - break; - } - } - return false; -} - -void AsioDrivers::removeCurrentDriver() -{ - if(curIndex != -1) - asioCloseDriver(curIndex); - curIndex = -1; -} - -#elif SGI || BEOS - -#include "asiolist.h" - -AsioDrivers::AsioDrivers() - : AsioDriverList() -{ - curIndex = -1; -} - -AsioDrivers::~AsioDrivers() -{ -} - -bool AsioDrivers::getCurrentDriverName(char *name) -{ - return false; -} - -long AsioDrivers::getDriverNames(char **names, long maxDrivers) -{ - return 0; -} - -bool AsioDrivers::loadDriver(char *name) -{ - return false; -} - -void AsioDrivers::removeCurrentDriver() -{ -} - -#else -#error implement me -#endif diff --git a/source/StkUGens/stk-4.4.4/src/include/asiodrivers.h b/source/StkUGens/stk-4.4.4/src/include/asiodrivers.h deleted file mode 100644 index 2ddf7ad021..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/asiodrivers.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef __AsioDrivers__ -#define __AsioDrivers__ - -#include "ginclude.h" - -#if MAC -#include "CodeFragments.hpp" - -class AsioDrivers : public CodeFragments - -#elif WINDOWS -#include -#include "asiolist.h" - -class AsioDrivers : public AsioDriverList - -#elif SGI || BEOS -#include "asiolist.h" - -class AsioDrivers : public AsioDriverList - -#else -#error implement me -#endif - -{ -public: - AsioDrivers(); - ~AsioDrivers(); - - bool getCurrentDriverName(char *name); - long getDriverNames(char **names, long maxDrivers); - bool loadDriver(char *name); - void removeCurrentDriver(); - long getCurrentDriverIndex() {return curIndex;} -protected: - unsigned long connID; - long curIndex; -}; - -#endif diff --git a/source/StkUGens/stk-4.4.4/src/include/asiodrvr.h b/source/StkUGens/stk-4.4.4/src/include/asiodrvr.h deleted file mode 100644 index 663f75a748..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/asiodrvr.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - Steinberg Audio Stream I/O API - (c) 1996, Steinberg Soft- und Hardware GmbH - charlie (May 1996) - - asiodrvr.h - c++ superclass to implement asio functionality. from this, - you can derive whatever required -*/ - -#ifndef _asiodrvr_ -#define _asiodrvr_ - -// cpu and os system we are running on -#include "asiosys.h" -// basic "C" interface -#include "asio.h" - -class AsioDriver; -extern AsioDriver *getDriver(); // for generic constructor - -#if WINDOWS -#include -#include "combase.h" -#include "iasiodrv.h" -class AsioDriver : public IASIO ,public CUnknown -{ -public: - AsioDriver(LPUNKNOWN pUnk, HRESULT *phr); - - DECLARE_IUNKNOWN - // Factory method - static CUnknown *CreateInstance(LPUNKNOWN pUnk, HRESULT *phr); - // IUnknown - virtual HRESULT STDMETHODCALLTYPE NonDelegatingQueryInterface(REFIID riid,void **ppvObject); - -#else - -class AsioDriver -{ -public: - AsioDriver(); -#endif - virtual ~AsioDriver(); - - virtual ASIOBool init(void* sysRef); - virtual void getDriverName(char *name); // max 32 bytes incl. terminating zero - virtual long getDriverVersion(); - virtual void getErrorMessage(char *string); // max 124 bytes incl. - - virtual ASIOError start(); - virtual ASIOError stop(); - - virtual ASIOError getChannels(long *numInputChannels, long *numOutputChannels); - virtual ASIOError getLatencies(long *inputLatency, long *outputLatency); - virtual ASIOError getBufferSize(long *minSize, long *maxSize, - long *preferredSize, long *granularity); - - virtual ASIOError canSampleRate(ASIOSampleRate sampleRate); - virtual ASIOError getSampleRate(ASIOSampleRate *sampleRate); - virtual ASIOError setSampleRate(ASIOSampleRate sampleRate); - virtual ASIOError getClockSources(ASIOClockSource *clocks, long *numSources); - virtual ASIOError setClockSource(long reference); - - virtual ASIOError getSamplePosition(ASIOSamples *sPos, ASIOTimeStamp *tStamp); - virtual ASIOError getChannelInfo(ASIOChannelInfo *info); - - virtual ASIOError createBuffers(ASIOBufferInfo *bufferInfos, long numChannels, - long bufferSize, ASIOCallbacks *callbacks); - virtual ASIOError disposeBuffers(); - - virtual ASIOError controlPanel(); - virtual ASIOError future(long selector, void *opt); - virtual ASIOError outputReady(); -}; -#endif diff --git a/source/StkUGens/stk-4.4.4/src/include/asiolist.cpp b/source/StkUGens/stk-4.4.4/src/include/asiolist.cpp deleted file mode 100644 index 5a62f5bc0b..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/asiolist.cpp +++ /dev/null @@ -1,268 +0,0 @@ -#include -#include "iasiodrv.h" -#include "asiolist.h" - -#define ASIODRV_DESC "description" -#define INPROC_SERVER "InprocServer32" -#define ASIO_PATH "software\\asio" -#define COM_CLSID "clsid" - -// ****************************************************************** -// Local Functions -// ****************************************************************** -static LONG findDrvPath (char *clsidstr,char *dllpath,int dllpathsize) -{ - HKEY hkEnum,hksub,hkpath; - char databuf[512]; - LONG cr,rc = -1; - DWORD datatype,datasize; - DWORD index; - OFSTRUCT ofs; - HFILE hfile; - BOOL found = FALSE; - - CharLowerBuff(clsidstr,strlen(clsidstr)); - if ((cr = RegOpenKey(HKEY_CLASSES_ROOT,COM_CLSID,&hkEnum)) == ERROR_SUCCESS) { - - index = 0; - while (cr == ERROR_SUCCESS && !found) { - cr = RegEnumKey(hkEnum,index++,(LPTSTR)databuf,512); - if (cr == ERROR_SUCCESS) { - CharLowerBuff(databuf,strlen(databuf)); - if (!(strcmp(databuf,clsidstr))) { - if ((cr = RegOpenKeyEx(hkEnum,(LPCTSTR)databuf,0,KEY_READ,&hksub)) == ERROR_SUCCESS) { - if ((cr = RegOpenKeyEx(hksub,(LPCTSTR)INPROC_SERVER,0,KEY_READ,&hkpath)) == ERROR_SUCCESS) { - datatype = REG_SZ; datasize = (DWORD)dllpathsize; - cr = RegQueryValueEx(hkpath,0,0,&datatype,(LPBYTE)dllpath,&datasize); - if (cr == ERROR_SUCCESS) { - memset(&ofs,0,sizeof(OFSTRUCT)); - ofs.cBytes = sizeof(OFSTRUCT); - hfile = OpenFile(dllpath,&ofs,OF_EXIST); - if (hfile) rc = 0; - } - RegCloseKey(hkpath); - } - RegCloseKey(hksub); - } - found = TRUE; // break out - } - } - } - RegCloseKey(hkEnum); - } - return rc; -} - - -static LPASIODRVSTRUCT newDrvStruct (HKEY hkey,char *keyname,int drvID,LPASIODRVSTRUCT lpdrv) -{ - HKEY hksub; - char databuf[256]; - char dllpath[MAXPATHLEN]; - WORD wData[100]; - CLSID clsid; - DWORD datatype,datasize; - LONG cr,rc; - - if (!lpdrv) { - if ((cr = RegOpenKeyEx(hkey,(LPCTSTR)keyname,0,KEY_READ,&hksub)) == ERROR_SUCCESS) { - - datatype = REG_SZ; datasize = 256; - cr = RegQueryValueEx(hksub,COM_CLSID,0,&datatype,(LPBYTE)databuf,&datasize); - if (cr == ERROR_SUCCESS) { - rc = findDrvPath (databuf,dllpath,MAXPATHLEN); - if (rc == 0) { - lpdrv = new ASIODRVSTRUCT[1]; - if (lpdrv) { - memset(lpdrv,0,sizeof(ASIODRVSTRUCT)); - lpdrv->drvID = drvID; - MultiByteToWideChar(CP_ACP,0,(LPCSTR)databuf,-1,(LPWSTR)wData,100); - if ((cr = CLSIDFromString((LPOLESTR)wData,(LPCLSID)&clsid)) == S_OK) { - memcpy(&lpdrv->clsid,&clsid,sizeof(CLSID)); - } - - datatype = REG_SZ; datasize = 256; - cr = RegQueryValueEx(hksub,ASIODRV_DESC,0,&datatype,(LPBYTE)databuf,&datasize); - if (cr == ERROR_SUCCESS) { - strcpy(lpdrv->drvname,databuf); - } - else strcpy(lpdrv->drvname,keyname); - } - } - } - RegCloseKey(hksub); - } - } - else lpdrv->next = newDrvStruct(hkey,keyname,drvID+1,lpdrv->next); - - return lpdrv; -} - -static void deleteDrvStruct (LPASIODRVSTRUCT lpdrv) -{ - IASIO *iasio; - - if (lpdrv != 0) { - deleteDrvStruct(lpdrv->next); - if (lpdrv->asiodrv) { - iasio = (IASIO *)lpdrv->asiodrv; - iasio->Release(); - } - delete lpdrv; - } -} - - -static LPASIODRVSTRUCT getDrvStruct (int drvID,LPASIODRVSTRUCT lpdrv) -{ - while (lpdrv) { - if (lpdrv->drvID == drvID) return lpdrv; - lpdrv = lpdrv->next; - } - return 0; -} -// ****************************************************************** - - -// ****************************************************************** -// AsioDriverList -// ****************************************************************** -AsioDriverList::AsioDriverList () -{ - HKEY hkEnum = 0; - char keyname[MAXDRVNAMELEN]; - LPASIODRVSTRUCT pdl; - LONG cr; - DWORD index = 0; - BOOL fin = FALSE; - - numdrv = 0; - lpdrvlist = 0; - - cr = RegOpenKey(HKEY_LOCAL_MACHINE,ASIO_PATH,&hkEnum); - while (cr == ERROR_SUCCESS) { - if ((cr = RegEnumKey(hkEnum,index++,(LPTSTR)keyname,MAXDRVNAMELEN))== ERROR_SUCCESS) { - lpdrvlist = newDrvStruct (hkEnum,keyname,0,lpdrvlist); - } - else fin = TRUE; - } - if (hkEnum) RegCloseKey(hkEnum); - - pdl = lpdrvlist; - while (pdl) { - numdrv++; - pdl = pdl->next; - } - - if (numdrv) CoInitialize(0); // initialize COM -} - -AsioDriverList::~AsioDriverList () -{ - if (numdrv) { - deleteDrvStruct(lpdrvlist); - CoUninitialize(); - } -} - - -LONG AsioDriverList::asioGetNumDev (VOID) -{ - return (LONG)numdrv; -} - - -LONG AsioDriverList::asioOpenDriver (int drvID,LPVOID *asiodrv) -{ - LPASIODRVSTRUCT lpdrv = 0; - long rc; - - if (!asiodrv) return DRVERR_INVALID_PARAM; - - if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { - if (!lpdrv->asiodrv) { - rc = CoCreateInstance(lpdrv->clsid,0,CLSCTX_INPROC_SERVER,lpdrv->clsid,asiodrv); - if (rc == S_OK) { - lpdrv->asiodrv = *asiodrv; - return 0; - } - // else if (rc == REGDB_E_CLASSNOTREG) - // strcpy (info->messageText, "Driver not registered in the Registration Database!"); - } - else rc = DRVERR_DEVICE_ALREADY_OPEN; - } - else rc = DRVERR_DEVICE_NOT_FOUND; - - return rc; -} - - -LONG AsioDriverList::asioCloseDriver (int drvID) -{ - LPASIODRVSTRUCT lpdrv = 0; - IASIO *iasio; - - if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { - if (lpdrv->asiodrv) { - iasio = (IASIO *)lpdrv->asiodrv; - iasio->Release(); - lpdrv->asiodrv = 0; - } - } - - return 0; -} - -LONG AsioDriverList::asioGetDriverName (int drvID,char *drvname,int drvnamesize) -{ - LPASIODRVSTRUCT lpdrv = 0; - - if (!drvname) return DRVERR_INVALID_PARAM; - - if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { - if (strlen(lpdrv->drvname) < (unsigned int)drvnamesize) { - strcpy(drvname,lpdrv->drvname); - } - else { - memcpy(drvname,lpdrv->drvname,drvnamesize-4); - drvname[drvnamesize-4] = '.'; - drvname[drvnamesize-3] = '.'; - drvname[drvnamesize-2] = '.'; - drvname[drvnamesize-1] = 0; - } - return 0; - } - return DRVERR_DEVICE_NOT_FOUND; -} - -LONG AsioDriverList::asioGetDriverPath (int drvID,char *dllpath,int dllpathsize) -{ - LPASIODRVSTRUCT lpdrv = 0; - - if (!dllpath) return DRVERR_INVALID_PARAM; - - if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { - if (strlen(lpdrv->dllpath) < (unsigned int)dllpathsize) { - strcpy(dllpath,lpdrv->dllpath); - return 0; - } - dllpath[0] = 0; - return DRVERR_INVALID_PARAM; - } - return DRVERR_DEVICE_NOT_FOUND; -} - -LONG AsioDriverList::asioGetDriverCLSID (int drvID,CLSID *clsid) -{ - LPASIODRVSTRUCT lpdrv = 0; - - if (!clsid) return DRVERR_INVALID_PARAM; - - if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { - memcpy(clsid,&lpdrv->clsid,sizeof(CLSID)); - return 0; - } - return DRVERR_DEVICE_NOT_FOUND; -} - - diff --git a/source/StkUGens/stk-4.4.4/src/include/asiolist.h b/source/StkUGens/stk-4.4.4/src/include/asiolist.h deleted file mode 100644 index 01c64f0bb2..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/asiolist.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef __asiolist__ -#define __asiolist__ - -#define DRVERR -5000 -#define DRVERR_INVALID_PARAM DRVERR-1 -#define DRVERR_DEVICE_ALREADY_OPEN DRVERR-2 -#define DRVERR_DEVICE_NOT_FOUND DRVERR-3 - -#define MAXPATHLEN 512 -#define MAXDRVNAMELEN 128 - -struct asiodrvstruct -{ - int drvID; - CLSID clsid; - char dllpath[MAXPATHLEN]; - char drvname[MAXDRVNAMELEN]; - LPVOID asiodrv; - struct asiodrvstruct *next; -}; - -typedef struct asiodrvstruct ASIODRVSTRUCT; -typedef ASIODRVSTRUCT *LPASIODRVSTRUCT; - -class AsioDriverList { -public: - AsioDriverList(); - ~AsioDriverList(); - - LONG asioOpenDriver (int,VOID **); - LONG asioCloseDriver (int); - - // nice to have - LONG asioGetNumDev (VOID); - LONG asioGetDriverName (int,char *,int); - LONG asioGetDriverPath (int,char *,int); - LONG asioGetDriverCLSID (int,CLSID *); - - // or use directly access - LPASIODRVSTRUCT lpdrvlist; - int numdrv; -}; - -typedef class AsioDriverList *LPASIODRIVERLIST; - -#endif diff --git a/source/StkUGens/stk-4.4.4/src/include/asiosys.h b/source/StkUGens/stk-4.4.4/src/include/asiosys.h deleted file mode 100644 index 37f7a48a17..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/asiosys.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef __asiosys__ - #define __asiosys__ - - #ifdef WIN32 - #undef MAC - #define PPC 0 - #define WINDOWS 1 - #define SGI 0 - #define SUN 0 - #define LINUX 0 - #define BEOS 0 - - #define NATIVE_INT64 0 - #define IEEE754_64FLOAT 1 - - #elif BEOS - #define MAC 0 - #define PPC 0 - #define WINDOWS 0 - #define PC 0 - #define SGI 0 - #define SUN 0 - #define LINUX 0 - - #define NATIVE_INT64 0 - #define IEEE754_64FLOAT 1 - - #ifndef DEBUG - #define DEBUG 0 - #if DEBUG - void DEBUGGERMESSAGE(char *string); - #else - #define DEBUGGERMESSAGE(a) - #endif - #endif - - #elif SGI - #define MAC 0 - #define PPC 0 - #define WINDOWS 0 - #define PC 0 - #define SUN 0 - #define LINUX 0 - #define BEOS 0 - - #define NATIVE_INT64 0 - #define IEEE754_64FLOAT 1 - - #ifndef DEBUG - #define DEBUG 0 - #if DEBUG - void DEBUGGERMESSAGE(char *string); - #else - #define DEBUGGERMESSAGE(a) - #endif - #endif - - #else // MAC - - #define MAC 1 - #define PPC 1 - #define WINDOWS 0 - #define PC 0 - #define SGI 0 - #define SUN 0 - #define LINUX 0 - #define BEOS 0 - - #define NATIVE_INT64 0 - #define IEEE754_64FLOAT 1 - - #ifndef DEBUG - #define DEBUG 0 - #if DEBUG - void DEBUGGERMESSAGE(char *string); - #else - #define DEBUGGERMESSAGE(a) - #endif - #endif - #endif - -#endif diff --git a/source/StkUGens/stk-4.4.4/src/include/dsound.h b/source/StkUGens/stk-4.4.4/src/include/dsound.h deleted file mode 100644 index cb19cca822..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/dsound.h +++ /dev/null @@ -1,2369 +0,0 @@ -/*==========================================================================; - * - * Copyright (c) Microsoft Corporation. All rights reserved. - * - * File: dsound.h - * Content: DirectSound include file - * - **************************************************************************/ - -#define COM_NO_WINDOWS_H -#include -#include - -#ifndef DIRECTSOUND_VERSION -#define DIRECTSOUND_VERSION 0x0900 /* Version 9.0 */ -#endif - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#ifndef __DSOUND_INCLUDED__ -#define __DSOUND_INCLUDED__ - -/* Type definitions shared with Direct3D */ - -#ifndef DX_SHARED_DEFINES - -typedef float D3DVALUE, *LPD3DVALUE; - -#ifndef D3DCOLOR_DEFINED -typedef DWORD D3DCOLOR; -#define D3DCOLOR_DEFINED -#endif - -#ifndef LPD3DCOLOR_DEFINED -typedef DWORD *LPD3DCOLOR; -#define LPD3DCOLOR_DEFINED -#endif - -#ifndef D3DVECTOR_DEFINED -typedef struct _D3DVECTOR { - float x; - float y; - float z; -} D3DVECTOR; -#define D3DVECTOR_DEFINED -#endif - -#ifndef LPD3DVECTOR_DEFINED -typedef D3DVECTOR *LPD3DVECTOR; -#define LPD3DVECTOR_DEFINED -#endif - -#define DX_SHARED_DEFINES -#endif // DX_SHARED_DEFINES - -#define _FACDS 0x878 /* DirectSound's facility code */ -#define MAKE_DSHRESULT(code) MAKE_HRESULT(1, _FACDS, code) - -// DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000} -DEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0); - -// DirectSound 8.0 Component GUID {3901CC3F-84B5-4FA4-BA35-AA8172B8A09B} -DEFINE_GUID(CLSID_DirectSound8, 0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b); - -// DirectSound Capture Component GUID {B0210780-89CD-11D0-AF08-00A0C925CD16} -DEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); - -// DirectSound 8.0 Capture Component GUID {E4BCAC13-7F99-4908-9A8E-74E3BF24B6E1} -DEFINE_GUID(CLSID_DirectSoundCapture8, 0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1); - -// DirectSound Full Duplex Component GUID {FEA4300C-7959-4147-B26A-2377B9E7A91D} -DEFINE_GUID(CLSID_DirectSoundFullDuplex, 0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d); - - -// DirectSound default playback device GUID {DEF00000-9C6D-47ED-AAF1-4DDA8F2B5C03} -DEFINE_GUID(DSDEVID_DefaultPlayback, 0xdef00000, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); - -// DirectSound default capture device GUID {DEF00001-9C6D-47ED-AAF1-4DDA8F2B5C03} -DEFINE_GUID(DSDEVID_DefaultCapture, 0xdef00001, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); - -// DirectSound default device for voice playback {DEF00002-9C6D-47ED-AAF1-4DDA8F2B5C03} -DEFINE_GUID(DSDEVID_DefaultVoicePlayback, 0xdef00002, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); - -// DirectSound default device for voice capture {DEF00003-9C6D-47ED-AAF1-4DDA8F2B5C03} -DEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xdef00003, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); - - -// -// Forward declarations for interfaces. -// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined -// - -#ifdef __cplusplus -struct IDirectSound; -struct IDirectSoundBuffer; -struct IDirectSound3DListener; -struct IDirectSound3DBuffer; -struct IDirectSoundCapture; -struct IDirectSoundCaptureBuffer; -struct IDirectSoundNotify; -#endif // __cplusplus - - -// -// DirectSound 8.0 interfaces. -// - -#if DIRECTSOUND_VERSION >= 0x0800 - -#ifdef __cplusplus -struct IDirectSound8; -struct IDirectSoundBuffer8; -struct IDirectSoundCaptureBuffer8; -struct IDirectSoundFXGargle; -struct IDirectSoundFXChorus; -struct IDirectSoundFXFlanger; -struct IDirectSoundFXEcho; -struct IDirectSoundFXDistortion; -struct IDirectSoundFXCompressor; -struct IDirectSoundFXParamEq; -struct IDirectSoundFXWavesReverb; -struct IDirectSoundFXI3DL2Reverb; -struct IDirectSoundCaptureFXAec; -struct IDirectSoundCaptureFXNoiseSuppress; -struct IDirectSoundFullDuplex; -#endif // __cplusplus - -// IDirectSound8, IDirectSoundBuffer8 and IDirectSoundCaptureBuffer8 are the -// only DirectSound 7.0 interfaces with changed functionality in version 8.0. -// The other level 8 interfaces as equivalent to their level 7 counterparts: - -#define IDirectSoundCapture8 IDirectSoundCapture -#define IDirectSound3DListener8 IDirectSound3DListener -#define IDirectSound3DBuffer8 IDirectSound3DBuffer -#define IDirectSoundNotify8 IDirectSoundNotify -#define IDirectSoundFXGargle8 IDirectSoundFXGargle -#define IDirectSoundFXChorus8 IDirectSoundFXChorus -#define IDirectSoundFXFlanger8 IDirectSoundFXFlanger -#define IDirectSoundFXEcho8 IDirectSoundFXEcho -#define IDirectSoundFXDistortion8 IDirectSoundFXDistortion -#define IDirectSoundFXCompressor8 IDirectSoundFXCompressor -#define IDirectSoundFXParamEq8 IDirectSoundFXParamEq -#define IDirectSoundFXWavesReverb8 IDirectSoundFXWavesReverb -#define IDirectSoundFXI3DL2Reverb8 IDirectSoundFXI3DL2Reverb -#define IDirectSoundCaptureFXAec8 IDirectSoundCaptureFXAec -#define IDirectSoundCaptureFXNoiseSuppress8 IDirectSoundCaptureFXNoiseSuppress -#define IDirectSoundFullDuplex8 IDirectSoundFullDuplex - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -typedef struct IDirectSound *LPDIRECTSOUND; -typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER; -typedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER; -typedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER; -typedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE; -typedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER; -typedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY; - - -#if DIRECTSOUND_VERSION >= 0x0800 - -typedef struct IDirectSoundFXGargle *LPDIRECTSOUNDFXGARGLE; -typedef struct IDirectSoundFXChorus *LPDIRECTSOUNDFXCHORUS; -typedef struct IDirectSoundFXFlanger *LPDIRECTSOUNDFXFLANGER; -typedef struct IDirectSoundFXEcho *LPDIRECTSOUNDFXECHO; -typedef struct IDirectSoundFXDistortion *LPDIRECTSOUNDFXDISTORTION; -typedef struct IDirectSoundFXCompressor *LPDIRECTSOUNDFXCOMPRESSOR; -typedef struct IDirectSoundFXParamEq *LPDIRECTSOUNDFXPARAMEQ; -typedef struct IDirectSoundFXWavesReverb *LPDIRECTSOUNDFXWAVESREVERB; -typedef struct IDirectSoundFXI3DL2Reverb *LPDIRECTSOUNDFXI3DL2REVERB; -typedef struct IDirectSoundCaptureFXAec *LPDIRECTSOUNDCAPTUREFXAEC; -typedef struct IDirectSoundCaptureFXNoiseSuppress *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS; -typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX; - -typedef struct IDirectSound8 *LPDIRECTSOUND8; -typedef struct IDirectSoundBuffer8 *LPDIRECTSOUNDBUFFER8; -typedef struct IDirectSound3DListener8 *LPDIRECTSOUND3DLISTENER8; -typedef struct IDirectSound3DBuffer8 *LPDIRECTSOUND3DBUFFER8; -typedef struct IDirectSoundCapture8 *LPDIRECTSOUNDCAPTURE8; -typedef struct IDirectSoundCaptureBuffer8 *LPDIRECTSOUNDCAPTUREBUFFER8; -typedef struct IDirectSoundNotify8 *LPDIRECTSOUNDNOTIFY8; -typedef struct IDirectSoundFXGargle8 *LPDIRECTSOUNDFXGARGLE8; -typedef struct IDirectSoundFXChorus8 *LPDIRECTSOUNDFXCHORUS8; -typedef struct IDirectSoundFXFlanger8 *LPDIRECTSOUNDFXFLANGER8; -typedef struct IDirectSoundFXEcho8 *LPDIRECTSOUNDFXECHO8; -typedef struct IDirectSoundFXDistortion8 *LPDIRECTSOUNDFXDISTORTION8; -typedef struct IDirectSoundFXCompressor8 *LPDIRECTSOUNDFXCOMPRESSOR8; -typedef struct IDirectSoundFXParamEq8 *LPDIRECTSOUNDFXPARAMEQ8; -typedef struct IDirectSoundFXWavesReverb8 *LPDIRECTSOUNDFXWAVESREVERB8; -typedef struct IDirectSoundFXI3DL2Reverb8 *LPDIRECTSOUNDFXI3DL2REVERB8; -typedef struct IDirectSoundCaptureFXAec8 *LPDIRECTSOUNDCAPTUREFXAEC8; -typedef struct IDirectSoundCaptureFXNoiseSuppress8 *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS8; -typedef struct IDirectSoundFullDuplex8 *LPDIRECTSOUNDFULLDUPLEX8; - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// IID definitions for the unchanged DirectSound 8.0 interfaces -// - -#if DIRECTSOUND_VERSION >= 0x0800 - -#define IID_IDirectSoundCapture8 IID_IDirectSoundCapture -#define IID_IDirectSound3DListener8 IID_IDirectSound3DListener -#define IID_IDirectSound3DBuffer8 IID_IDirectSound3DBuffer -#define IID_IDirectSoundNotify8 IID_IDirectSoundNotify -#define IID_IDirectSoundFXGargle8 IID_IDirectSoundFXGargle -#define IID_IDirectSoundFXChorus8 IID_IDirectSoundFXChorus -#define IID_IDirectSoundFXFlanger8 IID_IDirectSoundFXFlanger -#define IID_IDirectSoundFXEcho8 IID_IDirectSoundFXEcho -#define IID_IDirectSoundFXDistortion8 IID_IDirectSoundFXDistortion -#define IID_IDirectSoundFXCompressor8 IID_IDirectSoundFXCompressor -#define IID_IDirectSoundFXParamEq8 IID_IDirectSoundFXParamEq -#define IID_IDirectSoundFXWavesReverb8 IID_IDirectSoundFXWavesReverb -#define IID_IDirectSoundFXI3DL2Reverb8 IID_IDirectSoundFXI3DL2Reverb -#define IID_IDirectSoundCaptureFXAec8 IID_IDirectSoundCaptureFXAec -#define IID_IDirectSoundCaptureFXNoiseSuppress8 IID_IDirectSoundCaptureFXNoiseSuppress -#define IID_IDirectSoundFullDuplex8 IID_IDirectSoundFullDuplex - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// Compatibility typedefs -// - -#ifndef _LPCWAVEFORMATEX_DEFINED -#define _LPCWAVEFORMATEX_DEFINED -typedef const WAVEFORMATEX *LPCWAVEFORMATEX; -#endif // _LPCWAVEFORMATEX_DEFINED - -#ifndef __LPCGUID_DEFINED__ -#define __LPCGUID_DEFINED__ -typedef const GUID *LPCGUID; -#endif // __LPCGUID_DEFINED__ - -typedef LPDIRECTSOUND *LPLPDIRECTSOUND; -typedef LPDIRECTSOUNDBUFFER *LPLPDIRECTSOUNDBUFFER; -typedef LPDIRECTSOUND3DLISTENER *LPLPDIRECTSOUND3DLISTENER; -typedef LPDIRECTSOUND3DBUFFER *LPLPDIRECTSOUND3DBUFFER; -typedef LPDIRECTSOUNDCAPTURE *LPLPDIRECTSOUNDCAPTURE; -typedef LPDIRECTSOUNDCAPTUREBUFFER *LPLPDIRECTSOUNDCAPTUREBUFFER; -typedef LPDIRECTSOUNDNOTIFY *LPLPDIRECTSOUNDNOTIFY; - -#if DIRECTSOUND_VERSION >= 0x0800 -typedef LPDIRECTSOUND8 *LPLPDIRECTSOUND8; -typedef LPDIRECTSOUNDBUFFER8 *LPLPDIRECTSOUNDBUFFER8; -typedef LPDIRECTSOUNDCAPTURE8 *LPLPDIRECTSOUNDCAPTURE8; -typedef LPDIRECTSOUNDCAPTUREBUFFER8 *LPLPDIRECTSOUNDCAPTUREBUFFER8; -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// Structures -// - -typedef struct _DSCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwMinSecondarySampleRate; - DWORD dwMaxSecondarySampleRate; - DWORD dwPrimaryBuffers; - DWORD dwMaxHwMixingAllBuffers; - DWORD dwMaxHwMixingStaticBuffers; - DWORD dwMaxHwMixingStreamingBuffers; - DWORD dwFreeHwMixingAllBuffers; - DWORD dwFreeHwMixingStaticBuffers; - DWORD dwFreeHwMixingStreamingBuffers; - DWORD dwMaxHw3DAllBuffers; - DWORD dwMaxHw3DStaticBuffers; - DWORD dwMaxHw3DStreamingBuffers; - DWORD dwFreeHw3DAllBuffers; - DWORD dwFreeHw3DStaticBuffers; - DWORD dwFreeHw3DStreamingBuffers; - DWORD dwTotalHwMemBytes; - DWORD dwFreeHwMemBytes; - DWORD dwMaxContigFreeHwMemBytes; - DWORD dwUnlockTransferRateHwBuffers; - DWORD dwPlayCpuOverheadSwBuffers; - DWORD dwReserved1; - DWORD dwReserved2; -} DSCAPS, *LPDSCAPS; - -typedef const DSCAPS *LPCDSCAPS; - -typedef struct _DSBCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwUnlockTransferRate; - DWORD dwPlayCpuOverhead; -} DSBCAPS, *LPDSBCAPS; - -typedef const DSBCAPS *LPCDSBCAPS; - -#if DIRECTSOUND_VERSION >= 0x0800 - - typedef struct _DSEFFECTDESC - { - DWORD dwSize; - DWORD dwFlags; - GUID guidDSFXClass; - DWORD_PTR dwReserved1; - DWORD_PTR dwReserved2; - } DSEFFECTDESC, *LPDSEFFECTDESC; - typedef const DSEFFECTDESC *LPCDSEFFECTDESC; - - #define DSFX_LOCHARDWARE 0x00000001 - #define DSFX_LOCSOFTWARE 0x00000002 - - enum - { - DSFXR_PRESENT, // 0 - DSFXR_LOCHARDWARE, // 1 - DSFXR_LOCSOFTWARE, // 2 - DSFXR_UNALLOCATED, // 3 - DSFXR_FAILED, // 4 - DSFXR_UNKNOWN, // 5 - DSFXR_SENDLOOP // 6 - }; - - typedef struct _DSCEFFECTDESC - { - DWORD dwSize; - DWORD dwFlags; - GUID guidDSCFXClass; - GUID guidDSCFXInstance; - DWORD dwReserved1; - DWORD dwReserved2; - } DSCEFFECTDESC, *LPDSCEFFECTDESC; - typedef const DSCEFFECTDESC *LPCDSCEFFECTDESC; - - #define DSCFX_LOCHARDWARE 0x00000001 - #define DSCFX_LOCSOFTWARE 0x00000002 - - #define DSCFXR_LOCHARDWARE 0x00000010 - #define DSCFXR_LOCSOFTWARE 0x00000020 - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -typedef struct _DSBUFFERDESC -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; -#if DIRECTSOUND_VERSION >= 0x0700 - GUID guid3DAlgorithm; -#endif -} DSBUFFERDESC, *LPDSBUFFERDESC; - -typedef const DSBUFFERDESC *LPCDSBUFFERDESC; - -// Older version of this structure: - -typedef struct _DSBUFFERDESC1 -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; -} DSBUFFERDESC1, *LPDSBUFFERDESC1; - -typedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1; - -typedef struct _DS3DBUFFER -{ - DWORD dwSize; - D3DVECTOR vPosition; - D3DVECTOR vVelocity; - DWORD dwInsideConeAngle; - DWORD dwOutsideConeAngle; - D3DVECTOR vConeOrientation; - LONG lConeOutsideVolume; - D3DVALUE flMinDistance; - D3DVALUE flMaxDistance; - DWORD dwMode; -} DS3DBUFFER, *LPDS3DBUFFER; - -typedef const DS3DBUFFER *LPCDS3DBUFFER; - -typedef struct _DS3DLISTENER -{ - DWORD dwSize; - D3DVECTOR vPosition; - D3DVECTOR vVelocity; - D3DVECTOR vOrientFront; - D3DVECTOR vOrientTop; - D3DVALUE flDistanceFactor; - D3DVALUE flRolloffFactor; - D3DVALUE flDopplerFactor; -} DS3DLISTENER, *LPDS3DLISTENER; - -typedef const DS3DLISTENER *LPCDS3DLISTENER; - -typedef struct _DSCCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwFormats; - DWORD dwChannels; -} DSCCAPS, *LPDSCCAPS; - -typedef const DSCCAPS *LPCDSCCAPS; - -typedef struct _DSCBUFFERDESC1 -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; -} DSCBUFFERDESC1, *LPDSCBUFFERDESC1; - -typedef struct _DSCBUFFERDESC -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; -#if DIRECTSOUND_VERSION >= 0x0800 - DWORD dwFXCount; - LPDSCEFFECTDESC lpDSCFXDesc; -#endif -} DSCBUFFERDESC, *LPDSCBUFFERDESC; - -typedef const DSCBUFFERDESC *LPCDSCBUFFERDESC; - -typedef struct _DSCBCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; -} DSCBCAPS, *LPDSCBCAPS; - -typedef const DSCBCAPS *LPCDSCBCAPS; - -typedef struct _DSBPOSITIONNOTIFY -{ - DWORD dwOffset; - HANDLE hEventNotify; -} DSBPOSITIONNOTIFY, *LPDSBPOSITIONNOTIFY; - -typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY; - -// -// DirectSound API -// - -typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID, LPCSTR, LPCSTR, LPVOID); -typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID, LPCWSTR, LPCWSTR, LPVOID); - -extern HRESULT WINAPI DirectSoundCreate(LPCGUID pcGuidDevice, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext); -extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext); - -extern HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID pcGuidDevice, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext); -extern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext); - -#if DIRECTSOUND_VERSION >= 0x0800 -extern HRESULT WINAPI DirectSoundCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUND8 *ppDS8, LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, LPCGUID pcGuidRenderDevice, - LPCDSCBUFFERDESC pcDSCBufferDesc, LPCDSBUFFERDESC pcDSBufferDesc, HWND hWnd, - DWORD dwLevel, LPDIRECTSOUNDFULLDUPLEX* ppDSFD, LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8, - LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, LPUNKNOWN pUnkOuter); -#define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate - -extern HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest); -#endif // DIRECTSOUND_VERSION >= 0x0800 - -#ifdef UNICODE -#define LPDSENUMCALLBACK LPDSENUMCALLBACKW -#define DirectSoundEnumerate DirectSoundEnumerateW -#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateW -#else // UNICODE -#define LPDSENUMCALLBACK LPDSENUMCALLBACKA -#define DirectSoundEnumerate DirectSoundEnumerateA -#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateA -#endif // UNICODE - -// -// IUnknown -// - -#if !defined(__cplusplus) || defined(CINTERFACE) -#ifndef IUnknown_QueryInterface -#define IUnknown_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#endif // IUnknown_QueryInterface -#ifndef IUnknown_AddRef -#define IUnknown_AddRef(p) (p)->lpVtbl->AddRef(p) -#endif // IUnknown_AddRef -#ifndef IUnknown_Release -#define IUnknown_Release(p) (p)->lpVtbl->Release(p) -#endif // IUnknown_Release -#else // !defined(__cplusplus) || defined(CINTERFACE) -#ifndef IUnknown_QueryInterface -#define IUnknown_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#endif // IUnknown_QueryInterface -#ifndef IUnknown_AddRef -#define IUnknown_AddRef(p) (p)->AddRef() -#endif // IUnknown_AddRef -#ifndef IUnknown_Release -#define IUnknown_Release(p) (p)->Release() -#endif // IUnknown_Release -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#ifndef __IReferenceClock_INTERFACE_DEFINED__ -#define __IReferenceClock_INTERFACE_DEFINED__ - -typedef LONGLONG REFERENCE_TIME; -typedef REFERENCE_TIME *LPREFERENCE_TIME; - -DEFINE_GUID(IID_IReferenceClock, 0x56a86897, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); - -#undef INTERFACE -#define INTERFACE IReferenceClock - -DECLARE_INTERFACE_(IReferenceClock, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IReferenceClock methods - STDMETHOD(GetTime) (THIS_ REFERENCE_TIME *pTime) PURE; - STDMETHOD(AdviseTime) (THIS_ REFERENCE_TIME rtBaseTime, REFERENCE_TIME rtStreamTime, - HANDLE hEvent, LPDWORD pdwAdviseCookie) PURE; - STDMETHOD(AdvisePeriodic) (THIS_ REFERENCE_TIME rtStartTime, REFERENCE_TIME rtPeriodTime, - HANDLE hSemaphore, LPDWORD pdwAdviseCookie) PURE; - STDMETHOD(Unadvise) (THIS_ DWORD dwAdviseCookie) PURE; -}; - -#endif // __IReferenceClock_INTERFACE_DEFINED__ - -#ifndef IReferenceClock_QueryInterface - -#define IReferenceClock_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IReferenceClock_AddRef(p) IUnknown_AddRef(p) -#define IReferenceClock_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IReferenceClock_GetTime(p,a) (p)->lpVtbl->GetTime(p,a) -#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->lpVtbl->AdviseTime(p,a,b,c,d) -#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d) -#define IReferenceClock_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IReferenceClock_GetTime(p,a) (p)->GetTime(a) -#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->AdviseTime(a,b,c,d) -#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->AdvisePeriodic(a,b,c,d) -#define IReferenceClock_Unadvise(p,a) (p)->Unadvise(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // IReferenceClock_QueryInterface - -// -// IDirectSound -// - -DEFINE_GUID(IID_IDirectSound, 0x279AFA83, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); - -#undef INTERFACE -#define INTERFACE IDirectSound - -DECLARE_INTERFACE_(IDirectSound, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSound methods - STDMETHOD(CreateSoundBuffer) (THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) PURE; - STDMETHOD(GetCaps) (THIS_ LPDSCAPS pDSCaps) PURE; - STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE; - STDMETHOD(SetCooperativeLevel) (THIS_ HWND hwnd, DWORD dwLevel) PURE; - STDMETHOD(Compact) (THIS) PURE; - STDMETHOD(GetSpeakerConfig) (THIS_ LPDWORD pdwSpeakerConfig) PURE; - STDMETHOD(SetSpeakerConfig) (THIS_ DWORD dwSpeakerConfig) PURE; - STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE; -}; - -#define IDirectSound_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSound_AddRef(p) IUnknown_AddRef(p) -#define IDirectSound_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c) -#define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b) -#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) -#define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a) -#define IDirectSound_SetSpeakerConfig(p,b) (p)->lpVtbl->SetSpeakerConfig(p,b) -#define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c) -#define IDirectSound_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b) -#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) -#define IDirectSound_Compact(p) (p)->Compact() -#define IDirectSound_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a) -#define IDirectSound_SetSpeakerConfig(p,b) (p)->SetSpeakerConfig(b) -#define IDirectSound_Initialize(p,a) (p)->Initialize(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#if DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSound8 -// - -DEFINE_GUID(IID_IDirectSound8, 0xC50A7E93, 0xF395, 0x4834, 0x9E, 0xF6, 0x7F, 0xA9, 0x9D, 0xE5, 0x09, 0x66); - -#undef INTERFACE -#define INTERFACE IDirectSound8 - -DECLARE_INTERFACE_(IDirectSound8, IDirectSound) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSound methods - STDMETHOD(CreateSoundBuffer) (THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) PURE; - STDMETHOD(GetCaps) (THIS_ LPDSCAPS pDSCaps) PURE; - STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE; - STDMETHOD(SetCooperativeLevel) (THIS_ HWND hwnd, DWORD dwLevel) PURE; - STDMETHOD(Compact) (THIS) PURE; - STDMETHOD(GetSpeakerConfig) (THIS_ LPDWORD pdwSpeakerConfig) PURE; - STDMETHOD(SetSpeakerConfig) (THIS_ DWORD dwSpeakerConfig) PURE; - STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE; - - // IDirectSound8 methods - STDMETHOD(VerifyCertification) (THIS_ LPDWORD pdwCertified) PURE; -}; - -#define IDirectSound8_QueryInterface(p,a,b) IDirectSound_QueryInterface(p,a,b) -#define IDirectSound8_AddRef(p) IDirectSound_AddRef(p) -#define IDirectSound8_Release(p) IDirectSound_Release(p) -#define IDirectSound8_CreateSoundBuffer(p,a,b,c) IDirectSound_CreateSoundBuffer(p,a,b,c) -#define IDirectSound8_GetCaps(p,a) IDirectSound_GetCaps(p,a) -#define IDirectSound8_DuplicateSoundBuffer(p,a,b) IDirectSound_DuplicateSoundBuffer(p,a,b) -#define IDirectSound8_SetCooperativeLevel(p,a,b) IDirectSound_SetCooperativeLevel(p,a,b) -#define IDirectSound8_Compact(p) IDirectSound_Compact(p) -#define IDirectSound8_GetSpeakerConfig(p,a) IDirectSound_GetSpeakerConfig(p,a) -#define IDirectSound8_SetSpeakerConfig(p,a) IDirectSound_SetSpeakerConfig(p,a) -#define IDirectSound8_Initialize(p,a) IDirectSound_Initialize(p,a) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound8_VerifyCertification(p,a) (p)->lpVtbl->VerifyCertification(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound8_VerifyCertification(p,a) (p)->VerifyCertification(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSoundBuffer -// - -DEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); - -#undef INTERFACE -#define INTERFACE IDirectSoundBuffer - -DECLARE_INTERFACE_(IDirectSoundBuffer, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundBuffer methods - STDMETHOD(GetCaps) (THIS_ LPDSBCAPS pDSBufferCaps) PURE; - STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor) PURE; - STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; - STDMETHOD(GetVolume) (THIS_ LPLONG plVolume) PURE; - STDMETHOD(GetPan) (THIS_ LPLONG plPan) PURE; - STDMETHOD(GetFrequency) (THIS_ LPDWORD pdwFrequency) PURE; - STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; - STDMETHOD(Initialize) (THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc) PURE; - STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, - LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Play) (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE; - STDMETHOD(SetCurrentPosition) (THIS_ DWORD dwNewPosition) PURE; - STDMETHOD(SetFormat) (THIS_ LPCWAVEFORMATEX pcfxFormat) PURE; - STDMETHOD(SetVolume) (THIS_ LONG lVolume) PURE; - STDMETHOD(SetPan) (THIS_ LONG lPan) PURE; - STDMETHOD(SetFrequency) (THIS_ DWORD dwFrequency) PURE; - STDMETHOD(Stop) (THIS) PURE; - STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; - STDMETHOD(Restore) (THIS) PURE; -}; - -#define IDirectSoundBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundBuffer_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundBuffer_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) -#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) -#define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a) -#define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a) -#define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a) -#define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) -#define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c) -#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a) -#define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a) -#define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a) -#define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a) -#define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a) -#define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p) -#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) -#define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundBuffer_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) -#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) -#define IDirectSoundBuffer_GetVolume(p,a) (p)->GetVolume(a) -#define IDirectSoundBuffer_GetPan(p,a) (p)->GetPan(a) -#define IDirectSoundBuffer_GetFrequency(p,a) (p)->GetFrequency(a) -#define IDirectSoundBuffer_GetStatus(p,a) (p)->GetStatus(a) -#define IDirectSoundBuffer_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) -#define IDirectSoundBuffer_Play(p,a,b,c) (p)->Play(a,b,c) -#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a) -#define IDirectSoundBuffer_SetFormat(p,a) (p)->SetFormat(a) -#define IDirectSoundBuffer_SetVolume(p,a) (p)->SetVolume(a) -#define IDirectSoundBuffer_SetPan(p,a) (p)->SetPan(a) -#define IDirectSoundBuffer_SetFrequency(p,a) (p)->SetFrequency(a) -#define IDirectSoundBuffer_Stop(p) (p)->Stop() -#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) -#define IDirectSoundBuffer_Restore(p) (p)->Restore() -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#if DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSoundBuffer8 -// - -DEFINE_GUID(IID_IDirectSoundBuffer8, 0x6825a449, 0x7524, 0x4d82, 0x92, 0x0f, 0x50, 0xe3, 0x6a, 0xb3, 0xab, 0x1e); - -#undef INTERFACE -#define INTERFACE IDirectSoundBuffer8 - -DECLARE_INTERFACE_(IDirectSoundBuffer8, IDirectSoundBuffer) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundBuffer methods - STDMETHOD(GetCaps) (THIS_ LPDSBCAPS pDSBufferCaps) PURE; - STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor) PURE; - STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; - STDMETHOD(GetVolume) (THIS_ LPLONG plVolume) PURE; - STDMETHOD(GetPan) (THIS_ LPLONG plPan) PURE; - STDMETHOD(GetFrequency) (THIS_ LPDWORD pdwFrequency) PURE; - STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; - STDMETHOD(Initialize) (THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc) PURE; - STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, - LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Play) (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE; - STDMETHOD(SetCurrentPosition) (THIS_ DWORD dwNewPosition) PURE; - STDMETHOD(SetFormat) (THIS_ LPCWAVEFORMATEX pcfxFormat) PURE; - STDMETHOD(SetVolume) (THIS_ LONG lVolume) PURE; - STDMETHOD(SetPan) (THIS_ LONG lPan) PURE; - STDMETHOD(SetFrequency) (THIS_ DWORD dwFrequency) PURE; - STDMETHOD(Stop) (THIS) PURE; - STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; - STDMETHOD(Restore) (THIS) PURE; - - // IDirectSoundBuffer8 methods - STDMETHOD(SetFX) (THIS_ DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes) PURE; - STDMETHOD(AcquireResources) (THIS_ DWORD dwFlags, DWORD dwEffectsCount, LPDWORD pdwResultCodes) PURE; - STDMETHOD(GetObjectInPath) (THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE; -}; - -// Special GUID meaning "select all objects" for use in GetObjectInPath() -DEFINE_GUID(GUID_All_Objects, 0xaa114de5, 0xc262, 0x4169, 0xa1, 0xc8, 0x23, 0xd6, 0x98, 0xcc, 0x73, 0xb5); - -#define IDirectSoundBuffer8_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundBuffer8_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundBuffer8_Release(p) IUnknown_Release(p) - -#define IDirectSoundBuffer8_GetCaps(p,a) IDirectSoundBuffer_GetCaps(p,a) -#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) IDirectSoundBuffer_GetCurrentPosition(p,a,b) -#define IDirectSoundBuffer8_GetFormat(p,a,b,c) IDirectSoundBuffer_GetFormat(p,a,b,c) -#define IDirectSoundBuffer8_GetVolume(p,a) IDirectSoundBuffer_GetVolume(p,a) -#define IDirectSoundBuffer8_GetPan(p,a) IDirectSoundBuffer_GetPan(p,a) -#define IDirectSoundBuffer8_GetFrequency(p,a) IDirectSoundBuffer_GetFrequency(p,a) -#define IDirectSoundBuffer8_GetStatus(p,a) IDirectSoundBuffer_GetStatus(p,a) -#define IDirectSoundBuffer8_Initialize(p,a,b) IDirectSoundBuffer_Initialize(p,a,b) -#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundBuffer8_Play(p,a,b,c) IDirectSoundBuffer_Play(p,a,b,c) -#define IDirectSoundBuffer8_SetCurrentPosition(p,a) IDirectSoundBuffer_SetCurrentPosition(p,a) -#define IDirectSoundBuffer8_SetFormat(p,a) IDirectSoundBuffer_SetFormat(p,a) -#define IDirectSoundBuffer8_SetVolume(p,a) IDirectSoundBuffer_SetVolume(p,a) -#define IDirectSoundBuffer8_SetPan(p,a) IDirectSoundBuffer_SetPan(p,a) -#define IDirectSoundBuffer8_SetFrequency(p,a) IDirectSoundBuffer_SetFrequency(p,a) -#define IDirectSoundBuffer8_Stop(p) IDirectSoundBuffer_Stop(p) -#define IDirectSoundBuffer8_Unlock(p,a,b,c,d) IDirectSoundBuffer_Unlock(p,a,b,c,d) -#define IDirectSoundBuffer8_Restore(p) IDirectSoundBuffer_Restore(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->lpVtbl->SetFX(p,a,b,c) -#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->lpVtbl->AcquireResources(p,a,b,c) -#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->SetFX(a,b,c) -#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->AcquireResources(a,b,c) -#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSound3DListener -// - -DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); - -#undef INTERFACE -#define INTERFACE IDirectSound3DListener - -DECLARE_INTERFACE_(IDirectSound3DListener, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSound3DListener methods - STDMETHOD(GetAllParameters) (THIS_ LPDS3DLISTENER pListener) PURE; - STDMETHOD(GetDistanceFactor) (THIS_ D3DVALUE* pflDistanceFactor) PURE; - STDMETHOD(GetDopplerFactor) (THIS_ D3DVALUE* pflDopplerFactor) PURE; - STDMETHOD(GetOrientation) (THIS_ D3DVECTOR* pvOrientFront, D3DVECTOR* pvOrientTop) PURE; - STDMETHOD(GetPosition) (THIS_ D3DVECTOR* pvPosition) PURE; - STDMETHOD(GetRolloffFactor) (THIS_ D3DVALUE* pflRolloffFactor) PURE; - STDMETHOD(GetVelocity) (THIS_ D3DVECTOR* pvVelocity) PURE; - STDMETHOD(SetAllParameters) (THIS_ LPCDS3DLISTENER pcListener, DWORD dwApply) PURE; - STDMETHOD(SetDistanceFactor) (THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE; - STDMETHOD(SetDopplerFactor) (THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE; - STDMETHOD(SetOrientation) (THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront, - D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE; - STDMETHOD(SetPosition) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(SetRolloffFactor) (THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE; - STDMETHOD(SetVelocity) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(CommitDeferredSettings) (THIS) PURE; -}; - -#define IDirectSound3DListener_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSound3DListener_AddRef(p) IUnknown_AddRef(p) -#define IDirectSound3DListener_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound3DListener_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->lpVtbl->GetDistanceFactor(p,a) -#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->lpVtbl->GetDopplerFactor(p,a) -#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->lpVtbl->GetOrientation(p,a,b) -#define IDirectSound3DListener_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) -#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->lpVtbl->GetRolloffFactor(p,a) -#define IDirectSound3DListener_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) -#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) -#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->lpVtbl->SetDistanceFactor(p,a,b) -#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->lpVtbl->SetDopplerFactor(p,a,b) -#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g) -#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) -#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->lpVtbl->SetRolloffFactor(p,a,b) -#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) -#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->lpVtbl->CommitDeferredSettings(p) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound3DListener_GetAllParameters(p,a) (p)->GetAllParameters(a) -#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->GetDistanceFactor(a) -#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->GetDopplerFactor(a) -#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->GetOrientation(a,b) -#define IDirectSound3DListener_GetPosition(p,a) (p)->GetPosition(a) -#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->GetRolloffFactor(a) -#define IDirectSound3DListener_GetVelocity(p,a) (p)->GetVelocity(a) -#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) -#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->SetDistanceFactor(a,b) -#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->SetDopplerFactor(a,b) -#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g) -#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) -#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->SetRolloffFactor(a,b) -#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) -#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->CommitDeferredSettings() -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSound3DBuffer -// - -DEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); - -#undef INTERFACE -#define INTERFACE IDirectSound3DBuffer - -DECLARE_INTERFACE_(IDirectSound3DBuffer, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSound3DBuffer methods - STDMETHOD(GetAllParameters) (THIS_ LPDS3DBUFFER pDs3dBuffer) PURE; - STDMETHOD(GetConeAngles) (THIS_ LPDWORD pdwInsideConeAngle, LPDWORD pdwOutsideConeAngle) PURE; - STDMETHOD(GetConeOrientation) (THIS_ D3DVECTOR* pvOrientation) PURE; - STDMETHOD(GetConeOutsideVolume) (THIS_ LPLONG plConeOutsideVolume) PURE; - STDMETHOD(GetMaxDistance) (THIS_ D3DVALUE* pflMaxDistance) PURE; - STDMETHOD(GetMinDistance) (THIS_ D3DVALUE* pflMinDistance) PURE; - STDMETHOD(GetMode) (THIS_ LPDWORD pdwMode) PURE; - STDMETHOD(GetPosition) (THIS_ D3DVECTOR* pvPosition) PURE; - STDMETHOD(GetVelocity) (THIS_ D3DVECTOR* pvVelocity) PURE; - STDMETHOD(SetAllParameters) (THIS_ LPCDS3DBUFFER pcDs3dBuffer, DWORD dwApply) PURE; - STDMETHOD(SetConeAngles) (THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE; - STDMETHOD(SetConeOrientation) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(SetConeOutsideVolume) (THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE; - STDMETHOD(SetMaxDistance) (THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE; - STDMETHOD(SetMinDistance) (THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE; - STDMETHOD(SetMode) (THIS_ DWORD dwMode, DWORD dwApply) PURE; - STDMETHOD(SetPosition) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(SetVelocity) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; -}; - -#define IDirectSound3DBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSound3DBuffer_AddRef(p) IUnknown_AddRef(p) -#define IDirectSound3DBuffer_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->lpVtbl->GetConeAngles(p,a,b) -#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->lpVtbl->GetConeOrientation(p,a) -#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->lpVtbl->GetConeOutsideVolume(p,a) -#define IDirectSound3DBuffer_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) -#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->lpVtbl->GetMinDistance(p,a) -#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->lpVtbl->GetMaxDistance(p,a) -#define IDirectSound3DBuffer_GetMode(p,a) (p)->lpVtbl->GetMode(p,a) -#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) -#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) -#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->lpVtbl->SetConeAngles(p,a,b,c) -#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d) -#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->lpVtbl->SetConeOutsideVolume(p,a,b) -#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) -#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->lpVtbl->SetMinDistance(p,a,b) -#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->lpVtbl->SetMaxDistance(p,a,b) -#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->lpVtbl->SetMode(p,a,b) -#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->GetAllParameters(a) -#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->GetConeAngles(a,b) -#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->GetConeOrientation(a) -#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->GetConeOutsideVolume(a) -#define IDirectSound3DBuffer_GetPosition(p,a) (p)->GetPosition(a) -#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->GetMinDistance(a) -#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->GetMaxDistance(a) -#define IDirectSound3DBuffer_GetMode(p,a) (p)->GetMode(a) -#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->GetVelocity(a) -#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) -#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->SetConeAngles(a,b,c) -#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d) -#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->SetConeOutsideVolume(a,b) -#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) -#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->SetMinDistance(a,b) -#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->SetMaxDistance(a,b) -#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->SetMode(a,b) -#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundCapture -// - -DEFINE_GUID(IID_IDirectSoundCapture, 0xb0210781, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); - -#undef INTERFACE -#define INTERFACE IDirectSoundCapture - -DECLARE_INTERFACE_(IDirectSoundCapture, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundCapture methods - STDMETHOD(CreateCaptureBuffer) (THIS_ LPCDSCBUFFERDESC pcDSCBufferDesc, LPDIRECTSOUNDCAPTUREBUFFER *ppDSCBuffer, LPUNKNOWN pUnkOuter) PURE; - STDMETHOD(GetCaps) (THIS_ LPDSCCAPS pDSCCaps) PURE; - STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE; -}; - -#define IDirectSoundCapture_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundCapture_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundCapture_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c) -#define IDirectSoundCapture_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundCapture_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c) -#define IDirectSoundCapture_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundCapture_Initialize(p,a) (p)->Initialize(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundCaptureBuffer -// - -DEFINE_GUID(IID_IDirectSoundCaptureBuffer, 0xb0210782, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); - -#undef INTERFACE -#define INTERFACE IDirectSoundCaptureBuffer - -DECLARE_INTERFACE_(IDirectSoundCaptureBuffer, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundCaptureBuffer methods - STDMETHOD(GetCaps) (THIS_ LPDSCBCAPS pDSCBCaps) PURE; - STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCapturePosition, LPDWORD pdwReadPosition) PURE; - STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; - STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; - STDMETHOD(Initialize) (THIS_ LPDIRECTSOUNDCAPTURE pDirectSoundCapture, LPCDSCBUFFERDESC pcDSCBufferDesc) PURE; - STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, - LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Start) (THIS_ DWORD dwFlags) PURE; - STDMETHOD(Stop) (THIS) PURE; - STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; -}; - -#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundCaptureBuffer_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundCaptureBuffer_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) -#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) -#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) -#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundCaptureBuffer_Start(p,a) (p)->lpVtbl->Start(p,a) -#define IDirectSoundCaptureBuffer_Stop(p) (p)->lpVtbl->Stop(p) -#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) -#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) -#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->GetStatus(a) -#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) -#define IDirectSoundCaptureBuffer_Start(p,a) (p)->Start(a) -#define IDirectSoundCaptureBuffer_Stop(p) (p)->Stop() -#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - - -#if DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSoundCaptureBuffer8 -// - -DEFINE_GUID(IID_IDirectSoundCaptureBuffer8, 0x990df4, 0xdbb, 0x4872, 0x83, 0x3e, 0x6d, 0x30, 0x3e, 0x80, 0xae, 0xb6); - -#undef INTERFACE -#define INTERFACE IDirectSoundCaptureBuffer8 - -DECLARE_INTERFACE_(IDirectSoundCaptureBuffer8, IDirectSoundCaptureBuffer) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundCaptureBuffer methods - STDMETHOD(GetCaps) (THIS_ LPDSCBCAPS pDSCBCaps) PURE; - STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCapturePosition, LPDWORD pdwReadPosition) PURE; - STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; - STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; - STDMETHOD(Initialize) (THIS_ LPDIRECTSOUNDCAPTURE pDirectSoundCapture, LPCDSCBUFFERDESC pcDSCBufferDesc) PURE; - STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, - LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Start) (THIS_ DWORD dwFlags) PURE; - STDMETHOD(Stop) (THIS) PURE; - STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; - - // IDirectSoundCaptureBuffer8 methods - STDMETHOD(GetObjectInPath) (THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE; - STDMETHOD(GetFXStatus) (DWORD dwFXCount, LPDWORD pdwFXStatus) PURE; -}; - -#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundCaptureBuffer8_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundCaptureBuffer8_Release(p) IUnknown_Release(p) - -#define IDirectSoundCaptureBuffer8_GetCaps(p,a) IDirectSoundCaptureBuffer_GetCaps(p,a) -#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) -#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) -#define IDirectSoundCaptureBuffer8_GetStatus(p,a) IDirectSoundCaptureBuffer_GetStatus(p,a) -#define IDirectSoundCaptureBuffer8_Initialize(p,a,b) IDirectSoundCaptureBuffer_Initialize(p,a,b) -#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundCaptureBuffer8_Start(p,a) IDirectSoundCaptureBuffer_Start(p,a) -#define IDirectSoundCaptureBuffer8_Stop(p) IDirectSoundCaptureBuffer_Stop(p)) -#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) -#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->lpVtbl->GetFXStatus(p,a,b) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) -#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->GetFXStatus(a,b) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSoundNotify -// - -DEFINE_GUID(IID_IDirectSoundNotify, 0xb0210783, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); - -#undef INTERFACE -#define INTERFACE IDirectSoundNotify - -DECLARE_INTERFACE_(IDirectSoundNotify, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundNotify methods - STDMETHOD(SetNotificationPositions) (THIS_ DWORD dwPositionNotifies, LPCDSBPOSITIONNOTIFY pcPositionNotifies) PURE; -}; - -#define IDirectSoundNotify_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundNotify_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundNotify_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IKsPropertySet -// - -#ifndef _IKsPropertySet_ -#define _IKsPropertySet_ - -#ifdef __cplusplus -// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined -struct IKsPropertySet; -#endif // __cplusplus - -typedef struct IKsPropertySet *LPKSPROPERTYSET; - -#define KSPROPERTY_SUPPORT_GET 0x00000001 -#define KSPROPERTY_SUPPORT_SET 0x00000002 - -DEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93); - -#undef INTERFACE -#define INTERFACE IKsPropertySet - -DECLARE_INTERFACE_(IKsPropertySet, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IKsPropertySet methods - STDMETHOD(Get) (THIS_ REFGUID rguidPropSet, ULONG ulId, LPVOID pInstanceData, ULONG ulInstanceLength, - LPVOID pPropertyData, ULONG ulDataLength, PULONG pulBytesReturned) PURE; - STDMETHOD(Set) (THIS_ REFGUID rguidPropSet, ULONG ulId, LPVOID pInstanceData, ULONG ulInstanceLength, - LPVOID pPropertyData, ULONG ulDataLength) PURE; - STDMETHOD(QuerySupport) (THIS_ REFGUID rguidPropSet, ULONG ulId, PULONG pulTypeSupport) PURE; -}; - -#define IKsPropertySet_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IKsPropertySet_AddRef(p) IUnknown_AddRef(p) -#define IKsPropertySet_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->lpVtbl->Get(p,a,b,c,d,e,f,g) -#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->lpVtbl->Set(p,a,b,c,d,e,f) -#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->Get(a,b,c,d,e,f,g) -#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->Set(a,b,c,d,e,f) -#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->QuerySupport(a,b,c) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // _IKsPropertySet_ - -#if DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSoundFXGargle -// - -DEFINE_GUID(IID_IDirectSoundFXGargle, 0xd616f352, 0xd622, 0x11ce, 0xaa, 0xc5, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3); - -typedef struct _DSFXGargle -{ - DWORD dwRateHz; // Rate of modulation in hz - DWORD dwWaveShape; // DSFXGARGLE_WAVE_xxx -} DSFXGargle, *LPDSFXGargle; - -#define DSFXGARGLE_WAVE_TRIANGLE 0 -#define DSFXGARGLE_WAVE_SQUARE 1 - -typedef const DSFXGargle *LPCDSFXGargle; - -#define DSFXGARGLE_RATEHZ_MIN 1 -#define DSFXGARGLE_RATEHZ_MAX 1000 - -#undef INTERFACE -#define INTERFACE IDirectSoundFXGargle - -DECLARE_INTERFACE_(IDirectSoundFXGargle, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXGargle methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSFXGargle pcDsFxGargle) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSFXGargle pDsFxGargle) PURE; -}; - -#define IDirectSoundFXGargle_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXGargle_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXGargle_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXGargle_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXGargle_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXGargle_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXGargle_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXChorus -// - -DEFINE_GUID(IID_IDirectSoundFXChorus, 0x880842e3, 0x145f, 0x43e6, 0xa9, 0x34, 0xa7, 0x18, 0x06, 0xe5, 0x05, 0x47); - -typedef struct _DSFXChorus -{ - FLOAT fWetDryMix; - FLOAT fDepth; - FLOAT fFeedback; - FLOAT fFrequency; - LONG lWaveform; // LFO shape; DSFXCHORUS_WAVE_xxx - FLOAT fDelay; - LONG lPhase; -} DSFXChorus, *LPDSFXChorus; - -typedef const DSFXChorus *LPCDSFXChorus; - -#define DSFXCHORUS_WAVE_TRIANGLE 0 -#define DSFXCHORUS_WAVE_SIN 1 - -#define DSFXCHORUS_WETDRYMIX_MIN 0.0f -#define DSFXCHORUS_WETDRYMIX_MAX 100.0f -#define DSFXCHORUS_DEPTH_MIN 0.0f -#define DSFXCHORUS_DEPTH_MAX 100.0f -#define DSFXCHORUS_FEEDBACK_MIN -99.0f -#define DSFXCHORUS_FEEDBACK_MAX 99.0f -#define DSFXCHORUS_FREQUENCY_MIN 0.0f -#define DSFXCHORUS_FREQUENCY_MAX 10.0f -#define DSFXCHORUS_DELAY_MIN 0.0f -#define DSFXCHORUS_DELAY_MAX 20.0f -#define DSFXCHORUS_PHASE_MIN 0 -#define DSFXCHORUS_PHASE_MAX 4 - -#define DSFXCHORUS_PHASE_NEG_180 0 -#define DSFXCHORUS_PHASE_NEG_90 1 -#define DSFXCHORUS_PHASE_ZERO 2 -#define DSFXCHORUS_PHASE_90 3 -#define DSFXCHORUS_PHASE_180 4 - -#undef INTERFACE -#define INTERFACE IDirectSoundFXChorus - -DECLARE_INTERFACE_(IDirectSoundFXChorus, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXChorus methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSFXChorus pcDsFxChorus) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSFXChorus pDsFxChorus) PURE; -}; - -#define IDirectSoundFXChorus_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXChorus_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXChorus_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXChorus_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXChorus_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXChorus_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXChorus_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXFlanger -// - -DEFINE_GUID(IID_IDirectSoundFXFlanger, 0x903e9878, 0x2c92, 0x4072, 0x9b, 0x2c, 0xea, 0x68, 0xf5, 0x39, 0x67, 0x83); - -typedef struct _DSFXFlanger -{ - FLOAT fWetDryMix; - FLOAT fDepth; - FLOAT fFeedback; - FLOAT fFrequency; - LONG lWaveform; - FLOAT fDelay; - LONG lPhase; -} DSFXFlanger, *LPDSFXFlanger; - -typedef const DSFXFlanger *LPCDSFXFlanger; - -#define DSFXFLANGER_WAVE_TRIANGLE 0 -#define DSFXFLANGER_WAVE_SIN 1 - -#define DSFXFLANGER_WETDRYMIX_MIN 0.0f -#define DSFXFLANGER_WETDRYMIX_MAX 100.0f -#define DSFXFLANGER_FREQUENCY_MIN 0.0f -#define DSFXFLANGER_FREQUENCY_MAX 10.0f -#define DSFXFLANGER_DEPTH_MIN 0.0f -#define DSFXFLANGER_DEPTH_MAX 100.0f -#define DSFXFLANGER_PHASE_MIN 0 -#define DSFXFLANGER_PHASE_MAX 4 -#define DSFXFLANGER_FEEDBACK_MIN -99.0f -#define DSFXFLANGER_FEEDBACK_MAX 99.0f -#define DSFXFLANGER_DELAY_MIN 0.0f -#define DSFXFLANGER_DELAY_MAX 4.0f - -#define DSFXFLANGER_PHASE_NEG_180 0 -#define DSFXFLANGER_PHASE_NEG_90 1 -#define DSFXFLANGER_PHASE_ZERO 2 -#define DSFXFLANGER_PHASE_90 3 -#define DSFXFLANGER_PHASE_180 4 - -#undef INTERFACE -#define INTERFACE IDirectSoundFXFlanger - -DECLARE_INTERFACE_(IDirectSoundFXFlanger, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXFlanger methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSFXFlanger pcDsFxFlanger) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSFXFlanger pDsFxFlanger) PURE; -}; - -#define IDirectSoundFXFlanger_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXFlanger_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXFlanger_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXFlanger_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXFlanger_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXFlanger_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXFlanger_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXEcho -// - -DEFINE_GUID(IID_IDirectSoundFXEcho, 0x8bd28edf, 0x50db, 0x4e92, 0xa2, 0xbd, 0x44, 0x54, 0x88, 0xd1, 0xed, 0x42); - -typedef struct _DSFXEcho -{ - FLOAT fWetDryMix; - FLOAT fFeedback; - FLOAT fLeftDelay; - FLOAT fRightDelay; - LONG lPanDelay; -} DSFXEcho, *LPDSFXEcho; - -typedef const DSFXEcho *LPCDSFXEcho; - -#define DSFXECHO_WETDRYMIX_MIN 0.0f -#define DSFXECHO_WETDRYMIX_MAX 100.0f -#define DSFXECHO_FEEDBACK_MIN 0.0f -#define DSFXECHO_FEEDBACK_MAX 100.0f -#define DSFXECHO_LEFTDELAY_MIN 1.0f -#define DSFXECHO_LEFTDELAY_MAX 2000.0f -#define DSFXECHO_RIGHTDELAY_MIN 1.0f -#define DSFXECHO_RIGHTDELAY_MAX 2000.0f -#define DSFXECHO_PANDELAY_MIN 0 -#define DSFXECHO_PANDELAY_MAX 1 - -#undef INTERFACE -#define INTERFACE IDirectSoundFXEcho - -DECLARE_INTERFACE_(IDirectSoundFXEcho, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXEcho methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSFXEcho pcDsFxEcho) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSFXEcho pDsFxEcho) PURE; -}; - -#define IDirectSoundFXEcho_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXEcho_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXEcho_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXEcho_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXEcho_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXEcho_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXEcho_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXDistortion -// - -DEFINE_GUID(IID_IDirectSoundFXDistortion, 0x8ecf4326, 0x455f, 0x4d8b, 0xbd, 0xa9, 0x8d, 0x5d, 0x3e, 0x9e, 0x3e, 0x0b); - -typedef struct _DSFXDistortion -{ - FLOAT fGain; - FLOAT fEdge; - FLOAT fPostEQCenterFrequency; - FLOAT fPostEQBandwidth; - FLOAT fPreLowpassCutoff; -} DSFXDistortion, *LPDSFXDistortion; - -typedef const DSFXDistortion *LPCDSFXDistortion; - -#define DSFXDISTORTION_GAIN_MIN -60.0f -#define DSFXDISTORTION_GAIN_MAX 0.0f -#define DSFXDISTORTION_EDGE_MIN 0.0f -#define DSFXDISTORTION_EDGE_MAX 100.0f -#define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN 100.0f -#define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX 8000.0f -#define DSFXDISTORTION_POSTEQBANDWIDTH_MIN 100.0f -#define DSFXDISTORTION_POSTEQBANDWIDTH_MAX 8000.0f -#define DSFXDISTORTION_PRELOWPASSCUTOFF_MIN 100.0f -#define DSFXDISTORTION_PRELOWPASSCUTOFF_MAX 8000.0f - -#undef INTERFACE -#define INTERFACE IDirectSoundFXDistortion - -DECLARE_INTERFACE_(IDirectSoundFXDistortion, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXDistortion methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSFXDistortion pcDsFxDistortion) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSFXDistortion pDsFxDistortion) PURE; -}; - -#define IDirectSoundFXDistortion_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXDistortion_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXDistortion_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXDistortion_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXDistortion_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXDistortion_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXDistortion_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXCompressor -// - -DEFINE_GUID(IID_IDirectSoundFXCompressor, 0x4bbd1154, 0x62f6, 0x4e2c, 0xa1, 0x5c, 0xd3, 0xb6, 0xc4, 0x17, 0xf7, 0xa0); - -typedef struct _DSFXCompressor -{ - FLOAT fGain; - FLOAT fAttack; - FLOAT fRelease; - FLOAT fThreshold; - FLOAT fRatio; - FLOAT fPredelay; -} DSFXCompressor, *LPDSFXCompressor; - -typedef const DSFXCompressor *LPCDSFXCompressor; - -#define DSFXCOMPRESSOR_GAIN_MIN -60.0f -#define DSFXCOMPRESSOR_GAIN_MAX 60.0f -#define DSFXCOMPRESSOR_ATTACK_MIN 0.01f -#define DSFXCOMPRESSOR_ATTACK_MAX 500.0f -#define DSFXCOMPRESSOR_RELEASE_MIN 50.0f -#define DSFXCOMPRESSOR_RELEASE_MAX 3000.0f -#define DSFXCOMPRESSOR_THRESHOLD_MIN -60.0f -#define DSFXCOMPRESSOR_THRESHOLD_MAX 0.0f -#define DSFXCOMPRESSOR_RATIO_MIN 1.0f -#define DSFXCOMPRESSOR_RATIO_MAX 100.0f -#define DSFXCOMPRESSOR_PREDELAY_MIN 0.0f -#define DSFXCOMPRESSOR_PREDELAY_MAX 4.0f - -#undef INTERFACE -#define INTERFACE IDirectSoundFXCompressor - -DECLARE_INTERFACE_(IDirectSoundFXCompressor, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXCompressor methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSFXCompressor pcDsFxCompressor) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSFXCompressor pDsFxCompressor) PURE; -}; - -#define IDirectSoundFXCompressor_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXCompressor_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXCompressor_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXCompressor_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXCompressor_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXCompressor_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXCompressor_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXParamEq -// - -DEFINE_GUID(IID_IDirectSoundFXParamEq, 0xc03ca9fe, 0xfe90, 0x4204, 0x80, 0x78, 0x82, 0x33, 0x4c, 0xd1, 0x77, 0xda); - -typedef struct _DSFXParamEq -{ - FLOAT fCenter; - FLOAT fBandwidth; - FLOAT fGain; -} DSFXParamEq, *LPDSFXParamEq; - -typedef const DSFXParamEq *LPCDSFXParamEq; - -#define DSFXPARAMEQ_CENTER_MIN 80.0f -#define DSFXPARAMEQ_CENTER_MAX 16000.0f -#define DSFXPARAMEQ_BANDWIDTH_MIN 1.0f -#define DSFXPARAMEQ_BANDWIDTH_MAX 36.0f -#define DSFXPARAMEQ_GAIN_MIN -15.0f -#define DSFXPARAMEQ_GAIN_MAX 15.0f - -#undef INTERFACE -#define INTERFACE IDirectSoundFXParamEq - -DECLARE_INTERFACE_(IDirectSoundFXParamEq, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXParamEq methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSFXParamEq pcDsFxParamEq) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSFXParamEq pDsFxParamEq) PURE; -}; - -#define IDirectSoundFXParamEq_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXParamEq_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXParamEq_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXParamEq_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXParamEq_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXParamEq_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXParamEq_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXI3DL2Reverb -// - -DEFINE_GUID(IID_IDirectSoundFXI3DL2Reverb, 0x4b166a6a, 0x0d66, 0x43f3, 0x80, 0xe3, 0xee, 0x62, 0x80, 0xde, 0xe1, 0xa4); - -typedef struct _DSFXI3DL2Reverb -{ - LONG lRoom; // [-10000, 0] default: -1000 mB - LONG lRoomHF; // [-10000, 0] default: 0 mB - FLOAT flRoomRolloffFactor; // [0.0, 10.0] default: 0.0 - FLOAT flDecayTime; // [0.1, 20.0] default: 1.49s - FLOAT flDecayHFRatio; // [0.1, 2.0] default: 0.83 - LONG lReflections; // [-10000, 1000] default: -2602 mB - FLOAT flReflectionsDelay; // [0.0, 0.3] default: 0.007 s - LONG lReverb; // [-10000, 2000] default: 200 mB - FLOAT flReverbDelay; // [0.0, 0.1] default: 0.011 s - FLOAT flDiffusion; // [0.0, 100.0] default: 100.0 % - FLOAT flDensity; // [0.0, 100.0] default: 100.0 % - FLOAT flHFReference; // [20.0, 20000.0] default: 5000.0 Hz -} DSFXI3DL2Reverb, *LPDSFXI3DL2Reverb; - -typedef const DSFXI3DL2Reverb *LPCDSFXI3DL2Reverb; - -#define DSFX_I3DL2REVERB_ROOM_MIN (-10000) -#define DSFX_I3DL2REVERB_ROOM_MAX 0 -#define DSFX_I3DL2REVERB_ROOM_DEFAULT (-1000) - -#define DSFX_I3DL2REVERB_ROOMHF_MIN (-10000) -#define DSFX_I3DL2REVERB_ROOMHF_MAX 0 -#define DSFX_I3DL2REVERB_ROOMHF_DEFAULT (-100) - -#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN 0.0f -#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX 10.0f -#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT 0.0f - -#define DSFX_I3DL2REVERB_DECAYTIME_MIN 0.1f -#define DSFX_I3DL2REVERB_DECAYTIME_MAX 20.0f -#define DSFX_I3DL2REVERB_DECAYTIME_DEFAULT 1.49f - -#define DSFX_I3DL2REVERB_DECAYHFRATIO_MIN 0.1f -#define DSFX_I3DL2REVERB_DECAYHFRATIO_MAX 2.0f -#define DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT 0.83f - -#define DSFX_I3DL2REVERB_REFLECTIONS_MIN (-10000) -#define DSFX_I3DL2REVERB_REFLECTIONS_MAX 1000 -#define DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT (-2602) - -#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN 0.0f -#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX 0.3f -#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT 0.007f - -#define DSFX_I3DL2REVERB_REVERB_MIN (-10000) -#define DSFX_I3DL2REVERB_REVERB_MAX 2000 -#define DSFX_I3DL2REVERB_REVERB_DEFAULT (200) - -#define DSFX_I3DL2REVERB_REVERBDELAY_MIN 0.0f -#define DSFX_I3DL2REVERB_REVERBDELAY_MAX 0.1f -#define DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT 0.011f - -#define DSFX_I3DL2REVERB_DIFFUSION_MIN 0.0f -#define DSFX_I3DL2REVERB_DIFFUSION_MAX 100.0f -#define DSFX_I3DL2REVERB_DIFFUSION_DEFAULT 100.0f - -#define DSFX_I3DL2REVERB_DENSITY_MIN 0.0f -#define DSFX_I3DL2REVERB_DENSITY_MAX 100.0f -#define DSFX_I3DL2REVERB_DENSITY_DEFAULT 100.0f - -#define DSFX_I3DL2REVERB_HFREFERENCE_MIN 20.0f -#define DSFX_I3DL2REVERB_HFREFERENCE_MAX 20000.0f -#define DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT 5000.0f - -#define DSFX_I3DL2REVERB_QUALITY_MIN 0 -#define DSFX_I3DL2REVERB_QUALITY_MAX 3 -#define DSFX_I3DL2REVERB_QUALITY_DEFAULT 2 - -#undef INTERFACE -#define INTERFACE IDirectSoundFXI3DL2Reverb - -DECLARE_INTERFACE_(IDirectSoundFXI3DL2Reverb, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXI3DL2Reverb methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSFXI3DL2Reverb pcDsFxI3DL2Reverb) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSFXI3DL2Reverb pDsFxI3DL2Reverb) PURE; - STDMETHOD(SetPreset) (THIS_ DWORD dwPreset) PURE; - STDMETHOD(GetPreset) (THIS_ LPDWORD pdwPreset) PURE; - STDMETHOD(SetQuality) (THIS_ LONG lQuality) PURE; - STDMETHOD(GetQuality) (THIS_ LONG *plQuality) PURE; -}; - -#define IDirectSoundFXI3DL2Reverb_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXI3DL2Reverb_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXI3DL2Reverb_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->lpVtbl->SetPreset(p,a) -#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->lpVtbl->GetPreset(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->GetAllParameters(a) -#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->SetPreset(a) -#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->GetPreset(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXWavesReverb -// - -DEFINE_GUID(IID_IDirectSoundFXWavesReverb,0x46858c3a,0x0dc6,0x45e3,0xb7,0x60,0xd4,0xee,0xf1,0x6c,0xb3,0x25); - -typedef struct _DSFXWavesReverb -{ - FLOAT fInGain; // [-96.0,0.0] default: 0.0 dB - FLOAT fReverbMix; // [-96.0,0.0] default: 0.0 db - FLOAT fReverbTime; // [0.001,3000.0] default: 1000.0 ms - FLOAT fHighFreqRTRatio; // [0.001,0.999] default: 0.001 -} DSFXWavesReverb, *LPDSFXWavesReverb; - -typedef const DSFXWavesReverb *LPCDSFXWavesReverb; - -#define DSFX_WAVESREVERB_INGAIN_MIN -96.0f -#define DSFX_WAVESREVERB_INGAIN_MAX 0.0f -#define DSFX_WAVESREVERB_INGAIN_DEFAULT 0.0f -#define DSFX_WAVESREVERB_REVERBMIX_MIN -96.0f -#define DSFX_WAVESREVERB_REVERBMIX_MAX 0.0f -#define DSFX_WAVESREVERB_REVERBMIX_DEFAULT 0.0f -#define DSFX_WAVESREVERB_REVERBTIME_MIN 0.001f -#define DSFX_WAVESREVERB_REVERBTIME_MAX 3000.0f -#define DSFX_WAVESREVERB_REVERBTIME_DEFAULT 1000.0f -#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN 0.001f -#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX 0.999f -#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT 0.001f - -#undef INTERFACE -#define INTERFACE IDirectSoundFXWavesReverb - -DECLARE_INTERFACE_(IDirectSoundFXWavesReverb, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXWavesReverb methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSFXWavesReverb pcDsFxWavesReverb) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSFXWavesReverb pDsFxWavesReverb) PURE; -}; - -#define IDirectSoundFXWavesReverb_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXWavesReverb_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXWavesReverb_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXWavesReverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXWavesReverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXWavesReverb_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXWavesReverb_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundCaptureFXAec -// - -DEFINE_GUID(IID_IDirectSoundCaptureFXAec, 0xad74143d, 0x903d, 0x4ab7, 0x80, 0x66, 0x28, 0xd3, 0x63, 0x03, 0x6d, 0x65); - -typedef struct _DSCFXAec -{ - BOOL fEnable; - BOOL fNoiseFill; - DWORD dwMode; -} DSCFXAec, *LPDSCFXAec; - -typedef const DSCFXAec *LPCDSCFXAec; - -// These match the AEC_MODE_* constants in the DDK's ksmedia.h file -#define DSCFX_AEC_MODE_PASS_THROUGH 0x0 -#define DSCFX_AEC_MODE_HALF_DUPLEX 0x1 -#define DSCFX_AEC_MODE_FULL_DUPLEX 0x2 - -// These match the AEC_STATUS_* constants in ksmedia.h -#define DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED 0x0 -#define DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED 0x1 -#define DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED 0x2 -#define DSCFX_AEC_STATUS_CURRENTLY_CONVERGED 0x8 - -#undef INTERFACE -#define INTERFACE IDirectSoundCaptureFXAec - -DECLARE_INTERFACE_(IDirectSoundCaptureFXAec, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundCaptureFXAec methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSCFXAec pDscFxAec) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSCFXAec pDscFxAec) PURE; - STDMETHOD(GetStatus) (THIS_ PDWORD pdwStatus) PURE; - STDMETHOD(Reset) (THIS) PURE; -}; - -#define IDirectSoundCaptureFXAec_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundCaptureFXAec_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundCaptureFXAec_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureFXAec_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundCaptureFXAec_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureFXAec_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundCaptureFXAec_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - - -// -// IDirectSoundCaptureFXNoiseSuppress -// - -DEFINE_GUID(IID_IDirectSoundCaptureFXNoiseSuppress, 0xed311e41, 0xfbae, 0x4175, 0x96, 0x25, 0xcd, 0x8, 0x54, 0xf6, 0x93, 0xca); - -typedef struct _DSCFXNoiseSuppress -{ - BOOL fEnable; -} DSCFXNoiseSuppress, *LPDSCFXNoiseSuppress; - -typedef const DSCFXNoiseSuppress *LPCDSCFXNoiseSuppress; - -#undef INTERFACE -#define INTERFACE IDirectSoundCaptureFXNoiseSuppress - -DECLARE_INTERFACE_(IDirectSoundCaptureFXNoiseSuppress, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundCaptureFXNoiseSuppress methods - STDMETHOD(SetAllParameters) (THIS_ LPCDSCFXNoiseSuppress pcDscFxNoiseSuppress) PURE; - STDMETHOD(GetAllParameters) (THIS_ LPDSCFXNoiseSuppress pDscFxNoiseSuppress) PURE; - STDMETHOD(Reset) (THIS) PURE; -}; - -#define IDirectSoundCaptureFXNoiseSuppress_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundCaptureFXNoiseSuppress_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundCaptureFXNoiseSuppress_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - - -// -// IDirectSoundFullDuplex -// - -#ifndef _IDirectSoundFullDuplex_ -#define _IDirectSoundFullDuplex_ - -#ifdef __cplusplus -// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined -struct IDirectSoundFullDuplex; -#endif // __cplusplus - -typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX; - -DEFINE_GUID(IID_IDirectSoundFullDuplex, 0xedcb4c7a, 0xdaab, 0x4216, 0xa4, 0x2e, 0x6c, 0x50, 0x59, 0x6d, 0xdc, 0x1d); - -#undef INTERFACE -#define INTERFACE IDirectSoundFullDuplex - -DECLARE_INTERFACE_(IDirectSoundFullDuplex, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFullDuplex methods - STDMETHOD(Initialize) (THIS_ LPCGUID pCaptureGuid, LPCGUID pRenderGuid, LPCDSCBUFFERDESC lpDscBufferDesc, LPCDSBUFFERDESC lpDsBufferDesc, HWND hWnd, DWORD dwLevel, LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8, LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE; -}; - -#define IDirectSoundFullDuplex_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFullDuplex_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFullDuplex_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->Initialize(a,b,c,d,e,f,g,h) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // _IDirectSoundFullDuplex_ - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// Return Codes -// - -// The function completed successfully -#define DS_OK S_OK - -// The call succeeded, but we had to substitute the 3D algorithm -#define DS_NO_VIRTUALIZATION MAKE_HRESULT(0, _FACDS, 10) - -// The call failed because resources (such as a priority level) -// were already being used by another caller -#define DSERR_ALLOCATED MAKE_DSHRESULT(10) - -// The control (vol, pan, etc.) requested by the caller is not available -#define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30) - -// An invalid parameter was passed to the returning function -#define DSERR_INVALIDPARAM E_INVALIDARG - -// This call is not valid for the current state of this object -#define DSERR_INVALIDCALL MAKE_DSHRESULT(50) - -// An undetermined error occurred inside the DirectSound subsystem -#define DSERR_GENERIC E_FAIL - -// The caller does not have the priority level required for the function to -// succeed -#define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70) - -// Not enough free memory is available to complete the operation -#define DSERR_OUTOFMEMORY E_OUTOFMEMORY - -// The specified WAVE format is not supported -#define DSERR_BADFORMAT MAKE_DSHRESULT(100) - -// The function called is not supported at this time -#define DSERR_UNSUPPORTED E_NOTIMPL - -// No sound driver is available for use -#define DSERR_NODRIVER MAKE_DSHRESULT(120) -// This object is already initialized -#define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130) - -// This object does not support aggregation -#define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION - -// The buffer memory has been lost, and must be restored -#define DSERR_BUFFERLOST MAKE_DSHRESULT(150) - -// Another app has a higher priority level, preventing this call from -// succeeding -#define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT(160) - -// This object has not been initialized -#define DSERR_UNINITIALIZED MAKE_DSHRESULT(170) - -// The requested COM interface is not available -#define DSERR_NOINTERFACE E_NOINTERFACE - -// Access is denied -#define DSERR_ACCESSDENIED E_ACCESSDENIED - -// Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds -#define DSERR_BUFFERTOOSMALL MAKE_DSHRESULT(180) - -// Attempt to use DirectSound 8 functionality on an older DirectSound object -#define DSERR_DS8_REQUIRED MAKE_DSHRESULT(190) - -// A circular loop of send effects was detected -#define DSERR_SENDLOOP MAKE_DSHRESULT(200) - -// The GUID specified in an audiopath file does not match a valid MIXIN buffer -#define DSERR_BADSENDBUFFERGUID MAKE_DSHRESULT(210) - -// The object requested was not found (numerically equal to DMUS_E_NOT_FOUND) -#define DSERR_OBJECTNOTFOUND MAKE_DSHRESULT(4449) - -// The effects requested could not be found on the system, or they were found -// but in the wrong order, or in the wrong hardware/software locations. -#define DSERR_FXUNAVAILABLE MAKE_DSHRESULT(220) - -// -// Flags -// - -#define DSCAPS_PRIMARYMONO 0x00000001 -#define DSCAPS_PRIMARYSTEREO 0x00000002 -#define DSCAPS_PRIMARY8BIT 0x00000004 -#define DSCAPS_PRIMARY16BIT 0x00000008 -#define DSCAPS_CONTINUOUSRATE 0x00000010 -#define DSCAPS_EMULDRIVER 0x00000020 -#define DSCAPS_CERTIFIED 0x00000040 -#define DSCAPS_SECONDARYMONO 0x00000100 -#define DSCAPS_SECONDARYSTEREO 0x00000200 -#define DSCAPS_SECONDARY8BIT 0x00000400 -#define DSCAPS_SECONDARY16BIT 0x00000800 - -#define DSSCL_NORMAL 0x00000001 -#define DSSCL_PRIORITY 0x00000002 -#define DSSCL_EXCLUSIVE 0x00000003 -#define DSSCL_WRITEPRIMARY 0x00000004 - -#define DSSPEAKER_DIRECTOUT 0x00000000 -#define DSSPEAKER_HEADPHONE 0x00000001 -#define DSSPEAKER_MONO 0x00000002 -#define DSSPEAKER_QUAD 0x00000003 -#define DSSPEAKER_STEREO 0x00000004 -#define DSSPEAKER_SURROUND 0x00000005 -#define DSSPEAKER_5POINT1 0x00000006 // obsolete 5.1 setting -#define DSSPEAKER_7POINT1 0x00000007 // obsolete 7.1 setting -#define DSSPEAKER_7POINT1_SURROUND 0x00000008 // correct 7.1 Home Theater setting -#define DSSPEAKER_7POINT1_WIDE DSSPEAKER_7POINT1 -#if (DIRECTSOUND_VERSION >= 0x1000) - #define DSSPEAKER_5POINT1_SURROUND 0x00000009 // correct 5.1 setting - #define DSSPEAKER_5POINT1_BACK DSSPEAKER_5POINT1 -#endif - -#define DSSPEAKER_GEOMETRY_MIN 0x00000005 // 5 degrees -#define DSSPEAKER_GEOMETRY_NARROW 0x0000000A // 10 degrees -#define DSSPEAKER_GEOMETRY_WIDE 0x00000014 // 20 degrees -#define DSSPEAKER_GEOMETRY_MAX 0x000000B4 // 180 degrees - -#define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16)) -#define DSSPEAKER_CONFIG(a) ((BYTE)(a)) -#define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF)) - -#define DSBCAPS_PRIMARYBUFFER 0x00000001 -#define DSBCAPS_STATIC 0x00000002 -#define DSBCAPS_LOCHARDWARE 0x00000004 -#define DSBCAPS_LOCSOFTWARE 0x00000008 -#define DSBCAPS_CTRL3D 0x00000010 -#define DSBCAPS_CTRLFREQUENCY 0x00000020 -#define DSBCAPS_CTRLPAN 0x00000040 -#define DSBCAPS_CTRLVOLUME 0x00000080 -#define DSBCAPS_CTRLPOSITIONNOTIFY 0x00000100 -#define DSBCAPS_CTRLFX 0x00000200 -#define DSBCAPS_STICKYFOCUS 0x00004000 -#define DSBCAPS_GLOBALFOCUS 0x00008000 -#define DSBCAPS_GETCURRENTPOSITION2 0x00010000 -#define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000 -#define DSBCAPS_LOCDEFER 0x00040000 -#if (DIRECTSOUND_VERSION >= 0x1000) - // Force GetCurrentPosition() to return a buffer's true play position; - // unmodified by aids to enhance backward compatibility. - #define DSBCAPS_TRUEPLAYPOSITION 0x00080000 -#endif - -#define DSBPLAY_LOOPING 0x00000001 -#define DSBPLAY_LOCHARDWARE 0x00000002 -#define DSBPLAY_LOCSOFTWARE 0x00000004 -#define DSBPLAY_TERMINATEBY_TIME 0x00000008 -#define DSBPLAY_TERMINATEBY_DISTANCE 0x000000010 -#define DSBPLAY_TERMINATEBY_PRIORITY 0x000000020 - -#define DSBSTATUS_PLAYING 0x00000001 -#define DSBSTATUS_BUFFERLOST 0x00000002 -#define DSBSTATUS_LOOPING 0x00000004 -#define DSBSTATUS_LOCHARDWARE 0x00000008 -#define DSBSTATUS_LOCSOFTWARE 0x00000010 -#define DSBSTATUS_TERMINATED 0x00000020 - -#define DSBLOCK_FROMWRITECURSOR 0x00000001 -#define DSBLOCK_ENTIREBUFFER 0x00000002 - -#define DSBFREQUENCY_ORIGINAL 0 -#define DSBFREQUENCY_MIN 100 -#if DIRECTSOUND_VERSION >= 0x0900 -#define DSBFREQUENCY_MAX 200000 -#else -#define DSBFREQUENCY_MAX 100000 -#endif - -#define DSBPAN_LEFT -10000 -#define DSBPAN_CENTER 0 -#define DSBPAN_RIGHT 10000 - -#define DSBVOLUME_MIN -10000 -#define DSBVOLUME_MAX 0 - -#define DSBSIZE_MIN 4 -#define DSBSIZE_MAX 0x0FFFFFFF -#define DSBSIZE_FX_MIN 150 // NOTE: Milliseconds, not bytes - -#define DSBNOTIFICATIONS_MAX 100000UL - -#define DS3DMODE_NORMAL 0x00000000 -#define DS3DMODE_HEADRELATIVE 0x00000001 -#define DS3DMODE_DISABLE 0x00000002 - -#define DS3D_IMMEDIATE 0x00000000 -#define DS3D_DEFERRED 0x00000001 - -#define DS3D_MINDISTANCEFACTOR FLT_MIN -#define DS3D_MAXDISTANCEFACTOR FLT_MAX -#define DS3D_DEFAULTDISTANCEFACTOR 1.0f - -#define DS3D_MINROLLOFFFACTOR 0.0f -#define DS3D_MAXROLLOFFFACTOR 10.0f -#define DS3D_DEFAULTROLLOFFFACTOR 1.0f - -#define DS3D_MINDOPPLERFACTOR 0.0f -#define DS3D_MAXDOPPLERFACTOR 10.0f -#define DS3D_DEFAULTDOPPLERFACTOR 1.0f - -#define DS3D_DEFAULTMINDISTANCE 1.0f -#define DS3D_DEFAULTMAXDISTANCE 1000000000.0f - -#define DS3D_MINCONEANGLE 0 -#define DS3D_MAXCONEANGLE 360 -#define DS3D_DEFAULTCONEANGLE 360 - -#define DS3D_DEFAULTCONEOUTSIDEVOLUME DSBVOLUME_MAX - -// IDirectSoundCapture attributes - -#define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER -#define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED -#define DSCCAPS_MULTIPLECAPTURE 0x00000001 - -// IDirectSoundCaptureBuffer attributes - -#define DSCBCAPS_WAVEMAPPED 0x80000000 - -#if DIRECTSOUND_VERSION >= 0x0800 -#define DSCBCAPS_CTRLFX 0x00000200 -#endif - - -#define DSCBLOCK_ENTIREBUFFER 0x00000001 - -#define DSCBSTATUS_CAPTURING 0x00000001 -#define DSCBSTATUS_LOOPING 0x00000002 - -#define DSCBSTART_LOOPING 0x00000001 - -#define DSBPN_OFFSETSTOP 0xFFFFFFFF - -#define DS_CERTIFIED 0x00000000 -#define DS_UNCERTIFIED 0x00000001 - - -// -// Flags for the I3DL2 effects -// - -// -// I3DL2 Material Presets -// - -enum -{ - DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW, - DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW, - DSFX_I3DL2_MATERIAL_PRESET_THINDOOR, - DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR, - DSFX_I3DL2_MATERIAL_PRESET_WOODWALL, - DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL, - DSFX_I3DL2_MATERIAL_PRESET_STONEWALL, - DSFX_I3DL2_MATERIAL_PRESET_CURTAIN -}; - -#define I3DL2_MATERIAL_PRESET_SINGLEWINDOW -2800,0.71f -#define I3DL2_MATERIAL_PRESET_DOUBLEWINDOW -5000,0.40f -#define I3DL2_MATERIAL_PRESET_THINDOOR -1800,0.66f -#define I3DL2_MATERIAL_PRESET_THICKDOOR -4400,0.64f -#define I3DL2_MATERIAL_PRESET_WOODWALL -4000,0.50f -#define I3DL2_MATERIAL_PRESET_BRICKWALL -5000,0.60f -#define I3DL2_MATERIAL_PRESET_STONEWALL -6000,0.68f -#define I3DL2_MATERIAL_PRESET_CURTAIN -1200,0.15f - -enum -{ - DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT, - DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC, - DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL, - DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM, - DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL, - DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE, - DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA, - DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR, - DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY, - DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY, - DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR, - DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY, - DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST, - DSFX_I3DL2_ENVIRONMENT_PRESET_CITY, - DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS, - DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY, - DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN, - DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT, - DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE, - DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER, - DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL, - DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL, - DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE -}; - -// -// I3DL2 Reverberation Presets Values -// - -#define I3DL2_ENVIRONMENT_PRESET_DEFAULT -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f, 200, 0.011f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_GENERIC -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f, 200, 0.011f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PADDEDCELL -1000,-6000, 0.0f, 0.17f, 0.10f, -1204, 0.001f, 207, 0.002f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_ROOM -1000, -454, 0.0f, 0.40f, 0.83f, -1646, 0.002f, 53, 0.003f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_BATHROOM -1000,-1200, 0.0f, 1.49f, 0.54f, -370, 0.007f, 1030, 0.011f, 100.0f, 60.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_LIVINGROOM -1000,-6000, 0.0f, 0.50f, 0.10f, -1376, 0.003f, -1104, 0.004f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_STONEROOM -1000, -300, 0.0f, 2.31f, 0.64f, -711, 0.012f, 83, 0.017f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_AUDITORIUM -1000, -476, 0.0f, 4.32f, 0.59f, -789, 0.020f, -289, 0.030f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CONCERTHALL -1000, -500, 0.0f, 3.92f, 0.70f, -1230, 0.020f, -2, 0.029f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CAVE -1000, 0, 0.0f, 2.91f, 1.30f, -602, 0.015f, -302, 0.022f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_ARENA -1000, -698, 0.0f, 7.24f, 0.33f, -1166, 0.020f, 16, 0.030f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_HANGAR -1000,-1000, 0.0f,10.05f, 0.23f, -602, 0.020f, 198, 0.030f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY -1000,-4000, 0.0f, 0.30f, 0.10f, -1831, 0.002f, -1630, 0.030f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_HALLWAY -1000, -300, 0.0f, 1.49f, 0.59f, -1219, 0.007f, 441, 0.011f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR -1000, -237, 0.0f, 2.70f, 0.79f, -1214, 0.013f, 395, 0.020f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_ALLEY -1000, -270, 0.0f, 1.49f, 0.86f, -1204, 0.007f, -4, 0.011f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_FOREST -1000,-3300, 0.0f, 1.49f, 0.54f, -2560, 0.162f, -613, 0.088f, 79.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CITY -1000, -800, 0.0f, 1.49f, 0.67f, -2273, 0.007f, -2217, 0.011f, 50.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_MOUNTAINS -1000,-2500, 0.0f, 1.49f, 0.21f, -2780, 0.300f, -2014, 0.100f, 27.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_QUARRY -1000,-1000, 0.0f, 1.49f, 0.83f,-10000, 0.061f, 500, 0.025f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PLAIN -1000,-2000, 0.0f, 1.49f, 0.50f, -2466, 0.179f, -2514, 0.100f, 21.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PARKINGLOT -1000, 0, 0.0f, 1.65f, 1.50f, -1363, 0.008f, -1153, 0.012f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_SEWERPIPE -1000,-1000, 0.0f, 2.81f, 0.14f, 429, 0.014f, 648, 0.021f, 80.0f, 60.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_UNDERWATER -1000,-4000, 0.0f, 1.49f, 0.10f, -449, 0.007f, 1700, 0.011f, 100.0f, 100.0f, 5000.0f - -// -// Examples simulating 'musical' reverb presets -// -// Name Decay time Description -// Small Room 1.1s A small size room with a length of 5m or so. -// Medium Room 1.3s A medium size room with a length of 10m or so. -// Large Room 1.5s A large size room suitable for live performances. -// Medium Hall 1.8s A medium size concert hall. -// Large Hall 1.8s A large size concert hall suitable for a full orchestra. -// Plate 1.3s A plate reverb simulation. -// - -#define I3DL2_ENVIRONMENT_PRESET_SMALLROOM -1000, -600, 0.0f, 1.10f, 0.83f, -400, 0.005f, 500, 0.010f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM -1000, -600, 0.0f, 1.30f, 0.83f, -1000, 0.010f, -200, 0.020f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_LARGEROOM -1000, -600, 0.0f, 1.50f, 0.83f, -1600, 0.020f, -1000, 0.040f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL -1000, -600, 0.0f, 1.80f, 0.70f, -1300, 0.015f, -800, 0.030f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_LARGEHALL -1000, -600, 0.0f, 1.80f, 0.70f, -2000, 0.030f, -1400, 0.060f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PLATE -1000, -200, 0.0f, 1.30f, 0.90f, 0, 0.002f, 0, 0.010f, 100.0f, 75.0f, 5000.0f - -// -// DirectSound3D Algorithms -// - -// Default DirectSound3D algorithm {00000000-0000-0000-0000-000000000000} -#define DS3DALG_DEFAULT GUID_NULL - -// No virtualization (Pan3D) {C241333F-1C1B-11d2-94F5-00C04FC28ACA} -DEFINE_GUID(DS3DALG_NO_VIRTUALIZATION, 0xc241333f, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); - -// High-quality HRTF algorithm {C2413340-1C1B-11d2-94F5-00C04FC28ACA} -DEFINE_GUID(DS3DALG_HRTF_FULL, 0xc2413340, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); - -// Lower-quality HRTF algorithm {C2413342-1C1B-11d2-94F5-00C04FC28ACA} -DEFINE_GUID(DS3DALG_HRTF_LIGHT, 0xc2413342, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); - - -#if DIRECTSOUND_VERSION >= 0x0800 - -// -// DirectSound Internal Effect Algorithms -// - - -// Gargle {DAFD8210-5711-4B91-9FE3-F75B7AE279BF} -DEFINE_GUID(GUID_DSFX_STANDARD_GARGLE, 0xdafd8210, 0x5711, 0x4b91, 0x9f, 0xe3, 0xf7, 0x5b, 0x7a, 0xe2, 0x79, 0xbf); - -// Chorus {EFE6629C-81F7-4281-BD91-C9D604A95AF6} -DEFINE_GUID(GUID_DSFX_STANDARD_CHORUS, 0xefe6629c, 0x81f7, 0x4281, 0xbd, 0x91, 0xc9, 0xd6, 0x04, 0xa9, 0x5a, 0xf6); - -// Flanger {EFCA3D92-DFD8-4672-A603-7420894BAD98} -DEFINE_GUID(GUID_DSFX_STANDARD_FLANGER, 0xefca3d92, 0xdfd8, 0x4672, 0xa6, 0x03, 0x74, 0x20, 0x89, 0x4b, 0xad, 0x98); - -// Echo/Delay {EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D} -DEFINE_GUID(GUID_DSFX_STANDARD_ECHO, 0xef3e932c, 0xd40b, 0x4f51, 0x8c, 0xcf, 0x3f, 0x98, 0xf1, 0xb2, 0x9d, 0x5d); - -// Distortion {EF114C90-CD1D-484E-96E5-09CFAF912A21} -DEFINE_GUID(GUID_DSFX_STANDARD_DISTORTION, 0xef114c90, 0xcd1d, 0x484e, 0x96, 0xe5, 0x09, 0xcf, 0xaf, 0x91, 0x2a, 0x21); - -// Compressor/Limiter {EF011F79-4000-406D-87AF-BFFB3FC39D57} -DEFINE_GUID(GUID_DSFX_STANDARD_COMPRESSOR, 0xef011f79, 0x4000, 0x406d, 0x87, 0xaf, 0xbf, 0xfb, 0x3f, 0xc3, 0x9d, 0x57); - -// Parametric Equalization {120CED89-3BF4-4173-A132-3CB406CF3231} -DEFINE_GUID(GUID_DSFX_STANDARD_PARAMEQ, 0x120ced89, 0x3bf4, 0x4173, 0xa1, 0x32, 0x3c, 0xb4, 0x06, 0xcf, 0x32, 0x31); - -// I3DL2 Environmental Reverberation: Reverb (Listener) Effect {EF985E71-D5C7-42D4-BA4D-2D073E2E96F4} -DEFINE_GUID(GUID_DSFX_STANDARD_I3DL2REVERB, 0xef985e71, 0xd5c7, 0x42d4, 0xba, 0x4d, 0x2d, 0x07, 0x3e, 0x2e, 0x96, 0xf4); - -// Waves Reverberation {87FC0268-9A55-4360-95AA-004A1D9DE26C} -DEFINE_GUID(GUID_DSFX_WAVES_REVERB, 0x87fc0268, 0x9a55, 0x4360, 0x95, 0xaa, 0x00, 0x4a, 0x1d, 0x9d, 0xe2, 0x6c); - -// -// DirectSound Capture Effect Algorithms -// - - -// Acoustic Echo Canceller {BF963D80-C559-11D0-8A2B-00A0C9255AC1} -// Matches KSNODETYPE_ACOUSTIC_ECHO_CANCEL in ksmedia.h -DEFINE_GUID(GUID_DSCFX_CLASS_AEC, 0xBF963D80L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1); - -// Microsoft AEC {CDEBB919-379A-488a-8765-F53CFD36DE40} -DEFINE_GUID(GUID_DSCFX_MS_AEC, 0xcdebb919, 0x379a, 0x488a, 0x87, 0x65, 0xf5, 0x3c, 0xfd, 0x36, 0xde, 0x40); - -// System AEC {1C22C56D-9879-4f5b-A389-27996DDC2810} -DEFINE_GUID(GUID_DSCFX_SYSTEM_AEC, 0x1c22c56d, 0x9879, 0x4f5b, 0xa3, 0x89, 0x27, 0x99, 0x6d, 0xdc, 0x28, 0x10); - -// Noise Supression {E07F903F-62FD-4e60-8CDD-DEA7236665B5} -// Matches KSNODETYPE_NOISE_SUPPRESS in post Windows ME DDK's ksmedia.h -DEFINE_GUID(GUID_DSCFX_CLASS_NS, 0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5); - -// Microsoft Noise Suppresion {11C5C73B-66E9-4ba1-A0BA-E814C6EED92D} -DEFINE_GUID(GUID_DSCFX_MS_NS, 0x11c5c73b, 0x66e9, 0x4ba1, 0xa0, 0xba, 0xe8, 0x14, 0xc6, 0xee, 0xd9, 0x2d); - -// System Noise Suppresion {5AB0882E-7274-4516-877D-4EEE99BA4FD0} -DEFINE_GUID(GUID_DSCFX_SYSTEM_NS, 0x5ab0882e, 0x7274, 0x4516, 0x87, 0x7d, 0x4e, 0xee, 0x99, 0xba, 0x4f, 0xd0); - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -#endif // __DSOUND_INCLUDED__ - - - -#ifdef __cplusplus -}; -#endif // __cplusplus - diff --git a/source/StkUGens/stk-4.4.4/src/include/ginclude.h b/source/StkUGens/stk-4.4.4/src/include/ginclude.h deleted file mode 100644 index b627dc2e76..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/ginclude.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __gInclude__ -#define __gInclude__ - -#if SGI - #undef BEOS - #undef MAC - #undef WINDOWS - // - #define ASIO_BIG_ENDIAN 1 - #define ASIO_CPU_MIPS 1 -#elif defined WIN32 - #undef BEOS - #undef MAC - #undef SGI - #define WINDOWS 1 - #define ASIO_LITTLE_ENDIAN 1 - #define ASIO_CPU_X86 1 -#elif BEOS - #undef MAC - #undef SGI - #undef WINDOWS - #define ASIO_LITTLE_ENDIAN 1 - #define ASIO_CPU_X86 1 - // -#else - #define MAC 1 - #undef BEOS - #undef WINDOWS - #undef SGI - #define ASIO_BIG_ENDIAN 1 - #define ASIO_CPU_PPC 1 -#endif - -// always -#define NATIVE_INT64 0 -#define IEEE754_64FLOAT 1 - -#endif // __gInclude__ diff --git a/source/StkUGens/stk-4.4.4/src/include/iasiodrv.h b/source/StkUGens/stk-4.4.4/src/include/iasiodrv.h deleted file mode 100644 index 64d2dbb66d..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/iasiodrv.h +++ /dev/null @@ -1,37 +0,0 @@ -#include "asiosys.h" -#include "asio.h" - -/* Forward Declarations */ - -#ifndef __ASIODRIVER_FWD_DEFINED__ -#define __ASIODRIVER_FWD_DEFINED__ -typedef interface IASIO IASIO; -#endif /* __ASIODRIVER_FWD_DEFINED__ */ - -interface IASIO : public IUnknown -{ - - virtual ASIOBool init(void *sysHandle) = 0; - virtual void getDriverName(char *name) = 0; - virtual long getDriverVersion() = 0; - virtual void getErrorMessage(char *string) = 0; - virtual ASIOError start() = 0; - virtual ASIOError stop() = 0; - virtual ASIOError getChannels(long *numInputChannels, long *numOutputChannels) = 0; - virtual ASIOError getLatencies(long *inputLatency, long *outputLatency) = 0; - virtual ASIOError getBufferSize(long *minSize, long *maxSize, - long *preferredSize, long *granularity) = 0; - virtual ASIOError canSampleRate(ASIOSampleRate sampleRate) = 0; - virtual ASIOError getSampleRate(ASIOSampleRate *sampleRate) = 0; - virtual ASIOError setSampleRate(ASIOSampleRate sampleRate) = 0; - virtual ASIOError getClockSources(ASIOClockSource *clocks, long *numSources) = 0; - virtual ASIOError setClockSource(long reference) = 0; - virtual ASIOError getSamplePosition(ASIOSamples *sPos, ASIOTimeStamp *tStamp) = 0; - virtual ASIOError getChannelInfo(ASIOChannelInfo *info) = 0; - virtual ASIOError createBuffers(ASIOBufferInfo *bufferInfos, long numChannels, - long bufferSize, ASIOCallbacks *callbacks) = 0; - virtual ASIOError disposeBuffers() = 0; - virtual ASIOError controlPanel() = 0; - virtual ASIOError future(long selector,void *opt) = 0; - virtual ASIOError outputReady() = 0; -}; diff --git a/source/StkUGens/stk-4.4.4/src/include/iasiothiscallresolver.cpp b/source/StkUGens/stk-4.4.4/src/include/iasiothiscallresolver.cpp deleted file mode 100644 index 08c55eacfc..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/iasiothiscallresolver.cpp +++ /dev/null @@ -1,572 +0,0 @@ -/* - IASIOThiscallResolver.cpp see the comments in iasiothiscallresolver.h for - the top level description - this comment describes the technical details of - the implementation. - - The latest version of this file is available from: - http://www.audiomulch.com/~rossb/code/calliasio - - please email comments to Ross Bencina - - BACKGROUND - - The IASIO interface declared in the Steinberg ASIO 2 SDK declares - functions with no explicit calling convention. This causes MSVC++ to default - to using the thiscall convention, which is a proprietary convention not - implemented by some non-microsoft compilers - notably borland BCC, - C++Builder, and gcc. MSVC++ is the defacto standard compiler used by - Steinberg. As a result of this situation, the ASIO sdk will compile with - any compiler, however attempting to execute the compiled code will cause a - crash due to different default calling conventions on non-Microsoft - compilers. - - IASIOThiscallResolver solves the problem by providing an adapter class that - delegates to the IASIO interface using the correct calling convention - (thiscall). Due to the lack of support for thiscall in the Borland and GCC - compilers, the calls have been implemented in assembly language. - - A number of macros are defined for thiscall function calls with different - numbers of parameters, with and without return values - it may be possible - to modify the format of these macros to make them work with other inline - assemblers. - - - THISCALL DEFINITION - - A number of definitions of the thiscall calling convention are floating - around the internet. The following definition has been validated against - output from the MSVC++ compiler: - - For non-vararg functions, thiscall works as follows: the object (this) - pointer is passed in ECX. All arguments are passed on the stack in - right to left order. The return value is placed in EAX. The callee - clears the passed arguments from the stack. - - - FINDING FUNCTION POINTERS FROM AN IASIO POINTER - - The first field of a COM object is a pointer to its vtble. Thus a pointer - to an object implementing the IASIO interface also points to a pointer to - that object's vtbl. The vtble is a table of function pointers for all of - the virtual functions exposed by the implemented interfaces. - - If we consider a variable declared as a pointer to IASO: - - IASIO *theAsioDriver - - theAsioDriver points to: - - object implementing IASIO - { - IASIOvtbl *vtbl - other data - } - - in other words, theAsioDriver points to a pointer to an IASIOvtbl - - vtbl points to a table of function pointers: - - IASIOvtbl ( interface IASIO : public IUnknown ) - { - (IUnknown functions) - 0 virtual HRESULT STDMETHODCALLTYPE (*QueryInterface)(REFIID riid, void **ppv) = 0; - 4 virtual ULONG STDMETHODCALLTYPE (*AddRef)() = 0; - 8 virtual ULONG STDMETHODCALLTYPE (*Release)() = 0; - - (IASIO functions) - 12 virtual ASIOBool (*init)(void *sysHandle) = 0; - 16 virtual void (*getDriverName)(char *name) = 0; - 20 virtual long (*getDriverVersion)() = 0; - 24 virtual void (*getErrorMessage)(char *string) = 0; - 28 virtual ASIOError (*start)() = 0; - 32 virtual ASIOError (*stop)() = 0; - 36 virtual ASIOError (*getChannels)(long *numInputChannels, long *numOutputChannels) = 0; - 40 virtual ASIOError (*getLatencies)(long *inputLatency, long *outputLatency) = 0; - 44 virtual ASIOError (*getBufferSize)(long *minSize, long *maxSize, - long *preferredSize, long *granularity) = 0; - 48 virtual ASIOError (*canSampleRate)(ASIOSampleRate sampleRate) = 0; - 52 virtual ASIOError (*getSampleRate)(ASIOSampleRate *sampleRate) = 0; - 56 virtual ASIOError (*setSampleRate)(ASIOSampleRate sampleRate) = 0; - 60 virtual ASIOError (*getClockSources)(ASIOClockSource *clocks, long *numSources) = 0; - 64 virtual ASIOError (*setClockSource)(long reference) = 0; - 68 virtual ASIOError (*getSamplePosition)(ASIOSamples *sPos, ASIOTimeStamp *tStamp) = 0; - 72 virtual ASIOError (*getChannelInfo)(ASIOChannelInfo *info) = 0; - 76 virtual ASIOError (*createBuffers)(ASIOBufferInfo *bufferInfos, long numChannels, - long bufferSize, ASIOCallbacks *callbacks) = 0; - 80 virtual ASIOError (*disposeBuffers)() = 0; - 84 virtual ASIOError (*controlPanel)() = 0; - 88 virtual ASIOError (*future)(long selector,void *opt) = 0; - 92 virtual ASIOError (*outputReady)() = 0; - }; - - The numbers in the left column show the byte offset of each function ptr - from the beginning of the vtbl. These numbers are used in the code below - to select different functions. - - In order to find the address of a particular function, theAsioDriver - must first be dereferenced to find the value of the vtbl pointer: - - mov eax, theAsioDriver - mov edx, [theAsioDriver] // edx now points to vtbl[0] - - Then an offset must be added to the vtbl pointer to select a - particular function, for example vtbl+44 points to the slot containing - a pointer to the getBufferSize function. - - Finally vtbl+x must be dereferenced to obtain the value of the function - pointer stored in that address: - - call [edx+44] // call the function pointed to by - // the value in the getBufferSize field of the vtbl - - - SEE ALSO - - Martin Fay's OpenASIO DLL at http://www.martinfay.com solves the same - problem by providing a new COM interface which wraps IASIO with an - interface that uses portable calling conventions. OpenASIO must be compiled - with MSVC, and requires that you ship the OpenASIO DLL with your - application. - - - ACKNOWLEDGEMENTS - - Ross Bencina: worked out the thiscall details above, wrote the original - Borland asm macros, and a patch for asio.cpp (which is no longer needed). - Thanks to Martin Fay for introducing me to the issues discussed here, - and to Rene G. Ceballos for assisting with asm dumps from MSVC++. - - Antti Silvast: converted the original calliasio to work with gcc and NASM - by implementing the asm code in a separate file. - - Fraser Adams: modified the original calliasio containing the Borland inline - asm to add inline asm for gcc i.e. Intel syntax for Borland and AT&T syntax - for gcc. This seems a neater approach for gcc than to have a separate .asm - file and it means that we only need one version of the thiscall patch. - - Fraser Adams: rewrote the original calliasio patch in the form of the - IASIOThiscallResolver class in order to avoid modifications to files from - the Steinberg SDK, which may have had potential licence issues. - - Andrew Baldwin: contributed fixes for compatibility problems with more - recent versions of the gcc assembler. -*/ - - -// We only need IASIOThiscallResolver at all if we are on Win32. For other -// platforms we simply bypass the IASIOThiscallResolver definition to allow us -// to be safely #include'd whatever the platform to keep client code portable -#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) && !defined(_WIN64) - - -// If microsoft compiler we can call IASIO directly so IASIOThiscallResolver -// is not used. -#if !defined(_MSC_VER) - - -#include -#include - -// We have a mechanism in iasiothiscallresolver.h to ensure that asio.h is -// #include'd before it in client code, we do NOT want to do this test here. -#define iasiothiscallresolver_sourcefile 1 -#include "iasiothiscallresolver.h" -#undef iasiothiscallresolver_sourcefile - -// iasiothiscallresolver.h redefines ASIOInit for clients, but we don't want -// this macro defined in this translation unit. -#undef ASIOInit - - -// theAsioDriver is a global pointer to the current IASIO instance which the -// ASIO SDK uses to perform all actions on the IASIO interface. We substitute -// our own forwarding interface into this pointer. -extern IASIO* theAsioDriver; - - -// The following macros define the inline assembler for BORLAND first then gcc - -#if defined(__BCPLUSPLUS__) || defined(__BORLANDC__) - - -#define CALL_THISCALL_0( resultName, thisPtr, funcOffset )\ - void *this_ = (thisPtr); \ - __asm { \ - mov ecx, this_ ; \ - mov eax, [ecx] ; \ - call [eax+funcOffset] ; \ - mov resultName, eax ; \ - } - - -#define CALL_VOID_THISCALL_1( thisPtr, funcOffset, param1 )\ - void *this_ = (thisPtr); \ - __asm { \ - mov eax, param1 ; \ - push eax ; \ - mov ecx, this_ ; \ - mov eax, [ecx] ; \ - call [eax+funcOffset] ; \ - } - - -#define CALL_THISCALL_1( resultName, thisPtr, funcOffset, param1 )\ - void *this_ = (thisPtr); \ - __asm { \ - mov eax, param1 ; \ - push eax ; \ - mov ecx, this_ ; \ - mov eax, [ecx] ; \ - call [eax+funcOffset] ; \ - mov resultName, eax ; \ - } - - -#define CALL_THISCALL_1_DOUBLE( resultName, thisPtr, funcOffset, param1 )\ - void *this_ = (thisPtr); \ - void *doubleParamPtr_ (¶m1); \ - __asm { \ - mov eax, doubleParamPtr_ ; \ - push [eax+4] ; \ - push [eax] ; \ - mov ecx, this_ ; \ - mov eax, [ecx] ; \ - call [eax+funcOffset] ; \ - mov resultName, eax ; \ - } - - -#define CALL_THISCALL_2( resultName, thisPtr, funcOffset, param1, param2 )\ - void *this_ = (thisPtr); \ - __asm { \ - mov eax, param2 ; \ - push eax ; \ - mov eax, param1 ; \ - push eax ; \ - mov ecx, this_ ; \ - mov eax, [ecx] ; \ - call [eax+funcOffset] ; \ - mov resultName, eax ; \ - } - - -#define CALL_THISCALL_4( resultName, thisPtr, funcOffset, param1, param2, param3, param4 )\ - void *this_ = (thisPtr); \ - __asm { \ - mov eax, param4 ; \ - push eax ; \ - mov eax, param3 ; \ - push eax ; \ - mov eax, param2 ; \ - push eax ; \ - mov eax, param1 ; \ - push eax ; \ - mov ecx, this_ ; \ - mov eax, [ecx] ; \ - call [eax+funcOffset] ; \ - mov resultName, eax ; \ - } - - -#elif defined(__GNUC__) - - -#define CALL_THISCALL_0( resultName, thisPtr, funcOffset ) \ - __asm__ __volatile__ ("movl (%1), %%edx\n\t" \ - "call *"#funcOffset"(%%edx)\n\t" \ - :"=a"(resultName) /* Output Operands */ \ - :"c"(thisPtr) /* Input Operands */ \ - : "%edx" /* Clobbered Registers */ \ - ); \ - - -#define CALL_VOID_THISCALL_1( thisPtr, funcOffset, param1 ) \ - __asm__ __volatile__ ("pushl %0\n\t" \ - "movl (%1), %%edx\n\t" \ - "call *"#funcOffset"(%%edx)\n\t" \ - : /* Output Operands */ \ - :"r"(param1), /* Input Operands */ \ - "c"(thisPtr) \ - : "%edx" /* Clobbered Registers */ \ - ); \ - - -#define CALL_THISCALL_1( resultName, thisPtr, funcOffset, param1 ) \ - __asm__ __volatile__ ("pushl %1\n\t" \ - "movl (%2), %%edx\n\t" \ - "call *"#funcOffset"(%%edx)\n\t" \ - :"=a"(resultName) /* Output Operands */ \ - :"r"(param1), /* Input Operands */ \ - "c"(thisPtr) \ - : "%edx" /* Clobbered Registers */ \ - ); \ - - -#define CALL_THISCALL_1_DOUBLE( resultName, thisPtr, funcOffset, param1 ) \ - do { \ - double param1f64 = param1; /* Cast explicitly to double */ \ - double *param1f64Ptr = ¶m1f64; /* Make pointer to address */ \ - __asm__ __volatile__ ("pushl 4(%1)\n\t" \ - "pushl (%1)\n\t" \ - "movl (%2), %%edx\n\t" \ - "call *"#funcOffset"(%%edx);\n\t" \ - : "=a"(resultName) /* Output Operands */ \ - : "r"(param1f64Ptr), /* Input Operands */ \ - "c"(thisPtr), \ - "m"(*param1f64Ptr) /* Using address */ \ - : "%edx" /* Clobbered Registers */ \ - ); \ - } while (0); \ - - -#define CALL_THISCALL_2( resultName, thisPtr, funcOffset, param1, param2 ) \ - __asm__ __volatile__ ("pushl %1\n\t" \ - "pushl %2\n\t" \ - "movl (%3), %%edx\n\t" \ - "call *"#funcOffset"(%%edx)\n\t" \ - :"=a"(resultName) /* Output Operands */ \ - :"r"(param2), /* Input Operands */ \ - "r"(param1), \ - "c"(thisPtr) \ - : "%edx" /* Clobbered Registers */ \ - ); \ - - -#define CALL_THISCALL_4( resultName, thisPtr, funcOffset, param1, param2, param3, param4 )\ - __asm__ __volatile__ ("pushl %1\n\t" \ - "pushl %2\n\t" \ - "pushl %3\n\t" \ - "pushl %4\n\t" \ - "movl (%5), %%edx\n\t" \ - "call *"#funcOffset"(%%edx)\n\t" \ - :"=a"(resultName) /* Output Operands */ \ - :"r"(param4), /* Input Operands */ \ - "r"(param3), \ - "r"(param2), \ - "r"(param1), \ - "c"(thisPtr) \ - : "%edx" /* Clobbered Registers */ \ - ); \ - -#endif - - - -// Our static singleton instance. -IASIOThiscallResolver IASIOThiscallResolver::instance; - -// Constructor called to initialize static Singleton instance above. Note that -// it is important not to clear that_ incase it has already been set by the call -// to placement new in ASIOInit(). -IASIOThiscallResolver::IASIOThiscallResolver() -{ -} - -// Constructor called from ASIOInit() below -IASIOThiscallResolver::IASIOThiscallResolver(IASIO* that) -: that_( that ) -{ -} - -// Implement IUnknown methods as assert(false). IASIOThiscallResolver is not -// really a COM object, just a wrapper which will work with the ASIO SDK. -// If you wanted to use ASIO without the SDK you might want to implement COM -// aggregation in these methods. -HRESULT STDMETHODCALLTYPE IASIOThiscallResolver::QueryInterface(REFIID riid, void **ppv) -{ - (void)riid; // suppress unused variable warning - - assert( false ); // this function should never be called by the ASIO SDK. - - *ppv = NULL; - return E_NOINTERFACE; -} - -ULONG STDMETHODCALLTYPE IASIOThiscallResolver::AddRef() -{ - assert( false ); // this function should never be called by the ASIO SDK. - - return 1; -} - -ULONG STDMETHODCALLTYPE IASIOThiscallResolver::Release() -{ - assert( false ); // this function should never be called by the ASIO SDK. - - return 1; -} - - -// Implement the IASIO interface methods by performing the vptr manipulation -// described above then delegating to the real implementation. -ASIOBool IASIOThiscallResolver::init(void *sysHandle) -{ - ASIOBool result; - CALL_THISCALL_1( result, that_, 12, sysHandle ); - return result; -} - -void IASIOThiscallResolver::getDriverName(char *name) -{ - CALL_VOID_THISCALL_1( that_, 16, name ); -} - -long IASIOThiscallResolver::getDriverVersion() -{ - ASIOBool result; - CALL_THISCALL_0( result, that_, 20 ); - return result; -} - -void IASIOThiscallResolver::getErrorMessage(char *string) -{ - CALL_VOID_THISCALL_1( that_, 24, string ); -} - -ASIOError IASIOThiscallResolver::start() -{ - ASIOBool result; - CALL_THISCALL_0( result, that_, 28 ); - return result; -} - -ASIOError IASIOThiscallResolver::stop() -{ - ASIOBool result; - CALL_THISCALL_0( result, that_, 32 ); - return result; -} - -ASIOError IASIOThiscallResolver::getChannels(long *numInputChannels, long *numOutputChannels) -{ - ASIOBool result; - CALL_THISCALL_2( result, that_, 36, numInputChannels, numOutputChannels ); - return result; -} - -ASIOError IASIOThiscallResolver::getLatencies(long *inputLatency, long *outputLatency) -{ - ASIOBool result; - CALL_THISCALL_2( result, that_, 40, inputLatency, outputLatency ); - return result; -} - -ASIOError IASIOThiscallResolver::getBufferSize(long *minSize, long *maxSize, - long *preferredSize, long *granularity) -{ - ASIOBool result; - CALL_THISCALL_4( result, that_, 44, minSize, maxSize, preferredSize, granularity ); - return result; -} - -ASIOError IASIOThiscallResolver::canSampleRate(ASIOSampleRate sampleRate) -{ - ASIOBool result; - CALL_THISCALL_1_DOUBLE( result, that_, 48, sampleRate ); - return result; -} - -ASIOError IASIOThiscallResolver::getSampleRate(ASIOSampleRate *sampleRate) -{ - ASIOBool result; - CALL_THISCALL_1( result, that_, 52, sampleRate ); - return result; -} - -ASIOError IASIOThiscallResolver::setSampleRate(ASIOSampleRate sampleRate) -{ - ASIOBool result; - CALL_THISCALL_1_DOUBLE( result, that_, 56, sampleRate ); - return result; -} - -ASIOError IASIOThiscallResolver::getClockSources(ASIOClockSource *clocks, long *numSources) -{ - ASIOBool result; - CALL_THISCALL_2( result, that_, 60, clocks, numSources ); - return result; -} - -ASIOError IASIOThiscallResolver::setClockSource(long reference) -{ - ASIOBool result; - CALL_THISCALL_1( result, that_, 64, reference ); - return result; -} - -ASIOError IASIOThiscallResolver::getSamplePosition(ASIOSamples *sPos, ASIOTimeStamp *tStamp) -{ - ASIOBool result; - CALL_THISCALL_2( result, that_, 68, sPos, tStamp ); - return result; -} - -ASIOError IASIOThiscallResolver::getChannelInfo(ASIOChannelInfo *info) -{ - ASIOBool result; - CALL_THISCALL_1( result, that_, 72, info ); - return result; -} - -ASIOError IASIOThiscallResolver::createBuffers(ASIOBufferInfo *bufferInfos, - long numChannels, long bufferSize, ASIOCallbacks *callbacks) -{ - ASIOBool result; - CALL_THISCALL_4( result, that_, 76, bufferInfos, numChannels, bufferSize, callbacks ); - return result; -} - -ASIOError IASIOThiscallResolver::disposeBuffers() -{ - ASIOBool result; - CALL_THISCALL_0( result, that_, 80 ); - return result; -} - -ASIOError IASIOThiscallResolver::controlPanel() -{ - ASIOBool result; - CALL_THISCALL_0( result, that_, 84 ); - return result; -} - -ASIOError IASIOThiscallResolver::future(long selector,void *opt) -{ - ASIOBool result; - CALL_THISCALL_2( result, that_, 88, selector, opt ); - return result; -} - -ASIOError IASIOThiscallResolver::outputReady() -{ - ASIOBool result; - CALL_THISCALL_0( result, that_, 92 ); - return result; -} - - -// Implement our substitute ASIOInit() method -ASIOError IASIOThiscallResolver::ASIOInit(ASIODriverInfo *info) -{ - // To ensure that our instance's vptr is correctly constructed, even if - // ASIOInit is called prior to main(), we explicitly call its constructor - // (potentially over the top of an existing instance). Note that this is - // pretty ugly, and is only safe because IASIOThiscallResolver has no - // destructor and contains no objects with destructors. - new((void*)&instance) IASIOThiscallResolver( theAsioDriver ); - - // Interpose between ASIO client code and the real driver. - theAsioDriver = &instance; - - // Note that we never need to switch theAsioDriver back to point to the - // real driver because theAsioDriver is reset to zero in ASIOExit(). - - // Delegate to the real ASIOInit - return ::ASIOInit(info); -} - - -#endif /* !defined(_MSC_VER) */ - -#endif /* Win32 */ - diff --git a/source/StkUGens/stk-4.4.4/src/include/iasiothiscallresolver.h b/source/StkUGens/stk-4.4.4/src/include/iasiothiscallresolver.h deleted file mode 100644 index 63e91ca319..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/iasiothiscallresolver.h +++ /dev/null @@ -1,202 +0,0 @@ -// **************************************************************************** -// -// Changed: I have modified this file slightly (includes) to work with -// RtAudio. RtAudio.cpp must include this file after asio.h. -// -// File: IASIOThiscallResolver.h -// Description: The IASIOThiscallResolver class implements the IASIO -// interface and acts as a proxy to the real IASIO interface by -// calling through its vptr table using the thiscall calling -// convention. To put it another way, we interpose -// IASIOThiscallResolver between ASIO SDK code and the driver. -// This is necessary because most non-Microsoft compilers don't -// implement the thiscall calling convention used by IASIO. -// -// iasiothiscallresolver.cpp contains the background of this -// problem plus a technical description of the vptr -// manipulations. -// -// In order to use this mechanism one simply has to add -// iasiothiscallresolver.cpp to the list of files to compile -// and #include -// -// Note that this #include must come after the other ASIO SDK -// #includes, for example: -// -// #include -// #include -// #include -// #include -// #include -// -// Actually the important thing is to #include -// after . We have -// incorporated a test to enforce this ordering. -// -// The code transparently takes care of the interposition by -// using macro substitution to intercept calls to ASIOInit() -// and ASIOExit(). We save the original ASIO global -// "theAsioDriver" in our "that" variable, and then set -// "theAsioDriver" to equal our IASIOThiscallResolver instance. -// -// Whilst this method of resolving the thiscall problem requires -// the addition of #include to client -// code it has the advantage that it does not break the terms -// of the ASIO licence by publishing it. We are NOT modifying -// any Steinberg code here, we are merely implementing the IASIO -// interface in the same way that we would need to do if we -// wished to provide an open source ASIO driver. -// -// For compilation with MinGW -lole32 needs to be added to the -// linker options. For BORLAND, linking with Import32.lib is -// sufficient. -// -// The dependencies are with: CoInitialize, CoUninitialize, -// CoCreateInstance, CLSIDFromString - used by asiolist.cpp -// and are required on Windows whether ThiscallResolver is used -// or not. -// -// Searching for the above strings in the root library path -// of your compiler should enable the correct libraries to be -// identified if they aren't immediately obvious. -// -// Note that the current implementation of IASIOThiscallResolver -// is not COM compliant - it does not correctly implement the -// IUnknown interface. Implementing it is not necessary because -// it is not called by parts of the ASIO SDK which call through -// theAsioDriver ptr. The IUnknown methods are implemented as -// assert(false) to ensure that the code fails if they are -// ever called. -// Restrictions: None. Public Domain & Open Source distribute freely -// You may use IASIOThiscallResolver commercially as well as -// privately. -// You the user assume the responsibility for the use of the -// files, binary or text, and there is no guarantee or warranty, -// expressed or implied, including but not limited to the -// implied warranties of merchantability and fitness for a -// particular purpose. You assume all responsibility and agree -// to hold no entity, copyright holder or distributors liable -// for any loss of data or inaccurate representations of data -// as a result of using IASIOThiscallResolver. -// Version: 1.4 Added separate macro CALL_THISCALL_1_DOUBLE from -// Andrew Baldwin, and volatile for whole gcc asm blocks, -// both for compatibility with newer gcc versions. Cleaned up -// Borland asm to use one less register. -// 1.3 Switched to including assert.h for better compatibility. -// Wrapped entire .h and .cpp contents with a check for -// _MSC_VER to provide better compatibility with MS compilers. -// Changed Singleton implementation to use static instance -// instead of freestore allocated instance. Removed ASIOExit -// macro as it is no longer needed. -// 1.2 Removed semicolons from ASIOInit and ASIOExit macros to -// allow them to be embedded in expressions (if statements). -// Cleaned up some comments. Removed combase.c dependency (it -// doesn't compile with BCB anyway) by stubbing IUnknown. -// 1.1 Incorporated comments from Ross Bencina including things -// such as changing name from ThiscallResolver to -// IASIOThiscallResolver, tidying up the constructor, fixing -// a bug in IASIOThiscallResolver::ASIOExit() and improving -// portability through the use of conditional compilation -// 1.0 Initial working version. -// Created: 6/09/2003 -// Authors: Fraser Adams -// Ross Bencina -// Rene G. Ceballos -// Martin Fay -// Antti Silvast -// Andrew Baldwin -// -// **************************************************************************** - - -#ifndef included_iasiothiscallresolver_h -#define included_iasiothiscallresolver_h - -// We only need IASIOThiscallResolver at all if we are on Win32. For other -// platforms we simply bypass the IASIOThiscallResolver definition to allow us -// to be safely #include'd whatever the platform to keep client code portable -//#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) -#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) && !defined(_WIN64) - - -// If microsoft compiler we can call IASIO directly so IASIOThiscallResolver -// is not used. -#if !defined(_MSC_VER) - - -// The following is in order to ensure that this header is only included after -// the other ASIO headers (except for the case of iasiothiscallresolver.cpp). -// We need to do this because IASIOThiscallResolver works by eclipsing the -// original definition of ASIOInit() with a macro (see below). -#if !defined(iasiothiscallresolver_sourcefile) - #if !defined(__ASIO_H) - #error iasiothiscallresolver.h must be included AFTER asio.h - #endif -#endif - -#include -#include "iasiodrv.h" /* From ASIO SDK */ - - -class IASIOThiscallResolver : public IASIO { -private: - IASIO* that_; // Points to the real IASIO - - static IASIOThiscallResolver instance; // Singleton instance - - // Constructors - declared private so construction is limited to - // our Singleton instance - IASIOThiscallResolver(); - IASIOThiscallResolver(IASIO* that); -public: - - // Methods from the IUnknown interface. We don't fully implement IUnknown - // because the ASIO SDK never calls these methods through theAsioDriver ptr. - // These methods are implemented as assert(false). - virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv); - virtual ULONG STDMETHODCALLTYPE AddRef(); - virtual ULONG STDMETHODCALLTYPE Release(); - - // Methods from the IASIO interface, implemented as forwarning calls to that. - virtual ASIOBool init(void *sysHandle); - virtual void getDriverName(char *name); - virtual long getDriverVersion(); - virtual void getErrorMessage(char *string); - virtual ASIOError start(); - virtual ASIOError stop(); - virtual ASIOError getChannels(long *numInputChannels, long *numOutputChannels); - virtual ASIOError getLatencies(long *inputLatency, long *outputLatency); - virtual ASIOError getBufferSize(long *minSize, long *maxSize, long *preferredSize, long *granularity); - virtual ASIOError canSampleRate(ASIOSampleRate sampleRate); - virtual ASIOError getSampleRate(ASIOSampleRate *sampleRate); - virtual ASIOError setSampleRate(ASIOSampleRate sampleRate); - virtual ASIOError getClockSources(ASIOClockSource *clocks, long *numSources); - virtual ASIOError setClockSource(long reference); - virtual ASIOError getSamplePosition(ASIOSamples *sPos, ASIOTimeStamp *tStamp); - virtual ASIOError getChannelInfo(ASIOChannelInfo *info); - virtual ASIOError createBuffers(ASIOBufferInfo *bufferInfos, long numChannels, long bufferSize, ASIOCallbacks *callbacks); - virtual ASIOError disposeBuffers(); - virtual ASIOError controlPanel(); - virtual ASIOError future(long selector,void *opt); - virtual ASIOError outputReady(); - - // Class method, see ASIOInit() macro below. - static ASIOError ASIOInit(ASIODriverInfo *info); // Delegates to ::ASIOInit -}; - - -// Replace calls to ASIOInit with our interposing version. -// This macro enables us to perform thiscall resolution simply by #including -// after the asio #includes (this file _must_ be -// included _after_ the asio #includes) - -#define ASIOInit(name) IASIOThiscallResolver::ASIOInit((name)) - - -#endif /* !defined(_MSC_VER) */ - -#endif /* Win32 */ - -#endif /* included_iasiothiscallresolver_h */ - - diff --git a/source/StkUGens/stk-4.4.4/src/include/soundcard.h b/source/StkUGens/stk-4.4.4/src/include/soundcard.h deleted file mode 100644 index 2cf3a2c5bf..0000000000 --- a/source/StkUGens/stk-4.4.4/src/include/soundcard.h +++ /dev/null @@ -1,1878 +0,0 @@ -/* - * soundcard.h - */ - -/*- - * Copyright by Hannu Savolainen 1993 / 4Front Technologies 1993-2006 - * Modified for the new FreeBSD sound driver by Luigi Rizzo, 1997 - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD: src/sys/sys/soundcard.h,v 1.48 2006/11/26 11:55:48 netchild Exp $ - */ - -/* - * Unless coordinating changes with 4Front Technologies, do NOT make any - * modifications to ioctl commands, types, etc. that would break - * compatibility with the OSS API. - */ - -#ifndef _SYS_SOUNDCARD_H_ -#define _SYS_SOUNDCARD_H_ - /* - * If you make modifications to this file, please contact me before - * distributing the modified version. There is already enough - * diversity in the world. - * - * Regards, - * Hannu Savolainen - * hannu@voxware.pp.fi - * - ********************************************************************** - * PS. The Hacker's Guide to VoxWare available from - * nic.funet.fi:pub/Linux/ALPHA/sound. The file is - * snd-sdk-doc-0.1.ps.gz (gzipped postscript). It contains - * some useful information about programming with VoxWare. - * (NOTE! The pub/Linux/ALPHA/ directories are hidden. You have - * to cd inside them before the files are accessible.) - ********************************************************************** - */ - -/* - * SOUND_VERSION is only used by the voxware driver. Hopefully apps - * should not depend on it, but rather look at the capabilities - * of the driver in the kernel! - */ -#define SOUND_VERSION 301 -#define VOXWARE /* does this have any use ? */ - -/* - * Supported card ID numbers (Should be somewhere else? We keep - * them here just for compativility with the old driver, but these - * constants are of little or no use). - */ - -#define SNDCARD_ADLIB 1 -#define SNDCARD_SB 2 -#define SNDCARD_PAS 3 -#define SNDCARD_GUS 4 -#define SNDCARD_MPU401 5 -#define SNDCARD_SB16 6 -#define SNDCARD_SB16MIDI 7 -#define SNDCARD_UART6850 8 -#define SNDCARD_GUS16 9 -#define SNDCARD_MSS 10 -#define SNDCARD_PSS 11 -#define SNDCARD_SSCAPE 12 -#define SNDCARD_PSS_MPU 13 -#define SNDCARD_PSS_MSS 14 -#define SNDCARD_SSCAPE_MSS 15 -#define SNDCARD_TRXPRO 16 -#define SNDCARD_TRXPRO_SB 17 -#define SNDCARD_TRXPRO_MPU 18 -#define SNDCARD_MAD16 19 -#define SNDCARD_MAD16_MPU 20 -#define SNDCARD_CS4232 21 -#define SNDCARD_CS4232_MPU 22 -#define SNDCARD_MAUI 23 -#define SNDCARD_PSEUDO_MSS 24 -#define SNDCARD_AWE32 25 -#define SNDCARD_NSS 26 -#define SNDCARD_UART16550 27 -#define SNDCARD_OPL 28 - -#include -#include -#ifndef _IOWR -#include -#endif /* !_IOWR */ - -/* - * The first part of this file contains the new FreeBSD sound ioctl - * interface. Tries to minimize the number of different ioctls, and - * to be reasonably general. - * - * 970821: some of the new calls have not been implemented yet. - */ - -/* - * the following three calls extend the generic file descriptor - * interface. AIONWRITE is the dual of FIONREAD, i.e. returns the max - * number of bytes for a write operation to be non-blocking. - * - * AIOGSIZE/AIOSSIZE are used to change the behaviour of the device, - * from a character device (default) to a block device. In block mode, - * (not to be confused with blocking mode) the main difference for the - * application is that select() will return only when a complete - * block can be read/written to the device, whereas in character mode - * select will return true when one byte can be exchanged. For audio - * devices, character mode makes select almost useless since one byte - * will always be ready by the next sample time (which is often only a - * handful of microseconds away). - * Use a size of 0 or 1 to return to character mode. - */ -#define AIONWRITE _IOR('A', 10, int) /* get # bytes to write */ -struct snd_size { - int play_size; - int rec_size; -}; -#define AIOGSIZE _IOR('A', 11, struct snd_size)/* read current blocksize */ -#define AIOSSIZE _IOWR('A', 11, struct snd_size) /* sets blocksize */ - -/* - * The following constants define supported audio formats. The - * encoding follows voxware conventions, i.e. 1 bit for each supported - * format. We extend it by using bit 31 (RO) to indicate full-duplex - * capability, and bit 29 (RO) to indicate that the card supports/ - * needs different formats on capture & playback channels. - * Bit 29 (RW) is used to indicate/ask stereo. - * - * The number of bits required to store the sample is: - * o 4 bits for the IDA ADPCM format, - * o 8 bits for 8-bit formats, mu-law and A-law, - * o 16 bits for the 16-bit formats, and - * o 32 bits for the 24/32-bit formats. - * o undefined for the MPEG audio format. - */ - -#define AFMT_QUERY 0x00000000 /* Return current format */ -#define AFMT_MU_LAW 0x00000001 /* Logarithmic mu-law */ -#define AFMT_A_LAW 0x00000002 /* Logarithmic A-law */ -#define AFMT_IMA_ADPCM 0x00000004 /* A 4:1 compressed format where 16-bit - * squence represented using the - * the average 4 bits per sample */ -#define AFMT_U8 0x00000008 /* Unsigned 8-bit */ -#define AFMT_S16_LE 0x00000010 /* Little endian signed 16-bit */ -#define AFMT_S16_BE 0x00000020 /* Big endian signed 16-bit */ -#define AFMT_S8 0x00000040 /* Signed 8-bit */ -#define AFMT_U16_LE 0x00000080 /* Little endian unsigned 16-bit */ -#define AFMT_U16_BE 0x00000100 /* Big endian unsigned 16-bit */ -#define AFMT_MPEG 0x00000200 /* MPEG MP2/MP3 audio */ -#define AFMT_AC3 0x00000400 /* Dolby Digital AC3 */ - -#if _BYTE_ORDER == _LITTLE_ENDIAN -#define AFMT_S16_NE AFMT_S16_LE /* native endian signed 16 */ -#else -#define AFMT_S16_NE AFMT_S16_BE -#endif - -/* - * 32-bit formats below used for 24-bit audio data where the data is stored - * in the 24 most significant bits and the least significant bits are not used - * (should be set to 0). - */ -#define AFMT_S32_LE 0x00001000 /* Little endian signed 32-bit */ -#define AFMT_S32_BE 0x00002000 /* Big endian signed 32-bit */ -#define AFMT_U32_LE 0x00004000 /* Little endian unsigned 32-bit */ -#define AFMT_U32_BE 0x00008000 /* Big endian unsigned 32-bit */ -#define AFMT_S24_LE 0x00010000 /* Little endian signed 24-bit */ -#define AFMT_S24_BE 0x00020000 /* Big endian signed 24-bit */ -#define AFMT_U24_LE 0x00040000 /* Little endian unsigned 24-bit */ -#define AFMT_U24_BE 0x00080000 /* Big endian unsigned 24-bit */ - -#define AFMT_STEREO 0x10000000 /* can do/want stereo */ - -/* - * the following are really capabilities - */ -#define AFMT_WEIRD 0x20000000 /* weird hardware... */ - /* - * AFMT_WEIRD reports that the hardware might need to operate - * with different formats in the playback and capture - * channels when operating in full duplex. - * As an example, SoundBlaster16 cards only support U8 in one - * direction and S16 in the other one, and applications should - * be aware of this limitation. - */ -#define AFMT_FULLDUPLEX 0x80000000 /* can do full duplex */ - -/* - * The following structure is used to get/set format and sampling rate. - * While it would be better to have things such as stereo, bits per - * sample, endiannes, etc split in different variables, it turns out - * that formats are not that many, and not all combinations are possible. - * So we followed the Voxware approach of associating one bit to each - * format. - */ - -typedef struct _snd_chan_param { - u_long play_rate; /* sampling rate */ - u_long rec_rate; /* sampling rate */ - u_long play_format; /* everything describing the format */ - u_long rec_format; /* everything describing the format */ -} snd_chan_param; -#define AIOGFMT _IOR('f', 12, snd_chan_param) /* get format */ -#define AIOSFMT _IOWR('f', 12, snd_chan_param) /* sets format */ - -/* - * The following structure is used to get/set the mixer setting. - * Up to 32 mixers are supported, each one with up to 32 channels. - */ -typedef struct _snd_mix_param { - u_char subdev; /* which output */ - u_char line; /* which input */ - u_char left,right; /* volumes, 0..255, 0 = mute */ -} snd_mix_param ; - -/* XXX AIOGMIX, AIOSMIX not implemented yet */ -#define AIOGMIX _IOWR('A', 13, snd_mix_param) /* return mixer status */ -#define AIOSMIX _IOWR('A', 14, snd_mix_param) /* sets mixer status */ - -/* - * channel specifiers used in AIOSTOP and AIOSYNC - */ -#define AIOSYNC_PLAY 0x1 /* play chan */ -#define AIOSYNC_CAPTURE 0x2 /* capture chan */ -/* AIOSTOP stop & flush a channel, returns the residual count */ -#define AIOSTOP _IOWR ('A', 15, int) - -/* alternate method used to notify the sync condition */ -#define AIOSYNC_SIGNAL 0x100 -#define AIOSYNC_SELECT 0x200 - -/* what the 'pos' field refers to */ -#define AIOSYNC_READY 0x400 -#define AIOSYNC_FREE 0x800 - -typedef struct _snd_sync_parm { - long chan ; /* play or capture channel, plus modifier */ - long pos; -} snd_sync_parm; -#define AIOSYNC _IOWR ('A', 15, snd_sync_parm) /* misc. synchronization */ - -/* - * The following is used to return device capabilities. If the structure - * passed to the ioctl is zeroed, default values are returned for rate - * and formats, a bitmap of available mixers is returned, and values - * (inputs, different levels) for the first one are returned. - * - * If formats, mixers, inputs are instantiated, then detailed info - * are returned depending on the call. - */ -typedef struct _snd_capabilities { - u_long rate_min, rate_max; /* min-max sampling rate */ - u_long formats; - u_long bufsize; /* DMA buffer size */ - u_long mixers; /* bitmap of available mixers */ - u_long inputs; /* bitmap of available inputs (per mixer) */ - u_short left, right; /* how many levels are supported */ -} snd_capabilities; -#define AIOGCAP _IOWR('A', 15, snd_capabilities) /* get capabilities */ - -/* - * here is the old (Voxware) ioctl interface - */ - -/* - * IOCTL Commands for /dev/sequencer - */ - -#define SNDCTL_SEQ_RESET _IO ('Q', 0) -#define SNDCTL_SEQ_SYNC _IO ('Q', 1) -#define SNDCTL_SYNTH_INFO _IOWR('Q', 2, struct synth_info) -#define SNDCTL_SEQ_CTRLRATE _IOWR('Q', 3, int) /* Set/get timer res.(hz) */ -#define SNDCTL_SEQ_GETOUTCOUNT _IOR ('Q', 4, int) -#define SNDCTL_SEQ_GETINCOUNT _IOR ('Q', 5, int) -#define SNDCTL_SEQ_PERCMODE _IOW ('Q', 6, int) -#define SNDCTL_FM_LOAD_INSTR _IOW ('Q', 7, struct sbi_instrument) /* Valid for FM only */ -#define SNDCTL_SEQ_TESTMIDI _IOW ('Q', 8, int) -#define SNDCTL_SEQ_RESETSAMPLES _IOW ('Q', 9, int) -#define SNDCTL_SEQ_NRSYNTHS _IOR ('Q',10, int) -#define SNDCTL_SEQ_NRMIDIS _IOR ('Q',11, int) -#define SNDCTL_MIDI_INFO _IOWR('Q',12, struct midi_info) -#define SNDCTL_SEQ_THRESHOLD _IOW ('Q',13, int) -#define SNDCTL_SEQ_TRESHOLD SNDCTL_SEQ_THRESHOLD /* there was once a typo */ -#define SNDCTL_SYNTH_MEMAVL _IOWR('Q',14, int) /* in=dev#, out=memsize */ -#define SNDCTL_FM_4OP_ENABLE _IOW ('Q',15, int) /* in=dev# */ -#define SNDCTL_PMGR_ACCESS _IOWR('Q',16, struct patmgr_info) -#define SNDCTL_SEQ_PANIC _IO ('Q',17) -#define SNDCTL_SEQ_OUTOFBAND _IOW ('Q',18, struct seq_event_rec) -#define SNDCTL_SEQ_GETTIME _IOR ('Q',19, int) - -struct seq_event_rec { - u_char arr[8]; -}; - -#define SNDCTL_TMR_TIMEBASE _IOWR('T', 1, int) -#define SNDCTL_TMR_START _IO ('T', 2) -#define SNDCTL_TMR_STOP _IO ('T', 3) -#define SNDCTL_TMR_CONTINUE _IO ('T', 4) -#define SNDCTL_TMR_TEMPO _IOWR('T', 5, int) -#define SNDCTL_TMR_SOURCE _IOWR('T', 6, int) -# define TMR_INTERNAL 0x00000001 -# define TMR_EXTERNAL 0x00000002 -# define TMR_MODE_MIDI 0x00000010 -# define TMR_MODE_FSK 0x00000020 -# define TMR_MODE_CLS 0x00000040 -# define TMR_MODE_SMPTE 0x00000080 -#define SNDCTL_TMR_METRONOME _IOW ('T', 7, int) -#define SNDCTL_TMR_SELECT _IOW ('T', 8, int) - -/* - * Endian aware patch key generation algorithm. - */ - -#if defined(_AIX) || defined(AIX) -# define _PATCHKEY(id) (0xfd00|id) -#else -# define _PATCHKEY(id) ((id<<8)|0xfd) -#endif - -/* - * Sample loading mechanism for internal synthesizers (/dev/sequencer) - * The following patch_info structure has been designed to support - * Gravis UltraSound. It tries to be universal format for uploading - * sample based patches but is probably too limited. - */ - -struct patch_info { -/* u_short key; Use GUS_PATCH here */ - short key; /* Use GUS_PATCH here */ -#define GUS_PATCH _PATCHKEY(0x04) -#define OBSOLETE_GUS_PATCH _PATCHKEY(0x02) - - short device_no; /* Synthesizer number */ - short instr_no; /* Midi pgm# */ - - u_long mode; -/* - * The least significant byte has the same format than the GUS .PAT - * files - */ -#define WAVE_16_BITS 0x01 /* bit 0 = 8 or 16 bit wave data. */ -#define WAVE_UNSIGNED 0x02 /* bit 1 = Signed - Unsigned data. */ -#define WAVE_LOOPING 0x04 /* bit 2 = looping enabled-1. */ -#define WAVE_BIDIR_LOOP 0x08 /* bit 3 = Set is bidirectional looping. */ -#define WAVE_LOOP_BACK 0x10 /* bit 4 = Set is looping backward. */ -#define WAVE_SUSTAIN_ON 0x20 /* bit 5 = Turn sustaining on. (Env. pts. 3)*/ -#define WAVE_ENVELOPES 0x40 /* bit 6 = Enable envelopes - 1 */ - /* (use the env_rate/env_offs fields). */ -/* Linux specific bits */ -#define WAVE_VIBRATO 0x00010000 /* The vibrato info is valid */ -#define WAVE_TREMOLO 0x00020000 /* The tremolo info is valid */ -#define WAVE_SCALE 0x00040000 /* The scaling info is valid */ -/* Other bits must be zeroed */ - - long len; /* Size of the wave data in bytes */ - long loop_start, loop_end; /* Byte offsets from the beginning */ - -/* - * The base_freq and base_note fields are used when computing the - * playback speed for a note. The base_note defines the tone frequency - * which is heard if the sample is played using the base_freq as the - * playback speed. - * - * The low_note and high_note fields define the minimum and maximum note - * frequencies for which this sample is valid. It is possible to define - * more than one samples for an instrument number at the same time. The - * low_note and high_note fields are used to select the most suitable one. - * - * The fields base_note, high_note and low_note should contain - * the note frequency multiplied by 1000. For example value for the - * middle A is 440*1000. - */ - - u_int base_freq; - u_long base_note; - u_long high_note; - u_long low_note; - int panning; /* -128=left, 127=right */ - int detuning; - -/* New fields introduced in version 1.99.5 */ - - /* Envelope. Enabled by mode bit WAVE_ENVELOPES */ - u_char env_rate[ 6 ]; /* GUS HW ramping rate */ - u_char env_offset[ 6 ]; /* 255 == 100% */ - - /* - * The tremolo, vibrato and scale info are not supported yet. - * Enable by setting the mode bits WAVE_TREMOLO, WAVE_VIBRATO or - * WAVE_SCALE - */ - - u_char tremolo_sweep; - u_char tremolo_rate; - u_char tremolo_depth; - - u_char vibrato_sweep; - u_char vibrato_rate; - u_char vibrato_depth; - - int scale_frequency; - u_int scale_factor; /* from 0 to 2048 or 0 to 2 */ - - int volume; - int spare[4]; - char data[1]; /* The waveform data starts here */ -}; - -struct sysex_info { - short key; /* Use GUS_PATCH here */ -#define SYSEX_PATCH _PATCHKEY(0x05) -#define MAUI_PATCH _PATCHKEY(0x06) - short device_no; /* Synthesizer number */ - long len; /* Size of the sysex data in bytes */ - u_char data[1]; /* Sysex data starts here */ -}; - -/* - * Patch management interface (/dev/sequencer, /dev/patmgr#) - * Don't use these calls if you want to maintain compatibility with - * the future versions of the driver. - */ - -#define PS_NO_PATCHES 0 /* No patch support on device */ -#define PS_MGR_NOT_OK 1 /* Plain patch support (no mgr) */ -#define PS_MGR_OK 2 /* Patch manager supported */ -#define PS_MANAGED 3 /* Patch manager running */ - -#define SNDCTL_PMGR_IFACE _IOWR('P', 1, struct patmgr_info) - -/* - * The patmgr_info is a fixed size structure which is used for two - * different purposes. The intended use is for communication between - * the application using /dev/sequencer and the patch manager daemon - * associated with a synthesizer device (ioctl(SNDCTL_PMGR_ACCESS)). - * - * This structure is also used with ioctl(SNDCTL_PGMR_IFACE) which allows - * a patch manager daemon to read and write device parameters. This - * ioctl available through /dev/sequencer also. Avoid using it since it's - * extremely hardware dependent. In addition access trough /dev/sequencer - * may confuse the patch manager daemon. - */ - -struct patmgr_info { /* Note! size must be < 4k since kmalloc() is used */ - u_long key; /* Don't worry. Reserved for communication - between the patch manager and the driver. */ -#define PM_K_EVENT 1 /* Event from the /dev/sequencer driver */ -#define PM_K_COMMAND 2 /* Request from an application */ -#define PM_K_RESPONSE 3 /* From patmgr to application */ -#define PM_ERROR 4 /* Error returned by the patmgr */ - int device; - int command; - -/* - * Commands 0x000 to 0xfff reserved for patch manager programs - */ -#define PM_GET_DEVTYPE 1 /* Returns type of the patch mgr interface of dev */ -#define PMTYPE_FM2 1 /* 2 OP fm */ -#define PMTYPE_FM4 2 /* Mixed 4 or 2 op FM (OPL-3) */ -#define PMTYPE_WAVE 3 /* Wave table synthesizer (GUS) */ -#define PM_GET_NRPGM 2 /* Returns max # of midi programs in parm1 */ -#define PM_GET_PGMMAP 3 /* Returns map of loaded midi programs in data8 */ -#define PM_GET_PGM_PATCHES 4 /* Return list of patches of a program (parm1) */ -#define PM_GET_PATCH 5 /* Return patch header of patch parm1 */ -#define PM_SET_PATCH 6 /* Set patch header of patch parm1 */ -#define PM_READ_PATCH 7 /* Read patch (wave) data */ -#define PM_WRITE_PATCH 8 /* Write patch (wave) data */ - -/* - * Commands 0x1000 to 0xffff are for communication between the patch manager - * and the client - */ -#define _PM_LOAD_PATCH 0x100 - -/* - * Commands above 0xffff reserved for device specific use - */ - - long parm1; - long parm2; - long parm3; - - union { - u_char data8[4000]; - u_short data16[2000]; - u_long data32[1000]; - struct patch_info patch; - } data; -}; - -/* - * When a patch manager daemon is present, it will be informed by the - * driver when something important happens. For example when the - * /dev/sequencer is opened or closed. A record with key == PM_K_EVENT is - * returned. The command field contains the event type: - */ -#define PM_E_OPENED 1 /* /dev/sequencer opened */ -#define PM_E_CLOSED 2 /* /dev/sequencer closed */ -#define PM_E_PATCH_RESET 3 /* SNDCTL_RESETSAMPLES called */ -#define PM_E_PATCH_LOADED 4 /* A patch has been loaded by appl */ - -/* - * /dev/sequencer input events. - * - * The data written to the /dev/sequencer is a stream of events. Events - * are records of 4 or 8 bytes. The first byte defines the size. - * Any number of events can be written with a write call. There - * is a set of macros for sending these events. Use these macros if you - * want to maximize portability of your program. - * - * Events SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO. Are also input events. - * (All input events are currently 4 bytes long. Be prepared to support - * 8 byte events also. If you receive any event having first byte >= 128, - * it's a 8 byte event. - * - * The events are documented at the end of this file. - * - * Normal events (4 bytes) - * There is also a 8 byte version of most of the 4 byte events. The - * 8 byte one is recommended. - */ -#define SEQ_NOTEOFF 0 -#define SEQ_FMNOTEOFF SEQ_NOTEOFF /* Just old name */ -#define SEQ_NOTEON 1 -#define SEQ_FMNOTEON SEQ_NOTEON -#define SEQ_WAIT TMR_WAIT_ABS -#define SEQ_PGMCHANGE 3 -#define SEQ_FMPGMCHANGE SEQ_PGMCHANGE -#define SEQ_SYNCTIMER TMR_START -#define SEQ_MIDIPUTC 5 -#define SEQ_DRUMON 6 /*** OBSOLETE ***/ -#define SEQ_DRUMOFF 7 /*** OBSOLETE ***/ -#define SEQ_ECHO TMR_ECHO /* For synching programs with output */ -#define SEQ_AFTERTOUCH 9 -#define SEQ_CONTROLLER 10 - -/* - * Midi controller numbers - * - * Controllers 0 to 31 (0x00 to 0x1f) and 32 to 63 (0x20 to 0x3f) - * are continuous controllers. - * In the MIDI 1.0 these controllers are sent using two messages. - * Controller numbers 0 to 31 are used to send the MSB and the - * controller numbers 32 to 63 are for the LSB. Note that just 7 bits - * are used in MIDI bytes. - */ - -#define CTL_BANK_SELECT 0x00 -#define CTL_MODWHEEL 0x01 -#define CTL_BREATH 0x02 -/* undefined 0x03 */ -#define CTL_FOOT 0x04 -#define CTL_PORTAMENTO_TIME 0x05 -#define CTL_DATA_ENTRY 0x06 -#define CTL_MAIN_VOLUME 0x07 -#define CTL_BALANCE 0x08 -/* undefined 0x09 */ -#define CTL_PAN 0x0a -#define CTL_EXPRESSION 0x0b -/* undefined 0x0c - 0x0f */ -#define CTL_GENERAL_PURPOSE1 0x10 -#define CTL_GENERAL_PURPOSE2 0x11 -#define CTL_GENERAL_PURPOSE3 0x12 -#define CTL_GENERAL_PURPOSE4 0x13 -/* undefined 0x14 - 0x1f */ - -/* undefined 0x20 */ - -/* - * The controller numbers 0x21 to 0x3f are reserved for the - * least significant bytes of the controllers 0x00 to 0x1f. - * These controllers are not recognised by the driver. - * - * Controllers 64 to 69 (0x40 to 0x45) are on/off switches. - * 0=OFF and 127=ON (intermediate values are possible) - */ -#define CTL_DAMPER_PEDAL 0x40 -#define CTL_SUSTAIN CTL_DAMPER_PEDAL /* Alias */ -#define CTL_HOLD CTL_DAMPER_PEDAL /* Alias */ -#define CTL_PORTAMENTO 0x41 -#define CTL_SOSTENUTO 0x42 -#define CTL_SOFT_PEDAL 0x43 -/* undefined 0x44 */ -#define CTL_HOLD2 0x45 -/* undefined 0x46 - 0x4f */ - -#define CTL_GENERAL_PURPOSE5 0x50 -#define CTL_GENERAL_PURPOSE6 0x51 -#define CTL_GENERAL_PURPOSE7 0x52 -#define CTL_GENERAL_PURPOSE8 0x53 -/* undefined 0x54 - 0x5a */ -#define CTL_EXT_EFF_DEPTH 0x5b -#define CTL_TREMOLO_DEPTH 0x5c -#define CTL_CHORUS_DEPTH 0x5d -#define CTL_DETUNE_DEPTH 0x5e -#define CTL_CELESTE_DEPTH CTL_DETUNE_DEPTH /* Alias for the above one */ -#define CTL_PHASER_DEPTH 0x5f -#define CTL_DATA_INCREMENT 0x60 -#define CTL_DATA_DECREMENT 0x61 -#define CTL_NONREG_PARM_NUM_LSB 0x62 -#define CTL_NONREG_PARM_NUM_MSB 0x63 -#define CTL_REGIST_PARM_NUM_LSB 0x64 -#define CTL_REGIST_PARM_NUM_MSB 0x65 -/* undefined 0x66 - 0x78 */ -/* reserved 0x79 - 0x7f */ - -/* Pseudo controllers (not midi compatible) */ -#define CTRL_PITCH_BENDER 255 -#define CTRL_PITCH_BENDER_RANGE 254 -#define CTRL_EXPRESSION 253 /* Obsolete */ -#define CTRL_MAIN_VOLUME 252 /* Obsolete */ - -#define SEQ_BALANCE 11 -#define SEQ_VOLMODE 12 - -/* - * Volume mode decides how volumes are used - */ - -#define VOL_METHOD_ADAGIO 1 -#define VOL_METHOD_LINEAR 2 - -/* - * Note! SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO are used also as - * input events. - */ - -/* - * Event codes 0xf0 to 0xfc are reserved for future extensions. - */ - -#define SEQ_FULLSIZE 0xfd /* Long events */ -/* - * SEQ_FULLSIZE events are used for loading patches/samples to the - * synthesizer devices. These events are passed directly to the driver - * of the associated synthesizer device. There is no limit to the size - * of the extended events. These events are not queued but executed - * immediately when the write() is called (execution can take several - * seconds of time). - * - * When a SEQ_FULLSIZE message is written to the device, it must - * be written using exactly one write() call. Other events cannot - * be mixed to the same write. - * - * For FM synths (YM3812/OPL3) use struct sbi_instrument and write - * it to the /dev/sequencer. Don't write other data together with - * the instrument structure Set the key field of the structure to - * FM_PATCH. The device field is used to route the patch to the - * corresponding device. - * - * For Gravis UltraSound use struct patch_info. Initialize the key field - * to GUS_PATCH. - */ -#define SEQ_PRIVATE 0xfe /* Low level HW dependent events (8 bytes) */ -#define SEQ_EXTENDED 0xff /* Extended events (8 bytes) OBSOLETE */ - -/* - * Record for FM patches - */ - -typedef u_char sbi_instr_data[32]; - -struct sbi_instrument { - u_short key; /* FM_PATCH or OPL3_PATCH */ -#define FM_PATCH _PATCHKEY(0x01) -#define OPL3_PATCH _PATCHKEY(0x03) - short device; /* Synth# (0-4) */ - int channel; /* Program# to be initialized */ - sbi_instr_data operators; /* Reg. settings for operator cells - * (.SBI format) */ -}; - -struct synth_info { /* Read only */ - char name[30]; - int device; /* 0-N. INITIALIZE BEFORE CALLING */ - int synth_type; -#define SYNTH_TYPE_FM 0 -#define SYNTH_TYPE_SAMPLE 1 -#define SYNTH_TYPE_MIDI 2 /* Midi interface */ - - int synth_subtype; -#define FM_TYPE_ADLIB 0x00 -#define FM_TYPE_OPL3 0x01 -#define MIDI_TYPE_MPU401 0x401 - -#define SAMPLE_TYPE_BASIC 0x10 -#define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC -#define SAMPLE_TYPE_AWE32 0x20 - - int perc_mode; /* No longer supported */ - int nr_voices; - int nr_drums; /* Obsolete field */ - int instr_bank_size; - u_long capabilities; -#define SYNTH_CAP_PERCMODE 0x00000001 /* No longer used */ -#define SYNTH_CAP_OPL3 0x00000002 /* Set if OPL3 supported */ -#define SYNTH_CAP_INPUT 0x00000004 /* Input (MIDI) device */ - int dummies[19]; /* Reserve space */ -}; - -struct sound_timer_info { - char name[32]; - int caps; -}; - -struct midi_info { - char name[30]; - int device; /* 0-N. INITIALIZE BEFORE CALLING */ - u_long capabilities; /* To be defined later */ - int dev_type; - int dummies[18]; /* Reserve space */ -}; - -/* - * ioctl commands for the /dev/midi## - */ -typedef struct { - u_char cmd; - char nr_args, nr_returns; - u_char data[30]; -} mpu_command_rec; - -#define SNDCTL_MIDI_PRETIME _IOWR('m', 0, int) -#define SNDCTL_MIDI_MPUMODE _IOWR('m', 1, int) -#define SNDCTL_MIDI_MPUCMD _IOWR('m', 2, mpu_command_rec) -#define MIOSPASSTHRU _IOWR('m', 3, int) -#define MIOGPASSTHRU _IOWR('m', 4, int) - -/* - * IOCTL commands for /dev/dsp and /dev/audio - */ - -#define SNDCTL_DSP_RESET _IO ('P', 0) -#define SNDCTL_DSP_SYNC _IO ('P', 1) -#define SNDCTL_DSP_SPEED _IOWR('P', 2, int) -#define SNDCTL_DSP_STEREO _IOWR('P', 3, int) -#define SNDCTL_DSP_GETBLKSIZE _IOR('P', 4, int) -#define SNDCTL_DSP_SETBLKSIZE _IOW('P', 4, int) -#define SNDCTL_DSP_SETFMT _IOWR('P',5, int) /* Selects ONE fmt*/ - -/* - * SOUND_PCM_WRITE_CHANNELS is not that different - * from SNDCTL_DSP_STEREO - */ -#define SOUND_PCM_WRITE_CHANNELS _IOWR('P', 6, int) -#define SNDCTL_DSP_CHANNELS SOUND_PCM_WRITE_CHANNELS -#define SOUND_PCM_WRITE_FILTER _IOWR('P', 7, int) -#define SNDCTL_DSP_POST _IO ('P', 8) - -/* - * SNDCTL_DSP_SETBLKSIZE and the following two calls mostly do - * the same thing, i.e. set the block size used in DMA transfers. - */ -#define SNDCTL_DSP_SUBDIVIDE _IOWR('P', 9, int) -#define SNDCTL_DSP_SETFRAGMENT _IOWR('P',10, int) - - -#define SNDCTL_DSP_GETFMTS _IOR ('P',11, int) /* Returns a mask */ -/* - * Buffer status queries. - */ -typedef struct audio_buf_info { - int fragments; /* # of avail. frags (partly used ones not counted) */ - int fragstotal; /* Total # of fragments allocated */ - int fragsize; /* Size of a fragment in bytes */ - - int bytes; /* Avail. space in bytes (includes partly used fragments) */ - /* Note! 'bytes' could be more than fragments*fragsize */ -} audio_buf_info; - -#define SNDCTL_DSP_GETOSPACE _IOR ('P',12, audio_buf_info) -#define SNDCTL_DSP_GETISPACE _IOR ('P',13, audio_buf_info) - -/* - * SNDCTL_DSP_NONBLOCK is the same (but less powerful, since the - * action cannot be undone) of FIONBIO. The same can be achieved - * by opening the device with O_NDELAY - */ -#define SNDCTL_DSP_NONBLOCK _IO ('P',14) - -#define SNDCTL_DSP_GETCAPS _IOR ('P',15, int) -#define DSP_CAP_REVISION 0x000000ff /* revision level (0 to 255) */ -#define DSP_CAP_DUPLEX 0x00000100 /* Full duplex record/playback */ -#define DSP_CAP_REALTIME 0x00000200 /* Real time capability */ -#define DSP_CAP_BATCH 0x00000400 - /* - * Device has some kind of internal buffers which may - * cause some delays and decrease precision of timing - */ -#define DSP_CAP_COPROC 0x00000800 - /* Has a coprocessor, sometimes it's a DSP but usually not */ -#define DSP_CAP_TRIGGER 0x00001000 /* Supports SETTRIGGER */ -#define DSP_CAP_MMAP 0x00002000 /* Supports mmap() */ - -/* - * What do these function do ? - */ -#define SNDCTL_DSP_GETTRIGGER _IOR ('P',16, int) -#define SNDCTL_DSP_SETTRIGGER _IOW ('P',16, int) -#define PCM_ENABLE_INPUT 0x00000001 -#define PCM_ENABLE_OUTPUT 0x00000002 - -typedef struct count_info { - int bytes; /* Total # of bytes processed */ - int blocks; /* # of fragment transitions since last time */ - int ptr; /* Current DMA pointer value */ -} count_info; - -/* - * GETIPTR and GETISPACE are not that different... same for out. - */ -#define SNDCTL_DSP_GETIPTR _IOR ('P',17, count_info) -#define SNDCTL_DSP_GETOPTR _IOR ('P',18, count_info) - -typedef struct buffmem_desc { - caddr_t buffer; - int size; -} buffmem_desc; - -#define SNDCTL_DSP_MAPINBUF _IOR ('P', 19, buffmem_desc) -#define SNDCTL_DSP_MAPOUTBUF _IOR ('P', 20, buffmem_desc) -#define SNDCTL_DSP_SETSYNCRO _IO ('P', 21) -#define SNDCTL_DSP_SETDUPLEX _IO ('P', 22) -#define SNDCTL_DSP_GETODELAY _IOR ('P', 23, int) - -/* - * I guess these are the readonly version of the same - * functions that exist above as SNDCTL_DSP_... - */ -#define SOUND_PCM_READ_RATE _IOR ('P', 2, int) -#define SOUND_PCM_READ_CHANNELS _IOR ('P', 6, int) -#define SOUND_PCM_READ_BITS _IOR ('P', 5, int) -#define SOUND_PCM_READ_FILTER _IOR ('P', 7, int) - -/* - * ioctl calls to be used in communication with coprocessors and - * DSP chips. - */ - -typedef struct copr_buffer { - int command; /* Set to 0 if not used */ - int flags; -#define CPF_NONE 0x0000 -#define CPF_FIRST 0x0001 /* First block */ -#define CPF_LAST 0x0002 /* Last block */ - int len; - int offs; /* If required by the device (0 if not used) */ - - u_char data[4000]; /* NOTE! 4000 is not 4k */ -} copr_buffer; - -typedef struct copr_debug_buf { - int command; /* Used internally. Set to 0 */ - int parm1; - int parm2; - int flags; - int len; /* Length of data in bytes */ -} copr_debug_buf; - -typedef struct copr_msg { - int len; - u_char data[4000]; -} copr_msg; - -#define SNDCTL_COPR_RESET _IO ('C', 0) -#define SNDCTL_COPR_LOAD _IOWR('C', 1, copr_buffer) -#define SNDCTL_COPR_RDATA _IOWR('C', 2, copr_debug_buf) -#define SNDCTL_COPR_RCODE _IOWR('C', 3, copr_debug_buf) -#define SNDCTL_COPR_WDATA _IOW ('C', 4, copr_debug_buf) -#define SNDCTL_COPR_WCODE _IOW ('C', 5, copr_debug_buf) -#define SNDCTL_COPR_RUN _IOWR('C', 6, copr_debug_buf) -#define SNDCTL_COPR_HALT _IOWR('C', 7, copr_debug_buf) -#define SNDCTL_COPR_SENDMSG _IOW ('C', 8, copr_msg) -#define SNDCTL_COPR_RCVMSG _IOR ('C', 9, copr_msg) - -/* - * IOCTL commands for /dev/mixer - */ - -/* - * Mixer devices - * - * There can be up to 20 different analog mixer channels. The - * SOUND_MIXER_NRDEVICES gives the currently supported maximum. - * The SOUND_MIXER_READ_DEVMASK returns a bitmask which tells - * the devices supported by the particular mixer. - */ - -#define SOUND_MIXER_NRDEVICES 25 -#define SOUND_MIXER_VOLUME 0 /* Master output level */ -#define SOUND_MIXER_BASS 1 /* Treble level of all output channels */ -#define SOUND_MIXER_TREBLE 2 /* Bass level of all output channels */ -#define SOUND_MIXER_SYNTH 3 /* Volume of synthesier input */ -#define SOUND_MIXER_PCM 4 /* Output level for the audio device */ -#define SOUND_MIXER_SPEAKER 5 /* Output level for the PC speaker - * signals */ -#define SOUND_MIXER_LINE 6 /* Volume level for the line in jack */ -#define SOUND_MIXER_MIC 7 /* Volume for the signal coming from - * the microphone jack */ -#define SOUND_MIXER_CD 8 /* Volume level for the input signal - * connected to the CD audio input */ -#define SOUND_MIXER_IMIX 9 /* Recording monitor. It controls the - * output volume of the selected - * recording sources while recording */ -#define SOUND_MIXER_ALTPCM 10 /* Volume of the alternative codec - * device */ -#define SOUND_MIXER_RECLEV 11 /* Global recording level */ -#define SOUND_MIXER_IGAIN 12 /* Input gain */ -#define SOUND_MIXER_OGAIN 13 /* Output gain */ -/* - * The AD1848 codec and compatibles have three line level inputs - * (line, aux1 and aux2). Since each card manufacturer have assigned - * different meanings to these inputs, it's inpractical to assign - * specific meanings (line, cd, synth etc.) to them. - */ -#define SOUND_MIXER_LINE1 14 /* Input source 1 (aux1) */ -#define SOUND_MIXER_LINE2 15 /* Input source 2 (aux2) */ -#define SOUND_MIXER_LINE3 16 /* Input source 3 (line) */ -#define SOUND_MIXER_DIGITAL1 17 /* Digital (input) 1 */ -#define SOUND_MIXER_DIGITAL2 18 /* Digital (input) 2 */ -#define SOUND_MIXER_DIGITAL3 19 /* Digital (input) 3 */ -#define SOUND_MIXER_PHONEIN 20 /* Phone input */ -#define SOUND_MIXER_PHONEOUT 21 /* Phone output */ -#define SOUND_MIXER_VIDEO 22 /* Video/TV (audio) in */ -#define SOUND_MIXER_RADIO 23 /* Radio in */ -#define SOUND_MIXER_MONITOR 24 /* Monitor (usually mic) volume */ - - -/* - * Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) - * Not counted to SOUND_MIXER_NRDEVICES, but use the same number space - */ -#define SOUND_ONOFF_MIN 28 -#define SOUND_ONOFF_MAX 30 -#define SOUND_MIXER_MUTE 28 /* 0 or 1 */ -#define SOUND_MIXER_ENHANCE 29 /* Enhanced stereo (0, 40, 60 or 80) */ -#define SOUND_MIXER_LOUD 30 /* 0 or 1 */ - -/* Note! Number 31 cannot be used since the sign bit is reserved */ -#define SOUND_MIXER_NONE 31 - -#define SOUND_DEVICE_LABELS { \ - "Vol ", "Bass ", "Trebl", "Synth", "Pcm ", "Spkr ", "Line ", \ - "Mic ", "CD ", "Mix ", "Pcm2 ", "Rec ", "IGain", "OGain", \ - "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", \ - "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"} - -#define SOUND_DEVICE_NAMES { \ - "vol", "bass", "treble", "synth", "pcm", "speaker", "line", \ - "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \ - "line1", "line2", "line3", "dig1", "dig2", "dig3", \ - "phin", "phout", "video", "radio", "monitor"} - -/* Device bitmask identifiers */ - -#define SOUND_MIXER_RECSRC 0xff /* 1 bit per recording source */ -#define SOUND_MIXER_DEVMASK 0xfe /* 1 bit per supported device */ -#define SOUND_MIXER_RECMASK 0xfd /* 1 bit per supp. recording source */ -#define SOUND_MIXER_CAPS 0xfc -#define SOUND_CAP_EXCL_INPUT 0x00000001 /* Only 1 rec. src at a time */ -#define SOUND_MIXER_STEREODEVS 0xfb /* Mixer channels supporting stereo */ - -/* Device mask bits */ - -#define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME) -#define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS) -#define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE) -#define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH) -#define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM) -#define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER) -#define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE) -#define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC) -#define SOUND_MASK_CD (1 << SOUND_MIXER_CD) -#define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX) -#define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM) -#define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV) -#define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN) -#define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN) -#define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1) -#define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2) -#define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3) -#define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1) -#define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2) -#define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3) -#define SOUND_MASK_PHONEIN (1 << SOUND_MIXER_PHONEIN) -#define SOUND_MASK_PHONEOUT (1 << SOUND_MIXER_PHONEOUT) -#define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO) -#define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO) -#define SOUND_MASK_MONITOR (1 << SOUND_MIXER_MONITOR) - -/* Obsolete macros */ -#define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE) -#define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE) -#define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD) - -#define MIXER_READ(dev) _IOR('M', dev, int) -#define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME) -#define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS) -#define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE) -#define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH) -#define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM) -#define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER) -#define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE) -#define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC) -#define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD) -#define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX) -#define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM) -#define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV) -#define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN) -#define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN) -#define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1) -#define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2) -#define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3) -#define SOUND_MIXER_READ_DIGITAL1 MIXER_READ(SOUND_MIXER_DIGITAL1) -#define SOUND_MIXER_READ_DIGITAL2 MIXER_READ(SOUND_MIXER_DIGITAL2) -#define SOUND_MIXER_READ_DIGITAL3 MIXER_READ(SOUND_MIXER_DIGITAL3) -#define SOUND_MIXER_READ_PHONEIN MIXER_READ(SOUND_MIXER_PHONEIN) -#define SOUND_MIXER_READ_PHONEOUT MIXER_READ(SOUND_MIXER_PHONEOUT) -#define SOUND_MIXER_READ_RADIO MIXER_READ(SOUND_MIXER_RADIO) -#define SOUND_MIXER_READ_VIDEO MIXER_READ(SOUND_MIXER_VIDEO) -#define SOUND_MIXER_READ_MONITOR MIXER_READ(SOUND_MIXER_MONITOR) - -/* Obsolete macros */ -#define SOUND_MIXER_READ_MUTE MIXER_READ(SOUND_MIXER_MUTE) -#define SOUND_MIXER_READ_ENHANCE MIXER_READ(SOUND_MIXER_ENHANCE) -#define SOUND_MIXER_READ_LOUD MIXER_READ(SOUND_MIXER_LOUD) - -#define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC) -#define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK) -#define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK) -#define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS) -#define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS) - -#define MIXER_WRITE(dev) _IOWR('M', dev, int) -#define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME) -#define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS) -#define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE) -#define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH) -#define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM) -#define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER) -#define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE) -#define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC) -#define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD) -#define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX) -#define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM) -#define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV) -#define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN) -#define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN) -#define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1) -#define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2) -#define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3) -#define SOUND_MIXER_WRITE_DIGITAL1 MIXER_WRITE(SOUND_MIXER_DIGITAL1) -#define SOUND_MIXER_WRITE_DIGITAL2 MIXER_WRITE(SOUND_MIXER_DIGITAL2) -#define SOUND_MIXER_WRITE_DIGITAL3 MIXER_WRITE(SOUND_MIXER_DIGITAL3) -#define SOUND_MIXER_WRITE_PHONEIN MIXER_WRITE(SOUND_MIXER_PHONEIN) -#define SOUND_MIXER_WRITE_PHONEOUT MIXER_WRITE(SOUND_MIXER_PHONEOUT) -#define SOUND_MIXER_WRITE_RADIO MIXER_WRITE(SOUND_MIXER_RADIO) -#define SOUND_MIXER_WRITE_VIDEO MIXER_WRITE(SOUND_MIXER_VIDEO) -#define SOUND_MIXER_WRITE_MONITOR MIXER_WRITE(SOUND_MIXER_MONITOR) - -#define SOUND_MIXER_WRITE_MUTE MIXER_WRITE(SOUND_MIXER_MUTE) -#define SOUND_MIXER_WRITE_ENHANCE MIXER_WRITE(SOUND_MIXER_ENHANCE) -#define SOUND_MIXER_WRITE_LOUD MIXER_WRITE(SOUND_MIXER_LOUD) - -#define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC) - -typedef struct mixer_info { - char id[16]; - char name[32]; - int modify_counter; - int fillers[10]; -} mixer_info; - -#define SOUND_MIXER_INFO _IOR('M', 101, mixer_info) - -#define LEFT_CHN 0 -#define RIGHT_CHN 1 - -/* - * Level 2 event types for /dev/sequencer - */ - -/* - * The 4 most significant bits of byte 0 specify the class of - * the event: - * - * 0x8X = system level events, - * 0x9X = device/port specific events, event[1] = device/port, - * The last 4 bits give the subtype: - * 0x02 = Channel event (event[3] = chn). - * 0x01 = note event (event[4] = note). - * (0x01 is not used alone but always with bit 0x02). - * event[2] = MIDI message code (0x80=note off etc.) - * - */ - -#define EV_SEQ_LOCAL 0x80 -#define EV_TIMING 0x81 -#define EV_CHN_COMMON 0x92 -#define EV_CHN_VOICE 0x93 -#define EV_SYSEX 0x94 -/* - * Event types 200 to 220 are reserved for application use. - * These numbers will not be used by the driver. - */ - -/* - * Events for event type EV_CHN_VOICE - */ - -#define MIDI_NOTEOFF 0x80 -#define MIDI_NOTEON 0x90 -#define MIDI_KEY_PRESSURE 0xA0 - -/* - * Events for event type EV_CHN_COMMON - */ - -#define MIDI_CTL_CHANGE 0xB0 -#define MIDI_PGM_CHANGE 0xC0 -#define MIDI_CHN_PRESSURE 0xD0 -#define MIDI_PITCH_BEND 0xE0 - -#define MIDI_SYSTEM_PREFIX 0xF0 - -/* - * Timer event types - */ -#define TMR_WAIT_REL 1 /* Time relative to the prev time */ -#define TMR_WAIT_ABS 2 /* Absolute time since TMR_START */ -#define TMR_STOP 3 -#define TMR_START 4 -#define TMR_CONTINUE 5 -#define TMR_TEMPO 6 -#define TMR_ECHO 8 -#define TMR_CLOCK 9 /* MIDI clock */ -#define TMR_SPP 10 /* Song position pointer */ -#define TMR_TIMESIG 11 /* Time signature */ - -/* - * Local event types - */ -#define LOCL_STARTAUDIO 1 - -#if (!defined(_KERNEL) && !defined(INKERNEL)) || defined(USE_SEQ_MACROS) -/* - * Some convenience macros to simplify programming of the - * /dev/sequencer interface - * - * These macros define the API which should be used when possible. - */ - -#ifndef USE_SIMPLE_MACROS -void seqbuf_dump(void); /* This function must be provided by programs */ - -/* Sample seqbuf_dump() implementation: - * - * SEQ_DEFINEBUF (2048); -- Defines a buffer for 2048 bytes - * - * int seqfd; -- The file descriptor for /dev/sequencer. - * - * void - * seqbuf_dump () - * { - * if (_seqbufptr) - * if (write (seqfd, _seqbuf, _seqbufptr) == -1) - * { - * perror ("write /dev/sequencer"); - * exit (-1); - * } - * _seqbufptr = 0; - * } - */ - -#define SEQ_DEFINEBUF(len) \ - u_char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0 -#define SEQ_USE_EXTBUF() \ - extern u_char _seqbuf[]; \ - extern int _seqbuflen;extern int _seqbufptr -#define SEQ_DECLAREBUF() SEQ_USE_EXTBUF() -#define SEQ_PM_DEFINES struct patmgr_info _pm_info -#define _SEQ_NEEDBUF(len) \ - if ((_seqbufptr+(len)) > _seqbuflen) \ - seqbuf_dump() -#define _SEQ_ADVBUF(len) _seqbufptr += len -#define SEQ_DUMPBUF seqbuf_dump -#else -/* - * This variation of the sequencer macros is used just to format one event - * using fixed buffer. - * - * The program using the macro library must define the following macros before - * using this library. - * - * #define _seqbuf name of the buffer (u_char[]) - * #define _SEQ_ADVBUF(len) If the applic needs to know the exact - * size of the event, this macro can be used. - * Otherwise this must be defined as empty. - * #define _seqbufptr Define the name of index variable or 0 if - * not required. - */ -#define _SEQ_NEEDBUF(len) /* empty */ -#endif - -#define PM_LOAD_PATCH(dev, bank, pgm) \ - (SEQ_DUMPBUF(), _pm_info.command = _PM_LOAD_PATCH, \ - _pm_info.device=dev, _pm_info.data.data8[0]=pgm, \ - _pm_info.parm1 = bank, _pm_info.parm2 = 1, \ - ioctl(seqfd, SNDCTL_PMGR_ACCESS, &_pm_info)) -#define PM_LOAD_PATCHES(dev, bank, pgm) \ - (SEQ_DUMPBUF(), _pm_info.command = _PM_LOAD_PATCH, \ - _pm_info.device=dev, bcopy( pgm, _pm_info.data.data8, 128), \ - _pm_info.parm1 = bank, _pm_info.parm2 = 128, \ - ioctl(seqfd, SNDCTL_PMGR_ACCESS, &_pm_info)) - -#define SEQ_VOLUME_MODE(dev, mode) { \ - _SEQ_NEEDBUF(8);\ - _seqbuf[_seqbufptr] = SEQ_EXTENDED;\ - _seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\ - _seqbuf[_seqbufptr+2] = (dev);\ - _seqbuf[_seqbufptr+3] = (mode);\ - _seqbuf[_seqbufptr+4] = 0;\ - _seqbuf[_seqbufptr+5] = 0;\ - _seqbuf[_seqbufptr+6] = 0;\ - _seqbuf[_seqbufptr+7] = 0;\ - _SEQ_ADVBUF(8);} - -/* - * Midi voice messages - */ - -#define _CHN_VOICE(dev, event, chn, note, parm) { \ - _SEQ_NEEDBUF(8);\ - _seqbuf[_seqbufptr] = EV_CHN_VOICE;\ - _seqbuf[_seqbufptr+1] = (dev);\ - _seqbuf[_seqbufptr+2] = (event);\ - _seqbuf[_seqbufptr+3] = (chn);\ - _seqbuf[_seqbufptr+4] = (note);\ - _seqbuf[_seqbufptr+5] = (parm);\ - _seqbuf[_seqbufptr+6] = (0);\ - _seqbuf[_seqbufptr+7] = 0;\ - _SEQ_ADVBUF(8);} - -#define SEQ_START_NOTE(dev, chn, note, vol) \ - _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol) - -#define SEQ_STOP_NOTE(dev, chn, note, vol) \ - _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol) - -#define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \ - _CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure) - -/* - * Midi channel messages - */ - -#define _CHN_COMMON(dev, event, chn, p1, p2, w14) { \ - _SEQ_NEEDBUF(8);\ - _seqbuf[_seqbufptr] = EV_CHN_COMMON;\ - _seqbuf[_seqbufptr+1] = (dev);\ - _seqbuf[_seqbufptr+2] = (event);\ - _seqbuf[_seqbufptr+3] = (chn);\ - _seqbuf[_seqbufptr+4] = (p1);\ - _seqbuf[_seqbufptr+5] = (p2);\ - *(short *)&_seqbuf[_seqbufptr+6] = (w14);\ - _SEQ_ADVBUF(8);} -/* - * SEQ_SYSEX permits sending of sysex messages. (It may look that it permits - * sending any MIDI bytes but it's absolutely not possible. Trying to do - * so _will_ cause problems with MPU401 intelligent mode). - * - * Sysex messages are sent in blocks of 1 to 6 bytes. Longer messages must be - * sent by calling SEQ_SYSEX() several times (there must be no other events - * between them). First sysex fragment must have 0xf0 in the first byte - * and the last byte (buf[len-1] of the last fragment must be 0xf7. No byte - * between these sysex start and end markers cannot be larger than 0x7f. Also - * lengths of each fragments (except the last one) must be 6. - * - * Breaking the above rules may work with some MIDI ports but is likely to - * cause fatal problems with some other devices (such as MPU401). - */ -#define SEQ_SYSEX(dev, buf, len) { \ - int i, l=(len); if (l>6)l=6;\ - _SEQ_NEEDBUF(8);\ - _seqbuf[_seqbufptr] = EV_SYSEX;\ - for(i=0;i Date: Thu, 17 Dec 2015 11:16:14 +0100 Subject: [PATCH 4/5] fix install location for stk/rawwaves --- source/StkInst/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/StkInst/CMakeLists.txt b/source/StkInst/CMakeLists.txt index 760c680ea4..ecc2e980ae 100644 --- a/source/StkInst/CMakeLists.txt +++ b/source/StkInst/CMakeLists.txt @@ -84,5 +84,5 @@ endif() install(DIRECTORY "sc/" DESTINATION "${INSTALL_DESTINATION_DISTRO}/${PROJECT}" PATTERN "*") if(NOT SYSTEM_STK) - install(DIRECTORY "stk/rawwaves/" DESTINATION "${INSTALL_DESTINATION_DISTRO}/${PROJECT}/rawwaves" PATTERN "*.raw") + install(DIRECTORY "${STKDIR}/rawwaves/" DESTINATION "${INSTALL_DESTINATION_DISTRO}/${PROJECT}/rawwaves" PATTERN "*.raw") endif() From 16f07b1bc6c1ceb70d5216486b5baea6fec2f4cf Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Fri, 18 Dec 2015 10:14:28 +0100 Subject: [PATCH 5/5] add warning about missing SKINI msg file when using SYSTEM_STK --- source/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 50a9f4f3b7..087f2c8c93 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -271,6 +271,10 @@ if(SYSTEM_STK) include_directories(${STK_INCLUDE_DIR}) if (EXISTS ${STK_INCLUDE_DIR}/SKINI.msg) add_definitions(-DSTK_SKINIMSG) + else() + if (NOT EXISTS ${STK_INCLUDE_DIR}/SKINImsg.h) + message(FATAL_ERROR "Your system's stk library headers are missing the SKINI msg include file. Please read Debian Bug #805549 for more information & a fix. Alternatively, you can build the sc3 plugins without SYSTEM_STK using the included stk library.") + endif() endif() BUILD_PLUGIN(StkUGens "StkUGens/StkAll.cpp" ${STK_LIBRARY} "StkUGens") add_subdirectory(StkInst)