Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Arduino, MIDI, trasmettere sul canale 10

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Arduino, MIDI, trasmettere sul canale 10

Messaggioda Foto Utentedrinu » 19 ago 2014, 21:06

Ciao a tutti, sto smanettando un po con arduino e il midi e sto provando questo esempio:

Codice: Seleziona tutto
/*
MIDI note player

This sketch shows how to use the serial transmit pin (pin 1) to send MIDI note data.
If this circuit is connected to a MIDI synth, it will play
the notes F#-0 (0x1E) to F#-5 (0x5A) in sequence.


The circuit:
* digital in 1 connected to MIDI jack pin 5
* MIDI jack pin 2 connected to ground
* MIDI jack pin 4 connected to +5V through 220-ohm resistor
Attach a MIDI cable to the jack, then to a MIDI synth, and play music.

*/

void setup() {
  //  Set MIDI baud rate:
  Serial.begin(31250);
}

void loop() {
  // play notes from F#-0 (0x1E) to F#-5 (0x5A):
  for (int note = 0x1E; note < 0x5A; note ++) {
    //Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
    noteOn(0x90, note, 0x45);
    delay(100);
    //Note on channel 1 (0x90), some note value (note), silent velocity (0x00):
    noteOn(0x90, note, 0x00);   
    delay(100);
  }
}

//  plays a MIDI note.  Doesn't check to see that
//  cmd is greater than 127, or that data values are  less than 127:
void noteOn(int cmd, int pitch, int velocity) {
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}


Vorrei trasmettere sul canale 10 per le percussioni ma non so come fare, così trasmette sull' 1!!
Mi aiutate anche a trovare la pagina dal sito ufficiale di arduino dove spiega i vari comandi MIDI? non la trovo più!! #-o
Grazie!
Avatar utente
Foto Utentedrinu
143 1 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 473
Iscritto il: 29 mar 2007, 19:59

2
voti

[2] Re: Arduino, MIDI, trasmettere sul canale 10

Messaggioda Foto UtenteDarwinNE » 19 ago 2014, 22:42

Ciao,
il tag "code" può essere utile in casi del genere.

Io non so un tubo di Arduino, ho scritto però codice in assembler che gestiva il MIDI con dei PIC 16F.
Ora, il codice che hai scritto mi pare una roba generica che scrive due cosette sulla seriale.
Devi studiarti tu i messaggi da inviare:

http://www.midi.org/aboutmidi/tut_protocol.php

Il numeretto da cambiare è lo 0x90. Oltretutto l'esempio contiene due errori:

- La funzione noteOn ha il nome sbagliato: quello che succede è che viene inviato un messaggio generico (formato da tre caratteri), non per forza un noteOn.
- Una nota la si spegne con un messaggio "note off" e non con un nuovo "note on" con velocity nulla.

Correggi quelle bestialità e leggi qui con attenzione:

http://www.midi.org/aboutmidi/tut_protocol.php

Guarda questa tabella:

http://www.midi.org/techspecs/midimessages.php

Il numeretto 0x90 viene fuori dal messaggio "Note on" che costituisce i 4 bit più significativi, e poi il numero di canale nei 4 bit meno significativi. A basso livello i canali si numerano da 0 a 15 e non da 1 a 16.
Nella tabella leggi 1001 nnnn in binario; il canale 1 viene mappato con il codice 0. Se fai una conversione, ottieni 9 per i primi 4 bit e 0 per il canale, quindi il codice è 0x90. Se vuoi mettere qualcosa sul canale 2 (ovvero 1 a basso livello), il codice sarà 0x91. Quale sarà il codice del messaggio "Note on" per il canale 10 (9 a basso livello), secondo te? E quale sarà il codice del messaggio "Note off"? Quale per il canale 16?
Follow me on Mastodon: @davbucci@mastodon.sdf.org
Avatar utente
Foto UtenteDarwinNE
31,0k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 4420
Iscritto il: 18 apr 2010, 9:32
Località: Grenoble - France

0
voti

[3] Re: Arduino, MIDI, trasmettere sul canale 10

Messaggioda Foto Utentedrinu » 20 ago 2014, 14:19

Per trasmettere sul canale 10 uso 0x99 e 0x9F per il canale 16.
Interessante quella tabella ma non riesco più a trovare la lista comandi della libreria midi (appunto tipo noteOn e noteOff...), deve essere una pagina nel sito di arduino.
Forse funziona anche senza noteOff perché si tratta di percussioni a cui serve solo la partenza del suono e poi finisce da solo essendo un file corto e non come la nota di una tastiera che serve sapere anche quando il tasto viene rilasciato. O_/
Avatar utente
Foto Utentedrinu
143 1 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 473
Iscritto il: 29 mar 2007, 19:59

0
voti

[4] Re: Arduino, MIDI, trasmettere sul canale 10

Messaggioda Foto Utentedrinu » 20 ago 2014, 14:28

Ho trovato la pagina ma me la ricordavo più utile

http://playground.arduino.cc/Main/MIDILibraryReference
Avatar utente
Foto Utentedrinu
143 1 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 473
Iscritto il: 29 mar 2007, 19:59

1
voti

[5] Re: Arduino, MIDI, trasmettere sul canale 10

Messaggioda Foto UtenteDarwinNE » 20 ago 2014, 14:43

drinu ha scritto:Interessante quella tabella ma non riesco più a trovare la lista comandi della libreria midi (appunto tipo noteOn e noteOff...), deve essere una pagina nel sito di arduino.


Il tuo codice non usa librerie MIDI, è un semplice invio via seriale... Io fossi in te mi studierei bene lo standard MIDI, le domande che poni non riguardano Arduino.
Follow me on Mastodon: @davbucci@mastodon.sdf.org
Avatar utente
Foto UtenteDarwinNE
31,0k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 4420
Iscritto il: 18 apr 2010, 9:32
Località: Grenoble - France

0
voti

[6] Re: Arduino, MIDI, trasmettere sul canale 10

Messaggioda Foto Utentedrinu » 23 ago 2014, 11:18

Ok! A presto! Grazie!
Avatar utente
Foto Utentedrinu
143 1 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 473
Iscritto il: 29 mar 2007, 19:59


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 31 ospiti