import{S as ba,i as xa,s as _a,e as r,k as d,w as h,t,M as wa,c as o,d as s,m as p,a as i,x as q,h as l,b as c,N as _n,G as n,g as u,y as b,q as x,o as _,B as w,v as ya}from"../../chunks/vendor-hf-doc-builder.js";import{T as qa}from"../../chunks/Tip-hf-doc-builder.js";import{I as Ie}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as je}from"../../chunks/CodeBlock-hf-doc-builder.js";function Ea(ge){let m;return{c(){m=t("\u{1F4A1} En pratique, les gens utilisent le terme FFT de mani\xE8re interchangeable avec TFD, car la FFT ou transform\xE9e de Fourier rapide est le seul moyen efficace de calculer la TFD sur un ordinateur.")},l(v){m=l(v,"\u{1F4A1} En pratique, les gens utilisent le terme FFT de mani\xE8re interchangeable avec TFD, car la FFT ou transform\xE9e de Fourier rapide est le seul moyen efficace de calculer la TFD sur un ordinateur.")},m(v,y){u(v,m,y)},d(v){v&&s(m)}}}function Ta(ge){let m;return{c(){m=t(`\u{1F4A1} Tous les spectrogrammes mel ne sont pas identiques ! Il existe deux \xE9chelles mel diff\xE9rentes d'usage courant (\xAB htk \xBB et \xAB slaney \xBB), et au lieu du spectrogramme de puissance, le spectrogramme d'amplitude peut \xEAtre utilis\xE9. 
La conversion en spectrogramme log-mel ne calcule pas toujours les d\xE9cibels vrais, mais peut simplement prendre le \xAB log \xBB. 
Par cons\xE9quent, si un mod\xE8le d'apprentissage automatique attend un spectrogramme mel en entr\xE9e, v\xE9rifiez deux fois pour vous assurer que vous le calculez de la m\xEAme mani\xE8re.`)},l(v){m=l(v,`\u{1F4A1} Tous les spectrogrammes mel ne sont pas identiques ! Il existe deux \xE9chelles mel diff\xE9rentes d'usage courant (\xAB htk \xBB et \xAB slaney \xBB), et au lieu du spectrogramme de puissance, le spectrogramme d'amplitude peut \xEAtre utilis\xE9. 
La conversion en spectrogramme log-mel ne calcule pas toujours les d\xE9cibels vrais, mais peut simplement prendre le \xAB log \xBB. 
Par cons\xE9quent, si un mod\xE8le d'apprentissage automatique attend un spectrogramme mel en entr\xE9e, v\xE9rifiez deux fois pour vous assurer que vous le calculez de la m\xEAme mani\xE8re.`)},m(v,y){u(v,m,y)},d(v){v&&s(m)}}}function Ja(ge){let m,v,y,F,Fe,K,wn,De,yn,Ts,D,En,Se,Tn,Jn,Js,he,$n,$s,E,Mn,Pe,zn,Ln,Ze,Bn,Gn,qe,Cn,kn,Ms,G,S,Ne,ee,In,Ue,jn,zs,M,Fn,He,Dn,Sn,Xe,Pn,Zn,Ls,C,P,Re,se,Nn,We,Un,Bs,z,Hn,Ve,Xn,Rn,Ye,Wn,Vn,Gs,Z,Yn,Ae,An,Qn,Cs,ne,ks,be,On,Is,te,js,T,Kn,Qe,et,st,Oe,nt,tt,Ke,lt,at,Fs,le,Ds,ae,xe,il,Ss,_e,rt,Ps,k,N,es,re,ot,ss,it,Zs,J,ut,ns,dt,pt,ts,ct,mt,ls,ft,vt,Ns,oe,Us,ie,we,ul,Hs,ye,gt,Xs,Ee,ht,Rs,$,qt,as,bt,xt,rs,_t,wt,os,yt,Et,Ws,U,Vs,Te,Tt,Ys,I,H,is,ue,Jt,us,$t,As,X,Mt,ds,zt,Lt,Qs,L,Bt,ps,Gt,Ct,cs,kt,It,Os,de,Ks,pe,Je,dl,en,$e,jt,sn,R,Ft,ms,Dt,St,nn,Me,Pt,tn,j,W,fs,ce,Zt,vs,Nt,ln,B,Ut,gs,Ht,Xt,hs,Rt,Wt,an,me,rn,fe,ze,pl,on,f,Vt,qs,Yt,At,bs,Qt,Ot,xs,Kt,el,_s,sl,nl,ws,tl,ll,ys,al,rl,un,V,dn,Le,ol,pn;return K=new Ie({}),ee=new Ie({}),se=new Ie({}),ne=new je({props:{code:"cGlwJTIwaW5zdGFsbCUyMGxpYnJvc2E=",highlighted:"pip install librosa"}}),te=new je({props:{code:"aW1wb3J0JTIwbGlicm9zYSUwQSUwQWFycmF5JTJDJTIwc2FtcGxpbmdfcmF0ZSUyMCUzRCUyMGxpYnJvc2EubG9hZChsaWJyb3NhLmV4KCUyMnRydW1wZXQlMjIpKQ==",highlighted:`<span class="hljs-keyword">import</span> librosa

array, sampling_rate = librosa.load(librosa.ex(<span class="hljs-string">&quot;trumpet&quot;</span>))`}}),le=new je({props:{code:"aW1wb3J0JTIwbWF0cGxvdGxpYi5weXBsb3QlMjBhcyUyMHBsdCUwQWltcG9ydCUyMGxpYnJvc2EuZGlzcGxheSUwQSUwQXBsdC5maWd1cmUoKS5zZXRfZmlnd2lkdGgoMTIpJTBBbGlicm9zYS5kaXNwbGF5LndhdmVzaG93KGFycmF5JTJDJTIwc3IlM0RzYW1wbGluZ19yYXRlKQ==",highlighted:`<span class="hljs-keyword">import</span> matplotlib.pyplot <span class="hljs-keyword">as</span> plt
<span class="hljs-keyword">import</span> librosa.display

plt.figure().set_figwidth(<span class="hljs-number">12</span>)
librosa.display.waveshow(array, sr=sampling_rate)`}}),re=new Ie({}),oe=new je({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBVEZEX2lucHV0JTIwJTNEJTIwYXJyYXklNUIlM0E0MDk2JTVEJTBBJTBBJTIzJTIwY2FsY3VsZXIlMjBsYSUyMFRERiUwQXdpbmRvdyUyMCUzRCUyMG5wLmhhbm5pbmcobGVuKFRGRF9pbnB1dCkpJTBBd2luZG93ZWRfaW5wdXQlMjAlM0QlMjBURkRfaW5wdXQlMjAqJTIwd2luZG93JTBBVEZEJTIwJTNEJTIwbnAuZmZ0LnJmZnQod2luZG93ZWRfaW5wdXQpJTBBJTBBJTIzJTIwb2J0ZW5pciUyMGxlJTIwc3BlY3RyZSUyMGQnYW1wbGl0dWRlJTIwZW4lMjBkJUMzJUE5Y2liZWxzJTBBYW1wbGl0dWRlJTIwJTNEJTIwbnAuYWJzKFRGRCklMEFhbXBsaXR1ZGVfZGIlMjAlM0QlMjBsaWJyb3NhLmFtcGxpdHVkZV90b19kYihhbXBsaXR1ZGUlMkMlMjByZWYlM0RucC5tYXgpJTBBJTBBJTIzJTIwb2J0ZW5pciUyMGxlcyUyMGJhY3MlMjBkZSUyMGZyJUMzJUE5cXVlbmNlJTBBZnJlcXVlbmN5JTIwJTNEJTIwbGlicm9zYS5mZnRfZnJlcXVlbmNpZXMoc3IlM0RzYW1wbGluZ19yYXRlJTJDJTIwbl9mZnQlM0RsZW4oVEZEX2lucHV0KSklMEElMEFwbHQuZmlndXJlKCkuc2V0X2ZpZ3dpZHRoKDEyKSUwQXBsdC5wbG90KGZyZXF1ZW5jeSUyQyUyMGFtcGxpdHVkZV9kYiklMEFwbHQueGxhYmVsKCUyMkZyZXF1ZW5jeSUyMChIeiklMjIpJTBBcGx0LnlsYWJlbCglMjJBbXBsaXR1ZGUlMjAoZEIpJTIyKSUwQXBsdC54c2NhbGUoJTIybG9nJTIyKQ==",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

TFD_input = array[:<span class="hljs-number">4096</span>]

<span class="hljs-comment"># calculer la TDF</span>
window = np.hanning(<span class="hljs-built_in">len</span>(TFD_input))
windowed_input = TFD_input * window
TFD = np.fft.rfft(windowed_input)

<span class="hljs-comment"># obtenir le spectre d&#x27;amplitude en d\xE9cibels</span>
amplitude = np.<span class="hljs-built_in">abs</span>(TFD)
amplitude_db = librosa.amplitude_to_db(amplitude, ref=np.<span class="hljs-built_in">max</span>)

<span class="hljs-comment"># obtenir les bacs de fr\xE9quence</span>
frequency = librosa.fft_frequencies(sr=sampling_rate, n_fft=<span class="hljs-built_in">len</span>(TFD_input))

plt.figure().set_figwidth(<span class="hljs-number">12</span>)
plt.plot(frequency, amplitude_db)
plt.xlabel(<span class="hljs-string">&quot;Frequency (Hz)&quot;</span>)
plt.ylabel(<span class="hljs-string">&quot;Amplitude (dB)&quot;</span>)
plt.xscale(<span class="hljs-string">&quot;log&quot;</span>)`}}),U=new qa({props:{$$slots:{default:[Ea]},$$scope:{ctx:ge}}}),ue=new Ie({}),de=new je({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBRCUyMCUzRCUyMGxpYnJvc2Euc3RmdChhcnJheSklMEFTX2RiJTIwJTNEJTIwbGlicm9zYS5hbXBsaXR1ZGVfdG9fZGIobnAuYWJzKEQpJTJDJTIwcmVmJTNEbnAubWF4KSUwQSUwQXBsdC5maWd1cmUoKS5zZXRfZmlnd2lkdGgoMTIpJTBBbGlicm9zYS5kaXNwbGF5LnNwZWNzaG93KFNfZGIlMkMlMjB4X2F4aXMlM0QlMjJ0aW1lJTIyJTJDJTIweV9heGlzJTNEJTIyaHolMjIpJTBBcGx0LmNvbG9yYmFyKCk=",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

D = librosa.stft(array)
S_db = librosa.amplitude_to_db(np.<span class="hljs-built_in">abs</span>(D), ref=np.<span class="hljs-built_in">max</span>)

plt.figure().set_figwidth(<span class="hljs-number">12</span>)
librosa.display.specshow(S_db, x_axis=<span class="hljs-string">&quot;time&quot;</span>, y_axis=<span class="hljs-string">&quot;hz&quot;</span>)
plt.colorbar()`}}),ce=new Ie({}),me=new je({props:{code:"UyUyMCUzRCUyMGxpYnJvc2EuZmVhdHVyZS5tZWxzcGVjdHJvZ3JhbSh5JTNEYXJyYXklMkMlMjBzciUzRHNhbXBsaW5nX3JhdGUlMkMlMjBuX21lbHMlM0QxMjglMkMlMjBmbWF4JTNEODAwMCklMEFTX2RCJTIwJTNEJTIwbGlicm9zYS5wb3dlcl90b19kYihTJTJDJTIwcmVmJTNEbnAubWF4KSUwQSUwQXBsdC5maWd1cmUoKS5zZXRfZmlnd2lkdGgoMTIpJTBBbGlicm9zYS5kaXNwbGF5LnNwZWNzaG93KFNfZEIlMkMlMjB4X2F4aXMlM0QlMjJ0aW1lJTIyJTJDJTIweV9heGlzJTNEJTIybWVsJTIyJTJDJTIwc3IlM0RzYW1wbGluZ19yYXRlJTJDJTIwZm1heCUzRDgwMDApJTBBcGx0LmNvbG9yYmFyKCk=",highlighted:`S = librosa.feature.melspectrogram(y=array, sr=sampling_rate, n_mels=<span class="hljs-number">128</span>, fmax=<span class="hljs-number">8000</span>)
S_dB = librosa.power_to_db(S, ref=np.<span class="hljs-built_in">max</span>)

plt.figure().set_figwidth(<span class="hljs-number">12</span>)
librosa.display.specshow(S_dB, x_axis=<span class="hljs-string">&quot;time&quot;</span>, y_axis=<span class="hljs-string">&quot;mel&quot;</span>, sr=sampling_rate, fmax=<span class="hljs-number">8000</span>)
plt.colorbar()`}}),V=new qa({props:{$$slots:{default:[Ta]},$$scope:{ctx:ge}}}),{c(){m=r("meta"),v=d(),y=r("h1"),F=r("a"),Fe=r("span"),h(K.$$.fragment),wn=d(),De=r("span"),yn=t("Introduction aux donn\xE9es audio"),Ts=d(),D=r("p"),En=t("Le "),Se=r("strong"),Tn=t("taux d\u2019\xE9chantillonnage"),Jn=t(` (\xE9galement appel\xE9 fr\xE9quence d\u2019\xE9chantillonnage) est le nombre d\u2019\xE9chantillons pr\xE9lev\xE9s en une seconde et est mesur\xE9 en hertz (Hz).
Pour vous donner un point de r\xE9f\xE9rence, l\u2019audio de qualit\xE9 CD a un taux d\u2019\xE9chantillonnage de 44 100 Hz, ce qui signifie que les \xE9chantillons sont pr\xE9lev\xE9s 44 100 fois par seconde. \xC0 titre de comparaison, l\u2019audio haute r\xE9solution a un taux d\u2019\xE9chantillonnage de 192 000 Hz ou 192 kHz.
Un taux d\u2019\xE9chantillonnage couramment utilis\xE9 dans les mod\xE8les vocaux d\u2019apprentissage est de 16 000 Hz ou 16 kHz.`),Js=d(),he=r("p"),$n=t(`Le choix de la fr\xE9quence d\u2019\xE9chantillonnage d\xE9termine principalement la fr\xE9quence la plus \xE9lev\xE9e qui peut \xEAtre captur\xE9e \xE0 partir du signal.
Ceci est \xE9galement connu sous le nom de limite de Nyquist et correspond exactement \xE0 la moiti\xE9 du taux d\u2019\xE9chantillonnage.
Les fr\xE9quences audibles dans la parole humaine sont inf\xE9rieures \xE0 8 kHz et, par cons\xE9quent, l\u2019\xE9chantillonnage de la parole \xE0 16 kHz est suffisant.
L\u2019utilisation d\u2019un taux d\u2019\xE9chantillonnage plus \xE9lev\xE9 ne permettra pas de capturer plus d\u2019informations et ne fera qu\u2019augmenter le co\xFBt de calcul du traitement de ces fichiers.
D\u2019autre part, l\u2019\xE9chantillonnage audio \xE0 un taux d\u2019\xE9chantillonnage trop faible entra\xEEnera une perte d\u2019informations.
La parole \xE9chantillonn\xE9e \xE0 8 kHz sonnera \xE9touff\xE9e car les fr\xE9quences plus \xE9lev\xE9es ne peuvent pas \xEAtre captur\xE9es \xE0 ce rythme.`),$s=d(),E=r("p"),Mn=t(`Il est important de vous assurer que tous les exemples audio de votre jeu de donn\xE9es ont le m\xEAme taux d\u2019\xE9chantillonnage lorsque vous travaillez sur une t\xE2che audio.
Si vous pr\xE9voyez d\u2019utiliser des donn\xE9es audio personnalis\xE9es pour finetuner un mod\xE8le pr\xE9-entra\xEEn\xE9, le taux d\u2019\xE9chantillonnage de vos donn\xE9es doit correspondre au taux d\u2019\xE9chantillonnage des donn\xE9es sur lesquelles le mod\xE8le a \xE9t\xE9 pr\xE9-entra\xEEn\xE9.
La fr\xE9quence d\u2019\xE9chantillonnage d\xE9termine l\u2019intervalle de temps entre les \xE9chantillons audio successifs, ce qui a un impact sur la r\xE9solution temporelle des donn\xE9es audio.
Prenons un exemple : un son de 5 secondes \xE0 une fr\xE9quence d\u2019\xE9chantillonnage de 16 000 Hz sera repr\xE9sent\xE9 comme une s\xE9rie de 80 000 valeurs, tandis que le m\xEAme son de 5 secondes \xE0 une fr\xE9quence d\u2019\xE9chantillonnage de 8 000 Hz sera repr\xE9sent\xE9 comme une s\xE9rie de 40 000 valeurs.
Les `),Pe=r("em"),zn=t("transformers"),Ln=t(` qui r\xE9solvent les t\xE2ches audio traitent les exemples comme des s\xE9quences et s\u2019appuient sur des m\xE9canismes d\u2019attention pour apprendre l\u2019audio ou la repr\xE9sentation multimodale.
\xC9tant donn\xE9 que les s\xE9quences sont diff\xE9rentes pour les exemples audio \xE0 des taux d\u2019\xE9chantillonnage diff\xE9rents, il sera difficile pour les mod\xE8les de g\xE9n\xE9raliser entre les taux d\u2019\xE9chantillonnage.
`),Ze=r("strong"),Bn=t("Le r\xE9\xE9chantillonnage"),Gn=t(" est le processus de mise en correspondance des taux d\u2019\xE9chantillonnage et fait partie du "),qe=r("a"),Cn=t("pr\xE9traitement"),kn=t(" des donn\xE9es audio."),Ms=d(),G=r("h2"),S=r("a"),Ne=r("span"),h(ee.$$.fragment),In=d(),Ue=r("span"),jn=t("Amplitude et profondeur de bits"),zs=d(),M=r("p"),Fn=t(`Bien que le taux d\u2019\xE9chantillonnage vous indique \xE0 quelle fr\xE9quence les \xE9chantillons sont pr\xE9lev\xE9s, quelles sont exactement les valeurs de chaque \xE9chantillon?
Le son est produit par des changements de pression atmosph\xE9rique \xE0 des fr\xE9quences audibles pour les humains.
L\u2019`),He=r("strong"),Dn=t("amplitude"),Sn=t(` d\u2019un son d\xE9crit le niveau de pression acoustique \xE0 un instant donn\xE9 et est mesur\xE9e en d\xE9cibels (dB).
Nous percevons l\u2019amplitude comme un volume sonore. Pour vous donner un exemple, une voix normale est inf\xE9rieure \xE0 60 dB, et un concert de rock peut \xEAtre autour de 125 dB, repoussant les limites de l\u2019audition humaine.
En audio, chaque \xE9chantillon enregistre l\u2019amplitude de l\u2019onde \xE0 un moment donn\xE9.
La `),Xe=r("strong"),Pn=t("profondeur de bits"),Zn=t(` de l\u2019\xE9chantillon d\xE9termine avec quelle pr\xE9cision cette valeur d\u2019amplitude peut \xEAtre d\xE9crite.
Plus la profondeur de bits est \xE9lev\xE9e, plus la repr\xE9sentation num\xE9rique se rapproche fid\xE8lement de l\u2019onde sonore continue d\u2019origine.
Les profondeurs de bits audio les plus courantes sont 16 bits et 24 bits.
Chacun est un terme binaire, repr\xE9sentant le nombre d\u2019\xE9tapes possibles auxquelles la valeur d\u2019amplitude peut \xEAtre quantifi\xE9e lorsqu\u2019elle est convertie de continue \xE0 discr\xE8te: 65 536 \xE9tapes pour l\u2019audio 16 bits, 16 777 216 \xE9tapes pour l\u2019audio 24 bits.
\xC9tant donn\xE9 que la quantification implique d\u2019arrondir la valeur continue \xE0 une valeur discr\xE8te, le processus d\u2019\xE9chantillonnage introduit du bruit. Plus la profondeur de bits est \xE9lev\xE9e, plus ce bruit de quantification est faible.
En pratique, le bruit de quantification de l\u2019audio 16 bits est d\xE9j\xE0 suffisamment faible pour \xEAtre inaudible et l\u2019utilisation de profondeurs de bits plus \xE9lev\xE9es n\u2019est g\xE9n\xE9ralement pas n\xE9cessaire.
Vous pouvez \xE9galement rencontrer de l\u2019audio 32 bits.
Cela stocke les \xE9chantillons sous forme de valeurs \xE0 virgule flottante, tandis que l\u2019audio 16 bits et 24 bits utilise des \xE9chantillons entiers.
La pr\xE9cision d\u2019une valeur \xE0 virgule flottante de 32 bits est de 24 bits, ce qui lui donne la m\xEAme profondeur de bits que l\u2019audio 24 bits.
Les \xE9chantillons audio en virgule flottante devraient se situer dans la plage [-1.0, 1.0].
\xC9tant donn\xE9 que les mod\xE8les d\u2019apprentissage automatique fonctionnent naturellement sur des donn\xE9es en virgule flottante, l\u2019audio doit d\u2019abord \xEAtre converti au format \xE0 virgule flottante avant de pouvoir \xEAtre utilis\xE9 pour entra\xEEner le mod\xE8le.
Nous verrons comment faire cela dans la section suivante sur le [Pr\xE9traitement] (preprocessing).
Tout comme pour les signaux audio continus, l\u2019amplitude de l\u2019audio num\xE9rique est g\xE9n\xE9ralement exprim\xE9e en d\xE9cibels (dB).
L\u2019audition humaine \xE9tant de nature logarithmique - nos oreilles sont plus sensibles aux petites fluctuations des sons calmes qu\u2019\xE0 celles des sons forts - l\u2019intensit\xE9 d\u2019un son est plus facile \xE0 interpr\xE9ter si les amplitudes sont exprim\xE9es en d\xE9cibels, qui sont \xE9galement logarithmiques.
L\u2019\xE9chelle de d\xE9cibels pour l\u2019audio r\xE9el commence \xE0 0 dB, ce qui repr\xE9sente le son le plus faible possible que les humains peuvent entendre, et les sons plus forts ont des valeurs plus importantes.
Cependant, pour les signaux audio num\xE9riques, 0 dB est l\u2019amplitude la plus forte possible, tandis que toutes les autres amplitudes sont n\xE9gatives.
En r\xE8gle g\xE9n\xE9rale: chaque -6 dB est une r\xE9duction de moiti\xE9 de l\u2019amplitude, et tout ce qui est inf\xE9rieur \xE0 -60 dB est g\xE9n\xE9ralement inaudible \xE0 moins que vous n\u2019augmentiez vraiment le volume.`),Ls=d(),C=r("h2"),P=r("a"),Re=r("span"),h(se.$$.fragment),Nn=d(),We=r("span"),Un=t("L'audio comme forme d'onde"),Bs=d(),z=r("p"),Hn=t("Vous avez peut-\xEAtre vu des sons visualis\xE9s sous la "),Ve=r("strong"),Xn=t("forme d\u2019onde"),Rn=t(" qui tra\xE7ant les valeurs de l\u2019\xE9chantillon au fil du temps et illustrant les changements d\u2019amplitude du son. Ceci est aussi connu sous le nom de repr\xE9sentation du "),Ye=r("em"),Wn=t("domaine temporel"),Vn=t(` du son.
Ce type de visualisation est utile pour identifier des caract\xE9ristiques sp\xE9cifiques du signal audio telles que la synchronisation des \xE9v\xE9nements sonores individuels, l\u2019intensit\xE9 sonore globale du signal et toute irr\xE9gularit\xE9 ou bruit pr\xE9sent dans l\u2019audio.`),Gs=d(),Z=r("p"),Yn=t("Pour tracer la forme d\u2019onde d\u2019un signal audio, nous pouvons utiliser une biblioth\xE8que Python "),Ae=r("code"),An=t("librosa"),Qn=t(":"),Cs=d(),h(ne.$$.fragment),ks=d(),be=r("p"),On=t("Prenons un exemple de son appel\xE9 \xAB trompette \xBB qui vient avec la biblioth\xE8que:"),Is=d(),h(te.$$.fragment),js=d(),T=r("p"),Kn=t("L\u2019exemple est charg\xE9 sous la forme d\u2019un tuple de s\xE9ries temporelles audio (ici nous l\u2019appelons "),Qe=r("code"),et=t("array"),st=t(") et de taux d\u2019\xE9chantillonnage ("),Oe=r("code"),nt=t("sampling_rate"),tt=t(`).
Jetons un coup d\u2019\u0153il \xE0 la forme d\u2019onde de ce son en utilisant la fonction `),Ke=r("code"),lt=t("waveshow()"),at=t(" de librosa:"),Fs=d(),h(le.$$.fragment),Ds=d(),ae=r("div"),xe=r("img"),Ss=d(),_e=r("p"),rt=t(`Cela trace l\u2019amplitude du signal sur l\u2019axe des y et le temps le long de l\u2019axe des x.
En d\u2019autres termes, chaque point correspond \xE0 une seule valeur d\u2019\xE9chantillon qui a \xE9t\xE9 prise lors de l\u2019\xE9chantillonnage de ce son.
Notez \xE9galement que librosa renvoie d\xE9j\xE0 l\u2019audio sous forme de valeurs \xE0 virgule flottante et que les valeurs d\u2019amplitude sont effectivement comprises dans la plage [-1.0, 1.0].
Visualiser l\u2019audio et l\u2019\xE9couter peut \xEAtre un outil utile pour comprendre les donn\xE9es avec lesquelles vous travaillez.
Vous pouvez voir la forme du signal, observer des mod\xE8les, apprendre \xE0 rep\xE9rer le bruit ou la distorsion.
Si vous pr\xE9traitez les donn\xE9es d\u2019une mani\xE8re ou d\u2019une autre, telle que la normalisation, le r\xE9\xE9chantillonnage ou le filtrage, vous pouvez confirmer visuellement que les \xE9tapes de pr\xE9traitement ont \xE9t\xE9 appliqu\xE9es comme pr\xE9vu.
Apr\xE8s avoir entra\xEEn\xE9 un mod\xE8le, vous pouvez \xE9galement visualiser des exemples o\xF9 des erreurs se produisent (par exemple, dans la t\xE2che de classification audio) pour d\xE9boguer le probl\xE8me.`),Ps=d(),k=r("h2"),N=r("a"),es=r("span"),h(re.$$.fragment),ot=d(),ss=r("span"),it=t("Le spectre de fr\xE9quences"),Zs=d(),J=r("p"),ut=t("Une autre fa\xE7on de visualiser les donn\xE9es audio consiste \xE0 tracer le "),ns=r("strong"),dt=t("spectre de fr\xE9quences"),pt=t(" d\u2019un signal audio, \xE9galement connu sous le nom de repr\xE9sentation du "),ts=r("em"),ct=t("domaine fr\xE9quentiel"),mt=t(`.
Le spectre est calcul\xE9 \xE0 l\u2019aide de la transform\xE9e de Fourier discr\xE8te ou TFD. Il d\xE9crit les fr\xE9quences individuelles qui composent le signal et leur force.
Tra\xE7ons le spectre de fr\xE9quences pour le m\xEAme son de trompette en prenant la TFD en utilisant la fonction `),ls=r("code"),ft=t("rfft()"),vt=t(` de numpy. Bien qu\u2019il soit possible de tracer le spectre de l\u2019ensemble du son, il est plus utile de regarder une petite r\xE9gion \xE0 la place.
Ici, nous allons prendre la TFD sur les 4096 premiers \xE9chantillons, ce qui correspond \xE0 peu pr\xE8s \xE0 la longueur de la premi\xE8re note jou\xE9e:`),Ns=d(),h(oe.$$.fragment),Us=d(),ie=r("div"),we=r("img"),Hs=d(),ye=r("p"),gt=t("Cela trace la force des diff\xE9rentes composantes de fr\xE9quence pr\xE9sentes dans ce segment audio. Les valeurs de fr\xE9quence sont sur l\u2019axe des abscisses, g\xE9n\xE9ralement trac\xE9es sur une \xE9chelle logarithmique, tandis que leurs amplitudes sont sur l\u2019axe des y."),Xs=d(),Ee=r("p"),ht=t(`Le spectre de fr\xE9quences que nous avons trac\xE9 montre plusieurs pics.
Ces pics correspondent aux harmoniques de la note jou\xE9e, les harmoniques sup\xE9rieures \xE9tant plus calmes. Puisque le premier pic est \xE0 environ 620 Hz, c\u2019est le spectre de fr\xE9quence d\u2019une\u266D note Mi.`),Rs=d(),$=r("p"),qt=t(`La sortie de la TDF est un tableau de nombres complexes, compos\xE9 de composants r\xE9els et imaginaires.
Prendre la magnitude avec `),as=r("code"),bt=t("np.abs(TFD)"),xt=t(`  extrait l\u2019information d\u2019amplitude du spectrogramme.
L\u2019angle entre les composants r\xE9els et imaginaires fournit ce que l\u2019on appelle le spectre de phase, mais il est souvent \xE9cart\xE9 dans les applications d\u2019apprentissage automatique.
Nous utilions `),rs=r("code"),_t=t("librosa.amplitude_to_db()"),wt=t(` pour convertir les valeurs d\u2019amplitude en \xE9chelle de d\xE9cibels, ce qui facilite la visualisation des d\xE9tails les plus fins du spectre.
Parfois, les gens utilisent le `),os=r("strong"),yt=t("spectre de puissance"),Et=t(", qui mesure l\u2019\xE9nergie plut\xF4t que l\u2019amplitude. Il s\u2019agit simplement d\u2019un spectre avec les valeurs d\u2019amplitude au carr\xE9."),Ws=d(),h(U.$$.fragment),Vs=d(),Te=r("p"),Tt=t(`Le spectre de fr\xE9quences d\u2019un signal audio contient exactement la m\xEAme information que sa forme d\u2019onde. Ce sont simplement deux fa\xE7ons diff\xE9rentes de regarder les m\xEAmes donn\xE9es (ici, les 4096 premiers \xE9chantillons du son de la trompette).
L\xE0 o\xF9 la forme d\u2019onde trace l\u2019amplitude du signal audio au fil du temps, le spectre visualise les amplitudes des fr\xE9quences individuelles \xE0 un moment donn\xE9.`),Ys=d(),I=r("h2"),H=r("a"),is=r("span"),h(ue.$$.fragment),Jt=d(),us=r("span"),$t=t("Spectrogramme"),As=d(),X=r("p"),Mt=t(`Et si nous voulons voir comment les fr\xE9quences d\u2019un signal audio changent ? La trompette joue plusieurs notes et elles ont toutes des fr\xE9quences diff\xE9rentes.
Le probl\xE8me est que le spectre ne montre qu\u2019un instantan\xE9 fig\xE9 des fr\xE9quences \xE0 un instant donn\xE9.
La solution consiste \xE0 prendre plusieurs TFD, chacune ne couvrant qu\u2019une petite tranche de temps, et \xE0 empiler les spectres r\xE9sultants dans un `),ds=r("strong"),zt=t("spectrogramme"),Lt=t("."),Qs=d(),L=r("p"),Bt=t(`Un spectrogramme trace le contenu en fr\xE9quence d\u2019un signal audio au fil du temps. Il vous permet de voir le temps, la fr\xE9quence et l\u2019amplitude sur un seul graphique. L\u2019algorithme qui effectue ce calcul est la TFCT ou transform\xE9e de Fourier \xE0 court terme.
Le spectrogramme est l\u2019un des outils audio les plus informatifs \xE0 notre disposition.
Par exemple, lorsque nous travaillons avec un enregistrement musical, nous pouvons voir les diff\xE9rents instruments et pistes vocales et comment ils contribuent au son global. Dans la parole, nous pouvons identifier diff\xE9rents sons de voyelles car chaque voyelle est caract\xE9ris\xE9e par des fr\xE9quences particuli\xE8res.
Tra\xE7ons un spectrogramme pour le m\xEAme son de trompette, en utilisant les fonctions `),ps=r("code"),Gt=t("stft()"),Ct=t(" et "),cs=r("code"),kt=t("specshow()"),It=t(" de librosa:"),Os=d(),h(de.$$.fragment),Ks=d(),pe=r("div"),Je=r("img"),en=d(),$e=r("p"),jt=t(`Dans ce graphique, l\u2019axe des x repr\xE9sente le temps comme dans la visualisation de la forme d\u2019onde, mais maintenant l\u2019axe des y repr\xE9sente la fr\xE9quence en Hz.
L\u2019intensit\xE9 de la couleur donne l\u2019amplitude ou la puissance de la composante fr\xE9quence \xE0 chaque point dans le temps, mesur\xE9e en d\xE9cibels (dB).`),sn=d(),R=r("p"),Ft=t(`Le spectrogramme est cr\xE9\xE9 en prenant de courts segments du signal audio, g\xE9n\xE9ralement de quelques millisecondes, et en calculant la transform\xE9e de Fourier discr\xE8te de chaque segment pour obtenir son spectre de fr\xE9quences.
Les spectres r\xE9sultants sont ensuite empil\xE9s sur l\u2019axe temporel pour cr\xE9er le spectrogramme.
Chaque tranche verticale de cette image correspond \xE0 un spectre de fr\xE9quences unique, vu du haut.
Par d\xE9faut, `),ms=r("code"),Dt=t("librosa.stft()"),St=t(` divise le signal audio en segments de 2048 \xE9chantillons, ce qui donne un bon compromis entre la r\xE9solution de fr\xE9quence et la r\xE9solution temporelle.
\xC9tant donn\xE9 que le spectrogramme et la forme d\u2019onde sont des vues diff\xE9rentes des m\xEAmes donn\xE9es, il est possible de retourner le spectrogramme dans la forme d\u2019onde d\u2019origine en utilisant la TFCT inverse.
Cependant, cela n\xE9cessite les informations de phase en plus des informations d\u2019amplitude. Si le spectrogramme a \xE9t\xE9 g\xE9n\xE9r\xE9 par un mod\xE8le d\u2019apprentissage automatique, il ne produit g\xE9n\xE9ralement que les amplitudes.
Dans ce cas, nous pouvons utiliser un algorithme de reconstruction de phase tel que l\u2019algorithme classique de Griffin-Lim, ou en utilisant un r\xE9seau neuronal appel\xE9 vocodeur, pour reconstruire une forme d\u2019onde \xE0 partir du spectrogramme.`),nn=d(),Me=r("p"),Pt=t(`Les spectrogrammes ne sont pas seulement utilis\xE9s pour la visualisation. De nombreux mod\xE8les d\u2019apprentissage automatique prendront des spectrogrammes en entr\xE9e, par opposition aux formes d\u2019onde, et produiront des spectrogrammes en sortie.
Maintenant que nous savons ce qu\u2019est un spectrogramme et comment il est fabriqu\xE9, jetons un coup d\u2019\u0153il \xE0 une variante de celui-ci largement utilis\xE9e pour le traitement de la parole: le spectrogramme mel.`),tn=d(),j=r("h2"),W=r("a"),fs=r("span"),h(ce.$$.fragment),Zt=d(),vs=r("span"),Nt=t("Spectrogramme Mel"),ln=d(),B=r("p"),Ut=t(`Un spectrogramme mel est une variante du spectrogramme couramment utilis\xE9e dans les t\xE2ches de traitement de la parole et d\u2019apprentissage automatique.
Il est similaire \xE0 un spectrogramme en ce sens qu\u2019il montre le contenu en fr\xE9quence d\u2019un signal audio au fil du temps, mais sur un axe de fr\xE9quence diff\xE9rent.
Dans un spectrogramme standard, l\u2019axe de fr\xE9quence est lin\xE9aire et est mesur\xE9 en hertz (Hz).
Cependant, le syst\xE8me auditif humain est plus sensible aux changements dans les basses fr\xE9quences que dans les fr\xE9quences plus \xE9lev\xE9es, et cette sensibilit\xE9 diminue logarithmiquement \xE0 mesure que la fr\xE9quence augmente.
L\u2019\xE9chelle mel est une \xE9chelle perceptuelle qui se rapproche de la r\xE9ponse en fr\xE9quence non lin\xE9aire de l\u2019oreille humaine.
Pour cr\xE9er un spectrogramme mel, le STFT est utilis\xE9 comme auparavant, divisant l\u2019audio en segments courts pour obtenir une s\xE9quence de spectres de fr\xE9quence.
De plus, chaque spectre est envoy\xE9 \xE0 travers un ensemble de filtres, appel\xE9 `),gs=r("em"),Ht=t("mel filterbank"),Xt=t(`, pour transformer les fr\xE9quences \xE0 l\u2019\xE9chelle mel.
Voyons comment nous pouvons tracer un spectrogramme mel en utilisant la fonction `),hs=r("code"),Rt=t("melspectrogram()"),Wt=t(" de librosa, qui effectue toutes ces \xE9tapes pour nous:"),an=d(),h(me.$$.fragment),rn=d(),fe=r("div"),ze=r("img"),on=d(),f=r("p"),Vt=t("Dans l\u2019exemple ci-dessus, "),qs=r("code"),Yt=t("n_mels"),At=t(` repr\xE9sente le nombre de bandes mel \xE0 g\xE9n\xE9rer.
Les bandes mel d\xE9finissent un ensemble de gammes de fr\xE9quences qui divisent le spectre en composantes perceptuellement significatives, en utilisant un ensemble de filtres dont la forme et l\u2019espacement sont choisis pour imiter la fa\xE7on dont l\u2019oreille humaine r\xE9pond \xE0 diff\xE9rentes fr\xE9quences.
Les valeurs courantes pour `),bs=r("code"),Qt=t("n_mels"),Ot=t(" sont 40 ou 80. "),xs=r("code"),Kt=t("fmax"),el=t(` indique la fr\xE9quence la plus \xE9lev\xE9e (en Hz) qui nous int\xE9resse.
Tout comme avec un spectrogramme standard, il est courant d\u2019exprimer la force des composantes de fr\xE9quence mel en d\xE9cibels.
C\u2019est ce qu\u2019on appelle commun\xE9ment un `),_s=r("strong"),sl=t("spectrogramme log-mel"),nl=t(`, car la conversion en d\xE9cibels implique une op\xE9ration logarithmique.
L\u2019exemple ci-dessus utilis\xE9 `),ws=r("code"),tl=t("librosa.power_to_db()"),ll=t(" car "),ys=r("code"),al=t("librosa.feature.melspectrogram()"),rl=t(" cr\xE9e un spectrogramme de puissance."),un=d(),h(V.$$.fragment),dn=d(),Le=r("p"),ol=t(`La cr\xE9ation d\u2019un spectrogramme mel est une op\xE9ration avec perte car elle implique le filtrage du signal.
La conversion d\u2019un spectrogramme mel en une forme d\u2019onde est plus difficile que de le faire pour un spectrogramme r\xE9gulier, car cela n\xE9cessite d\u2019estimer les fr\xE9quences qui ont \xE9t\xE9 jet\xE9es.
C\u2019est pourquoi des mod\xE8les d\u2019apprentissage automatique tels que le vocodeur HiFiGAN sont n\xE9cessaires pour produire une forme d\u2019onde \xE0 partir d\u2019un spectrogramme mel.
Compar\xE9 \xE0 un spectrogramme standard, un spectrogramme mel peut capturer des caract\xE9ristiques plus significatives du signal audio pour la perception humaine, ce qui en fait un choix populaire dans des t\xE2ches telles que la reconnaissance vocale, l\u2019identification du locuteur et la classification des genres musicaux.
Maintenant que vous savez comment visualiser des exemples de donn\xE9es audio, essayez de voir \xE0 quoi ressemblent vos sons pr\xE9f\xE9r\xE9s :)`),this.h()},l(e){const a=wa('[data-svelte="svelte-1phssyn"]',document.head);m=o(a,"META",{name:!0,content:!0}),a.forEach(s),v=p(e),y=o(e,"H1",{class:!0});var ve=i(y);F=o(ve,"A",{id:!0,class:!0,href:!0});var Es=i(F);Fe=o(Es,"SPAN",{});var cl=i(Fe);q(K.$$.fragment,cl),cl.forEach(s),Es.forEach(s),wn=p(ve),De=o(ve,"SPAN",{});var ml=i(De);yn=l(ml,"Introduction aux donn\xE9es audio"),ml.forEach(s),ve.forEach(s),Ts=p(e),D=o(e,"P",{});var cn=i(D);En=l(cn,"Le "),Se=o(cn,"STRONG",{});var fl=i(Se);Tn=l(fl,"taux d\u2019\xE9chantillonnage"),fl.forEach(s),Jn=l(cn,` (\xE9galement appel\xE9 fr\xE9quence d\u2019\xE9chantillonnage) est le nombre d\u2019\xE9chantillons pr\xE9lev\xE9s en une seconde et est mesur\xE9 en hertz (Hz).
Pour vous donner un point de r\xE9f\xE9rence, l\u2019audio de qualit\xE9 CD a un taux d\u2019\xE9chantillonnage de 44 100 Hz, ce qui signifie que les \xE9chantillons sont pr\xE9lev\xE9s 44 100 fois par seconde. \xC0 titre de comparaison, l\u2019audio haute r\xE9solution a un taux d\u2019\xE9chantillonnage de 192 000 Hz ou 192 kHz.
Un taux d\u2019\xE9chantillonnage couramment utilis\xE9 dans les mod\xE8les vocaux d\u2019apprentissage est de 16 000 Hz ou 16 kHz.`),cn.forEach(s),Js=p(e),he=o(e,"P",{});var vl=i(he);$n=l(vl,`Le choix de la fr\xE9quence d\u2019\xE9chantillonnage d\xE9termine principalement la fr\xE9quence la plus \xE9lev\xE9e qui peut \xEAtre captur\xE9e \xE0 partir du signal.
Ceci est \xE9galement connu sous le nom de limite de Nyquist et correspond exactement \xE0 la moiti\xE9 du taux d\u2019\xE9chantillonnage.
Les fr\xE9quences audibles dans la parole humaine sont inf\xE9rieures \xE0 8 kHz et, par cons\xE9quent, l\u2019\xE9chantillonnage de la parole \xE0 16 kHz est suffisant.
L\u2019utilisation d\u2019un taux d\u2019\xE9chantillonnage plus \xE9lev\xE9 ne permettra pas de capturer plus d\u2019informations et ne fera qu\u2019augmenter le co\xFBt de calcul du traitement de ces fichiers.
D\u2019autre part, l\u2019\xE9chantillonnage audio \xE0 un taux d\u2019\xE9chantillonnage trop faible entra\xEEnera une perte d\u2019informations.
La parole \xE9chantillonn\xE9e \xE0 8 kHz sonnera \xE9touff\xE9e car les fr\xE9quences plus \xE9lev\xE9es ne peuvent pas \xEAtre captur\xE9es \xE0 ce rythme.`),vl.forEach(s),$s=p(e),E=o(e,"P",{});var Y=i(E);Mn=l(Y,`Il est important de vous assurer que tous les exemples audio de votre jeu de donn\xE9es ont le m\xEAme taux d\u2019\xE9chantillonnage lorsque vous travaillez sur une t\xE2che audio.
Si vous pr\xE9voyez d\u2019utiliser des donn\xE9es audio personnalis\xE9es pour finetuner un mod\xE8le pr\xE9-entra\xEEn\xE9, le taux d\u2019\xE9chantillonnage de vos donn\xE9es doit correspondre au taux d\u2019\xE9chantillonnage des donn\xE9es sur lesquelles le mod\xE8le a \xE9t\xE9 pr\xE9-entra\xEEn\xE9.
La fr\xE9quence d\u2019\xE9chantillonnage d\xE9termine l\u2019intervalle de temps entre les \xE9chantillons audio successifs, ce qui a un impact sur la r\xE9solution temporelle des donn\xE9es audio.
Prenons un exemple : un son de 5 secondes \xE0 une fr\xE9quence d\u2019\xE9chantillonnage de 16 000 Hz sera repr\xE9sent\xE9 comme une s\xE9rie de 80 000 valeurs, tandis que le m\xEAme son de 5 secondes \xE0 une fr\xE9quence d\u2019\xE9chantillonnage de 8 000 Hz sera repr\xE9sent\xE9 comme une s\xE9rie de 40 000 valeurs.
Les `),Pe=o(Y,"EM",{});var gl=i(Pe);zn=l(gl,"transformers"),gl.forEach(s),Ln=l(Y,` qui r\xE9solvent les t\xE2ches audio traitent les exemples comme des s\xE9quences et s\u2019appuient sur des m\xE9canismes d\u2019attention pour apprendre l\u2019audio ou la repr\xE9sentation multimodale.
\xC9tant donn\xE9 que les s\xE9quences sont diff\xE9rentes pour les exemples audio \xE0 des taux d\u2019\xE9chantillonnage diff\xE9rents, il sera difficile pour les mod\xE8les de g\xE9n\xE9raliser entre les taux d\u2019\xE9chantillonnage.
`),Ze=o(Y,"STRONG",{});var hl=i(Ze);Bn=l(hl,"Le r\xE9\xE9chantillonnage"),hl.forEach(s),Gn=l(Y," est le processus de mise en correspondance des taux d\u2019\xE9chantillonnage et fait partie du "),qe=o(Y,"A",{href:!0});var ql=i(qe);Cn=l(ql,"pr\xE9traitement"),ql.forEach(s),kn=l(Y," des donn\xE9es audio."),Y.forEach(s),Ms=p(e),G=o(e,"H2",{class:!0});var mn=i(G);S=o(mn,"A",{id:!0,class:!0,href:!0});var bl=i(S);Ne=o(bl,"SPAN",{});var xl=i(Ne);q(ee.$$.fragment,xl),xl.forEach(s),bl.forEach(s),In=p(mn),Ue=o(mn,"SPAN",{});var _l=i(Ue);jn=l(_l,"Amplitude et profondeur de bits"),_l.forEach(s),mn.forEach(s),zs=p(e),M=o(e,"P",{});var Be=i(M);Fn=l(Be,`Bien que le taux d\u2019\xE9chantillonnage vous indique \xE0 quelle fr\xE9quence les \xE9chantillons sont pr\xE9lev\xE9s, quelles sont exactement les valeurs de chaque \xE9chantillon?
Le son est produit par des changements de pression atmosph\xE9rique \xE0 des fr\xE9quences audibles pour les humains.
L\u2019`),He=o(Be,"STRONG",{});var wl=i(He);Dn=l(wl,"amplitude"),wl.forEach(s),Sn=l(Be,` d\u2019un son d\xE9crit le niveau de pression acoustique \xE0 un instant donn\xE9 et est mesur\xE9e en d\xE9cibels (dB).
Nous percevons l\u2019amplitude comme un volume sonore. Pour vous donner un exemple, une voix normale est inf\xE9rieure \xE0 60 dB, et un concert de rock peut \xEAtre autour de 125 dB, repoussant les limites de l\u2019audition humaine.
En audio, chaque \xE9chantillon enregistre l\u2019amplitude de l\u2019onde \xE0 un moment donn\xE9.
La `),Xe=o(Be,"STRONG",{});var yl=i(Xe);Pn=l(yl,"profondeur de bits"),yl.forEach(s),Zn=l(Be,` de l\u2019\xE9chantillon d\xE9termine avec quelle pr\xE9cision cette valeur d\u2019amplitude peut \xEAtre d\xE9crite.
Plus la profondeur de bits est \xE9lev\xE9e, plus la repr\xE9sentation num\xE9rique se rapproche fid\xE8lement de l\u2019onde sonore continue d\u2019origine.
Les profondeurs de bits audio les plus courantes sont 16 bits et 24 bits.
Chacun est un terme binaire, repr\xE9sentant le nombre d\u2019\xE9tapes possibles auxquelles la valeur d\u2019amplitude peut \xEAtre quantifi\xE9e lorsqu\u2019elle est convertie de continue \xE0 discr\xE8te: 65 536 \xE9tapes pour l\u2019audio 16 bits, 16 777 216 \xE9tapes pour l\u2019audio 24 bits.
\xC9tant donn\xE9 que la quantification implique d\u2019arrondir la valeur continue \xE0 une valeur discr\xE8te, le processus d\u2019\xE9chantillonnage introduit du bruit. Plus la profondeur de bits est \xE9lev\xE9e, plus ce bruit de quantification est faible.
En pratique, le bruit de quantification de l\u2019audio 16 bits est d\xE9j\xE0 suffisamment faible pour \xEAtre inaudible et l\u2019utilisation de profondeurs de bits plus \xE9lev\xE9es n\u2019est g\xE9n\xE9ralement pas n\xE9cessaire.
Vous pouvez \xE9galement rencontrer de l\u2019audio 32 bits.
Cela stocke les \xE9chantillons sous forme de valeurs \xE0 virgule flottante, tandis que l\u2019audio 16 bits et 24 bits utilise des \xE9chantillons entiers.
La pr\xE9cision d\u2019une valeur \xE0 virgule flottante de 32 bits est de 24 bits, ce qui lui donne la m\xEAme profondeur de bits que l\u2019audio 24 bits.
Les \xE9chantillons audio en virgule flottante devraient se situer dans la plage [-1.0, 1.0].
\xC9tant donn\xE9 que les mod\xE8les d\u2019apprentissage automatique fonctionnent naturellement sur des donn\xE9es en virgule flottante, l\u2019audio doit d\u2019abord \xEAtre converti au format \xE0 virgule flottante avant de pouvoir \xEAtre utilis\xE9 pour entra\xEEner le mod\xE8le.
Nous verrons comment faire cela dans la section suivante sur le [Pr\xE9traitement] (preprocessing).
Tout comme pour les signaux audio continus, l\u2019amplitude de l\u2019audio num\xE9rique est g\xE9n\xE9ralement exprim\xE9e en d\xE9cibels (dB).
L\u2019audition humaine \xE9tant de nature logarithmique - nos oreilles sont plus sensibles aux petites fluctuations des sons calmes qu\u2019\xE0 celles des sons forts - l\u2019intensit\xE9 d\u2019un son est plus facile \xE0 interpr\xE9ter si les amplitudes sont exprim\xE9es en d\xE9cibels, qui sont \xE9galement logarithmiques.
L\u2019\xE9chelle de d\xE9cibels pour l\u2019audio r\xE9el commence \xE0 0 dB, ce qui repr\xE9sente le son le plus faible possible que les humains peuvent entendre, et les sons plus forts ont des valeurs plus importantes.
Cependant, pour les signaux audio num\xE9riques, 0 dB est l\u2019amplitude la plus forte possible, tandis que toutes les autres amplitudes sont n\xE9gatives.
En r\xE8gle g\xE9n\xE9rale: chaque -6 dB est une r\xE9duction de moiti\xE9 de l\u2019amplitude, et tout ce qui est inf\xE9rieur \xE0 -60 dB est g\xE9n\xE9ralement inaudible \xE0 moins que vous n\u2019augmentiez vraiment le volume.`),Be.forEach(s),Ls=p(e),C=o(e,"H2",{class:!0});var fn=i(C);P=o(fn,"A",{id:!0,class:!0,href:!0});var El=i(P);Re=o(El,"SPAN",{});var Tl=i(Re);q(se.$$.fragment,Tl),Tl.forEach(s),El.forEach(s),Nn=p(fn),We=o(fn,"SPAN",{});var Jl=i(We);Un=l(Jl,"L'audio comme forme d'onde"),Jl.forEach(s),fn.forEach(s),Bs=p(e),z=o(e,"P",{});var Ge=i(z);Hn=l(Ge,"Vous avez peut-\xEAtre vu des sons visualis\xE9s sous la "),Ve=o(Ge,"STRONG",{});var $l=i(Ve);Xn=l($l,"forme d\u2019onde"),$l.forEach(s),Rn=l(Ge," qui tra\xE7ant les valeurs de l\u2019\xE9chantillon au fil du temps et illustrant les changements d\u2019amplitude du son. Ceci est aussi connu sous le nom de repr\xE9sentation du "),Ye=o(Ge,"EM",{});var Ml=i(Ye);Wn=l(Ml,"domaine temporel"),Ml.forEach(s),Vn=l(Ge,` du son.
Ce type de visualisation est utile pour identifier des caract\xE9ristiques sp\xE9cifiques du signal audio telles que la synchronisation des \xE9v\xE9nements sonores individuels, l\u2019intensit\xE9 sonore globale du signal et toute irr\xE9gularit\xE9 ou bruit pr\xE9sent dans l\u2019audio.`),Ge.forEach(s),Gs=p(e),Z=o(e,"P",{});var vn=i(Z);Yn=l(vn,"Pour tracer la forme d\u2019onde d\u2019un signal audio, nous pouvons utiliser une biblioth\xE8que Python "),Ae=o(vn,"CODE",{});var zl=i(Ae);An=l(zl,"librosa"),zl.forEach(s),Qn=l(vn,":"),vn.forEach(s),Cs=p(e),q(ne.$$.fragment,e),ks=p(e),be=o(e,"P",{});var Ll=i(be);On=l(Ll,"Prenons un exemple de son appel\xE9 \xAB trompette \xBB qui vient avec la biblioth\xE8que:"),Ll.forEach(s),Is=p(e),q(te.$$.fragment,e),js=p(e),T=o(e,"P",{});var A=i(T);Kn=l(A,"L\u2019exemple est charg\xE9 sous la forme d\u2019un tuple de s\xE9ries temporelles audio (ici nous l\u2019appelons "),Qe=o(A,"CODE",{});var Bl=i(Qe);et=l(Bl,"array"),Bl.forEach(s),st=l(A,") et de taux d\u2019\xE9chantillonnage ("),Oe=o(A,"CODE",{});var Gl=i(Oe);nt=l(Gl,"sampling_rate"),Gl.forEach(s),tt=l(A,`).
Jetons un coup d\u2019\u0153il \xE0 la forme d\u2019onde de ce son en utilisant la fonction `),Ke=o(A,"CODE",{});var Cl=i(Ke);lt=l(Cl,"waveshow()"),Cl.forEach(s),at=l(A," de librosa:"),A.forEach(s),Fs=p(e),q(le.$$.fragment,e),Ds=p(e),ae=o(e,"DIV",{class:!0});var kl=i(ae);xe=o(kl,"IMG",{src:!0,alt:!0}),kl.forEach(s),Ss=p(e),_e=o(e,"P",{});var Il=i(_e);rt=l(Il,`Cela trace l\u2019amplitude du signal sur l\u2019axe des y et le temps le long de l\u2019axe des x.
En d\u2019autres termes, chaque point correspond \xE0 une seule valeur d\u2019\xE9chantillon qui a \xE9t\xE9 prise lors de l\u2019\xE9chantillonnage de ce son.
Notez \xE9galement que librosa renvoie d\xE9j\xE0 l\u2019audio sous forme de valeurs \xE0 virgule flottante et que les valeurs d\u2019amplitude sont effectivement comprises dans la plage [-1.0, 1.0].
Visualiser l\u2019audio et l\u2019\xE9couter peut \xEAtre un outil utile pour comprendre les donn\xE9es avec lesquelles vous travaillez.
Vous pouvez voir la forme du signal, observer des mod\xE8les, apprendre \xE0 rep\xE9rer le bruit ou la distorsion.
Si vous pr\xE9traitez les donn\xE9es d\u2019une mani\xE8re ou d\u2019une autre, telle que la normalisation, le r\xE9\xE9chantillonnage ou le filtrage, vous pouvez confirmer visuellement que les \xE9tapes de pr\xE9traitement ont \xE9t\xE9 appliqu\xE9es comme pr\xE9vu.
Apr\xE8s avoir entra\xEEn\xE9 un mod\xE8le, vous pouvez \xE9galement visualiser des exemples o\xF9 des erreurs se produisent (par exemple, dans la t\xE2che de classification audio) pour d\xE9boguer le probl\xE8me.`),Il.forEach(s),Ps=p(e),k=o(e,"H2",{class:!0});var gn=i(k);N=o(gn,"A",{id:!0,class:!0,href:!0});var jl=i(N);es=o(jl,"SPAN",{});var Fl=i(es);q(re.$$.fragment,Fl),Fl.forEach(s),jl.forEach(s),ot=p(gn),ss=o(gn,"SPAN",{});var Dl=i(ss);it=l(Dl,"Le spectre de fr\xE9quences"),Dl.forEach(s),gn.forEach(s),Zs=p(e),J=o(e,"P",{});var Q=i(J);ut=l(Q,"Une autre fa\xE7on de visualiser les donn\xE9es audio consiste \xE0 tracer le "),ns=o(Q,"STRONG",{});var Sl=i(ns);dt=l(Sl,"spectre de fr\xE9quences"),Sl.forEach(s),pt=l(Q," d\u2019un signal audio, \xE9galement connu sous le nom de repr\xE9sentation du "),ts=o(Q,"EM",{});var Pl=i(ts);ct=l(Pl,"domaine fr\xE9quentiel"),Pl.forEach(s),mt=l(Q,`.
Le spectre est calcul\xE9 \xE0 l\u2019aide de la transform\xE9e de Fourier discr\xE8te ou TFD. Il d\xE9crit les fr\xE9quences individuelles qui composent le signal et leur force.
Tra\xE7ons le spectre de fr\xE9quences pour le m\xEAme son de trompette en prenant la TFD en utilisant la fonction `),ls=o(Q,"CODE",{});var Zl=i(ls);ft=l(Zl,"rfft()"),Zl.forEach(s),vt=l(Q,` de numpy. Bien qu\u2019il soit possible de tracer le spectre de l\u2019ensemble du son, il est plus utile de regarder une petite r\xE9gion \xE0 la place.
Ici, nous allons prendre la TFD sur les 4096 premiers \xE9chantillons, ce qui correspond \xE0 peu pr\xE8s \xE0 la longueur de la premi\xE8re note jou\xE9e:`),Q.forEach(s),Ns=p(e),q(oe.$$.fragment,e),Us=p(e),ie=o(e,"DIV",{class:!0});var Nl=i(ie);we=o(Nl,"IMG",{src:!0,alt:!0}),Nl.forEach(s),Hs=p(e),ye=o(e,"P",{});var Ul=i(ye);gt=l(Ul,"Cela trace la force des diff\xE9rentes composantes de fr\xE9quence pr\xE9sentes dans ce segment audio. Les valeurs de fr\xE9quence sont sur l\u2019axe des abscisses, g\xE9n\xE9ralement trac\xE9es sur une \xE9chelle logarithmique, tandis que leurs amplitudes sont sur l\u2019axe des y."),Ul.forEach(s),Xs=p(e),Ee=o(e,"P",{});var Hl=i(Ee);ht=l(Hl,`Le spectre de fr\xE9quences que nous avons trac\xE9 montre plusieurs pics.
Ces pics correspondent aux harmoniques de la note jou\xE9e, les harmoniques sup\xE9rieures \xE9tant plus calmes. Puisque le premier pic est \xE0 environ 620 Hz, c\u2019est le spectre de fr\xE9quence d\u2019une\u266D note Mi.`),Hl.forEach(s),Rs=p(e),$=o(e,"P",{});var O=i($);qt=l(O,`La sortie de la TDF est un tableau de nombres complexes, compos\xE9 de composants r\xE9els et imaginaires.
Prendre la magnitude avec `),as=o(O,"CODE",{});var Xl=i(as);bt=l(Xl,"np.abs(TFD)"),Xl.forEach(s),xt=l(O,`  extrait l\u2019information d\u2019amplitude du spectrogramme.
L\u2019angle entre les composants r\xE9els et imaginaires fournit ce que l\u2019on appelle le spectre de phase, mais il est souvent \xE9cart\xE9 dans les applications d\u2019apprentissage automatique.
Nous utilions `),rs=o(O,"CODE",{});var Rl=i(rs);_t=l(Rl,"librosa.amplitude_to_db()"),Rl.forEach(s),wt=l(O,` pour convertir les valeurs d\u2019amplitude en \xE9chelle de d\xE9cibels, ce qui facilite la visualisation des d\xE9tails les plus fins du spectre.
Parfois, les gens utilisent le `),os=o(O,"STRONG",{});var Wl=i(os);yt=l(Wl,"spectre de puissance"),Wl.forEach(s),Et=l(O,", qui mesure l\u2019\xE9nergie plut\xF4t que l\u2019amplitude. Il s\u2019agit simplement d\u2019un spectre avec les valeurs d\u2019amplitude au carr\xE9."),O.forEach(s),Ws=p(e),q(U.$$.fragment,e),Vs=p(e),Te=o(e,"P",{});var Vl=i(Te);Tt=l(Vl,`Le spectre de fr\xE9quences d\u2019un signal audio contient exactement la m\xEAme information que sa forme d\u2019onde. Ce sont simplement deux fa\xE7ons diff\xE9rentes de regarder les m\xEAmes donn\xE9es (ici, les 4096 premiers \xE9chantillons du son de la trompette).
L\xE0 o\xF9 la forme d\u2019onde trace l\u2019amplitude du signal audio au fil du temps, le spectre visualise les amplitudes des fr\xE9quences individuelles \xE0 un moment donn\xE9.`),Vl.forEach(s),Ys=p(e),I=o(e,"H2",{class:!0});var hn=i(I);H=o(hn,"A",{id:!0,class:!0,href:!0});var Yl=i(H);is=o(Yl,"SPAN",{});var Al=i(is);q(ue.$$.fragment,Al),Al.forEach(s),Yl.forEach(s),Jt=p(hn),us=o(hn,"SPAN",{});var Ql=i(us);$t=l(Ql,"Spectrogramme"),Ql.forEach(s),hn.forEach(s),As=p(e),X=o(e,"P",{});var qn=i(X);Mt=l(qn,`Et si nous voulons voir comment les fr\xE9quences d\u2019un signal audio changent ? La trompette joue plusieurs notes et elles ont toutes des fr\xE9quences diff\xE9rentes.
Le probl\xE8me est que le spectre ne montre qu\u2019un instantan\xE9 fig\xE9 des fr\xE9quences \xE0 un instant donn\xE9.
La solution consiste \xE0 prendre plusieurs TFD, chacune ne couvrant qu\u2019une petite tranche de temps, et \xE0 empiler les spectres r\xE9sultants dans un `),ds=o(qn,"STRONG",{});var Ol=i(ds);zt=l(Ol,"spectrogramme"),Ol.forEach(s),Lt=l(qn,"."),qn.forEach(s),Qs=p(e),L=o(e,"P",{});var Ce=i(L);Bt=l(Ce,`Un spectrogramme trace le contenu en fr\xE9quence d\u2019un signal audio au fil du temps. Il vous permet de voir le temps, la fr\xE9quence et l\u2019amplitude sur un seul graphique. L\u2019algorithme qui effectue ce calcul est la TFCT ou transform\xE9e de Fourier \xE0 court terme.
Le spectrogramme est l\u2019un des outils audio les plus informatifs \xE0 notre disposition.
Par exemple, lorsque nous travaillons avec un enregistrement musical, nous pouvons voir les diff\xE9rents instruments et pistes vocales et comment ils contribuent au son global. Dans la parole, nous pouvons identifier diff\xE9rents sons de voyelles car chaque voyelle est caract\xE9ris\xE9e par des fr\xE9quences particuli\xE8res.
Tra\xE7ons un spectrogramme pour le m\xEAme son de trompette, en utilisant les fonctions `),ps=o(Ce,"CODE",{});var Kl=i(ps);Gt=l(Kl,"stft()"),Kl.forEach(s),Ct=l(Ce," et "),cs=o(Ce,"CODE",{});var ea=i(cs);kt=l(ea,"specshow()"),ea.forEach(s),It=l(Ce," de librosa:"),Ce.forEach(s),Os=p(e),q(de.$$.fragment,e),Ks=p(e),pe=o(e,"DIV",{class:!0});var sa=i(pe);Je=o(sa,"IMG",{src:!0,alt:!0}),sa.forEach(s),en=p(e),$e=o(e,"P",{});var na=i($e);jt=l(na,`Dans ce graphique, l\u2019axe des x repr\xE9sente le temps comme dans la visualisation de la forme d\u2019onde, mais maintenant l\u2019axe des y repr\xE9sente la fr\xE9quence en Hz.
L\u2019intensit\xE9 de la couleur donne l\u2019amplitude ou la puissance de la composante fr\xE9quence \xE0 chaque point dans le temps, mesur\xE9e en d\xE9cibels (dB).`),na.forEach(s),sn=p(e),R=o(e,"P",{});var bn=i(R);Ft=l(bn,`Le spectrogramme est cr\xE9\xE9 en prenant de courts segments du signal audio, g\xE9n\xE9ralement de quelques millisecondes, et en calculant la transform\xE9e de Fourier discr\xE8te de chaque segment pour obtenir son spectre de fr\xE9quences.
Les spectres r\xE9sultants sont ensuite empil\xE9s sur l\u2019axe temporel pour cr\xE9er le spectrogramme.
Chaque tranche verticale de cette image correspond \xE0 un spectre de fr\xE9quences unique, vu du haut.
Par d\xE9faut, `),ms=o(bn,"CODE",{});var ta=i(ms);Dt=l(ta,"librosa.stft()"),ta.forEach(s),St=l(bn,` divise le signal audio en segments de 2048 \xE9chantillons, ce qui donne un bon compromis entre la r\xE9solution de fr\xE9quence et la r\xE9solution temporelle.
\xC9tant donn\xE9 que le spectrogramme et la forme d\u2019onde sont des vues diff\xE9rentes des m\xEAmes donn\xE9es, il est possible de retourner le spectrogramme dans la forme d\u2019onde d\u2019origine en utilisant la TFCT inverse.
Cependant, cela n\xE9cessite les informations de phase en plus des informations d\u2019amplitude. Si le spectrogramme a \xE9t\xE9 g\xE9n\xE9r\xE9 par un mod\xE8le d\u2019apprentissage automatique, il ne produit g\xE9n\xE9ralement que les amplitudes.
Dans ce cas, nous pouvons utiliser un algorithme de reconstruction de phase tel que l\u2019algorithme classique de Griffin-Lim, ou en utilisant un r\xE9seau neuronal appel\xE9 vocodeur, pour reconstruire une forme d\u2019onde \xE0 partir du spectrogramme.`),bn.forEach(s),nn=p(e),Me=o(e,"P",{});var la=i(Me);Pt=l(la,`Les spectrogrammes ne sont pas seulement utilis\xE9s pour la visualisation. De nombreux mod\xE8les d\u2019apprentissage automatique prendront des spectrogrammes en entr\xE9e, par opposition aux formes d\u2019onde, et produiront des spectrogrammes en sortie.
Maintenant que nous savons ce qu\u2019est un spectrogramme et comment il est fabriqu\xE9, jetons un coup d\u2019\u0153il \xE0 une variante de celui-ci largement utilis\xE9e pour le traitement de la parole: le spectrogramme mel.`),la.forEach(s),tn=p(e),j=o(e,"H2",{class:!0});var xn=i(j);W=o(xn,"A",{id:!0,class:!0,href:!0});var aa=i(W);fs=o(aa,"SPAN",{});var ra=i(fs);q(ce.$$.fragment,ra),ra.forEach(s),aa.forEach(s),Zt=p(xn),vs=o(xn,"SPAN",{});var oa=i(vs);Nt=l(oa,"Spectrogramme Mel"),oa.forEach(s),xn.forEach(s),ln=p(e),B=o(e,"P",{});var ke=i(B);Ut=l(ke,`Un spectrogramme mel est une variante du spectrogramme couramment utilis\xE9e dans les t\xE2ches de traitement de la parole et d\u2019apprentissage automatique.
Il est similaire \xE0 un spectrogramme en ce sens qu\u2019il montre le contenu en fr\xE9quence d\u2019un signal audio au fil du temps, mais sur un axe de fr\xE9quence diff\xE9rent.
Dans un spectrogramme standard, l\u2019axe de fr\xE9quence est lin\xE9aire et est mesur\xE9 en hertz (Hz).
Cependant, le syst\xE8me auditif humain est plus sensible aux changements dans les basses fr\xE9quences que dans les fr\xE9quences plus \xE9lev\xE9es, et cette sensibilit\xE9 diminue logarithmiquement \xE0 mesure que la fr\xE9quence augmente.
L\u2019\xE9chelle mel est une \xE9chelle perceptuelle qui se rapproche de la r\xE9ponse en fr\xE9quence non lin\xE9aire de l\u2019oreille humaine.
Pour cr\xE9er un spectrogramme mel, le STFT est utilis\xE9 comme auparavant, divisant l\u2019audio en segments courts pour obtenir une s\xE9quence de spectres de fr\xE9quence.
De plus, chaque spectre est envoy\xE9 \xE0 travers un ensemble de filtres, appel\xE9 `),gs=o(ke,"EM",{});var ia=i(gs);Ht=l(ia,"mel filterbank"),ia.forEach(s),Xt=l(ke,`, pour transformer les fr\xE9quences \xE0 l\u2019\xE9chelle mel.
Voyons comment nous pouvons tracer un spectrogramme mel en utilisant la fonction `),hs=o(ke,"CODE",{});var ua=i(hs);Rt=l(ua,"melspectrogram()"),ua.forEach(s),Wt=l(ke," de librosa, qui effectue toutes ces \xE9tapes pour nous:"),ke.forEach(s),an=p(e),q(me.$$.fragment,e),rn=p(e),fe=o(e,"DIV",{class:!0});var da=i(fe);ze=o(da,"IMG",{src:!0,alt:!0}),da.forEach(s),on=p(e),f=o(e,"P",{});var g=i(f);Vt=l(g,"Dans l\u2019exemple ci-dessus, "),qs=o(g,"CODE",{});var pa=i(qs);Yt=l(pa,"n_mels"),pa.forEach(s),At=l(g,` repr\xE9sente le nombre de bandes mel \xE0 g\xE9n\xE9rer.
Les bandes mel d\xE9finissent un ensemble de gammes de fr\xE9quences qui divisent le spectre en composantes perceptuellement significatives, en utilisant un ensemble de filtres dont la forme et l\u2019espacement sont choisis pour imiter la fa\xE7on dont l\u2019oreille humaine r\xE9pond \xE0 diff\xE9rentes fr\xE9quences.
Les valeurs courantes pour `),bs=o(g,"CODE",{});var ca=i(bs);Qt=l(ca,"n_mels"),ca.forEach(s),Ot=l(g," sont 40 ou 80. "),xs=o(g,"CODE",{});var ma=i(xs);Kt=l(ma,"fmax"),ma.forEach(s),el=l(g,` indique la fr\xE9quence la plus \xE9lev\xE9e (en Hz) qui nous int\xE9resse.
Tout comme avec un spectrogramme standard, il est courant d\u2019exprimer la force des composantes de fr\xE9quence mel en d\xE9cibels.
C\u2019est ce qu\u2019on appelle commun\xE9ment un `),_s=o(g,"STRONG",{});var fa=i(_s);sl=l(fa,"spectrogramme log-mel"),fa.forEach(s),nl=l(g,`, car la conversion en d\xE9cibels implique une op\xE9ration logarithmique.
L\u2019exemple ci-dessus utilis\xE9 `),ws=o(g,"CODE",{});var va=i(ws);tl=l(va,"librosa.power_to_db()"),va.forEach(s),ll=l(g," car "),ys=o(g,"CODE",{});var ga=i(ys);al=l(ga,"librosa.feature.melspectrogram()"),ga.forEach(s),rl=l(g," cr\xE9e un spectrogramme de puissance."),g.forEach(s),un=p(e),q(V.$$.fragment,e),dn=p(e),Le=o(e,"P",{});var ha=i(Le);ol=l(ha,`La cr\xE9ation d\u2019un spectrogramme mel est une op\xE9ration avec perte car elle implique le filtrage du signal.
La conversion d\u2019un spectrogramme mel en une forme d\u2019onde est plus difficile que de le faire pour un spectrogramme r\xE9gulier, car cela n\xE9cessite d\u2019estimer les fr\xE9quences qui ont \xE9t\xE9 jet\xE9es.
C\u2019est pourquoi des mod\xE8les d\u2019apprentissage automatique tels que le vocodeur HiFiGAN sont n\xE9cessaires pour produire une forme d\u2019onde \xE0 partir d\u2019un spectrogramme mel.
Compar\xE9 \xE0 un spectrogramme standard, un spectrogramme mel peut capturer des caract\xE9ristiques plus significatives du signal audio pour la perception humaine, ce qui en fait un choix populaire dans des t\xE2ches telles que la reconnaissance vocale, l\u2019identification du locuteur et la classification des genres musicaux.
Maintenant que vous savez comment visualiser des exemples de donn\xE9es audio, essayez de voir \xE0 quoi ressemblent vos sons pr\xE9f\xE9r\xE9s :)`),ha.forEach(s),this.h()},h(){c(m,"name","hf:doc:metadata"),c(m,"content",JSON.stringify($a)),c(F,"id","introduction-aux-donnes-audio"),c(F,"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(F,"href","#introduction-aux-donnes-audio"),c(y,"class","relative group"),c(qe,"href","preprocessing#resampling-the-audio-data"),c(S,"id","amplitude-et-profondeur-de-bits"),c(S,"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(S,"href","#amplitude-et-profondeur-de-bits"),c(G,"class","relative group"),c(P,"id","laudio-comme-forme-donde"),c(P,"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(P,"href","#laudio-comme-forme-donde"),c(C,"class","relative group"),_n(xe.src,il="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/waveform_plot.png")||c(xe,"src",il),c(xe,"alt","Waveform plot"),c(ae,"class","flex justify-center"),c(N,"id","le-spectre-de-frquences"),c(N,"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(N,"href","#le-spectre-de-frquences"),c(k,"class","relative group"),_n(we.src,ul="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/spectrum_plot.png")||c(we,"src",ul),c(we,"alt","Spectrum plot"),c(ie,"class","flex justify-center"),c(H,"id","spectrogramme"),c(H,"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(H,"href","#spectrogramme"),c(I,"class","relative group"),_n(Je.src,dl="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/spectrogram_plot.png")||c(Je,"src",dl),c(Je,"alt","Spectrogram plot"),c(pe,"class","flex justify-center"),c(W,"id","spectrogramme-mel"),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","#spectrogramme-mel"),c(j,"class","relative group"),_n(ze.src,pl="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/mel-spectrogram.png")||c(ze,"src",pl),c(ze,"alt","Mel spectrogram plot"),c(fe,"class","flex justify-center")},m(e,a){n(document.head,m),u(e,v,a),u(e,y,a),n(y,F),n(F,Fe),b(K,Fe,null),n(y,wn),n(y,De),n(De,yn),u(e,Ts,a),u(e,D,a),n(D,En),n(D,Se),n(Se,Tn),n(D,Jn),u(e,Js,a),u(e,he,a),n(he,$n),u(e,$s,a),u(e,E,a),n(E,Mn),n(E,Pe),n(Pe,zn),n(E,Ln),n(E,Ze),n(Ze,Bn),n(E,Gn),n(E,qe),n(qe,Cn),n(E,kn),u(e,Ms,a),u(e,G,a),n(G,S),n(S,Ne),b(ee,Ne,null),n(G,In),n(G,Ue),n(Ue,jn),u(e,zs,a),u(e,M,a),n(M,Fn),n(M,He),n(He,Dn),n(M,Sn),n(M,Xe),n(Xe,Pn),n(M,Zn),u(e,Ls,a),u(e,C,a),n(C,P),n(P,Re),b(se,Re,null),n(C,Nn),n(C,We),n(We,Un),u(e,Bs,a),u(e,z,a),n(z,Hn),n(z,Ve),n(Ve,Xn),n(z,Rn),n(z,Ye),n(Ye,Wn),n(z,Vn),u(e,Gs,a),u(e,Z,a),n(Z,Yn),n(Z,Ae),n(Ae,An),n(Z,Qn),u(e,Cs,a),b(ne,e,a),u(e,ks,a),u(e,be,a),n(be,On),u(e,Is,a),b(te,e,a),u(e,js,a),u(e,T,a),n(T,Kn),n(T,Qe),n(Qe,et),n(T,st),n(T,Oe),n(Oe,nt),n(T,tt),n(T,Ke),n(Ke,lt),n(T,at),u(e,Fs,a),b(le,e,a),u(e,Ds,a),u(e,ae,a),n(ae,xe),u(e,Ss,a),u(e,_e,a),n(_e,rt),u(e,Ps,a),u(e,k,a),n(k,N),n(N,es),b(re,es,null),n(k,ot),n(k,ss),n(ss,it),u(e,Zs,a),u(e,J,a),n(J,ut),n(J,ns),n(ns,dt),n(J,pt),n(J,ts),n(ts,ct),n(J,mt),n(J,ls),n(ls,ft),n(J,vt),u(e,Ns,a),b(oe,e,a),u(e,Us,a),u(e,ie,a),n(ie,we),u(e,Hs,a),u(e,ye,a),n(ye,gt),u(e,Xs,a),u(e,Ee,a),n(Ee,ht),u(e,Rs,a),u(e,$,a),n($,qt),n($,as),n(as,bt),n($,xt),n($,rs),n(rs,_t),n($,wt),n($,os),n(os,yt),n($,Et),u(e,Ws,a),b(U,e,a),u(e,Vs,a),u(e,Te,a),n(Te,Tt),u(e,Ys,a),u(e,I,a),n(I,H),n(H,is),b(ue,is,null),n(I,Jt),n(I,us),n(us,$t),u(e,As,a),u(e,X,a),n(X,Mt),n(X,ds),n(ds,zt),n(X,Lt),u(e,Qs,a),u(e,L,a),n(L,Bt),n(L,ps),n(ps,Gt),n(L,Ct),n(L,cs),n(cs,kt),n(L,It),u(e,Os,a),b(de,e,a),u(e,Ks,a),u(e,pe,a),n(pe,Je),u(e,en,a),u(e,$e,a),n($e,jt),u(e,sn,a),u(e,R,a),n(R,Ft),n(R,ms),n(ms,Dt),n(R,St),u(e,nn,a),u(e,Me,a),n(Me,Pt),u(e,tn,a),u(e,j,a),n(j,W),n(W,fs),b(ce,fs,null),n(j,Zt),n(j,vs),n(vs,Nt),u(e,ln,a),u(e,B,a),n(B,Ut),n(B,gs),n(gs,Ht),n(B,Xt),n(B,hs),n(hs,Rt),n(B,Wt),u(e,an,a),b(me,e,a),u(e,rn,a),u(e,fe,a),n(fe,ze),u(e,on,a),u(e,f,a),n(f,Vt),n(f,qs),n(qs,Yt),n(f,At),n(f,bs),n(bs,Qt),n(f,Ot),n(f,xs),n(xs,Kt),n(f,el),n(f,_s),n(_s,sl),n(f,nl),n(f,ws),n(ws,tl),n(f,ll),n(f,ys),n(ys,al),n(f,rl),u(e,un,a),b(V,e,a),u(e,dn,a),u(e,Le,a),n(Le,ol),pn=!0},p(e,[a]){const ve={};a&2&&(ve.$$scope={dirty:a,ctx:e}),U.$set(ve);const Es={};a&2&&(Es.$$scope={dirty:a,ctx:e}),V.$set(Es)},i(e){pn||(x(K.$$.fragment,e),x(ee.$$.fragment,e),x(se.$$.fragment,e),x(ne.$$.fragment,e),x(te.$$.fragment,e),x(le.$$.fragment,e),x(re.$$.fragment,e),x(oe.$$.fragment,e),x(U.$$.fragment,e),x(ue.$$.fragment,e),x(de.$$.fragment,e),x(ce.$$.fragment,e),x(me.$$.fragment,e),x(V.$$.fragment,e),pn=!0)},o(e){_(K.$$.fragment,e),_(ee.$$.fragment,e),_(se.$$.fragment,e),_(ne.$$.fragment,e),_(te.$$.fragment,e),_(le.$$.fragment,e),_(re.$$.fragment,e),_(oe.$$.fragment,e),_(U.$$.fragment,e),_(ue.$$.fragment,e),_(de.$$.fragment,e),_(ce.$$.fragment,e),_(me.$$.fragment,e),_(V.$$.fragment,e),pn=!1},d(e){s(m),e&&s(v),e&&s(y),w(K),e&&s(Ts),e&&s(D),e&&s(Js),e&&s(he),e&&s($s),e&&s(E),e&&s(Ms),e&&s(G),w(ee),e&&s(zs),e&&s(M),e&&s(Ls),e&&s(C),w(se),e&&s(Bs),e&&s(z),e&&s(Gs),e&&s(Z),e&&s(Cs),w(ne,e),e&&s(ks),e&&s(be),e&&s(Is),w(te,e),e&&s(js),e&&s(T),e&&s(Fs),w(le,e),e&&s(Ds),e&&s(ae),e&&s(Ss),e&&s(_e),e&&s(Ps),e&&s(k),w(re),e&&s(Zs),e&&s(J),e&&s(Ns),w(oe,e),e&&s(Us),e&&s(ie),e&&s(Hs),e&&s(ye),e&&s(Xs),e&&s(Ee),e&&s(Rs),e&&s($),e&&s(Ws),w(U,e),e&&s(Vs),e&&s(Te),e&&s(Ys),e&&s(I),w(ue),e&&s(As),e&&s(X),e&&s(Qs),e&&s(L),e&&s(Os),w(de,e),e&&s(Ks),e&&s(pe),e&&s(en),e&&s($e),e&&s(sn),e&&s(R),e&&s(nn),e&&s(Me),e&&s(tn),e&&s(j),w(ce),e&&s(ln),e&&s(B),e&&s(an),w(me,e),e&&s(rn),e&&s(fe),e&&s(on),e&&s(f),e&&s(un),w(V,e),e&&s(dn),e&&s(Le)}}}const $a={local:"introduction-aux-donnes-audio",sections:[{local:"amplitude-et-profondeur-de-bits",title:"Amplitude et profondeur de bits"},{local:"laudio-comme-forme-donde",title:"L'audio comme forme d'onde"},{local:"le-spectre-de-frquences",title:"Le spectre de fr\xE9quences"},{local:"spectrogramme",title:"Spectrogramme"},{local:"spectrogramme-mel",title:"Spectrogramme Mel"}],title:"Introduction aux donn\xE9es audio"};function Ma(ge){return ya(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ca extends ba{constructor(m){super();xa(this,m,Ma,Ja,_a,{})}}export{Ca as default,$a as metadata};
