mirror of
https://github.com/sshlien/abcmidi.git
synced 2025-12-08 19:01:02 +00:00
Compare commits
2 Commits
2022.01.13
...
2022.01.28
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e58956238a | ||
|
|
0b83ee2c7b |
23
doc/CHANGES
23
doc/CHANGES
@@ -14567,3 +14567,26 @@ To prevent overrunning the array errmsg[80]
|
||||
used snprintf instead of sprintf
|
||||
snprintf(errmsg, 80, "I: key \' %s\' not recognized", key);
|
||||
|
||||
|
||||
January 27 2022
|
||||
|
||||
abcmidi: new feature
|
||||
%%MIDI pitchbendrange semi
|
||||
maps the pitchwheel 0 to 16383 to semi semitones. By default semi
|
||||
is set to 2. If you change it to 4, then the pitchwheel maps into
|
||||
+/-4 semitones. This effects all microtones in the active channel
|
||||
when semi is not 2. %%MIDI temperament commands may not work
|
||||
correctly. Here is an example.
|
||||
|
||||
X:1
|
||||
T: pitch bend with RPN
|
||||
M: 4/4
|
||||
L: 1/4
|
||||
K: G
|
||||
%%MIDI program 70
|
||||
G2 B2 |\
|
||||
%%MIDI bendstring 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500
|
||||
!bend! G4 |\
|
||||
%%MIDI pitchbendrange 7
|
||||
!bend! G4 |
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
abcMIDI : abc <-> MIDI conversion utilities
|
||||
|
||||
midi2abc version 3.48 June 27 2021
|
||||
abc2midi version 4.65 January 13 2022
|
||||
abc2midi version 4.66 January 27 2022
|
||||
abc2abc version 2.15 May 25 2021
|
||||
yaps version 1.87 May 25 2021
|
||||
abcmatch version 1.80 November 25 2021
|
||||
|
||||
33
genmidi.c
33
genmidi.c
@@ -1420,8 +1420,6 @@ static void midi_re_tune (int channel) {
|
||||
this is done.
|
||||
*/
|
||||
char data[2];
|
||||
data[0] = (char) (bend & 0x7f); /* least significant bits */
|
||||
data[1] = (char) ((bend >>7) & 0x7f);
|
||||
/* indicate that we are applying RPN fine and gross tuning using
|
||||
the following two control commands.
|
||||
control 101 0
|
||||
@@ -1444,6 +1442,29 @@ data[1] = (char) (bend & 0x7f); /* least significant bits */
|
||||
write_event(control_change, channel, data, 2);
|
||||
}
|
||||
|
||||
/* [SS] 2022-01-27 */
|
||||
static void midiPitchBendRange (int semis) {
|
||||
/* by default the pitch wheel maps 0 to 16383 to a range of 4
|
||||
* semitones. This function uses the RPN control command to
|
||||
* expand the range to semis semitones.
|
||||
*/
|
||||
char data[2];
|
||||
/* indicate that we are applying RPN fine and gross tuning using
|
||||
the following two control commands.
|
||||
control 101 0
|
||||
control 100 0 */
|
||||
data[0] = 101; /* RPN command */
|
||||
data[1] = 0; /* type of command */
|
||||
write_event(control_change, channel, data, 2);
|
||||
data[0] = 6; /* contains most significant byte */
|
||||
data[1] = semis;
|
||||
write_event(control_change, channel, data, 2);
|
||||
data[0] = 38; /* contains least significant byte (range in cents) */
|
||||
data[1] = 0;
|
||||
write_event(control_change, channel, data, 2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* [SS] 2011-07-04 */
|
||||
@@ -2100,6 +2121,14 @@ int noteson;
|
||||
else bendtype = 2;
|
||||
}
|
||||
|
||||
/* [SS] 2022-01-27 */
|
||||
else if (strcmp(command, "pitchbendrange") == 0) {
|
||||
int semis;
|
||||
semis = readsnump(&p);
|
||||
midiPitchBendRange(semis);
|
||||
done = 1;
|
||||
}
|
||||
|
||||
|
||||
else if (strcmp(command, "drone") == 0) {
|
||||
skipspace(&p);
|
||||
|
||||
Reference in New Issue
Block a user