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


def reverse_audio(audio):
    sr, data = audio
    reversed_audio = (sr, np.flipud(data))
    return reversed_audio


mic = gr.Audio(source="microphone", type="numpy", label="Speak here...")
gr.Interface(reverse_audio, mic, "audio").launch()`,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()`}}),we=new Be({}),ge=new $n({props:{code:`import numpy as np
import gradio as gr

notes = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]


def generate_tone(note, octave, duration):
    sr = 48000
    a4_freq, tones_from_a4 = 440, 12 * (octave - 4) + (note - 9)
    frequency = a4_freq * 2 ** (tones_from_a4 / 12)
    duration = int(duration)
    audio = np.linspace(0, duration, duration * sr)
    audio = (20000 * np.sin(audio * (2 * np.pi * frequency))).astype(np.int16)
    return (sr, audio)


gr.Interface(
    generate_tone,
    [
        gr.Dropdown(notes, type="index"),
        gr.Slider(minimum=4, maximum=6, step=1),
        gr.Textbox(type="number", value=1, label="Duration in seconds"),
    ],
    "audio",
).launch()`,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({}),je=new Be({}),$e=new $n({props:{code:`from transformers import pipeline
import gradio as gr

model = pipeline("automatic-speech-recognition")


def transcribe_audio(mic=None, file=None):
    if mic is not None:
        audio = mic
    elif file is not None:
        audio = file
    else:
        return "You must either provide a mic recording or a file"
    transcription = model(audio)["text"]
    return transcription


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