mirror of
https://github.com/thestk/stk
synced 2026-01-20 07:51:53 +00:00
Version 3.2
This commit is contained in:
committed by
Stephen Sinclair
parent
4b6500d3de
commit
3f126af4e5
70
include/VoicMang.h
Normal file
70
include/VoicMang.h
Normal file
@@ -0,0 +1,70 @@
|
||||
/******************************************/
|
||||
/* Simple Voice Manager (Mangler) */
|
||||
/* for ToolKit96, 1996 Perry R. Cook */
|
||||
/* Princeton University */
|
||||
/* */
|
||||
/* Make one of these by telling it the */
|
||||
/* maximum number of voices you'll want, */
|
||||
/* and also what flavor instrument */
|
||||
/* group it will be mangling. Pipe SKINI*/
|
||||
/* messages into it and it will return */
|
||||
/* the mixed channel signal each tick. */
|
||||
/* For multi-channel (multi-timbral), */
|
||||
/* make one for each channel and mix */
|
||||
/* their outputs. */
|
||||
/* */
|
||||
/* Each note on returns a unique tag, */
|
||||
/* (credits to the NeXT MusicKit here), */
|
||||
/* so you can send control changes to */
|
||||
/* unique instances of instruments */
|
||||
/* within an ensemble. */
|
||||
/* */
|
||||
/* SKINI (Synthesis toolKit Instrument */
|
||||
/* Network Interface) is like MIDI, but */
|
||||
/* allows for floating point control */
|
||||
/* changes, note numbers, etc. Example: */
|
||||
/* noteOn 60.01 111.132 plays a sharp */
|
||||
/* middle C with a velocity of 111.132 */
|
||||
/* See SKINI09.txt for more information */
|
||||
/* */
|
||||
/******************************************/
|
||||
|
||||
#include "Object.h"
|
||||
|
||||
#if !defined(__VoicMang_h)
|
||||
#define __VoicMang_h
|
||||
|
||||
#include "Instrmnt.h"
|
||||
|
||||
#define __VMang_MAX_ 8
|
||||
|
||||
class VoicMang : public Object
|
||||
{
|
||||
protected:
|
||||
char InstrumentType[16]; // Instrument Flavor
|
||||
int max_voices;
|
||||
long newTag; // Unique NoteOn tag counter
|
||||
Instrmnt *instrument[__VMang_MAX_]; // The actual Instruments
|
||||
long voicesOn[__VMang_MAX_]; // Tags of Sounding Notes
|
||||
int notesOn[__VMang_MAX_]; // Note Numbers On
|
||||
long mute_time; // Instrument time to shut up
|
||||
MY_FLOAT freqBases[__VMang_MAX_]; // Indiv. Pitch Bend Multipliers
|
||||
MY_FLOAT frequencies[__VMang_MAX_]; // Indiv. Sounding Frequencies
|
||||
MY_FLOAT pitch_bend; // Channel Pitch Bend Mult.
|
||||
public:
|
||||
VoicMang(int maxVoices, char *instrType);
|
||||
~VoicMang();
|
||||
long noteOnN(MY_FLOAT noteNum, MY_FLOAT amp);
|
||||
long noteOn(MY_FLOAT freq, MY_FLOAT amp);
|
||||
void noteOffT(long tag, MY_FLOAT amp);
|
||||
long noteOffN(int note_num, MY_FLOAT amp);
|
||||
long oldestVoice();
|
||||
void kill(long tag);
|
||||
void controlChange(int number, MY_FLOAT value);
|
||||
void controlChangeT(long tag, int number, MY_FLOAT value);
|
||||
void pitchBend(MY_FLOAT value);
|
||||
void pitchBendT(long tag, MY_FLOAT value);
|
||||
MY_FLOAT tick();
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user