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

Signal Discussion :

Explication de code suivant sur pitch


Sujet :

Signal

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 203
    Points : 68
    Points
    68
    Par défaut Explication de code suivant sur pitch
    L'objectif de programme suivant : des paires des voyelles synthétiques qui commencent et de l'arrêt en même temps (les prétendues ' doubles voyelles) ont été employées pour démontrer que les auditeurs peuvent employer des informations sur la fréquence fondamentale (F0) des sons pour les séparer. Spécifiquement, les auditeurs peuvent mieux identifier les constituants d'une double voyelle quand les deux voyelles ont F0s différent, relativement à la condition dans laquelle ils ont le même F0.

    Cette application vous permet d'expérimenter avec l'ensemble de cinq voyelles utilisées dans les études d'Assmann et de Summerfield (1990). Beaucoup d'études modelantes ont également utilisé ce positionnement de voyelle (par exemple Meddis et Hewitt, 1992). Chacune des cinq voyelles est synthétisée sur six F0s, correspondant aux différences entre 0 et 4 semitones d'un principe fondamental de 100 hertz:
    Semitone différente F0(hz) Période (ms)
    zero 100.00 10.0
    quarter 101.45 9.86
    half 102.93 9.72
    one 105.95 9.44
    two 112.25 8.90
    four 126.00 7.94

    Je veux voir une explication sur chaque fonction qui se trouve dans chacune de fichier . Je veux par l'explication de connâitre appliquer ces fonctions par exemple comment utiliser la fonction load.
    Puis comment rendre tous le programm exécutable (surtout ça).

    SVP, aide moi.
    la fonction find maxpair
    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
    % max is 1594.2345
    % min is -967.9308
    v={'ar','er','ee','or','oo'};
    df={'zero','quarter','half','one','two','four'};
    m=0;
    for k=1:length(v)
    	vowel1=load([char(v(k)) '.zero.mat']);
    	for i=1:length(v)
    		for j=1:length(df)
    			vowel2=load([char(v(i)) '.' char(df(j)) '.mat']);
    			sum=vowel1.data+vowel2.data;
    			m=min(m,min(sum));
    		end
    	end
     
    end
    m
    La fonction gammatone
    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
    function bm=gammatone(x,fshz,cfhz)
     
    %GAMMATONE gammatone(x,fshz,cfhz,pc) implements the 4th 
    % order gammatone filter with centre frequency cfhz (in Hz)
    % and sampling frequency fshz (in Hz).
    % If phase-correction is required, supply anything as the
    % 4th argument.
    % If called with zero or one output arguments, it returns the 
    % filter output i.e. simulated basilar membrane displacement. 
    %
    % Called as [bm,env] = gammatone(x,fshz,cfhz) it returns the 
    % filter output and instantaneous envelope. 
    %
    % Called as [bm,env,instf] = gammatone(x,fshz,cfhz) it returns 
    % the filter output, instantaneous envelope and frequency.
    %
     
    % Implementation by impulse invariant transform as described in
    % Cooke's thesis.
    % Extended by Martin from Guy's version - 20 Feb 97
    % zero-pad if phase-correction is required
    % cut down from Martins version by guy!
     
    wcf=2*pi*cfhz;									% radian frequency
    tpt=(2*pi)/fshz;
    bw=erb(cfhz)*bwcorrection;
    a=exp(-bw*tpt);
    kT=[0:length(x)-1]/fshz;
    gain=((bw*tpt)^4)/6;							% based on integral of impulse response
    q=exp(-j*wcf*kT).*x;							% shift down to d.c.
    p=filter([1 0],[1 -4*a 6*a^2 -4*a^3 a^4],q);	% filter: part 1
    u=filter([1 4*a 4*a^2 0],[1 0],p); 				% filter: part 2
    bm=gain*real(exp(j*wcf*kT).*u);					% shift up in frequency
    la fonction gammatonebank:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function bms=gammatonebank(x,lowcf,highcf,numchans,fs)
     
    % Run gammatone filterbank and output selected parameters
    % NB outputs weighted by Fay (1988) hearing threshold curve
    % modified from code by martin which was modified from code by me!
     
    cfs=MakeErbCFs(lowcf,highcf,numchans);
     
    bms = zeros(numchans,length(x));
     
    for c=1:numchans
      cf=cfs(c);
      bms(c,:) = gammatone(x,fs,cf)/fay(cf);
    end;
    La fonction scalevowels
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    v={'ar','er','ee','or','oo'};
    df={'zero','quarter','half','one','two','four'};
    for i=1:length(v)
    	for j=1:length(df)
    		fname1=[char(v(i)) '.' char(df(j)) '.sig'];
    		fname1
    		s1=load(fname1);
    		soundsc(s1,10000);
    		data=200*s1/rms(s1);
    		fname2=[char(v(i)) '.' char(df(j)) '.mat'];
    		save(fname2,'data');
    	end
    end
    la fonction vowelexplorer:
    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
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    % VOWEL EXPLORER
    %
    % Guy J Brown
    % MAD - Matlab Auditory Demostrations
    % (C) University of Sheffield 1998
    % updated July 1999 for v2.1 by Martin
     
    function vowelExplorer(action)
     
    if nargin<1
    	action='init';
    end
     
    switch action
     
    case 'init';
      f=findobj('Tag','vowelExplorer_fig');
      if ~isempty(f)
        figure(f);
      else  		
        vowelExplorer_gui;
        ud=get(gcf,'UserData');
    		set(ud.waveaxes,'NextPlot','replacechildren','DrawMode','fast');
    		ud.vowel1=zeros(1,2000);
    		ud.vowel2=zeros(1,2000);
    		ud.mixture=zeros(1,2000);
        ud.fs=10000;
    		axes(ud.waveaxes);
        ud.waveplot=plot(ud.mixture(1501:2000),'EraseMode','background');
    		set(gcf,'UserData',ud);
    		oneChanged;
    		twoChanged;
    		vowelExplorer 'sliderChanged'
      end
     
    case 'vowel1changed'
      oneChanged;
     
    case 'vowel2changed'
      twoChanged;
     
    case 'semitone1changed'
      oneChanged;
     
    case 'semitone2changed'
      twoChanged;
     
    case 'playOne'
      ud=get(gcf,'UserData');
      soundsc(ud.vowel1/1600,ud.fs);
     
    case 'playTwo'
      ud=get(gcf,'UserData');
      soundsc(ud.vowel2/1600,ud.fs);
     
    case 'playBoth'
      ud=get(gcf,'UserData');
      soundsc(ud.mixture/1600,ud.fs);	
     
    case 'sliderChanged'
      ud=get(gcf,'UserData');
      ud.db=round(get(ud.slider1,'Value'));
      set(ud.edit1,'String',num2str(ud.db));
      set(gcf,'UserData',ud);
      plotWaveform;
      if (get(ud.check1,'Value'))
        plotBasilarMembrane;
      end
     
    case 'ppboxchanged'
      plotWaveform;
      plotBasilarMembrane;
     
    case 'boxChanged'
      ud=get(gcf,'UserData');
      ud.db=round(str2num(get(ud.edit1,'String')));
      ud.db=max(min(ud.db,ud.maxdb),ud.mindb);
      set(ud.edit1,'String',num2str(ud.db));
      set(ud.slider1,'Value',ud.db);
      set(gcf,'UserData',ud);
      plotWaveform;
      if (get(ud.check1,'Value'))
        plotBasilarMembrane;
      end
     
    case 'recompute'
      plotBasilarMembrane;
     
    case 'boxchanged'
      ud=get(gcf,'UserData');  
    if get(ud.check1,'Value')
        plotBasilarMembrane;
      end
    otherwise
      maduievent('vowelExplorer',action);
     
    end
     
    function plotBasilarMembrane
    ud=get(gcf,'UserData');
    bm=gammatonebank(ud.mixture(1301:2000),80,4000,32,10000);
    axes(ud.bmaxes);
    waveplot(bm(:,445:700),30,5);
    % compute correlogram
    bm=sqrt(0.000001+(bm.*(bm>0)));
    acg=real(ifft(abs(fft(bm(:,189:700)')).^2))';
    axes(ud.acgaxes);
    waveplot(acg(:,1:128),30,0.1);
    axes(ud.summaryaxes);
    cla;
    s=sum(acg);
    hold on;
    if (get(ud.showpitch,'Value')==1)
    	slist=get(ud.semitonemenu1,'String');
    	sstr1=char(slist(get(ud.semitonemenu1,'Value')));
    	slist=get(ud.semitonemenu2,'String');
    	sstr2=char(slist(get(ud.semitonemenu2,'Value')));
    	fzero1=stringToF(sstr1);
    	fzero2=stringToF(sstr2);
    	plot([10000/fzero1 10000/fzero1],[0 1.1],'r');
    	plot([10000/fzero2 10000/fzero2],[0 1.1],'r');
    end
    plot(s/max(s),'k');
    hold off;
     
    function f=stringToFzero(s)
    if (s=='zero')
    	f=100;
    elseif (s=='quarter')
    	f=100;
    elseif (s=='half')
    	f=105.946;
    elseif (s=='one')
    	f=105.946;
    elseif (s=='two')
    	f=112.2455;
    elseif (s=='four')
    	f=125.9906;
    end
     
    function f=stringToF(s)
    switch(s)
    case 'zero', f=100;
    case 'quarter', f=101.4545;
    case 'half', f=102.93;
    case 'one', f=105.946;
    case 'two', f=112.2455;
    case 'four', f=125.9906;
    end
     
    function waveplot(m,inc,scale)
    cla;
    [row,col]=size(m);
    x=[1 1:col col 1];
    for i=row:-1:1,
    	y=[0 scale*m(i,:)+inc*i 0 0];
    	fill(x,y,'w');
    end
     
    function plotWaveform
    ud=get(gcf,'UserData');
    db=get(ud.slider1,'Value');
    r=db2amp(db);
    if (r<1)
    	ud.mixture=ud.vowel1.*r+ud.vowel2;
    else
    	ud.mixture=ud.vowel1+ud.vowel2./r;
    end
    set(ud.waveplot,'YData',ud.mixture(1501:2000));
    set(gcf,'UserData',ud);
     
    function oneChanged
    ud=get(gcf,'UserData');
    vlist=get(ud.vowelmenu1,'String');
    vstr=vlist(get(ud.vowelmenu1,'Value'));
    slist=get(ud.semitonemenu1,'String');
    sstr=slist(get(ud.semitonemenu1,'Value'));
    set(ud.playonebutton,'String',['play ' char(vstr) ' ' char(sstr)]);
    %v=load(fullfile(madroot,'data','vowels',[char(vstr) '.' char(sstr) '.mat']));
    [v,fs]=auread(fullfile(madroot,'data','vowels',[char(vstr) '.' char(sstr) '.au']));
    %ud.vowel1=v.data';
    ud.vowel1=v'.*1000;
    set(gcf,'UserData',ud);
    textChanged;
    plotWaveform;
    plotBasilarMembrane;
     
    function twoChanged
    ud=get(gcf,'UserData');
    vlist=get(ud.vowelmenu2,'String');
    vstr=vlist(get(ud.vowelmenu2,'Value'));
    slist=get(ud.semitonemenu2,'String');
    sstr=slist(get(ud.semitonemenu2,'Value'));		
    set(ud.playtwobutton,'String',['play ' char(vstr) ' ' char(sstr)]);
    %v=load(fullfile(madroot,'data','vowels',[char(vstr) '.' char(sstr) '.mat']));
    [v,fs]=auread(fullfile(madroot,'data','vowels',[char(vstr) '.' char(sstr) '.au']));
    ud.vowel2=v'.*1000;
    %ud.vowel2=v.data';
    set(gcf,'UserData',ud);
    textChanged;
    plotWaveform;
    plotBasilarMembrane;
     
    function textChanged
    ud=get(gcf,'UserData');
    vlist=get(ud.vowelmenu1,'String');
    vstr1=vlist(get(ud.vowelmenu1,'Value'));
    vlist=get(ud.vowelmenu2,'String');
    vstr2=vlist(get(ud.vowelmenu2,'Value'));
    set(ud.ratiotext,'String',[char(vstr1) '/' char(vstr2) ' amplitude ratio (dB)']);
    set(gcf,'UserData',ud);
    La fonction testplot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function testplot(m,inc,scale)
    [row,col]=size(m);
    hold on;
    x=[1 1:col col 1];
    for i=row:-1:1,
    	y=[0 scale*m(i,:)+inc*i 0 0];
    	patch(x,y,'w');
    end

  2. #2
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Citation Envoyé par Mohamed anouar
    Je veux voir une explication sur chaque fonction qui se trouve dans chacune de fichier . Je veux par l'explication de connâitre appliquer ces fonctions par exemple comment utiliser la fonction load.
    Puis comment rendre tous le programm exécutable (surtout ça).[/B]
    pour savoir comment utilser les fonctions MATLAB utilise la commande doc:
    exemple: t'ouvrira la documentation associée à la fonction load

    Pour rendre ton programme executable, il te faut le MATLAB Compiler. Ensuite c'est très simple, tu tapes: pour ouvrir l'interface qui va te permettre de créer un executable à partir de tous tes fichiers sources.
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 203
    Points : 68
    Points
    68
    Par défaut erreur dans le code
    mais avec le code de foction scalevowels; je ne peux pas charger ou lire un signal de parole qu'on peut ouvrir avec windows media player.
    Est ce que vous pouvez me corriger les fautes dans ce code.
    Tel que l'erreur est dans la ligne de "s1=load(fname1);" (in ne connaît pas le fichier)
    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    v={'ar','er','ee','or','oo'};
    df={'zero','quarter','half','one','two','four'};
    for i=1:length(v)
    	for j=1:length(df)
    		fname1=[char(v(i)) '.' char(df(j)) '.au'];
    		fname1
          		s1=load(fname1);
    		soundsc(s1,10000);
    		data=200*s1/rms(s1);
    		fname2=[char(v(i)) '.' char(df(j)) '.mat'];
    		save(fname2,'data');
    	end
    end

  4. #4
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    bonjour,

    est ce que vous avez ces fichiers d'abord? sinon vous ne pouvez pas charger un fichier qui n'existe pas.
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 203
    Points : 68
    Points
    68
    Par défaut load fichier
    Normalement, je dois charger l’un de ces fichiers de pièce jointe. Est-ce que c’est juste.
    Ces fichiers se trouvent sous C:\MATLAB701\work\MAD\data\vowels.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 203
    Points : 68
    Points
    68
    Par défaut load fichier
    S'il y'a une autre solution pour charger et additionner 2 fichers de ce types. SVP, donnez moi cette solution
    merci.

  7. #7
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Si dans MATLAB tu tapes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cd 'C:\MATLAB701\work\MAD\data\vowel'
    y = auread('ar.zero')
    est ce que ça marche?
    sinon quelle est l'erreur que tu reçois?
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 203
    Points : 68
    Points
    68
    Par défaut erreur de dépassement
    J’ai additionné deux signaux puis j’ai utilisé un filtre gammatone mais il donne un problème de dépassement dans la pile et il donne des nombres négatifs.
    Le code et le message d’erreur sont:
    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
    clear all
    close all
    fs = 20000;%fréquence d'échantillonnage
    [y1]=readsam('c:\database\','f1nw0000');
    y1=y1(8001:15000);
    [y2]=readsam('c:\database\','f2nw0000');
    y2=y2(8001:15000);
    x=y1+y2;
    Sound(x,20000) 
    bm=gammatone(x',4000,100);
    bms=gammatonebank (x',50,80,30,4000)
    ??? Maximum recursion limit of 10 reached. Use set(0,'RecursionLimit',N)
    to change the limit.  Be aware that exceeding your available stack space can
    crash MATLAB and/or your computer.
     
    Error in ==> log10 at 4
    %   Complex results are produced if X is not positive.
    merci, j'attends vos réponses.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 203
    Points : 68
    Points
    68
    Par défaut résolution de dépassement
    mettre abs(x').

  10. #10
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Citation Envoyé par tug83
    Si dans MATLAB tu tapes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cd 'C:\MATLAB701\work\MAD\data\vowel'
    y = auread('ar.zero')
    est ce que ça marche?
    sinon quelle est l'erreur que tu reçois?

    tu n'as pas répondu
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 203
    Points : 68
    Points
    68
    Par défaut
    Je m'excuse.j'ai oublié de confirmer. oui, j'ai utilisé cette astuce au lieu de la fonction load et il convient bien.
    Merci beaucoup Mr Tug.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Explication code VBA sur menu clic droit.
    Par Doutrick dans le forum IHM
    Réponses: 1
    Dernier message: 14/04/2013, 20h13
  2. Explication du code suivant
    Par dp33 dans le forum Access
    Réponses: 2
    Dernier message: 05/06/2006, 11h45
  3. Explication de code - RE
    Par deedoo dans le forum Général Python
    Réponses: 23
    Dernier message: 29/07/2005, 14h00
  4. [JVM] interactions jvm - code : agir sur les paramètres ?
    Par pierre.zelb dans le forum Général Java
    Réponses: 6
    Dernier message: 07/07/2005, 13h02
  5. Explication de code simple
    Par Clad3 dans le forum OpenGL
    Réponses: 3
    Dernier message: 20/03/2005, 11h31

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