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

Atte Tenkanen attenka at utu.fi
Sat Aug 13 23:16:31 CEST 2005


Thanks Phil!

This is much more beautiful and elegant. And I learned 2 new R-functions,
nchar and substr.

-Atte

> Atte -
>     Here's one way - there certainly are others:
>
> notes = 0:11
> names(notes) = c("C","C#","D","D#","E","F","F#","G","G#","A","A#","B")
> pc = notes[substr(V4,1,nchar(V4) - 1)]
> names(pc) = NULL
> pcAb = pc + 12 * as.numeric(substr(V4,nchar(V4),nchar(V4)))
> names(pcAb) = NULL
>
>                                         - Phil Spector
>  					 Statistical Computing Facility
>  					 Department of Statistics
>  					 UC Berkeley
>  					 spector at stat.berkeley.edu
>
>
> On Sat, 13 Aug 2005, Atte Tenkanen wrote:
>
>> 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 at 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
>>
>




More information about the R-help mailing list