Your finished subVI should behave like this one:
Coding tips
Watch the screencast video to learn how to assemble a byte at the bit level, and also how to set up the enumerated data type for a case structure.
Midi_makedtmetaevent.vi
midi_MakeDtMeta.vi creates a delta-time / meta-event pair. The subVI accepts a delta-time in ticks, a meta-event selector, text string, and tempo value (only certain meta-events require the last two inputs). The delta-time is converted into variable-length format, and the meta-event is created. Both of these values are appended to the inbound string to produce the output string. Review the module Standard MIDI Files to learn about meta-events.
Input requirements
- string in (string type)
- delta time (32-bit unsigned integer; defaults to 0)
- event (enumerated data type with values Text, Copyright Notice Text, Track Name, Instrument Name, Lyric Text, Marker Text, Cue Point Text, Sequencer-Specific, End of Track, and Set Tempo; defaults to Track Name)
- text (string type)
- tempo (32-bit unsigned integer; defaults to 500,000)
Output requirements
- string out (string type)
Behavior requirements
- Convert the delta time value to VLF format using the midi_ToVLF.vi subVI you created in a previous step
- Create a meta-event sub-string using the sequence 0xFF (indicates meta-event), meta-event type (refer to a table of meta-event type numbers), meta-event length (use midi_ToVLF.vi for this purpose), and meta-event data.
- Append the delta-time sub-string and the MIDI message sub-string to the inbound string, and output the result
Your finished subVI should behave like this one:
Coding tips
At this point you should have enough experience to proceed without assistance!
Top-level vi application
Congratulations! You now have assembled and tested six subVIs that can form the basis of many other projects. Now use your subVIs to build an application VI (top-level VI) to demonstrate that your subVIs work properly together. Two applications that you can easily build are described next.
Sweep through notes and tones
The application block diagram pictured below produces a single-track MIDI file containing an ascending chromatic sweep over the entire range of note numbers (0 to 127). Before sounding the note, the Program Number (tone or voice selection) is set to the same value as the note number. Thus, the voice changes for each note, adding additional interest to the sound. The note duration is specified by a control whose unit is milliseconds. As an exercise, you will need to complete the grayed-out area to convert the units of“duration”from milliseconds to ticks.
Measure the velocity profile of your soundcard
The application block diagram pictured below creates a MIDI file in which the same note is played repeatedly, but the velocity varies from the maximum to the minimum value in unit steps. When you play the MIDI file, you can record the soundcard’s audio output and measure its velocity profile , i.e., the mapping between the note’s velocity value and its waveform amplitude. The Audacity sound editing application works well for this purpose; choose“Wave Out Mix”as the input device to record the soundcard’s output.