Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]

1 - Le matériel et les pilotes ALSA, FFADO, ...

> Forums de discussion > 1 - Le matériel et les pilotes ALSA, FFADO, ... > [ABANDONNÉ] Interfacer un programme grâce à Jackd
Dernier post
Page : 1/2   -   Aller directement à la page : 1  2 

[ABANDONNÉ] Interfacer un programme grâce à Jackd

aroue utilisateur non connecté
Salut,
Je joue de la vielle à roue et ai eu l'occasion de rencontrer certains des gens d'ici.
Seulement la vielle, même de très bonne qualité, reste un instrument peu stable dans ses réglages, capricieux avec la météo... et très coûteux.
Je tente actuellement de réaliser une vielle virtuelle utilisant deux éléments physiques pas chers :
- un petit clavier 37 touches de Maudio (ce qui fait beaucoup plus que les 2 octaves d'une vielle usuelle) pour la partie mélodique. Le clavier sera relié à un synthétiseur logiciel via Jackd. Cela me paraît simple (on verra).
- un disque opaque entraîné par une manivelle. Le disque est percé de trous espacés régulièrement et un tandem LED - photocapteur transmet des impulsions électriques via un port son (entrée micro de la carte son par exemple).
Le traitement des ralentissements/accélérations effectués sur la manivelle se fera par un petit programme écrit en C.

Seulement il y a là un problème : il faudrait que ce qui sort du programme (par exemple un son codé en MIDI) soit "connectable" via Jackd. Je crois que cela veut dire que le programme serait perçu comme un "port" MIDI.
Mais comment un programme peut-il se déclarer pour être reconnu (et connectable via Jackd) ?

J'ai commencé à piocher le code de pmidi mais si quelqu'un a des infos qui me ferait gagner des heures pénibles d'analyse de code, je serais bien content.

A+ et merci. Aroue

Samuel utilisateur non connecté Allemagne
Saut,

je n'y connais rien en code, donc je ne saurais pas t'aider, mais je trouve le projet super. Tu nous donnes des nouvelles dès que ça avance ?

aroue utilisateur non connecté
Citation :
Saut,

je n'y connais rien en code, donc je ne saurais pas t'aider, mais je trouve le projet super. Tu nous donnes des nouvelles dès que ça avance ?


Merci de ton intérêt.
Quelques remarques déjà :
- j'ai déballé et branché le clavier hier, activé Jackd, Zynadd..., connecté via Jackd. Cela marche du premier coup.
Ceci étant, le clavier est plus dur que les touche de vielle et je m'interroge sur un "pseudo clavier de vielle" à mettre dessus qui aurait un effet de levier et rendrait les touches moins dures.
- si je veux faire de l'embarqué (j'ai un PC fixe boiboite en tôle) il me va falloir trouver une carte son externe.

A suivre.

aroue utilisateur non connecté
Je triche un peu, en me répondant à moi-même.
La raison étant qu'à ma question initiale, très particulière, il est difficile de répondre : on y parle d'accès à la bibliothèque de fonctions ALSA avec un langage de programmation.
Ce langage que je connais à peine étant choisi parce que les exemples de code y sont abondants.
Donc si la programmation ALSA en C ne vous rebute pas, voici deux points de départ :
- D'abord un tutoriel en PDF, partiellement traduit en français : http://impala.utopia.free.fr/pd/patchs/papers/Linux_pd/linux/alsa-howto-dev.pdf
- Ensuite le code source d'un programme
http://alsamodular.sourceforge.net/midiroute.c
dont le commentaire est fait dans le document précédent. Ce code est copiable dans un éditeur et peut être compilé par :
$ gcc -Wall midiroute.c -o essai -lasound
Ce qui génère un exécutable "essai" que l'on peut appeler par ./essai plus un paramètre (je n'ai pas encore compris lequel).
Pour essayer de voir si le programme ouvrait des ports ALSA, j'ai lancé Jack et ouvert la fenêtre de connections (onglet ALSA).
Ensuite j'ai lancé
./essai 30:2 (au pif, il fallait ajouter un paramètre.
Et là, miracle : Jackd m'affiche 129:MIDI router à gauche et 129:MIDI router à droite
Ce n'est pas la gloire : je n'ai pas encore tout compris, mais j'ai au moins réussi l'ouverture de port.

A+ pour la suite

Samuel utilisateur non connecté Allemagne
Ah super nouvelle ça.

Y a possibilité de voir la tête de l'engin ?

aroue utilisateur non connecté
Citation :
Saut,

je n'y connais rien en code, donc je ne saurais pas t'aider, mais je trouve le projet super. Tu nous donnes des nouvelles dès que ça avance ?


C'est petit et pas cher : http://www.m-audio.fr/products/fr_fr/eKeys37.html

mysterious utilisateur non connecté France
Salut aroue biggrin
Merci pour les liens très intéressants, je vais pouvoir apprendre à utiliser la bibliothèque alsa. Je vais essayer de voir si je peux pas aider mrgreen

mysterious utilisateur non connecté France
Je suis en train d'essayer de faire un petit programme inutile avec la lib alsa qui permettrai d'envoyer un note on dans un port quand on appuierai sur une touche de son clavier (voir le fonctionnement de la chose)

aroue utilisateur non connecté
Citation :
Je suis en train d'essayer de faire un petit programme inutile avec la lib alsa qui permettrai d'envoyer un note on dans un port quand on appuierai sur une touche de son clavier (voir le fonctionnement de la chose)


Tu nous montrera ce que cela donne ?

Pour info, et pour ceux qui ne savent pas où chercher (ou qui n'ont pas le temps), voici l'adresse de la doc d'ALSA http://www.alsa-project.org/alsa-doc/alsa-lib/index.html

Comme je vis maintenant dans la France profonde, avec des aléas d'ADSL, je l'ai enregistrée en local (via wget).

mysterious utilisateur non connecté France
ok ok je suis en train d'essayer de le coder justement mrgreen

EDIT1 : c'est un bon début, j'ai déjà ma fenêtre qui s'ouvre, mon port qui se créé et s'affiche dans Jack biggrin

Matintenant, place à l'envoi de signaux midi

pianolivier utilisateur non connecté France
salut mysterious, tres sympa ton idee de vielle à roue numerique !

il y a quand meme un truc qui m'echappe :
tu veux utiliser quel synthetiseur ? le coder toi meme ?

aroue utilisateur non connecté
Citation :
salut mysterious, tres sympa ton idee de vielle à roue numerique !

Remarque de principe: l'idée de vielle numérique vient de aroue.

Citation :
il y a quand meme un truc qui m'echappe :
tu veux utiliser quel synthetiseur ? le coder toi meme ?

La "vielle" comprends deux parties fonctionnelles :

- Une partie mélodique (équivalente au clavier agissant sur les chanterelles de la vielle traditionnelle). Cette partie est réalisée par un clavier USB qui génère le son via Jackd et un synthétiseur comme Timidity, fluidsynth...

- Une partie rythmique qui dans la vielle traditionnelle est réalisée en utilisant une corde et "un chien" qui produisent une stridulation caractéristique de l'instrument.
Dans mon projet, une manivelle dont les accélérations du mouvement sont identifiés par un programme (en C par défaut) permet de générer des "notes de bruit" au format MIDI.
Comme je veux pouvoir utiliser un synthétiseur (comme Timidity, fluidsynth...) via Jackd, il faut que le programme qui "s'occupe de la manivelle et fabrique des notes MIDI" puisse être identifié par un port connectable via Jackd.

mysterious utilisateur non connecté France
@pianolivier : C'est gentil mais moi je fais juste le programme inutile pour apprendre un peu le fonctionnement du seq alsa (envoyer des signaux midi), pour ensuite pouvoir l'expliquer à notre ami. C'est aroue qui fera le plus gros du travail en fin de compte mrgreen

Au fait : j'arrive à envoyer un signal, mais le type d'évenement est inconnu (en fait, quand j'appuie sur la barre espace, un évenement inconnu apparaît dans qmidiroute, donc pas de signal midi pour l'instant, mais c'est un bon début (!)

EDIT: c'est bon j'ai réussi à envoyer une note dans mon clavier (ouf, c'est dur quand on apprend à utiliser une lib en étant petit codeur (!). Maintenant, reste à finir quelques trucs, bien commenter le code pour essayer de bien comprendre, et voilà (je ne sais pas si mon code est le meilleur, mais en tout cas, il envoie une note, c'est déjà ça (!)

printf("Je finis ça ;)");

pianolivier utilisateur non connecté France
oups, je crois que jme suis trompé dans le pseudos....confused

si je comprend bien le fonctionnement de la vielle a roue, il s'agit d'un rythme appliqué à une note non ?

et toi tu voudrai avoir deux synthetiseurs separés c'est ca ? un pour le clavier ce qui donne les notes, un pour la roue ce qui donne le rythme ?

d'un coté on aurait donc un lecteur d'échantillons, et de l'autre un synthetiseur capable de produire un rythme a tempo variable appliqué sur une note ?

j'ai bien compris ou je passe a coté de quelque chose ?

mysterious utilisateur non connecté France
Recoucou biggrin

ça y est, j'ai fini mon programme ! j'explique comment il fonctionne :

Il utilise la lib alsa pour la gestion du sequenceur midi, et la lib SDL pour l'affichage de la fenêtre et la gestion des contrôles,

Quand on lance le programme, les diverses initialisations de la SDL se font, et celles de alsa aussi, soit :

Ouverture du client,
Création d'un port,

Ensuite, avec la SDL, une jolie fenêtre avec une jolie image s'affiche. L'initialisation est donc terminée et le programme prêt à être testé (enfin c'est plutôt le code qui intéresse ici lol )

Il faut alors à ce momment là relier le port midi du client via l'application synthétiseur (ZynAddSubFX par ex), ou carrément vers un clavier externe, tout cela via Jack

Ensuite, il faut retourner sur la petite fenêtre imagée, et appuyer sur une des touches suivantes pour faire un son :

W, X, C, V, B, N

Ensuite, lorsqu'on a fini de faire mumuse, on clique sur la croix de l'application pour la fermer (logique me direz vous (!)

A ce momment là, le port est détruit, et le client ALSA se ferme (avec l'arrêt de la SDL)

Voilà donc pour le fonctionnement mrgreen

Maintenant, quelques petites chose :

Je ne suis qu'un codeur peu expérimenté, et mon code n'est peut-être pas des plus propres ou des meilleurs (en plus c'est ma première app avec la lib alsa)

Ensuite, pour les diverses fonctions que j'utilise, je recommande d'aller voir sa référence sur la doc alsa, pour avoir les informations nécessaires

Enfin, voici la commande de compilation :
gcc main.c midi.c -lasound -lSDL -o sdlseq #(ou nom de l'éxécutable)

et, une fois fini :
./sdlseq #(ou nom executable)


Voilà !!!

Voici le fichier contenant les sources :
ttp://www.mediafire.com/?vujcnp3aahdmjc4
(ça me fait bizarre de retourner sur mediafire, je n'y suis plus allé depuis 1 ans au moins lol )

bref, j'espère que ce petit programme sera utile wink

aroue utilisateur non connecté
Citation :
Recoucou biggrin

ça y est, j'ai fini mon programme ! j'explique comment il fonctionne :
...


Très intéressant :
- cela marche
- cela correspond à ma demande initiale : envoyer une "note midi" vers un synthétiseur que l'on connecte avec Jackd
- c'est documenté.
Le côté SDL m'intéresse moins.
Mais c'est un travail simple et réussi.
Bravo.
Je complèterai les commentaires demain.

mysterious utilisateur non connecté France
Hihi merci biggrin

mysterious utilisateur non connecté France
En re-regardant mon code je me rend compte que j'ai fais pleins d'erreurs qui sont bêtes, mais qui peuvent être assez grave
(J'ai par exemple déclaré les prototypes de fonctions, deux fois, ou encore mieux, j'ai mis une déclaration de variable dans la boucle principale... mrgreen )

EDIT : Voici le main.c normalement corrigé : http://pastebin.com/nnLc5GLw

aroue utilisateur non connecté
Citation :
EDIT : Voici le main.c normalement corrigé : http://pastebin.com/nnLc5GLw


Après re- lecture du code j'ai encore plus apprécié le fait qu'il soit documenté.
Il reste toutefois un point non éclairci. Pour aider à comprendre, d'abord quelques mots :
Dans la "vielle avec clavier MIDI", la "musique" est jouée par un synthétiseur tel que fluidsynth.
La partie rythmique résulte d'un programme d'analyse du mouvement d'une manivelle qui, bâti pourquoi pas sur la base de sdlseq, envoie le code midi d'un son de percussion.
Cela suppose qu'à un moment on explique au synthétiseur que l'on veut utiliser telle banque, tel instrument.
Mais comment faire ?
Je sais, je suis fainéant.

pianolivier utilisateur non connecté France
Citation :
La partie rythmique résulte d'un programme d'analyse du mouvement d'une manivelle qui, bâti pourquoi pas sur la base de sdlseq, envoie le code midi d'un son de percussion.

c'etait pour ca que je posait des questions plus haut, le concept d' envoyer le code midi d'un son m'échappe totalement

je vois deux solutions à vue de nez :
  • programmer un synthétiseur complet qui fera tout lui meme
  • utiliser un arpeggiateur ou un sequenceur (seq24 ?) pour créer le rythme voulu, gérer sa vitesse grace à une application à coder qui envoi des signaux de transport MIDI grace à la roue élécronique, puis programmer une autre application (mididings ?) qui transpose le rythme résultant sur les notes jouée sur le clavier, pour envoyer tout ce code MIDI sur le lecteur d'échantillon
    c'est pas simple mais ca doit être faisable...

aroue utilisateur non connecté
Pour essayer de m'expliquer mieux, j'ai fait un petit dessin de comment j'imagine la chose.
Il est ici :http://lerautal.lautre.net/journal/images-vielles/schema.jpg
- La manivelle entraîne un disque opaque percé de trous à espaces réguliers
- Une LED est placée de telle façon que sa lumière puisse passer par un trou quand il s'en trouve un en face.
- Un photocapteur génère de l'électricité quand il reçoit cette lumière
- Les impulsions électriques successives sont transmises via un des ports d'entrée du PC (USB, micro...)
- Un programme, à partir des temps successifs entre les "tops lumière" détermine si l'accélération momentanée (par rapport à un mouvement globalement régulier comme sur une vraie vielle) est significative et justifie l'émission d'un son de percussion
- Ce programme, via le port MIDI virtuel peut être connecté, via Jackd, à un synthétiseur tel que fluisynth ou Zinadd...

Page : 1/2  [Suivant]
1  2 
Afficher les articles :
Aller au forum :

Documentation [Afficher / Cacher]

Faire un don
[Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

allany, 10:35, lun. 12 mai 2025: Et pour la totale, l'éditorial ! [Lien]
olinuxx, 12:25, jeu. 08 mai 2025: [ANNONCE] Le live de LibraZiK-4 est de retour ! [Lien]
calixtus06, 08:02, lun. 05 mai 2025: Bonjour et bienvenue à jipe35 et Bachila :-)
calixtus06, 14:59, lun. 28 Apr 2025: Bonjour et bienvenue à jpl :-)
calixtus06, 12:57, mar. 22 Apr 2025: Bonjour et bienvenue à Ardii,sgio et Gilles13 :-)
allany, 08:30, sam. 12 Apr 2025: Celui-ci, d'éditoriel, il est bien réel ! [Lien]
calixtus06, 16:39, lun. 07 Apr 2025: Bonjour et bienvenue à Saanvis754 :-)
calixtus06, 08:37, lun. 07 Apr 2025: Bonjour et bienvenue à skamoss et à lecapitainecoeur :-)
allany, 17:27, mar. 01 Apr 2025: Il est sensationnel cet éditoriel ! [Lien]
calixtus06, 13:04, dim. 30 mars 2025: Bonjour et bienvenue à MarM et gor :-)
olinuxx, 15:45, mer. 26 mars 2025: [ANNONCE] LibraZiK a fini de déménager depuis TuxFamily vers Ouvaton : [Lien] . Grand merci à toutes ces personnes qui ont aidé !
calixtus06, 10:29, lun. 24 mars 2025: Bonjour et bienvenue à adhooge :-)