Oui, vous avez bien lu, vous ne rêvez pas. Après plusieurs années d'hésitation à user nos semelles à force de trainer des pieds, nous nous sommes décidés à étudier la possibilité de gérer les plug-ins VST dans Harmony Assistant. Pour rappel, ces plug-ins permettent d'ajouter des sons ou des effets sonores à des applications d'audionumérique. Réfrénez cependant vos ardeurs. Avant de sauter de joie, sachez qu'il faudra encore plusieurs semaines (mois?) avant que vous ne puissiez à nouveau toucher terre. Nous en sommes au tout, tout premier stade, celui de l'évaluation technique. Avant une éventuelle intégration dans le programme, il y aura de nombreuses autres évaluations, des tests, des bilans et des discussions. En gros, attendez-vous à une saga auprès de laquelle Game of Thrones fait figure de simple tweet. Nous commencerons donc par la question d'origine : "qu'est-ce qui nous a retenu aussi longtemps ?" C'est une excellente question et nous nous remercions de nous l'avoir posée. Appelez ça de l'expérience, du pessimisme ou même de la paranoïa, mais nous hésitons toujours à utiliser du code que nous n'avons pas écrit nous-même, car cela complique énormément la maintenance, qui est une partie majeure de notre travail. Trois exemples de code externe que nous utilisons : 1- Les fonctions du système d'exploitation : nous les utilisons aussi peu que possible (d'où ACAM), mais nous en avons besoin, au moins pour les fonctions de base. Nous devons prendre en compte que nos utilisateurs ont parfois de vieilles versions du système. Nous sommes donc toujours 3 ou 4 versions majeures en retard par rapport à l'actualité. Un système, ce sont des centaines de millions d'utilisateurs, des millions d'applications qui tournent tous les jours. Il y a donc de bonnes chance pour que ça fonctionne bien, et nous possédons nous-même le système, que nous pouvons donc tester. Malgré cela, le rétropédalage que nous a imposé Linux, et dans une moindre mesure les ennuis causés par le développement sous MacOS nous prouvent qu'être prisonnier des accès au système constitue toujours un risque. 2- Les pilotes d'impression : Nos applications doivent pouvoir imprimer. Ces impressions passent par des pilotes souvent écrits par le fabricant de matériel, en suivant les préconisations du système d'exploitation. Ces pilotes sont testés par des milliers d'utilisateurs, sur des milliers de programmes différents. On commence à voir apparaître des problèmes dans les pilotes, qui ne sont révélés que dans certains cas rares. Si votre application a le malheur de ne pas utiliser le pilote exactement de la même façon que Word ou OpenOffice, vous prenez le risque que ce cas n'ait jamais été testé par le fabricant du pilote, et que ça plante. Et là, il est très difficile de corriger le problème sans acheter un exemplaire de l'imprimante 3- Les VST (on y arrive) : Chaque VST (il y en a plusieurs milliers de différents) a été testé par des centaines, au mieux des milliers d'utilisateur, sur tout au plus quelques dizaines d'applications hôtes. Il y a donc de très grandes chances que tous les cas de figure n'aient pas été testés, et que les particularités de votre application engendrent des crashs ou des dysfonctionnements dans certains plugins. Résoudre ces problèmes s'avèrera alors mission impossible, sauf posséder un exemplaire de chaque plugin sur chacun des systèmes. Ensuite, les VST sont une technologie propriétaire appartenant à Steinberg, concepteur de logiciels de musique. Cette technologie ne nécessite pas de payer des droits d'auteur à Steinberg, mais n'est pas Open Source, et n'est pas libre d'utilisation (d'ailleurs a-t-on seulement le droit d'en utiliser le logo dans ce blog ?). L'emploi du kit de développement demande de se déclarer auprès du propriétaire de la technologie. Ensuite, pour toute application hôte VST (qui permet d'utiliser n'importe quel plug-in VST), on doit demander une autorisation à Steinberg, qui a priori la délivre. "Et s'ils ne la délivrent pas ?", demande le pessimiste. "Bah, il ne faut pas s'inquiéter, pourquoi diable ne voudrait-ils pas que leur technologie soit utilisée par un éditeur de programmes concurrents des leurs ?" lui répond l'optimiste béat. Un risque non négligeable est de sous-estimer le travail à fournir, par une analyse erronnée ou incomplète. Nous envisageons les VSTi comme des alternatives aux sons numériques standard, et les effets VST comme des compléments aux processeurs d'effets numériques. Dans notre esprit, on imagine donc comment cela pourrait d'intégrer au programme. Mais en sommes-nous certains? Qui nous dit qu'une fois que ce sera en place, nous n'aurons pas droit par exemple à "Et comment fait-on pour ouvrir l'interface du VST pendant que la musique se joue ? Il est *évident* qu'il faut pouvoir modifier tous les paramètres en temps réel, et que *bien entendu* ces modifications en temps réel soient sauvegardées avec la partition". Ce n'est un exemple, bien sûr (si on savait ce qu'attendent exactement tous les utilisateurs, on le mettrait en place - ou pas - dès le départ) Enfin, l'évolution. À partir du moment où on intègre la prise en compte des plugins VST dans Harmony Assistant (soit dans sa version standard, soit dans une version spéciale, à déterminer), nous nous engageons à assurer la pérennité de cette fonctionnalité dans les versions futures de notre programme. Nous voila donc liés aux évolutions décidées unilatéralement par le propriétaire de la technologie. S'ils décident de tout modifier, nous devrons tout modifier en conséquence. S'ils décident que, pour des raisons de sécurité, on doit utiliser une signature électronique, nous achèterons une signature électronique. S'ils décident que la version 4 sera réservée à leurs propres applications et à celles qui leur paient une grosse redevance, eh bien... on se sera fait avoir. Tout cela, c'est ce qui nous a retenu jusqu'ici. Mais devant l'insistance et la persévérance de certains utilisateurs motivés, nous avons tout de même décidé de sauter le pas et d'essayer, ce qui ne veut pas dire que le projet aboutira nécessairement. Les résultats détaillés de nos essais seront décrits ici au fur et à mesure. |
|
|
by Olivier Guillion | | |
| |
|
Nous avons mis en place les taux d'échantillonnage élevés (48 et 96 kHz) dans les pistes numériques. Etant donné que ce taux est indépendant de celui choisi pour la restitution sonore, il va probablement falloir soit une indication chiffrée, soit une couleur différente de représentation des données pour que l'utilisateur sache en quelle qualité est chaque piste. Ce travail a également mis en lumière une divergence dans le rendu de certains processeurs d'effets à tous les taux d'échantillonnage différents de 44kHz (y compris 11 et 22 kHz). Ils ont été rendus conforme. Outre cela, nous avons corrigé : - un changement de sens de tige intempestif de la dernière note d'un groupe en accroche spéciale, lorsqu'on pose une note juste après - Sur le clavier virtuel, lorsque la musique se jouait, les appoggiatures étaient représentées sur la mauvaise touche. |
|
|
by Olivier Guillion | | | |
|
Nous savons que certains utilisateurs désireraient que nous nous attachions exclusivement au rendu graphique des partitions, et délaissions le rendu sonore, mais il faut bien comprendre que le logiciel est un tout, et que chacun doit pouvoir y trouver son compte. Ainsi, la prochaine version sera plus particulièrement tournée vers l'amélioration de la qualité audio. Outre les instruments à cordes virtuels, nous venons d'implémenter les fréquences d'échantillonnage (qualité de restitution) au-delà de 44 kHz, à respectivement 48 et 96 kHz. Les exports numériques (fichiers WAV) prennent également en compte ces nouvelles f'réquences. Seules manquent encore les pistes numériques, qui devraient pouvoir être enregistrées, stockées et restituées en utilisant ces nouveaux paramètres. Deux autres projets d'amélioration sont également en cours, nous aurons l'occasion d'en parler ici dès que nous aurons avancé dans notre pré-analyse. |
|
|
by Olivier Guillion | | |
| |
|
À la demande générale de Cri-Cri dans les commentaires de ce blog, nous avons amélioré le réglage de l'affichage du tuplet pour permettre à l'utilisateur de choisir la tension de la courbe. Voila ce que ça donne : Tension 0 Tension 50 Tension 100 Tension 50 et décalage du chiffre de -7 Ce paramètre a également été géré dans la boîte d'aspect général de la sélection, la sauvegarde et le chargement de fichier (pour les prochaines versions du programme) et dans MyrScript. |
|
|
by Olivier Guillion | | |
| |
|
Dans le cadre du développement d'Acam-Winter, nous cherchons à minimiser les bibliothèques nécessaires au fonctionnement du programme. Dans nos programmes ainsi que dans ACAM lui-même, nous avons besoin de visualiser (et parfois d'écrire) des fichiers graphiques dans les formats les plus courants: BMP, GIF, JPG, PNG et TIFF Afin de ne pas être tributaires du système, nous avons décidé d'incorporer directement dans ACAM-Winter les modules de codage/décodage de ces formats. Il nous fallait donc trouver un ou plusieurs fichiers sources qui satisfassent aux exigences suivantes, dans l'ordre: 1- Être écrit en C 2- Être automome, c'est-à-dire n'ayant pas besoin d'une bibliothèque additionnelle (ZLIB, etc) 3- Être portable, afin de pouvoir être compilé sans difficulté sous n'importe quel système. 4- Être court, pour ne pas ajouter plusieurs méga-octets à chacun de nos programmes utilisant ACAM 5- Être facile d'emploi : nous avons seulement besoin de convertir des images brutes en 32 bits (RGBA) depuis et vers le format graphique. Nous n'avons pas besoin d'aller fouiller au fin fond des métadonnées du format, ou de travailler avec des palettes de couleurs ou des données EXIF. 6- Pouvoir travailler en mémoire et pas sur fichier afin de pouvoir convertir nos images brutes sans passer par un fichier temporaire 7- Permettre l'utilisation de ces fichiers sources dans une application commerciale à sources fermés sans devoir payer des droits Nous n'avons pas de contrainte de rapidité (à condition de rester dans le domaine du raisonnable) Dans ce cadre, nous avons évalué, souvent téléchargé, et parfois compilé divers projets. Voici ce que nous avons pu en tirer jusque là: - Format PNG / libpng : très répandue et utilisée, une bibliothèque complète, très complète, trop peut-être. En fait de bibliothèque, c'est plus proche de la bibliothèque d'Alexandrie que du Bibliobus de Rebire-Chioulet.
Il semble que cela occupe plusieurs centaines de kilo-octets, et que son utilisation nécessite plusieurs jours de bûchage de doc. - Format JPG / libjpeg : Même chose que ci-dessus.
- Format TIFF / libtiff : Même chose que ci-dessus. La complexité du méta-format TIFF nous amène à nous demander si le jeu en vaut la chandelle, et s'il ne vaudrait pas mieux faire l'impasse sur ce format, somme toute peu utilisé, plutôt que nous embêter avec.
- Format PNG / LodePng : excellente bibliothèque, constituée d'un seul fichier source, très court. Pas très rapide mais on s'en fiche. En gros, possède tous les atouts.
- Multi-formats (jpg, png, bmp, tga, psd, gif, hdr, pic) / stb_image : Très compacte, livrée sous un format étrange (tout en fichier C "header" .h), il ne manquerait que le tiff, si le module de sauvegarde était aussi complet, ce qui n'est pas le cas.
Ne peut créer que des fichiers png, bmp et tga, et encore sous forme de fichier seulement (voir point 6 ci-dessus). Avec une astuce de programmation, nous avons pu lui faire générer les données dans un bloc mémoire. Il manque cependant pas mal de formats - Format JPG (encodage) / jpegEnc : Court et simple d'utilisation, fait ce qu'il dit, c'est-à-dire de l'encodage jpeg. Peut être utilisé en complément de stb_image ci-dessus.
- Format GIF / giflib : En cours d'évaluation par nos soins. Satisfait a priori aux critères, bien qu'apparemment un peu compliqué pour un format si simple. Pourrait être utilisé en complément de stb_image ci-dessus?
- Format BMP / nous-même : le format BMP est déjà supporté en natif dans ACAM. Nous n'avons donc a priori pas besoin de bibliothèque pour l'utiliser. Mais notre implémentation est partielle, donc un module plus complet ne nuirait pas.
- Multi-formats / libgd : prometteur et compact, après tentative de compilation il semble que ce module nécessite l'installation de libpng, libjpg, libtiff, etc pour fonctionner. Hors sujet pour nous, donc.
Pour l'instant, nous avons compilé et incorporé LodePng, stb_image (seul ce dernier devrait rester, car il gère plus de formats que LodePng), jpegEnc et giflib (pas encore testé). Faute de solution acceptable, nous avons renoncé pour l'instant à prendre en compte le format TIFF. Avec tout ceci, nous devrions pouvoir lire et écrire en format BMP, GIF, JPG, PNG, ainsi que TGA, ainsi que lire en format PSD, HDR et PIC, sans avoir besoin de quoi que ce soit de la part du système. La lecture PNG avec masque d'opacité a été testée, dans le futur sélecteur de fichier ACAM-Winter (les icônes apparaissant dans cette boîte sont des images PNG): Bon week-end à tous ! |
|
|
by Olivier Guillion | | |
| |
|
Nous avons terminé de vérifier, corriger et traiter la version Néerlandaise de la documentation d'Harmony Assistant. Elle devrait être mise en ligne dans quelques minutes. Afin de nous éviter un travail de copier/coller sur les 150 pages de la documentation, nous avons préféré écrire un programme "jetable" pour que le titre de chaque page Web soit identique au titre écrit dans le corps de la page. |
|
|
by Olivier Guillion | | | |
|
Dans le désordre : - Le sélecteur de fichier d'ACAM-Winter est presque terminé et est d'ores et déjà fonctionnel. Seul problème, sur Linux, pour afficher les icônes et également permettre aux applications d'utiliser des fichiers graphiques, il faut trouver et utiliser des librairies statiques qui permettent de charger des fichiers au format PNG, JPG, TIFF et GIF. Je sens qu'on n'a pas fini de rigoler. - Les tracés de coulés spéciaux (tirets, points, ondulation) ont été améliorés afin que la courbe soit couverte de bout en bout (par exemple, le premier point tombe au début de la courbe, et le dernier exactement à la fin) - Un vieux, vieux défaut d'affichage des parties conditionnelles, lorsque la fin de partie était très loin du début et reliée à ce dernier par une ligne, a été corrigé. - À la demande d'un utilisateur, le script "Appliquer une pause" a été repris pour modifier automatiquement la durée d'appui de la note, et a été traduit en espagnol (si vous vous demandiez qui est cet utilisateur, ça réduit pas mal le champ des recherches) - Roeland, notre vaillant et courageux traducteur en Néerlandais, a livré l'intégralité des pages de la documentation d'Harmony Assistant. Dès que nous avons terminé les ajustements et réglages, nous la mettrons en ligne, pour que nos amis Hollandais, Belges et Surinamiens puissent en profiter sans attendre. Bon week-end à tous ! |
|
|
by Olivier Guillion | | |
| |
|
Comme annoncé précédemment, les tracés de coulés en pointillés ont été repris afin d'être plus régulier et de prendre en compte le paramètre de tension. Nous en avons profité pour ajouter deux types de tracés : le coulé en tirets et le coulé ondulé. Voici donc l'ensemble des possibilités de tracés qui seront offertes à l'utilisateur : |
|
|
by Olivier Guillion | | |
| |
|
Un utilisateur nous a demandé d'améliorer l'aspect des coulés lorsqu'ils sont affichés en pointillés, ainsi que l'ajout d'un nouvel aspect, le pointillé par petits traits (au lieu d'une série de points). Jusqu'ici, le tracé de ces coulés un peu particuliers avait dû rester très simple. L'écartement des pointillés n'était pas très régulier, et des réglages fins comme la tension n'étaient pas pris en compte. Ceci était dû au fait que, contrairement aux coulés normaux (pleins), qui sont tracés par des courbes de Bezier, nous ne pouvions pas utiliser ces courbes pour des tracés discontinus car les systèmes ne le proposaient pas. Or, pour Acam Winter, nous avons dû développer nos propres fonctions de tracés de Bezier. Il devrait donc maintenant être possible de tracer à peu près n'importe quel motif, car nous contrôlons le tracé de A à Z. Nous sommes donc en train d'effectuer quelques tests de faisabilité. |
|
|
by Olivier Guillion | | |
| |
|
Pour changer des programmes, bugs, corrections et améliorations, pourquoi pas un peu d'aquariophilie ? Pour égayer un peu notre pièce de travail, nous avons décidé de mettre en place un aquarium. Nous ne sommes pas tout à fait débutants, aussi nous avons pu nous poser ces contraintes : faire quelque chose de facile à entretenir, et utiliser au maximum du matériel de récupération ou d'occasion. Didier a ramené d'un vide-grenier (5 ¤) un bac simple de 100 litres, en bon état, avec éclairage (1 tube T8 de 60cm) Après nettoyage et contrôle, changement du câble d'alimentation de l'éclairage (interrupteur cassé) et mise en place d'un tube JBL Solar Color pour remplacer le Philips "éclairage de garage" qui y était monté, nous avons trouvé pour pas très cher, sur un site d'annonces, un petit meuble solide pour le poser (meuble TV en pin). Restait à préparer l'intérieur du bac : Un peu de substrat pour plantes Deponit Mix qui nous restait, complété avec un sac de substrat acheté en jardinerie, une grille fine type moustiquaire pour éviter que le substrat remonte et ne vienne polluer l'eau, le tout recouvert d'une bonne couche de sable de Loire bien lavé. Le sol était prêt. Une racine de mangrove trouvée sur le même site d'annonces, quelques grosses pierres récupérées dans la vallée de l'Arac (Massat, Ariège) et testées à l'acide pour vérifier qu'elles ne soient pas calcaires, plus une autre racine, achetée en magasin celle-ci, et le décor était suffisant. Nous sommes alors passés aux plantes, en récupérant dans nos autres aquariums et bassin de jardin les pousses de plantes résistantes et peu demandeuses en lumière (un seul tube étant un peut juste niveau puissance). Nous avons pu ainsi planté : - Des Anubia Nana, accrochées avec un fil de crin aux racines de mangrove - Des Ludwigia repens, qui ne posent aucun problème de pousse et de multiplication - Quelques Limnophila sessiliflora - Des Microsorium pteropus (fougères de Java) et une boule de Cladophora aegagropila. Nous avons récupéré un programmateur journalier (pour l'éclairage), une pompe avec filtration, un oxygénateur et une pompe simple pour accentuer le courant si besoin est. La mise en eau s'est faite tranquillement, en mélangeant de l'eau de ville qui avait reposé 24 h avec de l'eau du bassin de jardin, déjà chargée en bactéries. Nous en sommes là : il faut maintenant que l'eau s'éclaircisse, et on commencera à réfléchir aux bébêtes à y mettre dedans (si on fait abstraction des escargots qui y sont arrivés en même temps que les plantes) |
|
|
by Olivier Guillion | | |
| |
|
Une utilisatrice de Linux, experte en la matière, nous a fait remarquer que, depuis l'abandon du paquet de compatibilité ia32-libs par les distributions Ubuntu/Mint, il était très difficile, voire impossible, d'installer Harmony Assistant sur un tel Linux en 64 bits. Harmony est, et compte bien rester, une application 32 bits. Outre le fait qu'une version 64 bits n'amènerait absolument aucun gain de rapidité, de fonctionnalité ou de compacité (au contraire), une migration vers du 64 bits nécessiterait au bas mot plusieurs mois de développement non stop, tout cela pour obtenir au final une application qui fonctionne presque aussi bien qu'avant. Windows ou MacOS permettent de faire fonctionner les applications 32 bits sur les versions 64 bits du système sans que l'utilisateur (ou le programmeur) ne le remarque. Ca fonctionne, et on avait fini par s'y habituer. Et voici qu'arrive Linux. Pour que l'application fonctionne, il lui faut la version 32 bits des bibliothèque du système qu'elle utilise. Ces bibliothèques, appelées dépendances, ne sont pas installées par défaut, et leur installation, d'après ce que l'utilisatrice Linux nous a dit, pourrait perturber la stabilité du système tout entier, voire le corrompre irrémédiablement. Le tournant que nous avons pris avec ACAM-Winter vise justement à réduire les dépendances de l'application au strict minimum, de manière a faciliter le processus d'installation. La version en cours de développement n'a plus besoin, pour fonctionner, que des bibliothèques 32 bits (i386) suivantes : - libc6 : fonctions de bases du programme - libasound2 : ALSA, le gestionnaire de son - libx11-6 : X11, l'interfaçage graphique - libfreetype6 et libfontconfig1 : gestion des polices de caractères - et probablement libcups2 : gestion des imprimantes Nous essayons encore de réduire. Mais l'utilisatrice nous a fait comprendre que beaucoup de Linuxiens rechigneraient à installer une quelconque application 32 bits sur leur système 64 bits, car le risque de conflit et de problème serait trop important, quel que soit le nombre de dépendances. Cela nous inquiète. Car si cela s'avérait vrai, étant donné que la part des installations 64 bits de Linux ne cesse d'augmenter, cela pourrait assez rapidement remettre en question l'existence même de la version Linux. |
|
|
by Olivier Guillion | | |
| |
|
|