Plug-ins oriented-various based [Ada][GtkAda][MIDI][Virtual Composer] - Ada - Programmation
Marsh Posté le 06-05-2015 à 20:35:30
Etude de l'existant :
D'abord j'ai un ou plusieurs ordianteur à ma disposition.
Ensuite j'ai un ou plusieurs instruments MIDI " " ".
Puis j'ai les surfaces de contrôle, qui peuvent être des instrument.
J'ai la norme MIDI.
En suite, je désire développer une douzaine de plug-ins qui doivent pouvoir interagir les un avec les autres tels que :
Je dois connecter les surfaces de contrôles aux entrées et les instrument aux sorties.
Je dois pouvoir assigner une surface maître pour certain plug-ins.
Voilà pour le moment j'ai ça.
Marsh Posté le 06-05-2015 à 22:13:38
Bonsoir,
Je me demande si en faisant un truc du genre :
Code :
|
Si je part d'un bon pieds ou si je me plante ?
A votre avis ?
Merci.
Marsh Posté le 07-05-2015 à 06:59:04
Bonjour,
Ou alors, donc, un truc genre :
Code :
|
Ca pourrait peut-être le faire également, c'est pas la même chose, c'est peut-être mieux même.
Marsh Posté le 08-05-2015 à 00:30:38
Code :
|
Marsh Posté le 08-05-2015 à 00:59:17
Bonsoir,
Mis a part le fait que j'ai passé un block note complet et 24 heures debout pour élaborer ce semblent de spécification qui d'ailleurs m'ont régalés, je vais poursuivre ma route, mais je souhaiterais avoir votre réaction.
On pale de MIDI, en fait on peut préfixer chacun des paquets de l'arbre de dépendance avec MIDI.
Après c'est la couche présentation des données.
- Les menus en fait des raccourci sur des fonctions, permettant de modifier des paramètre d'exécution, de gérer le processus en temps réel, d'en modifier les données, de sauvegarder un projet ou en charger un existant, et d'accéder à la documentation.
- Les vues, pareil, en fait des raccourci sur des fonctions, permettant de modifier des paramètre d'exécution, de gérer le processus en temps réel, d'en modifier les données, de sauvegarder un plug-ins ou une configuration de périphérique MIDI.
- Les flux, l'information en temps réel selon la vue (périphériques ou plugins)
En suite on a une classe de plugins, permettant de générer et gérer un workflow musical avancé.
Il me reste un page, car j'ai écrit chaque page recto et les ai mis a la poubelle sauf une la dernière exactement le post précédent.
Bon après c'est mon onzième programme du genre quoi.
Merci pour votre participation.
Marsh Posté le 08-05-2015 à 05:29:28
Bonjour, du coup mon type application semble s'approcher de ça :
Code :
|
On parle toujours de MIDI donc, .... Ben on modifie sauvegarde et on quitte des configuration de la classe MIDI.
Flots, c'est l'effet, soit néant.
views, c'est l'action de l'utilisateur sur la config.
menus, c'est l'action de l'utilisateur sur la classe.
class, ben c'est la norme M.I.D.I.
Marsh Posté le 08-05-2015 à 10:04:31
Bonjour, second jet.
J'en recolle un peut parce que la spécification a changée.
Utilisation :
Code :
|
Code :
|
C'était pour le moment pas possible de faire comme prévu.
Pour la gestion du temps,
J'ai pensé simple, faire un type exhauster_type (elapsed, remaining) le "gap-buffer" sera entre les deux avant remaining ou après elepsed.
Et un double sequencer avec chacun l'état d'exhauster qu'il mérite.
Peut-être mettre un sémaphore avec chaque sequencer pour l'implementation.
juste pour l'exemple du hack à trouver ici pour que ça passe.
Implementation
Code :
|
Notez l'attribut access pour récupérer le pointeur après conversion en local du type global.
Marsh Posté le 10-05-2015 à 22:38:58
Bonjour, ou bonsoir.
J'ai changer un peut les plans.
J'ai simplement garder un iniitialization de l'appli dans laquelle on fera saver et quitter.
En image j'en suis là !
Donc des menus faits avec UI_Manager
Des zone des données faites avec Tree_View sur GtkAda.
La question qui ce pose maintenant est : comment faire le reste.
Bon, heureusement j'y ai un peu réfléchis en concevant l'interface.
Mais je reste avide de votre connaissance et appréciation du concept.
Marsh Posté le 11-05-2015 à 20:10:40
C'est rigolo.
Je suis fier de mon bouzin, parce qu'il me plait bien.
Je me régale de l'analyse et de l'implémentation.
Allé encore un screenshot Ultrason 2015-0.2.4, puisque c'est le nom,
Donc on note l'apparition d'une zone de transport, pour le transport général et les séquenceurs de modulations.
Et 5 zone blanche accueillant pour certain une heure sur 24 heures.
Celle à peut-près au centre c'est la position courante, ... voir MIDI gap buffer.
Au dessus à droite, deux zone de données Devices et Plugns, permettant de nommer, catégoriser, trier par noms, les périphériques MIDI qui peuvent être des controlleurs des instruments, et les plugins.
Un boite à cocher pour chaque périphérique, c'est pas bien adapté, mais ça peut fonctionner.
Si vous cmpiler le programme.
Vous verrez, le temps peut passer très vite parfois .just click play !
Reste environs 17 plugins à développez qui après édition devraient pouvoir être sauvgardé et realouable.
Pour une fois, au bout de deux jour de taf, ou trois, j'ai pas l'impression d'une usine à gaz. C'est plus clair.
Bon j'ai 17 plug-ings, j'ai compté j'ai écris au moins 15 mouture de générateur, séquenceur, et autre joyeuseté.
Donc, à vue de neuz.
Un soft un plug-in à intégrer.
Marsh Posté le 13-05-2015 à 13:37:17
Bonjour,
Je suis en cours d'analyse des fux de données résultantes et je souhaiterais avoir confirmation ou simplement votre avis.
Donc j'écris un compositeur virtuel pour instrument MIDI, on traite des messages MIDI dont les caractéristiques qui sont, la source la destination, le type de message un premier paramettre, un second et un compteur horaire, que l'on va afficher par selection de périphériques pouvant être des instruments, des cartes son, des controleur et des plug-ins à gauche dans la section Flow.
J'ai donc deux sources de donnée et deux destinations, les entrées utilisateur (via les instruments, les cartes son, les controleurs) et les entrée de plug-ins, les premier à destination des seconds et les seconds l'inverse.
J'ai fait un petit graphe c'est plus simple.
-------- Plug-ins - output -------- Device_Id Devices - input ------
| v ^ | inter plug-ins partitions(Sequencers)---------------- inter-devices
| |
---------- Plug-ins - input <-------------Device_Id <------ Devices - output -------
Donc, grâce à un identifiant de périphérique, je vais me semble t-il afficher les flux de la sortie de la partition qui sont les entrées des péripéhriques et le flux à la sortie des périphériques qui sont les entrées des plug-ins.
Plug-ins output et Devices input en fait !
inter-plugs-in et inter- devices pouront peut-être faire l'objet d'un autre traitement.
On va afficher potentiellement deux fois les message de modulation à destination du plug-in mod_sequenceur, et peut-ê d'autres mais c'est pas grave puisque c'est filtré par selection.
Donc, me plante- je ?
S'il ous plait !
Merci.
Correction, modification, coloriage, synthèse.
Re-Correction, re-modification, re-coloriage, synthèse. et l'antithèse alors !
Marsh Posté le 13-05-2015 à 14:23:10
l'embrouille !
Vous corrigerer, je fatigue. ! Désolé.
Marsh Posté le 15-05-2015 à 12:40:19
Bonjour !
Ca commence à jetter !
C'est pas terminé, l'affichage coûte chère, je vais peut-être changer de stratégie.
En version 0.5.1, un plugin de teste envoie simplement un note on et note off dans le flow à afficher.
Marsh Posté le 23-05-2015 à 02:27:57
Bonjour,
Apparemment je suis très embêté.
Je dois développer 15 plug-ins répartis dans 5 catégories :
Classés par catégories :
[*]Chef d'orchestre ou band master |
Qui doivent permetre d'élaborer une architecture musicale agréable et variée en exploitant le maximum de paramètres.
Voici mon code avec Ada pour publier ici les paramètre que j'ai intégrés dans un paquetage unique regroupant quelque idées de mes pécédant programmes.
Code :
|
Et j'ai quatre autres paquetages en fait pour gérer le MIDI qu'utilise le paquetage.
En gros, les messages, les périphérique, les paramètres des instrument et une bibliothèque d'interface MIDI.
Avec notament les définitions sur la géométrie des instruments utilisés :
Code :
|
Voilà, ceux sont mes outils.
Après j'aimerais bien enregistrer charger plus de données sur les instruments telles que les noms des programmes, leur architecture et les valeurs de leurs paramètres. Mais c'est pas gagné.
Le défi c'est de faire un programme éfficace, souple, puissant, autonome, et évolutif.
bon, je vais lire mon pavé lentement.
Merci pour votre soutiens.
Marsh Posté le 23-05-2015 à 02:48:01
Et j'ai ce type en plus :
Code :
|
Et mon type MIDI_Options_type devient :
Code :
|
Le type break j'espère va m'aider à composer le son.
Mais c'est pas simple.
Marsh Posté le 23-05-2015 à 04:05:53
J'avais sortie un algo tout pourite pour le transport j'ai trouvé mieux mais j'ai quand même un problème d'algo.
Avancer seulement si c'est le moment de jouer et avancer la position quand même.
Y pas un dilèmme là !
Marsh Posté le 23-05-2015 à 15:51:58
Bonjour,
Donc, après j'ai un paquetage utilisateur dans lequel je défini des classe de plugins exploitant les type et structure du paquet précédent :
Code :
|
Ce qui fait quand même un sacret paquet de paramètres :
Code :
|
Il en manque encore beaucoup selon les plugins.
Marsh Posté le 27-05-2015 à 15:32:12
Hey !
Premier plugin génétique implémenté dans la version 0.8.7 dispo sur Sourceforge projet Ultrason.
Détails de l'implémentation :
Code :
|
Marsh Posté le 29-05-2015 à 15:00:56
Je viens de passer 2 heures à chercher pourquoi le programme ne termine pas.
En fait je ne comprends pas.
En fait j'ai pas écrit l'instruction qui va bien, mais je cherche pourquoi elle marche pas.
Oh !
Problème solvé.
Marsh Posté le 31-05-2015 à 19:20:09
Je fais du Jazz avec de l'aléatoire et de la génétique.
A 151bpm, deux timbres.
Marsh Posté le 06-06-2015 à 13:42:30
Bonjour,
Je recommence à zéro, pas trop tard...
Voic le nouveau Mainfile,
Code :
|
Voici le premier jet de la spécification de l'objet Work_Type :
Code :
|
Le composer est une tache, le paquetage Gtk_Ada est la gestion graphique de l'objet Work et du traitement de la tache composer.
Je vous poste pas le dernier plan mal fait, puis ça fera une surprise.
Question : puis faire mieux et comment ?
Marsh Posté le 07-06-2015 à 02:19:46
Nouvelle version, nouvelle interface :
C'est pas terminé quand même.
Marsh Posté le 30-12-2017 à 16:04:15
Bonjour,
Vous êtes pet-être intéressé par ce projet alors je viens pour une mise à jour des évennement chez localghost.
Ultrason, est le nom de l'application en cours de développement chez localghost.
C'est un compositeur virtuel pour instruments MIDI multi- timbral.
vous pouvez trouvez la totalité des sources sur sourceforge projet : "ultrason".
la version courante reprends simplement la version précédente en partageant cette fois chacun des périphérique avec chacune des instance de des divers fichier don le nom est passé en ligne de commande.
Ce qui permet de jouer plusieur morceau simultanément ou de les jouer à la suite en play list en boucle ou pas.
La prochaine version 6.x.x sera elle réellement orienté plugins avec une vrai implémentation de gestion de plugins.
Elle fournira 11 plugin distinct, répertorié dans 6 catégorie :
Program change et CC change list
Step sequencer
Arp sequencer
Neural network generator
Genetical kgenerator
Natural language Modulator.
Merci pour vos retours.
Bonne continuation, et bonne fin d'année.
Marsh Posté le 31-12-2017 à 21:13:34
Ca c'est la fonction initialize....
Code :
|
Ca c'est la sortie sur la console :
Citation : Work [] ready. |
Ca descend du paquet Ultrason-6.3.1a.tgz sur 88.189.147.62.
C'est une archie pour une appli de type player en play list automatique. la c'est specifique un poil pour le MIDI (Musical Instrument Digitale Interface).
Je trouve que c'est de mieux en mieux organiseé. Pas trop de Warning (pour le moment).
Il me reste à développer les plugins avec l'interface qui va bien.
Merci pour vos retour.
Marsh Posté le 07-01-2018 à 19:13:05
Bonjour,
Petit enrichissement des générateur génétique en version beta parce que l'interface n'est pas encore développer pour ces plugins.
Plus la possibilité de sauvegagrder les step sequenceur.
Mais attention, et c'est pour ça que je viens, si vous selectionner votre premier plugin sur l'emplacement N il se retrouvera à l'emplacment N° 1
Sous entendu le programme élimine les place vide entre sauvegarde et rechargement sur la ligne de commede du nom de fichier sauvegardé.
Ca c'est pour la 6.5.11a.
Bonne continuation.
Arf, zut, trompé de catégorie de forum.
Bref, j'ai pas de solution, parce que si non, je devrai créer des plugin vide avec des processus qui font rien et c'est lourd.
Je peux pas écrire plus d'un message toute les trois minutes, merci les gars !
Marsh Posté le 13-01-2018 à 20:42:59
yep !
J'arrive avec une superbe application qui fonctionne si on s'en sert bien.
Bon bref. c'est la dernière version du paquet ultrason gnu- avec spécialement pour cette version une image du graphe de dépendances.
je voudrais avoir votre avis concernant ma programmation avec Ada... Pas professionnelement parlant mais à l'ouvrage quand même.
S'il vous plait !
Voici l'image du graphe :
Marsh Posté le 13-01-2018 à 21:11:54
Oui alors, j'ai pas donné le lien pour les sources du programme.
C'est sur sourceforge ou sur ma machine à 88.189.147.62.
le main file :
Code :
|
Works_processes est une liste de fichiers ouverts pour chacun desquels un processus globale de gestion de plugin et une fenêtre son crées.
Les différent plugin font appel à diverse bibliothèque dédié à la composition.
les service de génétique et réseaux de neurones artificiels sont fournit par la bibliothèque PragmARC. (Ada Reusable Components).
Marsh Posté le 24-01-2018 à 17:30:55
Avant de reprendre l'implémentation suivante, j'ai une idée quand même.
Je implémenter un Plugin qui sera doté d'une wave lable pour un LFO.
Problème, je sais pas ce qu'est une onde ni et surtout comment ça ce modélise.
J'ai bien fait un peu de traitement du signal dans mes études mais rien à voir avec la prog.
Un coup de main serait bien venu sur ce coup !
S'il vous plait.
Marsh Posté le 24-01-2018 à 18:03:36
Bonjour, je cherche, le topic sur le sujet connexe que je sais exister ici.
le sujet en question traite des meilleur moyen d'obtenir zéro et 1 alternativement mais je trouve pas.
Vous êtes nombreux à avoir contribués à ce sujet !
J'espère que mon appel sera entendu.
Merci, bonne continuation.
yep , trouvé finalement. c'est ici, j'espère obtenir encore beaucoup de contribution sur le sujet !
https://forum.hardware.fr/hfr/Progr [...] 8560_1.htm
Marsh Posté le 30-01-2018 à 10:49:46
Bonjour. Bonsoir, selon ... s'il fait jour ou s'il fait nuit.
Je projette un nouveau programme à la fois plus simple d'utilisation et plus puissant abstraitement.
Le programme devrait être une interface général MIDI permettant d'écrire et de lire des fichier MIDI et de les jouer avec grâce à quelque outils correspondant au exigence de des normes MIDI, un step séquenceur, une Ctrl change séquencer, un Prgm change séquencer, more maybe.
Bien que je sois à la fois étudiant en informatique et utilisateur d'outils de Musique Assistée par Ordinateur, je connais encore très peu les normes MIDI, mais je vais y remédier.
Pour le moment j'ai simplement défini une application General MIDI de manière générale avec une fenêtre cachée et (pour le moment) une fenêtre de travail par laquelle on accède aux préferences qui contiennent la liste des périphérique utilisable que l'on doit allimenter grace à une boite de dialog qui elle est attachée à la fenêtre cachée de l'application.
Et j'ai grossièrement copié/collé un code d'exploitation du MIDI de l'ancienne version qui fournit l'objet "Orcherster" qui est un ensemble d'instruments qui seront en suite exploités dans la mise en oeuvre des processus MIDI.
En image, ça donne ceci :
Le main file (pour le moment) :
Code :
|
La bibliothèque Gm_Application-Gtk_Interface (specification) :
Code :
|
Donc semsiblement divergent du programme ultrason par l'ouverture sur une selection des instrument exploités préalable à l'utilisation.
Cette selection est mémorisé dans deux fichier de préferences, un pour les périphériques d'entrée selectionnés et un autre pour les périphériques de sortie.
Ces fichiers sont maintenus grâce à un paquetage Shared_Passive.
Voilà. Je souhaiterais avoir votre avis sur mon implémentation jusqu'ici et je souhaitais également vous inviter à contribuer à ce projet.
Vous trouverai les source sur sourceforge.net : Gmface version 0.0.4gnu_src
Par exemple, si quelqu'un sur Windows (parce que perso je suis surGNU/Linux, avec un serveur http sur ma machine je peux pas rebooter sans arrêt) pouvais me dire qui ça tource également sur Windows, c'est sympa.
J'utilise gnat2016 et gtkada2016, j'ai installé portmidi-dev sur mon système GNU/Linux Debian 9.3 sur une architecture AMD 64bits.
Merci pour vos retours et vos contributions.
Plus ouvertement je cherche un moyen de metre à jour la liste des périphérique disponible durant l'exécution du programme. (je parle pas de jouer avec de nouveau mais juste de les connaître).
(Même ce programme se limite au périphériques connectés avant l'appel sur la ligne de commande).
Merci encore.
Marsh Posté le 06-02-2018 à 17:21:06
Bonjour et merci de l'intérêt que vous porter pour ce sujet :
Je viens juste poster ici la TODO.List du projet Gmface.
Et je suis en vacance.
A+
Version 0.1.5 |
Marsh Posté le 06-05-2015 à 12:02:23
Bonjour,
Je souhaiterais avoir votre aide pour analyser un projet d'interface Homme / Machine pour Instruments MIDI.
Voici en image ce que je projette :
sous le nom V2Engine 2016 ce cache une liste de menu [Ficher, Edition, Créer, Affichage, Option, Aide]
En suite à gauche une vue des divers signaux écrient dans le séquenceur et exlusivement les message sur la canal global.
A droit, deux vues, instrument pour sélectionner les séquence à afficher par instrument et une vue par plug ins pour afficher les note par plug ins.
Enfin en bas de fenêtre les outils pour démarer arrêter le séquenceur et le séquenceur de modulation et afficher l'état du transport.
Je voudrais faire ça avec Ada et GtkAda sur Gnu/Linux. Mais loin de l'implémentation, ma question porte sur la manière d'approcher e probblème sachant que c'est du temps réel, qu'il y a des périphériques en oeuvre dont il faut gérer les port et les données en entrées et sortie, l'arrêt du programme.
Comment procèderiez vous avec Ada 95-2014 ?
Merci pour votre aide.
Message édité par par l'anneau de l'ia le 13-05-2015 à 14:02:17
---------------
Toute expression prend un sens spirituel qui nous influence dans notre quête de l'Homme.