2017-10-15 32 views
2

Dans mon groupe, tous les musiciens ont les deux mains occupées à tout moment. Cependant, nous voulons ajouter des accords de synthétiseur entiers (1/4 .. longueur de note entière), peut-être déclenché par un simple commutateur à pied à chaque fois (parce que jouer le long d'un séquenceur est actuellement trop difficile pour nous). Il y a quelque temps, j'ai écrit une application console (Windows) en C (MinGW) qui convertissait les événements MIDI entrants en texte, redirigeait ce texte vers un programme externe (script AWK) et reconvertissait la sortie de texte de ce programme externe. aux événements MIDI. Fondamentalement, chaque type de filtrage ou de génération d'événement était possible; J'ai effectivement produit des accords déclenchés par de simples messages de contrôle; J'ai gardé notes NRO en mémoire pour pouvoir -OFF eux chaque fois un nouvel accord a été envoyé, etc. - le traitement proprement dit (exécution) temps ne sont pas un problème du toutTraitement MIDI "temps réel" programmable

Mais je (!) a dû comprendre que non seulement la latence, mais aussi le notoirement peu fiable (en ce qui concerne "quand", "pour combien de temps") l'application utilisateur multitâche OS/commutation fait de ce concept pratiquement sans valeur au moins pour une utilisation "en temps réel". Il y avait toujours délais clairement perceptibles, de durée imprévisible. J'ai lu sur la programmation du pilote en mode utilisateur et téléchargé quelques ressources, mais en quelque sorte arrêté de travailler sur ce projet sans un résultat réel. En plus de ce projet spécifique, j'ai même une certaine expérience dans l'écriture de petites machines «virtuelles» qui permettent d'exprimer exactement les variables, conditionnelles et mathématiques, stockées comme un arbre symbolique et traitées assez rapidement. Peut-être qu'il y a aussi la possibilité d'intégrer Lua, V8 ou quoi que ce soit de ce genre. Donc appelant un autre programme (externe) n'est pas nécessairement le problème ici, car cela peut être évité.

Le problème qui reste est que le traitement dans son ensemble est toujours effectué par une application (utilisateur). Donc, je me dis qu'il n'y a aucun moyen de contourner un (mode utilisateur) pilote , dans ce scénario. Sinon, je pensais même à du matériel (plus "temps réel") - un Raspi ou autre - mais l'interface MIDI peut être un défi supplémentaire.

Existe-t-il une solution matérielle ou logicielle (ou un projet) pouvant servir de base à un tel _Generic MIDI filter/processor_? En dehors du comportement prévisible, il est souhaitable de ne pas avoir besoin d'un environnement de compilation (C) pour créer des filtres/règles, puisque cette étape créative se produira probablement dans notre salle de répétition (ordinateur portable disponible). laboratoire". Les "programmes" basés sur le texte sont bien - pour le long terme, je vais peut-être construire une interface graphique pour le câblage/générer des règles de toute façon.

+0

Tant que rien d'autre n'est en cours d'exécution, multitâche ne doit pas introduire des retards notables. Je suppose que le problème est les retards de minuterie dans votre application, ou le temps de démarrage de votre interprète AWK. –

+0

Intéressant mais très long, très large et très hors-sujet doe SO question. Sous Windows ou Linux, vous n'avez besoin d'aucun pilote, le MIDI est un protocole série UART. MIDI est une interface matérielle assez simple, nécessitant un opto-isolateur sur le MIDI IN (dont vous n'avez pas besoin) et juste des résistances pour MIDI OUT.Les signaux vers l'interface matérielle peuvent être pilotés directement à partir d'un UART aux niveaux logiques TTL (5v) et à 31,25 bauds. De nombreux micros utilisent la logique 3.3v, qui ne serait pas strictement conforme, mais fonctionnera probablement - une question vraiment pour https://electronics.stackexchange.com/. – Clifford

+0

Je ne suis pas clair whet la conversion du MIDI en texte puis de retour est pour. C'est probablement la cause de la latence, je serais surpris si vous rencontriez de tels problèmes si le tout était fait en C au niveau du message MIDI binaire à moins que le PC ne soit occupé avec d'autres activités. – Clifford

Répondre

0

Le MIDI est très bien géré sous Windows. Je ne suis pas sûr de la source des problèmes d'origine que vous avez eu. Sans doute, il y a un peu de latence.

Vous pouvez gérer cela en temps réel avec un microcontrôleur. Les bonnes nouvelles sont que vous n'avez même pas besoin de construire le matériel. Des contrôleurs prêts à l'emploi sont disponibles pour cela. Par exemple: http://www.midisolutions.com/prodevp.htm