2.3 Relaxatie-oscillator
2.3 Relaxatie-oscillator
2.3 Relaxatie-oscillator
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
3.2 PC-Software<br />
Het programma dat de data op de PC opneemt, de sequencer, moet deze data kunnen exporteren als<br />
een standaard MIDI File. Ons converteringsprogramma kan zowel type 0 (single multi-channel track)<br />
als type 1 (one or more simultaneous tracks) MIDI Files importeren. Het formaat waarnaar we converteren<br />
is een textbestand met getallen, gescheiden door een komma en een ‘carriage return’: (hier<br />
vanwege de overzichtelijkheid weergegeven in zes kolommen.)<br />
40 mit<br />
384<br />
0,0<br />
3,32<br />
9,56<br />
14,28<br />
19,36<br />
26,44<br />
31,52<br />
41,60<br />
48,52<br />
53,44<br />
58,60<br />
80,56<br />
85,52<br />
92,64<br />
114,68<br />
235,76<br />
240,68<br />
516,64<br />
528,60<br />
539,64<br />
545,68<br />
699,72<br />
710,76<br />
726,88<br />
733,84<br />
738,72<br />
743,68<br />
804,64<br />
809,68<br />
876,64<br />
881,60<br />
888,64<br />
893,60<br />
898,64<br />
903,68<br />
920,72<br />
925,68<br />
1218,72<br />
1223,68<br />
1384,60<br />
1395,64<br />
etc.<br />
In MIDI Files wordt de informatie in pakketten, ‘chunks’ genaamd, ingebed. De pakketten hebben<br />
een header met een vaste structuur en een gedeelte dat volgt met een variabele structuur. Omdat er bij<br />
de vaste structuur opgegeven wordt hoeveel data er in de daarnavolgende variabele structuur komen,<br />
kunnen MIDI Files altijd gelezen worden. Immers, zonder de opbouw van stuurcodes te kennen, kunnen<br />
namelijk data overgeslagen worden. In hoeverre de gegevens ook verwerkt kunnen worden hangt<br />
uiteraard van het implementatieniveau af van de software.<br />
Met verwijzing naar de appendix, waar een uitvoerige beschrijving over de opbouw van MIDI Files<br />
wordt gegeven, laten we de basisstructuur van MIDI Files zien. Het conversieprogramma volgt die<br />
structuur. Om inzicht in de opbouw van dit programma te krijgen, laten we een aantal details weg,<br />
zodat een soort C++ raamwerk van dit programma overblijft:<br />
while ( ( c=getc(fp)) != EOF)<br />
switch (head)<br />
{<br />
case MHDR:<br />
{<br />
if (what2do!=ERR) // process header data if head == TRUE<br />
switch (what2do)<br />
{<br />
case HDR:<br />
..<br />
case HBL:<br />
..<br />
case FMT:<br />
..<br />
case NTB:<br />
..<br />
case RES:<br />
..<br />
} // escape from switch (what2do)<br />
// endif (what2do!=ERR)<br />
break; // escape from case MHDR<br />
}<br />
case MSIG:<br />
{<br />
if (mfmt==1 && what2do!=ERR) // process time/signature tempo track data in format 1<br />
{<br />
switch (what2do)<br />
{<br />
case SHDR:<br />
40