computerscare-vcv-modules

ComputerScare modules for VCV Rack
Log | Files | Refs

dtpulse.hpp (6785B)


      1 
      2 #include <string>
      3 #include <sstream>
      4 #include <iomanip>
      5 #include <iostream>
      6 #include <vector>
      7 #include <algorithm>
      8 #include <typeinfo>
      9 #include <stdexcept>
     10 #include <math.h>
     11 
     12 #ifndef MY_GLOBALS_H
     13 #define MY_GLOBALS_H
     14 extern std::string b64lookup;
     15 extern std::string integerlookup;
     16 extern std::string knoblookup;
     17 extern std::string inputlookup;
     18 extern std::string knobandinputlookup;
     19 #endif
     20 
     21 class Token {
     22 public:
     23 	std::string type;
     24 	std::string value;
     25 	int index;
     26 	int duration;
     27 	Token(std::string t, std::string v);
     28 	Token(std::string t, std::string v, int dex, int dur);
     29 	Token(std::string t, std::string v, int dex);
     30 	Token(std::string t, int val);
     31 	Token(const Token& source);
     32 	void print();
     33 };
     34 class Parser {
     35 public:
     36 	Parser();
     37 	Parser(std::string expr);
     38 	std::string expression;
     39 	std::vector<Token> tokens;
     40 	char peekChar();
     41 	char skipAndPeekChar();
     42 	void skipChar();
     43 
     44 	Token peekToken();
     45 	Token skipAndPeekToken();
     46 	void setForCookies();
     47 	void setForLaundry();
     48 	void setForLaundryPoly();
     49 	void setForQuantizer();
     50 	void skipToken();
     51 	void setExactValue(Token t);
     52 	void setForExactIntegers(Token t);
     53 	void setFormula(Token t, std::vector<std::string> operatorWhitelist, bool laundryMode);
     54 	void setForVariables(Token t);
     55 	void setForChanceOfIntegers(Token t);
     56 	void setForRandoms(Token t);
     57 	void replaceLettersWithNumbers(Token t);
     58 	void setForInterleave(Token t, std::vector<std::string> whitelist);
     59 	void setForAtExpand(Token t, std::vector<std::string> whitelist, bool laundryMode);
     60 	void setForSquareBrackets(Token t, std::vector<std::string> whitelist, bool laundryMode);
     61 	void setFinal(Token t, std::vector<std::string> whitelist);
     62 	bool inError;
     63 	std::string parseFloat(Token t);
     64 	std::vector<Token> tokenStack;
     65 	std::vector<float> exactFloats;
     66 	std::vector<std::vector<Token>> randomVector;
     67 	std::vector<Token> atExpandTokens(std::vector<std::vector<Token>> tokenVecVec, int atNum);
     68 	std::vector<Token> countExpandTokens(std::vector<std::vector<Token>> tokenVecVec, int atNum);
     69 private:
     70 	int currentIndex;
     71 	void ParseExactValue(Token t);
     72 	void ParseExactInteger(Token t);
     73 	void ParseFormula(Token t, std::vector<std::string> operatorWhitelist, bool laundryMode);
     74 	void ParseVariable(Token t);
     75 	void ParseRandomSequence(Token t);
     76 	void ParseInterleave(Token t, std::vector<std::string> whitelist);
     77 	void ParseAtExpand(Token t, std::vector<std::string> whitelist, bool laundryMode);
     78 	void ParseSquareBrackets(Token t, std::vector<std::string> whitelist, bool laundryMode);
     79 	void ParseChanceOfInteger(Token t);
     80 	int ParseAtPart(Token t);
     81 };
     82 class AbsoluteSequence {
     83 public:
     84 	AbsoluteSequence(std::string expr, std::string lookup);
     85 	AbsoluteSequence();
     86 	void randomizeIndex(int index);
     87 	std::vector<int> indexSequence;
     88 	std::vector<int> workingIndexSequence;
     89 	std::vector<float> exactFloats;
     90 	std::vector<std::vector<int>> randomIndexes;
     91 	std::vector<std::vector<Token>> randomTokens;
     92 	std::vector<Token> tokenStack;
     93 	int readHead;
     94 	int numTokens;
     95 	void print();
     96 	bool inError;
     97 	void skipStep();
     98 	int peekStep();
     99 	int peekWorkingStep();
    100 	int skipAndPeek();
    101 	void incrementAndCheck();
    102 	int getReadHead();
    103 	int getCurrentAddressAtReadHead();
    104 	std::string getWorkingStepDisplay();
    105 };
    106 
    107 class LaundrySoupSequence {
    108 public:
    109 	LaundrySoupSequence(std::string expr);
    110 	LaundrySoupSequence(const std::vector<Token>& tokens);
    111 	LaundrySoupSequence();
    112 	void Tokenize(std::string formula);
    113 	void Setup(std::vector<Token> tokens);
    114 	std::vector<Token> tokenStack;
    115 	std::vector<int> pulseSequence;
    116 	std::vector<int> workingPulseSequence;
    117 	std::vector<int> makePulseSequence(std::vector<Token> tokens);
    118 	int readHead;
    119 	int numSteps;
    120 	bool inError;
    121 	void print();
    122 	int peekStep();
    123 	void skipStep();
    124 	int skipAndPeek();
    125 	int peekWorkingStep();
    126 	void incrementAndCheck();
    127 	bool atLastStep();
    128 	void randomizePulseValue(int index);
    129 };
    130 class Quantizer {
    131 public:
    132 	Quantizer(std::string intervals, int divisions, int trans);
    133 	Quantizer();
    134 	float quantize(float val);
    135 	float quantizeEven(float val);
    136 	float quantizeEven(float val, int iTranspose);
    137 	float findEvenSpacingValue(float input, std::vector<float> allowedValues);
    138 	float findEvenSpacingImpure(float input);
    139 	float fNumDivisions;
    140 	std::vector<float> mappedValues;
    141 	int numDivisions;
    142 	int transpose;
    143 	bool parseError;
    144 	int numSteps;
    145 	float fTranspose;
    146 	void print();
    147 private:
    148 	Parser scaleParser;
    149 	float findClosestValue(float input, std::vector<float> allowedValues);
    150 
    151 	std::vector<float> generateMappedValues();
    152 };
    153 class LaundryPoly {
    154 public:
    155 	LaundrySoupSequence lss[16];
    156 	int maxIndex;
    157 	int maxSteps;
    158 	LaundryPoly(std::string formula);
    159 	LaundryPoly();
    160 	bool maxChannelAtLastStep();
    161 
    162 	void print();
    163 	bool inError;
    164 };
    165 bool matchesAny(std::string val, std::vector<std::string> whitelist);
    166 bool is_digits(const std::string &str);
    167 void padTo(std::string &str, const size_t num, const char paddingChar );
    168 
    169 std::vector <int> parseString(std::string expr);
    170 std::vector <int> parseDt(std::string input, int offset, std::string lookup);
    171 std::vector <int> parseLookup(std::string input, int offset, std::string lookup);
    172 std::vector<int> parseEntireString(std::string input, std::string lookup, int type);
    173 std::vector<int> parseStringAsValues(std::string input, std::string lookup);
    174 std::vector<int> parseStringAsTimes(std::string input, std::string lookup);
    175 void printVector(std::vector <int> intVector);
    176 void printFloatVector(std::vector<float> floatVector);
    177 void printTokenVector(std::vector<std::vector<Token>> tokenVector);
    178 void printTokenVector(std::vector<Token> tokenVector);
    179 std::string splitRecur(std::string input);
    180 void  parseRecur(Token t);
    181 std::string interleaveExpand(std::vector<std::string> blocks);
    182 std::vector<Token> interleaveExpand(std::vector<std::vector<Token>> blocks);
    183 std::string hashExpand(std::string input, int hashnum);
    184 std::string atExpand(std::string input, int atnum, std::string lookup);
    185 std::string countExpand(std::string input, int atnum);
    186 std::string concatVectorFromLookup(std::vector<int> vector, std::string lookup);
    187 std::vector<Token> tokenizeString(std::string input);
    188 bool matchParens(std::string value);
    189 std::string evalToken(std::string input, std::string type, std::vector<Token> tStack);
    190 void whoKnows(std::string input);
    191 void whoKnowsLaundry(std::string input);
    192 void whoKnowsLaundryPoly(std::string input);
    193 void whoKnowsQuantize(std::string input);
    194 std::vector<int> getIndicesFromTokenStack(std::vector<Token> tokens);
    195 std::vector<int> duplicateIntVector(std::vector<int> input);
    196 std::string getByteString(float f);
    197 void replaceAll(std::string& str, const std::string& from, const std::string& to);
    198 float mapChannelCountToVoltage(int ch);
    199 int mapVoltageToChannelCount(float vv);
    200 int myPow(int x, int p);
    201 std::vector<std::string> split(std::string strToSplit, char delimeter);
    202 void swap (int *a, int *b);