11.07.2014 Views

Flute acoustics: measurement, modelling and design - School of ...

Flute acoustics: measurement, modelling and design - School of ...

Flute acoustics: measurement, modelling and design - School of ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

APPENDIX B. PROGRAM LISTINGS 221<br />

Minimum m;<br />

int n = sizeVector(playableminv);<br />

int midis[n];<br />

int dmidi;<br />

int num_harmonic_midis = 11;<br />

int harmonic_midis[] = {0, 12, 19, 24, 28, 31, 33, 34, 36, 38, 40};<br />

/* get the midi numbers <strong>of</strong> all playable minima. The difference in<br />

midi number <strong>of</strong> two notes is the number <strong>of</strong> semitones between<br />

them. */<br />

for(i = 0; i < n; i++) {<br />

m = (Minimum)elementAt(playableminv, i);<br />

midis[i] = m->note->midi;<br />

}<br />

/* calculate number <strong>of</strong> semitones between two minima */<br />

dmidi = m2->note->midi - m1->note->midi;<br />

/* if the minima are directly harmonically related (integer<br />

frequency ratio) */<br />

if(inArray(harmonic_midis, num_harmonic_midis, dmidi))<br />

return 1;<br />

/* if the minima have a common playable fundamental */<br />

if((dmidi == 7 || dmidi == 16 || dmidi == 21 || dmidi == 22 || dmidi<br />

== 26)<br />

&& inArray(midis, n, m1->note->midi - 12))<br />

return 1;<br />

if((dmidi == 5 || dmidi == 9 || dmidi == 14 || dmidi == 15 || dmidi<br />

== 17 || dmidi == 21)<br />

&& inArray(midis, n, m1->note->midi - 19))<br />

return 1;<br />

if((dmidi == 4 || dmidi == 7 || dmidi == 9 || dmidi == 10 || dmidi<br />

== 14 || dmidi == 16)<br />

&& inArray(midis, n, m1->note->midi - 24))<br />

return 1;<br />

if((dmidi == 3 || dmidi == 5 || dmidi == 6 || dmidi == 8 || dmidi ==<br />

10)<br />

&& inArray(midis, n, m1->note->midi - 28))<br />

return 1;<br />

if((dmidi == 2 || dmidi == 3 || dmidi == 5 || dmidi == 7 || dmidi ==<br />

9)<br />

&& inArray(midis, n, m1->note->midi - 31))<br />

return 1;<br />

if((dmidi == 3 || dmidi == 5 || dmidi == 7)<br />

&& inArray(midis, n, m1->note->midi - 33))<br />

return 1;<br />

if((dmidi == 2 || dmidi == 4 || dmidi == 6)<br />

&& inArray(midis, n, m1->note->midi - 34))<br />

return 1;<br />

if((dmidi == 2 || dmidi == 4)<br />

&& inArray(midis, n, m1->note->midi - 36))<br />

return 1;<br />

if(dmidi == 2 && inArray(midis, n, m1->note->midi - 38))<br />

return 1;<br />

/* otherwise, not harmonic */<br />

return 0;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!