[R] How to change the names in tone pitch column

From: Atte Tenkanen <attenka_at_utu.fi>
Date: Sat 13 Aug 2005 - 23:45:24 EST


Hi,

I have a column (V4) in a midi event list which includes tone pitch names, i.e. "A4, E4, C#4, A3...":

> compo[1:10,]

   V1 V2 V3 V4 V5 V6 V7
1 1 1 0 A4 96 2 0
2 1 1 0 E4 96 2 0
3 1 1 0 C#4 96 2 0
4 1 1 0 A3 96 2 0
5 1 3 0 B4 96 1 0
6 1 3 0 E4 96 1 0
7 1 3 0 B3 96 1 0
8 1 3 0 G#3 96 1 0
9 1 4 0 C#5 96 1 0
10 1 4 0 D4 96 0 512

Now I'd like to change them to "pitch classes" (column "pc" here, which has the values between 0-11, using modulo 12) and absolute midi numbers (column pcAb, values 0->107), so as results A4 gives 9 and 57 (and for example C0 gives 0 and O, C2-> 0 and 24 etc):

> compo[1:10,]

   V1 V2 V3 V4 V5 V6 V7 pc pcAb
1 1 1 0 A4 96 2 0 9 57
2 1 1 0 E4 96 2 0 4 52
3 1 1 0 C#4 96 2 0 1 49
4 1 1 0 A3 96 2 0 9 45
5 1 3 0 B4 96 1 0 11 59
6 1 3 0 E4 96 1 0 4 52
7 1 3 0 B3 96 1 0 11 47
8 1 3 0 G#3 96 1 0 8 44
9 1 4 0 C#5 96 1 0 1 61
10 1 4 0 D4 96 0 512 2 50

I have done it this way (see next under this comment), but there must be some shorter way, using for-loop and paste-command with sep="" or some other way?:

##*************************************************************************#
## Create pitch class vector (add column pc to compo file) from column V4:
##*************************************************************************#

pc=c();

pc[V4=="C0"|V4=="C1"|V4=="C2"|V4=="C3"|V4=="C4"|V4=="C5"|V4=="C6"|V4=="C7"|V4=="C8"]=0;
pc[V4=="C#0"|V4=="C#1"|V4=="C#2"|V4=="C#3"|V4=="C#4"|V4=="C#5"|V4=="C#6"|V4=="C#7"|V4=="C#8"]=1;
pc[V4=="D0"|V4=="D1"|V4=="D2"|V4=="D3"|V4=="D4"|V4=="D5"|V4=="D6"|V4=="D7"|V4=="D8"]=2;
pc[V4=="D#0"|V4=="D#1"|V4=="D#2"|V4=="D#3"|V4=="D#4"|V4=="D#5"|V4=="D#6"|V4=="D#7"|V4=="D#8"]=3;
pc[V4=="E0"|V4=="E1"|V4=="E2"|V4=="E3"|V4=="E4"|V4=="E5"|V4=="E6"|V4=="E7"|V4=="E8"]=4;
pc[V4=="F0"|V4=="F1"|V4=="F2"|V4=="F3"|V4=="F4"|V4=="F5"|V4=="F6"|V4=="F7"|V4=="F8"]=5;
pc[V4=="F#0"|V4=="F#1"|V4=="F#2"|V4=="F#3"|V4=="F#4"|V4=="F#5"|V4=="F#6"|V4=="F#7"|V4=="F#8"]=6;
pc[V4=="G0"|V4=="G1"|V4=="G2"|V4=="G3"|V4=="G4"|V4=="G5"|V4=="G6"|V4=="G7"|V4=="G8"]=7;
pc[V4=="G#0"|V4=="G#1"|V4=="G#2"|V4=="G#3"|V4=="G#4"|V4=="G#5"|V4=="G#6"|V4=="G#7"|V4=="G#8"]=8;
pc[V4=="A0"|V4=="A1"|V4=="A2"|V4=="A3"|V4=="A4"|V4=="A5"|V4=="A6"|V4=="A7"|V4=="A8"]=9;
pc[V4=="A#0"|V4=="A#1"|V4=="A#2"|V4=="A#3"|V4=="A#4"|V4=="A#5"|V4=="A#6"|V4=="A#7"|V4=="A#8"]=10;
pc[V4=="B0"|V4=="B1"|V4=="B2"|V4=="B3"|V4=="B4"|V4=="B5"|V4=="B6"|V4=="B7"|V4=="B8"]=11;

## ... and absolute pitches (0-107):

pcAb=c();

pcAb[V4=="C0"]=0;pcAb[V4=="C#0"]=1;pcAb[V4=="D0"]=2;pcAb[V4=="D#0"]=3;pcAb[V4=="E0"]=4;pcAb[V4=="F0"]=5;pcAb[V4=="F#0"]=6;pcAb[V4=="G0"]=7;pcAb[V4=="G#0"]=8;pcAb[V4=="A0"]=9;pcAb[V4=="A#0"]=10;pcAb[V4=="B0"]=11;
pcAb[V4=="C1"]=12;pcAb[V4=="C#1"]=13;pcAb[V4=="D1"]=14;pcAb[V4=="D#1"]=15;pcAb[V4=="E1"]=16;pcAb[V4=="F1"]=17;pcAb[V4=="F#1"]=18;pcAb[V4=="G1"]=19;pcAb[V4=="G#1"]=20;pcAb[V4=="A1"]=21;pcAb[V4=="A#1"]=22;pcAb[V4=="B1"]=23;
pcAb[V4=="C2"]=24;pcAb[V4=="C#2"]=25;pcAb[V4=="D2"]=26;pcAb[V4=="D#2"]=27;pcAb[V4=="E2"]=28;pcAb[V4=="F2"]=29;pcAb[V4=="F#2"]=30;pcAb[V4=="G2"]=31;pcAb[V4=="G#2"]=32;pcAb[V4=="A2"]=33;pcAb[V4=="A#2"]=34;pcAb[V4=="B2"]=35;
pcAb[V4=="C3"]=36;pcAb[V4=="C#3"]=37;pcAb[V4=="D3"]=38;pcAb[V4=="D#3"]=39;pcAb[V4=="E3"]=40;pcAb[V4=="F3"]=41;pcAb[V4=="F#3"]=42;pcAb[V4=="G3"]=43;pcAb[V4=="G#3"]=44;pcAb[V4=="A3"]=45;pcAb[V4=="A#3"]=46;pcAb[V4=="B3"]=47;
pcAb[V4=="C4"]=48;pcAb[V4=="C#4"]=49;pcAb[V4=="D4"]=50;pcAb[V4=="D#4"]=51;pcAb[V4=="E4"]=52;pcAb[V4=="F4"]=53;pcAb[V4=="F#4"]=54;pcAb[V4=="G4"]=55;pcAb[V4=="G#4"]=56;pcAb[V4=="A4"]=57;pcAb[V4=="A#4"]=58;pcAb[V4=="B4"]=59;
pcAb[V4=="C5"]=60;pcAb[V4=="C#5"]=61;pcAb[V4=="D5"]=62;pcAb[V4=="D#5"]=63;pcAb[V4=="E5"]=64;pcAb[V4=="F5"]=65;pcAb[V4=="F#5"]=66;pcAb[V4=="G5"]=67;pcAb[V4=="G#5"]=68;pcAb[V4=="A5"]=69;pcAb[V4=="A#5"]=70;pcAb[V4=="B5"]=71;
pcAb[V4=="C6"]=72;pcAb[V4=="C#6"]=73;pcAb[V4=="D6"]=74;pcAb[V4=="D#6"]=75;pcAb[V4=="E6"]=76;pcAb[V4=="F6"]=77;pcAb[V4=="F#6"]=78;pcAb[V4=="G6"]=79;pcAb[V4=="G#6"]=80;pcAb[V4=="A6"]=81;pcAb[V4=="A#6"]=82;pcAb[V4=="B6"]=83;
pcAb[V4=="C7"]=84;pcAb[V4=="C#7"]=85;pcAb[V4=="D7"]=86;pcAb[V4=="D#7"]=87;pcAb[V4=="E7"]=88;pcAb[V4=="F7"]=89;pcAb[V4=="F#7"]=90;pcAb[V4=="G7"]=91;pcAb[V4=="G#7"]=92;pcAb[V4=="A7"]=93;pcAb[V4=="A#7"]=94;pcAb[V4=="B7"]=95;
pcAb[V4=="C8"]=96;pcAb[V4=="C#8"]=97;pcAb[V4=="D8"]=98;pcAb[V4=="D#8"]=99;pcAb[V4=="E8"]=100;pcAb[V4=="F8"]=101;pcAb[V4=="F#8"]=102;pcAb[V4=="G8"]=103;pcAb[V4=="G#8"]=104;pcAb[V4=="A8"]=105;pcAb[V4=="A#8"]=106;pcAb[V4=="B8"]=107;

#*****************************************************************************

## Bind vectors pc and pcAb to original composition array: compo=cbind(compo,pc,pcAb);

-Atte



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Sat Aug 13 23:52:05 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:39:48 EST