Scripts

title: VMM threads example
author: VMM Team
date: 2006-09-01
description:
Here follows an example of how you can make use of threads in VMM.
They can be useful to play different algorithms at the same time.
This multitask behaviour is probably one of VMM's most powerful features.

code

/**
 * Two files are used to illustrate an example,
 * thread_example.vmm and function_example.vmm
 */


/**
 * File: thread_example.vmm
 */


#include "stdmidi.vmm"

/**
 * Function: foo()
 * Description: Play some notes with pitch 60,
 * MIDI channel 1.
 */

proc foo() {
    while(1) {
        NoteOn(1,60,127);
        sleep(500);
        NoteOff(1,60);
        sleep(200);
    }
}

/**
 * Function: bar()
 * Description: Almost the same as foo(), but this function, bar(),
 * plays notes with a pitch of 72, at a different tempo.
 * MIDI channel 2.
 */

proc bar() {
        while(1) {
        NoteOn(2,72,127);
        sleep(550);
        NoteOff(2,72);
        sleep(200);
    }
}

/**
 * By calling these 2 functions as a VMM thread,
 * 2 different functions are played at the same time.
 */

proc main()
{
     thread foo();
     thread bar();
}


/**
 * File: function_example.vmm
 */


#include "stdmidi.vmm"

/**
 * The two functions foo() and bar() are identical to
 * those in thread_example.vmm .
 */

proc foo(){
     while(1){
         NoteOn(1,60,127);
         sleep(500);
         NoteOff(1,60);
         sleep(200);
    }
}

proc bar(){
     while(1){
         NoteOn(2,72,127);
         sleep(550);
         NoteOff(2,72);
         sleep(200);
    }
}

/**
 * The difference: Here the functions are called one after
 * another. It first starts foo(), and then bar(). But because
 * foo() doens't end (and isn't invoked as a thread, but as a
 * procedure), bar() will never be played.
 */

proc main()
{
    foo();
    bar();
}

There's no sound file available yet.

Scripts overview