Programmer les notes de musique

boninmi

Spécialiste en idées générales
Club iGen
4 Avril 2008
5 889
3 342
Dromadaire, ex Ardéchois
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 ?
 
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 :D. 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 :rolleyes:) répondre à mes propres questions :zen:. 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: :up:
 
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).

Bloc de code:
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$

:rolleyes:
 
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
 
Dernière édition:
  • J’aime
Réactions: boninmi
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é.
 
http://www.macports.org/install.php

Bloc de code:
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
 
Dernière édition:

Oui, j'avais trouvé :D
Je ne sais pas si ça résoudra mon problème, mais j'ai appris à installer un compilateur à partir des sources ... :cool:
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/
 
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 :p

sudo port install gcc47
 
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 :p

sudo port install gcc47

C'est ce que j'avais fait ... Mais je n'avais pas trouvé les binaires :D Ils ont l'air d'être effectivement dans /opt/local .
J'ai dû faire du travail de singe. :rolleyes:
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. :zen:
 
- 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. :zen:
 
- 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. :zen:

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.
 
Dernière édition: