Bonjour,
J'ai récemment fait un post pour résoudre mon problème de message totalement illisible.
Ce problème est maintenant résolu.
Sauf que maintenant que je veux aller plus loin dans l'obtention d'un son sur Ableton (via Hairless), eh bah je me retrouve de nouveau face à un problème...
Alors, en fait : Maintenant que j'ai un message Midi exploitable, Hairless n'a pas l'air de vouloir comprendre.
Voici un extrait de ce qui en sort en pièce jointe...
Je ne retrouve que des "note Off" alors qu'elles devraient être "note On" et il y a beaucoup de "Program Change" et de "System Message", et surtout : un gros avertissement comme quoi il manque "1 data byte" sauf que dans les préférences, je suis au max (8 data bytes).
Et donc, bien évidemment, Ableton ne capte rien du tout !
Voici mon code si jamais ça peut aider :
#include <MIDI.h>
//*******************************************************************************************************************
// User settable variables
//*******************************************************************************************************************
MIDI_CREATE_DEFAULT_INSTANCE();
int pinRead;
int pinAssignments[12] = {
'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11'
};
byte PadNote[16] = {
57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72
}; // MIDI notes from 0 to 127 (Mid C = 60)
int PadCutOff[16] =
{
400, 400, 200, 800, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400
}; // Minimum Analog value to cause a drum hit
int MaxPlayTime[16] = {
90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90
}; // Cycles before a 2nd hit is allowed
#define midichannel 2; // MIDI channel from 0 to 15 (+1 in "real world")
boolean VelocityFlag = true; // Velocity ON (true) or OFF (false)
//*******************************************************************************************************************
// Internal Use Variables
//*******************************************************************************************************************
boolean activePad[16] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}; // Array of flags of pad currently playing
int PinPlayTime[16] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}; // Counter since pad started to play
byte status1;
int pin = 0;
int hitavg = 0;
//*******************************************************************************************************************
// Setup
//*******************************************************************************************************************
void setup()
{
MIDI.begin(); // connect to the serial port 115200
}
//*******************************************************************************************************************
// Main Program
//*******************************************************************************************************************
void loop()
{
for (int pin = 0; pin < 16; pin++) //
{
//int pin = 3;
// for (pinRead=0; pinRead < 16, pin++){
hitavg = analogRead(pinAssignments[pin]);
//Serial.println(hitavg);
// read the input pin
if ((hitavg > PadCutOff[pin]))
{
if ((activePad[pin] == false))
{
if (VelocityFlag == true)
{
// hitavg = 127 / ((1023 - PadCutOff[pin]) / (hitavg - PadCutOff[pin])); // With full range (Too sensitive ?)
hitavg = (hitavg / 8) - 1 ; // Upper range
}
else
{
hitavg = 127;
}
MIDI_TX(144, PadNote[pin], hitavg); //note on
PinPlayTime[pin] = 0;
activePad[pin] = true;
}
else
{
PinPlayTime[pin] = PinPlayTime[pin] + 1;
}
}
else if ((activePad[pin] == true))
{
PinPlayTime[pin] = PinPlayTime[pin] + 1;
if (PinPlayTime[pin] > MaxPlayTime[pin])
{
activePad[pin] = false;
MIDI_TX(144, PadNote[pin], 0);
}
}
}
}
//*******************************************************************************************************************
// Transmit MIDI Message
//*******************************************************************************************************************
void MIDI_TX(byte MESSAGE, byte PITCH, byte VELOCITY)
{
status1 = MESSAGE + midichannel;
// Serial.print(status1);
// Serial.print(PITCH);
// Serial.print(VELOCITY);
MIDI.sendNoteOn(PITCH, VELOCITY, 2);
delay(200);
MIDI.sendNoteOff(PITCH, 0, 2);
}
Si quelqu'un voit quelque chose qui pourrait améliorer mon système, je lui en serait très reconnaissant !
Merci d'avance
Très bonne journée.