/usr/include/stk/Skini.h is in libstk0-dev 4.5.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | #ifndef STK_SKINI_H
#define STK_SKINI_H
#include "Stk.h"
#include <vector>
#include <string>
#include <fstream>
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--2014.
*/
/***************************************************/
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<StkFloat> floatValues; /*!< The message values read as floats (values are type-specific). */
std::vector<long> 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<std::string>& 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
|