Created
September 29, 2013 22:02
-
-
Save cryptospectrum/6757001 to your computer and use it in GitHub Desktop.
Turn DNA sequence into a MIDI file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| % %loadfile.m @http://www.ece.rutgers.edu/~orfanidi/ece525/subspace.zip | |
| [Y,T] = loadfile('Saccharomyces_cerevisiae_GENES.txt'); | |
| [RT,CT]=size(T); | |
| for n=1:CT | |
| DNA((n-1)*RT +1:n*RT)=T(:,n); | |
| end | |
| % % NAk=size(DNA,2); | |
| NAk=1200; | |
| N=floor(NAk/5); | |
| M=zeros(N,6); | |
| M(:,1) = 1; % Track 1 | |
| M(:,2) = 1; % Channel 1 | |
| M(:,4)=60 + 10*ones(N,1); | |
| slowdown=0.07; | |
| % 16 most common time difference from Scarlatti K332 + slowdown, not all differences used in this script | |
| M5arr=slowdown+[0, | |
| 0.32608600000000, | |
| 0.16304299999999, | |
| 0.16304300000000, | |
| 0.31250000000000, | |
| 0.15625000000000, | |
| 0.08152149999999, | |
| 0.06528088867188, | |
| 0.08152150000001, | |
| 0.17441850000000, | |
| 0.34883700000000, | |
| 0.32608600000000, | |
| 0.05445381445313, | |
| 0.16666650000000, | |
| 0.33333300000000, | |
| 0.15957400000000]; | |
| M6arr=slowdown+[0, | |
| 0.32608600000000, | |
| 0.31250000000000, | |
| 0.32608599999998, | |
| 0.16304299999999, | |
| 0.08152149999999, | |
| 0.16304300000000, | |
| 0.15625000000000, | |
| 0.34883700000000, | |
| -0.16304299999999, | |
| 0.65217200000001, | |
| -0.32608600000000, | |
| 0.06528088867188, | |
| -0.31250000000000, | |
| 0.05445381445313, | |
| 0.08152150000001]; | |
| M51=0; | |
| M61=0.3261; | |
| nk=1; | |
| k=1; | |
| while (nk<N+1)% Check on N, NAk, ..... | |
| % % Assign Rhythm__________________________ | |
| % % Start Times | |
| tokrhy=DNA(k); | |
| if (tokrhy=='a') | |
| M5b(nk)=M5arr(1); | |
| elseif(tokrhy=='g') | |
| M5b(nk)=M5arr(2); | |
| elseif(tokrhy=='t') | |
| M5b(nk)=M5arr(3); | |
| elseif(tokrhy=='c') | |
| M5b(nk)=M5arr(4); | |
| end | |
| k=k+1; | |
| tokrhy=DNA(k); | |
| % % Stop Times | |
| if (tokrhy=='a') | |
| m6ind=0; | |
| elseif(tokrhy=='g') | |
| m6ind=1; | |
| elseif(tokrhy=='t') | |
| m6ind=2; | |
| elseif(tokrhy=='c') | |
| m6ind=3; | |
| end | |
| k=k+1; | |
| tokrhy=DNA(k); | |
| if (tokrhy=='a') | |
| m6ind=m6ind+1; | |
| elseif(tokrhy=='g') | |
| m6ind=m6ind+2; | |
| elseif(tokrhy=='t') | |
| m6ind=m6ind+3; | |
| elseif(tokrhy=='c') | |
| m6ind=m6ind+4; | |
| end | |
| k=k+1; | |
| M6b(nk)=M6arr(m6ind); | |
| m6ind=0; | |
| % % Assign note 16 possiblities ____________________ | |
| tokn16=DNA(k:k+1); | |
| M(nk,3)=assign_dna16(tokn16); | |
| k=k+2; | |
| nk=nk+1; | |
| end | |
| % Reconstruct Time Data | |
| M(:,5)= [M51, cumsum(M5b(1:end-1))]; | |
| M(:,6)= [M61, cumsum(M6b(1:end-1))+M61]; | |
| % % Output______________________________________________________ | |
| % % Thanks to Ken Schutte for his Matlab midi scripts, http://www.kenschutte.com/midi | |
| midi_new = matrix2midi(M); | |
| writemidi(midi_new, 'DNA_Rhythm2_csum_Type444_F10F.mid'); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment