/***************************************************/ /*! \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 file specification is Perry's and his alone, but it's all text so it shouldn't be to 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.13 \endcode \sa \ref skini by Perry R. Cook and Gary P. Scavone, 1995 - 2002. */ /***************************************************/ #if !defined(__SKINI_H) #define __SKINI_H #include "Stk.h" #include class SKINI : public Stk { public: //! Default constructor used for parsing messages received externally. SKINI(); //! Overloaded constructor taking a SKINI formatted scorefile. SKINI(char *fileName); //! Class destructor ~SKINI(); //! Attempt to parse the given string, returning the message type. /*! A type value equal to zero indicates an invalid message. */ long parseThis(char* aString); //! Parse the next message (if a file is loaded) and return the message type. /*! A negative value is returned when the file end is reached. */ long nextMessage(); //! Return the current message type. long getType() const; //! Return the current message channel value. long getChannel() const; //! Return the current message delta time value (in seconds). MY_FLOAT getDelta() const; //! Return the current message byte two value. MY_FLOAT getByteTwo() const; //! Return the current message byte three value. MY_FLOAT getByteThree() const; //! Return the current message byte two value (integer). long getByteTwoInt() const; //! Return the current message byte three value (integer). long getByteThreeInt() const; //! Return remainder string after parsing. const char* getRemainderString(); //! Return the message type as a string. const char* getMessageTypeString(); //! Return the SKINI type string for the given type value. const char* whatsThisType(long type); //! Return the SKINI controller string for the given controller number. const char* whatsThisController(long number); protected: FILE *myFile; long messageType; char msgTypeString[64]; long channel; MY_FLOAT deltaTime; MY_FLOAT byteTwo; MY_FLOAT byteThree; long byteTwoInt; long byteThreeInt; char remainderString[1024]; char whatString[1024]; }; static const double Midi2Pitch[129] = { 8.18,8.66,9.18,9.72,10.30,10.91,11.56,12.25, 12.98,13.75,14.57,15.43,16.35,17.32,18.35,19.45, 20.60,21.83,23.12,24.50,25.96,27.50,29.14,30.87, 32.70,34.65,36.71,38.89,41.20,43.65,46.25,49.00, 51.91,55.00,58.27,61.74,65.41,69.30,73.42,77.78, 82.41,87.31,92.50,98.00,103.83,110.00,116.54,123.47, 130.81,138.59,146.83,155.56,164.81,174.61,185.00,196.00, 207.65,220.00,233.08,246.94,261.63,277.18,293.66,311.13, 329.63,349.23,369.99,392.00,415.30,440.00,466.16,493.88, 523.25,554.37,587.33,622.25,659.26,698.46,739.99,783.99, 830.61,880.00,932.33,987.77,1046.50,1108.73,1174.66,1244.51, 1318.51,1396.91,1479.98,1567.98,1661.22,1760.00,1864.66,1975.53, 2093.00,2217.46,2349.32,2489.02,2637.02,2793.83,2959.96,3135.96, 3322.44,3520.00,3729.31,3951.07,4186.01,4434.92,4698.64,4978.03, 5274.04,5587.65,5919.91,6271.93,6644.88,7040.00,7458.62,7902.13, 8372.02,8869.84,9397.27,9956.06,10548.08,11175.30,11839.82,12543.85, 13289.75}; #endif