Arduino MIDI Out: composizione Algoritmica con Arduino

Reading Time: 3 minutes

In questa guida presentiamo il codice sviluppato per generare, con Arduino, una sequenza casuale di note da inviare al MIDI IN di uno strumento musicale attraverso il protocollo MIDI.

Il codice

Il codice presentato in questa guida genera una sequenze di note MIDI che possono essere inviate attraverso la connessione seriale di Arduino a un qualsiasi strumento musicale dotato di ingresso MIDI (MIDI IN).

La sequenza di note casuali, creata dal programma, è definita in un intervallo di altezze che può essere modificato attraverso le due variabili maxRegister e minRegister. Le note sono caratterizzate da una successione ricorrente (pattern) di valori di durate e d’intensità definita all’interno di una misura di 4/4. Le due serie di valori di durata e d’intensità sono definite attraverso i vettori Duration[ ] e Velocity[ ].

Nella funzione loop() si genera periodicamente un nuovo valore di altezza, salvato nella variabile pitch, si invia una nuova nota MIDI con la funzione MIDI.sendNoteOn(), con il comando: delay(NoteDuration) si pone il microcontrollore in attesa per un tempo pari alla durata della nota e, infine, si invia il messaggio MIDI NoteOff (MIDI.sendNoteOff()) per interrompere la riproduzione del suono.

Questo codice è stato utilizzato con il nostro prototipo CapBoard. Come già illustrato in questa guida, L’uso della funzione delay() di Arduino purtroppo non consente di ottenere dei risultati soddisfacenti per creare una successione temporale periodica di eventi. Presto pubblicheremo una nuova versione del codice che risolve questo inconveniente.

/*
  MIDI Out Test for CapBoard
  Sends out MIDI notes with a random pitch defined in the interval from minRegister to maxRegister

  To use this sketch you need to install the MIDI library. 
  Follow this link to download the library
  http://playground.arduino.cc/Main/MIDILibrary

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  See the GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.

  Copyright © 2016 Costantino Rizzuti
  Artis Lab - 2016
  www.artislab.it
  info@artislab.it
 */

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

int BPM=180;
float subdivision=1;
// 2  ->half note
// 1  ->quarter note
// 0.5->eight note
int maxRegister=60;
int minRegister=24;
int interval;
int pitch=60;
float Duration[] = {1,0.5,0.5,1,1};//Note duration pattern
// 2  ->half note
// 1  ->quarter note
// 0.5->eight note
//int Velocity[]={127, 90, 80,118,105};
int Velocity[]={127, 127, 80,127,127};//Velocity pattern
int DurCount=0;

void setup()
{
    MIDI.begin(4);// Launch MIDI and listen to channel 4
    interval=subdivision*60000/BPM; 
    //calculate the period in millisecond according with BPM and Subdivision
}

void loop()
{
        pitch=random(minRegister,maxRegister);
        MIDI.sendNoteOn(pitch, Velocity[DurCount], 1);    
        // Send a Note (pitch, velocity, on channel 1)
        int NoteDuration=interval*Duration[DurCount];
        delay(NoteDuration);// Wait for NoteDuration milliseconds
        MIDI.sendNoteOff(pitch, 0, 1);// Stop the note
        DurCount++;
        if(DurCount>5)
        {
          DurCount=0;
         }
}

Arduino MIDI Out: Applicazioni

Questo codice è stato utilizzato per realizzare il brano MIDI Out test (omaggio a Conlon Nancarrow) inserito nella raccolta Made with CapBoard. Per questo lavoro i messaggi MIDI sono stati inviati a un pianoforte digitale. Il brano è stato composto sovrapponendo quattro diverse tracce registrate modificando la disposizione di registro attraverso i valori delle variabili maxRegister e minRegister e la pulsazione di riferimento per il calcolo delle durate. Per fare ciò, il tempo espresso in BPM è stato lasciato inalterato, mentre si è modificato il valore della variabile suddivision.

Ascolta ora la traccia!

oppure tutto l’album:

Perché non dai anche uno sguardo ai nostri prodotti?

I sell on Tindie

Se ti piace questo progetto e vuoi provare a realizzarlo per problemi, curiosità oppure suggerimenti scrivici qui di seguito:

Codice di sicurezza:
security code
Inserire un codice di sicurezza.:

Invia

 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *