Metaphone en AS3 avec Adobe Alchemy

Soumis par Ricovitch le ven, 03/05/2010 - 17:25

Catégorie 

Flash, AS3, Alchemy

A la recherche d'algorithmes de suggestions de résultats, je suis tombé sur les algos soundex, metaphone et double metaphone. L'idée étant de comparer deux expressions en les transformant en représentations phonétiques simplifiées. Par exemple les expressions "John" et "jon" donnent "JN" une fois passées à la moulinette.
Tout cela étant disponible en langage C, je me suis dit que ce serai un bon prétexte pour tester le portage en AS3 avec l'outil Alchemy publié sur le labs d'Adobe.
Bon une fois passé les 22 étapes du tutoriel d'alchemy (oui oui 22!), pas forcément évidentes (dont entre autre l'installation de cygwin avec les packages qui vont bien et tout ça...), à ma grande surprise (j'y croyai plus trop), je suis parvenu à faire fonctionner les deux librairies C metaphone et double metaphone à partir d'une application flash.

L'intérêt d'alchemy est surtout de ne pas avoir à recoder en AS3 des tas de choses sympathiques existantes en C. Car question performance, c'est pas forcément évident d'obtenir de bons résultats. Voir l'article d'Automata Sudios pour plus d'infos. J'ai pas tout compris ;-), mais on y dit entre autres d'éviter les allers-retours multiples entre AS3 et librairie C...

Commentaires

Soumis par Ricovitch le dim, 02/14/2010 - 09:58

Je viens de passer une demi-heure à comprendre pourquoi un projet utilisant alchemy ne compilait pas sous FlexBuilder, avant de m'apercevoir qu'en supprimant le paramètre -link-report du compilateur tout revenait à la normale...

Visiblement la génération de rapport de dépendances a du mal avec les libs alchemy.

Soumis par Ricovitch le jeu, 12/02/2010 - 14:51

Au cas ou quelqu'un aurai le même problème :
Le bug de compilation avec la génération de rapports de dépendances en cachait un autre, détaillé ici : http://bugs.adobe.com/jira/browse/SDK-26814
Avec le sdk 3.5, l'utilisation d' "alchemy opcodes" produit un swf final beaucoup trop gros.

Solution : utiliser le sdk 4.1
Résultat : mon appli flex passe de 550 a 429 ko et les rapports de compilation fonctionnent a nouveau...

Soumis par Anonyme le jeu, 10/07/2010 - 00:51

Merci pour l'info, car je devrais bientôt apprendre a utiliser Alchemy et donc passer les 22 étapes etc.. lolol
Mon but étant de voir si il était possible d'écrire un lecteur de son + efficace que celui de AS3 natif.

Soumis par Anonyme le ven, 01/07/2011 - 14:20

Salut Ricovitch, j'ai arrêté de bosser sur mon projet fin septembre, mais là, je vais le reprendre.. Il s'agit de matériel DJ, mais virtuel, en AS3.. je suis arrivé à faire le traitement du son principal, pitch, reverse, etc.. Mais le problème, c'est que AS3 génére une latence trop grosse. la classe SampleData ne permet pas de changer les samples à la volée, on ne sait pas contourner le buffer qui va de +/- 4000 à 8000 samples, toute modification du son se fera entendre lors du prochain chargement du buffer. (d'où la latence).

La grande question sur Alchemy, c'est est-ce-qu'il serait possible de remplacer la classe native AS3 par un code C qui piloterait directement la carte son? ou via DirectSound (DirectX) afin de controler ce qui est envoyé à la carte son au sample près ou presque.. Ca, c'est un truc énorme, car si cela est possible, ça va faire du bruit :) Qu'en penses-tu?

Sonoport travaille sur un beta qui semble interessant.. je me demande si il y a de l'alchemy la derrière ou pas.. en tous cas, sur le strech, la latence s'entend, mais n'est pas énorme. Sur le discoVox, c'est difficile à entendre, car sur de la voix.. il faudrait faire le test sur une sinusoïde pure et continue pour s'en rendre compte.

http://labs.sonoport.com/

++ ;) Alain

Soumis par Anonyme le ven, 01/07/2011 - 14:31

PS:, je connais ALF, j'ai discuté avec le type qui à fait ça, j'ai testé tous les Framework connus, aucun ne m'a donné satisfaction, j'ai du tout coder moi même en tâchant de bien comprendre tout. Il existe un Framework porté en C et compilé via Alchemy, mais chez moi, il ne fonctionnait pas bien. Seuls des codes d'André Michèle m'ont aidé, j'ai échangé des emails avec lui, le problème de latence de AS3 est connu, il est confronté au même souci, pour lui, impossible de faire un truc assez réactif.

Soumis par Ricovitch le ven, 01/07/2011 - 22:11

Hello Alama,

J'avais plus ou moins suivi les déboires d'andre michelle et d'autres sur le traitement du son en Flash. Et d'après ce que j'ai compris cette application : http://www.audiotool.com/ utilise une couche java, sans doute pour pouvoir justement accéder à la couche matérielle de la carte son.
En flash, même avec alchemy, ça n'est pas possible à ma connaissance.
Mais au vu de ce qui se prépare pour la 3d avec Flash11, avec un peu de chance ils feront la même chose pour le son... On peut toujours réver... !

Soumis par Anonyme le mer, 01/12/2011 - 04:19

Salut Eric, oui, j'avais vu ça pour audiotool, mais je pense que le java ne sert que pour la conversion MP3 coté server. La latence n'est pas grave pour audiotool, car elle n'a lieu que lorsque qu'on cherche à modifier la chaine des samples en temps réel, pour audio tool, elle ne gêne pas, car la compo est compilée et compressée en mp3 séparément.

Oui, j'avais fait cette remarque par rapport à la 3D de Flash11, mais apparemment non, pas de contrôle particulier du son dans l'API. après, je suppose qu'il vont refaire la partie son, car là, ils l'ont laissé un peu trop de coté et le futur de Flash ne peut pas rester sans une super maîtrise du son.

Donc, via alchémy, on ne pourrait pas envoyer et contrôler un flux de samples RAW à la carte son?.. mmm si c'est le cas, c'est triste.. j'aurais vraiment voulu faire une apli qui déchire.. sauf peut être, sous AIR en passant par DotNet via Fluorine.. Mais on perd le cross plateform :-/ bha, je verrai bien..

Sinon, autre chose, utiliser le codec Lame MP3 sous alchémy, ça doit être possible ça.. je pense à ça car il n'existe à ma connaissance aucun compresseur MP3 direct en AS3. Je sens qu'il va encore y avoir des heures, des jours et des semaines de test et de recherches! :-)

Bon, ben la suite dans quelques semaines.. ;)

Soumis par Ricovitch le mer, 01/12/2011 - 09:09

Salut Alama, tiens moi au courant de tes résultats, j'éspère que tu arrivera à quelquechose de concluant. Mais concernant le controle de la carte son à partir de Flash, je ne pense pas me tromper en disant qu'alchemy ne change rien au problème.
Le résultat reste un swf qui s'execute dans Flash Player, avec ses limitations.
Si ton application doit absolument être "online" sur le web, tu pourrai la faire communiquer avec une couche java, air, ou autre. (via sockets par exemple)
Si c'est une application desktop, il y a un peu plus de possibilités.
J'ai des sources d'un exemple de phillipe elsass sur la connection directe entre un flash et un petit programme C (je retrouve pas le lien, mais si ca t'intéresse je t'enverrai ses sources).

Soumis par Anonyme le mer, 01/12/2011 - 18:54

En fait, ce sera les deux.. online pour demo etc.. mais desktop dans l’hypothèse d'une utilisation + fiable sans latence. Je mettrai une version en ligne quand elle sera un peu + avancée ;)

Oui, via Air, on peut faire une passerelle via sockets vers des exe écrit en .Net ou autre, c'est ce que fait Fluorine.. au pire, je regarderai via cette méthode..

Sinon, j'ai trouvé un peu par hasard hier ceci: https://ccrma.stanford.edu/software/stk/classRtAudio.html#_details Après, il faut voir ce qu'on peut faire avec ça... Je ne suis pas programmeur C ou C++ je vais devoir ramer ou trouver un pote qui maïtrise C. Par le passé, j'ai déjà fait des trucs en .Net (dans un thread caché) piloté par Air via fluorine.

Sinon, il faut casser les pieds à Adobe :-))) ici, dans les features request: https://bugs.adobe.com/jira/secure/IssueNavigator.jspa?reset=true&jqlQue...

Mais bon, je l'ai déjà fait, mais il faudrait être plusieurs..

Sinon, j'ai trouvé ceci également : http://www.buraks.com/azoth/index.html.. à creuser, ça accélère les accès bytesArray.. et mon DSP n'utilise que ça..

Soumis par Anonyme le jeu, 01/13/2011 - 03:17

Voilà j'ai uppé mon projet ;) http://www.covergraph.com/alama/pioneer_projet/flash/cdj1000mk3_vx/index...

Pour le moment, seuls les fonctions power, eject(load mp3), play/pause, pitch et reverse fonctionnent. je suis occupé à bosser sur l'afficheur LCD Pioneer n'utilise pas des ms, mais bien des frames, 75/sec et un tour de Jog fait 135 frames.. ça complique les choses.. Bref, c'est pour te montrer le truc et comme ça montre bien le travail colossal qu'il reste encore à faire.

La latence, elle s'entend lorsqu'on modifie la chaines des samples (pitch ou reverse) pour le reste, c'est honnête.

Je viens de trouver ceci, c'est pas mal et je maîtrise un peu Visual Studio et VB.Net.. http://www.ambiera.com/irrklang/features.html

Donc, si vraiment il est impossible de faire un sound Engine en Alchemy et que Adobe n'a pas changé son sampleData, j'essayerai un truc en .net via fluorine et mon appli en Air..

A bientôt et encore merci pour ton intérêt à mes délires techniques :-p

Soumis par Ricovitch le mar, 02/01/2011 - 14:07

Plutôt sympa tes "délires techniques" ! Beau boulot en tout cas. Bon courage pour la suite !

Ajouter un commentaire