Skip to content

Instantly share code, notes, and snippets.

@cryptospectrum
Created September 29, 2013 22:02
Show Gist options
  • Save cryptospectrum/6757001 to your computer and use it in GitHub Desktop.
Save cryptospectrum/6757001 to your computer and use it in GitHub Desktop.
Turn DNA sequence into a MIDI file
% %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