Il y l'approche "MIDI" qui est abordée à coté, et il y a l'approche "improvisation" .....
il y aura peut-etre un moyen de rapprocher les 2 visions, on verra plus tard . En tous cas la démarche programmation est très pédagogique.
"tuxophone" se veut un clavier musical, capable aussi de jouer en automatique, à partir d'un fichier "partition'
La musique est une expression artistique, pleine de subtilités, aux antipodes de la machine ....
Pourtant, j'ai toujours cherché à consilier l'inconsiliable, construire un instrument de musique "Electronique" ,
et après diverses tentatives - Orgue électronique, Convertisseur Numérique/analogique, Oscillateurs bizarres, amplis, ..
j'ai un ordinateur sous la main, avec un génial système d'exploitation, on va voir ce qu'on peut faire !!!!
Ma carte son: lspci-> "Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 07)"
A lire et jouer Norme-de-saisie.txt gammes.mp3
Exemples de partitions tartine-de-beurre.tux Panthere-rose.tux
Resultats avec ma carte son : tartine-de-beurre.mp3 Panthere-rose.mp3
Sur la page d'accueil .... : frere-Jacques.tux Frère Jacques.mp3
Note: pour convertir en mp3, j'utilise la sortie son branchée sur un autre ordinateur , et le logiciel Audacity ( Il est super ce programme, merci aux auteurs) Si je fais l'enregistrement sur la même machine en bouclant la sortie sur l'entrée , il y a des petits craquements inexpliqués qui apparaissent, sans doute un probleme de partage au niveau de la carte son.
Question: pourquoi ne pas utiliser la norme MIDI qui existe depuis longtemps, et est mille fois mieux ... Je veux pouvoir saisir les partitions en format texte. C'est le but initial de l'essai et la musique semble facile à saisir et à maintenir, à condition de bien noter les numéros de mesure sur la partition. On peut imaginer un outil de conversion vers ou depuis midi. Comme éditeur, j'utilise "gedit" .
Question: Pourquoi avoir en mode manuel une correspondance clavier/note si bizarre ... Je me suis inspiré du clavier de certains accordéons qui ont les touches très rapprochées, disposition de clavier qui permet de jouer très vite.
Suite en chantier: Transposition, En mode manuel écriture de ce qui est joué pour faire des copier/coller vers un fichier, nouveaux sons,gestion des signes de reprise, coda etc ... pour ne pas avoir à duplliquer inutilement des parties identiques... comme les vraies partitions.
Sentiments de l'auteur: C'est pas fini !
Le résultat varie selon les cartes son ..pas encore très au point . Les cartes son hda/Intel par exemple ne supportent pas le partage des /dev/dsp,du moins je n'ai pas réussi à les utiliser ainsi! Il faut ajouter dans ce cas une couche logiciel "partage du dsp" , qui ferait le mixage des voix . On verra plus tard . Cela a certainement déjà été fait.
Un problème non encore résolu: Modifier le comportement du clavier, pour avoir un son dont la puissance dépende de la frappe .. toute idée est bienvenue ...
D'abord je vais regarder comment fonctionnent les outils "officiels" en MAO , en particulier les logiciels qui utilent un fichier texte en entrée: Je pense à Lilypond qui a une approche très voisine pour la notation musicale. (par contre abc est trop dilué et pas assez compressé )
La prochaine version devra donc etre compatible lilypond ... il y a un peut de boulot !
L'idée serait donc de continuer dans un langage compatible avec Lilypond, ce qui permettra de passer d'un programme à l'autre , et de convertir en format MIDI , lilypond sait le faire ...
Pour la suite de la découverte de la programmation sonore sinon musicale, voici le code précédent modifié pour utiliser l'API PCM d'Alsa, le reste du programme restant identique.
En pratique cela revient à remplacer les "write" de la V2 par des "snd_pcm_writei" , l'environnement étant un plus plus élaboré. Pas de probleme particulier, sauf la comprehension du comptage des buffers, j'en envoie un à la fois vers la carte ... ce qui fait 4 octets ...si je ne veux pas avoir de délai entre la pression de la touche et le son.
Attention au niveau de la compilation, il faut ajouter -lasound en parametre gcc.