import{S as ui,i as pi,s as ci,e as r,k as c,w as I,t as o,M as di,c as l,d as t,m as d,a as n,x as N,h as a,b as p,N as xl,G as s,g as u,y as S,L as mi,q as G,o as L,B as M,v as fi}from"../../chunks/vendor-hf-doc-builder.js";import{I as Be}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as gl}from"../../chunks/CodeBlock-hf-doc-builder.js";import{D as vi}from"../../chunks/DocNotebookDropdown-hf-doc-builder.js";function hi($l){let V,pt,T,K,Ye,he,_o,Ce,bo,Ke,qo,ct,Ee,dt,Q,wo,Qe,yo,jo,mt,R,W,We,_e,xo,Xe,go,ft,X,$o,Ze,ko,Co,vt,De,es,Do,ht,Pe,Po,Et,k,Z,ss,zo,Ao,ts,Oo,Io,No,y,os,So,Go,as,Lo,Mo,rs,Vo,To,ls,Ro,Uo,Jo,j,ns,Ho,Fo,is,Bo,Yo,us,Ko,Qo,ps,Wo,Xo,_t,ee,Zo,se,ea,cs,sa,ta,bt,h,oa,ze,aa,ra,ds,la,na,ms,ia,ua,fs,pa,ca,qt,te,da,vs,ma,fa,wt,U,oe,hs,be,va,Es,ha,yt,C,Ea,_s,_a,ba,bs,qa,wa,jt,Ae,ya,xt,f,ja,qs,xa,ga,ws,$a,ka,ys,Ca,Da,js,Pa,za,xs,Aa,Oa,gt,v,Ia,gs,Na,Sa,$s,Ga,La,ks,Ma,Va,Cs,Ta,Ra,Ds,Ua,Ja,$t,x,Ha,Ps,Fa,Ba,zs,Ya,Ka,As,Qa,Wa,kt,qe,Ct,ae,Xa,we,Za,er,Dt,b,kl,Pt,Oe,sr,zt,J,re,Os,ye,tr,Is,or,At,Ie,ar,Ot,Ne,rr,It,Se,lr,Nt,le,Ns,nr,ir,Ss,ur,St,ne,pr,Gs,cr,dr,Gt,je,Lt,q,Cl,Mt,H,ie,Ls,xe,mr,Ge,fr,Ms,vr,Vt,ue,hr,Vs,Er,_r,Tt,E,br,Ts,qr,wr,Rs,yr,jr,Us,xr,gr,Js,$r,kr,Rt,pe,Cr,Hs,Dr,Pr,Ut,D,ce,Fs,zr,Ar,Bs,Or,Ir,Nr,Le,Ys,Sr,Gr,Lr,Me,Ks,Mr,Vr,Jt,de,Tr,Qs,Rr,Ur,Ht,F,me,Ws,ge,Jr,Xs,Hr,Ft,P,Fr,Zs,Br,Yr,et,Kr,Qr,Bt,m,Wr,st,Xr,Zr,tt,el,sl,Ve,tl,ol,ot,al,rl,at,ll,nl,rt,il,ul,Yt,$e,Kt,fe,pl,ke,cl,dl,Qt,w,Dl,Wt,z,ml,lt,fl,vl,nt,hl,El,Xt,Te,_l,Zt;return he=new Be({}),Ee=new vi({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/chapter9/section3.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/chapter9/section3.ipynb"}]}}),_e=new Be({}),be=new Be({}),qe=new gl({props:{code:`


`,highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">import</span> gradio <span class="hljs-keyword">as</span> gr


<span class="hljs-keyword">def</span> <span class="hljs-title function_">reverse_audio</span>(<span class="hljs-params">audio</span>):
    sr, data = audio
    reversed_audio = (sr, np.flipud(data))
    <span class="hljs-keyword">return</span> reversed_audio


mic = gr.Audio(source=<span class="hljs-string">&quot;microphone&quot;</span>, <span class="hljs-built_in">type</span>=<span class="hljs-string">&quot;numpy&quot;</span>, label=<span class="hljs-string">&quot;Speak here...&quot;</span>)
gr.Interface(reverse_audio, mic, <span class="hljs-string">&quot;audio&quot;</span>).launch()`}}),ye=new Be({}),je=new gl({props:{code:`



`,highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">import</span> gradio <span class="hljs-keyword">as</span> gr

notes = [<span class="hljs-string">&quot;C&quot;</span>, <span class="hljs-string">&quot;C#&quot;</span>, <span class="hljs-string">&quot;D&quot;</span>, <span class="hljs-string">&quot;D#&quot;</span>, <span class="hljs-string">&quot;E&quot;</span>, <span class="hljs-string">&quot;F&quot;</span>, <span class="hljs-string">&quot;F#&quot;</span>, <span class="hljs-string">&quot;G&quot;</span>, <span class="hljs-string">&quot;G#&quot;</span>, <span class="hljs-string">&quot;A&quot;</span>, <span class="hljs-string">&quot;A#&quot;</span>, <span class="hljs-string">&quot;B&quot;</span>]


<span class="hljs-keyword">def</span> <span class="hljs-title function_">generate_tone</span>(<span class="hljs-params">note, octave, duration</span>):
    sr = <span class="hljs-number">48000</span>
    a4_freq, tones_from_a4 = <span class="hljs-number">440</span>, <span class="hljs-number">12</span> * (octave - <span class="hljs-number">4</span>) + (note - <span class="hljs-number">9</span>)
    frequency = a4_freq * <span class="hljs-number">2</span> ** (tones_from_a4 / <span class="hljs-number">12</span>)
    duration = <span class="hljs-built_in">int</span>(duration)
    audio = np.linspace(<span class="hljs-number">0</span>, duration, duration * sr)
    audio = (<span class="hljs-number">20000</span> * np.sin(audio * (<span class="hljs-number">2</span> * np.pi * frequency))).astype(np.int16)
    <span class="hljs-keyword">return</span> (sr, audio)


gr.Interface(
    generate_tone,
    [
        gr.Dropdown(notes, <span class="hljs-built_in">type</span>=<span class="hljs-string">&quot;index&quot;</span>),
        gr.Slider(minimum=<span class="hljs-number">4</span>, maximum=<span class="hljs-number">6</span>, step=<span class="hljs-number">1</span>),
        gr.Textbox(<span class="hljs-built_in">type</span>=<span class="hljs-string">&quot;number&quot;</span>, value=<span class="hljs-number">1</span>, label=<span class="hljs-string">&quot;Duration in seconds&quot;</span>),
    ],
    <span class="hljs-string">&quot;audio&quot;</span>,
).launch()`}}),xe=new Be({}),ge=new Be({}),$e=new gl({props:{code:`



`,highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline
<span class="hljs-keyword">import</span> gradio <span class="hljs-keyword">as</span> gr

model = pipeline(<span class="hljs-string">&quot;automatic-speech-recognition&quot;</span>)


<span class="hljs-keyword">def</span> <span class="hljs-title function_">transcribe_audio</span>(<span class="hljs-params">mic=<span class="hljs-literal">None</span>, file=<span class="hljs-literal">None</span></span>):
    <span class="hljs-keyword">if</span> mic <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">None</span>:
        audio = mic
    <span class="hljs-keyword">elif</span> file <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">None</span>:
        audio = file
    <span class="hljs-keyword">else</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-string">&quot;You must either provide a mic recording or a file&quot;</span>
    transcription = model(audio)[<span class="hljs-string">&quot;text&quot;</span>]
    <span class="hljs-keyword">return</span> transcription


gr.Interface(
    fn=transcribe_audio,
    inputs=[
        gr.Audio(source=<span class="hljs-string">&quot;microphone&quot;</span>, <span class="hljs-built_in">type</span>=<span class="hljs-string">&quot;filepath&quot;</span>, optional=<span class="hljs-literal">True</span>),
        gr.Audio(source=<span class="hljs-string">&quot;upload&quot;</span>, <span class="hljs-built_in">type</span>=<span class="hljs-string">&quot;filepath&quot;</span>, optional=<span class="hljs-literal">True</span>),
    ],
    outputs=<span class="hljs-string">&quot;text&quot;</span>,
).launch()`}}),{c(){V=r("meta"),pt=c(),T=r("h1"),K=r("a"),Ye=r("span"),I(he.$$.fragment),_o=c(),Ce=r("span"),bo=o("Comprendre la classe "),Ke=r("i"),qo=o("Interface"),ct=c(),I(Ee.$$.fragment),dt=c(),Q=r("p"),wo=o("Dans cette section, nous allons examiner de plus pr\xE8s la classe "),Qe=r("code"),yo=o("Interface"),jo=o(", et comprendre les principaux param\xE8tres utilis\xE9s pour en cr\xE9er une."),mt=c(),R=r("h2"),W=r("a"),We=r("span"),I(_e.$$.fragment),xo=c(),Xe=r("span"),go=o("Comment cr\xE9er une interface"),ft=c(),X=r("p"),$o=o("Vous remarquerez que la classe "),Ze=r("code"),ko=o("Interface"),Co=o(" a 3 param\xE8tres obligatoires :"),vt=c(),De=r("p"),es=r("code"),Do=o("Interface(fn, inputs, outputs, ...)"),ht=c(),Pe=r("p"),Po=o("Ces param\xE8tres sont :"),Et=c(),k=r("ul"),Z=r("li"),ss=r("code"),zo=o("fn"),Ao=o(": la fonction de pr\xE9diction qui est envelopp\xE9e par l\u2019interface "),ts=r("em"),Oo=o("Gradio"),Io=o(". Cette fonction peut prendre un ou plusieurs param\xE8tres et retourner une ou plusieurs valeurs."),No=c(),y=r("li"),os=r("code"),So=o("inputs"),Go=o(": le(s) type(s) de composant(s) d\u2019entr\xE9e. "),as=r("em"),Lo=o("Gradio"),Mo=o(" fournit de nombreux composants pr\xE9construits tels que"),rs=r("code"),Vo=o('"image"'),To=o(" ou "),ls=r("code"),Ro=o('"mic"'),Uo=o("."),Jo=c(),j=r("li"),ns=r("code"),Ho=o("outputs"),Fo=o(": le(s) type(s) de composant(s) de sortie. Encore une fois, "),is=r("em"),Bo=o("Gradio"),Yo=o(" fournit de nombreux composants pr\xE9-construits, par ex. "),us=r("code"),Ko=o('"image"'),Qo=o(" ou "),ps=r("code"),Wo=o('"label"'),Xo=o("."),_t=c(),ee=r("p"),Zo=o("Pour une liste compl\xE8te des composants, "),se=r("a"),ea=o("jetez un coup d\u2019\u0153il \xE0 la documentation de "),cs=r("em"),sa=o("Gradio"),ta=o(". Chaque composant pr\xE9construit peut \xEAtre personnalis\xE9 en instanciant la classe correspondant au composant."),bt=c(),h=r("p"),oa=o("Par exemple, comme nous l\u2019avons vu dans la "),ze=r("a"),aa=o("section pr\xE9c\xE9dente"),ra=o(", au lieu de passer le param\xE8tre "),ds=r("code"),la=o("inputs"),na=o(" par "),ms=r("code"),ia=o('"textbox"'),ua=o(", vous pouvez passer un composant "),fs=r("code"),pa=o('Textbox(lines=7, label="Prompt")'),ca=o(" pour cr\xE9er une zone de texte avec 7 lignes et un label."),qt=c(),te=r("p"),da=o("Voyons un autre exemple, cette fois avec un composant "),vs=r("code"),ma=o("Audio"),fa=o("."),wt=c(),U=r("h2"),oe=r("a"),hs=r("span"),I(be.$$.fragment),va=c(),Es=r("span"),ha=o("Un exemple simple avec audio"),yt=c(),C=r("p"),Ea=o("Comme mentionn\xE9 pr\xE9c\xE9demment, "),_s=r("em"),_a=o("Gradio"),ba=o(` fournit de nombreuses entr\xE9es et sorties diff\xE9rentes.
Construisons donc une `),bs=r("code"),qa=o("Interface"),wa=o(" qui fonctionne avec l\u2019audio."),jt=c(),Ae=r("p"),ya=o("Dans cet exemple, nous allons construire une fonction audio-vers-audio qui prend un fichier audio et l\u2019inverse simplement."),xt=c(),f=r("p"),ja=o("Nous utiliserons comme entr\xE9e le composant "),qs=r("code"),xa=o("Audio"),ga=o(". Lorsque vous utilisez le composant "),ws=r("code"),$a=o("Audio"),ka=o(", vous pouvez sp\xE9cifier si vous voulez que la "),ys=r("code"),Ca=o("source"),Da=o(" de l\u2019audio soit un fichier que l\u2019utilisateur t\xE9l\xE9charge ou un microphone avec lequel l\u2019utilisateur enregistre sa voix. Dans ce cas, nous allons choisir un microphone. Juste pour le plaisir, nous allons ajouter une \xE9tiquette \xE0 notre "),js=r("code"),Pa=o("Audio"),za=o(" qui dit \xAB "),xs=r("em"),Aa=o("Speak here\u2026"),Oa=o(" \xBB (Parler ici)."),gt=c(),v=r("p"),Ia=o("De plus, nous aimerions recevoir l\u2019audio sous la forme d\u2019un tableau numpy afin de pouvoir facilement l\u2019inverser. Nous allons donc d\xE9finir le "),gs=r("code"),Na=o('"type"'),Sa=o(" comme \xE9tant "),$s=r("code"),Ga=o('"numpy"'),La=o(", ce qui permet de passer les donn\xE9es d\u2019entr\xE9e comme un "),ks=r("em"),Ma=o("tuple"),Va=o(" de ("),Cs=r("code"),Ta=o("sample_rate"),Ra=o(", "),Ds=r("code"),Ua=o("data"),Ja=o(") dans notre fonction."),$t=c(),x=r("p"),Ha=o("Nous utiliserons \xE9galement le composant de sortie "),Ps=r("code"),Fa=o("Audio"),Ba=o(" qui peut automatiquement rendre un "),zs=r("em"),Ya=o("tuple"),Ka=o(` avec un taux d\u2019\xE9chantillonnage et un tableau numpy de donn\xE9es comme un fichier audio lisible.
Dans ce cas, nous n\u2019avons pas besoin de faire de personnalisation, donc nous utiliserons le raccourci de la cha\xEEne `),As=r("code"),Qa=o('"audio"'),Wa=o("."),kt=c(),I(qe.$$.fragment),Ct=c(),ae=r("p"),Xa=o("Le code ci-dessus produira une interface comme celle qui suit (si votre navigateur ne vous demande pas l\u2019autorisation pour acc\xE9der au microphone, "),we=r("a"),Za=o("ouvrez la d\xE9mo dans un onglet s\xE9par\xE9"),er=o(")."),Dt=c(),b=r("iframe"),Pt=c(),Oe=r("p"),sr=o("Vous devriez maintenant \xEAtre capable d\u2019enregistrer votre voix et de vous entendre parler \xE0 l\u2019envers. Effrayant \u{1F47B} !"),zt=c(),J=r("h2"),re=r("a"),Os=r("span"),I(ye.$$.fragment),tr=c(),Is=r("span"),or=o("G\xE9rer les entr\xE9es et sorties multiples"),At=c(),Ie=r("p"),ar=o(`Imaginons que nous ayons une fonction plus compliqu\xE9e, avec plusieurs entr\xE9es et sorties.
Dans l\u2019exemple ci-dessous, nous avons une fonction qui prend un index de liste d\xE9roulante, une valeur de curseur et un nombre, et renvoie un \xE9chantillon audio d\u2019une tonalit\xE9 musicale.`),Ot=c(),Ne=r("p"),rr=o("Regardez comment nous passons une liste de composants d\u2019entr\xE9e et de sortie, et voyez si vous pouvez suivre ce qui se passe."),It=c(),Se=r("p"),lr=o("La cl\xE9 ici est que lorsque vous passez :"),Nt=c(),le=r("ul"),Ns=r("li"),nr=o("une liste de composants d\u2019entr\xE9e, chaque composant correspond \xE0 un param\xE8tre dans l\u2019ordre."),ir=c(),Ss=r("li"),ur=o("une liste de composants de sortie, chaque composant correspond \xE0 une valeur retourn\xE9e."),St=c(),ne=r("p"),pr=o("L\u2019extrait de code ci-dessous montre comment trois composants d\u2019entr\xE9e correspondent aux trois arguments de la fonction "),Gs=r("code"),cr=o("generate_tone()"),dr=o(" :"),Gt=c(),I(je.$$.fragment),Lt=c(),q=r("iframe"),Mt=c(),H=r("h3"),ie=r("a"),Ls=r("span"),I(xe.$$.fragment),mr=c(),Ge=r("span"),fr=o("La m\xE9thode "),Ms=r("code"),vr=o("launch()"),Vt=c(),ue=r("p"),hr=o("Jusqu\u2019\xE0 pr\xE9sent, nous avons utilis\xE9 la m\xE9thode "),Vs=r("code"),Er=o("launch()"),_r=o(" pour lancer l\u2019interface, mais nous n\u2019avons pas vraiment discut\xE9 de ce qu\u2019elle fait."),Tt=c(),E=r("p"),br=o("Par d\xE9faut, la m\xE9thode "),Ts=r("code"),qr=o("launch()"),wr=o(" lancera la d\xE9mo dans un serveur web qui tourne localement. Si vous ex\xE9cutez votre code dans un "),Rs=r("em"),yr=o("notebook"),jr=o(" Jupyter ou Colab, "),Us=r("em"),xr=o("Gradio"),gr=o(" va int\xE9grer l\u2019interface graphique de la d\xE9mo dans le "),Js=r("em"),$r=o("notebook"),kr=o(" afin que vous puissiez l\u2019utiliser facilement."),Rt=c(),pe=r("p"),Cr=o("Vous pouvez personnaliser le comportement de "),Hs=r("code"),Dr=o("launch()"),Pr=o(" \xE0 travers diff\xE9rents param\xE8tres :"),Ut=c(),D=r("ul"),ce=r("li"),Fs=r("code"),zr=o("inline"),Ar=o(" : si vous voulez afficher l\u2019interface en ligne sur les "),Bs=r("em"),Or=o("notebooks"),Ir=o(" Python."),Nr=c(),Le=r("li"),Ys=r("code"),Sr=o("inbrowser"),Gr=o(" : pour lancer automatiquement l\u2019interface dans un nouvel onglet du navigateur par d\xE9faut."),Lr=c(),Me=r("li"),Ks=r("code"),Mr=o("share"),Vr=o(" : si vous voulez cr\xE9er un lien public partageable depuis votre ordinateur pour l\u2019interface. Un peu comme un lien Google Drive !"),Jt=c(),de=r("p"),Tr=o("Nous couvrirons le param\xE8tre "),Qs=r("code"),Rr=o("share"),Ur=o(" plus en d\xE9tail dans la section suivante !"),Ht=c(),F=r("h2"),me=r("a"),Ws=r("span"),I(ge.$$.fragment),Jr=c(),Xs=r("span"),Hr=o("\u270F\uFE0F Appliquons \xE7a !"),Ft=c(),P=r("p"),Fr=o("Construisons une interface qui vous permette de faire la d\xE9monstration d\u2019un mod\xE8le de "),Zs=r("strong"),Br=o("reconnaissance vocale"),Yr=o(`.
Pour rendre la chose int\xE9ressante, nous accepterons `),et=r("em"),Kr=o("soit"),Qr=o(" une entr\xE9e micro, soit un fichier t\xE9l\xE9charg\xE9."),Bt=c(),m=r("p"),Wr=o("Comme d\u2019habitude, nous allons charger notre mod\xE8le de reconnaissance vocale en utilisant la fonction "),st=r("code"),Xr=o("pipeline()"),Zr=o(" de \u{1F917} "),tt=r("em"),el=o("Transformers"),sl=o(`.
Si vous avez besoin d\u2019un rafra\xEEchissement rapide, vous pouvez revenir \xE0 `),Ve=r("a"),tl=o("cette section du chapitre 1"),ol=o(". Ensuite, nous allons impl\xE9menter une fonction "),ot=r("code"),al=o("transcribe_audio()"),rl=o(" qui traite l\u2019audio et retourne la transcription (en anglais). Enfin, nous allons envelopper cette fonction dans une "),at=r("code"),ll=o("Interface"),nl=o(" avec les composants "),rt=r("code"),il=o("Audio"),ul=o(" pour les entr\xE9es et juste le texte pour la sortie. Au total, le code de cette application est le suivant :"),Yt=c(),I($e.$$.fragment),Kt=c(),fe=r("p"),pl=o("Si votre navigateur ne vous demande pas l\u2019autorisation pour acc\xE9der au microphone, "),ke=r("a"),cl=o("ouvrez la d\xE9mo dans un onglet s\xE9par\xE9"),dl=o("."),Qt=c(),w=r("iframe"),Wt=c(),z=r("p"),ml=o("Voil\xE0, c\u2019est fait ! Vous pouvez maintenant utiliser cette interface pour transcrire de l\u2019audio. Remarquez ici qu\u2019en passant le param\xE8tre "),lt=r("code"),fl=o("optional"),vl=o(" \xE0 "),nt=r("code"),hl=o("True"),El=o(", nous permettons \xE0 l\u2019utilisateur de soit fournir un microphone ou un fichier audio (ou aucun des deux, mais cela retournera un message d\u2019erreur)."),Xt=c(),Te=r("p"),_l=o("Continuez pour voir comment partager votre interface avec d\u2019autres !"),this.h()},l(e){const i=di('[data-svelte="svelte-1phssyn"]',document.head);V=l(i,"META",{name:!0,content:!0}),i.forEach(t),pt=d(e),T=l(e,"H1",{class:!0});var eo=n(T);K=l(eo,"A",{id:!0,class:!0,href:!0});var Pl=n(K);Ye=l(Pl,"SPAN",{});var zl=n(Ye);N(he.$$.fragment,zl),zl.forEach(t),Pl.forEach(t),_o=d(eo),Ce=l(eo,"SPAN",{});var bl=n(Ce);bo=a(bl,"Comprendre la classe "),Ke=l(bl,"I",{});var Al=n(Ke);qo=a(Al,"Interface"),Al.forEach(t),bl.forEach(t),eo.forEach(t),ct=d(e),N(Ee.$$.fragment,e),dt=d(e),Q=l(e,"P",{});var so=n(Q);wo=a(so,"Dans cette section, nous allons examiner de plus pr\xE8s la classe "),Qe=l(so,"CODE",{});var Ol=n(Qe);yo=a(Ol,"Interface"),Ol.forEach(t),jo=a(so,", et comprendre les principaux param\xE8tres utilis\xE9s pour en cr\xE9er une."),so.forEach(t),mt=d(e),R=l(e,"H2",{class:!0});var to=n(R);W=l(to,"A",{id:!0,class:!0,href:!0});var Il=n(W);We=l(Il,"SPAN",{});var Nl=n(We);N(_e.$$.fragment,Nl),Nl.forEach(t),Il.forEach(t),xo=d(to),Xe=l(to,"SPAN",{});var Sl=n(Xe);go=a(Sl,"Comment cr\xE9er une interface"),Sl.forEach(t),to.forEach(t),ft=d(e),X=l(e,"P",{});var oo=n(X);$o=a(oo,"Vous remarquerez que la classe "),Ze=l(oo,"CODE",{});var Gl=n(Ze);ko=a(Gl,"Interface"),Gl.forEach(t),Co=a(oo," a 3 param\xE8tres obligatoires :"),oo.forEach(t),vt=d(e),De=l(e,"P",{});var Ll=n(De);es=l(Ll,"CODE",{});var Ml=n(es);Do=a(Ml,"Interface(fn, inputs, outputs, ...)"),Ml.forEach(t),Ll.forEach(t),ht=d(e),Pe=l(e,"P",{});var Vl=n(Pe);Po=a(Vl,"Ces param\xE8tres sont :"),Vl.forEach(t),Et=d(e),k=l(e,"UL",{});var Re=n(k);Z=l(Re,"LI",{});var it=n(Z);ss=l(it,"CODE",{});var Tl=n(ss);zo=a(Tl,"fn"),Tl.forEach(t),Ao=a(it,": la fonction de pr\xE9diction qui est envelopp\xE9e par l\u2019interface "),ts=l(it,"EM",{});var Rl=n(ts);Oo=a(Rl,"Gradio"),Rl.forEach(t),Io=a(it,". Cette fonction peut prendre un ou plusieurs param\xE8tres et retourner une ou plusieurs valeurs."),it.forEach(t),No=d(Re),y=l(Re,"LI",{});var B=n(y);os=l(B,"CODE",{});var Ul=n(os);So=a(Ul,"inputs"),Ul.forEach(t),Go=a(B,": le(s) type(s) de composant(s) d\u2019entr\xE9e. "),as=l(B,"EM",{});var Jl=n(as);Lo=a(Jl,"Gradio"),Jl.forEach(t),Mo=a(B," fournit de nombreux composants pr\xE9construits tels que"),rs=l(B,"CODE",{});var Hl=n(rs);Vo=a(Hl,'"image"'),Hl.forEach(t),To=a(B," ou "),ls=l(B,"CODE",{});var Fl=n(ls);Ro=a(Fl,'"mic"'),Fl.forEach(t),Uo=a(B,"."),B.forEach(t),Jo=d(Re),j=l(Re,"LI",{});var Y=n(j);ns=l(Y,"CODE",{});var Bl=n(ns);Ho=a(Bl,"outputs"),Bl.forEach(t),Fo=a(Y,": le(s) type(s) de composant(s) de sortie. Encore une fois, "),is=l(Y,"EM",{});var Yl=n(is);Bo=a(Yl,"Gradio"),Yl.forEach(t),Yo=a(Y," fournit de nombreux composants pr\xE9-construits, par ex. "),us=l(Y,"CODE",{});var Kl=n(us);Ko=a(Kl,'"image"'),Kl.forEach(t),Qo=a(Y," ou "),ps=l(Y,"CODE",{});var Ql=n(ps);Wo=a(Ql,'"label"'),Ql.forEach(t),Xo=a(Y,"."),Y.forEach(t),Re.forEach(t),_t=d(e),ee=l(e,"P",{});var ao=n(ee);Zo=a(ao,"Pour une liste compl\xE8te des composants, "),se=l(ao,"A",{href:!0,rel:!0});var ql=n(se);ea=a(ql,"jetez un coup d\u2019\u0153il \xE0 la documentation de "),cs=l(ql,"EM",{});var Wl=n(cs);sa=a(Wl,"Gradio"),Wl.forEach(t),ql.forEach(t),ta=a(ao,". Chaque composant pr\xE9construit peut \xEAtre personnalis\xE9 en instanciant la classe correspondant au composant."),ao.forEach(t),bt=d(e),h=l(e,"P",{});var A=n(h);oa=a(A,"Par exemple, comme nous l\u2019avons vu dans la "),ze=l(A,"A",{href:!0});var Xl=n(ze);aa=a(Xl,"section pr\xE9c\xE9dente"),Xl.forEach(t),ra=a(A,", au lieu de passer le param\xE8tre "),ds=l(A,"CODE",{});var Zl=n(ds);la=a(Zl,"inputs"),Zl.forEach(t),na=a(A," par "),ms=l(A,"CODE",{});var en=n(ms);ia=a(en,'"textbox"'),en.forEach(t),ua=a(A,", vous pouvez passer un composant "),fs=l(A,"CODE",{});var sn=n(fs);pa=a(sn,'Textbox(lines=7, label="Prompt")'),sn.forEach(t),ca=a(A," pour cr\xE9er une zone de texte avec 7 lignes et un label."),A.forEach(t),qt=d(e),te=l(e,"P",{});var ro=n(te);da=a(ro,"Voyons un autre exemple, cette fois avec un composant "),vs=l(ro,"CODE",{});var tn=n(vs);ma=a(tn,"Audio"),tn.forEach(t),fa=a(ro,"."),ro.forEach(t),wt=d(e),U=l(e,"H2",{class:!0});var lo=n(U);oe=l(lo,"A",{id:!0,class:!0,href:!0});var on=n(oe);hs=l(on,"SPAN",{});var an=n(hs);N(be.$$.fragment,an),an.forEach(t),on.forEach(t),va=d(lo),Es=l(lo,"SPAN",{});var rn=n(Es);ha=a(rn,"Un exemple simple avec audio"),rn.forEach(t),lo.forEach(t),yt=d(e),C=l(e,"P",{});var Ue=n(C);Ea=a(Ue,"Comme mentionn\xE9 pr\xE9c\xE9demment, "),_s=l(Ue,"EM",{});var ln=n(_s);_a=a(ln,"Gradio"),ln.forEach(t),ba=a(Ue,` fournit de nombreuses entr\xE9es et sorties diff\xE9rentes.
Construisons donc une `),bs=l(Ue,"CODE",{});var nn=n(bs);qa=a(nn,"Interface"),nn.forEach(t),wa=a(Ue," qui fonctionne avec l\u2019audio."),Ue.forEach(t),jt=d(e),Ae=l(e,"P",{});var un=n(Ae);ya=a(un,"Dans cet exemple, nous allons construire une fonction audio-vers-audio qui prend un fichier audio et l\u2019inverse simplement."),un.forEach(t),xt=d(e),f=l(e,"P",{});var g=n(f);ja=a(g,"Nous utiliserons comme entr\xE9e le composant "),qs=l(g,"CODE",{});var pn=n(qs);xa=a(pn,"Audio"),pn.forEach(t),ga=a(g,". Lorsque vous utilisez le composant "),ws=l(g,"CODE",{});var cn=n(ws);$a=a(cn,"Audio"),cn.forEach(t),ka=a(g,", vous pouvez sp\xE9cifier si vous voulez que la "),ys=l(g,"CODE",{});var dn=n(ys);Ca=a(dn,"source"),dn.forEach(t),Da=a(g," de l\u2019audio soit un fichier que l\u2019utilisateur t\xE9l\xE9charge ou un microphone avec lequel l\u2019utilisateur enregistre sa voix. Dans ce cas, nous allons choisir un microphone. Juste pour le plaisir, nous allons ajouter une \xE9tiquette \xE0 notre "),js=l(g,"CODE",{});var mn=n(js);Pa=a(mn,"Audio"),mn.forEach(t),za=a(g," qui dit \xAB "),xs=l(g,"EM",{});var fn=n(xs);Aa=a(fn,"Speak here\u2026"),fn.forEach(t),Oa=a(g," \xBB (Parler ici)."),g.forEach(t),gt=d(e),v=l(e,"P",{});var $=n(v);Ia=a($,"De plus, nous aimerions recevoir l\u2019audio sous la forme d\u2019un tableau numpy afin de pouvoir facilement l\u2019inverser. Nous allons donc d\xE9finir le "),gs=l($,"CODE",{});var vn=n(gs);Na=a(vn,'"type"'),vn.forEach(t),Sa=a($," comme \xE9tant "),$s=l($,"CODE",{});var hn=n($s);Ga=a(hn,'"numpy"'),hn.forEach(t),La=a($,", ce qui permet de passer les donn\xE9es d\u2019entr\xE9e comme un "),ks=l($,"EM",{});var En=n(ks);Ma=a(En,"tuple"),En.forEach(t),Va=a($," de ("),Cs=l($,"CODE",{});var _n=n(Cs);Ta=a(_n,"sample_rate"),_n.forEach(t),Ra=a($,", "),Ds=l($,"CODE",{});var bn=n(Ds);Ua=a(bn,"data"),bn.forEach(t),Ja=a($,") dans notre fonction."),$.forEach(t),$t=d(e),x=l(e,"P",{});var ve=n(x);Ha=a(ve,"Nous utiliserons \xE9galement le composant de sortie "),Ps=l(ve,"CODE",{});var qn=n(Ps);Fa=a(qn,"Audio"),qn.forEach(t),Ba=a(ve," qui peut automatiquement rendre un "),zs=l(ve,"EM",{});var wn=n(zs);Ya=a(wn,"tuple"),wn.forEach(t),Ka=a(ve,` avec un taux d\u2019\xE9chantillonnage et un tableau numpy de donn\xE9es comme un fichier audio lisible.
Dans ce cas, nous n\u2019avons pas besoin de faire de personnalisation, donc nous utiliserons le raccourci de la cha\xEEne `),As=l(ve,"CODE",{});var yn=n(As);Qa=a(yn,'"audio"'),yn.forEach(t),Wa=a(ve,"."),ve.forEach(t),kt=d(e),N(qe.$$.fragment,e),Ct=d(e),ae=l(e,"P",{});var no=n(ae);Xa=a(no,"Le code ci-dessus produira une interface comme celle qui suit (si votre navigateur ne vous demande pas l\u2019autorisation pour acc\xE9der au microphone, "),we=l(no,"A",{href:!0,target:!0});var jn=n(we);Za=a(jn,"ouvrez la d\xE9mo dans un onglet s\xE9par\xE9"),jn.forEach(t),er=a(no,")."),no.forEach(t),Dt=d(e),b=l(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),n(b).forEach(t),Pt=d(e),Oe=l(e,"P",{});var xn=n(Oe);sr=a(xn,"Vous devriez maintenant \xEAtre capable d\u2019enregistrer votre voix et de vous entendre parler \xE0 l\u2019envers. Effrayant \u{1F47B} !"),xn.forEach(t),zt=d(e),J=l(e,"H2",{class:!0});var io=n(J);re=l(io,"A",{id:!0,class:!0,href:!0});var gn=n(re);Os=l(gn,"SPAN",{});var $n=n(Os);N(ye.$$.fragment,$n),$n.forEach(t),gn.forEach(t),tr=d(io),Is=l(io,"SPAN",{});var kn=n(Is);or=a(kn,"G\xE9rer les entr\xE9es et sorties multiples"),kn.forEach(t),io.forEach(t),At=d(e),Ie=l(e,"P",{});var Cn=n(Ie);ar=a(Cn,`Imaginons que nous ayons une fonction plus compliqu\xE9e, avec plusieurs entr\xE9es et sorties.
Dans l\u2019exemple ci-dessous, nous avons une fonction qui prend un index de liste d\xE9roulante, une valeur de curseur et un nombre, et renvoie un \xE9chantillon audio d\u2019une tonalit\xE9 musicale.`),Cn.forEach(t),Ot=d(e),Ne=l(e,"P",{});var Dn=n(Ne);rr=a(Dn,"Regardez comment nous passons une liste de composants d\u2019entr\xE9e et de sortie, et voyez si vous pouvez suivre ce qui se passe."),Dn.forEach(t),It=d(e),Se=l(e,"P",{});var Pn=n(Se);lr=a(Pn,"La cl\xE9 ici est que lorsque vous passez :"),Pn.forEach(t),Nt=d(e),le=l(e,"UL",{});var uo=n(le);Ns=l(uo,"LI",{});var zn=n(Ns);nr=a(zn,"une liste de composants d\u2019entr\xE9e, chaque composant correspond \xE0 un param\xE8tre dans l\u2019ordre."),zn.forEach(t),ir=d(uo),Ss=l(uo,"LI",{});var An=n(Ss);ur=a(An,"une liste de composants de sortie, chaque composant correspond \xE0 une valeur retourn\xE9e."),An.forEach(t),uo.forEach(t),St=d(e),ne=l(e,"P",{});var po=n(ne);pr=a(po,"L\u2019extrait de code ci-dessous montre comment trois composants d\u2019entr\xE9e correspondent aux trois arguments de la fonction "),Gs=l(po,"CODE",{});var On=n(Gs);cr=a(On,"generate_tone()"),On.forEach(t),dr=a(po," :"),po.forEach(t),Gt=d(e),N(je.$$.fragment,e),Lt=d(e),q=l(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),n(q).forEach(t),Mt=d(e),H=l(e,"H3",{class:!0});var co=n(H);ie=l(co,"A",{id:!0,class:!0,href:!0});var In=n(ie);Ls=l(In,"SPAN",{});var Nn=n(Ls);N(xe.$$.fragment,Nn),Nn.forEach(t),In.forEach(t),mr=d(co),Ge=l(co,"SPAN",{});var wl=n(Ge);fr=a(wl,"La m\xE9thode "),Ms=l(wl,"CODE",{});var Sn=n(Ms);vr=a(Sn,"launch()"),Sn.forEach(t),wl.forEach(t),co.forEach(t),Vt=d(e),ue=l(e,"P",{});var mo=n(ue);hr=a(mo,"Jusqu\u2019\xE0 pr\xE9sent, nous avons utilis\xE9 la m\xE9thode "),Vs=l(mo,"CODE",{});var Gn=n(Vs);Er=a(Gn,"launch()"),Gn.forEach(t),_r=a(mo," pour lancer l\u2019interface, mais nous n\u2019avons pas vraiment discut\xE9 de ce qu\u2019elle fait."),mo.forEach(t),Tt=d(e),E=l(e,"P",{});var O=n(E);br=a(O,"Par d\xE9faut, la m\xE9thode "),Ts=l(O,"CODE",{});var Ln=n(Ts);qr=a(Ln,"launch()"),Ln.forEach(t),wr=a(O," lancera la d\xE9mo dans un serveur web qui tourne localement. Si vous ex\xE9cutez votre code dans un "),Rs=l(O,"EM",{});var Mn=n(Rs);yr=a(Mn,"notebook"),Mn.forEach(t),jr=a(O," Jupyter ou Colab, "),Us=l(O,"EM",{});var Vn=n(Us);xr=a(Vn,"Gradio"),Vn.forEach(t),gr=a(O," va int\xE9grer l\u2019interface graphique de la d\xE9mo dans le "),Js=l(O,"EM",{});var Tn=n(Js);$r=a(Tn,"notebook"),Tn.forEach(t),kr=a(O," afin que vous puissiez l\u2019utiliser facilement."),O.forEach(t),Rt=d(e),pe=l(e,"P",{});var fo=n(pe);Cr=a(fo,"Vous pouvez personnaliser le comportement de "),Hs=l(fo,"CODE",{});var Rn=n(Hs);Dr=a(Rn,"launch()"),Rn.forEach(t),Pr=a(fo," \xE0 travers diff\xE9rents param\xE8tres :"),fo.forEach(t),Ut=d(e),D=l(e,"UL",{});var Je=n(D);ce=l(Je,"LI",{});var ut=n(ce);Fs=l(ut,"CODE",{});var Un=n(Fs);zr=a(Un,"inline"),Un.forEach(t),Ar=a(ut," : si vous voulez afficher l\u2019interface en ligne sur les "),Bs=l(ut,"EM",{});var Jn=n(Bs);Or=a(Jn,"notebooks"),Jn.forEach(t),Ir=a(ut," Python."),ut.forEach(t),Nr=d(Je),Le=l(Je,"LI",{});var yl=n(Le);Ys=l(yl,"CODE",{});var Hn=n(Ys);Sr=a(Hn,"inbrowser"),Hn.forEach(t),Gr=a(yl," : pour lancer automatiquement l\u2019interface dans un nouvel onglet du navigateur par d\xE9faut."),yl.forEach(t),Lr=d(Je),Me=l(Je,"LI",{});var jl=n(Me);Ks=l(jl,"CODE",{});var Fn=n(Ks);Mr=a(Fn,"share"),Fn.forEach(t),Vr=a(jl," : si vous voulez cr\xE9er un lien public partageable depuis votre ordinateur pour l\u2019interface. Un peu comme un lien Google Drive !"),jl.forEach(t),Je.forEach(t),Jt=d(e),de=l(e,"P",{});var vo=n(de);Tr=a(vo,"Nous couvrirons le param\xE8tre "),Qs=l(vo,"CODE",{});var Bn=n(Qs);Rr=a(Bn,"share"),Bn.forEach(t),Ur=a(vo," plus en d\xE9tail dans la section suivante !"),vo.forEach(t),Ht=d(e),F=l(e,"H2",{class:!0});var ho=n(F);me=l(ho,"A",{id:!0,class:!0,href:!0});var Yn=n(me);Ws=l(Yn,"SPAN",{});var Kn=n(Ws);N(ge.$$.fragment,Kn),Kn.forEach(t),Yn.forEach(t),Jr=d(ho),Xs=l(ho,"SPAN",{});var Qn=n(Xs);Hr=a(Qn,"\u270F\uFE0F Appliquons \xE7a !"),Qn.forEach(t),ho.forEach(t),Ft=d(e),P=l(e,"P",{});var He=n(P);Fr=a(He,"Construisons une interface qui vous permette de faire la d\xE9monstration d\u2019un mod\xE8le de "),Zs=l(He,"STRONG",{});var Wn=n(Zs);Br=a(Wn,"reconnaissance vocale"),Wn.forEach(t),Yr=a(He,`.
Pour rendre la chose int\xE9ressante, nous accepterons `),et=l(He,"EM",{});var Xn=n(et);Kr=a(Xn,"soit"),Xn.forEach(t),Qr=a(He," une entr\xE9e micro, soit un fichier t\xE9l\xE9charg\xE9."),He.forEach(t),Bt=d(e),m=l(e,"P",{});var _=n(m);Wr=a(_,"Comme d\u2019habitude, nous allons charger notre mod\xE8le de reconnaissance vocale en utilisant la fonction "),st=l(_,"CODE",{});var Zn=n(st);Xr=a(Zn,"pipeline()"),Zn.forEach(t),Zr=a(_," de \u{1F917} "),tt=l(_,"EM",{});var ei=n(tt);el=a(ei,"Transformers"),ei.forEach(t),sl=a(_,`.
Si vous avez besoin d\u2019un rafra\xEEchissement rapide, vous pouvez revenir \xE0 `),Ve=l(_,"A",{href:!0});var si=n(Ve);tl=a(si,"cette section du chapitre 1"),si.forEach(t),ol=a(_,". Ensuite, nous allons impl\xE9menter une fonction "),ot=l(_,"CODE",{});var ti=n(ot);al=a(ti,"transcribe_audio()"),ti.forEach(t),rl=a(_," qui traite l\u2019audio et retourne la transcription (en anglais). Enfin, nous allons envelopper cette fonction dans une "),at=l(_,"CODE",{});var oi=n(at);ll=a(oi,"Interface"),oi.forEach(t),nl=a(_," avec les composants "),rt=l(_,"CODE",{});var ai=n(rt);il=a(ai,"Audio"),ai.forEach(t),ul=a(_," pour les entr\xE9es et juste le texte pour la sortie. Au total, le code de cette application est le suivant :"),_.forEach(t),Yt=d(e),N($e.$$.fragment,e),Kt=d(e),fe=l(e,"P",{});var Eo=n(fe);pl=a(Eo,"Si votre navigateur ne vous demande pas l\u2019autorisation pour acc\xE9der au microphone, "),ke=l(Eo,"A",{href:!0,target:!0});var ri=n(ke);cl=a(ri,"ouvrez la d\xE9mo dans un onglet s\xE9par\xE9"),ri.forEach(t),dl=a(Eo,"."),Eo.forEach(t),Qt=d(e),w=l(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),n(w).forEach(t),Wt=d(e),z=l(e,"P",{});var Fe=n(z);ml=a(Fe,"Voil\xE0, c\u2019est fait ! Vous pouvez maintenant utiliser cette interface pour transcrire de l\u2019audio. Remarquez ici qu\u2019en passant le param\xE8tre "),lt=l(Fe,"CODE",{});var li=n(lt);fl=a(li,"optional"),li.forEach(t),vl=a(Fe," \xE0 "),nt=l(Fe,"CODE",{});var ni=n(nt);hl=a(ni,"True"),ni.forEach(t),El=a(Fe,", nous permettons \xE0 l\u2019utilisateur de soit fournir un microphone ou un fichier audio (ou aucun des deux, mais cela retournera un message d\u2019erreur)."),Fe.forEach(t),Xt=d(e),Te=l(e,"P",{});var ii=n(Te);_l=a(ii,"Continuez pour voir comment partager votre interface avec d\u2019autres !"),ii.forEach(t),this.h()},h(){p(V,"name","hf:doc:metadata"),p(V,"content",JSON.stringify(Ei)),p(K,"id","comprendre-la-classe-iinterfacei"),p(K,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),p(K,"href","#comprendre-la-classe-iinterfacei"),p(T,"class","relative group"),p(W,"id","comment-crer-une-interface"),p(W,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),p(W,"href","#comment-crer-une-interface"),p(R,"class","relative group"),p(se,"href","https://gradio.app/docs"),p(se,"rel","nofollow"),p(ze,"href","/course/fr/chapter9/2"),p(oe,"id","un-exemple-simple-avec-audio"),p(oe,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),p(oe,"href","#un-exemple-simple-avec-audio"),p(U,"class","relative group"),p(we,"href","https://huggingface.co/spaces/course-demos/audio-reverse"),p(we,"target","_blank"),xl(b.src,kl="https://hf.space/gradioiframe/course-demos/audio-reverse/+")||p(b,"src",kl),p(b,"frameborder","0"),p(b,"height","250"),p(b,"title","Gradio app"),p(b,"class","container p-0 flex-grow space-iframe"),p(b,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),p(b,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),p(re,"id","grer-les-entres-et-sorties-multiples"),p(re,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),p(re,"href","#grer-les-entres-et-sorties-multiples"),p(J,"class","relative group"),xl(q.src,Cl="https://hf.space/gradioiframe/course-demos/generate-tone/+")||p(q,"src",Cl),p(q,"frameborder","0"),p(q,"height","450"),p(q,"title","Gradio app"),p(q,"class","container p-0 flex-grow space-iframe"),p(q,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),p(q,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),p(ie,"id","la-mthode-launch"),p(ie,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),p(ie,"href","#la-mthode-launch"),p(H,"class","relative group"),p(me,"id","appliquons-a"),p(me,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),p(me,"href","#appliquons-a"),p(F,"class","relative group"),p(Ve,"href","/course/fr/chapter1/3"),p(ke,"href","https://huggingface.co/spaces/course-demos/audio-reverse"),p(ke,"target","_blank"),xl(w.src,Dl="https://hf.space/gradioiframe/course-demos/asr/+")||p(w,"src",Dl),p(w,"frameborder","0"),p(w,"height","550"),p(w,"title","Gradio app"),p(w,"class","container p-0 flex-grow space-iframe"),p(w,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),p(w,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads")},m(e,i){s(document.head,V),u(e,pt,i),u(e,T,i),s(T,K),s(K,Ye),S(he,Ye,null),s(T,_o),s(T,Ce),s(Ce,bo),s(Ce,Ke),s(Ke,qo),u(e,ct,i),S(Ee,e,i),u(e,dt,i),u(e,Q,i),s(Q,wo),s(Q,Qe),s(Qe,yo),s(Q,jo),u(e,mt,i),u(e,R,i),s(R,W),s(W,We),S(_e,We,null),s(R,xo),s(R,Xe),s(Xe,go),u(e,ft,i),u(e,X,i),s(X,$o),s(X,Ze),s(Ze,ko),s(X,Co),u(e,vt,i),u(e,De,i),s(De,es),s(es,Do),u(e,ht,i),u(e,Pe,i),s(Pe,Po),u(e,Et,i),u(e,k,i),s(k,Z),s(Z,ss),s(ss,zo),s(Z,Ao),s(Z,ts),s(ts,Oo),s(Z,Io),s(k,No),s(k,y),s(y,os),s(os,So),s(y,Go),s(y,as),s(as,Lo),s(y,Mo),s(y,rs),s(rs,Vo),s(y,To),s(y,ls),s(ls,Ro),s(y,Uo),s(k,Jo),s(k,j),s(j,ns),s(ns,Ho),s(j,Fo),s(j,is),s(is,Bo),s(j,Yo),s(j,us),s(us,Ko),s(j,Qo),s(j,ps),s(ps,Wo),s(j,Xo),u(e,_t,i),u(e,ee,i),s(ee,Zo),s(ee,se),s(se,ea),s(se,cs),s(cs,sa),s(ee,ta),u(e,bt,i),u(e,h,i),s(h,oa),s(h,ze),s(ze,aa),s(h,ra),s(h,ds),s(ds,la),s(h,na),s(h,ms),s(ms,ia),s(h,ua),s(h,fs),s(fs,pa),s(h,ca),u(e,qt,i),u(e,te,i),s(te,da),s(te,vs),s(vs,ma),s(te,fa),u(e,wt,i),u(e,U,i),s(U,oe),s(oe,hs),S(be,hs,null),s(U,va),s(U,Es),s(Es,ha),u(e,yt,i),u(e,C,i),s(C,Ea),s(C,_s),s(_s,_a),s(C,ba),s(C,bs),s(bs,qa),s(C,wa),u(e,jt,i),u(e,Ae,i),s(Ae,ya),u(e,xt,i),u(e,f,i),s(f,ja),s(f,qs),s(qs,xa),s(f,ga),s(f,ws),s(ws,$a),s(f,ka),s(f,ys),s(ys,Ca),s(f,Da),s(f,js),s(js,Pa),s(f,za),s(f,xs),s(xs,Aa),s(f,Oa),u(e,gt,i),u(e,v,i),s(v,Ia),s(v,gs),s(gs,Na),s(v,Sa),s(v,$s),s($s,Ga),s(v,La),s(v,ks),s(ks,Ma),s(v,Va),s(v,Cs),s(Cs,Ta),s(v,Ra),s(v,Ds),s(Ds,Ua),s(v,Ja),u(e,$t,i),u(e,x,i),s(x,Ha),s(x,Ps),s(Ps,Fa),s(x,Ba),s(x,zs),s(zs,Ya),s(x,Ka),s(x,As),s(As,Qa),s(x,Wa),u(e,kt,i),S(qe,e,i),u(e,Ct,i),u(e,ae,i),s(ae,Xa),s(ae,we),s(we,Za),s(ae,er),u(e,Dt,i),u(e,b,i),u(e,Pt,i),u(e,Oe,i),s(Oe,sr),u(e,zt,i),u(e,J,i),s(J,re),s(re,Os),S(ye,Os,null),s(J,tr),s(J,Is),s(Is,or),u(e,At,i),u(e,Ie,i),s(Ie,ar),u(e,Ot,i),u(e,Ne,i),s(Ne,rr),u(e,It,i),u(e,Se,i),s(Se,lr),u(e,Nt,i),u(e,le,i),s(le,Ns),s(Ns,nr),s(le,ir),s(le,Ss),s(Ss,ur),u(e,St,i),u(e,ne,i),s(ne,pr),s(ne,Gs),s(Gs,cr),s(ne,dr),u(e,Gt,i),S(je,e,i),u(e,Lt,i),u(e,q,i),u(e,Mt,i),u(e,H,i),s(H,ie),s(ie,Ls),S(xe,Ls,null),s(H,mr),s(H,Ge),s(Ge,fr),s(Ge,Ms),s(Ms,vr),u(e,Vt,i),u(e,ue,i),s(ue,hr),s(ue,Vs),s(Vs,Er),s(ue,_r),u(e,Tt,i),u(e,E,i),s(E,br),s(E,Ts),s(Ts,qr),s(E,wr),s(E,Rs),s(Rs,yr),s(E,jr),s(E,Us),s(Us,xr),s(E,gr),s(E,Js),s(Js,$r),s(E,kr),u(e,Rt,i),u(e,pe,i),s(pe,Cr),s(pe,Hs),s(Hs,Dr),s(pe,Pr),u(e,Ut,i),u(e,D,i),s(D,ce),s(ce,Fs),s(Fs,zr),s(ce,Ar),s(ce,Bs),s(Bs,Or),s(ce,Ir),s(D,Nr),s(D,Le),s(Le,Ys),s(Ys,Sr),s(Le,Gr),s(D,Lr),s(D,Me),s(Me,Ks),s(Ks,Mr),s(Me,Vr),u(e,Jt,i),u(e,de,i),s(de,Tr),s(de,Qs),s(Qs,Rr),s(de,Ur),u(e,Ht,i),u(e,F,i),s(F,me),s(me,Ws),S(ge,Ws,null),s(F,Jr),s(F,Xs),s(Xs,Hr),u(e,Ft,i),u(e,P,i),s(P,Fr),s(P,Zs),s(Zs,Br),s(P,Yr),s(P,et),s(et,Kr),s(P,Qr),u(e,Bt,i),u(e,m,i),s(m,Wr),s(m,st),s(st,Xr),s(m,Zr),s(m,tt),s(tt,el),s(m,sl),s(m,Ve),s(Ve,tl),s(m,ol),s(m,ot),s(ot,al),s(m,rl),s(m,at),s(at,ll),s(m,nl),s(m,rt),s(rt,il),s(m,ul),u(e,Yt,i),S($e,e,i),u(e,Kt,i),u(e,fe,i),s(fe,pl),s(fe,ke),s(ke,cl),s(fe,dl),u(e,Qt,i),u(e,w,i),u(e,Wt,i),u(e,z,i),s(z,ml),s(z,lt),s(lt,fl),s(z,vl),s(z,nt),s(nt,hl),s(z,El),u(e,Xt,i),u(e,Te,i),s(Te,_l),Zt=!0},p:mi,i(e){Zt||(G(he.$$.fragment,e),G(Ee.$$.fragment,e),G(_e.$$.fragment,e),G(be.$$.fragment,e),G(qe.$$.fragment,e),G(ye.$$.fragment,e),G(je.$$.fragment,e),G(xe.$$.fragment,e),G(ge.$$.fragment,e),G($e.$$.fragment,e),Zt=!0)},o(e){L(he.$$.fragment,e),L(Ee.$$.fragment,e),L(_e.$$.fragment,e),L(be.$$.fragment,e),L(qe.$$.fragment,e),L(ye.$$.fragment,e),L(je.$$.fragment,e),L(xe.$$.fragment,e),L(ge.$$.fragment,e),L($e.$$.fragment,e),Zt=!1},d(e){t(V),e&&t(pt),e&&t(T),M(he),e&&t(ct),M(Ee,e),e&&t(dt),e&&t(Q),e&&t(mt),e&&t(R),M(_e),e&&t(ft),e&&t(X),e&&t(vt),e&&t(De),e&&t(ht),e&&t(Pe),e&&t(Et),e&&t(k),e&&t(_t),e&&t(ee),e&&t(bt),e&&t(h),e&&t(qt),e&&t(te),e&&t(wt),e&&t(U),M(be),e&&t(yt),e&&t(C),e&&t(jt),e&&t(Ae),e&&t(xt),e&&t(f),e&&t(gt),e&&t(v),e&&t($t),e&&t(x),e&&t(kt),M(qe,e),e&&t(Ct),e&&t(ae),e&&t(Dt),e&&t(b),e&&t(Pt),e&&t(Oe),e&&t(zt),e&&t(J),M(ye),e&&t(At),e&&t(Ie),e&&t(Ot),e&&t(Ne),e&&t(It),e&&t(Se),e&&t(Nt),e&&t(le),e&&t(St),e&&t(ne),e&&t(Gt),M(je,e),e&&t(Lt),e&&t(q),e&&t(Mt),e&&t(H),M(xe),e&&t(Vt),e&&t(ue),e&&t(Tt),e&&t(E),e&&t(Rt),e&&t(pe),e&&t(Ut),e&&t(D),e&&t(Jt),e&&t(de),e&&t(Ht),e&&t(F),M(ge),e&&t(Ft),e&&t(P),e&&t(Bt),e&&t(m),e&&t(Yt),M($e,e),e&&t(Kt),e&&t(fe),e&&t(Qt),e&&t(w),e&&t(Wt),e&&t(z),e&&t(Xt),e&&t(Te)}}}const Ei={local:"comprendre-la-classe-iinterfacei",sections:[{local:"comment-crer-une-interface",title:"Comment cr\xE9er une interface"},{local:"un-exemple-simple-avec-audio",title:"Un exemple simple avec audio"},{local:"grer-les-entres-et-sorties-multiples",sections:[{local:"la-mthode-launch",title:"La m\xE9thode `launch()`"}],title:"G\xE9rer les entr\xE9es et sorties multiples"},{local:"appliquons-a",title:"\u270F\uFE0F Appliquons \xE7a !"}],title:"Comprendre la classe <i>Interface</i>"};function _i($l){return fi(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ji extends ui{constructor(V){super();pi(this,V,_i,hi,ci,{})}}export{ji as default,Ei as metadata};
