IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

reconnaissance vocale hors ligne avec VOSK


Sujet :

Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 568
    Billets dans le blog
    65
    Par défaut reconnaissance vocale hors ligne avec VOSK
    Bonjour,

    Vosk est une boîte à outils de reconnaissance vocale hors ligne que l'on peut trouver sur GitHub ici https://github.com/alphacep/vosk-api
    et une version pour Delphi est disponible ici https://github.com/CodeYan01/vosk4delphi toutefois si la compilation des composants est OK, l'installation de ceux-ci échoue

    Quelqu'un a t-il utilisé VOSK avec Delphi ?
    Le fait que Delphi soit 32 bits alors que mon poste soit Windows 64 bits poserait-il des problèmes lors de l'installation (via Pip3) de l'outil ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 568
    Billets dans le blog
    65
    Par défaut
    Pour vous donner quelques nouvelles de mes essais.

    En utilisant Python4Delphi et un script, cela fonctionne plutôt bien, seulement cela laisse un arrière goût de "peut faire mieux".
    Je me suis donc penché (RAD Studio 12.2) sur une réalisation aussi bien en C++ (faisait longtemps que je voulais m'y remettre à ce langage) qu'en Delphi.
    Pour l'instant, ça coince, le problème : l'interfaçage entre la capture du son (qui doit être avec des spécifications précises ) et les API de VOSK

  3. #3
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut Bonjour
    Bonjour sergio,
    Pour besoin dans une interface domotique, je suis entrain de tester Kastri qui marche bien.
    Cependant, le besoin de reconnaissance vocale horsligne s'impose.
    Aussi, je cherche autre solutions:
    1)Je souhaite tester Vosk mais impossible recuperer par ton lien github Vosk pour delphi, 404.
    saurais-tu ou peut'on le telecharger?
    2)Sinon sur android/Google, nous avons les fichiers telechargeables(~23Mo) selon langues, accessibles dans 'parametres/.../ "Offline speech recognition".
    -Je cherche donc aussi, comment il est possible d'utiliser ces fichiers Google avec Delphi(V11.2)

    Si tu as qqles idees ,je t'en remercie.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 568
    Billets dans le blog
    65
    Par défaut
    Bonsoir,

    en fait Vosk4Delphi n'a jamais fonctionné pour moi, j'avais fait un ticket sur le dépôt (apparement supprimé depuis !). J'avais quand même fait un clone sur mon "vieux" poste, donc je peut peut-être retrouver

    Mais, pour obtenir une résultat, j'étais passé par Python4Delphi et donc ces scripts https://github.com/alphacep/vosk-api/tree/master/python
    Nécessitant donc Python ! Après, je ne suis pas allé plus loin , mais je sais qu'avec quelques recherches on peut faire du python embarqué (google, mots clés python embedded pip donne des vidéos intéressantes)

    2)Sinon sur android/Google, nous avons les fichiers telechargeables(~23Mo) selon langues, accessibles dans 'parametres/.../ "Offline speech recognition".
    -Je cherche donc aussi, comment il est possible d'utiliser ces fichiers Google avec Delphi(V11.2)
    j'ai abandonné l'idée, FMX et la voix, je retenterai maintenant que j'ai vu que le dico offline semblait être en place sur mon mobile
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    Merci pour ces infos,
    En fait, j'avais une solution operationnelle avec android.speech.SpeechRecognizer sur delphi11.2 pour Android9 en ligne.
    Le passage a Android12 pose qqles problemes dont impossible pour moi de changer langage defaut "en-US",
    d'où recherche autre API pour resoudre ce pb et voire permettre une solution offline.
    -KAPRI sur Android12: probleme changement langage defaut OK mais reste uniquement enligne

    je ferais suivre sur le site si solution.
    Bonne journée.

  6. #6
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    Bonjour Sergio,
    j'ai redeposé un ticket github pour Vosk via forum Delphi/Kastri:
    https://github.com/DelphiWorlds/Kast...ent-2688902502
    La réponse confirme qu'ils n'ont pu trouver, comme nous, une trace du repo Vosk pour Delphi.
    Tu apparais donc un des seuls a possiblement avoir un exemplaire de cet Api ! .

    Avec tous mes remerciements pour ton retour, si tu avais un peu de dispo et pouvais le retrouver
    Si retrouvé, je prends le temps pour une nouvelle tentative de correction et de bon fonctionnement.
    En effet, Vosk répondrai parfaitement à mon environnement de dev domotique Delphi11.2(Windows,Android,Raspberry/Debian)
    Bonne journée.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 568
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par spearman Voir le message
    Tu apparais donc un des seuls a possiblement avoir un exemplaire de cet Api ! .
    Seul, non puisque l'on a travaillé à 4 mains. Comme j'ai retrouvé le truc (et même sur mon nouveau poste ) une adresse mail par MP et j'envoie le zip (trop gros pour une pièce jointe)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 568
    Billets dans le blog
    65
    Par défaut
    Titillé par la curiosité (comme d'hab) et ayant découvert que le dictionnaire offline était bien chargé j'ai tenté quelques expériences simples
    je vous propose en direct un téléchargement Directions.zip (D12.2 mais je pense qu'avec D12.1 ça passe)
    le but est de changer la direction d'un flêche (un SVG dont je change la rotation)

    Nom : Capture.png
Affichages : 105
Taille : 34,8 Ko
    mauvaise idée, peut-être, avoir mis la zone de saisie en bas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    procedure TForm2.edtCmdChangeTracking(Sender: TObject);
    begin
      if Sametext(edtCmd.text, 'Arret') OR Sametext(edtCmd.text, 'Arrêt') then
      begin
        // fonctionne pas ?
        SkSvg1.Visible := false;
        edtCmd.text := emptystr;
      end;
     //   SkSvg1.Visible := true; // évidemment ça pouvait pas !!!!
        if Sametext(edtCmd.text, 'Gauche') then
        begin
          SkSvg1.RotationAngle := 0;
          edtCmd.text := emptystr;
        end;
        if Sametext(edtCmd.text, 'Avant') then
        begin
          SkSvg1.RotationAngle := 90;
          edtCmd.text := emptystr;
        end;
        if Sametext(edtCmd.text, 'Arrière') then
        begin
          SkSvg1.RotationAngle := -90;
          edtCmd.text := emptystr;
        end;
        if Sametext(edtCmd.text, 'Droite') then
        begin
          SkSvg1.RotationAngle := 180;
          edtCmd.text := emptystr;
        end;
    end;
    Problématiques :
    Arrêt ne semble pas fonctionner, mais il me manque peut-être un re-dessin (je viens juste d'y penser, et après nouveau essais c'est ça)
    Hors ligne, je reste bien en mode saisie et le "clavier" à l'écoute. En ligne, la saisie perd le focus (là encore je viens de penser : "et si je rajoutais un focus ?" )
    Maintenant, au démarrage, il faudrait que le clavier soit directement à l'écoute : ça, ça sent le JNI a plein nez
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    bonjour,
    ton envoi concerne vosk?
    des units que je ne connais pas: Skia,tskvg ?

    De mon coté je debute avec ton envoi repo vosk; je n'arrive deja pas à extraire le bpl ?
    A+

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 568
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par spearman Voir le message
    ton envoi concerne vosk?
    des units que je ne connais pas: Skia,tskvg ?
    Non, pas vraiment, c'est plus général j'en ait fait une discussion à part
    Citation Envoyé par spearman Voir le message
    des units que je ne connais pas: Skia,tskvg ?
    je suis très SVG plutôt qu'images PNG (même si dans ce cas cela ne se justifie pas vraiment, quoique ...) Skia est fourni depuis D11 mais est téléchargeable via Getit ou dépôt github

    je n'arrive deja pas à extraire le bpl ?
    dans mon souvenir, j'ai dû le créer ou était-ce qu'il fallait juste utiliser les unités Aloïs quand tu me tiens !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    Bonjour, Serge,
    mais as-tu pu deja executer vosk avec Delphi ?
    De mon coté , j'ai utilisé ton prog "unit5" dans le fichier dsk que tu as envoyé:
    -ca compile, ca s'execute
    -mais je bute sur la fonction de la ligne " aModel:=TVoskModel.Create(Self,'model');"
    amodel.model est toujours=nil;
    'model'= path du modele de langue soit le nom du repertoire .
    -J'ai essayé en path court, long, divers emplacement , mais pas encore de resultat.(mais peutetre qu'un problem de path?)
    -J'ai vérifié le libvosk.dll avec dependanciesmaker qui est ok.
    Comme je n'arrive pas à debugger la fonction externe en C (src\model.h) sous Delphi, je vais tester Vosk en C (avec VSCode) mais
    cela fait longtemps que je n'ai pas écrit en C.
    Si tu as une idée ou étais tu deja arrivé au meme stade?
    Bonne journée
    Nom : screenexec.jpg
Affichages : 54
Taille : 10,5 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    -----------------------------------------------------------------------------------------------------------
    unit vosk_api;
    { This unit is automatically generated by Chet:
      https://github.com/neslib/Chet }
     
    {$MINENUMSIZE 4}
     
    interface
    ........
    (** Loads model data from the file and returns the model object
     *
     * @param model_path: the path of the model on the filesystem
     * @returns model object or NULL if problem occured *)
    function vosk_model_new(const model_path: PAnsiChar): PVoskModel; cdecl;
      external LIB_VOSK name _PU + 'vosk_model_new';
     
     
    -----------------------------------------------------------------------------------------------------------
    unit VoskModel;
     
    interface
     
    uses
      SysUtils, Classes, vosk_api;
     
    type
      TVoskModel = class(TComponent)
      private
        { Private declarations }
        FModel: PVoskModel;
        FModelPath: String;
      protected
        { Protected declarations }
      public
        { Public declarations }
        //constructor Create(AOwner: TComponent); overload; override;
        constructor Create(AOwner: TComponent; AModelPath: String); reintroduce;
        destructor Destroy; override;
        function FindWord(AWord: String): Integer;
        property Model: PVoskModel read FModel;
      published
        { Published declarations }
        property ModelPath: String read FModelPath;
      end;
     
    procedure Register;
     
    implementation
     
    constructor TVoskModel.Create(AOwner: TComponent; AModelPath: String);
    begin
      inherited Create(AOwner);
      FModelPath := AModelPath;
      FModel := vosk_model_new(PAnsiChar(FModelPath));
    end;
    -----------------------------------------------------------------------------------------------------------
    unit Unit5;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, voskmodel,voskrecognizer;
     
    type
      TForm5 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      FModel : TVoskModel;
      FRecognizer : TVoskRecognizer;
      h : THandle;
      end;
     
    var
      Form5: TForm5;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm5.Button1Click(Sender: TObject);
    var p : Pointer;
        amodel : TVoskModel;
    begin
     aModel:=TVoskModel.Create(Self,'model');
     if amodel.Model=nil then showmessage('non initialisée')
     else
     FRecognizer:=TVoskRecognizer.Create(Self,amodel);
    end;
     
    -----------------------------------------------------------------------------------------------------------
    src\model.h
    ...
     
    #ifndef VOSK_MODEL_H
    #define VOSK_MODEL_H
     
    #include "base/kaldi-common.h"
    #include "fstext/fstext-lib.h"
    #include "fstext/fstext-utils.h"
    #include "online2/onlinebin-util.h"
    #include "online2/online-timing.h"
    #include "online2/online-endpoint.h"
    #include "online2/online-nnet3-incremental-decoding.h"
    #include "online2/online-feature-pipeline.h"
    #include "lat/lattice-functions.h"
    #include "lat/sausages.h"
    #include "lat/word-align-lattice.h"
    #include "lm/const-arpa-lm.h"
    #include "util/parse-options.h"
    #include "nnet3/nnet-utils.h"
    #include "rnnlm/rnnlm-utils.h"
    #include "rnnlm/rnnlm-lattice-rescoring.h"
    #include <atomic>
     
    using namespace kaldi;
    using namespace std;
     
    class Recognizer;
     
    class Model {
     
    public:
        Model(const char *model_path);
        void Ref();
        void Unref();
        int FindWord(const char *word);
     
    protected:
        ~Model();
        void ConfigureV1();
        void ConfigureV2();
        void ReadDataFiles();
     
        friend class Recognizer;
     
        string model_path_str_;
        string nnet3_rxfilename_;
        string hclg_fst_rxfilename_;
        string hcl_fst_rxfilename_;
        string g_fst_rxfilename_;
        string disambig_rxfilename_;
        string word_syms_rxfilename_;
        string winfo_rxfilename_;
        string carpa_rxfilename_;
        string std_fst_rxfilename_;
        string final_ie_rxfilename_;
        string mfcc_conf_rxfilename_;
        string fbank_conf_rxfilename_;
        string global_cmvn_stats_rxfilename_;
        string pitch_conf_rxfilename_;
     
        string rnnlm_word_feats_rxfilename_;
        string rnnlm_feat_embedding_rxfilename_;
        string rnnlm_config_rxfilename_;
        string rnnlm_lm_rxfilename_;
     
        kaldi::OnlineEndpointConfig endpoint_config_;
        kaldi::LatticeIncrementalDecoderConfig nnet3_decoding_config_;
        kaldi::nnet3::NnetSimpleLoopedComputationOptions decodable_opts_;
        kaldi::OnlineNnet2FeaturePipelineInfo feature_info_;
     
        kaldi::nnet3::DecodableNnetSimpleLoopedInfo *decodable_info_ = nullptr;
        kaldi::TransitionModel *trans_model_ = nullptr;
        kaldi::nnet3::AmNnetSimple *nnet_ = nullptr;
        const fst::SymbolTable *word_syms_ = nullptr;
        bool word_syms_loaded_ = false;
        kaldi::WordBoundaryInfo *winfo_ = nullptr;
        vector<int32> disambig_;
     
        fst::Fst<fst::StdArc> *hclg_fst_ = nullptr;
        fst::Fst<fst::StdArc> *hcl_fst_ = nullptr;
        fst::Fst<fst::StdArc> *g_fst_ = nullptr;
     
        fst::VectorFst<fst::StdArc> *graph_lm_fst_ = nullptr;
        kaldi::ConstArpaLm const_arpa_;
     
        kaldi::rnnlm::RnnlmComputeStateComputationOptions rnnlm_compute_opts;
        CuMatrix<BaseFloat> word_embedding_mat;
        kaldi::nnet3::Nnet rnnlm;
        bool rnnlm_enabled_ = false;
     
        std::atomic<int> ref_cnt_;
    };
     
    #endif /* VOSK_MODEL_H */

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 568
    Billets dans le blog
    65
    Par défaut
    Ce code n'était pas le mien, mais celui de l'auteur (à moins que je ne l'aie modifié sans intention).
    Je n'ai pas replongé dans "la chose" aussi serai-je bien en peine de répondre.

    Comme j'ai désormais RadStudio je pourrai peut-être tenter une approche C++ (avec l'aide de l'IA car, moi aussi je suis rouillé en C)
    encore un todo dans ma liste (et la liste est longue)
    En ce moment je suis plus en mode rédaction/test de tutoriels Styles FMX donc ne t'attends pas à une réponse immédiate
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. Reconnaissance vocale hors ligne en français sur Raspberry
    Par Damien_38 dans le forum Bibliothèques d'apprentissage automatique
    Réponses: 2
    Dernier message: 23/12/2020, 18h21
  2. Réponses: 1
    Dernier message: 14/03/2019, 21h41
  3. Creation formulaire hors ligne avec enregistrement en local
    Par Sergeras dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/01/2018, 08h54
  4. [AJAX] Compatibilité Hors ligne avec IE11 ?
    Par jpe54 dans le forum AJAX
    Réponses: 1
    Dernier message: 11/03/2014, 10h26
  5. probleme avec la reconnaissance vocal de Ms agent.
    Par maxoudu328 dans le forum Langage
    Réponses: 7
    Dernier message: 03/05/2006, 23h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo