Nous avançons par bonds sur le plug-in Flash. Parfois, nous bloquons sur un problème qui nous prends trois ou quatre heures, puis la solution vient et des pans entiers de code que nous avions écrit se mettent à fonctionner. Alors, voici les avancées de cette journée : Premier essai d'un jeu d'images pour représenter les notes, avec couche alpha de transparence. Utilisation de ces mêmes images pour les boutons. Gestion de l'activité des boutons selon le mode d'édition choisi. Premiers essais de récupération de paramètres depuis JavaScript et envoi des paramètres à JavaScript lors de la demande de recherche. La note à poser est représentée sur la portée lorsque l'on bouge la souris. Affichage des images dans une couleur donnée (pour le curseur note) Le plug-in flash a été testé sur Windows (nous développons sur Mac) et fonctionne de la même façon.
Nous en sommes là :
Certaines fonctionnalités sont opérationnelles sous l'interface Flex, mais ne marchent plus si on transfère le SWF dans un autre dossier. C'est très étrange, il nous faut comprendre cela.
Gloria ! Nous avons réussi (au bout d'une journée) à enfin trouver comment afficher des images bitmap en AS3 (ActionScript 3). Si cela peut intéresser quelqu'un... Soit un fichier PNG "vuvu.png", on déclare : Code:
Son nom (ID) devient "vuvu". On réfère à l'objet via son nom : vuvu. Pour l'afficher à une position (x,y) donnée : Code:
private function getBitMapData(img:Image):BitmapData { var dp:DisplayObject = img.content; var bmp:BitmapData = new BitmapData(dp.width, dp.height, true, 0x00000000); bmp.draw(dp); return bmp; } protected function AffichePict(This:DisplayObjectContainer,image:Image,x:Number,y:Number,co lor:Number):int { var myBitmap:Bitmap; var mySprite:Sprite = new Sprite();
Et on invoque: AffichePict(parent,vuvu,10,10,couleur); Pour l'instant la couleur n'est pas gérée mais cela doit être possible. Nous en sommes là :
Nous allons maintenant dessiner les différents objets sous forme de PNG avec couche alpha et cela devrait rouler... Nous gardons à l'esprit que la taille du SWF obtenu est très importante : il sera chargé sur notre serveur à chaque requête. Je ne sais pas si les navigateurs gèrent un cache pour ce genre de fichier.
Quand à Vuvu, notre hyménoptère préféré, que voici :
Il (elle plutôt) a construit 7 cellules de terre ces derniers jours, et en a presque fini quatre de mieux aujourd'hui.
Las ! Malgré que notre police soit correctement embarqué, impossible de l'utiliser. Dès que le champ texte est marqué comme acceptant ce genre de police, l'affichage est vide. Nous avons épluché les docs Adobe et apparemment c'est un problème connu qui n'est pas prêt d'être corrigé. Nous avons alors tenté d'afficher les symboles via des fichiers images PNG avec un fond transparent. Déconfiture. Nous n'avons pas trouvé de moyen de charger un fichier image et de l'afficher plusieurs fois à des positions différentes. Apparemment un concept nous échappe. Alors, un peu fatigués, nous avons progressé sur l'interface. Les boutons de commande ont été définis, avec de vrais morceaux d' icône dedans. Nous gérons les click sur quelques un de ceux-ci et cela fonctionne plutôt bien. Nous en sommes là :
D'après les docs Adobe, il serait possible de communiquer avec la page Web via JavaScript et de jouer de la musique avec un système de buffering temps réél. C'est une bonne nouvelle mais nous ne l'avons pas encore expérimenté... Pas de découragement, cela ne fait que deux jours que nous travaillons sur ActionScript/Flex/Spark/Flash. Nous n'avons d'ailleurs toujours pas compris où commence l'un et finit l'autre. Et pour l'anecdote, c'est vuvuzela toute la journée pour moi : une guêpe solitaire a entrepris de construire son "nid" dans la feuillure de ma fenêtre, à moins de deux mètres de ma tête, et elle vronzine du lever au coucher du soleil. Je ne peux plus fermer la fenêtre.
Nous explorons donc Flash et plus précisément Flex pour voir s'il est possible de réécrire la partie du plug-in qui gère la saisie de la recherche Kooplet. L'environnement de développement Flash Builder est basé sur Eclipse, donc c'est assez mou en réactivité mais plutôt solide. Les fichiers sources sont en XML, nous ne sommes pas dépaysés. La syntaxe est très très proche du C++, nous avançons en territoire connu. Première bonne surprise, le déboggeur est opérationnel. Rappelons au passage qu'Apple n'a jamais été capable de finaliser un déboggueur pour son propre langage, AppleScript... Deuxième surprise, interface et documentation technique sont en Français. Et la traduction est excellente. Petit bémol, il y a eut plusieurs versions d'ActionScript (le langage, nous en sommes à la v3) et les mécanismes ont violemment changés dans le temps, ce qui fait que pas mal de codes d'exemples sont erronés. Le même problème se retrouve sur l'Internet.
Certains mécanismes nous sont absolument indispensables : pouvoir afficher ce que l'on veut dans une aire, récupérer en temps réel la position de la souris, être informé d'un click souris et enfin pouvoir être invoqué régulièrement via un "Idle". Il n'y a pas d'élément d'interface "vide", alors nous rusons en définissant une image qui sert de fond et sur laquelle on peut faire des tracés. Des méthodes sont données pour demander la position de la souris et recevoir les évènements de click. Bien. Par contre pas de Idle, quelques heures à potasser la doc et on trouve que l'on peut programmer un timer (setInterval) qui va nous invoquer à intervalle régulier. Les 4 points de base sont validés. Nous en sommes là :
Maintenant il nous faut "embarquer" notre police STOCCATA dans le projet et réussir à tracer des caractères musicaux. Le premier point a été très ardu, mais nous pensons y être arrivé. Pour les développeurs que cela intéresse, il faut placer en début de la section <![CDATA[ [Embed(source='../STOCCATA.TTF', fontName = 'stoccata', mimeType="application/x-font")] private static var stoccata:Class;
Alors que nous poursuivons la mise en place de la base de données de Kooplet, nous avons commencé à examiner les système de développement pour Flash.
Le but final serait de réécrire en Flash le module de recherche de séquence musicale, afin de permettre à un maximum de personnes de pouvoir utiliser le moteur, sans avoir besoin d'installer notre plug-in.
Aujourd'hui, compilation test et publication de la dernière version du Player et du Plug-in. Quelques améliorations mais surtout une mise à niveau vis à vis de Melody et d'Harmony. Quelques jours de patience et nous allons générer le CD pour une publication en P2P. Depuis quelques années nous proposions en téléchargement sur notre site, la base de son numérique SE : la GMSEBase. Maintenant, et grâce à l'augmentation de notre bande passante, elle est intégrée par défaut dans tous nos produits. Les pages correspondantes ont donc été supprimées.
Le gestionnaire de base de données est maintenant entièrement réécrit. Les recherches rapides dans la base ont été inclues dans le gestionnaire, accélérant celles-ci d'un facteur de 10 à 100. Ce module intègre pour cela des calculs de hash-tables et divers index, gérés automatiquement, ce qui simplifie grandement le programme spécifique à Kooplet. Par contre, cela demande nettement plus de traitements lors du stockage des musiques dans la base.
Nous avons effectué quelques tests sur une base réduite à quelques milliers de fichiers, et les résultats semblent concluants.
Il faut maintenant créer ces index pour les 186000 fichiers déjà traités. Les premiers essais nous donnent à penser que ce traitement devrait prendre plus de 24h non stop. Nous essayons d'accélérer les calculs au maximum avant de lancer cela, histoire de ne pas monopoliser trop longtemps l'ordinateur sur lequel notre version locale de Kooplet est hébergée.
Myrscript : bridage du nombre de bits par sample lors de l'export MP3 puisque notre librairie ne le gère pas. Melody Player : possibilité de définir un délai en secondes entre chaque musique de la liste. Correction retaillage mode page.
Ayant reçu très peu de retours sur la nouyelle version d'Harmony/Melody, nous avons pu nous remettre à travailler sur Kooplet.
Au programme: refonte totale des bases de données et des index rapides pour la recherche. Nous créons un module additionnel de gestion de base de données qui pourra ensuite nous servir dans tous les scripts qui en auront besoin. C'est du Perl "pur", donc, même si c'est probablement un peu moins performant qu'une solution toute faite, la portabilité est maximale, et nous contrôlerons l'intégralité de la chaîne logicielle, ce qui est utile en cas de bug ou de corruption de fichier.
Lorsque ce sera opérationnel, la recherche devrait être grandement accélérée.
Aujourd'hui finalisation et publication d'Harmony Assistant 9.5.1e et Melody Assistant 7.5.1e. Avec un peu de chance ce sera la version définitive et on pourra attaquer autre chose...
Un crash a été corrigé dans le changement de volume de la table de mixage réduite Nous en avons profité pour corriger d'autres petits problèmes liés à la table de mixage.
Egalement:
- Correction de l'import CMF
- Correction dans l'édition individuelle des notes
Enfin, nous rencontrons un problème très bas niveau : nous avons considéré, depuis quelques versions, que tous les PCs étaient dotés de processeurs incluant le jeu d'instructions MMX. MMX est une extension destiné originellement au multimédia, et qui permet de la manipulation rapide de données en masse. Nous l'avons donc utilisé pour des opérations de mouvement de mémoire. Il semblerait que certains utilisateurs ne possèdent pas de processeur avec un jeu d'instruction compatible, cela ayant pour résultat un crash au démarrage de nos applications (pas seulement Harmony/Melody). Nous avons donc modifié notre code afin de le rendre plus propre, avec un test de la fonctionnalité avant de l'utiliser. Lorsque le processeur n'est pas compatible MMX, l'ancien code est utilisé, plus lent.
Malheureusement, nous n'avons pas pu trouver pour l'instant de moyen de tester cela, toutes nos machines étant compatibles MMX. Il faudra donc trouver un utilisateur rencontrant le problème et suffisamment aguerri pour tester une version beta privée.
Nous avons, lors du changement de compilateur, rencontré des problèmes de mauvais fonctionnement interne des routines de compression de données. Problème d'abord dans la gestion du format MusicXML compacté (Mxl), rapidement corrigé, mais cela a alors déterioré le compactage des données lors de la gestion des aspects personnalisés de l'espace MUSL. Nous l'avons également corrigé, et après un cafouillage dans la sortie de la nouvelle version, tout semblait fonctionner à nouveau.
Mais il semble que la compression/décompression était également utilisée à deux autres endroits: - Le chargement de l'ancien format propriétaire de fichiers MusicXML compressé (.xmz) - Les fonctions PackFile/UnpackFile de MyrScript. Là impossible de savoir avec certitude combien de scripts les utilisent.
Ce sera donc corrigé dans la prochaine version d'Harmony, probablement en même temps que la sortie des nouvelles versions du player et du plug-in...
Edition de la note : problème de recalcul de sens de la tige. Sur Mac, possible erreur dans l'extraction des listes de fichier. Décalage d'items dans certaines langues dans la boite d'aperçu avant impression. La nouvelle version d'XCode propose une fonction assez sympathique d'analyse de source, nous sommes en train de l'utiliser pour localiser du code inutile ou d'éventuelles erreurs.
Quelques corrections dans MyrScript, en particulier Symbol.Scale qui ne pouvait descendre en dessous de la valeur un. Ajustements de l'import MusicXML. Corrections dans le mixeur.
Au début on se dit, "Mais c'est quoi ce truc ?", et on se laisse ensuite porter par la magie et l'originalité du concept. Mince, ce n'est pas tous les jours que l'on voit Stephen Hawking dans un clip vidéo... http://www.symphonyofscience.com/
Il restait quelques problèmes assez important dans les archives postées hier : problème de décompression des images du MUSL, duplication d'un sous-dossier dans le dossier des scripts, etc, nous avons aussitôt publié un correctif. Nous espérons que cette version n'a pas de problème majeur caché. Il faut dire que le nombre de fonctionnalités et d'interactions entre elles est astronomique. Nous testons au maximum, mais nous ne pouvons tout vérifier. Heureusement qu'il y a des utilisateurs perspicaces pour nous aider... La prochaine étape va être de réanimer le projet Kooplet en stand-by depuis quelques mois. Allez, une petite vidéo marrante sur les Accords Magiques pour passer la soirée :
Aujourd'hui test et publication de la version 9.5.1 d'Harmony et 7.5.1 de Melody. Juste après, Grorom nous signale un problème d'affichage avec cette nouvelle version. L'archive est désactivée temporairement, une correction rapide appliquée et nous sommes en train de publier la version 9.5.1c ...
- Une erreur de structure de fichier dans les définitions par l'utilisateur de tablatures pour harmonica empêchait la lecture d'anciens fichiers. Le problème a été corrigé, et une compatibilité rétablie entre les versions.
- La définition d'harmonica sans aucun trou (aussi appelé "bout de bois" ) ne fait plus planter l'affichage des tablatures
- Accélération de l'affichage des notes liées sur plusieurs mesures, du calcul de positionnement de ces notes en mode gravure, et de l'affichage des liés en général.
- Correction du script d'import NoteWorthy
- Recalage du marquage de la note en édition de note sur les portées avec parole.
Aujourd'hui, travail sur le format ABC. Le problème de l'ABC est qu'il a été abandonné par son concepteur et a commencé à diverger. Cependant depuis quelques années, à défaut d'un consensus clair, des docs plus précises ont été rédigées sur ce qui est standard, moins standard et carrément exotique.
Import ABC : Correction de la gestion des listes de parts. Import et export ABC : Traitement des tonalités complexes Import et export ABC : Traitement de l'ornement mordant supérieur
Amélioration de l'édition des accords dans la grille d'accord. Les accords imposés dans la grille d'accord ne sont plus recalculés lors du chargement, seul le nom de la note est éventuellement adapté en fonction de la notation latine/américaine. Le sujet du 24 ème Concours a été arrêté. Il a été écrit et est en cours de traduction. Publication très bientôt. Ce sera certainement le plus difficile que nous ayons jamais proposé mais nous avons confiance dans le talent des participants.
Alors que le concours 23 vient d'être terminé, et que les morceaux sont envoyés au membres du jury, nous réfléchissons au sujet du 24ème.
Nous préférons de manière générale imposer une contrainte claire, qui permet de savoir immédiatement si le morceau a bien été composé pour l'occasion. Cela évite ensuite, lors de l'écoute, de se demander "en quoi ce morceau correspond-il au sujet ?"
Ainsi, pour ce prochain concours, nous allons certainement fournir une portée de basse, écrite sur environ 90 mesures (environ 3 mn).
Cette portée devrait demeurer telle quelle (et être jouée et audible) dans le morceau soumis par le participant. Aucune mesure ne pourrait être ajoutée ou retirée, ce qui donnerait des morceaux de durées sensiblement équivalentes.
Par contre, il serait possible de transposer le morceau, de changer l'instrument de basse, d'y poser des effets, et d'ajouter à la partition autant de portées supplémentaires que désiré. Il serait également possible de modifier le tempo dans des bornes clairement annoncées par le règlement. La grille d'accord d'origine serait également fournie à titre indicatif pour aider les compositeurs.
Le style serait libre, bien que la ligne de basse soit plutôt moderne, mais cela pourrait justement constituer un "challenge" intéressant.
Aujourd'hui, finalisation des problèmes pouvant se rencontrer entre l'ajout de portées (ou la suppression) les groupes et les vues. Cela devrait corriger pas mal de choses. 33 musiques sont en lice pour le 23ème Concours, 1h44 de musique, le sujet était assez strict et semble avoir été plutôt très bien respecté. Rappelons que certaines de ces oeuvres vont être interprétées par une vrai chorale, le jury va devoir faire entrer en ligne de compte la jouabilité. Plusieurs membres à vie du Jury, ont choisit de participer en temps que compositeur, ils ne pourrons donc par voter cette fois ci. Bien entendu, la chorale aura également son mot à dire...