Data AcQuisition And Real-Time Analysis
Scope - Spectrum - Spectrogram - Signal Generator
Software for Windows
Science with your Sound Card!

Sound Card Pitch-to-MIDI Converter

This is a tour of Pitch-to-MIDI operation. The examples here show a DaqMusiq performance, but the same basic dialogs and controls are used for KaleidoSynth, or for Pitch Track with a whistle, voice, or instrument input.

[Daqarta Pitch-to-MIDI (40K image)]

The trace area of the image above shows the "piano keyboard" display of the Pitch Tracker. Although that dialog is not shown here, the Steps option is active so notes are always centered on the background keys. The Wide option is also active to make them a bit more visible, since here it is tracking a fast-changing random noise source instead of the whistled "Deck The Halls".

The Pitch Tracker Pitch Display has been set to Show Tracked Pitch, so the display shows the notes that Pitch-to-MIDI gets as an input. The random source produces notes at a rapid rate (100 per second here), but DaqMusiq typically only uses the note that arrives at the start of each beat. Thus, you see a lot more notes on the screen than you hear in the output, and they are much shorter.

At the right in the image is the Pitch-to-MIDI dialog that opens after having clicked the button at the bottom of the Pitch Track dialog.

If Pitch Display is set to Show MIDI Note / Voice, the display (below) shows the actual output notes, each in the color of the voice producing it. The column to the left of the Voice Setup buttons in the Pitch-to-MIDI dialog is labeled 'Vox' and shows the fixed colors for each voice. Here only Voice 1 (red) and Voice 2 (orange) are in use, and the main display clearly shows which notes are from which voice. The duration of each note is also shown by the length of the color bar. Multiple bars of the same color on the same beat indicate chords.

The vertical lines show percussion hits. Up to 6 percussion instruments can sound at once, each assigned to 1/6 of the display height. The image shows that the first 4 instruments sound on the first beat, then only the first 3 instruments on the next 2 beats, and so on.

[Daqarta Pitch-MIDI Voices (40K image)]

Alternatively, if Pitch Display is set to Show MIDI Note / Inst, the display (below) shows the output notes according to the color of the instrument producing it. The color column in the Pitch-to-MIDI dialog is labeled 'Inst', and shows that Voice 1 is Instrument 26 (Electric Guitar - Jazz), which is greenish yellow. Voice 2 is Instrument 34 (Electric Bass - Pick), which is light green. The unused voices default to Instrument 0 (Acoustic Grand Piano), which is red.

The vertical lines for the percussion instruments all appear green here. Their instrument numbers happen to fall close together (37-46), which is too close to resolve by color.

[Daqarta Pitch-MIDI Inst (40K image)]

At the right edge of the main display (covered by the Pitch-to-MIDI dialog in the above image) is a color bar labeled 'Inst' going from red (0) at the top through the complete color spectrum at higher instrument numbers and finally fading to black. The highest "normal" instrument (118 = Synth Drum) would be shown in dark violet. Higher instrument numbers (darker colors) are sound effects like helicopters, telephones, and gunshots. Percussion instruments use the same scale, but they only use numbers 27-87 so they are often harder to resolve.

The Generator Title at the top of the trace area shows "DaqMusiq with Random Source", repeated on a text line below the trace area. This indicates that DaqMusiq is currently using a special dedicated random source. The default spectrum is uniform, but you can shape it with spectrum weighting curves. Or you can use a completely arbitrary source created with the Daqarta Generator, which allows combinations of several random noise types or Arbitrary waveforms, including various modulation schemes. You can even use Play mode to include any pre-recorded song (.WAV file), with optional modulation or even reversed direction, as the "random" source.

The title bar of the Pitch-to-MIDI dialog shows that PercBlue is the name of the .DQM MIDI Setup File for this performance. Setups are loaded and saved by buttons at the bottom of the dialog.

The Synth Device is the Microsoft GS Wavetable synth, which is the standard Windows default.

The Pitch-to-MIDI On/Off button is active, so the performance can be heard at the sound card output. The elapsed playing time is shown to the left of the button. If MIDI Record is used to record the performance, the elapsed recording time will be shown to the right of that button.

Tempo is applied to both instrument Voices and Percussion for DaqMusiq. For Pitch-Tracking a live source, you would typically have only Percussion Tempo, so the other instruments use the player's own tempo. Here, the tempo value is set to 300 BPM (Beats Per Minute) which is 200 msec per beat.

Eight simultaneous tonal instrument Voices are available, plus six Percussion sounds. Any and all of these can be changed on a beat-by-beat basis by the Changes script, as can all other controls in the setup. In this PercBlue example, only Electric Guitar - Jazz and Electric Guitar - Pick are used in addition to Percussion.

At the very bottom of the dialog are two programmable output display panels that can be used as desired by the Changes script. In this example, the left panel shows the true random integer (in hexadecimal format) that is used as a "seed" for the pseudo-random generator that creates the percussion patterns used in the PercBlue performance. Each performance normally starts with a different seed, but if you want to replicate a performance in the future you can copy its seed by highlighting it and hitting CTRL+C, then paste it into the script to use that seed directly.

The percussion instruments used in PerBlue are normally just Acoustic Snare and Side Stick. But PercBlue pauses the guitars occasionally to highlight an additional "featured" percussion instrument, such as Cowbell or Tambourine, which will be shown in the right-hand display panel.

The column of Setup buttons down the left side of the dialog open detailed control dialogs for each Voice, or for the Percussion sounds. We'll cover the Voice setups first. Clicking on the top Voice Setup button opens the Voice 1 dialog below:

[Daqarta MIDI Voice (19K image)] The Voice select control at the upper left allows you to quickly scroll among the other Voice dialogs, in case the main Pitch-to-MIDI dialog Setup buttons are covered. The small Inst # next to it allows selection from among any of the 128 available General MIDI instruments. The long Instrument On/Off button toggles the selected instrument as well as showing its name.

The Note Delay control allows the note sequence from the pitch tracker to be delayed for a given voice. Higher Note Delay values mean that the voice plays the same note sequence, but later than a voice with zero delay. This allows a musical echo, or at large delays give the instrumental equivalent of "rounds" popular with choral singers.

The Tempo Mode button is unselected here, showing Voice. When active, it changes to Percussion. Percussion mode allows the voice to provide beat-controlled rhythm backup, independent of live incoming notes or their timing. You would set the main Pitch-to-MIDI Tempo Perc button on and Tempo Voice off, so that live notes are played immediately on voices that have this button in Voice mode, while Percussion-mode voices (along with the normal Percussion instruments) sound on the beats.

The Pattern Key control works in conjunction with the Note Pattern lower on the dialog. If you set a sequence of specific notes there, they are played instead of the incoming Pitch Track note. The Pattern Key allows you to transpose the Note Pattern to another key for performance, though it will appear unchanged.

The Note Range Fit button works with the Min and Max controls to affect the incoming Pitch Track notes. When Fit is inactive, notes outside the Min/Max range are ignored. When active, they are forced into the Min/Max range via interpolation.

The Voice Level is a volume control that allows the relative balance of each voice to be adjusted in the overall performance.

The Velocity Track button allows the MIDI velocity (typically the same as volume, but may include tone color as well) to track the volume of the Pitch Track input, instead of using the preset Velocity Pattern. You'd typically use this with live input, to get dynamic expression; the random source used with DaqMusiq doesn't vary enough to be useful.

The Sustain button emulates the effect of the piano pedal that eliminates string damping when a key is released. It gives a long slow-decay ring to plucked or struck instruments or others with natural decay, for a more spacious sound.

[Daqarta MIDI Scale (20K image)] The Scale button opens a dialog that allows you to select from among more than 500 standard scales, or from one of 4 custom scales that you create and name yourself. The button then shows the selected scale name. Here, the standard Blues Major has been selected.

The Scale restricts the incoming Pitch Track notes (typically random, for DaqMusiq) to only specific notes in an octave. Notes that do not match any of the scale notes are shifted to the nearest matching note, or optionally skipped entirely.

The Scale choice affects the general "feel" of the music, including whether the notes of a sustained background chord will harmonize with an arbitrary melody note. (Some scales, such as Pentatonic Major, allow everything to harmonize.)

The +/-Note control (next to the Scale button on the Voice dialog) shifts the output note, typically after the Scale operation unless Prescale is active. For example, you could set 3 Voices with the same Range and Scale settings to use different +/-Note values of 0, +4, and +7. This would form a tracking chord, even with different instruments. (For a conventional same-instrument chord, tracking or otherwise, you could just specify it in the Chord Pattern.)

+/-Note is especially important for KaleidoSynth performance, since it allows the output note to be different than the input note. For example, if you set it to -1, then in the simplest case the note produced by an initial sound will be a semitone lower, and the note produced by that sound will be a semitone lower still. The result will be a descending scale, until the output pitch falls below the Track Min frequency and is no longer acted upon. (Read the full KaleidoSynth topic to find out why things don't usually halt there.)

When Note Bend is active, the notes produced by a MIDI Voice setup start out "on pitch", but then follow the relative pitch of the Pitch Track input signal for the duration of the note or beat. This is normally used for live playing, to allow vibrato or even trills and glides. With a random DaqMusiq source, on the other hand, the pitch changes randomly during the note... probably something you only want to use as an accent or special effect.

Hold Beats sets the number of beats a note is to be held. It is effectively the same as slowing the Tempo by this factor, except it works on an individual Voice setup. The main use for this is with background chords that are to be held for a whole measure each. If you want 4 beats per measure, for instance, setting Hold Beats to 4 means you only have to enter 1/4 as many Velocity Pattern, Note Pattern, and Chord Pattern characters for that voice.

Note Lag adds a small delay before each note is played by a MIDI Voice. If all voices have Note Lag set to zero, every note will be "on the beat". Note Lag allows voices to be slightly desynchronized, more like a group of real human musicians and less "machine"-like. You can adjust each Note Lag dynamically with a Changes script, typically using constrained random values.

Arpeggio - Strum allows you to set the delay between the individual notes of a chord. The '/\' button indicates the direction: When it is '/' the notes are played in an ascending order, '\' plays in a descending order, and '/\' is like the up-and-down strum of a guitar.

Arpeggio Beat works in conjunction with the Arpeggio and Hold Beats controls. When Arpeggio Beat is active, the notes of a chord are started individually, one per beat. For example, if Arpeggio is set to 1, a 3-note chord will play 3 individual notes on 3 successive beats. Hold Beats must be large enough to encompass all the notes of a chord. For example, with Hold Beats set to 4, a 3-note chord would be spread over the first 3 beats, followed by a silent beat. A 4-note chord would fill all 4 beats, while a 5-note chord would not fit... you would hear only the first 4 notes.

The Pan value is the relative Left-Right position of the voice on the sound stage. The Pan Scan, Pan Wrap, and Pan Beat controls allow automated motion of the Pan position, or you can set it directly via Changes Script commands. The voice in this example starts at -64 (full Left) and advances 10 steps per beat up to full Right (+63) before reflecting back the way it came.

Voice Patterns allow you to specify Velocity, Note, and Chord Patterns for each voice. Patterns may be up to 256 notes long, and may be modified dynamically via a Changes script. Each pattern type uses its own alphanumeric code.

The Velocity Pattern in this example shows '8888', indicating 4 beats in a measure, each at maximum velocity (loudness). Numbers 0-8 cover the whole MIDI velocity range of 0-127 in steps of 16 units each, since finer steps are hard to detect. For example, '8' = 127, '7' = 112, '6' = 96... down to '0' = 0 (Off).

To provide a more-human "feel" to a performance, the Velocity Pattern Character Table includes characters to set ranges of velocity that encompass 2 or more single-digit ranges. When one of these characters is used, the velocity of that note is assigned dynamically to a random value in the specified range. For example, 'a' will select a random value between 112 and 127 each time that note sounds.

When a letter is present in a Note Pattern, the note it represents (as shown in Note Pattern Characters) is played instead of an input Pitch Track note. The note played will be relative to the Pattern Key. Since the input note is ignored, the Note Pattern is typically used to provide a background rhythm or melody line for a live performance, or perhaps as a complete "karaoke" back-up to vocals.

For DaqMusiq or KaleidoSynth performances, a Note Pattern can also be used to provide a complete song that can then be modified via Changes script commands. Special symbols are also provided for relative instead of absolute notes, including "Blue" notes (1/2 semitone sharp or flat).

A Chord Pattern character indicates that the current note at that position should be played as a chord. The Chord Pattern Character Table shows the characters for 60 standard chords. In this example, 'M' in the 0th pattern position indicates that a Major chord will be played for the first note out of every 4-beat measure.

[Daqarta Custom Chords (14K image)] There are also an additional 12 Custom Chord characters for chords you can create yourself via the dialog that opens by clicking on the Chord button next to the pattern.

Below the Voice Patterns is the Changes script area. A Changes On/Off button allows you to enable or disable the script at will. A Float Changes button opens the same script in a larger floating dialog, which you can keep open for reference while you work on another Voice.

The Changes script processor is a fairly complete mini-language, including loops and IF - ELSE statements as well as commands for all normal Pitch-to-MIDI controls, plus many more that are available only through scripts. For example, there are numerous special commands for filling and manipulating buffers containing note values, to allow creation and control of musical themes and motifs.

See the PercBlue discussion for a description of the individual commands in the Voice example image, most of which are below the visible scroll area.

Each voice (including Percussion) may have a separate Changes script, but any script may control any voice... and can even disable and enable other scripts. All scripts appear to run concurrently, forming a simple 9-thread multitasking system.

All scripts run on every beat or live note. The Wait (W) command is used to control the timing of script changes. Most commands that assign a value (like Wait, Instrument number, Tempo BPM, Arpeggio, etc) can instead use a random value between specified limits, or one of 24 different Oscillators with adjustable frequency, phase, and waveform. You can also assign an expression that includes simple math operations (+, -, *, /) on multiple terms.

For example, to set the Instrument number for Voice 2, you could use an expression like:


This will add the current value of User Variable UA to the constant 40, then subtract the current value of Oscillator 1 as it oscillates between 10 and 20 at its previously-set frequency. The overall result is then used to set the Instrument for Voice 2

Besides the Voice dialogs, there is a special Percussion dialog that is opened by the bottom button in the Setup column on the left side of the main Pitch-to-MIDI dialog:

[Daqarta Percussion (20K image)] The controls here have the same functions as the Voice controls of the same name, such as Level, Pan, Scan, Instrument Number, and Velocity. Up to 6 percussion instruments are controlled by this dialog, so there are 6 versions of many of the controls. Whereas each tonal Voice dialog is numbered 1-8, here each percussion instrument is labeled A-F, and uses the matching Velocity Pattern below.

In this example, patterns have been entered for instruments A, B, and F. However, the PercBlue setup for this example shows that its Changes script actually sets A-E with random patterns using a Velocity Map, superceding the visible patterns. These working patterns are changed periodically during the performance.

The color column at the left is labeled 'Inst' because Pitch Display is set to Show MIDI Note / Inst, so the colors correspond to the percussion instrument numbers. The colors only vary over a narrow range here because the chosen instruments only range between 37 and 47, out of 128 possible values. (The General MIDI Percussion standard only includes instruments 35-81, but most sound card synths support 27-87.)



Spectrum Analyzer

Signal Generator

(Absolutely FREE!)


Pitch Tracker


DaqMusiq Generator
(Free Music... Forever!)

Engine Simulator

LCR Meter

Remote Operation

DC Measurements

True RMS Voltmeter

Sound Level Meter

Frequency Counter
    Spectral Event

    MHz Frequencies

Data Logger

Waveform Averager


Post-Stimulus Time
Histogram (PSTH)

THD Meter

IMD Meter

Precision Phase Meter

Pulse Meter

Macro System

Multi-Trace Arrays

Trigger Controls


Spectral Peak Track

Spectrum Limit Testing

Direct-to-Disk Recording



Frequency response

Distortion measurement

Speech and music

Microphone calibration

Loudspeaker test

Auditory phenomena

Musical instrument tuning

Animal sound

Evoked potentials

Rotating machinery


Product test

Contact us about
your application!

Questions? Comments? Contact us!

We respond to ALL inquiries, typically within 24 hrs.
Over 35 Years of Innovative Instrumentation
© Copyright 2007 - 2023 by Interstellar Research
All rights reserved