setwd("C:/fMRI to Music") data = read.csv('musicTCs.csv') #major scale function MajorScale <- function (StartNote) { NoteName<-c("C","C#","D","D#","E","F","F#","G","G#","A","A#","B") ScaleName<-as.character(NoteName[StartNote]) cat(ScaleName,'Major Scale') ScaleName<<-ScaleName MajArray<-c(StartNote) MajArray<<-MajArray k<-StartNote while (k < 129) { k<-k+2 MajArray<-union(MajArray,c(k)) k<-k+2 MajArray<-union(MajArray,c(k)) k<-k+1 MajArray<-union(MajArray,c(k)) k<-k+2 MajArray<-union(MajArray,c(k)) k<-k+2 MajArray<-union(MajArray,c(k)) k<-k+2 MajArray<-union(MajArray,c(k)) k<-k+1 MajArray<-union(MajArray,c(k)) } print(MajArray) MajArray<<-MajArray } #natural minor scale - but misnamed as melodic minor here MelodicMinorScale <- function (StartNote) { NoteName<-c("C","C#","D","D#","E","F","F#","G","G#","A","A#","B") ScaleName<-as.character(NoteName[StartNote]) cat(ScaleName,'Melodic Minor Scale') ScaleName<<-ScaleName MelMinArray<-c(StartNote) MelMinArray<<-MelMinArray k<-StartNote while (k < 129) { k<-k+2 MelMinArray<-union(MelMinArray,c(k)) k<-k+1 MelMinArray<-union(MelMinArray,c(k)) k<-k+2 MelMinArray<-union(MelMinArray,c(k)) k<-k+2 MelMinArray<-union(MelMinArray,c(k)) k<-k+1 MelMinArray<-union(MelMinArray,c(k)) k<-k+2 MelMinArray<-union(MelMinArray,c(k)) k<-k+2 MelMinArray<-union(MelMinArray,c(k)) } print(MelMinArray) MelMinArray<<-MelMinArray } ?print #Scale legal note vectors BiYu <- c(24,27,31,34,36,39,43,46,48,51,55,58,60,63,67,70,72,75,79,82,84,87,91,94,96,99,103,106,108,111,115,118) Blues <-c(41,42,43,46,48,51,53,54,55,58,60,63,65,66,67,70,72,75,77,78,79,82,84,87,89,90,91,94,96,99,101,102) BluesDiminished <- c(48,49,51,52,54,55,56,58,60,61,63,64,66,67,68,70,72,73,75,76,78,79,80,82,84,85,87,88,90,91,92,94 ) Dorian <- c(25,27,30,32,34,37,39,42,44,46,49,51,54,56,58,61,63,66,68,70,73,75,78,80,82,85,87,90,92,94,97,99 ) FullMinor <- c(51,53,55,56,57,58,59,60,62,63,65,67,68,69,70,71,72,74,75,77,79,80,81,82,83,84,86,87,89,91,92,93 ) HarmonicMajor <- c(44,47,48,50,52,53,55,56,59,60,62,64,65,67,68,71,72,74,76,77,79,80,83,84,86,88,89,91,92,95,96,98 ) Hawaiian <- c(39,43,45,47,48,50,51,55,57,59,60,62,63,67,69,71,72,74,75,79,81,83,84,86,87,91,93,95,96,98,99,103 ) IonianSharp5 <- c(45,47,48,50,52,53,56,57,59,60,62,64,65,68,69,71,72,74,76,77,80,81,83,84,86,88,89,92,93,95,96,98 ) JazzMinor <- c(45,47,48,50,51,53,55,57,59,60,62,63,65,67,69,71,72,74,75,77,79,81,83,84,86,87,89,91,93,95,96,98 ) Lydian <- c(45,47,48,50,52,54,55,57,59,60,62,64,66,67,69,71,72,74,76,78,79,81,83,84,86,88,90,91,93,95,96,98 ) Major <- c(43,45,48,50,51,52,54,55,57,60,62,63,64,66,67,69,72,74,75,76,78,79,81,84,86,87,88,90,91,93,96,98 ) Mixolydian <- c(45,46,48,50,52,53,55,57,58,60,62,64,65,67,69,70,72,74,76,77,79,81,82,84,86,88,89,91,93,94,96,98 ) Oriental <- c(45,46,48,49,52,53,54,57,58,60,61,64,65,66,69,70,72,73,76,77,78,81,82,84,85,88,89,90,93,94,96,97 ) SuperLocrian <- c(44,46,48,49,51,52,54,56,58,60,61,63,64,66,68,70,72,73,75,76,78,80,82,84,85,87,88,90,92,94,96,97 ) VerdiEnigmaticAscending <- c(46,47,48,49,52,54,56,58,59,60,61,64,66,68,70,71,72,73,76,78,80,82,83,84,85,88,90,92,94,95,96,97 ) #Instrument legal note vectors #Strings Violin<- c(55:103) Viola<-c(48:91) Cello<-c(36:76) DoubleBass<-c(28:67) #Brass Tuba<-c(28:58) BassTrombone<-c(34:67) FrenchHorn<-c(34:77) Trombone<-c(40:72) Trumpet<-c(55:82) #Woodwinds Piccolo<-c(74:102) Flute<-c(60:96) Oboe<-c(58:91) AltoFlute<-c(55:91) Clarinet<-c(50:94) BassClarinet<-c(38:77) Bassoon<-c(34:75) Contrabassoon<-c(22:53) #Percussion Piano<-c(1:128) Harp<-c(24:103) Timpani<-c(40:55) LegalNote<-numeric() ScaleInst<-function (Scale, Instrument) { k=0 #Creating an array of legal notes, by checking if something is in both the scale #and instrument range Overlap<-c(Instrument %in% Scale) Legal<-numeric() for(i in 1:length(Overlap)) { if (Overlap[i]==TRUE) { k<-k+1 Legal[k]<-Instrument[i] } Legal<<-Legal } print(Legal) } #Then the converter from signal to legal notes needs to be as follows: SignaltoMIDI<-function (Signal, Legal) { Max <- max(Signal, na.rm = FALSE) Min <- min(Signal, na.rm = FALSE) GateThresh<-0.05*Max MIDI<-numeric() for(i in 1:96) { Step1<-((Signal[i]-GateThresh)/(Max-GateThresh)) #Step1<-((Signal[i]-Min)/(Max-Min)) Intermediary<-round((length(Legal)*Step1)) if (length(Legal[Intermediary])==0) { MIDI[i]<-1 MIDI<<-MIDI } else { #if (Signal[i]>Min) { if (Signal[i]>GateThresh) { MIDI[i]<-Legal[Intermediary] MIDI<<-MIDI } else { MIDI[i]<-1 MIDI<<-MIDI } } } } } #Abbreviated List for String Quartet Rendition Signal1<-(data$a) Signal2<-(data$e) Signal3<-(data$i) Signal4<-(data$m) Signal1<-(data$b) Signal2<-(data$f) Signal3<-(data$j) Signal4<-(data$n) #Set to G Minor Scale MelodicMinorScale(8) ScaleInst(MelMinArray, Cello) SignaltoMIDI(Signal1,Legal) MIDI1<-MIDI MIDI1 length(MIDI1) ScaleInst(MelMinArray, Viola) SignaltoMIDI(Signal2,Legal) MIDI2<-MIDI length(MIDI2) ScaleInst(MelMinArray, Violin) SignaltoMIDI(Signal3,Legal) MIDI3<-MIDI length(MIDI3) ScaleInst(MelMinArray, Violin) SignaltoMIDI(Signal4,Legal) MIDI4<-MIDI length(MIDI4) Signal.Names<-c('a','b','c', 'd') Output<-matrix(data=c(MIDI1, MIDI2, MIDI3, MIDI4), ncol=4) write.csv(Output, file="VisualQuartet2.csv") #Full list Signal1<-(data$a) Signal2<-(data$b) Signal3<-(data$c) Signal4<-(data$d) Signal5<-(data$e) Signal6<-(data$f) Signal7<-(data$g) Signal8<-(data$h) Signal9<-(data$i) Signal10<-(data$j) Signal11<-(data$k) Signal12<-(data$l) Signal13<-(data$m) Signal14<-(data$n) ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal1,Legal) MIDI1<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal2,Legal) MIDI2<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal3,Legal) MIDI3<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal4,Legal) MIDI4<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal5,Legal) MIDI5<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal6,Legal) MIDI6<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal7,Legal) MIDI7<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal8,Legal) MIDI8<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal9,Legal) MIDI9<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal10,Legal) MIDI10<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal11,Legal) MIDI11<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal12,Legal) MIDI12<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal13,Legal) MIDI13<-MIDI ScaleInst(FullMinor, Piano) SignaltoMIDI(Signal14,Legal) MIDI14<-MIDI MIDI1 Signal.Names<-c('a','b','c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n') Output<-matrix(data=c(MIDI1, MIDI2, MIDI3, MIDI4, MIDI5, MIDI6, MIDI7, MIDI8, MIDI9, MIDI10, MIDI11, MIDI12, MIDI13, MIDI4), nrow=length(MIDI1), ncol=14) write.csv(Output, file="Visual14.csv") Signal1<-(data$Attn) Signal2<-data$Visual Signal3<-data$DMN #Set to D Major Scale MajorScale(3) #Choose Flute for Attention ScaleInst(MajArray, Flute) SignaltoMIDI(Signal1,Legal) MIDI1<-MIDI #Choose Violin for Visual ScaleInst(MajArray, Violin) SignaltoMIDI(Signal2,Legal) MIDI2<-MIDI #Choose Cello for Default Mode Network ScaleInst(MajArray, Cello) SignaltoMIDI(Signal3,Legal) MIDI3<-MIDI Signal.Names<-c('Attention','Visual','DMN') Output<-matrix(data=c(MIDI1, MIDI2, MIDI3), nrow=length(MIDI1), ncol=3) write.csv(Output, file="Output.csv") MIDI1 MIDI2 MIDI3