Data AcQuisition And Real-Time Analysis
Scope - Spectrum - Spectrogram - Signal Generator
Software for Windows
Science with your Sound Card!
The following is from the Daqarta Help system:



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!

GlossyFish.DQM MIDI Setup


When this setup is loaded, right-clicking on the Pitch-to-MIDI title bar or any non-control portion of the dialog will open Help at this topic.

GlossyFish.DQM is similar to GlossyBlack.DQM and related Glossy setups (GlossyWhite, GlossyBlue, and GlossyChrome), except that additional parameters are randomized, and others are easier to change.

In particular, you can change the Scale via hot-keys during a performance. The default scale is Pentatonic Major (like GlossyBlack), but be sure to try some of the others, especially Blues Minor (by hitting the unshifted 'b' key). See Percussion Changes Script below for other hot-key scale options, including random.

Like the other Glossy setups, GlossyFish is essentially 8 concurrent voices of JukeBox.DQM, each voice playing a different random melody of a random length, and using a different random instrument. Just as in JukeBox, when each voice finishes its song it begins another random melody with a random length using a different random instrument. Since voices typically have different song lengths, they finish and restart at different times. This feature promotes smooth transitions in the overall performance.

As with the other Glossy setups, if you don't like the current sound and don't want to wait for it to evolve, just toggle Pitch-to-MIDI off and back on again to get a whole new set of instruments and melodies.

Due to the addition of randomized Hold Beats and Level parameters (see below), GlossyFish has an even-more-absurdly-high number of possible performance variations than the other Glossy setups, but like them you can still repeat any of more than 4 billion performances by copying the initial random seed that is displayed at the lower left, and using it to force the initial seed. See the Repeating a Performance discussion under GlossyBlack.DQM for details. An example of such a forced seed is included in the Voice 1 Changes Script below, commented out on the 3rd line: ;?s=h936FF46D. Just delete the semicolon to hear that performance. (That's the one used for all four of the MIDI recordings at the start of this page; only the Scale was changed via hot-key.)

Random Hold Beats:

One important feature of GlossyFish is that each voice has Hold Beats set to a random value. Hold Beats essentially slows the effective Tempo by that factor for that voice only. For Voice 1 this is done via H1=?(UM,Um), where the random limits UM=-4 and Um=4 are set initially and remain the same throughout the performance for all voices. You thus only need to edit the Voice 1 UM and Um values to experiment with this.

Notice that while UM is a negative number, Hold Beats only accepts values from 1 to 127. Thus, if the random value is zero or negative, Hold Beats is limited to 1. This means that 2/3 of the time (6/9) it will end up as 1, and 1/3 of the time it will be either 2, 3, or 4. See Controlling Probabilities under the Random Values topic.

Random Levels:

GlossyBlack, etc, used a fixed Level of 64 for each voice. GlossyFish instead sets each voice Level randomly over a 48-80 range for each Instrument change. The differing Levels of each concurrent voice give more depth to the sound stage. Also, because the total Level of all voices changes randomly over time, the performance has a changing dynamic range. This adds interest and realism.

But some types of performance may benefit from the "punch" of consistently "up front" voices. You can get that by changing the UV (maximum Level) and Uv (minimum Level) to a narrower range, or make them both the same. (In the latter case, the L1=?(Uv,UV) line selects a "random value" between identical limits, so the result is a constant.)

Random Note Lags:

GlossyFish sets the Note Lag for each voice to a random value between 0 and 2. The value is changed on each Instrument change.

This prevents every instrument from being exactly "on the beat", to give a more realistic performance. In this case the average Lag will be 1, which can be considered to be the "exact" beat. Voices with Lag set to 0 will sound just before the beat, and those with Lag set to 2 will sound just after the beat.

The timing difference is approximately 10 msec per Lag step, which is determined by the Trace Update Interval. 10 msec is a good "just noticeable" value.

If you want Lag to randomly vary over a larger range, set Ug (at the start of the Voice 1 script) to a higher value. For example, if you set it to 4 then Lag will vary from 0 to 4, with the average of 2 being the new "on the beat" value.

If for some reason you want finer resolution than 10 msec steps, you can set Trace Update smaller and boost Ug correspondingly. For example, with Trace Update set to 5 msec, Ug=4 will give the original +/-10 msec range, but in 5 msec steps.

Note that Lag selection uses the alternative random generator ?r() instead of the standard ?(), so that even when you repeat a performance by setting the random seed with ?s these minor timing variations will still be different each time. To get exact repeats, you can force the alternative seed with ?r=n.

Hot-Key Scale Changes:

As mentioned, one of the main differences between GlossyFish and the GlossyBlack and related setups is that you can change the Scale setting for all voices simultaneously by hitting a hot-key. This is done via the Percussion Changes script (see below), which runs independently without Percussion itself being active. The default is Pentatonic Major (shifted 'P' key), the same as GlossyBlack but with the above Hold Beats and Level modifications.

When you change the scale via hot-key, the Scale for all voices changes immediately (as shown in the display at the lower right), without interrupting or restarting the performance.

This leads to an interesting experiment in how long the brain takes to register a scale change. For example, the Blues Minor scale (unshifted 'b' key) is distinctly different from Pentatonic Major, yet it may take a few seconds for your brain to realize this even though you deliberately caused the change yourself.

If you doubt that the scale is really changing immediately, try the unshifted 'c' key to get a scale of only 'C's... you'll hear that difference right away. (This scale gives a feeling of tension and anticipation... you can use a few seconds of that during a performance, before shifting to a new scale.)

Also, try the '?' key to get a random scale. Note that this uses the alternative random generator ?r() instead of main MIDI generator ?() used by the rest of the setup. That keeps it from disrupting the main random sequence that controls the performance... only the Scale is changed, not the underlying performance.

Adjusting Note and Instrument Ranges:

GlossyFish differs from the other Glossy setups in that it uses more variables instead of constants, with the variables set in the initial portion of the Voice 1 Changes Script (see below). This makes it easy to experiment with different parameter ranges, without having to change constant values in 8 separate voice scripts.

Besides the Hold Beats and Level ranges discussed earlier, you can change the Instrument range, and the range of notes used in the voice patterns. The maximum Instrument is set by UI=118 and the minimum by Ui=0; the maximum note value is set by UN=80, and the minimum by Un=40. These defaults are the same as the constants used in the other Glossy setups.

Voice 1 Changes Script:

Below is the Changes script for Voice 1. It is nearly identical in function to that for JukeBox, except that here we use variable limits for some random selections that used constant limits in JukeBox. For example, I1=?(Ui,UI) is used instead of I1=?(0,118).

In addition, GlossyFish has randomly-variable Hold Beats and Level that JukeBox lacked. The U1=U1*H1 line has also been added to lengthen the duration of each pattern's play time to compensate for Hold Beats.

The first part (up to the blank line) is initial setup; the remainder runs in an infinite loop, as designated by the ! as the loop count. (See JukeBox for a detailed explanation of this portion.)

Voices 2 through 8 are the same as the infinite loop section except for the voice differences. (I1 becomes I2, etc.)

Bv="0_8_8_8_8_8_8888"   ;Buffer Velocity Map
?s=?(-3G,3G)            ;32-bit random seed
;?s=h936FF46D            ;Forced repeatable seed
?x=0                    ;Set pseudo-random mode
oLh=s                   ;Show random seed
UL=7                    ;Base pattern lower size limit
UU=11                   ;Base pattern upper size limit
UM=-4                   ;Hold Beats lower limit
Um=4                    ;Hold Beats upper limit
UN=80                   ;Max random note in pattern
Un=40                   ;Min random note in pattern
UI=118                  ;Max random Instrument
Ui=0                    ;Min random Instrument
UV=80                   ;Max random Level
Uv=48                   ;Min random Level
Ug=2                    ;Max random Note Lag
US=S1                   ;Default Voice 1 Scale
oRS=US                  ;Show Scale name

{!                      ;Infinite loop
I1=?(Ui,UI)             ;Random Instrument
L1=?(Uv,UV)             ;Random Level
g1=?r(0,Ug)             ;Random Note Lag
H1=?(UM,Um)             ;Biased random Hold Beats
U1=?(UL,UU)             ;Random pattern length
V1.0="8"                ;1st note always sounds
Bf1V.1=(?(0,15),U1-1)   ;Random Velocity Pattern
Bf11.0=(?(Un,UN),U1)    ;Random Note Buffer 1 Fill
Bf12.0=(?(Un,UN),U1)    ;Random Note Buffer 2
U1=U1*H1                ;Pattern * Hold length
{2                      ;Play 2 complete verses
i1=11 W=2*U1            ;select Buf 1, play twice
i1=12 W=U1              ;Buffer 2, play once
i1=11 W=U1              ;Buffer 1, play once
i1=12 W=U1              ;Buffer 2, play once
i1=11 W=U1              ;Buffer 1, play once
}                       ;End of verse
s1=1                    ;Sustain after 2nd verse
X1=0                    ;Voice 1 Instrument off
W=4                     ;Hold (wait) 4 beats
s1=0                    ;Sustain off
W=4                     ;Rest 4 beats
X1=1                    ;Instrument on
}                       ;End of infinite loop

Percussion Changes Script:

W=1                        ;Wait 1 beat
US=S1                      ;Set US to Voice 1 Scale
UK=K#                      ;Most-recent key hit
[UK>0                      ;Any key?  If so, test which:
[UK="?" US=?r(2048,4095)]  ;Random Scale
[UK="5" US=2064]           ;5th (Power Chord)
[UK="6" US=2196]           ;Major 6th Chord
[UK="7" US=2774]           ;Dominant 7th
[UK="B" US=2964]           :Blues Major
[UK="b" US=2418]           ;Blues Minor
[UK="C" US=4095]           ;Chromatic
[UK="c" US=2048]           ;C-notes only
[UK="H" US=2777]           ;Harmonic Major
[UK="h" US=2905]           ;Harmonic Minor
[UK="L" US=2741]           ;Lydian
[UK="l" US=3434]           ;Locrian
[UK="M" US=2773]           ;Major
[UK="m" US=2906]           ;Natural Minor
[UK="P" US=2708]           ;Pentatonic Major
[UK="p" US=2386]           ;Pentatonic Minor
[UK="w" US=2730]           ;Whole Tone
[UK="X" US=2258]           ;Mixolydian Pentatonic
[UK="y" US=3442]           ;Blues Phrygian
]                          ;End main hot-key test

[S2!=US             ;If Voice 2 Scale not as above,
S9=US               ; then update all to new scale
oRS=US              ;Show scale name or pattern

You can easily modify or extend the set of hot-keys. Click on the Percussion Setup button at the bottom left of the main Pitch-to-MIDI dialog, then click on Float near the bottom of the Percussion dialog that opens. That will display the above script for you to edit.

To find the number of a desired scale, open Voice 1 and click on the Scale button (labeled Pentatonic Major by default). Scroll through the Scale dialog and note the value in the Num column of the scale you want... let's say you choose Arabian Zirafkend, number 2909.

If you want the 'z' key to set Arabian Zirafkend, add the following line to the Percussion Changes script:

    [UK="z" US=2909]    ;Arabian Zirafkend

If you just want to try different scales to see which might be worth a hot-key, you can change it in Voice 1 and the above script will automatically update all the other voices. This works because the script starts by setting US to the Voice 1 scale S1. Then the bottom IF block tests to see if the Voice 2 scale is different, and if so it sets all voices to US.

Ideas To Try:

The '?' key uses a random number as a scale. A short burst of a different scale is a great way to spice up a performance. You may notice that when the random scale has only a few notes that are close together, or when you hit the 'c' key to get a scale of only 'C', there is a feeling of tension and anticipation. You can get that by restricting the random range to (say) 1-15 instead of 2048-4095.

You might consider modifying a copy of GlossyFish to do this automatically for short durations every now and then. One way to do that is to insert the following right after the US=S1 in the Percussion Changes script:

    [UX>UT UX=0 UZ=!UZ
    [UZ=1 UT=?(20,30) Us=US US=?(1,15)
    | UT=?(70,120) US=Us]

This uses UX as a counter and UT as a threshold. UZ is a state variable that is normally 0 but set to 1 for the random scale periods. When the counter exceeds the threshold, the counter is cleared to 0 and the state of UZ is flipped by UZ=!UZ.

If UZ is now 1 then a short threshold is set via UT=?(20,30), the current scale in US is saved in Us, and a random scale is set via US=?(1,15). On the other hand, if UZ is 0 then a longer threshold is set, with US=Us to restore the prior scale.

Instead of a narrow random scale, the '1' hot-key takes that to its limit: It selects a scale consisting of only the 'C' note in the relevant octave. You can accomplish that in the above by replacing US=?(1,15) with US=2048. You can use other notes besides 'C' by cutting the 2048 in half (shifting to the right via >>) for each semitone you want to move up the scale. 2048>>11 will shift the Scale number down to 1, which is 'B'.

See also "Glossy" MIDI Setup Family Example MIDI Setup Files, MIDI Setup Files, Musical Frontiers, DaqMusiq, KaleidoSynth, Pitch-to-MIDI dialog, Pitch Track Toolbox - Overview, Spectrogram / Pitch Track Controls, Spectrogram / Pitch Track (Sgram/PT)


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