/*---------------------------------------------------------------------------- ChucK Concurrent, On-the-fly Audio Programming Language Compiler and Virtual Machine Copyright (c) 2004 Ge Wang and Perry R. Cook. All rights reserved. http://chuck.stanford.edu/ http://chuck.cs.princeton.edu/ This program 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 U.S.A.-----------------------------------------------------------------------------*/ //-----------------------------------------------------------------------------// file: ugen_stk.cpp// desc: ChucK import for Synthesis ToolKit (STK)// by Perry Cook and Gary Scavone//// author: Ge Wang (ge@ccrma.stanford.edu | gewang@cs.princeton.edu)// Perry R. Cook (prc@cs.princeton.edu)// Ananya Misra (amisra@cs.princeton.edu)// Ari Lazier (alazier@cs.princeton.edu)// Philip L. Davidson (philipd@cs.princeton.edu)// Mark Daly (mdaly@cs.princeton.edu)// date: Spring 2004//-----------------------------------------------------------------------------#include "ugen_stk.h"#include "chuck_type.h"#include "chuck_vm.h"#include "chuck_instr.h"#include "chuck_compile.h"#include "chuck_lang.h"#include "chuck_carrier.h"#include "chuck_errmsg.h"#include "chuck_io.h"#include "chuck_oo.h"#include "util_math.h"#include <stdlib.h>#include <string.h>#include <time.h>#include <float.h>#include <limits.h> //------------------------------------------------------------------------------// name: union what// desc: the litmus//------------------------------------------------------------------------------union what { long x; char y[sizeof(long)]; };t_CKBOOL little_endian = FALSE; // static t_CKUINT g_srate = 0;// filter member data offset static t_CKUINT Instrmnt_offset_data = 0;//static t_CKUINT BandedWG_offset_data = 0;//static t_CKUINT BlowBotl_offset_data = 0;//static t_CKUINT BlowHole_offset_data = 0;//static t_CKUINT Bowed_offset_data = 0;//static t_CKUINT Brass_offset_data = 0;//static t_CKUINT Clarinet_offset_data = 0;//static t_CKUINT Flute_offset_data = 0;//static t_CKUINT Mandolin_offset_data = 0;//static t_CKUINT ModalBar_offset_data = 0;//static t_CKUINT Moog_offset_data = 0;//static t_CKUINT Saxofony_offset_data = 0;//static t_CKUINT Shakers_offset_data = 0;//static t_CKUINT Sitar_offset_data = 0;//static t_CKUINT StifKarp_offset_data = 0;//static t_CKUINT VoicForm_offset_data = 0;static t_CKUINT FM_offset_data = 0;//static t_CKUINT BeeThree_offset_data = 0; // NOTE: TX81Z Algorithm 8 (lots of Organs)//static t_CKUINT FMVoices_offset_data = 0; // NOTE: TX81Z Algorithm 6//static t_CKUINT HevyMetl_offset_data = 0; // NOTE: TX81Z Algorithm 3 (Trumpet too)//static t_CKUINT HnkyTonk offset_data = 0; // 1.4.1.0 (prc) REPAIRATHON2021 ADDITION, TX81Z Algorithm 1//static t_CKUINT FrencHrn offset_data = 0; // 1.4.1.0 (prc) REPAIRATHON2021 ADDITION, TX81Z Algorithm 2//static t_CKUINT KrstlChr offset_data = 0; // 1.4.1.0 (prc) REPAIRATHON2021 ADDITION, TX81Z Algorithm 7//static t_CKUINT PercFlut_offset_data = 0; // NOTE: TX81Z Algorithm 4//static t_CKUINT Rhodey_offset_data = 0; // NOTE: TX81Z Algorithm 5 (also Wurley, TubeBell)//static t_CKUINT TubeBell_offset_data = 0; // NOTE: TX81Z Algorithm 5 (also Rhodey, Wurley)//static t_CKUINT Wurley_offset_data = 0; // NOTE: TX81Z Algorithm 5 (also Rhodey, TubeBell)static t_CKUINT FormSwep_offset_data = 0;static t_CKUINT Delay_offset_data = 0;static t_CKUINT DelayA_offset_data = 0;static t_CKUINT DelayL_offset_data = 0;static t_CKUINT Echo_offset_data = 0;static t_CKUINT Envelope_offset_data = 0;// static t_CKUINT Envelope_offset_data = 0;static t_CKUINT BiQuad_offset_data = 0;static t_CKUINT FilterStk_offset_data = 0;static t_CKUINT OnePole_offset_data = 0;static t_CKUINT TwoPole_offset_data = 0;static t_CKUINT OneZero_offset_data = 0;static t_CKUINT TwoZero_offset_data = 0;static t_CKUINT PoleZero_offset_data = 0;static t_CKUINT JCRev_offset_data = 0;static t_CKUINT NRev_offset_data = 0;static t_CKUINT PRCRev_offset_data = 0;static t_CKUINT Chorus_offset_data = 0;static t_CKUINT Modulate_offset_data = 0;static t_CKUINT SubNoise_offset_data = 0;static t_CKUINT WvIn_offset_data = 0;//static t_CKUINT WaveLoop_offset_data = 0;static t_CKUINT WvOut_offset_data = 0;static t_CKUINT PitShift_offset_data = 0;static t_CKUINT BLT_offset_data = 0;static t_CKUINT JetTabl_offset_data = 0; static t_CKUINT Mesh2D_offset_data = 0; static t_CKUINT MidiFileIn_offset_data = 0; static t_CKINT ADSR_state_ATTACK = ADSR::ATTACK;static t_CKINT ADSR_state_DECAY = ADSR::DECAY;static t_CKINT ADSR_state_SUSTAIN = ADSR::SUSTAIN;static t_CKINT ADSR_state_RELEASE = ADSR::RELEASE;static t_CKINT ADSR_state_DONE = ADSR::DONE; // SKINI/*SkiniIn SkiniMessage => while(skin.getnextmessage(msg))msg - type, data parameters, time stampSkiniOut.send( midi message )horn ok please -> written at the back of trucks, always, makes no sense.*/ // ADSRCK_DLL_CTOR( ADSR_ctor );CK_DLL_DTOR( ADSR_dtor );CK_DLL_TICK( ADSR_tick );CK_DLL_PMSG( ADSR_pmsg );CK_DLL_CTRL( ADSR_ctrl_attackTime );CK_DLL_CTRL( ADSR_ctrl_attackRate );CK_DLL_CTRL( ADSR_ctrl_decayTime );CK_DLL_CTRL( ADSR_ctrl_decayRate );CK_DLL_CTRL( ADSR_ctrl_sustainLevel );CK_DLL_CTRL( ADSR_ctrl_releaseTime );CK_DLL_CTRL( ADSR_ctrl_releaseRate );CK_DLL_CTRL( ADSR_ctrl_set );CK_DLL_CTRL( ADSR_ctrl_set2 );CK_DLL_CGET( ADSR_cget_attackTime );CK_DLL_CGET( ADSR_cget_attackRate );CK_DLL_CGET( ADSR_cget_decayTime );CK_DLL_CGET( ADSR_cget_decayRate );CK_DLL_CGET( ADSR_cget_sustainLevel );CK_DLL_CGET( ADSR_cget_releaseTime );CK_DLL_CGET( ADSR_cget_releaseRate );CK_DLL_CGET( ADSR_cget_state ); // BiQuadCK_DLL_CTOR( BiQuad_ctor );CK_DLL_DTOR( BiQuad_dtor );CK_DLL_TICK( BiQuad_tick );CK_DLL_PMSG( BiQuad_pmsg );CK_DLL_CTRL( BiQuad_ctrl_b2 );CK_DLL_CTRL( BiQuad_ctrl_b1 );CK_DLL_CTRL( BiQuad_ctrl_b0 );CK_DLL_CTRL( BiQuad_ctrl_a2 );CK_DLL_CTRL( BiQuad_ctrl_a1 );CK_DLL_CGET( BiQuad_ctrl_a0 );CK_DLL_CTRL( BiQuad_ctrl_pfreq );CK_DLL_CTRL( BiQuad_ctrl_prad );CK_DLL_CTRL( BiQuad_ctrl_zfreq );CK_DLL_CTRL( BiQuad_ctrl_zrad );CK_DLL_CTRL( BiQuad_ctrl_norm );CK_DLL_CTRL( BiQuad_ctrl_eqzs );CK_DLL_CGET( BiQuad_cget_b2 );CK_DLL_CGET( BiQuad_cget_b1 );CK_DLL_CGET( BiQuad_cget_b0 );CK_DLL_CGET( BiQuad_cget_a2 );CK_DLL_CGET( BiQuad_cget_a1 );CK_DLL_CGET( BiQuad_cget_a0 );CK_DLL_CTRL( BiQuad_cget_pfreq );CK_DLL_CTRL( BiQuad_cget_prad );CK_DLL_CTRL( BiQuad_cget_zfreq );CK_DLL_CTRL( BiQuad_cget_zrad ); // ChorusCK_DLL_CTOR( Chorus_ctor );CK_DLL_DTOR( Chorus_dtor );CK_DLL_TICK( Chorus_tick );CK_DLL_PMSG( Chorus_pmsg );CK_DLL_CTRL( Chorus_ctrl_modDepth );CK_DLL_CTRL( Chorus_ctrl_modFreq );CK_DLL_CTRL( Chorus_ctrl_baseDelay );CK_DLL_CTRL( Chorus_ctrl_set );CK_DLL_CTRL( Chorus_ctrl_mix );CK_DLL_CGET( Chorus_cget_modDepth );CK_DLL_CGET( Chorus_cget_modFreq );CK_DLL_CGET( Chorus_cget_baseDelay );CK_DLL_CGET( Chorus_cget_mix ); // DelayCK_DLL_CTOR( Delay_ctor );CK_DLL_DTOR( Delay_dtor );CK_DLL_TICK( Delay_tick );CK_DLL_PMSG( Delay_pmsg );CK_DLL_CTRL( Delay_ctrl_delay );CK_DLL_CTRL( Delay_ctrl_max );CK_DLL_CGET( Delay_cget_delay );CK_DLL_CGET( Delay_cget_max );CK_DLL_CGET( Delay_clear ); // DelayACK_DLL_CTOR( DelayA_ctor );CK_DLL_DTOR( DelayA_dtor );CK_DLL_TICK( DelayA_tick );CK_DLL_PMSG( DelayA_pmsg );CK_DLL_CTRL( DelayA_ctrl_delay );CK_DLL_CTRL( DelayA_ctrl_max );CK_DLL_CGET( DelayA_cget_delay );CK_DLL_CGET( DelayA_cget_max );CK_DLL_CGET( DelayA_clear ); // DelayLCK_DLL_CTOR( DelayL_ctor );CK_DLL_DTOR( DelayL_dtor );CK_DLL_TICK( DelayL_tick );CK_DLL_PMSG( DelayL_pmsg );CK_DLL_CTRL( DelayL_ctrl_delay );CK_DLL_CTRL( DelayL_ctrl_max );CK_DLL_CGET( DelayL_cget_delay );CK_DLL_CGET( DelayL_cget_max );CK_DLL_CGET( DelayL_clear ); // EchoCK_DLL_CTOR( Echo_ctor );CK_DLL_DTOR( Echo_dtor );CK_DLL_TICK( Echo_tick );CK_DLL_PMSG( Echo_pmsg );CK_DLL_CTRL( Echo_ctrl_delay );CK_DLL_CTRL( Echo_ctrl_max );CK_DLL_CTRL( Echo_ctrl_mix );CK_DLL_CGET( Echo_cget_delay );CK_DLL_CGET( Echo_cget_max );CK_DLL_CGET( Echo_cget_mix ); // EnvelopeCK_DLL_CTOR( Envelope_ctor );CK_DLL_DTOR( Envelope_dtor );CK_DLL_TICK( Envelope_tick );CK_DLL_PMSG( Envelope_pmsg );CK_DLL_CTRL( Envelope_ctrl_rate );CK_DLL_CTRL( Envelope_ctrl_target );CK_DLL_CTRL( Envelope_cget_target );CK_DLL_CTRL( Envelope_ctrl_time );CK_DLL_CTRL( Envelope_ctrl_duration );CK_DLL_CTRL( Envelope_ctrl_value );CK_DLL_CTRL( Envelope_cget_value );CK_DLL_CTRL( Envelope_ctrl_keyOn0 );CK_DLL_CTRL( Envelope_ctrl_keyOn );CK_DLL_CTRL( Envelope_ctrl_keyOff0 );CK_DLL_CTRL( Envelope_ctrl_keyOff );CK_DLL_CGET( Envelope_cget_rate );CK_DLL_CGET( Envelope_cget_target );CK_DLL_CGET( Envelope_cget_time );CK_DLL_CGET( Envelope_cget_duration );CK_DLL_CGET( Envelope_cget_value ); // FilterStk (originally Filter)CK_DLL_CTOR( FilterStk_ctor );CK_DLL_DTOR( FilterStk_dtor );CK_DLL_TICK( FilterStk_tick );CK_DLL_PMSG( FilterStk_pmsg );CK_DLL_CTRL( FilterStk_ctrl_coefs );CK_DLL_CGET( FilterStk_cget_coefs ); // OnePoleCK_DLL_CTOR( OnePole_ctor );CK_DLL_DTOR( OnePole_dtor );CK_DLL_TICK( OnePole_tick );CK_DLL_PMSG( OnePole_pmsg );CK_DLL_CTRL( OnePole_ctrl_a1 );CK_DLL_CTRL( OnePole_ctrl_b0 );CK_DLL_CTRL( OnePole_ctrl_pole );CK_DLL_CGET( OnePole_cget_a1 );CK_DLL_CGET( OnePole_cget_b0 );CK_DLL_CGET( OnePole_cget_pole ); // TwoPoleCK_DLL_CTOR( TwoPole_ctor );CK_DLL_DTOR( TwoPole_dtor );CK_DLL_TICK( TwoPole_tick );CK_DLL_PMSG( TwoPole_pmsg );CK_DLL_CTRL( TwoPole_ctrl_a1 );CK_DLL_CTRL( TwoPole_ctrl_a2 );CK_DLL_CTRL( TwoPole_ctrl_b0 );CK_DLL_CTRL( TwoPole_ctrl_freq );CK_DLL_CTRL( TwoPole_ctrl_radius );CK_DLL_CTRL( TwoPole_ctrl_norm );CK_DLL_CGET( TwoPole_cget_a1 );CK_DLL_CGET( TwoPole_cget_a2 );CK_DLL_CGET( TwoPole_cget_b0 );CK_DLL_CGET( TwoPole_cget_freq );CK_DLL_CGET( TwoPole_cget_radius );CK_DLL_CGET( TwoPole_cget_norm ); // OneZeroCK_DLL_CTOR( OneZero_ctor );CK_DLL_DTOR( OneZero_dtor );CK_DLL_TICK( OneZero_tick );CK_DLL_PMSG( OneZero_pmsg );CK_DLL_CTRL( OneZero_ctrl_zero );CK_DLL_CTRL( OneZero_ctrl_b0 );CK_DLL_CTRL( OneZero_ctrl_b1 );CK_DLL_CGET( OneZero_cget_zero );CK_DLL_CGET( OneZero_cget_b0 );CK_DLL_CGET( OneZero_cget_b1 ); // TwoZeroCK_DLL_CTOR( TwoZero_ctor );CK_DLL_DTOR( TwoZero_dtor );CK_DLL_TICK( TwoZero_tick );CK_DLL_PMSG( TwoZero_pmsg );CK_DLL_CTRL( TwoZero_ctrl_b0 );CK_DLL_CTRL( TwoZero_ctrl_b1 );CK_DLL_CTRL( TwoZero_ctrl_b2 );CK_DLL_CTRL( TwoZero_ctrl_freq );CK_DLL_CTRL( TwoZero_ctrl_radius );CK_DLL_CGET( TwoZero_cget_b0 );CK_DLL_CGET( TwoZero_cget_b1 );CK_DLL_CGET( TwoZero_cget_b2 );CK_DLL_CGET( TwoZero_cget_freq );CK_DLL_CGET( TwoZero_cget_radius ); // PoleZeroCK_DLL_CTOR( PoleZero_ctor );CK_DLL_DTOR( PoleZero_dtor );CK_DLL_TICK( PoleZero_tick );CK_DLL_PMSG( PoleZero_pmsg );CK_DLL_CTRL( PoleZero_ctrl_a1 );CK_DLL_CTRL( PoleZero_ctrl_b0 );CK_DLL_CTRL( PoleZero_ctrl_b1 );CK_DLL_CTRL( PoleZero_ctrl_blockZero );CK_DLL_CTRL( PoleZero_ctrl_allpass );CK_DLL_CGET( PoleZero_cget_a1 );CK_DLL_CGET( PoleZero_cget_b0 );CK_DLL_CGET( PoleZero_cget_b1 );CK_DLL_CGET( PoleZero_cget_blockZero );CK_DLL_CGET( PoleZero_cget_allpass ); // NoiseCK_DLL_CTOR( Noise_ctor );CK_DLL_DTOR( Noise_dtor );CK_DLL_TICK( Noise_tick );CK_DLL_PMSG( Noise_pmsg );CK_DLL_CTRL( Noise_ctrl_seed );CK_DLL_CGET( Noise_cget_seed ); // SubNoiseCK_DLL_CTOR( SubNoise_ctor );CK_DLL_DTOR( SubNoise_dtor );CK_DLL_TICK( SubNoise_tick );CK_DLL_PMSG( SubNoise_pmsg );CK_DLL_CTRL( SubNoise_ctrl_rate );CK_DLL_CGET( SubNoise_cget_rate ); // BLTCK_DLL_CTOR( BLT_ctor );CK_DLL_DTOR( BLT_dtor );CK_DLL_TICK( BLT_tick );CK_DLL_PMSG( BLT_pmsg );CK_DLL_CTRL( BLT_ctrl_phase );CK_DLL_CGET( BLT_cget_phase );CK_DLL_CTRL( BLT_ctrl_freq );CK_DLL_CGET( BLT_cget_freq );CK_DLL_CTRL( BLT_ctrl_harmonics );CK_DLL_CGET( BLT_cget_harmonics ); // BlitCK_DLL_CTOR( Blit_ctor );CK_DLL_DTOR( Blit_dtor );CK_DLL_TICK( Blit_tick );CK_DLL_PMSG( Blit_pmsg ); // BlitSawCK_DLL_CTOR( BlitSaw_ctor );CK_DLL_DTOR( BlitSaw_dtor );CK_DLL_TICK( BlitSaw_tick );CK_DLL_PMSG( BlitSaw_pmsg ); // BlitSquareCK_DLL_CTOR( BlitSquare_ctor );CK_DLL_DTOR( BlitSquare_dtor );CK_DLL_TICK( BlitSquare_tick );CK_DLL_PMSG( BlitSquare_pmsg ); // JCRevCK_DLL_CTOR( JCRev_ctor );CK_DLL_DTOR( JCRev_dtor );CK_DLL_TICK( JCRev_tick );CK_DLL_PMSG( JCRev_pmsg );CK_DLL_CTRL( JCRev_ctrl_mix );CK_DLL_CGET( JCRev_cget_mix ); // NRevCK_DLL_CTOR( NRev_ctor );CK_DLL_DTOR( NRev_dtor );CK_DLL_TICK( NRev_tick );CK_DLL_PMSG( NRev_pmsg );CK_DLL_CTRL( NRev_ctrl_mix );CK_DLL_CGET( NRev_cget_mix ); // PRCRevCK_DLL_CTOR( PRCRev_ctor );CK_DLL_DTOR( PRCRev_dtor );CK_DLL_TICK( PRCRev_tick );CK_DLL_PMSG( PRCRev_pmsg );CK_DLL_CTRL( PRCRev_ctrl_mix );CK_DLL_CGET( PRCRev_cget_mix ); // WaveLoopCK_DLL_CTOR( WaveLoop_ctor );CK_DLL_DTOR( WaveLoop_dtor );CK_DLL_TICK( WaveLoop_tick );CK_DLL_PMSG( WaveLoop_pmsg );CK_DLL_CTRL( WaveLoop_ctrl_freq );CK_DLL_CTRL( WaveLoop_ctrl_rate );CK_DLL_CTRL( WaveLoop_ctrl_phase );CK_DLL_CTRL( WaveLoop_ctrl_phaseOffset );CK_DLL_CTRL( WaveLoop_ctrl_path );CK_DLL_CGET( WaveLoop_cget_freq );CK_DLL_CGET( WaveLoop_cget_rate );CK_DLL_CGET( WaveLoop_cget_phase );CK_DLL_CGET( WaveLoop_cget_phaseOffset );CK_DLL_CGET( WaveLoop_cget_path ); // WvInCK_DLL_CTOR( WvIn_ctor );CK_DLL_DTOR( WvIn_dtor );CK_DLL_TICK( WvIn_tick );CK_DLL_PMSG( WvIn_pmsg );CK_DLL_CTRL( WvIn_ctrl_rate );CK_DLL_CTRL( WvIn_ctrl_path );CK_DLL_CGET( WvIn_cget_rate );CK_DLL_CGET( WvIn_cget_path ); #ifndef __DISABLE_WVOUT__// WvOutCK_DLL_CTOR( WvOut_ctor );CK_DLL_DTOR( WvOut_dtor );CK_DLL_TICK( WvOut_tick );CK_DLL_PMSG( WvOut_pmsg );CK_DLL_CTRL( WvOut_ctrl_filename );CK_DLL_CTRL( WvOut_ctrl_aifFilename );CK_DLL_CTRL( WvOut_ctrl_aifFilename2 );CK_DLL_CTRL( WvOut_ctrl_matFilename );CK_DLL_CTRL( WvOut_ctrl_matFilename2 );CK_DLL_CTRL( WvOut_ctrl_sndFilename );CK_DLL_CTRL( WvOut_ctrl_sndFilename2 );CK_DLL_CTRL( WvOut_ctrl_wavFilename );CK_DLL_CTRL( WvOut_ctrl_wavFilename2 );CK_DLL_CTRL( WvOut_ctrl_rawFilename );CK_DLL_CTRL( WvOut_ctrl_rawFilename2 );CK_DLL_CTRL( WvOut_ctrl_closeFile );CK_DLL_CTRL( WvOut_ctrl_record );CK_DLL_CTRL( WvOut_ctrl_autoPrefix );CK_DLL_CGET( WvOut_cget_filename );CK_DLL_CGET( WvOut_cget_record );CK_DLL_CGET( WvOut_cget_autoPrefix );CK_DLL_CTRL( WvOut_ctrl_fileGain );CK_DLL_CGET( WvOut_cget_fileGain );// WvOut2CK_DLL_TICKF( WvOut2_tickf );#endif // FMCK_DLL_CTOR( FM_ctor );CK_DLL_DTOR( FM_dtor );CK_DLL_TICK( FM_tick );CK_DLL_PMSG( FM_pmsg );CK_DLL_CTRL( FM_ctrl_freq );CK_DLL_CTRL( FM_ctrl_noteOn );CK_DLL_CTRL( FM_ctrl_noteOff );CK_DLL_CTRL( FM_ctrl_modDepth );CK_DLL_CTRL( FM_ctrl_modSpeed );CK_DLL_CTRL( FM_ctrl_control1 );CK_DLL_CTRL( FM_ctrl_control2 );CK_DLL_CTRL( FM_ctrl_controlChange );CK_DLL_CTRL( FM_ctrl_afterTouch );// 1.4.1.0 (prc) REPAIRATHON2021 NEW Set/Get access functionsCK_DLL_CTRL( FM_ctrl_opADSR );CK_DLL_CTRL( FM_ctrl_opRatio );CK_DLL_CGET( FM_cget_opRatio );Lines 1–500 of 28883. Load more
/*---------------------------------------------------------------------------- ChucK Concurrent, On-the-fly Audio Programming Language Compiler and Virtual Machine Copyright (c) 2004 Ge Wang and Perry R. Cook. All rights reserved. http://chuck.stanford.edu/ http://chuck.cs.princeton.edu/ This program 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 U.S.A. -----------------------------------------------------------------------------*/ //----------------------------------------------------------------------------- // file: ugen_stk.cpp // desc: ChucK import for Synthesis ToolKit (STK) // by Perry Cook and Gary Scavone // // author: Ge Wang (ge@ccrma.stanford.edu | gewang@cs.princeton.edu) // Perry R. Cook (prc@cs.princeton.edu) // Ananya Misra (amisra@cs.princeton.edu) // Ari Lazier (alazier@cs.princeton.edu) // Philip L. Davidson (philipd@cs.princeton.edu) // Mark Daly (mdaly@cs.princeton.edu) // date: Spring 2004 //----------------------------------------------------------------------------- #include "ugen_stk.h" #include "chuck_type.h" #include "chuck_vm.h" #include "chuck_instr.h" #include "chuck_compile.h" #include "chuck_lang.h" #include "chuck_carrier.h" #include "chuck_errmsg.h" #include "chuck_io.h" #include "chuck_oo.h" #include "util_math.h" #include <stdlib.h> #include <string.h> #include <time.h> #include <float.h> #include <limits.h> //------------------------------------------------------------------------------ // name: union what // desc: the litmus //------------------------------------------------------------------------------ union what { long x; char y[sizeof(long)]; }; t_CKBOOL little_endian = FALSE; // static t_CKUINT g_srate = 0; // filter member data offset static t_CKUINT Instrmnt_offset_data = 0; //static t_CKUINT BandedWG_offset_data = 0; //static t_CKUINT BlowBotl_offset_data = 0; //static t_CKUINT BlowHole_offset_data = 0; //static t_CKUINT Bowed_offset_data = 0; //static t_CKUINT Brass_offset_data = 0; //static t_CKUINT Clarinet_offset_data = 0; //static t_CKUINT Flute_offset_data = 0; //static t_CKUINT Mandolin_offset_data = 0; //static t_CKUINT ModalBar_offset_data = 0; //static t_CKUINT Moog_offset_data = 0; //static t_CKUINT Saxofony_offset_data = 0; //static t_CKUINT Shakers_offset_data = 0; //static t_CKUINT Sitar_offset_data = 0; //static t_CKUINT StifKarp_offset_data = 0; //static t_CKUINT VoicForm_offset_data = 0; static t_CKUINT FM_offset_data = 0; //static t_CKUINT BeeThree_offset_data = 0; // NOTE: TX81Z Algorithm 8 (lots of Organs) //static t_CKUINT FMVoices_offset_data = 0; // NOTE: TX81Z Algorithm 6 //static t_CKUINT HevyMetl_offset_data = 0; // NOTE: TX81Z Algorithm 3 (Trumpet too) //static t_CKUINT HnkyTonk offset_data = 0; // 1.4.1.0 (prc) REPAIRATHON2021 ADDITION, TX81Z Algorithm 1 //static t_CKUINT FrencHrn offset_data = 0; // 1.4.1.0 (prc) REPAIRATHON2021 ADDITION, TX81Z Algorithm 2 //static t_CKUINT KrstlChr offset_data = 0; // 1.4.1.0 (prc) REPAIRATHON2021 ADDITION, TX81Z Algorithm 7 //static t_CKUINT PercFlut_offset_data = 0; // NOTE: TX81Z Algorithm 4 //static t_CKUINT Rhodey_offset_data = 0; // NOTE: TX81Z Algorithm 5 (also Wurley, TubeBell) //static t_CKUINT TubeBell_offset_data = 0; // NOTE: TX81Z Algorithm 5 (also Rhodey, Wurley) //static t_CKUINT Wurley_offset_data = 0; // NOTE: TX81Z Algorithm 5 (also Rhodey, TubeBell) static t_CKUINT FormSwep_offset_data = 0; static t_CKUINT Delay_offset_data = 0; static t_CKUINT DelayA_offset_data = 0; static t_CKUINT DelayL_offset_data = 0; static t_CKUINT Echo_offset_data = 0; static t_CKUINT Envelope_offset_data = 0; // static t_CKUINT Envelope_offset_data = 0; static t_CKUINT BiQuad_offset_data = 0; static t_CKUINT FilterStk_offset_data = 0; static t_CKUINT OnePole_offset_data = 0; static t_CKUINT TwoPole_offset_data = 0; static t_CKUINT OneZero_offset_data = 0; static t_CKUINT TwoZero_offset_data = 0; static t_CKUINT PoleZero_offset_data = 0; static t_CKUINT JCRev_offset_data = 0; static t_CKUINT NRev_offset_data = 0; static t_CKUINT PRCRev_offset_data = 0; static t_CKUINT Chorus_offset_data = 0; static t_CKUINT Modulate_offset_data = 0; static t_CKUINT SubNoise_offset_data = 0; static t_CKUINT WvIn_offset_data = 0; //static t_CKUINT WaveLoop_offset_data = 0; static t_CKUINT WvOut_offset_data = 0; static t_CKUINT PitShift_offset_data = 0; static t_CKUINT BLT_offset_data = 0; static t_CKUINT JetTabl_offset_data = 0; static t_CKUINT Mesh2D_offset_data = 0; static t_CKUINT MidiFileIn_offset_data = 0; static t_CKINT ADSR_state_ATTACK = ADSR::ATTACK; static t_CKINT ADSR_state_DECAY = ADSR::DECAY; static t_CKINT ADSR_state_SUSTAIN = ADSR::SUSTAIN; static t_CKINT ADSR_state_RELEASE = ADSR::RELEASE; static t_CKINT ADSR_state_DONE = ADSR::DONE; // SKINI /* SkiniIn SkiniMessage => while(skin.getnextmessage(msg)) msg - type, data parameters, time stamp SkiniOut.send( midi message ) horn ok please -> written at the back of trucks, always, makes no sense. */ // ADSR CK_DLL_CTOR( ADSR_ctor ); CK_DLL_DTOR( ADSR_dtor ); CK_DLL_TICK( ADSR_tick ); CK_DLL_PMSG( ADSR_pmsg ); CK_DLL_CTRL( ADSR_ctrl_attackTime ); CK_DLL_CTRL( ADSR_ctrl_attackRate ); CK_DLL_CTRL( ADSR_ctrl_decayTime ); CK_DLL_CTRL( ADSR_ctrl_decayRate ); CK_DLL_CTRL( ADSR_ctrl_sustainLevel ); CK_DLL_CTRL( ADSR_ctrl_releaseTime ); CK_DLL_CTRL( ADSR_ctrl_releaseRate ); CK_DLL_CTRL( ADSR_ctrl_set ); CK_DLL_CTRL( ADSR_ctrl_set2 ); CK_DLL_CGET( ADSR_cget_attackTime ); CK_DLL_CGET( ADSR_cget_attackRate ); CK_DLL_CGET( ADSR_cget_decayTime ); CK_DLL_CGET( ADSR_cget_decayRate ); CK_DLL_CGET( ADSR_cget_sustainLevel ); CK_DLL_CGET( ADSR_cget_releaseTime ); CK_DLL_CGET( ADSR_cget_releaseRate ); CK_DLL_CGET( ADSR_cget_state ); // BiQuad CK_DLL_CTOR( BiQuad_ctor ); CK_DLL_DTOR( BiQuad_dtor ); CK_DLL_TICK( BiQuad_tick ); CK_DLL_PMSG( BiQuad_pmsg ); CK_DLL_CTRL( BiQuad_ctrl_b2 ); CK_DLL_CTRL( BiQuad_ctrl_b1 ); CK_DLL_CTRL( BiQuad_ctrl_b0 ); CK_DLL_CTRL( BiQuad_ctrl_a2 ); CK_DLL_CTRL( BiQuad_ctrl_a1 ); CK_DLL_CGET( BiQuad_ctrl_a0 ); CK_DLL_CTRL( BiQuad_ctrl_pfreq ); CK_DLL_CTRL( BiQuad_ctrl_prad ); CK_DLL_CTRL( BiQuad_ctrl_zfreq ); CK_DLL_CTRL( BiQuad_ctrl_zrad ); CK_DLL_CTRL( BiQuad_ctrl_norm ); CK_DLL_CTRL( BiQuad_ctrl_eqzs ); CK_DLL_CGET( BiQuad_cget_b2 ); CK_DLL_CGET( BiQuad_cget_b1 ); CK_DLL_CGET( BiQuad_cget_b0 ); CK_DLL_CGET( BiQuad_cget_a2 ); CK_DLL_CGET( BiQuad_cget_a1 ); CK_DLL_CGET( BiQuad_cget_a0 ); CK_DLL_CTRL( BiQuad_cget_pfreq ); CK_DLL_CTRL( BiQuad_cget_prad ); CK_DLL_CTRL( BiQuad_cget_zfreq ); CK_DLL_CTRL( BiQuad_cget_zrad ); // Chorus CK_DLL_CTOR( Chorus_ctor ); CK_DLL_DTOR( Chorus_dtor ); CK_DLL_TICK( Chorus_tick ); CK_DLL_PMSG( Chorus_pmsg ); CK_DLL_CTRL( Chorus_ctrl_modDepth ); CK_DLL_CTRL( Chorus_ctrl_modFreq ); CK_DLL_CTRL( Chorus_ctrl_baseDelay ); CK_DLL_CTRL( Chorus_ctrl_set ); CK_DLL_CTRL( Chorus_ctrl_mix ); CK_DLL_CGET( Chorus_cget_modDepth ); CK_DLL_CGET( Chorus_cget_modFreq ); CK_DLL_CGET( Chorus_cget_baseDelay ); CK_DLL_CGET( Chorus_cget_mix ); // Delay CK_DLL_CTOR( Delay_ctor ); CK_DLL_DTOR( Delay_dtor ); CK_DLL_TICK( Delay_tick ); CK_DLL_PMSG( Delay_pmsg ); CK_DLL_CTRL( Delay_ctrl_delay ); CK_DLL_CTRL( Delay_ctrl_max ); CK_DLL_CGET( Delay_cget_delay ); CK_DLL_CGET( Delay_cget_max ); CK_DLL_CGET( Delay_clear ); // DelayA CK_DLL_CTOR( DelayA_ctor ); CK_DLL_DTOR( DelayA_dtor ); CK_DLL_TICK( DelayA_tick ); CK_DLL_PMSG( DelayA_pmsg ); CK_DLL_CTRL( DelayA_ctrl_delay ); CK_DLL_CTRL( DelayA_ctrl_max ); CK_DLL_CGET( DelayA_cget_delay ); CK_DLL_CGET( DelayA_cget_max ); CK_DLL_CGET( DelayA_clear ); // DelayL CK_DLL_CTOR( DelayL_ctor ); CK_DLL_DTOR( DelayL_dtor ); CK_DLL_TICK( DelayL_tick ); CK_DLL_PMSG( DelayL_pmsg ); CK_DLL_CTRL( DelayL_ctrl_delay ); CK_DLL_CTRL( DelayL_ctrl_max ); CK_DLL_CGET( DelayL_cget_delay ); CK_DLL_CGET( DelayL_cget_max ); CK_DLL_CGET( DelayL_clear ); // Echo CK_DLL_CTOR( Echo_ctor ); CK_DLL_DTOR( Echo_dtor ); CK_DLL_TICK( Echo_tick ); CK_DLL_PMSG( Echo_pmsg ); CK_DLL_CTRL( Echo_ctrl_delay ); CK_DLL_CTRL( Echo_ctrl_max ); CK_DLL_CTRL( Echo_ctrl_mix ); CK_DLL_CGET( Echo_cget_delay ); CK_DLL_CGET( Echo_cget_max ); CK_DLL_CGET( Echo_cget_mix ); // Envelope CK_DLL_CTOR( Envelope_ctor ); CK_DLL_DTOR( Envelope_dtor ); CK_DLL_TICK( Envelope_tick ); CK_DLL_PMSG( Envelope_pmsg ); CK_DLL_CTRL( Envelope_ctrl_rate ); CK_DLL_CTRL( Envelope_ctrl_target ); CK_DLL_CTRL( Envelope_cget_target ); CK_DLL_CTRL( Envelope_ctrl_time ); CK_DLL_CTRL( Envelope_ctrl_duration ); CK_DLL_CTRL( Envelope_ctrl_value ); CK_DLL_CTRL( Envelope_cget_value ); CK_DLL_CTRL( Envelope_ctrl_keyOn0 ); CK_DLL_CTRL( Envelope_ctrl_keyOn ); CK_DLL_CTRL( Envelope_ctrl_keyOff0 ); CK_DLL_CTRL( Envelope_ctrl_keyOff ); CK_DLL_CGET( Envelope_cget_rate ); CK_DLL_CGET( Envelope_cget_target ); CK_DLL_CGET( Envelope_cget_time ); CK_DLL_CGET( Envelope_cget_duration ); CK_DLL_CGET( Envelope_cget_value ); // FilterStk (originally Filter) CK_DLL_CTOR( FilterStk_ctor ); CK_DLL_DTOR( FilterStk_dtor ); CK_DLL_TICK( FilterStk_tick ); CK_DLL_PMSG( FilterStk_pmsg ); CK_DLL_CTRL( FilterStk_ctrl_coefs ); CK_DLL_CGET( FilterStk_cget_coefs ); // OnePole CK_DLL_CTOR( OnePole_ctor ); CK_DLL_DTOR( OnePole_dtor ); CK_DLL_TICK( OnePole_tick ); CK_DLL_PMSG( OnePole_pmsg ); CK_DLL_CTRL( OnePole_ctrl_a1 ); CK_DLL_CTRL( OnePole_ctrl_b0 ); CK_DLL_CTRL( OnePole_ctrl_pole ); CK_DLL_CGET( OnePole_cget_a1 ); CK_DLL_CGET( OnePole_cget_b0 ); CK_DLL_CGET( OnePole_cget_pole ); // TwoPole CK_DLL_CTOR( TwoPole_ctor ); CK_DLL_DTOR( TwoPole_dtor ); CK_DLL_TICK( TwoPole_tick ); CK_DLL_PMSG( TwoPole_pmsg ); CK_DLL_CTRL( TwoPole_ctrl_a1 ); CK_DLL_CTRL( TwoPole_ctrl_a2 ); CK_DLL_CTRL( TwoPole_ctrl_b0 ); CK_DLL_CTRL( TwoPole_ctrl_freq ); CK_DLL_CTRL( TwoPole_ctrl_radius ); CK_DLL_CTRL( TwoPole_ctrl_norm ); CK_DLL_CGET( TwoPole_cget_a1 ); CK_DLL_CGET( TwoPole_cget_a2 ); CK_DLL_CGET( TwoPole_cget_b0 ); CK_DLL_CGET( TwoPole_cget_freq ); CK_DLL_CGET( TwoPole_cget_radius ); CK_DLL_CGET( TwoPole_cget_norm ); // OneZero CK_DLL_CTOR( OneZero_ctor ); CK_DLL_DTOR( OneZero_dtor ); CK_DLL_TICK( OneZero_tick ); CK_DLL_PMSG( OneZero_pmsg ); CK_DLL_CTRL( OneZero_ctrl_zero ); CK_DLL_CTRL( OneZero_ctrl_b0 ); CK_DLL_CTRL( OneZero_ctrl_b1 ); CK_DLL_CGET( OneZero_cget_zero ); CK_DLL_CGET( OneZero_cget_b0 ); CK_DLL_CGET( OneZero_cget_b1 ); // TwoZero CK_DLL_CTOR( TwoZero_ctor ); CK_DLL_DTOR( TwoZero_dtor ); CK_DLL_TICK( TwoZero_tick ); CK_DLL_PMSG( TwoZero_pmsg ); CK_DLL_CTRL( TwoZero_ctrl_b0 ); CK_DLL_CTRL( TwoZero_ctrl_b1 ); CK_DLL_CTRL( TwoZero_ctrl_b2 ); CK_DLL_CTRL( TwoZero_ctrl_freq ); CK_DLL_CTRL( TwoZero_ctrl_radius ); CK_DLL_CGET( TwoZero_cget_b0 ); CK_DLL_CGET( TwoZero_cget_b1 ); CK_DLL_CGET( TwoZero_cget_b2 ); CK_DLL_CGET( TwoZero_cget_freq ); CK_DLL_CGET( TwoZero_cget_radius ); // PoleZero CK_DLL_CTOR( PoleZero_ctor ); CK_DLL_DTOR( PoleZero_dtor ); CK_DLL_TICK( PoleZero_tick ); CK_DLL_PMSG( PoleZero_pmsg ); CK_DLL_CTRL( PoleZero_ctrl_a1 ); CK_DLL_CTRL( PoleZero_ctrl_b0 ); CK_DLL_CTRL( PoleZero_ctrl_b1 ); CK_DLL_CTRL( PoleZero_ctrl_blockZero ); CK_DLL_CTRL( PoleZero_ctrl_allpass ); CK_DLL_CGET( PoleZero_cget_a1 ); CK_DLL_CGET( PoleZero_cget_b0 ); CK_DLL_CGET( PoleZero_cget_b1 ); CK_DLL_CGET( PoleZero_cget_blockZero ); CK_DLL_CGET( PoleZero_cget_allpass ); // Noise CK_DLL_CTOR( Noise_ctor ); CK_DLL_DTOR( Noise_dtor ); CK_DLL_TICK( Noise_tick ); CK_DLL_PMSG( Noise_pmsg ); CK_DLL_CTRL( Noise_ctrl_seed ); CK_DLL_CGET( Noise_cget_seed ); // SubNoise CK_DLL_CTOR( SubNoise_ctor ); CK_DLL_DTOR( SubNoise_dtor ); CK_DLL_TICK( SubNoise_tick ); CK_DLL_PMSG( SubNoise_pmsg ); CK_DLL_CTRL( SubNoise_ctrl_rate ); CK_DLL_CGET( SubNoise_cget_rate ); // BLT CK_DLL_CTOR( BLT_ctor ); CK_DLL_DTOR( BLT_dtor ); CK_DLL_TICK( BLT_tick ); CK_DLL_PMSG( BLT_pmsg ); CK_DLL_CTRL( BLT_ctrl_phase ); CK_DLL_CGET( BLT_cget_phase ); CK_DLL_CTRL( BLT_ctrl_freq ); CK_DLL_CGET( BLT_cget_freq ); CK_DLL_CTRL( BLT_ctrl_harmonics ); CK_DLL_CGET( BLT_cget_harmonics ); // Blit CK_DLL_CTOR( Blit_ctor ); CK_DLL_DTOR( Blit_dtor ); CK_DLL_TICK( Blit_tick ); CK_DLL_PMSG( Blit_pmsg ); // BlitSaw CK_DLL_CTOR( BlitSaw_ctor ); CK_DLL_DTOR( BlitSaw_dtor ); CK_DLL_TICK( BlitSaw_tick ); CK_DLL_PMSG( BlitSaw_pmsg ); // BlitSquare CK_DLL_CTOR( BlitSquare_ctor ); CK_DLL_DTOR( BlitSquare_dtor ); CK_DLL_TICK( BlitSquare_tick ); CK_DLL_PMSG( BlitSquare_pmsg ); // JCRev CK_DLL_CTOR( JCRev_ctor ); CK_DLL_DTOR( JCRev_dtor ); CK_DLL_TICK( JCRev_tick ); CK_DLL_PMSG( JCRev_pmsg ); CK_DLL_CTRL( JCRev_ctrl_mix ); CK_DLL_CGET( JCRev_cget_mix ); // NRev CK_DLL_CTOR( NRev_ctor ); CK_DLL_DTOR( NRev_dtor ); CK_DLL_TICK( NRev_tick ); CK_DLL_PMSG( NRev_pmsg ); CK_DLL_CTRL( NRev_ctrl_mix ); CK_DLL_CGET( NRev_cget_mix ); // PRCRev CK_DLL_CTOR( PRCRev_ctor ); CK_DLL_DTOR( PRCRev_dtor ); CK_DLL_TICK( PRCRev_tick ); CK_DLL_PMSG( PRCRev_pmsg ); CK_DLL_CTRL( PRCRev_ctrl_mix ); CK_DLL_CGET( PRCRev_cget_mix ); // WaveLoop CK_DLL_CTOR( WaveLoop_ctor ); CK_DLL_DTOR( WaveLoop_dtor ); CK_DLL_TICK( WaveLoop_tick ); CK_DLL_PMSG( WaveLoop_pmsg ); CK_DLL_CTRL( WaveLoop_ctrl_freq ); CK_DLL_CTRL( WaveLoop_ctrl_rate ); CK_DLL_CTRL( WaveLoop_ctrl_phase ); CK_DLL_CTRL( WaveLoop_ctrl_phaseOffset ); CK_DLL_CTRL( WaveLoop_ctrl_path ); CK_DLL_CGET( WaveLoop_cget_freq ); CK_DLL_CGET( WaveLoop_cget_rate ); CK_DLL_CGET( WaveLoop_cget_phase ); CK_DLL_CGET( WaveLoop_cget_phaseOffset ); CK_DLL_CGET( WaveLoop_cget_path ); // WvIn CK_DLL_CTOR( WvIn_ctor ); CK_DLL_DTOR( WvIn_dtor ); CK_DLL_TICK( WvIn_tick ); CK_DLL_PMSG( WvIn_pmsg ); CK_DLL_CTRL( WvIn_ctrl_rate ); CK_DLL_CTRL( WvIn_ctrl_path ); CK_DLL_CGET( WvIn_cget_rate ); CK_DLL_CGET( WvIn_cget_path ); #ifndef __DISABLE_WVOUT__ // WvOut CK_DLL_CTOR( WvOut_ctor ); CK_DLL_DTOR( WvOut_dtor ); CK_DLL_TICK( WvOut_tick ); CK_DLL_PMSG( WvOut_pmsg ); CK_DLL_CTRL( WvOut_ctrl_filename ); CK_DLL_CTRL( WvOut_ctrl_aifFilename ); CK_DLL_CTRL( WvOut_ctrl_aifFilename2 ); CK_DLL_CTRL( WvOut_ctrl_matFilename ); CK_DLL_CTRL( WvOut_ctrl_matFilename2 ); CK_DLL_CTRL( WvOut_ctrl_sndFilename ); CK_DLL_CTRL( WvOut_ctrl_sndFilename2 ); CK_DLL_CTRL( WvOut_ctrl_wavFilename ); CK_DLL_CTRL( WvOut_ctrl_wavFilename2 ); CK_DLL_CTRL( WvOut_ctrl_rawFilename ); CK_DLL_CTRL( WvOut_ctrl_rawFilename2 ); CK_DLL_CTRL( WvOut_ctrl_closeFile ); CK_DLL_CTRL( WvOut_ctrl_record ); CK_DLL_CTRL( WvOut_ctrl_autoPrefix ); CK_DLL_CGET( WvOut_cget_filename ); CK_DLL_CGET( WvOut_cget_record ); CK_DLL_CGET( WvOut_cget_autoPrefix ); CK_DLL_CTRL( WvOut_ctrl_fileGain ); CK_DLL_CGET( WvOut_cget_fileGain ); // WvOut2 CK_DLL_TICKF( WvOut2_tickf ); #endif // FM CK_DLL_CTOR( FM_ctor ); CK_DLL_DTOR( FM_dtor ); CK_DLL_TICK( FM_tick ); CK_DLL_PMSG( FM_pmsg ); CK_DLL_CTRL( FM_ctrl_freq ); CK_DLL_CTRL( FM_ctrl_noteOn ); CK_DLL_CTRL( FM_ctrl_noteOff ); CK_DLL_CTRL( FM_ctrl_modDepth ); CK_DLL_CTRL( FM_ctrl_modSpeed ); CK_DLL_CTRL( FM_ctrl_control1 ); CK_DLL_CTRL( FM_ctrl_control2 ); CK_DLL_CTRL( FM_ctrl_controlChange ); CK_DLL_CTRL( FM_ctrl_afterTouch ); // 1.4.1.0 (prc) REPAIRATHON2021 NEW Set/Get access functions CK_DLL_CTRL( FM_ctrl_opADSR ); CK_DLL_CTRL( FM_ctrl_opRatio ); CK_DLL_CGET( FM_cget_opRatio );