MIDI controller

salve! come potete vedere sono nuovo. nuovissimo. ho fatto un workshop utilizzando arduino qualche mese fa e ne sono rimasto innamorato, ma non sono in grado di fare quasi nulla in maniera autonoma (se non i classici blink e poco più) :-[. dopo un breve tour all'interno del forum, noto che qui il livello di preparazione è molto alto! dunque mi appello a voi: dispongo di un arduino, una breadboard, tanti fili, dei potenziometri e dei bottoni, e vorrei creare un controller midi da usare con logic pro, comprendente 6 potenziometri ed altrettanti bottoni. si può?

Ciao noumeno

Incomincia ad usare Google o simili e cerca "Arduino" e "midi". Tanti prima di Te hano avuto l' idea e hanno programmato e pubblicato i loro progetti.

Cerca anche quì: http://www.arduino.cc/playground/Main/InterfacingWithHardware#Communication

Se poi hai dei dubbi o problemi chiedici.

Ciao Uwe

eccomi di nuovo! ho "googlato" per giorni interi alla ricerca di progetti simili al mio, ma gli unici che ho trovato, si erano limitati a caricare il video del risultato senza una descrizione del procedimento. ho visto tutte le pagine del playground preziosamente linkatomi da uwe, e ho trovato questo http://www.spikenzielabs.com/SpikenzieLabs/Serial_MIDI.html che è il software che serve a trasformare serial data in midi. Facendo una prova con lo sketch che fanno downloadare dal sito, il tutto funziona. Ma se io ad esempio provo a collegare un potenziometro ad arduino e ad uploadare lo sketch "AnalogInSerial", già presente nel software arduino, benchè io possa verificare il funzionamento del potenziometro tramite il serial monitor, non riesco a - o meglio non so come - farlo interagire col programma che trasforma il serial in midi. immagino ci sia qualcosa in più da scrivere nello sketch. giusto? in attesa di un messia, noumeno

ehilà! ragazzi come faccio?

ciao!

Come ho scritto altrove (poco tempo fa c’era un altro ragazzo che aveva le tue stesse esigenze) ti consiglio di realizzare questo progetto (magari dentro ad una scatola, un case di un vhs o simili: ti aiuterà molto a capire e risolvere la parte hardware.

quando lo hai fatto dovrai individuare qual’é il migliore programma-ponte che ti permetta di convertire il serial in midi. C’é ne sono diversi.
alternativamente, se possiedi una scheda audio che ha il midi, puoi mette una presa midi sull’arduino e bypassare il problema seriale / usb.

ma vai per gradi.
Inizia con l’auduino

ciao d

Ciao, anche io sono interessato al progetto. Al momento non ho l'Arduino sotto mano ma dalla prossima settimana posso iniziare a smanettare. Fino a capire come mandare una nota con l'arduino ci sono arrivato(e non è così difficile). Il problema è usare i potenziometri per gestire i vari crossfaders. Credo che funzioni basandosi su una nota, alla variazione della nota corrisponde la variazione del crossfader, sono sulla strada giusta?

Ho trovato questo topic che mi sembra molto utile: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1264513839/0 E questo molto utile proprio per i potenziometri. http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1165833586

Peccato che nessuno abbia più risposto.
Sono riuscito a far funzionare uno slider o più crossfader con virtual dj prendendo spunto dal post che ho segnalato sopra. Grande risultato!
Per quanto riguarda l’acquisizione del midi ho installato midiyoke che simula degli ingressi midi e poi serial midi converter per convertire i segnali che arrivano da seriale in midi.
Ora però vorrei aggiungere dei bottoni con funzioni di play o attivazione di effetti, questo come posso farlo? che tipo di segnale midi dovrei inviare? noteOn e noteOff?

Dunque, io dopo vari tentativi sono riuscito a mettere insieme un codice ed un circuito che più o meno funzionano, l’unica cosa che non capisco se funzioni bene è la parte dei pulsanti, cioè se vada inviato un midi di tipo noteOn quando il tasto viene premuto e noteOff quando lo si rilascia o se sia meglio usare qualche altro messaggio, questo perchè nonostante io mantenga la pressione sul tasto, su programma salta abbastanza(magari sono i miei pushbutton che anno schifo). Per il resto funziona tutto abbastanza bene e anche con una latenza relativamente bassa.

#define ledPin 13

int value=0;
int lastvalue[]={0,0,0,0,0,0,0};
// insert the channels of analog input before, then the digital ones
int ch[]={1,2,25,26,27,28,29};
// insert the analog input number before, then the digital input number
int input[]={0,1,5,6,7,8,9};
// insert the total number of inputs
int totinput=7;
//insert the number of analog inputs
int anainput=2;
int i=0;

void setup() {
  // set digital input
  for(i=totinput-anainput;i<totinput;i++){
    pinMode(input[i], INPUT);
  }
  pinMode(ledPin, OUTPUT);
  Serial.begin(57600);
  Serial.flush();

}

void loop(){
  for(i=0;i<totinput;i++){
    if(i<anainput){ //if we're working on analog inputs
      value=analogRead(input[i])/8;
      if(value!=lastvalue[i]){ // if the current value is different from the last one
        midi(0xB0,ch[i],value);
        lastvalue[i]=value;
      }
    }//end if
    else{ //we're working on digital inputs
      value=digitalRead(input[i]);
      if(value==HIGH && lastvalue[i]==LOW){ //when button is pressed send noteOn
        digitalWrite(ledPin, HIGH);
         midi(0x90,ch[i],30);
        lastvalue[i]=HIGH;
      }
      else{
        if(lastvalue[i]==HIGH){ // when button is depressed send noteOff
          digitalWrite(ledPin, LOW);
          midi(0x80,ch[i],1);
          lastvalue[i]=LOW;
        }
      }
    }//end else
  }//end for
}//end loop


void midi(char CC_data, char c_num, char c_val){
 Serial.print(CC_data, BYTE);
 Serial.print(c_num, BYTE);
 Serial.print(c_val, BYTE);

}

Il tutto è abbastanza commentato e spero sia chiaro. Nel progetto uso 2 potenziometri e 5 pushbutton, ma come vedete è abbastanza espandibile.

@noumeno se hai problemi con il circuito, guarda la guida su pushbutton e potenziometri all’interno del sito.

:D grazie mille! allora nei prossimi giorni mi rimetterò a lavoro. comunque mi è giunta voce che col nuovo arduino "uno" si può lavorare direttamente in linguaggio midi!

Per quanto riguarda l'arduino uno non capisco di cosa tu stia parlando, midi è un protocollo, non un linguaggio, e comunque funziona in seriale, per comunicare direttamente al pc in midi(evitando di usare serial to midi) l'unico modo è utilizzare una scheda audio da attaccare al pc che abbia il midi-in. Adesso sto ampliando il progetto e utilizzo molti slider e knobs grazie ai multiplexer 4051. A breve comprerò anche qualche multiplexer digitale per usare più pulsanti e se non costa troppo anche un paio di ping all'infrarosso per gestire gli effetti con le mani, molto scenico. a breve posterò tutto il progetto.

ehilà! ho caricato il tuo sketch, fatto i conti per bene con la parte hardware (ho provato ad usare i potenziometri e i bottoni per accendere dei led ed ha funzionato), installato il serial to midi e seguito tutte le istruzioni per impostarlo in maniera giusta su mac, simulato gli ingressi midi, ma alla fine non funziona. ho provato con logic pro e con ableton live mi legge i movimenti del potenziometro come note on/off e non come control change. dove posso aver sbagliato?

Dunque, non ho la minima esperianza per quanto riguarda mac però teoricamente dovrebbe funzionare ugualmente. Partendo dal fatto che questo codice a me sembra proprio funzionasse, direi che il problemi potrebbero essere: - un qualche tuo collegamento sbagliato - velocità del seriale che non è gradita al serial to midi(prova a mettere 38400, sembra funzionare meglio) in alternativa non saprei, prova così, se non riesci vediamo di approfondire.

:) ehilà! ho riprovato ed ha funzionato (evidentemente avevo sbagliato io dei collegamenti). il potenziometro funziona perfettamente, mentre con i bottoni mi succede la stessa cosa che dici tu, ed ho provato con tanti bottoni diversi. sei riuscito a capire come mai fanno così?

no, non ho più avuto tempo di mettere mano al mixer. credo forse sia un problema di tempo delle note, ma è una mia ipotesi, faccio un po' di ricerche! Magari, prova a mandare un CC(0xB0) invece che un noteOn(0x90) e noteOff(0x80), dai valore 127 quando il circuito è alto e 0 quando è basso. Magari funziona, fammi sapere!!