# Programmer les notes de musique



## boninmi (18 Décembre 2011)

Je veux essayer d'écrire, par exemple avec XCode 4.2, un petit logiciel me permettant d'accorder ma guitare. La version la plus basique pourrait être une fenêtre, un bouton (ça y est, ça je sais faire) et la production de la note LA (notation française), ou A (notation anglophone) dans le haut parleur du Mac. 

Ça devrait être faisable, non ? D'habitude, je cherche ce genre de chose, je trouve. Or je m'escrime depuis deux ou trois jours et je ne trouve aucun lien clair, aucun tutoriel accessible. Des tutoriels graphiques ou d'animation, à la tonne. Un petit tutoriel musical, rien.

Quelqu'un est-il capable de répondre à la question suivante: quelle bibliothèque (éventuellement C, ou Objective-C) faut-il utiliser, et quelle instruction écrire pour faire jouer au haut parleur du Mac, genre, do ré mi fa sol la si do ?


----------



## boninmi (23 Décembre 2011)

Eh ben, ça fait plaisir de voir comment les développeurs du forum se sont rués pour répondre à une question si bête . Bête, apparemment, pas tant que ça, comme je disais, autant il y a des tutoriels simples sur les objets graphiques (fenêtres, boutons, ...) et les interactions avec l'utilisateur, autant la programmation musicale est absente au niveau tutoriel et documentation simple. Après avoir beaucoup cherché, je vais (comme souvent ) répondre à mes propres questions . J'ai trouvé en C++ CFugue, qui s'installe en principe avec CMake. Mais pour l'instant je bloque sur cette installation. S'il y en a qui veulent une session de rattrapage sur ce sujet ... J'ai trouvé aussi des librairies en Java, qui elles, marchent, même si apparemment elle font un peu appel à des méthodes obsolètes ("deprecated API"). Je ne marque pas encore le sujet comme résolu, pour le cas où quelqu'un trouverait comment installer CFugue. 

Joyeux Noël en musique ! :love:


----------



## boninmi (27 Décembre 2011)

La compilation de CFugue est pour l'instant tout simplement impossible. gcc 4.6 sur Mac n'implémente pas pour l'instant tous les aspects de C++0x. 
(Remarque: XCode 4.2 n'en est qu'à gcc 4.2, soit C++98).


```
imac-de-michel-bonin:CMakeBuild bonin$ make
Scanning dependencies of target jdkmidi
[ 65%] Built target jdkmidi
Scanning dependencies of target MusicNoteLib
[ 67%] Building CXX object CMakeFiles/MusicNoteLib.dir/src/MusicNoteLib/MIDIRenderer.cpp.o
In file included from /Developer/MusicNote/include/MIDIRenderer.h:21:0,
                 from /Developer/MusicNote/src/MusicNoteLib/MIDIRenderer.cpp:3:
/Developer/MusicNote/include/AlsaDriver.h:27:29: error: field m_bgTaskResult has incomplete type
/Developer/MusicNote/include/AlsaDriver.h:79:3: error: thread in namespace std does not name a type
make[2]: *** [CMakeFiles/MusicNoteLib.dir/src/MusicNoteLib/MIDIRenderer.cpp.o] Error 1
make[1]: *** [CMakeFiles/MusicNoteLib.dir/all] Error 2
make: *** [all] Error 2
imac-de-michel-bonin:CMakeBuild bonin$
```


----------



## tatouille (28 Décembre 2011)

utilise macport tu auras une version de la std incluant le nouveau standard non finalisé,
ce que tu essayes de faire cela se nomme un tuner, oublie java e.g DSP


----------



## boninmi (28 Décembre 2011)

tatouille a dit:


> utilise macport tu auras une version de la std incluant le nouveau standard non finalisé,
> ce que tu essayes de faire cela se nomme un tuner, oublie java e.g DSP


- merci de ta réponse, ça ne se bouscule pas au portillon ... 
- on fait comment pour utiliser MacPorts et trouver la dite version de std ?
- concernant CFugue, je n'essaie pas de faire, mais d'utiliser ; ce que j'essayais de faire au départ et qui me paraissait archi simple, visiblement ne l'est pas
- oublier Java, pourquoi ? C'est le seul ensemble logiciel dont j'ai pu constater qu'il fonctionnait, sauf erreur de ma part, et je crois avoir cherché.


----------



## tatouille (29 Décembre 2011)

http://www.macports.org/install.php


```
sudo port install gcc47
g++ -std=c++0x -Wall main.cpp -o prog

attention certaines functions pthread  ne sont pas supportées (depend de la version de macos) 
mais c'est assez facile d'implementer des placeholders en gros tu testes le type de mutex et fait une atomic op 
sur le lock et tu reassyes sinon tu retournes timeout et si timeout est trop grand il est infinite donc 
tu appels juste pthread_mutex_lock

la famille des timed 

	posix_trace_timedgetnext_event()
	pthread_mutex_timedlock()
	pthread_rwlock_timedrdlock()
	pthread_rwlock_timedwrlock()
	sem_timedwait()

	#include <unistd.h>
	...
	#if defined(_POSIX_TIMEOUTS) && (_POSIX_TIMEOUTS - 200112L) >= 0L
	/* POSIX Timeouts are supported - option group [TMO] */
	#if defined(_POSIX_THREADS) && (_POSIX_THREADS - 200112L) >= 0L
	/* POSIX threads are supported - option group [THR] */

	/* OK to use the functions

	#else
                inline posix_trace_getnext_event(...) { return 0; }
                inline pthread_mutex_timedlock(...) { return pthread_mutex_lock(...) ; }
                inline pthread_rwlock_timedrdlock(...) { return pthread_rwlock_rdlock(); }
                inline pthread_rwlock_timedwrlock(...) { return pthread_rwlock_wrlock(); }
                inline sem_timedwait(...) { return pthread_rwlock_wrlock(); }
	/* Not OK to use the functions

	#endif
	#endif
```


----------



## boninmi (29 Décembre 2011)

tatouille a dit:


> http://www.macports.org/install.php



Oui, j'avais trouvé 
Je ne sais pas si ça résoudra mon problème, mais j'ai appris à installer un compilateur à partir des sources ... 
Ce blog m'a aidé:

http://blog.myprod.net/2008/11/18/macports-macosx/

ainsi que ce tutoriel, qui parle de gcc 4.6.2, mais qui est valable aussi pour gcc 4.7 et les bibliothèques à installer avant, en versions plus récentes (gmp, mpc, mpfr):

http://solarianprogrammer.com/2011/09/20/compiling-gcc-4-6-1-on-mac-osx-lion/


----------



## tatouille (1 Janvier 2012)

macport compile depuis la src et applique certains patches partagés par apple qui ne sont pas toujours inclus bien que ceci soient accessibles sur le repo de gcc 

sudo port install gcc47


----------



## boninmi (1 Janvier 2012)

tatouille a dit:


> macport compile depuis la src et applique certains patches partagés par apple qui ne sont pas toujours inclus bien que ceci soient accessibles sur le repo de gcc
> 
> sudo port install gcc47



C'est ce que j'avais fait ... Mais je n'avais pas trouvé les binaires  Ils ont l'air d'être effectivement dans /opt/local .
J'ai dû faire du travail de singe.  
Mais j'ai passé une étape supplémentaire dans la compilation. La std de 4.7 a l'air de gérer les threads directement. Il me reste à résoudre le linkage.


----------



## boninmi (21 Janvier 2012)

- J'ai réussi à compiler CFugue grace à l'aide de  son concepteur GopalaKrishna Palem, en utilisant la version beta de  gcc 4.7 disponible sur macports. Mais cette interface midi recherche une  sortie midi, et je n'ai pas de périphérique midi sous la main.  Configuration audio midi ne semble pas permettre de définir une sortie  midi virtuelle qui serait le synthétiseur implémenté dans le Mac

- J'ai fouillé plus avant la doc développeur Apple. Ce qui paraît le plus proche de ce que je cherche serait ceci  . Ce n'est néanmoins pas très simple. Mais ça produit un son dans le  haut parleur (télécharger, ouvrir et compiler le projet XCode) ... Je  reste un peu sur ma faim, et espère trouver un jour un tutoriel simple  sur ce thème. 

- Merci à *tatouille* pour son aide  . Je suis cependant surpris de ne pas avoir trouvé davantage de compétences sur ce type de sujet.


----------



## tatouille (25 Janvier 2012)

boninmi a dit:


> - J'ai réussi à compiler CFugue grace à l'aide de  son concepteur GopalaKrishna Palem, en utilisant la version beta de  gcc 4.7 disponible sur macports. Mais cette interface midi recherche une  sortie midi, et je n'ai pas de périphérique midi sous la main.  Configuration audio midi ne semble pas permettre de définir une sortie  midi virtuelle qui serait le synthétiseur implémenté dans le Mac
> 
> - J'ai fouillé plus avant la doc développeur Apple. Ce qui paraît le plus proche de ce que je cherche serait ceci  . Ce n'est néanmoins pas très simple. Mais ça produit un son dans le  haut parleur (télécharger, ouvrir et compiler le projet XCode) ... Je  reste un peu sur ma faim, et espère trouver un jour un tutoriel simple  sur ce thème.
> 
> - Merci à *tatouille* pour son aide  . Je suis cependant surpris de ne pas avoir trouvé davantage de compétences sur ce type de sujet.



le monde de l'audio est un tout petit groupe, fait tes trucs et tu découvriras les vraies questions ce qui te guideras vers ce petit monde, par exemple a la conf avid lundi a Anaheim il n'y avait que 10 entreprises, bon c'est vraie c'est juste après le NAMM tout le monde a les oreilles en bourdon.

il y a aussi d'excellent ouvrages concernant ce qu'est le midi, ce qu'est un DSP, si tu veux faire des interfaces midi je te conseille d'avoir un host comme protools et un clavier puis tu fais un plug-in et tu t'amuses a synchroniser les contrôle (commencer par simple après tu pourras t'attaquer a la synchronisation du signal)

comme je le dis souvent, tous les gens que je connais dans ce monde on fait beaucoup d'autre choses avant et sont venus a l'audio car ils sont aussi musiciens et aiment la musique.


----------

