Se connecter
Se connecter

ou
Créer un compte

ou
FR
EN

Ajout d'écrans sur une BCF2000

  • 58 réponses
  • 12 participants
  • 6 093 vues
  • 22 followers
Sujet de la discussion Ajout d'écrans sur une BCF2000

Salut à tous,

J'ai commencé un projet qui a pour but d'ajouter des écrans pour chaque tranche de ma BCF 2000 (un peu à la Xtouch de la même marque).

L'idée, c'est d'afficher le nom de la piste correspondant, et en fonction d'une touche dédiée, où alors directement sur l'édition d'un paramètre, afficher le paramètre en question. Éventuellement par la suite, ajouter un vu-metre par piste.

Le but est de faire un truc open-source, facile à mettre en place pour un bricoleur débutant et compatible avec plusieurs surfaces de contrôle, voir même chainable pour des surfaces plus larges et le tout sans se ruiner. yumyum.gif  

Pour le moment, j'utilise un Arduino flashé avec HIDuino pour que celui-ci soit reconnu comme un périphérique USB-MIDI et un écran OLED de 0,96" (c'est tout petit, mais ça tiens pile sur une largeur de tranche) de la BCF icon_mrgreen.gif.

 

Pour la compatibilité, j'utiliserai le protocole Mackie HUI MIDI en me basant sur le boulot de theageman qui a reverse-engineeré tout ça et en a fait un joli document d'explications dispo sur un thread du forum de Reaper.

 

Dans mes avancées, j'arrive à faire en sorte que l'Arduino soit reconnu comme périphérique USB-MIDI et afficher sur l'écran oled les paramètres MIDI et leur valeurs tels que CC, PC, noteOn/Off, etc. avec le numéro de canal MIDI associé. 

Le projet est dispo sur mon Github, et la route est encore longue pour avoir quelque chose de fonctionnel, mais si des motivés sont prêts à m'aider, c'est pas de refus!

 

Pour le moment je galère à recevoir des informations depuis le protocole Mackie HUI, qui est sensé être transporté dans des trames SysEx. Les messages que je reçois sont tout sauf du SysEx, donc ils sont interprétés par mon programme comme des Notes ou des Changes (qui font juste 3 bytes, et non plus, comme prévu par les SysEx). Si quelqu'un à déjà mis les mains dans ce genre de truc, qu'il n'hésite pas à me guider! icon_boire.gif

 

2
Bonjour,

merci pour le lien vers les fichiers descriptif HUI !
Je m'y étais penché il y a quelques années, mais avais vite laissé tomber...

Joli projet !

Citation :
Les messages que je reçois sont tout sauf du SysEx, donc ils sont interprétés par mon programme comme des Notes ou des Changes (qui font juste 3 bytes, et non plus, comme prévu par les SysEx)

Tu en est sûr, ou c'est le comportement de ton soft qui t'y fait penser ?

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

3

Citation de chimimic

Tu en est sûr, ou c'est le comportement de ton soft qui t'y fait penser ?

 J'utilise Ardour sous linux, patché dans Jack. Ce qui est bien pratique pour gérer toutes les connexions MIDI et audio.

Ma BCF est patchée sur l'entrée Mackie Control IN, mon Arduino sur la sortie Mackie Control OUT, et tout ce que je reçois, c'est du CC, PC et cie… (dans la librairie MIDI d'Arduino, j'ai un getMessageType qui me renvoit cette info, j'attends un 0xF0 comme début de trame SysEx.)

Quand je lance la lecture dans mon DAW, le RX de mon Arduino me signale que je reçois bien des infos en masse, et que d'après la lib, c'est pas du SysEx. icon_sommeil.gif

 

L'émulation Mackie Control et le protocole MCP sont fait du coté DAW non?  J'essaierai éventuellement avec un autre DAW sous Windows pour voir si c'est le cas aussi. J'essaie de me remettre dedans prochainement icon_razz.gif

 

 

 

 

4
Levé de doute avec capture oscillo sur lignes MIDI, et analyse des trames réellement échangées ;-)

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

5
Je flag ...

Sujet très intéressant et qui pourrait en inspirer plus d'un !
6

Citation de : chimimic

Levé de doute avec capture oscillo sur lignes MIDI, et analyse des trames réellement échangées ;-)

 Certes, mais dans mon cas l'arduino communique avec l'ordi en MIDI via l'usb HID, donc la communication "série" de l'arduino est directement géré dans le firmware, mais je peux toujours essayer de sortir de la carte son en midi et analyser les trames à l'oscillo (qui d'ailleurs est à la cave dans un carton, car pas très Wife compliant dans le bureau icon_mrgreen.gif ) 

 

Edit: avec un moniteur logiciel, ça fonctionne bien, le DAW m'envoie bien des SysEx icon_biggrin.gif 

C'est connecté ainsi : 

Jack connection

… et les trames envoyées quand je fais play depuis ma BCF :

extrait des messages MIDI

 

Donc c'est bien dans mon code qu'il y a un soucis…

 

[ Dernière édition du message le 20/09/2016 à 18:36:25 ]

7
Citation :
dans mon cas l'arduino communique avec l'ordi en MIDI via l'usb HID

Je l'avais pourtant bien lu. Désolé.
En tout cas cela valait bien le coup de vérifier ce point.
Il y a bien des CC en plus des Sysex...
Ca avance ! ;)

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

[ Dernière édition du message le 20/09/2016 à 20:20:28 ]

8
Citation de Vahlalafollower :
L'idée, c'est d'afficher le nom de la piste correspondant, et en fonction d'une touche dédiée, où alors directement sur l'édition d'un paramètre, afficher le paramètre en question. Éventuellement par la suite, ajouter un vu-metre par piste.


Sur Cockos j'ai parcouru quelques forums de DIY de ce genre de projet ...avec une bcf je crois ou un icontrols pro ...
bref :

attachment.php

attachment.php

Petits écrans avec a peu près tout ce que tu veux y mettre ...
Peut être l'as tu déjà lu, mais je mets le lien au cas ou ...(c'est de l'anglais) https://forum.cockos.com/showthread.php?t=81818&page=10
Bon par contre tu n'y trouveras pas énormément d'infos ...plutôt des idées ...
9
Hello,

A toutes fins utiles, voici l'implémentation en C# du décodage dans Huskervu. Huskervu était un utilitaire sur PC qui faisait grosso modo la même chose que BCFViewer/BCF2000 virtual display (Je n'en suis pas l'auteur).
http://www.medwaystudios.com/bcr2000-huskervu.html
Ca ne casse pas des briques. Il semble que la mackie renvoie l'affichage complet dans un seul sysex. Je n'ai pas testé la recompilation du code pour valider.

private void g_midiInput_SysEx(object sender, SysExEventArgs e)
{
    try
    {
        string text = e.Message.Message.ToString();
        if (text.Substring(5, 1) == "u0012")
        {
            int num = (int)text.get_Chars(6);
            int num2 = (int)Convert.ToInt16(text.get_Length() - 8);
            string text2 = text.Substring(7, num2);
            if (num + text2.get_Length() < 113)
            {
                this.g_sDisplayText = this.g_sDisplayText.Substring(0, num)
                 + text2
                 + this.g_sDisplayText.Substring(num + num2, 112 - (num + num2));
                this.fnUpdateText();
            }
        }
    }
    catch
    {
    }
}

[ Dernière édition du message le 20/09/2016 à 23:52:08 ]

10

@moustick, c'est exactement ça que je compte faire, mais sans la partie controlleur, mes compétences en usinage/méchanique sont bien limitées, donc je vais me contenter d'un affichage avec 2-3 boutons de contrôle. icon_wink.gif Les écrans sont les mêmes, bien qu'un peu trop "chargés" d'informations à mon gout. Le problème, avec ce genre de projets, c'est que les gens sont souvent tellement fier d'avoir fait leur truc qu'ils en oublient de partager comment ça fonctionne, et quelles sont les étapes pour en arriver à un projet fonctionnel. 

@CéGlucose, interressant! merci, je vais checker ça aussi

 

Sinon, j'ai bien réussi à récupérer les mêmes SysEx que sur mon moniteur MIDI logiciel,  sur mon écran Oled! icon_tourne.gif  C'était un problème de code mal formé, avec des mauvaises déclarations de variables. Je suis un peu rouillé en C depuis que je fais beaucoup plus de web et de python.

Maintenant, faut que je décode, convertisse ça en human readable!

 

11
Citation :
Sinon, j'ai bien réussi à récupérer les mêmes SysEx que sur mon moniteur MIDI logiciel, sur mon écran Oled!

Génial, bravo et bonne suite !!!

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

12
Très intéressé par le sujet aussi... donc n'hésites pas à nous faire part de tes avancées !!! Perso, je n'en suis, sur mon controleur, qu'au commandes MMC stop, play etc... Me suis vite rendu compte que pour aller plus loin, fallait passer par une émulation Mackie et là, c'est une autre paire de manche ;)

Pour ma part, j'ai flashé l'arduino uno avec dualMocoLUFA... c'est super pratique pour tester et passer d'usb-midi à usb-serial... Pour ceux que çà intéresse : https://github.com/kuwatay/mocolufa
13

Après lecture du magnifique : LogicControl_EN.pdf, je comprends mieux mes trames SysEx:

L'écran LCD sur une mackie control possède 56 caractères, ça tombe bien, divisé par 8 (nombre de tranches/écrans) ça fait 7 caractères par écran.

Chaque position de caractère est identifié par une valeur Hexa:

  • allant de 0x00 à 0x37 (soit 56 valeurs) pour la première ligne,
  • et de 0x38 à 0x6F pour la seconde ligne.

 

Dans les SysEx reçus (dont le screenshot se trouve quelques posts plus haut), on retrouve bien ce format:

5 chars : F0 00 00 66 00  qui correspond à l'identifiant du device,

12 : qui indique le début du message LCD

Puis : 38 4C 35 31 52 34 39 20 8    

Donc: à partir de l'offset 38 (2e ligne, 1er caractère) on doit donc afficher : 

SysEx 4C 35 31 52 34 39 20
Affiche L 5 1 R 4 9 (espace)

 

Si vous suivez jusque là, on à donc un affichage de PAN sur la 2e ligne, 1er afficheur : L51 R49  (j'ai du me rater dans le DAW pour faire un PAN pareil icon_redface.gif )

 Il y a 8 messages SysEx qui se suivent avec le même schéma, soit mes 8 configurations de PAN pour chacune de mes tranches sur la 2e ligne!

 

@metalfx : J'ai utilisé HIDuino pour flasher le mien, ça semble être sensiblement la même chose! icon_bravo.gif

@chimimic: Merci de ton soutien ! Ton site est une mine d'or pour tout bricoleur!

 

14
Merci pour le lien et ces petits "détails".
Cela me donnerait presque envie de m'y (re)plonger...

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

15
Super explication ! çà devient moins obscure pour moi... faudra que je teste tout çà quand je serais à la partie LCD ;-)
16

De retour avec une belle progression sur le projet,

J'arrive à présent à afficher les infos que le DAW m'envoie sur la sortie MIDI mackie control! yumyum.gif

Je change la valeur du PAN via les potards de la BCF, et mon écran réagit bien et m'affiche un truc du genre: 

LR panning

Après quelques temps, l'écran retourne à sa valeur initiale:

Pan

Ça réagit même sur les faders quand je les bouge depuis la bcf, ou directement dans le DAW:

Faders

 

Il revient toujours sur PAN visiblement. J'ai jamais eu de MCU en main, donc je suppose que c'est un comportement voulu.

J'ai aussi réussi à afficher le nom de la piste sur l'écran, mais le problème, c'est que celui-ci ne s'affiche que lorsque je le modifie dans le DAW… 

En gros l'écran ne réagit pas tant que je ne modifie pas de paramètres. Il y a peut-être une fonction pour demander au DAW de me fournir des valeurs, piste à creuser.

J'ai un autre soucis, quand je modifie rapidement les paramètres, l'écran affiche parfois des caractères aléatoires un peu n'importe ou. Y'a de la friture sur la ligne… il faut que j'arrive à stabiliser le truc, c'est peut-être dû au grand nombre de messages qui passent par la liaison MIDI-USB headscratch.gif

Reste à faire: 

  • La gestion du nom de la piste,
  • La gestion eventuelle d'un petit bargraph/vumetre 
  • La gestion du TimeCode sur un écran à part pour connaitre la position du curseur dans le projet,
  • Des boutons pour switcher l'affichage,
  • … plein d'autre trucs!

J'ai mis à jour le code sur Github si ça interesse quelqu'un. 

Je crois que je vais lancer une commande d'afficheurs Oled supplémentaires! icon_tourne.gif

Je tacherais de faire une petite vidéo pour montrer le projet en fonctionnement!

 

 

17
Cool, ça avance bien ;-)
Et merci pour le partage sur Github.

Pour avoir travaillé avec plusieurs écrans LCD/TFT/OLED, je sais que le temps de rafraichissement est parfois un problème. Et encore, là tu n'affiches que du texte et pas de "larges" zones graphiques.

Il serait sans doute judicieux de ne pas rafraichir systématiquement les infos sur l'écran OLED, en cas de réception d'un grand nombre d'infos, mais d'attendre quelques dizaines de ms ou même "sauter" quelques valeurs "intermédiaires".

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

18

Après réflexion, je vais me heurter à un souci, l'adressage des écrans OLED… mon écran actuel cause en I2C, jusque là, pas de soucis, 4 câbles, c'est un BUS. Par contre, les écrans I2C à base de SSD136 n'offrent que la possibilité de 2 adresses différentes (via un jumper). Là où je veux en mettre un minimum de 8, ça va poser problème…headbang.gif

Je regarde donc du coté des écrans SPI, qui semblent être plus rapides (et donc plus fluide?) Mais qui nécessitent plus de branchements. Ils sont un peu plus cher aussi.

J'aurai donc besoin de 4 I/O que je peux chainer entre les différents écrans:

  • DATA to digital 9
  • CLK to digital 10
  • D/C to digital 11
  • RST to digital 13

mais chaque écran nécessite 1 I/O supplémentaire pour être "selectionné" ce qui me laisse:

  • CS to digital 2 3 4 5 6 7 8 12

Je ne sais pas si je peux utiliser 0 et 1 car je pense qu'elles sont réservées pour la communication Série/MIDI 

Ça me fait un total de 8 écrans, tout pile. Je pense cependant balancer le tout derrière un multiplexeur pour n'utiliser qu'une seul I/O sur l'arduino, pour laisser de la place à d'éventuelles améliorations. 

Ça complexifie un peu le montage par contre... mais ça me semble nécessaire. 

 

[ Dernière édition du message le 23/09/2016 à 14:17:33 ]

19
Pour moi, et vu les extensions possibles à venir, l'emploi d'un système de multiplexage me semble la meilleure solution. Multiplexer avec un seul fil de données est possible, mais c'est tout de même plus simple avec deux fils (Data et Clock). Si le mux est de type I2C ou SPI, ce sera sans doute aussi bien même si cela n'a rien d'impératif. Dans mes développements, j'utilise des mux et expandeurs de ports de tous poils, c'est vachement pratique. Il faut juste savoir que certains circuits spécialisés sont parfois plus "chatouilleux" que d'autres...

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

20
Je ne sais pas si çà peux t'aider mais la chaîne Youtube "Notes and Volts" parle justement de ce problème de raffraichissement des paramètres midi il me semble... En gros, il explique que les paramètres doivent être envoyés qu'une fois qu'ils sont changés.

Il en parle à partir de 6 minutes dans cette vidéo



Il a également un site où tu peux télécharger son code source :

http://www.notesandvolts.com/2016/03/arduino-midi-controller-potentiometers.html

Peut-être trouveras-tu une idée dans son code... bien que celui-ci soit axé sur des potentiomètres et des boutons...

[ Dernière édition du message le 23/09/2016 à 18:36:35 ]

21

@metalfx : Je connais Notes and Volts, c'est une véritable mine d'informations! C'est grâce à lui que j'ai commencé mes premiers montages MIDI (un switcher de canaux pour mon ampli/préampli en rack)

Le "problème", c'est qu'il se concentre sur la partie controlleur, et un peu moins sur le retour d'informations. Je peux toujours essayer d'entrer en contact avec lui pour voir. icon_razz.gif

 

En attendant de pouvoir me prendre des nouveaux écrans en SPI et quelques MUX (je dois en avoir quelques un qui trainent dans mes tiroirs),  j'ai avancé sur la partie Metering envoyé par le MCP. Ça m'a permis de découvrir un point important, le protocole n'envoie pas que du SysEx, mais aussi des messages MIDI plus «standards».

Les messages de Metering pour chaque canal sont de type 0xD0 (Channel pressure) et sont formés ainsi: 

D0 ,  XY

XY étant un byte qui permet de définir à la fois le canal et la valeur du vu-metre

  • X : numéro du canal, allant de 0 à 7 
  • Y : valeur du vu mètre, allant de 0 à C (0 étant 0% et C étant 100%) 
    • si ce Y est égal à E, alors on set l'overload (typiquement une led avec un clip)
    • si ce Y est égal à F, alors on efface l'overload (on éteind la led de clipping)

Donc à chaque fois que je rencontre un 0xD0, je regarde la valeur qui suit, je la "découpe" en 2 à l'aide d'un masque 

byte chan = data & 0xf0;

byte level = data & 0x0f; 

… et je prend en compte l'overload s'il y a.

A partir de là, je dessine une ligne en fonction de la valeur, (en prennant en compte la largeur totale de l'écran: 128px dans mon cas pour 100%)

Je dois encore gérer le decay de la valeur, en gros, quand je stoppe la lecture dans le DAW, le vu-metre est sensé (d'après la doc) retomber d'une unité toute les 300ms, soit 1.8s pour retomber depuis le 100%.

Ça fonctionne plutôt bien, et c'est réactif! J'affiche ça sur la 1ère ligne du LCD pour le moment (vu que j'ai toujours pas réussi à y afficher le nom de la piste), mais un petit vu-metre par cannal pourrait vraiment être classe visuellement yumyum.gif

22
Clair que les tutos "Notes and Volts" sont très claires pour mettre le pied à l'étrier... j'attends la suite de ses vidéos avec grande impatience !

Encore bravo pour ton travail... tes explications sont limpides et je me régale.

Perso, pour l'instant, je n'ai pas encore le matos pour creuser mon histoire de controlleur dédié à FL Studio mais çà ne saurais tarder ;-) (Faders motorisés etc...) J'ai demandé à Image Line si on pouvait accéder aux différentes fenêtres de FL via le midi en sysex ou autre mais ils m'ont répondu que c'était impossible :((
Etant donné que je ne tiens pas à avoir de soft coté ordi, j'ai pensé utiliser un Leonardo configuré en clavier pour me faire des touches de raccourcis... c'est peut-être un peu overkill et tout de suite çà demanderait deux branchements usb à partir de mon controlleur.

Mon autre idée était de prendre une QCon lite pour "monitorer" ce qui se passe exactement entre FL et le controlleur en mode Mackie Control... Ensuite la désosser pour récupérer le fader motorisé, les boutons etc... Oui, je sais... c'est un peu hard comme pensée mais c'est pour la science :D:

Donc... encore merci pour ton éclairage sur le protocole Mackie...

Petite question en passant, les vu-mètre ont un "fall" à 300ms... dois je comprendre que c'est une lecture RMS qui est faites sur les vu-mètre ? Je pensais qu'on était sur du peak meter...

23

Citation de metalfx

 Encore bravo pour ton travail... tes explications sont limpides et je me régale.

 icon_bravo.gif

FL Studio n'a pas de mode learn ou de truc similaire? Je ne me suis pas penché sur le mode "Plug-in Edit view" de la mackie, car non supporté sur Ardour pour le moment. Mais je pense que ça doit être faisable via le protocole Mackie Control non? (si FL le supporte)

Pour tes histoires de raccourcis, on voit souvent des gens qui désossent des claviers PC pour en faire des controleurs, ça serais pas plus facile? Surtout que des faders motorisés, ça se trouve dans les 15-20€ sur le net et c'est parfaitement géré avec les Arduino (ici par exemple). Ça reviendra moins cher que d'acheter une QCon icon_razz.gif

 

Concernant les vu-mètres, oui c'est bien du peak, c'est simplement le petit effet smooth qui fait que les valeurs retombent à cette vitesse. Dans mon DAW, quand tu stoppe la lecture, il y a une barre qui reste au niveau du peak et ça retombe lentement jusqu'a 0, mais la valeur du peak est gardée en valeur décimale.

24
De fait, tu avais raison... je viens de regarder une vidéo de démonstration de Beatstruggles avec une vrai Mackie Control Pro sous FL Studio et j'ai été surpris de constater le nombre de fonctions disponibles. Zoom, changement entre pattern et song mode, gestion du bpm, navigation dans les samples et même switch entre les fenêtres disponibles...

Puis, on a effectivement le fameux "Link to controller" mieux connu sous le nom de midi learn :-)

Bref, moi qui pensais que le mode Mackie Control de FL était juste limité aux faders motorisés... ben va falloir revoir ma copie ! (J'ai eu une BCF2000 il y a quelques années et je me limitais à çà à l'époque...)

Désosser des claviers ? çà c'est une idées qui me plait et à laquelle je n'avais pas pensé tout bêtement :mdr:

25
Merci pour le thread

Beat Thang iz Dead