void Alg_midifile_reader::Mf_program(int chan, int program) { Alg_parameter parameter; parameter.set_attr(symbol_table.insert_string("programi")); parameter.i = program; update(chan, -1, ¶meter); meta_channel = -1; }
void Alg_midifile_reader::Mf_chanpressure(int chan, int val) { Alg_parameter parameter; parameter.set_attr(symbol_table.insert_string("pressurer")); parameter.r = val / 127.0; update(chan, -1, ¶meter); meta_channel = -1; }
void Alg_midifile_reader::Mf_pitchbend(int chan, int c1, int c2) { Alg_parameter parameter; parameter.set_attr(symbol_table.insert_string("bendr")); parameter.r = ((c2 << 7) + c1) / 8192.0 - 1.0; update(chan, -1, ¶meter); meta_channel = -1; }
void Alg_midifile_reader::Mf_controller(int chan, int control, int val) { Alg_parameter parameter; char name[32]; sprintf(name, "control%dr", control); parameter.set_attr(symbol_table.insert_string(name)); parameter.r = val / 127.0; update(chan, -1, ¶meter); meta_channel = -1; }
void Alg_midifile_reader::Mf_controller(int chan, int control, int val) { Alg_parameter parameter; char name[32]; #pragma warning(disable: 4996) // name is long enough sprintf(name, "control%dr", control); #pragma warning(default: 4996) parameter.set_attr(symbol_table.insert_string(name)); parameter.r = val / 127.0; update(chan, -1, ¶meter); meta_channel = -1; }
void Alg_midifile_reader::binary_msg(int len, char *msg, const char *attr_string) { Alg_parameter parameter; char *hexstr = new char[len * 2 + 1]; for (int i = 0; i < len; i++) { sprintf(hexstr + 2 * i, "%02x", (0xFF & msg[i])); } parameter.s = hexstr; parameter.set_attr(symbol_table.insert_string(attr_string)); update(meta_channel, -1, ¶meter); }
void Alg_midifile_reader::binary_msg(int len, unsigned char *msg, const char *attr_string) { Alg_parameter parameter; char *hexstr = new char[len * 2 + 1]; for (int i = 0; i < len; i++) { #pragma warning(disable: 4996) // hexstr is long enough sprintf(hexstr + 2 * i, "%02x", (0xFF & msg[i])); #pragma warning(default: 4996) } parameter.s = hexstr; parameter.set_attr(symbol_table.insert_string(attr_string)); update(meta_channel, -1, ¶meter); }
void Alg_midifile_reader::Mf_text(int type, int len, unsigned char *msg) { Alg_parameter text; text.s = heapify2(len, msg); const char *attr = "miscs"; if (type == 1) attr = "texts"; else if (type == 2) attr = "copyrights"; else if (type == 3) attr = (track_number == 0 ? "seqnames" : "tracknames"); else if (type == 4) attr = "instruments"; else if (type == 5) attr = "lyrics"; else if (type == 6) attr = "markers"; else if (type == 7) attr = "cues"; text.set_attr(symbol_table.insert_string(attr)); update(meta_channel, -1, &text); }
void Alg_midifile_reader::Mf_smpte(int hours, int mins, int secs, int frames, int subframes) { // string will look like "24fps:01h:27m:07s:19.00f" // 30fps (drop frame) is notated as "29.97fps" char text[32]; int fps = (hours >> 6) & 3; hours &= 0x1F; sprintf(text, "%sfps:%02dh:%02dm:%02ds:%02d.%02df", fpsstr[fps], hours, mins, secs, frames, subframes); Alg_parameter smpteoffset; smpteoffset.s = heapify(text); smpteoffset.set_attr(symbol_table.insert_string("smpteoffsets")); update(meta_channel, -1, &smpteoffset); // Mf_error("SMPTE data ignored"); }