Votre navigateur est obsolète et non sécurisé. Vous ne pouvez pas bénéficier de toutes les fonctionnalités de ce site. Pour une navigation optimale et sécurisée, merci de mettre à jour votre navigateur.
arduinorgue
Le site

Programme décodage

#include #include #include "expander.h" const char MTHD[]={'M','T','h','d',0,0,0,6,0}; #define len_MTHD 9 const char MTRK[]="MTrk"; #define len_MTRK 4 //bool read_ok=true; //#define check_read_ok if (!read_ok){fichier.close();} #define SD_CS 10 // SD ChipSelect unsigned char read_char(File &fichier) {  digitalWrite(7, HIGH); // indicateur de lecture (oscillo)  unsigned char c = fichier.read();  digitalWrite(7, LOW);  return c; } unsigned int read_nbr(File &fichier, int n) {    unsigned int ret_val=0;    while (n-- > 0) {        ret_val=ret_val*256+read_char(fichier);    }    return ret_val; } unsigned int read_nbr(File &fichier) {    unsigned char inByte;    unsigned int nbr=0;    do {        inByte=read_char(fichier);        if (inByte>127)            nbr=nbr*256+(inByte-128);        else            nbr=nbr*256+inByte;    } while (inByte>127);    return nbr; } void setup() {  pinMode(7, OUTPUT); // indicateur lecture SD  Serial.begin(9600);   //while(1){  expander_setup();  SdFat SD;  if (!SD.begin(SD_CS, SPI_HALF_SPEED))    Serial.println("Erreur initialisation carte SD !");  File fichier=SD.open("test.mid", O_READ);  int i;  int nb_tracks,resolution,lgr_bloc;  if (fichier.available()) {      i=0;      while ((read_char(fichier)==MTHD[i++]) && (i) delay (µs -> ms)          Serial.write("   ");          Serial.println(delay_tempo);                    inByte=read_char(fichier); // status byte message          switch (inByte) {              case 0xFF: // meta event              case 0xF7: // SysEx event (escape sequence) OU continuation events (rares !?)                  inByte=read_char(fichier); // message type                  switch (inByte) {                      case 0x2F: // Manque 1 octet… !?                          end_file=1;                          break;                                                case 0x51:                          if (read_char(fichier)==3) { // toujours 3 octets… (sortie sinon… ?)                              tempo=read_nbr(fichier, 3)/resolution; // (durée d'1 noire (µs) =>) durée d'1 tick (µs)                          }                          break;                                                case 3:                          len=read_nbr(fichier);                          i=0;                          for (i; i CHOIX (taille en +)                  while(millis()=0xE0 && inByte<=0xF2 || inByte<=0xBF)                          read_char(fichier);                      while(millis()