import{S as Gs,i as Ls,s as Ms,e as r,k as u,w as x,t,M as Ts,c as n,d as a,m as d,a as s,x as O,h as i,b as c,N as tn,G as o,g as p,y as S,L as Us,q as N,o as G,B as L,v as Fs}from"../../chunks/vendor-hf-doc-builder.js";import{I as Be}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as rn}from"../../chunks/CodeBlock-hf-doc-builder.js";import{C as Qs}from"../../chunks/CourseFloatingBanner-hf-doc-builder.js";import"../../chunks/DocNotebookDropdown-hf-doc-builder.js";function Hs(nn){let M,aa,T,R,Re,ue,ct,Je,ut,ta,de,ia,J,dt,Ye,mt,ft,ra,U,Y,Ke,me,ht,Ve,vt,na,j,_t,We,Et,bt,Xe,wt,yt,sa,ke,Ze,qt,la,ze,gt,pa,k,$e,eo,jt,kt,zt,v,oo,$t,Ct,ao,It,Pt,to,At,Dt,io,xt,Ot,ro,St,Nt,Gt,z,no,Lt,Mt,so,Tt,Ut,lo,Ft,Qt,ca,K,Ht,fe,Bt,Rt,ua,_,Jt,Ce,Yt,Kt,po,Vt,Wt,co,Xt,Zt,uo,ei,oi,da,V,ai,mo,ti,ii,ma,F,W,fo,he,ri,ho,ni,fa,X,si,vo,li,pi,ha,Ie,ci,va,m,ui,_o,di,mi,Eo,fi,hi,bo,vi,_i,wo,Ei,bi,yo,wi,yi,qo,qi,gi,go,ji,ki,_a,E,zi,jo,$i,Ci,ko,Ii,Pi,zo,Ai,Di,$o,xi,Oi,Ea,$,Si,Co,Ni,Gi,Io,Li,Mi,ba,ve,wa,Z,Ti,_e,Ui,Fi,ya,b,sn,qa,Pe,Qi,ga,Q,ee,Po,Ee,Hi,Ao,Bi,ja,Ae,Ri,ka,De,Ji,za,xe,Yi,$a,oe,Do,Ki,Vi,xo,Wi,Ca,ae,Xi,Oo,Zi,er,Ia,be,Pa,w,ln,Aa,H,te,So,we,or,Oe,ar,No,tr,Da,ie,ir,Go,rr,nr,xa,re,sr,Lo,lr,pr,Oa,ne,cr,Mo,ur,dr,Sa,C,se,To,mr,fr,Uo,hr,vr,_r,Se,Fo,Er,br,wr,Ne,Qo,yr,qr,Na,le,gr,Ho,jr,kr,Ga,B,pe,Bo,ye,zr,Ro,$r,La,I,Cr,Jo,Ir,Pr,Yo,Ar,Dr,Ma,f,xr,Ko,Or,Sr,Ge,Nr,Gr,Vo,Lr,Mr,Wo,Tr,Ur,Xo,Fr,Qr,Ta,qe,Ua,ce,Hr,ge,Br,Rr,Fa,y,pn,Qa,P,Jr,Zo,Yr,Kr,ea,Vr,Wr,Ha,Le,Xr,Ba;return ue=new Be({}),de=new Qs({props:{chapter:9,classNames:"absolute z-10 right-0 top-0",notebooks:[{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"}]}}),me=new Be({}),he=new Be({}),ve=new rn({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()`}}),Ee=new Be({}),be=new rn({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()`}}),we=new Be({}),ye=new Be({}),qe=new rn({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(){M=r("meta"),aa=u(),T=r("h1"),R=r("a"),Re=r("span"),x(ue.$$.fragment),ct=u(),Je=r("span"),ut=t("Capire la classe Interface"),ta=u(),x(de.$$.fragment),ia=u(),J=r("p"),dt=t("In questa sezione, daremo un\u2019occhiata pi\xF9 da vicino alla classe "),Ye=r("code"),mt=t("Interface"),ft=t(` e scopriremo i
parametri principali che si usano per crearne una.`),ra=u(),U=r("h2"),Y=r("a"),Ke=r("span"),x(me.$$.fragment),ht=u(),Ve=r("span"),vt=t("Come creare una Interface"),na=u(),j=r("p"),_t=t("Si pu\xF2 notare che la classe "),We=r("code"),Et=t("Interface"),bt=t(" ("),Xe=r("em"),wt=t("interfaccia"),yt=t(") ha 3 parametri necessari:"),sa=u(),ke=r("p"),Ze=r("code"),qt=t("Interface(fn, inputs, outputs, ...)"),la=u(),ze=r("p"),gt=t("Questi parametri sono:"),pa=u(),k=r("ul"),$e=r("li"),eo=r("code"),jt=t("fn"),kt=t(": la funzione per le predizione chi viene utilizzata dall\u2019interfaccia di Gradio. Questa funzione pu\xF2 accettare uno o pi\xF9 parametri e restituire uno o pi\xF9 valori"),zt=u(),v=r("li"),oo=r("code"),$t=t("inputs"),Ct=t(": il/i tipo/i dei componenti in input. Gradio fornisce molti componenti predefiniti, come "),ao=r("code"),It=t('"image"'),Pt=t("("),to=r("em"),At=t("immagine"),Dt=t(") o "),io=r("code"),xt=t('"mic"'),Ot=t("("),ro=r("em"),St=t("microfono"),Nt=t(")."),Gt=u(),z=r("li"),no=r("code"),Lt=t("outputs"),Mt=t(": il/i tipo/i dei componenti in output. Anche in questo caso, Gradio fornisce molti componenti predefiniti, come "),so=r("code"),Tt=t('"image"'),Ut=t(" o "),lo=r("code"),Ft=t('"label"'),Qt=t("."),ca=u(),K=r("p"),Ht=t("Per un elenco completo dei componenti, "),fe=r("a"),Bt=t("consultare la documentazione di Gradio"),Rt=t(". Ogni componente predefinito pu\xF2 essere personalizzato istanziando la classe corrispondente al componente."),ua=u(),_=r("p"),Jt=t("Ad esempio, come abbiamo visto nella "),Ce=r("a"),Yt=t("sezione precedente"),Kt=t(`,
invece di passare `),po=r("code"),Vt=t('"textbox"'),Wt=t(" al parametro "),co=r("code"),Xt=t("inputs"),Zt=t(", si pu\xF2 passare un componente "),uo=r("code"),ei=t('Textbox(lines=7, label="Prompt")'),oi=t(" per creare una casella di testo con 7 righe e un\u2019etichetta."),da=u(),V=r("p"),ai=t("Diamo un\u2019occhiata a un altro esempio, questa volta con un componente "),mo=r("code"),ti=t("Audio"),ii=t("."),ma=u(),F=r("h2"),W=r("a"),fo=r("span"),x(he.$$.fragment),ri=u(),ho=r("span"),ni=t("Un semplice esempio con l'audio"),fa=u(),X=r("p"),si=t(`Come detto in precedenza, Gradio fornisce molti input e output differenti.
Costruiamo perci\xF2 una `),vo=r("code"),li=t("Interface"),pi=t(" che funziona con l\u2019audio."),ha=u(),Ie=r("p"),ci=t(`In questo esempio, svilupperemo una funzione da audio ad audio che prende un
file audio e semplicemente lo inverte.`),va=u(),m=r("p"),ui=t("Per l\u2019input utilizzeremo il componente "),_o=r("code"),di=t("Audio"),mi=t(". Quando si usa il componente "),Eo=r("code"),fi=t("Audio"),hi=t(`,
si pu\xF2 specificare se si vuole che la `),bo=r("code"),vi=t("source"),_i=t(" ("),wo=r("em"),Ei=t("sorgente"),bi=t(`) dell\u2019audio sia un file
caricato dall\u2019utente o un microfono con cui l\u2019utente pu\xF2 registrare la propria voce. In questo caso,
impostiamo `),yo=r("code"),wi=t('"microphone"'),yi=t(". Per divertimento, aggiungeremo un\u2019etichetta al nostro "),qo=r("code"),qi=t("Audio"),gi=t(` che dice
\u201CSpeak here\u2026\u201D (`),go=r("em"),ji=t("\u201CParla qui\u2026\u201D"),ki=t(")."),_a=u(),E=r("p"),zi=t(`Inoltre, vorremmo ricevere l\u2019audio come un numpy array, in modo da poterlo facilmente
\u201Cinvertire\u201D. Impostiamo quindi il `),jo=r("code"),$i=t('"type"'),Ci=t(" come "),ko=r("code"),Ii=t('"numpy"'),Pi=t(`, che passa i dati in input
come una tupla di (`),zo=r("code"),Ai=t("sample_rate"),Di=t(", "),$o=r("code"),xi=t("data"),Oi=t(") alla nostra funzione."),Ea=u(),$=r("p"),Si=t("Utilizzeremo anche il componente di output "),Co=r("code"),Ni=t("Audio"),Gi=t(`, il quale pu\xF2 convertire automaticamente
una tupla formata da una frequenza di campionamento e un numpy array di dati in un file audio riproducibile.
In questo caso, non abbiamo bisogno di fare alcuna personalizzazione, quindi useremo la stringa
`),Io=r("code"),Li=t('"audio"'),Mi=t("."),ba=u(),x(ve.$$.fragment),wa=u(),Z=r("p"),Ti=t(`Il codice precedente produrr\xE0 un\u2019interfaccia come quella qui sotto (se il tuo browser non
chiede il premesso per usare il microfono, `),_e=r("a"),Ui=t("apri il demo in una tab diversa"),Fi=t(".)"),ya=u(),b=r("iframe"),qa=u(),Pe=r("p"),Qi=t("A questo punto potresti registrare la tua voce e di sentirti parlare al contrario - spaventoso \u{1F47B}!"),ga=u(),Q=r("h2"),ee=r("a"),Po=r("span"),x(Ee.$$.fragment),Hi=u(),Ao=r("span"),Bi=t("Lavorare con pi\xF9 input e output"),ja=u(),Ae=r("p"),Ri=t(`Supponiamo di avere una funzione pi\xF9 complicata, con pi\xF9 input e output.
Nell\u2019esempio seguente, abbiamo una funzione che richiede un elenco a tendina, il valore di uno slider e un numero,
e restituisce il campione audio di una nota musicale.`),ka=u(),De=r("p"),Ji=t(`Osserva come si passa un elenco di componenti di input e di output,
e vedi se riesci a seguire quello che succede.`),za=u(),xe=r("p"),Yi=t("La questione fondamentale \xE8 che quando si passa:"),$a=u(),oe=r("ul"),Do=r("li"),Ki=t("un elenco di componenti di input, ogni componente corrisponde in ordine a un parametro."),Vi=u(),xo=r("li"),Wi=t("un elenco di componenti di output, ogni componente corrisponde a un valore restituito."),Ca=u(),ae=r("p"),Xi=t("Lo snippet di codice qui sotto mostra come tre componenti di input si abbinano ai tre argomenti della funzione "),Oo=r("code"),Zi=t("generate_tone()"),er=t(":"),Ia=u(),x(be.$$.fragment),Pa=u(),w=r("iframe"),Aa=u(),H=r("h3"),te=r("a"),So=r("span"),x(we.$$.fragment),or=u(),Oe=r("span"),ar=t("Il metodo "),No=r("code"),tr=t("launch()"),Da=u(),ie=r("p"),ir=t("Per ora, abbiamo utilizzato il metodo "),Go=r("code"),rr=t("launch()"),nr=t(` per avviare l\u2019interfaccia, ma
non abbiamo discusso realmente cosa fa.`),xa=u(),re=r("p"),sr=t("Di default, il metodo "),Lo=r("code"),lr=t("launch()"),pr=t(` avvia la demo in un web server che
che viene eseguito in locale. Se si esegue il codice in un Jupyter o Colab notebook,
Gradio incorporer\xE0 l\u2019interfaccia grafica della demo nel notebook, cos\xEC da poterla usare facilmente.`),Oa=u(),ne=r("p"),cr=t("\xC8 possibile modificare il comportamento di "),Mo=r("code"),ur=t("launch()"),dr=t(" attraverso diversi parametri:"),Sa=u(),C=r("ul"),se=r("li"),To=r("code"),mr=t("inline"),fr=t(" - per visualizzare l\u2019interfaccia "),Uo=r("em"),hr=t("inline"),vr=t(" sui notebook di Python."),_r=u(),Se=r("li"),Fo=r("code"),Er=t("inbrowser"),br=t(" - per avviare automaticamente l\u2019interfaccia in una nuova scheda del browser di default."),wr=u(),Ne=r("li"),Qo=r("code"),yr=t("share"),qr=t(" - per create un link pubblico per l\u2019interfaccia da condividere dal proprio computer. Un po\u2019 come un link di Google Drive!"),Na=u(),le=r("p"),gr=t("Il parametro "),Ho=r("code"),jr=t("share"),kr=t(" sar\xE0 trattato in modo molto pi\xF9 dettagliato nella prossima sezione!"),Ga=u(),B=r("h2"),pe=r("a"),Bo=r("span"),x(ye.$$.fragment),zr=u(),Ro=r("span"),$r=t("\u270F\uFE0F Mettiamolo in pratica!"),La=u(),I=r("p"),Cr=t("Costruiamo un\u2019interfaccia che permetta di provare un modello di "),Jo=r("strong"),Ir=t("riconoscimento vocale"),Pr=t(`.
Per renderlo interessante, accetteremo un input `),Yo=r("em"),Ar=t("qualisiasi"),Dr=t(" tra un microfono o un file caricato."),Ma=u(),f=r("p"),xr=t("Come al solito, caricheremo il nostro modello di riconoscimento vocale usando la funzione "),Ko=r("code"),Or=t("pipeline()"),Sr=t(` da \u{1F917} Transformers.
Se si ha bisogno di un ripasso veloce, si pu\xF2 tornare a `),Ge=r("a"),Nr=t("quella sezione nel Capitolo 1"),Gr=t(".     Quindi, implementeremo una funzione "),Vo=r("code"),Lr=t("transcribe_audio()"),Mr=t(" che elabora l\u2019audio e restituisce la sua trascrizione. Infine, avvolgeremo questa funzione in una "),Wo=r("code"),Tr=t("Interface"),Ur=t(" con i componenti "),Xo=r("code"),Fr=t("Audio"),Qr=t(" per gli input e solo testo per l\u2019output. Il codice completo per questa applicazione \xE8 il seguente:"),Ta=u(),x(qe.$$.fragment),Ua=u(),ce=r("p"),Hr=t("Se il tuo browser non ti chiede i permessi per il microfono, "),ge=r("a"),Br=t("apri la demo in una scheda separata"),Rr=t("."),Fa=u(),y=r("iframe"),Qa=u(),P=r("p"),Jr=t(`Ecco fatto! Ora \xE8 possibile utilizzare questa interfaccia per trascrivere l\u2019audio. Si osservi che
passando il parametro `),Zo=r("code"),Yr=t("optional"),Kr=t(" come "),ea=r("code"),Vr=t("True"),Wr=t(`, si permette all\u2019utente di
fornire o un microfono o un file audio (o nessuno dei due, ma questo restituir\xE0 un messaggio di errore).`),Ha=u(),Le=r("p"),Xr=t("Continua a leggere per scoprire come condividere la tua interfaccia con gli altri!"),this.h()},l(e){const l=Ts('[data-svelte="svelte-1phssyn"]',document.head);M=n(l,"META",{name:!0,content:!0}),l.forEach(a),aa=d(e),T=n(e,"H1",{class:!0});var Ra=s(T);R=n(Ra,"A",{id:!0,class:!0,href:!0});var cn=s(R);Re=n(cn,"SPAN",{});var un=s(Re);O(ue.$$.fragment,un),un.forEach(a),cn.forEach(a),ct=d(Ra),Je=n(Ra,"SPAN",{});var dn=s(Je);ut=i(dn,"Capire la classe Interface"),dn.forEach(a),Ra.forEach(a),ta=d(e),O(de.$$.fragment,e),ia=d(e),J=n(e,"P",{});var Ja=s(J);dt=i(Ja,"In questa sezione, daremo un\u2019occhiata pi\xF9 da vicino alla classe "),Ye=n(Ja,"CODE",{});var mn=s(Ye);mt=i(mn,"Interface"),mn.forEach(a),ft=i(Ja,` e scopriremo i
parametri principali che si usano per crearne una.`),Ja.forEach(a),ra=d(e),U=n(e,"H2",{class:!0});var Ya=s(U);Y=n(Ya,"A",{id:!0,class:!0,href:!0});var fn=s(Y);Ke=n(fn,"SPAN",{});var hn=s(Ke);O(me.$$.fragment,hn),hn.forEach(a),fn.forEach(a),ht=d(Ya),Ve=n(Ya,"SPAN",{});var vn=s(Ve);vt=i(vn,"Come creare una Interface"),vn.forEach(a),Ya.forEach(a),na=d(e),j=n(e,"P",{});var Me=s(j);_t=i(Me,"Si pu\xF2 notare che la classe "),We=n(Me,"CODE",{});var _n=s(We);Et=i(_n,"Interface"),_n.forEach(a),bt=i(Me," ("),Xe=n(Me,"EM",{});var En=s(Xe);wt=i(En,"interfaccia"),En.forEach(a),yt=i(Me,") ha 3 parametri necessari:"),Me.forEach(a),sa=d(e),ke=n(e,"P",{});var bn=s(ke);Ze=n(bn,"CODE",{});var wn=s(Ze);qt=i(wn,"Interface(fn, inputs, outputs, ...)"),wn.forEach(a),bn.forEach(a),la=d(e),ze=n(e,"P",{});var yn=s(ze);gt=i(yn,"Questi parametri sono:"),yn.forEach(a),pa=d(e),k=n(e,"UL",{});var Te=s(k);$e=n(Te,"LI",{});var Zr=s($e);eo=n(Zr,"CODE",{});var qn=s(eo);jt=i(qn,"fn"),qn.forEach(a),kt=i(Zr,": la funzione per le predizione chi viene utilizzata dall\u2019interfaccia di Gradio. Questa funzione pu\xF2 accettare uno o pi\xF9 parametri e restituire uno o pi\xF9 valori"),Zr.forEach(a),zt=d(Te),v=n(Te,"LI",{});var g=s(v);oo=n(g,"CODE",{});var gn=s(oo);$t=i(gn,"inputs"),gn.forEach(a),Ct=i(g,": il/i tipo/i dei componenti in input. Gradio fornisce molti componenti predefiniti, come "),ao=n(g,"CODE",{});var jn=s(ao);It=i(jn,'"image"'),jn.forEach(a),Pt=i(g,"("),to=n(g,"EM",{});var kn=s(to);At=i(kn,"immagine"),kn.forEach(a),Dt=i(g,") o "),io=n(g,"CODE",{});var zn=s(io);xt=i(zn,'"mic"'),zn.forEach(a),Ot=i(g,"("),ro=n(g,"EM",{});var $n=s(ro);St=i($n,"microfono"),$n.forEach(a),Nt=i(g,")."),g.forEach(a),Gt=d(Te),z=n(Te,"LI",{});var je=s(z);no=n(je,"CODE",{});var Cn=s(no);Lt=i(Cn,"outputs"),Cn.forEach(a),Mt=i(je,": il/i tipo/i dei componenti in output. Anche in questo caso, Gradio fornisce molti componenti predefiniti, come "),so=n(je,"CODE",{});var In=s(so);Tt=i(In,'"image"'),In.forEach(a),Ut=i(je," o "),lo=n(je,"CODE",{});var Pn=s(lo);Ft=i(Pn,'"label"'),Pn.forEach(a),Qt=i(je,"."),je.forEach(a),Te.forEach(a),ca=d(e),K=n(e,"P",{});var Ka=s(K);Ht=i(Ka,"Per un elenco completo dei componenti, "),fe=n(Ka,"A",{href:!0,rel:!0});var An=s(fe);Bt=i(An,"consultare la documentazione di Gradio"),An.forEach(a),Rt=i(Ka,". Ogni componente predefinito pu\xF2 essere personalizzato istanziando la classe corrispondente al componente."),Ka.forEach(a),ua=d(e),_=n(e,"P",{});var A=s(_);Jt=i(A,"Ad esempio, come abbiamo visto nella "),Ce=n(A,"A",{href:!0});var Dn=s(Ce);Yt=i(Dn,"sezione precedente"),Dn.forEach(a),Kt=i(A,`,
invece di passare `),po=n(A,"CODE",{});var xn=s(po);Vt=i(xn,'"textbox"'),xn.forEach(a),Wt=i(A," al parametro "),co=n(A,"CODE",{});var On=s(co);Xt=i(On,"inputs"),On.forEach(a),Zt=i(A,", si pu\xF2 passare un componente "),uo=n(A,"CODE",{});var Sn=s(uo);ei=i(Sn,'Textbox(lines=7, label="Prompt")'),Sn.forEach(a),oi=i(A," per creare una casella di testo con 7 righe e un\u2019etichetta."),A.forEach(a),da=d(e),V=n(e,"P",{});var Va=s(V);ai=i(Va,"Diamo un\u2019occhiata a un altro esempio, questa volta con un componente "),mo=n(Va,"CODE",{});var Nn=s(mo);ti=i(Nn,"Audio"),Nn.forEach(a),ii=i(Va,"."),Va.forEach(a),ma=d(e),F=n(e,"H2",{class:!0});var Wa=s(F);W=n(Wa,"A",{id:!0,class:!0,href:!0});var Gn=s(W);fo=n(Gn,"SPAN",{});var Ln=s(fo);O(he.$$.fragment,Ln),Ln.forEach(a),Gn.forEach(a),ri=d(Wa),ho=n(Wa,"SPAN",{});var Mn=s(ho);ni=i(Mn,"Un semplice esempio con l'audio"),Mn.forEach(a),Wa.forEach(a),fa=d(e),X=n(e,"P",{});var Xa=s(X);si=i(Xa,`Come detto in precedenza, Gradio fornisce molti input e output differenti.
Costruiamo perci\xF2 una `),vo=n(Xa,"CODE",{});var Tn=s(vo);li=i(Tn,"Interface"),Tn.forEach(a),pi=i(Xa," che funziona con l\u2019audio."),Xa.forEach(a),ha=d(e),Ie=n(e,"P",{});var Un=s(Ie);ci=i(Un,`In questo esempio, svilupperemo una funzione da audio ad audio che prende un
file audio e semplicemente lo inverte.`),Un.forEach(a),va=d(e),m=n(e,"P",{});var h=s(m);ui=i(h,"Per l\u2019input utilizzeremo il componente "),_o=n(h,"CODE",{});var Fn=s(_o);di=i(Fn,"Audio"),Fn.forEach(a),mi=i(h,". Quando si usa il componente "),Eo=n(h,"CODE",{});var Qn=s(Eo);fi=i(Qn,"Audio"),Qn.forEach(a),hi=i(h,`,
si pu\xF2 specificare se si vuole che la `),bo=n(h,"CODE",{});var Hn=s(bo);vi=i(Hn,"source"),Hn.forEach(a),_i=i(h," ("),wo=n(h,"EM",{});var Bn=s(wo);Ei=i(Bn,"sorgente"),Bn.forEach(a),bi=i(h,`) dell\u2019audio sia un file
caricato dall\u2019utente o un microfono con cui l\u2019utente pu\xF2 registrare la propria voce. In questo caso,
impostiamo `),yo=n(h,"CODE",{});var Rn=s(yo);wi=i(Rn,'"microphone"'),Rn.forEach(a),yi=i(h,". Per divertimento, aggiungeremo un\u2019etichetta al nostro "),qo=n(h,"CODE",{});var Jn=s(qo);qi=i(Jn,"Audio"),Jn.forEach(a),gi=i(h,` che dice
\u201CSpeak here\u2026\u201D (`),go=n(h,"EM",{});var Yn=s(go);ji=i(Yn,"\u201CParla qui\u2026\u201D"),Yn.forEach(a),ki=i(h,")."),h.forEach(a),_a=d(e),E=n(e,"P",{});var D=s(E);zi=i(D,`Inoltre, vorremmo ricevere l\u2019audio come un numpy array, in modo da poterlo facilmente
\u201Cinvertire\u201D. Impostiamo quindi il `),jo=n(D,"CODE",{});var Kn=s(jo);$i=i(Kn,'"type"'),Kn.forEach(a),Ci=i(D," come "),ko=n(D,"CODE",{});var Vn=s(ko);Ii=i(Vn,'"numpy"'),Vn.forEach(a),Pi=i(D,`, che passa i dati in input
come una tupla di (`),zo=n(D,"CODE",{});var Wn=s(zo);Ai=i(Wn,"sample_rate"),Wn.forEach(a),Di=i(D,", "),$o=n(D,"CODE",{});var Xn=s($o);xi=i(Xn,"data"),Xn.forEach(a),Oi=i(D,") alla nostra funzione."),D.forEach(a),Ea=d(e),$=n(e,"P",{});var Ue=s($);Si=i(Ue,"Utilizzeremo anche il componente di output "),Co=n(Ue,"CODE",{});var Zn=s(Co);Ni=i(Zn,"Audio"),Zn.forEach(a),Gi=i(Ue,`, il quale pu\xF2 convertire automaticamente
una tupla formata da una frequenza di campionamento e un numpy array di dati in un file audio riproducibile.
In questo caso, non abbiamo bisogno di fare alcuna personalizzazione, quindi useremo la stringa
`),Io=n(Ue,"CODE",{});var es=s(Io);Li=i(es,'"audio"'),es.forEach(a),Mi=i(Ue,"."),Ue.forEach(a),ba=d(e),O(ve.$$.fragment,e),wa=d(e),Z=n(e,"P",{});var Za=s(Z);Ti=i(Za,`Il codice precedente produrr\xE0 un\u2019interfaccia come quella qui sotto (se il tuo browser non
chiede il premesso per usare il microfono, `),_e=n(Za,"A",{href:!0,target:!0});var os=s(_e);Ui=i(os,"apri il demo in una tab diversa"),os.forEach(a),Fi=i(Za,".)"),Za.forEach(a),ya=d(e),b=n(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),s(b).forEach(a),qa=d(e),Pe=n(e,"P",{});var as=s(Pe);Qi=i(as,"A questo punto potresti registrare la tua voce e di sentirti parlare al contrario - spaventoso \u{1F47B}!"),as.forEach(a),ga=d(e),Q=n(e,"H2",{class:!0});var et=s(Q);ee=n(et,"A",{id:!0,class:!0,href:!0});var ts=s(ee);Po=n(ts,"SPAN",{});var is=s(Po);O(Ee.$$.fragment,is),is.forEach(a),ts.forEach(a),Hi=d(et),Ao=n(et,"SPAN",{});var rs=s(Ao);Bi=i(rs,"Lavorare con pi\xF9 input e output"),rs.forEach(a),et.forEach(a),ja=d(e),Ae=n(e,"P",{});var ns=s(Ae);Ri=i(ns,`Supponiamo di avere una funzione pi\xF9 complicata, con pi\xF9 input e output.
Nell\u2019esempio seguente, abbiamo una funzione che richiede un elenco a tendina, il valore di uno slider e un numero,
e restituisce il campione audio di una nota musicale.`),ns.forEach(a),ka=d(e),De=n(e,"P",{});var ss=s(De);Ji=i(ss,`Osserva come si passa un elenco di componenti di input e di output,
e vedi se riesci a seguire quello che succede.`),ss.forEach(a),za=d(e),xe=n(e,"P",{});var ls=s(xe);Yi=i(ls,"La questione fondamentale \xE8 che quando si passa:"),ls.forEach(a),$a=d(e),oe=n(e,"UL",{});var ot=s(oe);Do=n(ot,"LI",{});var ps=s(Do);Ki=i(ps,"un elenco di componenti di input, ogni componente corrisponde in ordine a un parametro."),ps.forEach(a),Vi=d(ot),xo=n(ot,"LI",{});var cs=s(xo);Wi=i(cs,"un elenco di componenti di output, ogni componente corrisponde a un valore restituito."),cs.forEach(a),ot.forEach(a),Ca=d(e),ae=n(e,"P",{});var at=s(ae);Xi=i(at,"Lo snippet di codice qui sotto mostra come tre componenti di input si abbinano ai tre argomenti della funzione "),Oo=n(at,"CODE",{});var us=s(Oo);Zi=i(us,"generate_tone()"),us.forEach(a),er=i(at,":"),at.forEach(a),Ia=d(e),O(be.$$.fragment,e),Pa=d(e),w=n(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),s(w).forEach(a),Aa=d(e),H=n(e,"H3",{class:!0});var tt=s(H);te=n(tt,"A",{id:!0,class:!0,href:!0});var ds=s(te);So=n(ds,"SPAN",{});var ms=s(So);O(we.$$.fragment,ms),ms.forEach(a),ds.forEach(a),or=d(tt),Oe=n(tt,"SPAN",{});var en=s(Oe);ar=i(en,"Il metodo "),No=n(en,"CODE",{});var fs=s(No);tr=i(fs,"launch()"),fs.forEach(a),en.forEach(a),tt.forEach(a),Da=d(e),ie=n(e,"P",{});var it=s(ie);ir=i(it,"Per ora, abbiamo utilizzato il metodo "),Go=n(it,"CODE",{});var hs=s(Go);rr=i(hs,"launch()"),hs.forEach(a),nr=i(it,` per avviare l\u2019interfaccia, ma
non abbiamo discusso realmente cosa fa.`),it.forEach(a),xa=d(e),re=n(e,"P",{});var rt=s(re);sr=i(rt,"Di default, il metodo "),Lo=n(rt,"CODE",{});var vs=s(Lo);lr=i(vs,"launch()"),vs.forEach(a),pr=i(rt,` avvia la demo in un web server che
che viene eseguito in locale. Se si esegue il codice in un Jupyter o Colab notebook,
Gradio incorporer\xE0 l\u2019interfaccia grafica della demo nel notebook, cos\xEC da poterla usare facilmente.`),rt.forEach(a),Oa=d(e),ne=n(e,"P",{});var nt=s(ne);cr=i(nt,"\xC8 possibile modificare il comportamento di "),Mo=n(nt,"CODE",{});var _s=s(Mo);ur=i(_s,"launch()"),_s.forEach(a),dr=i(nt," attraverso diversi parametri:"),nt.forEach(a),Sa=d(e),C=n(e,"UL",{});var Fe=s(C);se=n(Fe,"LI",{});var oa=s(se);To=n(oa,"CODE",{});var Es=s(To);mr=i(Es,"inline"),Es.forEach(a),fr=i(oa," - per visualizzare l\u2019interfaccia "),Uo=n(oa,"EM",{});var bs=s(Uo);hr=i(bs,"inline"),bs.forEach(a),vr=i(oa," sui notebook di Python."),oa.forEach(a),_r=d(Fe),Se=n(Fe,"LI",{});var on=s(Se);Fo=n(on,"CODE",{});var ws=s(Fo);Er=i(ws,"inbrowser"),ws.forEach(a),br=i(on," - per avviare automaticamente l\u2019interfaccia in una nuova scheda del browser di default."),on.forEach(a),wr=d(Fe),Ne=n(Fe,"LI",{});var an=s(Ne);Qo=n(an,"CODE",{});var ys=s(Qo);yr=i(ys,"share"),ys.forEach(a),qr=i(an," - per create un link pubblico per l\u2019interfaccia da condividere dal proprio computer. Un po\u2019 come un link di Google Drive!"),an.forEach(a),Fe.forEach(a),Na=d(e),le=n(e,"P",{});var st=s(le);gr=i(st,"Il parametro "),Ho=n(st,"CODE",{});var qs=s(Ho);jr=i(qs,"share"),qs.forEach(a),kr=i(st," sar\xE0 trattato in modo molto pi\xF9 dettagliato nella prossima sezione!"),st.forEach(a),Ga=d(e),B=n(e,"H2",{class:!0});var lt=s(B);pe=n(lt,"A",{id:!0,class:!0,href:!0});var gs=s(pe);Bo=n(gs,"SPAN",{});var js=s(Bo);O(ye.$$.fragment,js),js.forEach(a),gs.forEach(a),zr=d(lt),Ro=n(lt,"SPAN",{});var ks=s(Ro);$r=i(ks,"\u270F\uFE0F Mettiamolo in pratica!"),ks.forEach(a),lt.forEach(a),La=d(e),I=n(e,"P",{});var Qe=s(I);Cr=i(Qe,"Costruiamo un\u2019interfaccia che permetta di provare un modello di "),Jo=n(Qe,"STRONG",{});var zs=s(Jo);Ir=i(zs,"riconoscimento vocale"),zs.forEach(a),Pr=i(Qe,`.
Per renderlo interessante, accetteremo un input `),Yo=n(Qe,"EM",{});var $s=s(Yo);Ar=i($s,"qualisiasi"),$s.forEach(a),Dr=i(Qe," tra un microfono o un file caricato."),Qe.forEach(a),Ma=d(e),f=n(e,"P",{});var q=s(f);xr=i(q,"Come al solito, caricheremo il nostro modello di riconoscimento vocale usando la funzione "),Ko=n(q,"CODE",{});var Cs=s(Ko);Or=i(Cs,"pipeline()"),Cs.forEach(a),Sr=i(q,` da \u{1F917} Transformers.
Se si ha bisogno di un ripasso veloce, si pu\xF2 tornare a `),Ge=n(q,"A",{href:!0});var Is=s(Ge);Nr=i(Is,"quella sezione nel Capitolo 1"),Is.forEach(a),Gr=i(q,".     Quindi, implementeremo una funzione "),Vo=n(q,"CODE",{});var Ps=s(Vo);Lr=i(Ps,"transcribe_audio()"),Ps.forEach(a),Mr=i(q," che elabora l\u2019audio e restituisce la sua trascrizione. Infine, avvolgeremo questa funzione in una "),Wo=n(q,"CODE",{});var As=s(Wo);Tr=i(As,"Interface"),As.forEach(a),Ur=i(q," con i componenti "),Xo=n(q,"CODE",{});var Ds=s(Xo);Fr=i(Ds,"Audio"),Ds.forEach(a),Qr=i(q," per gli input e solo testo per l\u2019output. Il codice completo per questa applicazione \xE8 il seguente:"),q.forEach(a),Ta=d(e),O(qe.$$.fragment,e),Ua=d(e),ce=n(e,"P",{});var pt=s(ce);Hr=i(pt,"Se il tuo browser non ti chiede i permessi per il microfono, "),ge=n(pt,"A",{href:!0,target:!0});var xs=s(ge);Br=i(xs,"apri la demo in una scheda separata"),xs.forEach(a),Rr=i(pt,"."),pt.forEach(a),Fa=d(e),y=n(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),s(y).forEach(a),Qa=d(e),P=n(e,"P",{});var He=s(P);Jr=i(He,`Ecco fatto! Ora \xE8 possibile utilizzare questa interfaccia per trascrivere l\u2019audio. Si osservi che
passando il parametro `),Zo=n(He,"CODE",{});var Os=s(Zo);Yr=i(Os,"optional"),Os.forEach(a),Kr=i(He," come "),ea=n(He,"CODE",{});var Ss=s(ea);Vr=i(Ss,"True"),Ss.forEach(a),Wr=i(He,`, si permette all\u2019utente di
fornire o un microfono o un file audio (o nessuno dei due, ma questo restituir\xE0 un messaggio di errore).`),He.forEach(a),Ha=d(e),Le=n(e,"P",{});var Ns=s(Le);Xr=i(Ns,"Continua a leggere per scoprire come condividere la tua interfaccia con gli altri!"),Ns.forEach(a),this.h()},h(){c(M,"name","hf:doc:metadata"),c(M,"content",JSON.stringify(Bs)),c(R,"id","capire-la-classe-interface"),c(R,"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"),c(R,"href","#capire-la-classe-interface"),c(T,"class","relative group"),c(Y,"id","come-creare-una-interface"),c(Y,"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"),c(Y,"href","#come-creare-una-interface"),c(U,"class","relative group"),c(fe,"href","https://gradio.app/docs"),c(fe,"rel","nofollow"),c(Ce,"href","/course/chapter9/2"),c(W,"id","un-semplice-esempio-con-laudio"),c(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"),c(W,"href","#un-semplice-esempio-con-laudio"),c(F,"class","relative group"),c(_e,"href","https://huggingface.co/spaces/course-demos/audio-reverse"),c(_e,"target","_blank"),tn(b.src,sn="https://course-demos-audio-reverse.hf.space")||c(b,"src",sn),c(b,"frameborder","0"),c(b,"height","250"),c(b,"title","Gradio app"),c(b,"class","container p-0 flex-grow space-iframe"),c(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"),c(b,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),c(ee,"id","lavorare-con-pi-input-e-output"),c(ee,"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"),c(ee,"href","#lavorare-con-pi-input-e-output"),c(Q,"class","relative group"),tn(w.src,ln="https://course-demos-generate-tone.hf.space")||c(w,"src",ln),c(w,"frameborder","0"),c(w,"height","450"),c(w,"title","Gradio app"),c(w,"class","container p-0 flex-grow space-iframe"),c(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"),c(w,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),c(te,"id","il-metodo-launch"),c(te,"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"),c(te,"href","#il-metodo-launch"),c(H,"class","relative group"),c(pe,"id","mettiamolo-in-pratica"),c(pe,"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"),c(pe,"href","#mettiamolo-in-pratica"),c(B,"class","relative group"),c(Ge,"href","/course/chapter1/3"),c(ge,"href","https://huggingface.co/spaces/course-demos/audio-reverse"),c(ge,"target","_blank"),tn(y.src,pn="https://course-demos-asr.hf.space")||c(y,"src",pn),c(y,"frameborder","0"),c(y,"height","550"),c(y,"title","Gradio app"),c(y,"class","container p-0 flex-grow space-iframe"),c(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"),c(y,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads")},m(e,l){o(document.head,M),p(e,aa,l),p(e,T,l),o(T,R),o(R,Re),S(ue,Re,null),o(T,ct),o(T,Je),o(Je,ut),p(e,ta,l),S(de,e,l),p(e,ia,l),p(e,J,l),o(J,dt),o(J,Ye),o(Ye,mt),o(J,ft),p(e,ra,l),p(e,U,l),o(U,Y),o(Y,Ke),S(me,Ke,null),o(U,ht),o(U,Ve),o(Ve,vt),p(e,na,l),p(e,j,l),o(j,_t),o(j,We),o(We,Et),o(j,bt),o(j,Xe),o(Xe,wt),o(j,yt),p(e,sa,l),p(e,ke,l),o(ke,Ze),o(Ze,qt),p(e,la,l),p(e,ze,l),o(ze,gt),p(e,pa,l),p(e,k,l),o(k,$e),o($e,eo),o(eo,jt),o($e,kt),o(k,zt),o(k,v),o(v,oo),o(oo,$t),o(v,Ct),o(v,ao),o(ao,It),o(v,Pt),o(v,to),o(to,At),o(v,Dt),o(v,io),o(io,xt),o(v,Ot),o(v,ro),o(ro,St),o(v,Nt),o(k,Gt),o(k,z),o(z,no),o(no,Lt),o(z,Mt),o(z,so),o(so,Tt),o(z,Ut),o(z,lo),o(lo,Ft),o(z,Qt),p(e,ca,l),p(e,K,l),o(K,Ht),o(K,fe),o(fe,Bt),o(K,Rt),p(e,ua,l),p(e,_,l),o(_,Jt),o(_,Ce),o(Ce,Yt),o(_,Kt),o(_,po),o(po,Vt),o(_,Wt),o(_,co),o(co,Xt),o(_,Zt),o(_,uo),o(uo,ei),o(_,oi),p(e,da,l),p(e,V,l),o(V,ai),o(V,mo),o(mo,ti),o(V,ii),p(e,ma,l),p(e,F,l),o(F,W),o(W,fo),S(he,fo,null),o(F,ri),o(F,ho),o(ho,ni),p(e,fa,l),p(e,X,l),o(X,si),o(X,vo),o(vo,li),o(X,pi),p(e,ha,l),p(e,Ie,l),o(Ie,ci),p(e,va,l),p(e,m,l),o(m,ui),o(m,_o),o(_o,di),o(m,mi),o(m,Eo),o(Eo,fi),o(m,hi),o(m,bo),o(bo,vi),o(m,_i),o(m,wo),o(wo,Ei),o(m,bi),o(m,yo),o(yo,wi),o(m,yi),o(m,qo),o(qo,qi),o(m,gi),o(m,go),o(go,ji),o(m,ki),p(e,_a,l),p(e,E,l),o(E,zi),o(E,jo),o(jo,$i),o(E,Ci),o(E,ko),o(ko,Ii),o(E,Pi),o(E,zo),o(zo,Ai),o(E,Di),o(E,$o),o($o,xi),o(E,Oi),p(e,Ea,l),p(e,$,l),o($,Si),o($,Co),o(Co,Ni),o($,Gi),o($,Io),o(Io,Li),o($,Mi),p(e,ba,l),S(ve,e,l),p(e,wa,l),p(e,Z,l),o(Z,Ti),o(Z,_e),o(_e,Ui),o(Z,Fi),p(e,ya,l),p(e,b,l),p(e,qa,l),p(e,Pe,l),o(Pe,Qi),p(e,ga,l),p(e,Q,l),o(Q,ee),o(ee,Po),S(Ee,Po,null),o(Q,Hi),o(Q,Ao),o(Ao,Bi),p(e,ja,l),p(e,Ae,l),o(Ae,Ri),p(e,ka,l),p(e,De,l),o(De,Ji),p(e,za,l),p(e,xe,l),o(xe,Yi),p(e,$a,l),p(e,oe,l),o(oe,Do),o(Do,Ki),o(oe,Vi),o(oe,xo),o(xo,Wi),p(e,Ca,l),p(e,ae,l),o(ae,Xi),o(ae,Oo),o(Oo,Zi),o(ae,er),p(e,Ia,l),S(be,e,l),p(e,Pa,l),p(e,w,l),p(e,Aa,l),p(e,H,l),o(H,te),o(te,So),S(we,So,null),o(H,or),o(H,Oe),o(Oe,ar),o(Oe,No),o(No,tr),p(e,Da,l),p(e,ie,l),o(ie,ir),o(ie,Go),o(Go,rr),o(ie,nr),p(e,xa,l),p(e,re,l),o(re,sr),o(re,Lo),o(Lo,lr),o(re,pr),p(e,Oa,l),p(e,ne,l),o(ne,cr),o(ne,Mo),o(Mo,ur),o(ne,dr),p(e,Sa,l),p(e,C,l),o(C,se),o(se,To),o(To,mr),o(se,fr),o(se,Uo),o(Uo,hr),o(se,vr),o(C,_r),o(C,Se),o(Se,Fo),o(Fo,Er),o(Se,br),o(C,wr),o(C,Ne),o(Ne,Qo),o(Qo,yr),o(Ne,qr),p(e,Na,l),p(e,le,l),o(le,gr),o(le,Ho),o(Ho,jr),o(le,kr),p(e,Ga,l),p(e,B,l),o(B,pe),o(pe,Bo),S(ye,Bo,null),o(B,zr),o(B,Ro),o(Ro,$r),p(e,La,l),p(e,I,l),o(I,Cr),o(I,Jo),o(Jo,Ir),o(I,Pr),o(I,Yo),o(Yo,Ar),o(I,Dr),p(e,Ma,l),p(e,f,l),o(f,xr),o(f,Ko),o(Ko,Or),o(f,Sr),o(f,Ge),o(Ge,Nr),o(f,Gr),o(f,Vo),o(Vo,Lr),o(f,Mr),o(f,Wo),o(Wo,Tr),o(f,Ur),o(f,Xo),o(Xo,Fr),o(f,Qr),p(e,Ta,l),S(qe,e,l),p(e,Ua,l),p(e,ce,l),o(ce,Hr),o(ce,ge),o(ge,Br),o(ce,Rr),p(e,Fa,l),p(e,y,l),p(e,Qa,l),p(e,P,l),o(P,Jr),o(P,Zo),o(Zo,Yr),o(P,Kr),o(P,ea),o(ea,Vr),o(P,Wr),p(e,Ha,l),p(e,Le,l),o(Le,Xr),Ba=!0},p:Us,i(e){Ba||(N(ue.$$.fragment,e),N(de.$$.fragment,e),N(me.$$.fragment,e),N(he.$$.fragment,e),N(ve.$$.fragment,e),N(Ee.$$.fragment,e),N(be.$$.fragment,e),N(we.$$.fragment,e),N(ye.$$.fragment,e),N(qe.$$.fragment,e),Ba=!0)},o(e){G(ue.$$.fragment,e),G(de.$$.fragment,e),G(me.$$.fragment,e),G(he.$$.fragment,e),G(ve.$$.fragment,e),G(Ee.$$.fragment,e),G(be.$$.fragment,e),G(we.$$.fragment,e),G(ye.$$.fragment,e),G(qe.$$.fragment,e),Ba=!1},d(e){a(M),e&&a(aa),e&&a(T),L(ue),e&&a(ta),L(de,e),e&&a(ia),e&&a(J),e&&a(ra),e&&a(U),L(me),e&&a(na),e&&a(j),e&&a(sa),e&&a(ke),e&&a(la),e&&a(ze),e&&a(pa),e&&a(k),e&&a(ca),e&&a(K),e&&a(ua),e&&a(_),e&&a(da),e&&a(V),e&&a(ma),e&&a(F),L(he),e&&a(fa),e&&a(X),e&&a(ha),e&&a(Ie),e&&a(va),e&&a(m),e&&a(_a),e&&a(E),e&&a(Ea),e&&a($),e&&a(ba),L(ve,e),e&&a(wa),e&&a(Z),e&&a(ya),e&&a(b),e&&a(qa),e&&a(Pe),e&&a(ga),e&&a(Q),L(Ee),e&&a(ja),e&&a(Ae),e&&a(ka),e&&a(De),e&&a(za),e&&a(xe),e&&a($a),e&&a(oe),e&&a(Ca),e&&a(ae),e&&a(Ia),L(be,e),e&&a(Pa),e&&a(w),e&&a(Aa),e&&a(H),L(we),e&&a(Da),e&&a(ie),e&&a(xa),e&&a(re),e&&a(Oa),e&&a(ne),e&&a(Sa),e&&a(C),e&&a(Na),e&&a(le),e&&a(Ga),e&&a(B),L(ye),e&&a(La),e&&a(I),e&&a(Ma),e&&a(f),e&&a(Ta),L(qe,e),e&&a(Ua),e&&a(ce),e&&a(Fa),e&&a(y),e&&a(Qa),e&&a(P),e&&a(Ha),e&&a(Le)}}}const Bs={local:"capire-la-classe-interface",sections:[{local:"come-creare-una-interface",title:"Come creare una Interface"},{local:"un-semplice-esempio-con-laudio",title:"Un semplice esempio con l'audio"},{local:"lavorare-con-pi-input-e-output",sections:[{local:"il-metodo-launch",title:"Il metodo `launch()`"}],title:"Lavorare con pi\xF9 input e output"},{local:"mettiamolo-in-pratica",title:"\u270F\uFE0F Mettiamolo in pratica!"}],title:"Capire la classe Interface"};function Rs(nn){return Fs(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Xs extends Gs{constructor(M){super();Ls(this,M,Rs,Hs,Ms,{})}}export{Xs as default,Bs as metadata};
