import{S as fi,i as vi,s as bi,e as n,k as u,w as v,t,M as gi,c as l,d as a,m as c,a as i,x as b,h as d,b as m,N as Ka,G as o,g as r,y as g,q as E,o as y,B as q,v as Ei}from"../../chunks/vendor-hf-doc-builder.js";import{T as pi}from"../../chunks/Tip-hf-doc-builder.js";import{I as we}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as va}from"../../chunks/CodeBlock-hf-doc-builder.js";function yi(je){let p;return{c(){p=t(`\u{1F4A1} En la pr\xE1ctica, las personas utilizan indistintamente los t\xE9rminos FFT (Transformada R\xE1pida de Fourier) y DFT (Transformada Discreta de Fourier), 
ya que la FFT es la \xFAnica forma eficiente de calcular la DFT en una computadora.`)},l(h){p=d(h,`\u{1F4A1} En la pr\xE1ctica, las personas utilizan indistintamente los t\xE9rminos FFT (Transformada R\xE1pida de Fourier) y DFT (Transformada Discreta de Fourier), 
ya que la FFT es la \xFAnica forma eficiente de calcular la DFT en una computadora.`)},m(h,f){r(h,p,f)},d(h){h&&a(p)}}}function qi(je){let p,h,f,z,B;return{c(){p=n("p"),h=t(`\u{1F4A1} \xA1No todos los espectrogramas mel son iguales! Existen dos variantes comumente usadas de las escalas de mel(\u201Chtk\u201D y \u201Cslaney\u201D),
, y en lugar del espectrograma de potencia, se puede estar usando el espectrograma de amplitud. El c\xE1lculo de un espectrograma
logar\xEDtmico de mel no siempre usa decibelios reales, puede que se haya aplicado solamente la funci\xF3n `),f=n("code"),z=t("log"),B=t(`. Por lo tanto,
si un modelo de aprendizaje autom\xE1tico espera un espectrograma de mel como entrada, verifica que est\xE9s calcul\xE1ndolo de la misma manera
para asegurarte de que sea compatible.`)},l(_){p=l(_,"P",{});var M=i(p);h=d(M,`\u{1F4A1} \xA1No todos los espectrogramas mel son iguales! Existen dos variantes comumente usadas de las escalas de mel(\u201Chtk\u201D y \u201Cslaney\u201D),
, y en lugar del espectrograma de potencia, se puede estar usando el espectrograma de amplitud. El c\xE1lculo de un espectrograma
logar\xEDtmico de mel no siempre usa decibelios reales, puede que se haya aplicado solamente la funci\xF3n `),f=l(M,"CODE",{});var I=i(f);z=d(I,"log"),I.forEach(a),B=d(M,`. Por lo tanto,
si un modelo de aprendizaje autom\xE1tico espera un espectrograma de mel como entrada, verifica que est\xE9s calcul\xE1ndolo de la misma manera
para asegurarte de que sea compatible.`),M.forEach(a)},m(_,M){r(_,p,M),o(p,h),o(p,f),o(f,z),o(p,B)},d(_){_&&a(p)}}}function hi(je){let p,h,f,z,B,_,M,I,$s,eo,Te,Ms,ao,w,Js,ba,Gs,ks,ga,Bs,Ps,Ea,Ss,xs,oo,$e,Fs,so,P,A,ya,ne,Cs,qa,Ds,ro,Me,Is,no,le,Je,Bn,lo,Ge,ke,As,ie,Ls,io,L,Us,ha,Ns,Ws,to,Be,Zs,uo,J,Hs,_a,Rs,Xs,Pe,Ys,Vs,co,S,U,za,te,Qs,wa,Os,mo,Se,Ks,po,N,er,ja,ar,or,fo,xe,sr,vo,Fe,rr,bo,Ce,nr,go,De,lr,Eo,x,W,Ta,de,ir,$a,tr,yo,Z,dr,Ma,ur,cr,qo,Ie,mr,ho,H,pr,Ja,fr,vr,_o,ue,zo,Ae,br,wo,ce,jo,j,gr,Ga,Er,yr,ka,qr,hr,Ba,_r,zr,To,me,$o,pe,Le,Pn,Mo,Ue,wr,Jo,Ne,jr,Go,We,Tr,ko,F,R,Pa,fe,$r,Sa,Mr,Bo,Ze,Jr,Po,He,Gr,So,ve,xo,be,Re,Sn,Fo,Xe,kr,Co,Ye,Br,Do,Ve,Pr,Io,G,Sr,xa,xr,Fr,Fa,Cr,Dr,Ao,X,Lo,Qe,Ir,Uo,C,Y,Ca,ge,Ar,Da,Lr,No,V,Ur,Ia,Nr,Wr,Wo,Oe,Zr,Zo,Ke,Hr,Ho,k,Rr,Aa,Xr,Yr,La,Vr,Qr,Ro,Ee,Xo,ye,ea,xn,Yo,aa,Or,Vo,Q,Kr,Ua,en,an,Qo,oa,on,Oo,sa,sn,Ko,ra,rn,es,D,O,Na,qe,nn,Wa,ln,as,na,tn,os,la,dn,ss,ia,un,rs,K,cn,Za,mn,pn,ns,he,ls,_e,ta,Fn,is,T,fn,Ha,vn,bn,Ra,gn,En,Xa,yn,qn,ts,$,hn,Ya,_n,zn,Va,wn,jn,Qa,Tn,$n,ds,ee,us,da,Mn,cs,ua,Jn,ms,ca,Gn,ps;return _=new we({}),ne=new we({}),te=new we({}),de=new we({}),ue=new va({props:{code:"cGlwJTIwaW5zdGFsbCUyMGxpYnJvc2E=",highlighted:"pip install librosa"}}),ce=new va({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>))`}}),me=new va({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)`}}),fe=new we({}),ve=new va({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBZGZ0X2lucHV0JTIwJTNEJTIwYXJyYXklNUIlM0E0MDk2JTVEJTBBJTBBJTIzJTIwY2FsY3VsYXIlMjBsYSUyMERGVCUwQXdpbmRvdyUyMCUzRCUyMG5wLmhhbm5pbmcobGVuKGRmdF9pbnB1dCkpJTBBd2luZG93ZWRfaW5wdXQlMjAlM0QlMjBkZnRfaW5wdXQlMjAqJTIwd2luZG93JTBBZGZ0JTIwJTNEJTIwbnAuZmZ0LnJmZnQod2luZG93ZWRfaW5wdXQpJTBBJTBBJTIzJTIwb2J0ZW5lciUyMGxhJTIwYW1wbGl0dWQlMjBkZWwlMjBlc3BlY3RybyUyMGVuJTIwZGVjaWJlbGVzJTBBYW1wbGl0dWRlJTIwJTNEJTIwbnAuYWJzKGRmdCklMEFhbXBsaXR1ZGVfZGIlMjAlM0QlMjBsaWJyb3NhLmFtcGxpdHVkZV90b19kYihhbXBsaXR1ZGUlMkMlMjByZWYlM0RucC5tYXgpJTBBJTBBJTIzJTIwT2J0ZW5lciUyMGxvcyUyMGJpbnMlMjBkZSUyMGZyZWN1ZW5jaWElMEFmcmVxdWVuY3klMjAlM0QlMjBsaWJyb3NhLmZmdF9mcmVxdWVuY2llcyhzciUzRHNhbXBsaW5nX3JhdGUlMkMlMjBuX2ZmdCUzRGxlbihkZnRfaW5wdXQpKSUwQSUwQXBsdC5maWd1cmUoKS5zZXRfZmlnd2lkdGgoMTIpJTBBcGx0LnBsb3QoZnJlcXVlbmN5JTJDJTIwYW1wbGl0dWRlX2RiKSUwQXBsdC54bGFiZWwoJTIyRnJlcXVlbmN5JTIwKEh6KSUyMiklMEFwbHQueWxhYmVsKCUyMkFtcGxpdHVkZSUyMChkQiklMjIpJTBBcGx0LnhzY2FsZSglMjJsb2clMjIp",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

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

<span class="hljs-comment"># calcular la DFT</span>
window = np.hanning(<span class="hljs-built_in">len</span>(dft_input))
windowed_input = dft_input * window
dft = np.fft.rfft(windowed_input)

<span class="hljs-comment"># obtener la amplitud del espectro en decibeles</span>
amplitude = np.<span class="hljs-built_in">abs</span>(dft)
amplitude_db = librosa.amplitude_to_db(amplitude, ref=np.<span class="hljs-built_in">max</span>)

<span class="hljs-comment"># Obtener los bins de frecuencia</span>
frequency = librosa.fft_frequencies(sr=sampling_rate, n_fft=<span class="hljs-built_in">len</span>(dft_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>)`}}),X=new pi({props:{$$slots:{default:[yi]},$$scope:{ctx:je}}}),ge=new we({}),Ee=new va({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()`}}),qe=new we({}),he=new va({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()`}}),ee=new pi({props:{$$slots:{default:[qi]},$$scope:{ctx:je}}}),{c(){p=n("meta"),h=u(),f=n("h1"),z=n("a"),B=n("span"),v(_.$$.fragment),M=u(),I=n("span"),$s=t("Introducci\xF3n a los datos de audio"),eo=u(),Te=n("p"),Ms=t(`Por naturaleza, una onda sonora es una se\xF1al continua, es decir, que contiene un n\xFAmero infinito de valores de la se\xF1al en un tiempo determinado.
Este es un problema para los dispositivos digitales que trabajan con un n\xFAmero finito de valores. La onda sonora necesita ser convertida en
un serie de valores discretos para que pueda ser procesada, almacenada y transmitida por un por un dispositivo digital, esta representaci\xF3n discreta
se conoce como representaci\xF3n digital.`),ao=u(),w=n("p"),Js=t(`Si exploras cualquier base de datos de audio, encontrar\xE1s archivos digitales con fragmentos de sonido que pueden contener narraciones o m\xFAsica.
Puedes encontrar diferentes formatos de archivo como `),ba=n("code"),Gs=t(".wav"),ks=t(" (Waveform Audio File), "),ga=n("code"),Bs=t(".flac"),Ps=t(` (Free Lossless Audio Codec)
y `),Ea=n("code"),Ss=t(".mp3"),xs=t(" (MPEG-1 Audio Layer 3). Estos formatos difieren principalmente en como comprimen la representaci\xF3n digital de la se\xF1al de audio."),oo=u(),$e=n("p"),Fs=t(`Examinemos como pasamos de una se\xF1al continua a una representaci\xF3n digital. La se\xF1al ac\xFAstica(an\xE1loga) es primero capturada por un micr\xF3fono,
que convierte las ondas sonoras en una se\xF1al electrica(Tambien an\xE1loga). La se\xF1al electrica es digitalizada por un
conversor An\xE1logo-Digital(ADC) para tener una representaci\xF3n digital a trav\xE9s del muestreo.`),so=u(),P=n("h2"),A=n("a"),ya=n("span"),v(ne.$$.fragment),Cs=u(),qa=n("span"),Ds=t("Muestreo y frecuencia de muestreo"),ro=u(),Me=n("p"),Is=t(`El muestreo es el proceso de medir el valor de una se\xF1al continua en intervalos de tiempo fijos. La se\xF1al sampleada es discreta,
ya que contiene un n\xFAmero finito de valores de la se\xF1al.`),no=u(),le=n("div"),Je=n("img"),lo=u(),Ge=n("p"),ke=n("em"),As=t("Ilustraci\xF3n de un articulo de Wikipedia: "),ie=n("a"),Ls=t("Muestreo(procesamiento de se\xF1al)"),io=u(),L=n("p"),Us=t("La "),ha=n("strong"),Ns=t("Tasa de Muestreo"),Ws=t(` (Tambien llamada frecuencia de muestreo) es el n\xFAmero de muestras capturadas en un segundo y es medida en unidades
de Hertz (Hz). Para tener un punto de referencia, un audio con calidad de CD tiene una frecuencia de muestreo de 44,100 Hz, es decir que se
capturan 44,100 muestras por segundo. Existen archivos de audio Hi-Fi que utilizan frecuencias de muestreo de 192,000 hz o 192kHz. Una
frecuencia de muestreo com\xFAnmente usada para entrenar modelos de voz es 16,0000 Hz o 16 kHz.`),to=u(),Be=n("p"),Zs=t(`La elecci\xF3n de la frecuencia de muestreo determina la frecuencia m\xE1s alta que puede ser representada digitalmente. Esto se conoce
como el limite de Nyquist y es exactamente la mitad de la se\xF1al de la frecuencia de muestreo. Las frecuencias audibles en la voz humana
estan por debajo de 8kHz, por lo que una frecuencia de 16kHz es suficiente. Usar una frecuencia de muestreo m\xE1s alta no va a capturar
m\xE1s informaci\xF3n pero si a\xF1ade un costo computacional al procesamiento de estos archivos. En el caso contrario, elegir una frecuencia de
muestreo muy baja puede resultar en perdidas de informaci\xF3n. Audios de voz sampleados a 8kHz sonar\xE1n opacos, ya que las frecuencias por encima
de 4kHz no pueden ser capturadas por esta frecuencia de muestreo.`),uo=u(),J=n("p"),Hs=t(`Es importante asegurar que todos los ejemplos de audio de la base de datos tienen la misma frecuencia de muestreo. Si planeas usar
tus propios audios para hacer fine-tunning de un modelo pre-entrenado, la frecuencia de muestreo de estos audios debe concordar con
la frecuencia de muestreo con la que el modelo fue previamente entrenado. La frecuencia de muestreo determina el intervalo de tiempo
entre muestras de audio sucesivas, lo que tiene un efecto en la resoluci\xF3n temporal de los datos de audio. Por ejemplo: un audio de 5
segundos con una frecuencia de muestreo de 16,000 Hz ser\xE1 representado como una serie de 80,000 valores, mientras que el mismo audio con
una frecuencia de muestreo de 8,000hz ser\xE1 representado como una serie de 40,000 valores. Los modelos de transformers para audio tratan los
ejemplos como secuencias y se basan en mecanismos de atenci\xF3n para aprender del audio o de representaci\xF3nes multimodales. Ya que la longitud
de las secuencias difiere al usar frecuencias de muestreo diferentes, ser\xE1 dificil para el modelo generalizar para diferentes frecuencias de muestro.
`),_a=n("strong"),Rs=t("Resamplear"),Xs=t(" es el proceso de convertir una se\xF1al a otra frecuencia de muestreo, es parte de la secci\xF3n de "),Pe=n("a"),Ys=t("preprosesamiento"),Vs=t(" de datos de audio."),co=u(),S=n("h2"),U=n("a"),za=n("span"),v(te.$$.fragment),Qs=u(),wa=n("span"),Os=t("Amplitud y profundidad de bits"),mo=u(),Se=n("p"),Ks=t("Mientras que la frecuencia de muestreo te indica con qu\xE9 frecuencia se toman las muestras, \xBFQu\xE9 representan exactamente los valores en cada muestra?"),po=u(),N=n("p"),er=t("El sonido se produce por cambios en la presi\xF3n del aire a frecuencias audibles para los humanos. La "),ja=n("strong"),ar=t("amplitud"),or=t(` de un sonido describe el nivel
de presi\xF3n sonora en un momento dado y se mide en decibelios (dB). Percibimos la amplitud como volumen o intensidad del sonido. Por ejemplo,
una voz normal al hablar est\xE1 por debajo de los 60 dB, mientras que un concierto de rock puede llegar a los 125 dB, alcanzando
los l\xEDmites de la audici\xF3n humana.`),fo=u(),xe=n("p"),sr=t(`En el audio digital, cada muestra de audio registra la amplitud de la onda de audio en un momento espec\xEDfico. La profundidad de bits de
la muestra determina con qu\xE9 precisi\xF3n se puede describir este valor de amplitud. Cuanto mayor sea la profundidad de bits, m\xE1s fiel ser\xE1 la
representaci\xF3n digital a la onda de sonido continua original.`),vo=u(),Fe=n("p"),rr=t(`Las profundidades de bits de audio m\xE1s comunes son 16 bits y 24 bits. Cada una es una medida binaria que representa el n\xFAmero de pasos posibles
en los que se puede cuantificar el valor de amplitud al convertirlo de continuo a discreto: 65.536 pasos para el audio de 16 bits
y 16.777.216 pasos para el audio de 24 bits. Debido a que la cuantificaci\xF3n implica redondear el valor continuo a un valor discreto, el proceso
de muestreo introduce ruido. Cuanto mayor sea la profundidad de bits, menor ser\xE1 este ruido de cuantificaci\xF3n. En la pr\xE1ctica, el ruido de
cuantificaci\xF3n del audio de 16 bits ya es lo suficientemente peque\xF1o como para ser audible, por lo que generalmente no es
necesario utilizar profundidades de bits m\xE1s altas.`),bo=u(),Ce=n("p"),nr=t(`Tambi\xE9n es posible encontrarse con audio de 32 bits. Este almacena las muestras como valores de punto flotante, mientras que el audio
de 16 bits y 24 bits utiliza muestras enteras. La precisi\xF3n de un valor de punto flotante de 32 bits es de 24 bits, lo que le otorga
la misma profundidad de bits que el audio de 24 bits. Se espera que las muestras de audio de punto flotante se encuentren dentro del
rango [-1.0, 1.0]. Dado que los modelos de aprendizaje autom\xE1tico trabajan naturalmente con datos de punto flotante, el audio debe convertirse
primero al formato de punto flotante antes de poder ser utilizado para entrenar el modelo. Veremos c\xF3mo hacer esto en la pr\xF3xima secci\xF3n
sobre Preprocesamiento.`),go=u(),De=n("p"),lr=t(`Al igual que con las se\xF1ales de audio continuas, la amplitud del audio digital se expresa t\xEDpicamente en decibelios (dB). Dado que la audici\xF3n
humana es de naturaleza logar\xEDtmica, es decir, nuestros o\xEDdos son m\xE1s sensibles a las peque\xF1as fluctuaciones en sonidos silenciosos que en
sonidos fuertes, el volumen de un sonido es m\xE1s f\xE1cil de interpretar si las amplitudes est\xE1n en decibelios, que tambi\xE9n son logar\xEDtmicos.
La escala de decibelios para el audio real comienza en 0 dB, que representa el sonido m\xE1s silencioso posible que los humanos pueden escuchar,
y los sonidos m\xE1s fuertes tienen valores m\xE1s grandes. Sin embargo, para las se\xF1ales de audio digital, 0 dB es la amplitud m\xE1s alta posible,
mientras que todas las dem\xE1s amplitudes son negativas. Como regla general: cada -6 dB implica una reducci\xF3n a la mitad de la amplitud, y cualquier
valor por debajo de -60 dB generalmente es inaudible a menos que subas mucho el volumen.`),Eo=u(),x=n("h2"),W=n("a"),Ta=n("span"),v(de.$$.fragment),ir=u(),$a=n("span"),tr=t("Audio como forma de onda"),yo=u(),Z=n("p"),dr=t("Es posible que hayas visto los sonidos visualizados como una "),Ma=n("strong"),ur=t("forma de onda"),cr=t(`(waveform), que representa los valores de las muestras a lo
largo del tiempo y muestra los cambios en la amplitud del sonido. Esta representaci\xF3n tambi\xE9n se conoce como la representaci\xF3n en
el dominio del tiempo del sonido.`),qo=u(),Ie=n("p"),mr=t(`Este tipo de visualizaci\xF3n es \xFAtil para identificar caracter\xEDsticas espec\xEDficas de la se\xF1al de audio, como la sincronizaci\xF3n
de eventos de sonido individuales, la intensidad general de la se\xF1al y cualquier irregularidad o ruido presente en el audio.`),ho=u(),H=n("p"),pr=t("Para graficar la forma de onda de una se\xF1al de audio, usamos una libreria de Python llamada "),Ja=n("code"),fr=t("librosa"),vr=t(":"),_o=u(),v(ue.$$.fragment),zo=u(),Ae=n("p"),br=t("Carguemos un ejemplo de la libreria llamado \u201Ctrumpet\u201D:"),wo=u(),v(ce.$$.fragment),jo=u(),j=n("p"),gr=t("El ejemplo es cargado como una tupla formada por una serie temporal de valores de audio(llamado "),Ga=n("code"),Er=t("array"),yr=t(") y la frecuencia de muestreo ("),ka=n("code"),qr=t("sampling_rate"),hr=t(`).
Grafiquemos este sonido usando la funci\xF3n `),Ba=n("code"),_r=t("waveshow()"),zr=t(" de librosa:"),To=u(),v(me.$$.fragment),$o=u(),pe=n("div"),Le=n("img"),Mo=u(),Ue=n("p"),wr=t(`Esta representaci\xF3n grafica la amplitud de la se\xF1al en el eje y y el tiempo en el eje x. En otras palabras, cada punto corresponde
a un \xFAnico valor de muestra que se tom\xF3 cuando se muestre\xF3 este sonido. Tambi\xE9n es importante tener en cuenta que librosa devuelve
el audio en forma de valores de punto flotante y que los valores de amplitud se encuentran dentro del rango [-1.0, 1.0].`),Jo=u(),Ne=n("p"),jr=t(`Visualizar el audio junto con escucharlo puede ser una herramienta \xFAtil para comprender los datos con los que est\xE1s trabajando.
Puedes observar la forma de la se\xF1al, identificar patrones y aprender a detectar ruido o distorsi\xF3n.
Si preprocesas los datos de alguna manera, como normalizaci\xF3n, remuestreo o filtrado, puedes confirmar visualmente que los pasos
de preprocesamiento se hayan aplicado correctamente.`),Go=u(),We=n("p"),Tr=t(`Despu\xE9s de entrenar un modelo, tambi\xE9n puedes visualizar las muestras donde se producen errores (por ejemplo, en una tarea de
clasificaci\xF3n de audio) para solucionar el problema. Esto te permitir\xE1 depurar y entender mejor las \xE1reas en las que el modelo
puede tener dificultades o errores.`),ko=u(),F=n("h2"),R=n("a"),Pa=n("span"),v(fe.$$.fragment),$r=u(),Sa=n("span"),Mr=t("El espectro de frecuencia"),Bo=u(),Ze=n("p"),Jr=t(`Otra forma de visualizar los datos de audio es graficar el espectro de frecuencia de una se\xF1al de audio,
tambi\xE9n conocido como la representaci\xF3n en el dominio de la frecuencia. El espectro se calcula utilizando la transformada
discreta de Fourier o DFT. Describe las frecuencias individuales que componen la se\xF1al y su intensidad.`),Po=u(),He=n("p"),Gr=t(`Grafiquemos el espectro de frecuencia para el mismo sonido de trompeta mediante el c\xE1lculo de la transformada discreta de Fourier (DFT)
utilizando la funci\xF3n rfft() de numpy. Si bien es posible trazar el espectro de toda la se\xF1al de audio, es m\xE1s \xFAtil observar una peque\xF1a
regi\xF3n en su lugar. Aqu\xED tomaremos la DFT de los primeros 4096 valores de muestra, que es aproximadamente la duraci\xF3n de la primera nota
que se est\xE1 tocando:`),So=u(),v(ve.$$.fragment),xo=u(),be=n("div"),Re=n("img"),Fo=u(),Xe=n("p"),kr=t(`Esto representa la intensidad de los diferentes componentes de frecuencia que est\xE1n presentes en este segmento de audio.
Los valores de frecuencia se encuentran en el eje x, generalmente representados en una escala logar\xEDtmica, mientras que
las amplitudes se encuentran en el eje y.`),Co=u(),Ye=n("p"),Br=t(`El espectro de frecuencia que hemos graficado muestra varios picos. Estos picos corresponden a los arm\xF3nicos de la nota que se est\xE1 tocando,
siendo los arm\xF3nicos m\xE1s altos(en frecuencia) los m\xE1s silenciosos. Dado que el primer pico se encuentra alrededor de 620 Hz, este es el espectro
de frecuencia de una nota Mi\u266D.`),Do=u(),Ve=n("p"),Pr=t(`La salida de la DFT es una matriz de n\xFAmeros complejos, compuestos por componentes reales e imaginarios. Tomar la magnitud con np.abs(dft)
extrae la informaci\xF3n de amplitud del espectrograma. El \xE1ngulo entre los componentes reales e imaginarios proporciona el llamado espectro
de fase, pero esto a menudo se descarta en aplicaciones de aprendizaje autom\xE1tico.`),Io=u(),G=n("p"),Sr=t("Utilizamos "),xa=n("code"),xr=t("librosa.amplitude_to_db()"),Fr=t(` para convertir los valores de amplitud a la escala de decibelios, lo que facilita ver los detalles m\xE1s
sutiles en el espectro. A veces, las personas utilizan el `),Fa=n("strong"),Cr=t("espectro de potencia"),Dr=t(`, que mide la energ\xEDa en lugar de la amplitud; esto es simplemente
un espectro con los valores de amplitud elevados al cuadrado.+`),Ao=u(),v(X.$$.fragment),Lo=u(),Qe=n("p"),Ir=t(`El espectro de frecuencia de una se\xF1al de audio contiene exactamente la misma informaci\xF3n que su representaci\xF3n en el dominio
del tiempo(forma de onda); simplemente son dos formas diferentes de ver los mismos datos (en este caso, los primeros 4096 valores
de muestra del sonido de trompeta). Mientras que la forma de onda representa la amplitud de la se\xF1al de audio a lo largo del tiempo,
el espectro visualiza las amplitudes de las frecuencias individuales en un punto fijo en el tiempo.`),Uo=u(),C=n("h2"),Y=n("a"),Ca=n("span"),v(ge.$$.fragment),Ar=u(),Da=n("span"),Lr=t("Espectrograma"),No=u(),V=n("p"),Ur=t(`\xBFY si queremos ver c\xF3mo cambian las frecuencias en una se\xF1al de audio? La trompeta toca varias notas que tienen diferentes frecuencias.
El problema es que el espectro solo es una foto fija de las frecuencias en un instante determinado. La soluci\xF3n es tomar m\xFAltiples DFT,
cada una abarcando un peque\xF1o fragmento de la se\xF1al, y luego apilar los espectros resultantes en un `),Ia=n("strong"),Nr=t("espectrograma"),Wr=t("."),Wo=u(),Oe=n("p"),Zr=t(`Un espectrograma grafica el contenido frecuencial de una se\xF1al de audio a medida que cambia en el tiempo. Esto nos permite ver en la
misma gr\xE1fica la informaci\xF3n de tiempo, frecuencia y amplitud. El algoritmo que permite hacer este representaci\xF3n se conoce como STFT o
Transformada de tiempo corto de Fourier.`),Zo=u(),Ke=n("p"),Hr=t(`El espectrograma es una de las herramientas m\xE1s \xFAtiles disponibles. Por ejemplo, cuando estamos trabajando con una grabaci\xF3n de m\xFAsica,
podemos ver como contribuye cada instrumento y las voces al sonido general. En el habla, se pueden identificar los difrerentes
sonidos de las vocales ya que cada vocal esta caracterizada por frecuencias particulares.`),Ho=u(),k=n("p"),Rr=t("Grafiquemos ahora un espectrograma del mismo sonido de trompeta, usando las funciones de librosa "),Aa=n("code"),Xr=t("stft()"),Yr=t(" y "),La=n("code"),Vr=t("specshow()"),Qr=t(":"),Ro=u(),v(Ee.$$.fragment),Xo=u(),ye=n("div"),ea=n("img"),Yo=u(),aa=n("p"),Or=t(`En este gr\xE1fico, el eje x representa el tiempo al igual que en la visulizaci\xF3n de la forma de onda sin embargo el eje y ahora representa la
frecuencia en hertz(Hz). La intensidad del color representa el nivel en decibelios (dB) de las componentes de frecuencia en cada punto del tiempo.`),Vo=u(),Q=n("p"),Kr=t(`El espectrograma es creado al tomar peque\xF1os segmentos de la se\xF1al de audio, comunmente de unos cuantos milisegundos y calculando
la transformada discreta de Fourier de cada segmento para obtener el espectro en frecuencia. Estos espectros se concatenan a lo
largo del eje temporal para crear un espectrograma. Cada columna en la imagen corresponde a un espectro de frecuencia, Por defecto,
la funci\xF3n `),Ua=n("code"),en=t("librosa.stft()"),an=t(` divide la se\xF1al en segmentos de 2048 muestras, lo que ofrece un buen resultado
para la resoluci\xF3n en frecuencia y la resoluci\xF3n temporal.`),Qo=u(),oa=n("p"),on=t(`Dado que el espectrograma y la forma de onda son diferentes representaciones de los mismos datos, es posible convertir el
espectrograma nuevamente en la forma de onda original utilizando la STFT inversa (transformada de Fourier de tiempo corto inversa).
Sin embargo, esto requiere tanto la informaci\xF3n de amplitud como la informaci\xF3n de fase. Si el espectrograma fue generado por un
modelo de aprendizaje autom\xE1tico, t\xEDpicamente solo se genera la informaci\xF3n de amplitud. En ese caso, podemos utilizar un algoritmo
de reconstrucci\xF3n de fase cl\xE1sico como el algoritmo de Griffin-Lim, o utilizar una red neuronal llamada vocoder, para reconstruir una
forma de onda a partir del espectrograma.`),Oo=u(),sa=n("p"),sn=t(`Los espectrogramas no solo se utilizan para visualizaci\xF3n. Muchos modelos de aprendizaje autom\xE1tico toman espectrogramas como entrada,
en lugar de formas de onda, y producen espectrogramas como salida.`),Ko=u(),ra=n("p"),rn=t(`Ahora que sabemos qu\xE9 es un espectrograma y c\xF3mo se genera, echemos un vistazo a una variante ampliamente utilizada en el procesamiento
del habla: el espectrograma de mel.`),es=u(),D=n("h2"),O=n("a"),Na=n("span"),v(qe.$$.fragment),nn=u(),Wa=n("span"),ln=t("Espectrograma de Mel"),as=u(),na=n("p"),tn=t(`Un espectrograma mel es una variante del espectrograma que se utiliza com\xFAnmente en el procesamiento del habla y en tareas de aprendizaje
autom\xE1tico. Es similar a un espectrograma en el sentido de que muestra el contenido de frecuencia de una se\xF1al de audio a lo largo del tiempo,
pero en un eje de frecuencia diferente.`),os=u(),la=n("p"),dn=t(`En un espectrograma est\xE1ndar, el eje de frecuencia es lineal y se mide en hercios (Hz). Sin embargo, el sistema auditivo humano
es m\xE1s sensible a los cambios en las frecuencias bajas que en las frecuencias altas, y esta sensibilidad disminuye de manera logar\xEDtmica
a medida que la frecuencia aumenta. La escala mel es una escala perceptual que aproxima la respuesta de frecuencia no lineal del o\xEDdo humano.`),ss=u(),ia=n("p"),un=t(`Para crear un espectrograma de mel, se utiliza la STFT de la misma manera que vimos antes, dividiendo el audio en segmentos cortos para
obtener una secuencia de espectros de frecuencia. Adem\xE1s, cada espectro se pasa a trav\xE9s de un conjunto de filtros(banco de filtros de mel)
para transformar las frecuencias a la escala de mel.`),rs=u(),K=n("p"),cn=t("Obsrevemos como podemos obtener el espectrograma de mel usando la funci\xF3n "),Za=n("code"),mn=t("melspectrogram()"),pn=t("  de librosa, que realiza todos los pasos anteriores:"),ns=u(),v(he.$$.fragment),ls=u(),_e=n("div"),ta=n("img"),is=u(),T=n("p"),fn=t("En el ejemplo anterior, "),Ha=n("code"),vn=t("n_mels"),bn=t(` representa el n\xFAmero de bandas de mel que se generar\xE1n. Las bandas de mel definen un conjunto de
rangos de frecuencia que dividen el espectro en componentes significativos desde el punto de vista perceptual, utilizando un
conjunto de filtros cuya forma y espaciado se eligen para imitar la forma en que el o\xEDdo humano responde a diferentes frecuencias.
Los valores comunes para `),Ra=n("code"),gn=t("n_mels"),En=t(" son 40 o 80. "),Xa=n("code"),yn=t("fmax"),qn=t(" indica la frecuencia m\xE1s alta (en Hz) que nos interesa."),ts=u(),$=n("p"),hn=t(`Al igual que con un espectrograma regular, es pr\xE1ctica com\xFAn expresar la intensidad de los componentes de frecuencia de mel en decibelios.
Esto se conoce com\xFAnmente como un `),Ya=n("strong"),_n=t("espectrograma logar\xEDtmico de mel"),zn=t(`, porque la conversi\xF3n a decibelios implica una operaci\xF3n logar\xEDtmica.
El ejemplo anterior se us\xF3 `),Va=n("code"),wn=t("librosa.power_to_db()"),jn=t(" ya que la funci\xF3n "),Qa=n("code"),Tn=t("librosa.feature.melspectrogram()"),$n=t(" crea un espectrograma de potencia."),ds=u(),v(ee.$$.fragment),us=u(),da=n("p"),Mn=t(`La creaci\xF3n de un espectrograma mel es una operaci\xF3n con p\xE9rdidas, ya que implica filtrar la se\xF1al. Convertir un espectrograma de mel de
nuevo en una forma de onda es m\xE1s dif\xEDcil que hacerlo para un espectrograma regular, ya que requiere estimar las frecuencias que se eliminaron.
Es por eso que se necesitan modelos de aprendizaje autom\xE1tico como el vocoder HiFiGAN para producir una forma de onda a partir de un espectrograma de mel.`),cs=u(),ua=n("p"),Jn=t(`En comparaci\xF3n con un espectrograma est\xE1ndar, un espectrograma mel captura caracter\xEDsticas m\xE1s significativas de la se\xF1al de audio para la percepci\xF3n humana,
lo que lo convierte en una opci\xF3n popular en tareas como el reconocimiento de voz, la identificaci\xF3n de hablantes y la clasificaci\xF3n de g\xE9neros musicales.`),ms=u(),ca=n("p"),Gn=t("Ahora que sabes c\xF3mo visualizar datos de audio, trata de ver c\xF3mo se ven tus sonidos favoritos. :)"),this.h()},l(e){const s=gi('[data-svelte="svelte-1phssyn"]',document.head);p=l(s,"META",{name:!0,content:!0}),s.forEach(a),h=c(e),f=l(e,"H1",{class:!0});var ze=i(f);z=l(ze,"A",{id:!0,class:!0,href:!0});var Oa=i(z);B=l(Oa,"SPAN",{});var Cn=i(B);b(_.$$.fragment,Cn),Cn.forEach(a),Oa.forEach(a),M=c(ze),I=l(ze,"SPAN",{});var Dn=i(I);$s=d(Dn,"Introducci\xF3n a los datos de audio"),Dn.forEach(a),ze.forEach(a),eo=c(e),Te=l(e,"P",{});var In=i(Te);Ms=d(In,`Por naturaleza, una onda sonora es una se\xF1al continua, es decir, que contiene un n\xFAmero infinito de valores de la se\xF1al en un tiempo determinado.
Este es un problema para los dispositivos digitales que trabajan con un n\xFAmero finito de valores. La onda sonora necesita ser convertida en
un serie de valores discretos para que pueda ser procesada, almacenada y transmitida por un por un dispositivo digital, esta representaci\xF3n discreta
se conoce como representaci\xF3n digital.`),In.forEach(a),ao=c(e),w=l(e,"P",{});var ae=i(w);Js=d(ae,`Si exploras cualquier base de datos de audio, encontrar\xE1s archivos digitales con fragmentos de sonido que pueden contener narraciones o m\xFAsica.
Puedes encontrar diferentes formatos de archivo como `),ba=l(ae,"CODE",{});var An=i(ba);Gs=d(An,".wav"),An.forEach(a),ks=d(ae," (Waveform Audio File), "),ga=l(ae,"CODE",{});var Ln=i(ga);Bs=d(Ln,".flac"),Ln.forEach(a),Ps=d(ae,` (Free Lossless Audio Codec)
y `),Ea=l(ae,"CODE",{});var Un=i(Ea);Ss=d(Un,".mp3"),Un.forEach(a),xs=d(ae," (MPEG-1 Audio Layer 3). Estos formatos difieren principalmente en como comprimen la representaci\xF3n digital de la se\xF1al de audio."),ae.forEach(a),oo=c(e),$e=l(e,"P",{});var Nn=i($e);Fs=d(Nn,`Examinemos como pasamos de una se\xF1al continua a una representaci\xF3n digital. La se\xF1al ac\xFAstica(an\xE1loga) es primero capturada por un micr\xF3fono,
que convierte las ondas sonoras en una se\xF1al electrica(Tambien an\xE1loga). La se\xF1al electrica es digitalizada por un
conversor An\xE1logo-Digital(ADC) para tener una representaci\xF3n digital a trav\xE9s del muestreo.`),Nn.forEach(a),so=c(e),P=l(e,"H2",{class:!0});var fs=i(P);A=l(fs,"A",{id:!0,class:!0,href:!0});var Wn=i(A);ya=l(Wn,"SPAN",{});var Zn=i(ya);b(ne.$$.fragment,Zn),Zn.forEach(a),Wn.forEach(a),Cs=c(fs),qa=l(fs,"SPAN",{});var Hn=i(qa);Ds=d(Hn,"Muestreo y frecuencia de muestreo"),Hn.forEach(a),fs.forEach(a),ro=c(e),Me=l(e,"P",{});var Rn=i(Me);Is=d(Rn,`El muestreo es el proceso de medir el valor de una se\xF1al continua en intervalos de tiempo fijos. La se\xF1al sampleada es discreta,
ya que contiene un n\xFAmero finito de valores de la se\xF1al.`),Rn.forEach(a),no=c(e),le=l(e,"DIV",{class:!0});var Xn=i(le);Je=l(Xn,"IMG",{src:!0,alt:!0}),Xn.forEach(a),lo=c(e),Ge=l(e,"P",{});var Yn=i(Ge);ke=l(Yn,"EM",{});var kn=i(ke);As=d(kn,"Ilustraci\xF3n de un articulo de Wikipedia: "),ie=l(kn,"A",{href:!0,rel:!0});var Vn=i(ie);Ls=d(Vn,"Muestreo(procesamiento de se\xF1al)"),Vn.forEach(a),kn.forEach(a),Yn.forEach(a),io=c(e),L=l(e,"P",{});var vs=i(L);Us=d(vs,"La "),ha=l(vs,"STRONG",{});var Qn=i(ha);Ns=d(Qn,"Tasa de Muestreo"),Qn.forEach(a),Ws=d(vs,` (Tambien llamada frecuencia de muestreo) es el n\xFAmero de muestras capturadas en un segundo y es medida en unidades
de Hertz (Hz). Para tener un punto de referencia, un audio con calidad de CD tiene una frecuencia de muestreo de 44,100 Hz, es decir que se
capturan 44,100 muestras por segundo. Existen archivos de audio Hi-Fi que utilizan frecuencias de muestreo de 192,000 hz o 192kHz. Una
frecuencia de muestreo com\xFAnmente usada para entrenar modelos de voz es 16,0000 Hz o 16 kHz.`),vs.forEach(a),to=c(e),Be=l(e,"P",{});var On=i(Be);Zs=d(On,`La elecci\xF3n de la frecuencia de muestreo determina la frecuencia m\xE1s alta que puede ser representada digitalmente. Esto se conoce
como el limite de Nyquist y es exactamente la mitad de la se\xF1al de la frecuencia de muestreo. Las frecuencias audibles en la voz humana
estan por debajo de 8kHz, por lo que una frecuencia de 16kHz es suficiente. Usar una frecuencia de muestreo m\xE1s alta no va a capturar
m\xE1s informaci\xF3n pero si a\xF1ade un costo computacional al procesamiento de estos archivos. En el caso contrario, elegir una frecuencia de
muestreo muy baja puede resultar en perdidas de informaci\xF3n. Audios de voz sampleados a 8kHz sonar\xE1n opacos, ya que las frecuencias por encima
de 4kHz no pueden ser capturadas por esta frecuencia de muestreo.`),On.forEach(a),uo=c(e),J=l(e,"P",{});var ma=i(J);Hs=d(ma,`Es importante asegurar que todos los ejemplos de audio de la base de datos tienen la misma frecuencia de muestreo. Si planeas usar
tus propios audios para hacer fine-tunning de un modelo pre-entrenado, la frecuencia de muestreo de estos audios debe concordar con
la frecuencia de muestreo con la que el modelo fue previamente entrenado. La frecuencia de muestreo determina el intervalo de tiempo
entre muestras de audio sucesivas, lo que tiene un efecto en la resoluci\xF3n temporal de los datos de audio. Por ejemplo: un audio de 5
segundos con una frecuencia de muestreo de 16,000 Hz ser\xE1 representado como una serie de 80,000 valores, mientras que el mismo audio con
una frecuencia de muestreo de 8,000hz ser\xE1 representado como una serie de 40,000 valores. Los modelos de transformers para audio tratan los
ejemplos como secuencias y se basan en mecanismos de atenci\xF3n para aprender del audio o de representaci\xF3nes multimodales. Ya que la longitud
de las secuencias difiere al usar frecuencias de muestreo diferentes, ser\xE1 dificil para el modelo generalizar para diferentes frecuencias de muestro.
`),_a=l(ma,"STRONG",{});var Kn=i(_a);Rs=d(Kn,"Resamplear"),Kn.forEach(a),Xs=d(ma," es el proceso de convertir una se\xF1al a otra frecuencia de muestreo, es parte de la secci\xF3n de "),Pe=l(ma,"A",{href:!0});var el=i(Pe);Ys=d(el,"preprosesamiento"),el.forEach(a),Vs=d(ma," de datos de audio."),ma.forEach(a),co=c(e),S=l(e,"H2",{class:!0});var bs=i(S);U=l(bs,"A",{id:!0,class:!0,href:!0});var al=i(U);za=l(al,"SPAN",{});var ol=i(za);b(te.$$.fragment,ol),ol.forEach(a),al.forEach(a),Qs=c(bs),wa=l(bs,"SPAN",{});var sl=i(wa);Os=d(sl,"Amplitud y profundidad de bits"),sl.forEach(a),bs.forEach(a),mo=c(e),Se=l(e,"P",{});var rl=i(Se);Ks=d(rl,"Mientras que la frecuencia de muestreo te indica con qu\xE9 frecuencia se toman las muestras, \xBFQu\xE9 representan exactamente los valores en cada muestra?"),rl.forEach(a),po=c(e),N=l(e,"P",{});var gs=i(N);er=d(gs,"El sonido se produce por cambios en la presi\xF3n del aire a frecuencias audibles para los humanos. La "),ja=l(gs,"STRONG",{});var nl=i(ja);ar=d(nl,"amplitud"),nl.forEach(a),or=d(gs,` de un sonido describe el nivel
de presi\xF3n sonora en un momento dado y se mide en decibelios (dB). Percibimos la amplitud como volumen o intensidad del sonido. Por ejemplo,
una voz normal al hablar est\xE1 por debajo de los 60 dB, mientras que un concierto de rock puede llegar a los 125 dB, alcanzando
los l\xEDmites de la audici\xF3n humana.`),gs.forEach(a),fo=c(e),xe=l(e,"P",{});var ll=i(xe);sr=d(ll,`En el audio digital, cada muestra de audio registra la amplitud de la onda de audio en un momento espec\xEDfico. La profundidad de bits de
la muestra determina con qu\xE9 precisi\xF3n se puede describir este valor de amplitud. Cuanto mayor sea la profundidad de bits, m\xE1s fiel ser\xE1 la
representaci\xF3n digital a la onda de sonido continua original.`),ll.forEach(a),vo=c(e),Fe=l(e,"P",{});var il=i(Fe);rr=d(il,`Las profundidades de bits de audio m\xE1s comunes son 16 bits y 24 bits. Cada una es una medida binaria que representa el n\xFAmero de pasos posibles
en los que se puede cuantificar el valor de amplitud al convertirlo de continuo a discreto: 65.536 pasos para el audio de 16 bits
y 16.777.216 pasos para el audio de 24 bits. Debido a que la cuantificaci\xF3n implica redondear el valor continuo a un valor discreto, el proceso
de muestreo introduce ruido. Cuanto mayor sea la profundidad de bits, menor ser\xE1 este ruido de cuantificaci\xF3n. En la pr\xE1ctica, el ruido de
cuantificaci\xF3n del audio de 16 bits ya es lo suficientemente peque\xF1o como para ser audible, por lo que generalmente no es
necesario utilizar profundidades de bits m\xE1s altas.`),il.forEach(a),bo=c(e),Ce=l(e,"P",{});var tl=i(Ce);nr=d(tl,`Tambi\xE9n es posible encontrarse con audio de 32 bits. Este almacena las muestras como valores de punto flotante, mientras que el audio
de 16 bits y 24 bits utiliza muestras enteras. La precisi\xF3n de un valor de punto flotante de 32 bits es de 24 bits, lo que le otorga
la misma profundidad de bits que el audio de 24 bits. Se espera que las muestras de audio de punto flotante se encuentren dentro del
rango [-1.0, 1.0]. Dado que los modelos de aprendizaje autom\xE1tico trabajan naturalmente con datos de punto flotante, el audio debe convertirse
primero al formato de punto flotante antes de poder ser utilizado para entrenar el modelo. Veremos c\xF3mo hacer esto en la pr\xF3xima secci\xF3n
sobre Preprocesamiento.`),tl.forEach(a),go=c(e),De=l(e,"P",{});var dl=i(De);lr=d(dl,`Al igual que con las se\xF1ales de audio continuas, la amplitud del audio digital se expresa t\xEDpicamente en decibelios (dB). Dado que la audici\xF3n
humana es de naturaleza logar\xEDtmica, es decir, nuestros o\xEDdos son m\xE1s sensibles a las peque\xF1as fluctuaciones en sonidos silenciosos que en
sonidos fuertes, el volumen de un sonido es m\xE1s f\xE1cil de interpretar si las amplitudes est\xE1n en decibelios, que tambi\xE9n son logar\xEDtmicos.
La escala de decibelios para el audio real comienza en 0 dB, que representa el sonido m\xE1s silencioso posible que los humanos pueden escuchar,
y los sonidos m\xE1s fuertes tienen valores m\xE1s grandes. Sin embargo, para las se\xF1ales de audio digital, 0 dB es la amplitud m\xE1s alta posible,
mientras que todas las dem\xE1s amplitudes son negativas. Como regla general: cada -6 dB implica una reducci\xF3n a la mitad de la amplitud, y cualquier
valor por debajo de -60 dB generalmente es inaudible a menos que subas mucho el volumen.`),dl.forEach(a),Eo=c(e),x=l(e,"H2",{class:!0});var Es=i(x);W=l(Es,"A",{id:!0,class:!0,href:!0});var ul=i(W);Ta=l(ul,"SPAN",{});var cl=i(Ta);b(de.$$.fragment,cl),cl.forEach(a),ul.forEach(a),ir=c(Es),$a=l(Es,"SPAN",{});var ml=i($a);tr=d(ml,"Audio como forma de onda"),ml.forEach(a),Es.forEach(a),yo=c(e),Z=l(e,"P",{});var ys=i(Z);dr=d(ys,"Es posible que hayas visto los sonidos visualizados como una "),Ma=l(ys,"STRONG",{});var pl=i(Ma);ur=d(pl,"forma de onda"),pl.forEach(a),cr=d(ys,`(waveform), que representa los valores de las muestras a lo
largo del tiempo y muestra los cambios en la amplitud del sonido. Esta representaci\xF3n tambi\xE9n se conoce como la representaci\xF3n en
el dominio del tiempo del sonido.`),ys.forEach(a),qo=c(e),Ie=l(e,"P",{});var fl=i(Ie);mr=d(fl,`Este tipo de visualizaci\xF3n es \xFAtil para identificar caracter\xEDsticas espec\xEDficas de la se\xF1al de audio, como la sincronizaci\xF3n
de eventos de sonido individuales, la intensidad general de la se\xF1al y cualquier irregularidad o ruido presente en el audio.`),fl.forEach(a),ho=c(e),H=l(e,"P",{});var qs=i(H);pr=d(qs,"Para graficar la forma de onda de una se\xF1al de audio, usamos una libreria de Python llamada "),Ja=l(qs,"CODE",{});var vl=i(Ja);fr=d(vl,"librosa"),vl.forEach(a),vr=d(qs,":"),qs.forEach(a),_o=c(e),b(ue.$$.fragment,e),zo=c(e),Ae=l(e,"P",{});var bl=i(Ae);br=d(bl,"Carguemos un ejemplo de la libreria llamado \u201Ctrumpet\u201D:"),bl.forEach(a),wo=c(e),b(ce.$$.fragment,e),jo=c(e),j=l(e,"P",{});var oe=i(j);gr=d(oe,"El ejemplo es cargado como una tupla formada por una serie temporal de valores de audio(llamado "),Ga=l(oe,"CODE",{});var gl=i(Ga);Er=d(gl,"array"),gl.forEach(a),yr=d(oe,") y la frecuencia de muestreo ("),ka=l(oe,"CODE",{});var El=i(ka);qr=d(El,"sampling_rate"),El.forEach(a),hr=d(oe,`).
Grafiquemos este sonido usando la funci\xF3n `),Ba=l(oe,"CODE",{});var yl=i(Ba);_r=d(yl,"waveshow()"),yl.forEach(a),zr=d(oe," de librosa:"),oe.forEach(a),To=c(e),b(me.$$.fragment,e),$o=c(e),pe=l(e,"DIV",{class:!0});var ql=i(pe);Le=l(ql,"IMG",{src:!0,alt:!0}),ql.forEach(a),Mo=c(e),Ue=l(e,"P",{});var hl=i(Ue);wr=d(hl,`Esta representaci\xF3n grafica la amplitud de la se\xF1al en el eje y y el tiempo en el eje x. En otras palabras, cada punto corresponde
a un \xFAnico valor de muestra que se tom\xF3 cuando se muestre\xF3 este sonido. Tambi\xE9n es importante tener en cuenta que librosa devuelve
el audio en forma de valores de punto flotante y que los valores de amplitud se encuentran dentro del rango [-1.0, 1.0].`),hl.forEach(a),Jo=c(e),Ne=l(e,"P",{});var _l=i(Ne);jr=d(_l,`Visualizar el audio junto con escucharlo puede ser una herramienta \xFAtil para comprender los datos con los que est\xE1s trabajando.
Puedes observar la forma de la se\xF1al, identificar patrones y aprender a detectar ruido o distorsi\xF3n.
Si preprocesas los datos de alguna manera, como normalizaci\xF3n, remuestreo o filtrado, puedes confirmar visualmente que los pasos
de preprocesamiento se hayan aplicado correctamente.`),_l.forEach(a),Go=c(e),We=l(e,"P",{});var zl=i(We);Tr=d(zl,`Despu\xE9s de entrenar un modelo, tambi\xE9n puedes visualizar las muestras donde se producen errores (por ejemplo, en una tarea de
clasificaci\xF3n de audio) para solucionar el problema. Esto te permitir\xE1 depurar y entender mejor las \xE1reas en las que el modelo
puede tener dificultades o errores.`),zl.forEach(a),ko=c(e),F=l(e,"H2",{class:!0});var hs=i(F);R=l(hs,"A",{id:!0,class:!0,href:!0});var wl=i(R);Pa=l(wl,"SPAN",{});var jl=i(Pa);b(fe.$$.fragment,jl),jl.forEach(a),wl.forEach(a),$r=c(hs),Sa=l(hs,"SPAN",{});var Tl=i(Sa);Mr=d(Tl,"El espectro de frecuencia"),Tl.forEach(a),hs.forEach(a),Bo=c(e),Ze=l(e,"P",{});var $l=i(Ze);Jr=d($l,`Otra forma de visualizar los datos de audio es graficar el espectro de frecuencia de una se\xF1al de audio,
tambi\xE9n conocido como la representaci\xF3n en el dominio de la frecuencia. El espectro se calcula utilizando la transformada
discreta de Fourier o DFT. Describe las frecuencias individuales que componen la se\xF1al y su intensidad.`),$l.forEach(a),Po=c(e),He=l(e,"P",{});var Ml=i(He);Gr=d(Ml,`Grafiquemos el espectro de frecuencia para el mismo sonido de trompeta mediante el c\xE1lculo de la transformada discreta de Fourier (DFT)
utilizando la funci\xF3n rfft() de numpy. Si bien es posible trazar el espectro de toda la se\xF1al de audio, es m\xE1s \xFAtil observar una peque\xF1a
regi\xF3n en su lugar. Aqu\xED tomaremos la DFT de los primeros 4096 valores de muestra, que es aproximadamente la duraci\xF3n de la primera nota
que se est\xE1 tocando:`),Ml.forEach(a),So=c(e),b(ve.$$.fragment,e),xo=c(e),be=l(e,"DIV",{class:!0});var Jl=i(be);Re=l(Jl,"IMG",{src:!0,alt:!0}),Jl.forEach(a),Fo=c(e),Xe=l(e,"P",{});var Gl=i(Xe);kr=d(Gl,`Esto representa la intensidad de los diferentes componentes de frecuencia que est\xE1n presentes en este segmento de audio.
Los valores de frecuencia se encuentran en el eje x, generalmente representados en una escala logar\xEDtmica, mientras que
las amplitudes se encuentran en el eje y.`),Gl.forEach(a),Co=c(e),Ye=l(e,"P",{});var kl=i(Ye);Br=d(kl,`El espectro de frecuencia que hemos graficado muestra varios picos. Estos picos corresponden a los arm\xF3nicos de la nota que se est\xE1 tocando,
siendo los arm\xF3nicos m\xE1s altos(en frecuencia) los m\xE1s silenciosos. Dado que el primer pico se encuentra alrededor de 620 Hz, este es el espectro
de frecuencia de una nota Mi\u266D.`),kl.forEach(a),Do=c(e),Ve=l(e,"P",{});var Bl=i(Ve);Pr=d(Bl,`La salida de la DFT es una matriz de n\xFAmeros complejos, compuestos por componentes reales e imaginarios. Tomar la magnitud con np.abs(dft)
extrae la informaci\xF3n de amplitud del espectrograma. El \xE1ngulo entre los componentes reales e imaginarios proporciona el llamado espectro
de fase, pero esto a menudo se descarta en aplicaciones de aprendizaje autom\xE1tico.`),Bl.forEach(a),Io=c(e),G=l(e,"P",{});var pa=i(G);Sr=d(pa,"Utilizamos "),xa=l(pa,"CODE",{});var Pl=i(xa);xr=d(Pl,"librosa.amplitude_to_db()"),Pl.forEach(a),Fr=d(pa,` para convertir los valores de amplitud a la escala de decibelios, lo que facilita ver los detalles m\xE1s
sutiles en el espectro. A veces, las personas utilizan el `),Fa=l(pa,"STRONG",{});var Sl=i(Fa);Cr=d(Sl,"espectro de potencia"),Sl.forEach(a),Dr=d(pa,`, que mide la energ\xEDa en lugar de la amplitud; esto es simplemente
un espectro con los valores de amplitud elevados al cuadrado.+`),pa.forEach(a),Ao=c(e),b(X.$$.fragment,e),Lo=c(e),Qe=l(e,"P",{});var xl=i(Qe);Ir=d(xl,`El espectro de frecuencia de una se\xF1al de audio contiene exactamente la misma informaci\xF3n que su representaci\xF3n en el dominio
del tiempo(forma de onda); simplemente son dos formas diferentes de ver los mismos datos (en este caso, los primeros 4096 valores
de muestra del sonido de trompeta). Mientras que la forma de onda representa la amplitud de la se\xF1al de audio a lo largo del tiempo,
el espectro visualiza las amplitudes de las frecuencias individuales en un punto fijo en el tiempo.`),xl.forEach(a),Uo=c(e),C=l(e,"H2",{class:!0});var _s=i(C);Y=l(_s,"A",{id:!0,class:!0,href:!0});var Fl=i(Y);Ca=l(Fl,"SPAN",{});var Cl=i(Ca);b(ge.$$.fragment,Cl),Cl.forEach(a),Fl.forEach(a),Ar=c(_s),Da=l(_s,"SPAN",{});var Dl=i(Da);Lr=d(Dl,"Espectrograma"),Dl.forEach(a),_s.forEach(a),No=c(e),V=l(e,"P",{});var zs=i(V);Ur=d(zs,`\xBFY si queremos ver c\xF3mo cambian las frecuencias en una se\xF1al de audio? La trompeta toca varias notas que tienen diferentes frecuencias.
El problema es que el espectro solo es una foto fija de las frecuencias en un instante determinado. La soluci\xF3n es tomar m\xFAltiples DFT,
cada una abarcando un peque\xF1o fragmento de la se\xF1al, y luego apilar los espectros resultantes en un `),Ia=l(zs,"STRONG",{});var Il=i(Ia);Nr=d(Il,"espectrograma"),Il.forEach(a),Wr=d(zs,"."),zs.forEach(a),Wo=c(e),Oe=l(e,"P",{});var Al=i(Oe);Zr=d(Al,`Un espectrograma grafica el contenido frecuencial de una se\xF1al de audio a medida que cambia en el tiempo. Esto nos permite ver en la
misma gr\xE1fica la informaci\xF3n de tiempo, frecuencia y amplitud. El algoritmo que permite hacer este representaci\xF3n se conoce como STFT o
Transformada de tiempo corto de Fourier.`),Al.forEach(a),Zo=c(e),Ke=l(e,"P",{});var Ll=i(Ke);Hr=d(Ll,`El espectrograma es una de las herramientas m\xE1s \xFAtiles disponibles. Por ejemplo, cuando estamos trabajando con una grabaci\xF3n de m\xFAsica,
podemos ver como contribuye cada instrumento y las voces al sonido general. En el habla, se pueden identificar los difrerentes
sonidos de las vocales ya que cada vocal esta caracterizada por frecuencias particulares.`),Ll.forEach(a),Ho=c(e),k=l(e,"P",{});var fa=i(k);Rr=d(fa,"Grafiquemos ahora un espectrograma del mismo sonido de trompeta, usando las funciones de librosa "),Aa=l(fa,"CODE",{});var Ul=i(Aa);Xr=d(Ul,"stft()"),Ul.forEach(a),Yr=d(fa," y "),La=l(fa,"CODE",{});var Nl=i(La);Vr=d(Nl,"specshow()"),Nl.forEach(a),Qr=d(fa,":"),fa.forEach(a),Ro=c(e),b(Ee.$$.fragment,e),Xo=c(e),ye=l(e,"DIV",{class:!0});var Wl=i(ye);ea=l(Wl,"IMG",{src:!0,alt:!0}),Wl.forEach(a),Yo=c(e),aa=l(e,"P",{});var Zl=i(aa);Or=d(Zl,`En este gr\xE1fico, el eje x representa el tiempo al igual que en la visulizaci\xF3n de la forma de onda sin embargo el eje y ahora representa la
frecuencia en hertz(Hz). La intensidad del color representa el nivel en decibelios (dB) de las componentes de frecuencia en cada punto del tiempo.`),Zl.forEach(a),Vo=c(e),Q=l(e,"P",{});var ws=i(Q);Kr=d(ws,`El espectrograma es creado al tomar peque\xF1os segmentos de la se\xF1al de audio, comunmente de unos cuantos milisegundos y calculando
la transformada discreta de Fourier de cada segmento para obtener el espectro en frecuencia. Estos espectros se concatenan a lo
largo del eje temporal para crear un espectrograma. Cada columna en la imagen corresponde a un espectro de frecuencia, Por defecto,
la funci\xF3n `),Ua=l(ws,"CODE",{});var Hl=i(Ua);en=d(Hl,"librosa.stft()"),Hl.forEach(a),an=d(ws,` divide la se\xF1al en segmentos de 2048 muestras, lo que ofrece un buen resultado
para la resoluci\xF3n en frecuencia y la resoluci\xF3n temporal.`),ws.forEach(a),Qo=c(e),oa=l(e,"P",{});var Rl=i(oa);on=d(Rl,`Dado que el espectrograma y la forma de onda son diferentes representaciones de los mismos datos, es posible convertir el
espectrograma nuevamente en la forma de onda original utilizando la STFT inversa (transformada de Fourier de tiempo corto inversa).
Sin embargo, esto requiere tanto la informaci\xF3n de amplitud como la informaci\xF3n de fase. Si el espectrograma fue generado por un
modelo de aprendizaje autom\xE1tico, t\xEDpicamente solo se genera la informaci\xF3n de amplitud. En ese caso, podemos utilizar un algoritmo
de reconstrucci\xF3n de fase cl\xE1sico como el algoritmo de Griffin-Lim, o utilizar una red neuronal llamada vocoder, para reconstruir una
forma de onda a partir del espectrograma.`),Rl.forEach(a),Oo=c(e),sa=l(e,"P",{});var Xl=i(sa);sn=d(Xl,`Los espectrogramas no solo se utilizan para visualizaci\xF3n. Muchos modelos de aprendizaje autom\xE1tico toman espectrogramas como entrada,
en lugar de formas de onda, y producen espectrogramas como salida.`),Xl.forEach(a),Ko=c(e),ra=l(e,"P",{});var Yl=i(ra);rn=d(Yl,`Ahora que sabemos qu\xE9 es un espectrograma y c\xF3mo se genera, echemos un vistazo a una variante ampliamente utilizada en el procesamiento
del habla: el espectrograma de mel.`),Yl.forEach(a),es=c(e),D=l(e,"H2",{class:!0});var js=i(D);O=l(js,"A",{id:!0,class:!0,href:!0});var Vl=i(O);Na=l(Vl,"SPAN",{});var Ql=i(Na);b(qe.$$.fragment,Ql),Ql.forEach(a),Vl.forEach(a),nn=c(js),Wa=l(js,"SPAN",{});var Ol=i(Wa);ln=d(Ol,"Espectrograma de Mel"),Ol.forEach(a),js.forEach(a),as=c(e),na=l(e,"P",{});var Kl=i(na);tn=d(Kl,`Un espectrograma mel es una variante del espectrograma que se utiliza com\xFAnmente en el procesamiento del habla y en tareas de aprendizaje
autom\xE1tico. Es similar a un espectrograma en el sentido de que muestra el contenido de frecuencia de una se\xF1al de audio a lo largo del tiempo,
pero en un eje de frecuencia diferente.`),Kl.forEach(a),os=c(e),la=l(e,"P",{});var ei=i(la);dn=d(ei,`En un espectrograma est\xE1ndar, el eje de frecuencia es lineal y se mide en hercios (Hz). Sin embargo, el sistema auditivo humano
es m\xE1s sensible a los cambios en las frecuencias bajas que en las frecuencias altas, y esta sensibilidad disminuye de manera logar\xEDtmica
a medida que la frecuencia aumenta. La escala mel es una escala perceptual que aproxima la respuesta de frecuencia no lineal del o\xEDdo humano.`),ei.forEach(a),ss=c(e),ia=l(e,"P",{});var ai=i(ia);un=d(ai,`Para crear un espectrograma de mel, se utiliza la STFT de la misma manera que vimos antes, dividiendo el audio en segmentos cortos para
obtener una secuencia de espectros de frecuencia. Adem\xE1s, cada espectro se pasa a trav\xE9s de un conjunto de filtros(banco de filtros de mel)
para transformar las frecuencias a la escala de mel.`),ai.forEach(a),rs=c(e),K=l(e,"P",{});var Ts=i(K);cn=d(Ts,"Obsrevemos como podemos obtener el espectrograma de mel usando la funci\xF3n "),Za=l(Ts,"CODE",{});var oi=i(Za);mn=d(oi,"melspectrogram()"),oi.forEach(a),pn=d(Ts,"  de librosa, que realiza todos los pasos anteriores:"),Ts.forEach(a),ns=c(e),b(he.$$.fragment,e),ls=c(e),_e=l(e,"DIV",{class:!0});var si=i(_e);ta=l(si,"IMG",{src:!0,alt:!0}),si.forEach(a),is=c(e),T=l(e,"P",{});var se=i(T);fn=d(se,"En el ejemplo anterior, "),Ha=l(se,"CODE",{});var ri=i(Ha);vn=d(ri,"n_mels"),ri.forEach(a),bn=d(se,` representa el n\xFAmero de bandas de mel que se generar\xE1n. Las bandas de mel definen un conjunto de
rangos de frecuencia que dividen el espectro en componentes significativos desde el punto de vista perceptual, utilizando un
conjunto de filtros cuya forma y espaciado se eligen para imitar la forma en que el o\xEDdo humano responde a diferentes frecuencias.
Los valores comunes para `),Ra=l(se,"CODE",{});var ni=i(Ra);gn=d(ni,"n_mels"),ni.forEach(a),En=d(se," son 40 o 80. "),Xa=l(se,"CODE",{});var li=i(Xa);yn=d(li,"fmax"),li.forEach(a),qn=d(se," indica la frecuencia m\xE1s alta (en Hz) que nos interesa."),se.forEach(a),ts=c(e),$=l(e,"P",{});var re=i($);hn=d(re,`Al igual que con un espectrograma regular, es pr\xE1ctica com\xFAn expresar la intensidad de los componentes de frecuencia de mel en decibelios.
Esto se conoce com\xFAnmente como un `),Ya=l(re,"STRONG",{});var ii=i(Ya);_n=d(ii,"espectrograma logar\xEDtmico de mel"),ii.forEach(a),zn=d(re,`, porque la conversi\xF3n a decibelios implica una operaci\xF3n logar\xEDtmica.
El ejemplo anterior se us\xF3 `),Va=l(re,"CODE",{});var ti=i(Va);wn=d(ti,"librosa.power_to_db()"),ti.forEach(a),jn=d(re," ya que la funci\xF3n "),Qa=l(re,"CODE",{});var di=i(Qa);Tn=d(di,"librosa.feature.melspectrogram()"),di.forEach(a),$n=d(re," crea un espectrograma de potencia."),re.forEach(a),ds=c(e),b(ee.$$.fragment,e),us=c(e),da=l(e,"P",{});var ui=i(da);Mn=d(ui,`La creaci\xF3n de un espectrograma mel es una operaci\xF3n con p\xE9rdidas, ya que implica filtrar la se\xF1al. Convertir un espectrograma de mel de
nuevo en una forma de onda es m\xE1s dif\xEDcil que hacerlo para un espectrograma regular, ya que requiere estimar las frecuencias que se eliminaron.
Es por eso que se necesitan modelos de aprendizaje autom\xE1tico como el vocoder HiFiGAN para producir una forma de onda a partir de un espectrograma de mel.`),ui.forEach(a),cs=c(e),ua=l(e,"P",{});var ci=i(ua);Jn=d(ci,`En comparaci\xF3n con un espectrograma est\xE1ndar, un espectrograma mel captura caracter\xEDsticas m\xE1s significativas de la se\xF1al de audio para la percepci\xF3n humana,
lo que lo convierte en una opci\xF3n popular en tareas como el reconocimiento de voz, la identificaci\xF3n de hablantes y la clasificaci\xF3n de g\xE9neros musicales.`),ci.forEach(a),ms=c(e),ca=l(e,"P",{});var mi=i(ca);Gn=d(mi,"Ahora que sabes c\xF3mo visualizar datos de audio, trata de ver c\xF3mo se ven tus sonidos favoritos. :)"),mi.forEach(a),this.h()},h(){m(p,"name","hf:doc:metadata"),m(p,"content",JSON.stringify(_i)),m(z,"id","introduccin-a-los-datos-de-audio"),m(z,"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"),m(z,"href","#introduccin-a-los-datos-de-audio"),m(f,"class","relative group"),m(A,"id","muestreo-y-frecuencia-de-muestreo"),m(A,"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"),m(A,"href","#muestreo-y-frecuencia-de-muestreo"),m(P,"class","relative group"),Ka(Je.src,Bn="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/Signal_Sampling.png")||m(Je,"src",Bn),m(Je,"alt","Signal sampling illustration"),m(le,"class","flex justify-center"),m(ie,"href","https://es.wikipedia.org/wiki/Muestreo_(se%C3%B1al)"),m(ie,"rel","nofollow"),m(Pe,"href","preprocessing#resampling-the-audio-data"),m(U,"id","amplitud-y-profundidad-de-bits"),m(U,"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"),m(U,"href","#amplitud-y-profundidad-de-bits"),m(S,"class","relative group"),m(W,"id","audio-como-forma-de-onda"),m(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"),m(W,"href","#audio-como-forma-de-onda"),m(x,"class","relative group"),Ka(Le.src,Pn="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/waveform_plot.png")||m(Le,"src",Pn),m(Le,"alt","Waveform plot"),m(pe,"class","flex justify-center"),m(R,"id","el-espectro-de-frecuencia"),m(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"),m(R,"href","#el-espectro-de-frecuencia"),m(F,"class","relative group"),Ka(Re.src,Sn="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/spectrum_plot.png")||m(Re,"src",Sn),m(Re,"alt","Spectrum plot"),m(be,"class","flex justify-center"),m(Y,"id","espectrograma"),m(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"),m(Y,"href","#espectrograma"),m(C,"class","relative group"),Ka(ea.src,xn="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/spectrogram_plot.png")||m(ea,"src",xn),m(ea,"alt","Spectrogram plot"),m(ye,"class","flex justify-center"),m(O,"id","espectrograma-de-mel"),m(O,"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"),m(O,"href","#espectrograma-de-mel"),m(D,"class","relative group"),Ka(ta.src,Fn="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/mel-spectrogram.png")||m(ta,"src",Fn),m(ta,"alt","Mel spectrogram plot"),m(_e,"class","flex justify-center")},m(e,s){o(document.head,p),r(e,h,s),r(e,f,s),o(f,z),o(z,B),g(_,B,null),o(f,M),o(f,I),o(I,$s),r(e,eo,s),r(e,Te,s),o(Te,Ms),r(e,ao,s),r(e,w,s),o(w,Js),o(w,ba),o(ba,Gs),o(w,ks),o(w,ga),o(ga,Bs),o(w,Ps),o(w,Ea),o(Ea,Ss),o(w,xs),r(e,oo,s),r(e,$e,s),o($e,Fs),r(e,so,s),r(e,P,s),o(P,A),o(A,ya),g(ne,ya,null),o(P,Cs),o(P,qa),o(qa,Ds),r(e,ro,s),r(e,Me,s),o(Me,Is),r(e,no,s),r(e,le,s),o(le,Je),r(e,lo,s),r(e,Ge,s),o(Ge,ke),o(ke,As),o(ke,ie),o(ie,Ls),r(e,io,s),r(e,L,s),o(L,Us),o(L,ha),o(ha,Ns),o(L,Ws),r(e,to,s),r(e,Be,s),o(Be,Zs),r(e,uo,s),r(e,J,s),o(J,Hs),o(J,_a),o(_a,Rs),o(J,Xs),o(J,Pe),o(Pe,Ys),o(J,Vs),r(e,co,s),r(e,S,s),o(S,U),o(U,za),g(te,za,null),o(S,Qs),o(S,wa),o(wa,Os),r(e,mo,s),r(e,Se,s),o(Se,Ks),r(e,po,s),r(e,N,s),o(N,er),o(N,ja),o(ja,ar),o(N,or),r(e,fo,s),r(e,xe,s),o(xe,sr),r(e,vo,s),r(e,Fe,s),o(Fe,rr),r(e,bo,s),r(e,Ce,s),o(Ce,nr),r(e,go,s),r(e,De,s),o(De,lr),r(e,Eo,s),r(e,x,s),o(x,W),o(W,Ta),g(de,Ta,null),o(x,ir),o(x,$a),o($a,tr),r(e,yo,s),r(e,Z,s),o(Z,dr),o(Z,Ma),o(Ma,ur),o(Z,cr),r(e,qo,s),r(e,Ie,s),o(Ie,mr),r(e,ho,s),r(e,H,s),o(H,pr),o(H,Ja),o(Ja,fr),o(H,vr),r(e,_o,s),g(ue,e,s),r(e,zo,s),r(e,Ae,s),o(Ae,br),r(e,wo,s),g(ce,e,s),r(e,jo,s),r(e,j,s),o(j,gr),o(j,Ga),o(Ga,Er),o(j,yr),o(j,ka),o(ka,qr),o(j,hr),o(j,Ba),o(Ba,_r),o(j,zr),r(e,To,s),g(me,e,s),r(e,$o,s),r(e,pe,s),o(pe,Le),r(e,Mo,s),r(e,Ue,s),o(Ue,wr),r(e,Jo,s),r(e,Ne,s),o(Ne,jr),r(e,Go,s),r(e,We,s),o(We,Tr),r(e,ko,s),r(e,F,s),o(F,R),o(R,Pa),g(fe,Pa,null),o(F,$r),o(F,Sa),o(Sa,Mr),r(e,Bo,s),r(e,Ze,s),o(Ze,Jr),r(e,Po,s),r(e,He,s),o(He,Gr),r(e,So,s),g(ve,e,s),r(e,xo,s),r(e,be,s),o(be,Re),r(e,Fo,s),r(e,Xe,s),o(Xe,kr),r(e,Co,s),r(e,Ye,s),o(Ye,Br),r(e,Do,s),r(e,Ve,s),o(Ve,Pr),r(e,Io,s),r(e,G,s),o(G,Sr),o(G,xa),o(xa,xr),o(G,Fr),o(G,Fa),o(Fa,Cr),o(G,Dr),r(e,Ao,s),g(X,e,s),r(e,Lo,s),r(e,Qe,s),o(Qe,Ir),r(e,Uo,s),r(e,C,s),o(C,Y),o(Y,Ca),g(ge,Ca,null),o(C,Ar),o(C,Da),o(Da,Lr),r(e,No,s),r(e,V,s),o(V,Ur),o(V,Ia),o(Ia,Nr),o(V,Wr),r(e,Wo,s),r(e,Oe,s),o(Oe,Zr),r(e,Zo,s),r(e,Ke,s),o(Ke,Hr),r(e,Ho,s),r(e,k,s),o(k,Rr),o(k,Aa),o(Aa,Xr),o(k,Yr),o(k,La),o(La,Vr),o(k,Qr),r(e,Ro,s),g(Ee,e,s),r(e,Xo,s),r(e,ye,s),o(ye,ea),r(e,Yo,s),r(e,aa,s),o(aa,Or),r(e,Vo,s),r(e,Q,s),o(Q,Kr),o(Q,Ua),o(Ua,en),o(Q,an),r(e,Qo,s),r(e,oa,s),o(oa,on),r(e,Oo,s),r(e,sa,s),o(sa,sn),r(e,Ko,s),r(e,ra,s),o(ra,rn),r(e,es,s),r(e,D,s),o(D,O),o(O,Na),g(qe,Na,null),o(D,nn),o(D,Wa),o(Wa,ln),r(e,as,s),r(e,na,s),o(na,tn),r(e,os,s),r(e,la,s),o(la,dn),r(e,ss,s),r(e,ia,s),o(ia,un),r(e,rs,s),r(e,K,s),o(K,cn),o(K,Za),o(Za,mn),o(K,pn),r(e,ns,s),g(he,e,s),r(e,ls,s),r(e,_e,s),o(_e,ta),r(e,is,s),r(e,T,s),o(T,fn),o(T,Ha),o(Ha,vn),o(T,bn),o(T,Ra),o(Ra,gn),o(T,En),o(T,Xa),o(Xa,yn),o(T,qn),r(e,ts,s),r(e,$,s),o($,hn),o($,Ya),o(Ya,_n),o($,zn),o($,Va),o(Va,wn),o($,jn),o($,Qa),o(Qa,Tn),o($,$n),r(e,ds,s),g(ee,e,s),r(e,us,s),r(e,da,s),o(da,Mn),r(e,cs,s),r(e,ua,s),o(ua,Jn),r(e,ms,s),r(e,ca,s),o(ca,Gn),ps=!0},p(e,[s]){const ze={};s&2&&(ze.$$scope={dirty:s,ctx:e}),X.$set(ze);const Oa={};s&2&&(Oa.$$scope={dirty:s,ctx:e}),ee.$set(Oa)},i(e){ps||(E(_.$$.fragment,e),E(ne.$$.fragment,e),E(te.$$.fragment,e),E(de.$$.fragment,e),E(ue.$$.fragment,e),E(ce.$$.fragment,e),E(me.$$.fragment,e),E(fe.$$.fragment,e),E(ve.$$.fragment,e),E(X.$$.fragment,e),E(ge.$$.fragment,e),E(Ee.$$.fragment,e),E(qe.$$.fragment,e),E(he.$$.fragment,e),E(ee.$$.fragment,e),ps=!0)},o(e){y(_.$$.fragment,e),y(ne.$$.fragment,e),y(te.$$.fragment,e),y(de.$$.fragment,e),y(ue.$$.fragment,e),y(ce.$$.fragment,e),y(me.$$.fragment,e),y(fe.$$.fragment,e),y(ve.$$.fragment,e),y(X.$$.fragment,e),y(ge.$$.fragment,e),y(Ee.$$.fragment,e),y(qe.$$.fragment,e),y(he.$$.fragment,e),y(ee.$$.fragment,e),ps=!1},d(e){a(p),e&&a(h),e&&a(f),q(_),e&&a(eo),e&&a(Te),e&&a(ao),e&&a(w),e&&a(oo),e&&a($e),e&&a(so),e&&a(P),q(ne),e&&a(ro),e&&a(Me),e&&a(no),e&&a(le),e&&a(lo),e&&a(Ge),e&&a(io),e&&a(L),e&&a(to),e&&a(Be),e&&a(uo),e&&a(J),e&&a(co),e&&a(S),q(te),e&&a(mo),e&&a(Se),e&&a(po),e&&a(N),e&&a(fo),e&&a(xe),e&&a(vo),e&&a(Fe),e&&a(bo),e&&a(Ce),e&&a(go),e&&a(De),e&&a(Eo),e&&a(x),q(de),e&&a(yo),e&&a(Z),e&&a(qo),e&&a(Ie),e&&a(ho),e&&a(H),e&&a(_o),q(ue,e),e&&a(zo),e&&a(Ae),e&&a(wo),q(ce,e),e&&a(jo),e&&a(j),e&&a(To),q(me,e),e&&a($o),e&&a(pe),e&&a(Mo),e&&a(Ue),e&&a(Jo),e&&a(Ne),e&&a(Go),e&&a(We),e&&a(ko),e&&a(F),q(fe),e&&a(Bo),e&&a(Ze),e&&a(Po),e&&a(He),e&&a(So),q(ve,e),e&&a(xo),e&&a(be),e&&a(Fo),e&&a(Xe),e&&a(Co),e&&a(Ye),e&&a(Do),e&&a(Ve),e&&a(Io),e&&a(G),e&&a(Ao),q(X,e),e&&a(Lo),e&&a(Qe),e&&a(Uo),e&&a(C),q(ge),e&&a(No),e&&a(V),e&&a(Wo),e&&a(Oe),e&&a(Zo),e&&a(Ke),e&&a(Ho),e&&a(k),e&&a(Ro),q(Ee,e),e&&a(Xo),e&&a(ye),e&&a(Yo),e&&a(aa),e&&a(Vo),e&&a(Q),e&&a(Qo),e&&a(oa),e&&a(Oo),e&&a(sa),e&&a(Ko),e&&a(ra),e&&a(es),e&&a(D),q(qe),e&&a(as),e&&a(na),e&&a(os),e&&a(la),e&&a(ss),e&&a(ia),e&&a(rs),e&&a(K),e&&a(ns),q(he,e),e&&a(ls),e&&a(_e),e&&a(is),e&&a(T),e&&a(ts),e&&a($),e&&a(ds),q(ee,e),e&&a(us),e&&a(da),e&&a(cs),e&&a(ua),e&&a(ms),e&&a(ca)}}}const _i={local:"introduccin-a-los-datos-de-audio",sections:[{local:"muestreo-y-frecuencia-de-muestreo",title:"Muestreo y frecuencia de muestreo"},{local:"amplitud-y-profundidad-de-bits",title:"Amplitud y profundidad de bits"},{local:"audio-como-forma-de-onda",title:"Audio como forma de onda"},{local:"el-espectro-de-frecuencia",title:"El espectro de frecuencia"},{local:"espectrograma",title:"Espectrograma"},{local:"espectrograma-de-mel",title:"Espectrograma de Mel"}],title:"Introducci\xF3n a los datos de audio"};function zi(je){return Ei(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Mi extends fi{constructor(p){super();vi(this,p,zi,hi,bi,{})}}export{Mi as default,_i as metadata};
