import{s as bn,a as xn,o as kn,n as Te}from"../chunks/scheduler.cd324960.js";import{S as _n,i as jn,e as i,s as n,c,h as Vn,a,d as l,b as p,f as hn,g as M,j as o,k as X,l as Zn,m as s,n as J,t as T,o as y,p as U}from"../chunks/index.d5c3adcc.js";import{T as Je}from"../chunks/Tip.889bec11.js";import{C as In,H as ps,E as Bn}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.87c38818.js";import{C as v}from"../chunks/CodeBlock.2ff0aef1.js";function gn(b){let m,$=`尽管模型开始时使用的是同一个预训练模型的相同权重集，但微调后的最终版本会大不相同。所以，您不能仅仅通过更换预处理和后处理网络，
就将一个微调后的 ASR 模型转换为一个可用的 TTS 模型。SpeechT5 很灵活，但还没有灵活到这个程度 QwQ`;return{c(){m=i("p"),m.textContent=$},l(u){m=a(u,"P",{"data-svelte-h":!0}),o(m)!=="svelte-812jep"&&(m.textContent=$)},m(u,f){s(u,m,f)},p:Te,d(u){u&&l(m)}}}function Hn(b){let m,$=`说话人嵌入（Speaker embeddings）是一个固定大小的向量，不论音频的长度如何都能用一种紧凑的方式表示说话人的身份。这些向量捕获了关于说话人的音色、口音、
语调以及其他独特特征的关键信息，这些特征区分了不同的说话人。这样的嵌入有说话人验证（speaker verification）、说话人分离（speaker diarization）、
说话人识别（speaker identification）等多种应用。生成说话人嵌入时最常用的技术包括：`,u,f,w="<li>I-Vectors（身份向量）：I-Vectors 基于高斯混合模型（Gaussian mixture model，GMM）。它属于无监督学习，用一个特定说话人的 GMM 的统计数据得出一个低维度、固定大小的向量来代表说话人。</li> <li>X-Vectors：X-Vectors 利用了深度神经网络（DNN），通过整合时间维度的上下文来捕获帧级的说话人信息。</li>",d,C,k=`<a href="https://www.danielpovey.com/files/2018_icassp_xvectors.pdf" rel="nofollow">X-Vectors</a> 是 SOTA（state-of-the-art）的方法，在测试集上的表现优于 I-Vectors。
X-Vectors 是深度神经网络产生的：它被训练以区分不同说话人，并将长度不一的语音音频映射到固定维度的嵌入。您还可以加载提前计算好的 X-Vector 说话人嵌入，它封装好了某个特定说话人的说话特征。`;return{c(){m=i("p"),m.textContent=$,u=n(),f=i("ul"),f.innerHTML=w,d=n(),C=i("p"),C.innerHTML=k},l(r){m=a(r,"P",{"data-svelte-h":!0}),o(m)!=="svelte-1kalzqc"&&(m.textContent=$),u=p(r),f=a(r,"UL",{"data-svelte-h":!0}),o(f)!=="svelte-1ofv3xe"&&(f.innerHTML=w),d=p(r),C=a(r,"P",{"data-svelte-h":!0}),o(C)!=="svelte-102j3b3"&&(C.innerHTML=k)},m(r,h){s(r,m,h),s(r,u,h),s(r,f,h),s(r,d,h),s(r,C,h)},p:Te,d(r){r&&(l(m),l(u),l(f),l(d),l(C))}}}function Sn(b){let m,$='<a href="https://arxiv.org/pdf/2010.05646v2.pdf" rel="nofollow">HiFi-GAN</a> 是一种用于高保真语音合成的 SOTA 生成对抗网络（GAN）。它能够根据输入的频谱图生成高品质且逼真的音频波形。',u,f,w=`总的来说，HiFi-GAN 由一个生成器和两个鉴别器组成。生成器是一个全卷积神经网络，它以梅尔谱作为输入并学习产生原始音频波形。
鉴别器负责区分真实音频和生成音频。这两个鉴别器关注音频的不同方面。`,d,C,k=`HiFi-GAN 在大量高品质音频数据上进行训练。它采用所谓的<em>对抗训练</em>，其中生成器和鉴别器网络相互竞争。最初，生成器产生的音频质量较低，
鉴别器可以轻松地将其与真实音频区分开。随着训练的进行，生成器改进其输出，目标是欺骗鉴别器。反过来，鉴别器也学会更准确地区分真实和生成的音频。
这种对抗性反馈循环帮助两个网络随时间推移提升性能。最终，HiFi-GAN 学会生成高保真音频，精密地模仿训练数据的特征。`;return{c(){m=i("p"),m.innerHTML=$,u=n(),f=i("p"),f.textContent=w,d=n(),C=i("p"),C.innerHTML=k},l(r){m=a(r,"P",{"data-svelte-h":!0}),o(m)!=="svelte-6v4gz4"&&(m.innerHTML=$),u=p(r),f=a(r,"P",{"data-svelte-h":!0}),o(f)!=="svelte-6as7bq"&&(f.textContent=w),d=p(r),C=a(r,"P",{"data-svelte-h":!0}),o(C)!=="svelte-xwig44"&&(C.innerHTML=k)},m(r,h){s(r,m,h),s(r,u,h),s(r,f,h),s(r,d,h),s(r,C,h)},p:Te,d(r){r&&(l(m),l(u),l(f),l(d),l(C))}}}function Gn(b){let m,$='Bark 与其他 🤗 Transformers 模型一样，只需几行代码即可针对速度和内存影响进行优化。要了解具体操作方法，请单击 <a href="https://colab.research.google.com/github/ylacombe/notebooks/blob/main/Benchmark_Bark_HuggingFace.ipynb" rel="nofollow">此 colab 演示笔记本</a>。';return{c(){m=i("p"),m.innerHTML=$},l(u){m=a(u,"P",{"data-svelte-h":!0}),o(m)!=="svelte-agupcp"&&(m.innerHTML=$)},m(u,f){s(u,m,f)},p:Te,d(u){u&&l(m)}}}function Wn(b){let m,$="MMS 模型最近才被添加到 🤗 Transformers 中，所以您需要从源代码安装该库：",u,f,w;return f=new v({props:{code:"cGlwJTIwaW5zdGFsbCUyMGdpdCUyQmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmh1Z2dpbmdmYWNlJTJGdHJhbnNmb3JtZXJzLmdpdA==",highlighted:"pip install git+https://github.com/huggingface/transformers.git",wrap:!1}}),{c(){m=i("p"),m.textContent=$,u=n(),c(f.$$.fragment)},l(d){m=a(d,"P",{"data-svelte-h":!0}),o(m)!=="svelte-rzfbj9"&&(m.textContent=$),u=p(d),M(f.$$.fragment,d)},m(d,C){s(d,m,C),s(d,u,C),J(f,d,C),w=!0},p:Te,i(d){w||(T(f.$$.fragment,d),w=!0)},o(d){y(f.$$.fragment,d),w=!1},d(d){d&&(l(m),l(u)),U(f,d)}}}function Nn(b){let m,$,u,f,w,d,C,k,r,h=`与 ASR（语音识别）和音频分类任务相比，语音合成的预训练模型检查点明显较少。在 🤗 Hub 上，您可以找到近 300 个适合的检查点。
在这些预训练模型中，我们将重点关注两种在 🤗 Transformers 库中开箱即用的架构——SpeechT5 和 Massive Multilingual Speech（MMS）。
在本节中，我们将探索如何在 Transformers 库中使用这些预训练模型进行 TTS（语音合成）。`,ye,Q,Ue,z,is=`<a href="https://arxiv.org/abs/2110.07205" rel="nofollow">SpeechT5</a> 是由 Microsoft 的 Junyi Ao 等人发布的模型，它能够处理一系列语音任务。虽然本单元中我们关注的是文本转语音，
但这个模型还可以用于语音转文本的任务（语音识别或说话人识别），以及语音转语音的任务（例如语音增强或变声器）。这是模型设计和预训练的方式所决定的。`,de,E,as="SpeechT5 的核心是一个常规的 Transformer 编码器-解码器模型。就像任何其他 Transformer 一样，编码器-解码器网络使用隐藏表示来模拟序列到序列的转换。这个 Transformer 骨架对 SpeechT5 支持的所有任务都是相同的。",Ce,L,os=`除此之外，SpeechT5 还有六个模态特定（语音/文本）的预处理网络（<em>pre-nets</em>）和后处理网络（<em>post-nets</em>）。输入的语音或文本（取决于任务）通过相应的预处理网络被预处理，
以获得 Transformer 可以使用的隐藏表示。然后，Transformer 的输出被送进后处理网络，转化为目标模态的输出。`,ve,P,ms="以下是该模型的架构（图片来源于原始论文）：",$e,_,rs='<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/speecht5/architecture.jpg" alt="SpeechT5 architecture from the original paper"/>',we,q,us="SpeechT5 首先使用大规模的未标注语音和文本数据进行预训练，以获得不同模态的统一表示。在预训练阶段，所有的预处理网络和后处理网络同时使用。",he,Y,fs=`预训练之后，将整个编解码器骨架针对每个单独任务进行微调。在这个步骤中，只有与特定任务相关的预处理和后处理网络被采用。
例如，要使用 SpeechT5 进行语音合成，您需要选择文本编码器预处理网络来处理文本输入，以及语音解码器的预处理和后处理网络来处理语音输出。`,be,A,cs="这样就可以获得多个针对不同语音任务微调的模型，它们都受益于最开始在未标注数据上预训练时学到的知识。",xe,j,ke,D,Ms="让我们具体看看 SpeechT5 在 TTS（文本到语音）任务中使用的预/后处理网络是什么：",_e,K,Js="<li>文本编码器预处理网络（Text encoder pre-net）：一个文本嵌入层，将文本词元映射到编码器可以读入的隐藏表示。这与 NLP 模型（如 BERT）中的做法类似。</li> <li>语音解码器预处理网络（Speech decoder pre-net）：这个网络以对数梅尔谱（log mel spectrogram）为输入，并使用一连串的线性层来将频谱图压缩成隐藏表示。</li> <li>语音解码器后处理网络（Speech decoder post-net）：这个网络预测一个残差来添加到输出的频谱图中，用于优化模型输出的结果。</li>",je,O,Ts="结合起来，这就是 SpeechT5 在语音合成中使用的架构：",Ve,V,ys='<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/speecht5/tts.jpg" alt="SpeechT5 architecture for TTS"/>',Ze,tt,Us=`正如您所看到的，输出是一个对数梅尔谱，而不是最终的波形。如果您记得，我们在 <a href="../chapter3/introduction#spectrogram-output">第 3 单元</a> 简要讨论过这个话题。
生成语音的模型的输出常常是对数梅尔谱，还需要通过一个额外的神经网络，即声码器（vocoder），才能转换成波形。`,Ie,et,ds="让我们看看具体应该怎么做。",Be,lt,Cs="首先，让我们从 🤗 Hub 加载微调过的 TTS SpeechT5 模型，以及用于分词和特征提取的处理器对象：",ge,st,He,nt,vs="接下来，给输入的文本分词。",Se,pt,Ge,it,$s="SpeechT5 TTS 模型不仅限于生成一种音色的语音。相反，它能够使用所谓的“说话人嵌入”（speaker embeddings）来模仿各种特定说话人的声音特征。",We,Z,Ne,at,ws='让我们从 Hub 上的数据集中加载一个说话人嵌入。这些嵌入是使用 <a href="http://www.festvox.org/cmu_arctic/" rel="nofollow">CMU ARCTIC 数据集</a> 和 <a href="https://huggingface.co/mechanicalsea/speecht5-vc/blob/main/manifest/utils/prep_cmu_arctic_spkemb.py" rel="nofollow">这个脚本</a> 获得的，这里使用任何 X-Vector 嵌入都可以。',Re,ot,Fe,mt,hs="说话人嵌入是形状为 (1, 512) 的张量，我们选的这个说话人嵌入描述的是一个女声。",Xe,rt,bs="此时，我们已经有足够的输入来生成对数梅尔谱作为输出，您可以这样做：",Qe,ut,ze,ft,xs=`这会输出一个形状为 (140, 80) 的张量，包含对数梅尔谱。第一维是序列长度，可能每次运行代码它的取值都会不一样，
因为语音解码器预处理网络（pre-net）总是对输入序列用 dropout。这给生成的语音添加了一些随机变化。`,Ee,ct,ks=`如果我们想生成语音波形，我们还需要指定一个用于把频谱图转换为波形的声码器（vocoder）。理论上，您可以使用任何适用于 80-bin 梅尔谱的声码器。
🤗 Transformers 提供了一个基于 HiFi-GAN 的声码器，可以很方便地使用。其权重由 SpeechT5 的原作者友情提供。`,Le,I,Pe,Mt,_s="加载声码器就像加载任何其他 🤗 Transformers 模型一样简单。",qe,Jt,Ye,Tt,js="现在您需要做的就是在生成语音时将其作为参数传递，输出将自动转换为语音波形。",Ae,yt,De,Ut,Vs="让我们来听听输出的结果。SpeechT5 使用的采样率始终是 16 kHz。",Ke,dt,Oe,Ct,Zs="真不错！",tl,vt,Is="请随意使用 SpeechT5 语音合成 demo 探索其他声音，尝试各种各样的输入。请注意，该预训练检查点仅支持英语：",el,x,Bs="",gs,ll,$t,sl,wt,Hs='Bark 是 Suno AI 提出的基于 transformer 的语音合成模型，见 <a href="https://github.com/suno-ai/bark" rel="nofollow">suno-ai/bark</a>。',nl,ht,Ss='与 SpeechT5 不同，Bark 直接生成语音波形，无需在推理过程中使用单独的声码器——它已经集成了这一功能。这种功能是通过使用 <a href="https://huggingface.co/docs/transformers/main/en/model_doc/encodec" rel="nofollow"><code>Encodec</code></a> 实现的，它既是编解码器也是压缩工具。',pl,bt,Gs=`借助 <code>Encodec</code>，您可以将音频压缩成轻量级格式以减少内存使用，然后再解压缩以恢复原始音频。这个压缩过程由 8 个 codebook 帮助完成，
每个 codebook 都由整数向量组成。可以将这些 codebook 视为音频的整数形式表示或嵌入，并且每个后续的 codebook 都能在前一个的基础上提高音频重建的质量。
由于 codebook 是整数向量，它们可以被 transformer 模型学习，而 transformer 在这项任务上非常高效。这正是 Bark 被训练去做的任务。`,il,xt,Ws="更具体地说，Bark 由 4 个主要的模型组成：",al,kt,Ns="<li><code>BarkSemanticModel</code>（也称为“文本”模型）：一个因果自回归的 transformer 模型，它接收分词后的文本作为输入，并预测表示文本含义的语义文本词元。</li> <li><code>BarkCoarseModel</code>（也称为“粗粒度声学”模型）：一个因果自回归的 transformer，它接收 <code>BarkSemanticModel</code> 模型的结果作为输入，预测 EnCodec 所需的前两个音频 codebook 。</li> <li><code>BarkFineModel</code>（“细粒度声学”模型），这次是一个非因果自编码 transformer，它基于之前生成的所有 codebook 嵌入，迭代地预测下一个 codebook 。</li> <li>在 <code>EncodecModel</code> 预测了所有 codebook 通道后，Bark 使用它来解码输出音频数组。</li>",ol,_t,Rs="需要注意的是，前三个模块中的每一个都支持说话人嵌入作为条件参数，以根据预特定的预设调整输出的声音。",ml,jt,Fs="Bark 是一个高度可控的语音合成模型，意味着您可以调整各种各样的设置，下面我们将见证这一功能。",rl,Vt,Xs="在一切开始之前，我们需要加载模型及其处理器。",ul,Zt,Qs="处理器在这里有两方面的作用：",fl,It,zs="<li>它用于对输入文本进行分词，即将其切割成模型可以理解的小片段。</li> <li>它存储说话人嵌入，即可以调节生成结果的声音预设。</li>",cl,Bt,Ml,gt,Es='Bark 非常多功能，可以通过处理器加载一个 <a href="https://suno-ai.notion.site/8b8e8749ed514b0cbf3f699013548683?v=bc67cff786b04b50b3ceb756fd05f68c" rel="nofollow">说话人嵌入库</a> 中的说话人嵌入来调节它产生的声音。',Jl,Ht,Tl,B,Ls=`<source src="https://huggingface.co/datasets/ylacombe/hf-course-audio-files/resolve/main/first_sample.wav" type="audio/wav"/> 
Your browser does not support the audio element.`,yl,St,Ps='它还可以生成随时可用的多语言语音，例如法语和中文。您可以在 <a href="https://huggingface.co/suno/bark" rel="nofollow">这里</a> 找到支持的语言列表。与下面讨论的 MMS 不同，它不需要指定所使用的语言，只需将输入文本调整为相应的语言即可。',Ul,Gt,dl,g,qs=`<source src="https://huggingface.co/datasets/ylacombe/hf-course-audio-files/resolve/main/second_sample.wav" type="audio/wav"/> 
Your browser does not support the audio element.`,Cl,Wt,Ys="该模型还可以生成<strong>非语言交流</strong>，例如笑、叹息和哭泣。 您只需使用相应的提示修改输入文本，例如 <code>[clears throat]</code>、<code>[laughter]</code> 或 <code>...</code>。",vl,Nt,$l,H,As=`<source src="https://huggingface.co/datasets/ylacombe/hf-course-audio-files/resolve/main/third_sample.wav" type="audio/wav"/> 
Your browser does not support the audio element.`,wl,Rt,Ds="Bark 甚至可以产生音乐。您可以通过在单词周围添加 ♪ 音符 ♪ 来做到这一点。",hl,Ft,bl,S,Ks=`<source src="https://huggingface.co/datasets/ylacombe/hf-course-audio-files/resolve/main/fourth_sample.wav" type="audio/wav"/> 
Your browser does not support the audio element.`,xl,Xt,Os="除了所有这些功能之外，Bark 还支持批处理，这意味着您可以同时处理多个文本条目，但代价是更密集的计算。在某些硬件（例如 GPU）上，批处理可以加快整体生成速度，这意味着一次性生成所有样本比逐个生成样本更快。",kl,Qt,tn="让我们尝试生成一些示例：",_l,zt,jl,Et,en="让我们来一个一个听这些输出。",Vl,Lt,ln="第一个：",Zl,Pt,Il,G,sn=`<source src="https://huggingface.co/datasets/ylacombe/hf-course-audio-files/resolve/main/batch_1.wav" type="audio/wav"/> 
Your browser does not support the audio element.`,Bl,qt,nn="第二个：",gl,Yt,Hl,W,pn=`<source src="https://huggingface.co/datasets/ylacombe/hf-course-audio-files/resolve/main/batch_2.wav" type="audio/wav"/> 
Your browser does not support the audio element.`,Sl,At,an="第三个：",Gl,Dt,Wl,N,on=`<source src="https://huggingface.co/datasets/ylacombe/hf-course-audio-files/resolve/main/batch_3.wav" type="audio/wav"/> 
Your browser does not support the audio element.`,Nl,R,Rl,Kt,Fl,Ot,mn="如果您需要一个非英语的预训练模型怎么办？Massive Multilingual Speech（MMS，大规模多语种语音）是另一个涵盖多种语音任务的模型，并且，它支持大量的语言。比方说，它可以合成超过 1,100 种语言的语音。",Xl,te,rn='MMS 的语音合成是基于 <a href="https://arxiv.org/pdf/2106.06103.pdf" rel="nofollow">VITS Kim et al., 2021</a> 的，它是最先进的 TTS 方法之一。',Ql,ee,un=`VITS 是一个语音生成网络，可以将文本转换成语音波形。它的工作方式类似于条件变分自编码器（conditional variational auto-encoder），从输入文本估计音频特征。首先，生成用频谱图表示的声学特征。
然后，使用改编自 HiFi-GAN 的转置卷积层解码出波形。在推理过程中，文本编码被上采样并使用流模块（flow module）和 HiFi-GAN 解码器转换成波形。像 Bark 一样，这里不需要声码器（vocoder），因为已经直接生成波形了。`,zl,F,El,le,fn="让我们试用一下 MMS，看看如何合成非英语的语音，例如德语。首先，我们将加载特定语言的检查点和分词器：",Ll,se,Pl,ne,cn="您可能会注意到，加载 MMS 模型需要使用 <code>VitsModel</code> 和 <code>VitsTokenizer</code>。这是因为如前所述，MMS 的 TTS 是基于 VITS 模型的。",ql,pe,Mn="让我们选择一首德语儿歌的前两句作为示例文本：",Yl,ie,Al,ae,Jn="要生成波形输出，使用分词器预处理文本，并将其传递给模型：",Dl,oe,Kl,me,Tn="让我们来听听：",Ol,re,ts,ue,yn='Wunderbar！如果您想尝试其他语言的 MMS，可以 <a href="https://huggingface.co/models?filter=vits" rel="nofollow">在 🤗 Hub 上</a> 寻找其他合适的 <code>vits</code> 检查点。',es,fe,Un="现在，让我们看看如何自己微调一个 TTS 模型！",ls,ce,ss,Me,ns;return w=new In({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),C=new ps({props:{title:"语音合成的预训练模型",local:"语音合成的预训练模型",headingTag:"h1"}}),Q=new ps({props:{title:"SpeechT5",local:"speecht5",headingTag:"h2"}}),j=new Je({props:{$$slots:{default:[gn]},$$scope:{ctx:b}}}),st=new v({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFNwZWVjaFQ1UHJvY2Vzc29yJTJDJTIwU3BlZWNoVDVGb3JUZXh0VG9TcGVlY2glMEElMEFwcm9jZXNzb3IlMjAlM0QlMjBTcGVlY2hUNVByb2Nlc3Nvci5mcm9tX3ByZXRyYWluZWQoJTIybWljcm9zb2Z0JTJGc3BlZWNodDVfdHRzJTIyKSUwQW1vZGVsJTIwJTNEJTIwU3BlZWNoVDVGb3JUZXh0VG9TcGVlY2guZnJvbV9wcmV0cmFpbmVkKCUyMm1pY3Jvc29mdCUyRnNwZWVjaHQ1X3R0cyUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> SpeechT5Processor, SpeechT5ForTextToSpeech

processor = SpeechT5Processor.from_pretrained(<span class="hljs-string">&quot;microsoft/speecht5_tts&quot;</span>)
model = SpeechT5ForTextToSpeech.from_pretrained(<span class="hljs-string">&quot;microsoft/speecht5_tts&quot;</span>)`,wrap:!1}}),pt=new v({props:{code:"aW5wdXRzJTIwJTNEJTIwcHJvY2Vzc29yKHRleHQlM0QlMjJEb24ndCUyMGNvdW50JTIwdGhlJTIwZGF5cyUyQyUyMG1ha2UlMjB0aGUlMjBkYXlzJTIwY291bnQuJTIyJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJwdCUyMik=",highlighted:'inputs = processor(text=<span class="hljs-string">&quot;Don&#x27;t count the days, make the days count.&quot;</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)',wrap:!1}}),Z=new Je({props:{$$slots:{default:[Hn]},$$scope:{ctx:b}}}),ot=new v({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBZW1iZWRkaW5nc19kYXRhc2V0JTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMk1hdHRoaWpzJTJGY211LWFyY3RpYy14dmVjdG9ycyUyMiUyQyUyMHNwbGl0JTNEJTIydmFsaWRhdGlvbiUyMiklMEElMEFpbXBvcnQlMjB0b3JjaCUwQSUwQXNwZWFrZXJfZW1iZWRkaW5ncyUyMCUzRCUyMHRvcmNoLnRlbnNvcihlbWJlZGRpbmdzX2RhdGFzZXQlNUI3MzA2JTVEJTVCJTIyeHZlY3RvciUyMiU1RCkudW5zcXVlZXplKDAp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

embeddings_dataset = load_dataset(<span class="hljs-string">&quot;Matthijs/cmu-arctic-xvectors&quot;</span>, split=<span class="hljs-string">&quot;validation&quot;</span>)

<span class="hljs-keyword">import</span> torch

speaker_embeddings = torch.tensor(embeddings_dataset[<span class="hljs-number">7306</span>][<span class="hljs-string">&quot;xvector&quot;</span>]).unsqueeze(<span class="hljs-number">0</span>)`,wrap:!1}}),ut=new v({props:{code:"c3BlY3Ryb2dyYW0lMjAlM0QlMjBtb2RlbC5nZW5lcmF0ZV9zcGVlY2goaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTJDJTIwc3BlYWtlcl9lbWJlZGRpbmdzKQ==",highlighted:'spectrogram = model.generate_speech(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>], speaker_embeddings)',wrap:!1}}),I=new Je({props:{$$slots:{default:[Sn]},$$scope:{ctx:b}}}),Jt=new v({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFNwZWVjaFQ1SGlmaUdhbiUwQSUwQXZvY29kZXIlMjAlM0QlMjBTcGVlY2hUNUhpZmlHYW4uZnJvbV9wcmV0cmFpbmVkKCUyMm1pY3Jvc29mdCUyRnNwZWVjaHQ1X2hpZmlnYW4lMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> SpeechT5HifiGan

vocoder = SpeechT5HifiGan.from_pretrained(<span class="hljs-string">&quot;microsoft/speecht5_hifigan&quot;</span>)`,wrap:!1}}),yt=new v({props:{code:"c3BlZWNoJTIwJTNEJTIwbW9kZWwuZ2VuZXJhdGVfc3BlZWNoKGlucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCUyQyUyMHNwZWFrZXJfZW1iZWRkaW5ncyUyQyUyMHZvY29kZXIlM0R2b2NvZGVyKQ==",highlighted:'speech = model.generate_speech(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>], speaker_embeddings, vocoder=vocoder)',wrap:!1}}),dt=new v({props:{code:"ZnJvbSUyMElQeXRob24uZGlzcGxheSUyMGltcG9ydCUyMEF1ZGlvJTBBJTBBQXVkaW8oc3BlZWNoJTJDJTIwcmF0ZSUzRDE2MDAwKQ==",highlighted:`<span class="hljs-keyword">from</span> IPython.display <span class="hljs-keyword">import</span> Audio

Audio(speech, rate=<span class="hljs-number">16000</span>)`,wrap:!1}}),$t=new ps({props:{title:"Bark",local:"bark",headingTag:"h2"}}),Bt=new v({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJhcmtNb2RlbCUyQyUyMEJhcmtQcm9jZXNzb3IlMEElMEFtb2RlbCUyMCUzRCUyMEJhcmtNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyc3VubyUyRmJhcmstc21hbGwlMjIpJTBBcHJvY2Vzc29yJTIwJTNEJTIwQmFya1Byb2Nlc3Nvci5mcm9tX3ByZXRyYWluZWQoJTIyc3VubyUyRmJhcmstc21hbGwlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BarkModel, BarkProcessor

model = BarkModel.from_pretrained(<span class="hljs-string">&quot;suno/bark-small&quot;</span>)
processor = BarkProcessor.from_pretrained(<span class="hljs-string">&quot;suno/bark-small&quot;</span>)`,wrap:!1}}),Ht=new v({props:{code:"JTIzJTIwJUU4JUFFJUJFJUU3JUJEJUFFJUU4JUFGJUI0JUU4JUFGJTlEJUU0JUJBJUJBJUU1JUI1JThDJUU1JTg1JUE1JTBBaW5wdXRzJTIwJTNEJTIwcHJvY2Vzc29yKCUyMlRoaXMlMjBpcyUyMGElMjB0ZXN0ISUyMiUyQyUyMHZvaWNlX3ByZXNldCUzRCUyMnYyJTJGZW5fc3BlYWtlcl8zJTIyKSUwQSUwQXNwZWVjaF9vdXRwdXQlMjAlM0QlMjBtb2RlbC5nZW5lcmF0ZSgqKmlucHV0cykuY3B1KCkubnVtcHkoKQ==",highlighted:`<span class="hljs-comment"># 设置说话人嵌入</span>
inputs = processor(<span class="hljs-string">&quot;This is a test!&quot;</span>, voice_preset=<span class="hljs-string">&quot;v2/en_speaker_3&quot;</span>)

speech_output = model.generate(**inputs).cpu().numpy()`,wrap:!1}}),Gt=new v({props:{code:"JTIzJTIwJUU4JUFGJTk1JUU4JUFGJTk1JUU2JUIzJTk1JUU4JUFGJUFEJUVGJUJDJThDJUU1JTkwJThDJUU2JTk3JUI2JUU2JTg4JTkxJUU0JUJCJUFDJUU0JUI5JTlGJUU2JTlEJUE1JUU3JTk0JUE4JUU0JUI4JTgwJUU0JUI4JUFBJUU2JUIzJTk1JUU4JUFGJUFEJUU4JUFGJUI0JUU4JUFGJTlEJUU0JUJBJUJBJUU1JUI1JThDJUU1JTg1JUE1JTBBaW5wdXRzJTIwJTNEJTIwcHJvY2Vzc29yKCUyMkMnZXN0JTIwdW4lMjB0ZXN0ISUyMiUyQyUyMHZvaWNlX3ByZXNldCUzRCUyMnYyJTJGZnJfc3BlYWtlcl8xJTIyKSUwQSUwQXNwZWVjaF9vdXRwdXQlMjAlM0QlMjBtb2RlbC5nZW5lcmF0ZSgqKmlucHV0cykuY3B1KCkubnVtcHkoKQ==",highlighted:`<span class="hljs-comment"># 试试法语，同时我们也来用一个法语说话人嵌入</span>
inputs = processor(<span class="hljs-string">&quot;C&#x27;est un test!&quot;</span>, voice_preset=<span class="hljs-string">&quot;v2/fr_speaker_1&quot;</span>)

speech_output = model.generate(**inputs).cpu().numpy()`,wrap:!1}}),Nt=new v({props:{code:"aW5wdXRzJTIwJTNEJTIwcHJvY2Vzc29yKCUwQSUyMCUyMCUyMCUyMCUyMiU1QmNsZWFycyUyMHRocm9hdCU1RCUyMFRoaXMlMjBpcyUyMGElMjB0ZXN0JTIwLi4uJTIwYW5kJTIwSSUyMGp1c3QlMjB0b29rJTIwYSUyMGxvbmclMjBwYXVzZS4lMjIlMkMlMEElMjAlMjAlMjAlMjB2b2ljZV9wcmVzZXQlM0QlMjJ2MiUyRmZyX3NwZWFrZXJfMSUyMiUyQyUwQSklMEElMEFzcGVlY2hfb3V0cHV0JTIwJTNEJTIwbW9kZWwuZ2VuZXJhdGUoKippbnB1dHMpLmNwdSgpLm51bXB5KCk=",highlighted:`inputs = processor(
    <span class="hljs-string">&quot;[clears throat] This is a test ... and I just took a long pause.&quot;</span>,
    voice_preset=<span class="hljs-string">&quot;v2/fr_speaker_1&quot;</span>,
)

speech_output = model.generate(**inputs).cpu().numpy()`,wrap:!1}}),Ft=new v({props:{code:"aW5wdXRzJTIwJTNEJTIwcHJvY2Vzc29yKCUwQSUyMCUyMCUyMCUyMCUyMiVFMiU5OSVBQSUyMEluJTIwdGhlJTIwbWlnaHR5JTIwanVuZ2xlJTJDJTIwSSdtJTIwdHJ5aW5nJTIwdG8lMjBnZW5lcmF0ZSUyMGJhcmtzLiUyMiUyQyUwQSklMEElMEFzcGVlY2hfb3V0cHV0JTIwJTNEJTIwbW9kZWwuZ2VuZXJhdGUoKippbnB1dHMpLmNwdSgpLm51bXB5KCk=",highlighted:`inputs = processor(
    <span class="hljs-string">&quot;♪ In the mighty jungle, I&#x27;m trying to generate barks.&quot;</span>,
)

speech_output = model.generate(**inputs).cpu().numpy()`,wrap:!1}}),zt=new v({props:{code:"aW5wdXRfbGlzdCUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMiU1QmNsZWFycyUyMHRocm9hdCU1RCUyMEhlbGxvJTIwdWglMjAuLi4lMkMlMjBteSUyMGRvZyUyMGlzJTIwY3V0ZSUyMCU1QmxhdWdodGVyJTVEJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyTGV0J3MlMjB0cnklMjBnZW5lcmF0aW5nJTIwc3BlZWNoJTJDJTIwd2l0aCUyMEJhcmslMkMlMjBhJTIwdGV4dC10by1zcGVlY2glMjBtb2RlbCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMiVFMiU5OSVBQSUyMEluJTIwdGhlJTIwanVuZ2xlJTJDJTIwdGhlJTIwbWlnaHR5JTIwanVuZ2xlJTJDJTIwdGhlJTIwbGlvbiUyMGJhcmtzJTIwdG9uaWdodCUyMCVFMiU5OSVBQSUyMiUyQyUwQSU1RCUwQSUwQSUyMyUyMCVFOCVBRSVCRSVFNyVCRCVBRSVFNCVCOCU4MCVFNCVCOCVBQSVFOCVBRiVCNCVFOCVBRiU5RCVFNCVCQSVCQSVFNSVCNSU4QyVFNSU4NSVBNSUwQWlucHV0cyUyMCUzRCUyMHByb2Nlc3NvcihpbnB1dF9saXN0JTJDJTIwdm9pY2VfcHJlc2V0JTNEJTIydjIlMkZlbl9zcGVha2VyXzMlMjIpJTBBJTBBc3BlZWNoX291dHB1dCUyMCUzRCUyMG1vZGVsLmdlbmVyYXRlKCoqaW5wdXRzKS5jcHUoKS5udW1weSgp",highlighted:`input_list = [
    <span class="hljs-string">&quot;[clears throat] Hello uh ..., my dog is cute [laughter]&quot;</span>,
    <span class="hljs-string">&quot;Let&#x27;s try generating speech, with Bark, a text-to-speech model&quot;</span>,
    <span class="hljs-string">&quot;♪ In the jungle, the mighty jungle, the lion barks tonight ♪&quot;</span>,
]

<span class="hljs-comment"># 设置一个说话人嵌入</span>
inputs = processor(input_list, voice_preset=<span class="hljs-string">&quot;v2/en_speaker_3&quot;</span>)

speech_output = model.generate(**inputs).cpu().numpy()`,wrap:!1}}),Pt=new v({props:{code:"ZnJvbSUyMElQeXRob24uZGlzcGxheSUyMGltcG9ydCUyMEF1ZGlvJTBBJTBBc2FtcGxpbmdfcmF0ZSUyMCUzRCUyMG1vZGVsLmdlbmVyYXRpb25fY29uZmlnLnNhbXBsZV9yYXRlJTBBQXVkaW8oc3BlZWNoX291dHB1dCU1QjAlNUQlMkMlMjByYXRlJTNEc2FtcGxpbmdfcmF0ZSk=",highlighted:`<span class="hljs-keyword">from</span> IPython.display <span class="hljs-keyword">import</span> Audio

sampling_rate = model.generation_config.sample_rate
Audio(speech_output[<span class="hljs-number">0</span>], rate=sampling_rate)`,wrap:!1}}),Yt=new v({props:{code:"QXVkaW8oc3BlZWNoX291dHB1dCU1QjElNUQlMkMlMjByYXRlJTNEc2FtcGxpbmdfcmF0ZSk=",highlighted:'Audio(speech_output[<span class="hljs-number">1</span>], rate=sampling_rate)',wrap:!1}}),Dt=new v({props:{code:"QXVkaW8oc3BlZWNoX291dHB1dCU1QjIlNUQlMkMlMjByYXRlJTNEc2FtcGxpbmdfcmF0ZSk=",highlighted:'Audio(speech_output[<span class="hljs-number">2</span>], rate=sampling_rate)',wrap:!1}}),R=new Je({props:{$$slots:{default:[Gn]},$$scope:{ctx:b}}}),Kt=new ps({props:{title:"Massive Multilingual Speech (MMS)",local:"massive-multilingual-speech-mms",headingTag:"h2"}}),F=new Je({props:{warning:!0,$$slots:{default:[Wn]},$$scope:{ctx:b}}}),se=new v({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFZpdHNNb2RlbCUyQyUyMFZpdHNUb2tlbml6ZXIlMEElMEFtb2RlbCUyMCUzRCUyMFZpdHNNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyZmFjZWJvb2slMkZtbXMtdHRzLWRldSUyMiklMEF0b2tlbml6ZXIlMjAlM0QlMjBWaXRzVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJmYWNlYm9vayUyRm1tcy10dHMtZGV1JTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> VitsModel, VitsTokenizer

model = VitsModel.from_pretrained(<span class="hljs-string">&quot;facebook/mms-tts-deu&quot;</span>)
tokenizer = VitsTokenizer.from_pretrained(<span class="hljs-string">&quot;facebook/mms-tts-deu&quot;</span>)`,wrap:!1}}),ie=new v({props:{code:"dGV4dF9leGFtcGxlJTIwJTNEJTIwKCUwQSUyMCUyMCUyMCUyMCUyMkljaCUyMGJpbiUyMFNjaG5hcHBpJTIwZGFzJTIwa2xlaW5lJTIwS3Jva29kaWwlMkMlMjBrb21tJTIwYXVzJTIwJUMzJTg0Z3lwdGVuJTIwZGFzJTIwbGllZ3QlMjBkaXJla3QlMjBhbSUyME5pbC4lMjIlMEEp",highlighted:`text_example = (
    <span class="hljs-string">&quot;Ich bin Schnappi das kleine Krokodil, komm aus Ägypten das liegt direkt am Nil.&quot;</span>
)`,wrap:!1}}),oe=new v({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIodGV4dF9leGFtcGxlJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJwdCUyMiklMEFpbnB1dF9pZHMlMjAlM0QlMjBpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQlMEElMEElMEF3aXRoJTIwdG9yY2gubm9fZ3JhZCgpJTNBJTBBJTIwJTIwJTIwJTIwb3V0cHV0cyUyMCUzRCUyMG1vZGVsKGlucHV0X2lkcyklMEElMEFzcGVlY2glMjAlM0QlMjBvdXRwdXRzJTVCJTIyd2F2ZWZvcm0lMjIlNUQ=",highlighted:`<span class="hljs-keyword">import</span> torch

inputs = tokenizer(text_example, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
input_ids = inputs[<span class="hljs-string">&quot;input_ids&quot;</span>]


<span class="hljs-keyword">with</span> torch.no_grad():
    outputs = model(input_ids)

speech = outputs[<span class="hljs-string">&quot;waveform&quot;</span>]`,wrap:!1}}),re=new v({props:{code:"ZnJvbSUyMElQeXRob24uZGlzcGxheSUyMGltcG9ydCUyMEF1ZGlvJTBBJTBBQXVkaW8oc3BlZWNoJTJDJTIwcmF0ZSUzRDE2MDAwKQ==",highlighted:`<span class="hljs-keyword">from</span> IPython.display <span class="hljs-keyword">import</span> Audio

Audio(speech, rate=<span class="hljs-number">16000</span>)`,wrap:!1}}),ce=new Bn({props:{source:"https://github.com/huggingface/audio-transformers-course/blob/main/chapters/zh-CN/chapter6/pre-trained_models.mdx"}}),{c(){m=i("meta"),$=n(),u=i("p"),f=n(),c(w.$$.fragment),d=n(),c(C.$$.fragment),k=n(),r=i("p"),r.textContent=h,ye=n(),c(Q.$$.fragment),Ue=n(),z=i("p"),z.innerHTML=is,de=n(),E=i("p"),E.textContent=as,Ce=n(),L=i("p"),L.innerHTML=os,ve=n(),P=i("p"),P.textContent=ms,$e=n(),_=i("div"),_.innerHTML=rs,we=n(),q=i("p"),q.textContent=us,he=n(),Y=i("p"),Y.textContent=fs,be=n(),A=i("p"),A.textContent=cs,xe=n(),c(j.$$.fragment),ke=n(),D=i("p"),D.textContent=Ms,_e=n(),K=i("ul"),K.innerHTML=Js,je=n(),O=i("p"),O.textContent=Ts,Ve=n(),V=i("div"),V.innerHTML=ys,Ze=n(),tt=i("p"),tt.innerHTML=Us,Ie=n(),et=i("p"),et.textContent=ds,Be=n(),lt=i("p"),lt.textContent=Cs,ge=n(),c(st.$$.fragment),He=n(),nt=i("p"),nt.textContent=vs,Se=n(),c(pt.$$.fragment),Ge=n(),it=i("p"),it.textContent=$s,We=n(),c(Z.$$.fragment),Ne=n(),at=i("p"),at.innerHTML=ws,Re=n(),c(ot.$$.fragment),Fe=n(),mt=i("p"),mt.textContent=hs,Xe=n(),rt=i("p"),rt.textContent=bs,Qe=n(),c(ut.$$.fragment),ze=n(),ft=i("p"),ft.textContent=xs,Ee=n(),ct=i("p"),ct.textContent=ks,Le=n(),c(I.$$.fragment),Pe=n(),Mt=i("p"),Mt.textContent=_s,qe=n(),c(Jt.$$.fragment),Ye=n(),Tt=i("p"),Tt.textContent=js,Ae=n(),c(yt.$$.fragment),De=n(),Ut=i("p"),Ut.textContent=Vs,Ke=n(),c(dt.$$.fragment),Oe=n(),Ct=i("p"),Ct.textContent=Zs,tl=n(),vt=i("p"),vt.textContent=Is,el=n(),x=i("iframe"),x.innerHTML=Bs,ll=n(),c($t.$$.fragment),sl=n(),wt=i("p"),wt.innerHTML=Hs,nl=n(),ht=i("p"),ht.innerHTML=Ss,pl=n(),bt=i("p"),bt.innerHTML=Gs,il=n(),xt=i("p"),xt.textContent=Ws,al=n(),kt=i("ul"),kt.innerHTML=Ns,ol=n(),_t=i("p"),_t.textContent=Rs,ml=n(),jt=i("p"),jt.textContent=Fs,rl=n(),Vt=i("p"),Vt.textContent=Xs,ul=n(),Zt=i("p"),Zt.textContent=Qs,fl=n(),It=i("ol"),It.innerHTML=zs,cl=n(),c(Bt.$$.fragment),Ml=n(),gt=i("p"),gt.innerHTML=Es,Jl=n(),c(Ht.$$.fragment),Tl=n(),B=i("audio"),B.innerHTML=Ls,yl=n(),St=i("p"),St.innerHTML=Ps,Ul=n(),c(Gt.$$.fragment),dl=n(),g=i("audio"),g.innerHTML=qs,Cl=n(),Wt=i("p"),Wt.innerHTML=Ys,vl=n(),c(Nt.$$.fragment),$l=n(),H=i("audio"),H.innerHTML=As,wl=n(),Rt=i("p"),Rt.textContent=Ds,hl=n(),c(Ft.$$.fragment),bl=n(),S=i("audio"),S.innerHTML=Ks,xl=n(),Xt=i("p"),Xt.textContent=Os,kl=n(),Qt=i("p"),Qt.textContent=tn,_l=n(),c(zt.$$.fragment),jl=n(),Et=i("p"),Et.textContent=en,Vl=n(),Lt=i("p"),Lt.textContent=ln,Zl=n(),c(Pt.$$.fragment),Il=n(),G=i("audio"),G.innerHTML=sn,Bl=n(),qt=i("p"),qt.textContent=nn,gl=n(),c(Yt.$$.fragment),Hl=n(),W=i("audio"),W.innerHTML=pn,Sl=n(),At=i("p"),At.textContent=an,Gl=n(),c(Dt.$$.fragment),Wl=n(),N=i("audio"),N.innerHTML=on,Nl=n(),c(R.$$.fragment),Rl=n(),c(Kt.$$.fragment),Fl=n(),Ot=i("p"),Ot.textContent=mn,Xl=n(),te=i("p"),te.innerHTML=rn,Ql=n(),ee=i("p"),ee.textContent=un,zl=n(),c(F.$$.fragment),El=n(),le=i("p"),le.textContent=fn,Ll=n(),c(se.$$.fragment),Pl=n(),ne=i("p"),ne.innerHTML=cn,ql=n(),pe=i("p"),pe.textContent=Mn,Yl=n(),c(ie.$$.fragment),Al=n(),ae=i("p"),ae.textContent=Jn,Dl=n(),c(oe.$$.fragment),Kl=n(),me=i("p"),me.textContent=Tn,Ol=n(),c(re.$$.fragment),ts=n(),ue=i("p"),ue.innerHTML=yn,es=n(),fe=i("p"),fe.textContent=Un,ls=n(),c(ce.$$.fragment),ss=n(),Me=i("p"),this.h()},l(t){const e=Vn("svelte-u9bgzb",document.head);m=a(e,"META",{name:!0,content:!0}),e.forEach(l),$=p(t),u=a(t,"P",{}),hn(u).forEach(l),f=p(t),M(w.$$.fragment,t),d=p(t),M(C.$$.fragment,t),k=p(t),r=a(t,"P",{"data-svelte-h":!0}),o(r)!=="svelte-1b4vjrd"&&(r.textContent=h),ye=p(t),M(Q.$$.fragment,t),Ue=p(t),z=a(t,"P",{"data-svelte-h":!0}),o(z)!=="svelte-st65m3"&&(z.innerHTML=is),de=p(t),E=a(t,"P",{"data-svelte-h":!0}),o(E)!=="svelte-75y2xv"&&(E.textContent=as),Ce=p(t),L=a(t,"P",{"data-svelte-h":!0}),o(L)!=="svelte-zsixi9"&&(L.innerHTML=os),ve=p(t),P=a(t,"P",{"data-svelte-h":!0}),o(P)!=="svelte-1d1keko"&&(P.textContent=ms),$e=p(t),_=a(t,"DIV",{class:!0,"data-svelte-h":!0}),o(_)!=="svelte-1j5439p"&&(_.innerHTML=rs),we=p(t),q=a(t,"P",{"data-svelte-h":!0}),o(q)!=="svelte-v61e9l"&&(q.textContent=us),he=p(t),Y=a(t,"P",{"data-svelte-h":!0}),o(Y)!=="svelte-mgp4f6"&&(Y.textContent=fs),be=p(t),A=a(t,"P",{"data-svelte-h":!0}),o(A)!=="svelte-f9btrw"&&(A.textContent=cs),xe=p(t),M(j.$$.fragment,t),ke=p(t),D=a(t,"P",{"data-svelte-h":!0}),o(D)!=="svelte-u1ur4z"&&(D.textContent=Ms),_e=p(t),K=a(t,"UL",{"data-svelte-h":!0}),o(K)!=="svelte-i75w62"&&(K.innerHTML=Js),je=p(t),O=a(t,"P",{"data-svelte-h":!0}),o(O)!=="svelte-apnuw1"&&(O.textContent=Ts),Ve=p(t),V=a(t,"DIV",{class:!0,"data-svelte-h":!0}),o(V)!=="svelte-sze2fn"&&(V.innerHTML=ys),Ze=p(t),tt=a(t,"P",{"data-svelte-h":!0}),o(tt)!=="svelte-1frga2j"&&(tt.innerHTML=Us),Ie=p(t),et=a(t,"P",{"data-svelte-h":!0}),o(et)!=="svelte-13wzqzv"&&(et.textContent=ds),Be=p(t),lt=a(t,"P",{"data-svelte-h":!0}),o(lt)!=="svelte-vn6ebl"&&(lt.textContent=Cs),ge=p(t),M(st.$$.fragment,t),He=p(t),nt=a(t,"P",{"data-svelte-h":!0}),o(nt)!=="svelte-45edpc"&&(nt.textContent=vs),Se=p(t),M(pt.$$.fragment,t),Ge=p(t),it=a(t,"P",{"data-svelte-h":!0}),o(it)!=="svelte-1qxc9gx"&&(it.textContent=$s),We=p(t),M(Z.$$.fragment,t),Ne=p(t),at=a(t,"P",{"data-svelte-h":!0}),o(at)!=="svelte-1x6aamp"&&(at.innerHTML=ws),Re=p(t),M(ot.$$.fragment,t),Fe=p(t),mt=a(t,"P",{"data-svelte-h":!0}),o(mt)!=="svelte-133o8sq"&&(mt.textContent=hs),Xe=p(t),rt=a(t,"P",{"data-svelte-h":!0}),o(rt)!=="svelte-tfw8dj"&&(rt.textContent=bs),Qe=p(t),M(ut.$$.fragment,t),ze=p(t),ft=a(t,"P",{"data-svelte-h":!0}),o(ft)!=="svelte-h1l0vf"&&(ft.textContent=xs),Ee=p(t),ct=a(t,"P",{"data-svelte-h":!0}),o(ct)!=="svelte-bpcbge"&&(ct.textContent=ks),Le=p(t),M(I.$$.fragment,t),Pe=p(t),Mt=a(t,"P",{"data-svelte-h":!0}),o(Mt)!=="svelte-9v0lxe"&&(Mt.textContent=_s),qe=p(t),M(Jt.$$.fragment,t),Ye=p(t),Tt=a(t,"P",{"data-svelte-h":!0}),o(Tt)!=="svelte-116nmst"&&(Tt.textContent=js),Ae=p(t),M(yt.$$.fragment,t),De=p(t),Ut=a(t,"P",{"data-svelte-h":!0}),o(Ut)!=="svelte-vp126w"&&(Ut.textContent=Vs),Ke=p(t),M(dt.$$.fragment,t),Oe=p(t),Ct=a(t,"P",{"data-svelte-h":!0}),o(Ct)!=="svelte-qt7ix2"&&(Ct.textContent=Zs),tl=p(t),vt=a(t,"P",{"data-svelte-h":!0}),o(vt)!=="svelte-eglvvt"&&(vt.textContent=Is),el=p(t),x=a(t,"IFRAME",{src:!0,frameborder:!0,width:!0,height:!0,"data-svelte-h":!0}),o(x)!=="svelte-k7mwvh"&&(x.innerHTML=Bs),ll=p(t),M($t.$$.fragment,t),sl=p(t),wt=a(t,"P",{"data-svelte-h":!0}),o(wt)!=="svelte-s1cckx"&&(wt.innerHTML=Hs),nl=p(t),ht=a(t,"P",{"data-svelte-h":!0}),o(ht)!=="svelte-1ksv18o"&&(ht.innerHTML=Ss),pl=p(t),bt=a(t,"P",{"data-svelte-h":!0}),o(bt)!=="svelte-4l0twx"&&(bt.innerHTML=Gs),il=p(t),xt=a(t,"P",{"data-svelte-h":!0}),o(xt)!=="svelte-1j8vdep"&&(xt.textContent=Ws),al=p(t),kt=a(t,"UL",{"data-svelte-h":!0}),o(kt)!=="svelte-zkoisr"&&(kt.innerHTML=Ns),ol=p(t),_t=a(t,"P",{"data-svelte-h":!0}),o(_t)!=="svelte-1faezvv"&&(_t.textContent=Rs),ml=p(t),jt=a(t,"P",{"data-svelte-h":!0}),o(jt)!=="svelte-1jf1pv5"&&(jt.textContent=Fs),rl=p(t),Vt=a(t,"P",{"data-svelte-h":!0}),o(Vt)!=="svelte-7znq7f"&&(Vt.textContent=Xs),ul=p(t),Zt=a(t,"P",{"data-svelte-h":!0}),o(Zt)!=="svelte-1ur311x"&&(Zt.textContent=Qs),fl=p(t),It=a(t,"OL",{"data-svelte-h":!0}),o(It)!=="svelte-quougx"&&(It.innerHTML=zs),cl=p(t),M(Bt.$$.fragment,t),Ml=p(t),gt=a(t,"P",{"data-svelte-h":!0}),o(gt)!=="svelte-n1k3bz"&&(gt.innerHTML=Es),Jl=p(t),M(Ht.$$.fragment,t),Tl=p(t),B=a(t,"AUDIO",{"data-svelte-h":!0}),o(B)!=="svelte-1dcfkqn"&&(B.innerHTML=Ls),yl=p(t),St=a(t,"P",{"data-svelte-h":!0}),o(St)!=="svelte-1oxltsk"&&(St.innerHTML=Ps),Ul=p(t),M(Gt.$$.fragment,t),dl=p(t),g=a(t,"AUDIO",{"data-svelte-h":!0}),o(g)!=="svelte-1mf2amh"&&(g.innerHTML=qs),Cl=p(t),Wt=a(t,"P",{"data-svelte-h":!0}),o(Wt)!=="svelte-1plsvxg"&&(Wt.innerHTML=Ys),vl=p(t),M(Nt.$$.fragment,t),$l=p(t),H=a(t,"AUDIO",{"data-svelte-h":!0}),o(H)!=="svelte-18uewve"&&(H.innerHTML=As),wl=p(t),Rt=a(t,"P",{"data-svelte-h":!0}),o(Rt)!=="svelte-1ezn0es"&&(Rt.textContent=Ds),hl=p(t),M(Ft.$$.fragment,t),bl=p(t),S=a(t,"AUDIO",{"data-svelte-h":!0}),o(S)!=="svelte-xst92l"&&(S.innerHTML=Ks),xl=p(t),Xt=a(t,"P",{"data-svelte-h":!0}),o(Xt)!=="svelte-s1mk8o"&&(Xt.textContent=Os),kl=p(t),Qt=a(t,"P",{"data-svelte-h":!0}),o(Qt)!=="svelte-1jy7yoj"&&(Qt.textContent=tn),_l=p(t),M(zt.$$.fragment,t),jl=p(t),Et=a(t,"P",{"data-svelte-h":!0}),o(Et)!=="svelte-115bleg"&&(Et.textContent=en),Vl=p(t),Lt=a(t,"P",{"data-svelte-h":!0}),o(Lt)!=="svelte-1why158"&&(Lt.textContent=ln),Zl=p(t),M(Pt.$$.fragment,t),Il=p(t),G=a(t,"AUDIO",{"data-svelte-h":!0}),o(G)!=="svelte-v3niu0"&&(G.innerHTML=sn),Bl=p(t),qt=a(t,"P",{"data-svelte-h":!0}),o(qt)!=="svelte-1uczco0"&&(qt.textContent=nn),gl=p(t),M(Yt.$$.fragment,t),Hl=p(t),W=a(t,"AUDIO",{"data-svelte-h":!0}),o(W)!=="svelte-1x1ywin"&&(W.innerHTML=pn),Sl=p(t),At=a(t,"P",{"data-svelte-h":!0}),o(At)!=="svelte-1wcywyt"&&(At.textContent=an),Gl=p(t),M(Dt.$$.fragment,t),Wl=p(t),N=a(t,"AUDIO",{"data-svelte-h":!0}),o(N)!=="svelte-69zylm"&&(N.innerHTML=on),Nl=p(t),M(R.$$.fragment,t),Rl=p(t),M(Kt.$$.fragment,t),Fl=p(t),Ot=a(t,"P",{"data-svelte-h":!0}),o(Ot)!=="svelte-gmo2j4"&&(Ot.textContent=mn),Xl=p(t),te=a(t,"P",{"data-svelte-h":!0}),o(te)!=="svelte-yksmt6"&&(te.innerHTML=rn),Ql=p(t),ee=a(t,"P",{"data-svelte-h":!0}),o(ee)!=="svelte-1w0zui0"&&(ee.textContent=un),zl=p(t),M(F.$$.fragment,t),El=p(t),le=a(t,"P",{"data-svelte-h":!0}),o(le)!=="svelte-5i2hio"&&(le.textContent=fn),Ll=p(t),M(se.$$.fragment,t),Pl=p(t),ne=a(t,"P",{"data-svelte-h":!0}),o(ne)!=="svelte-inlyrl"&&(ne.innerHTML=cn),ql=p(t),pe=a(t,"P",{"data-svelte-h":!0}),o(pe)!=="svelte-jup6at"&&(pe.textContent=Mn),Yl=p(t),M(ie.$$.fragment,t),Al=p(t),ae=a(t,"P",{"data-svelte-h":!0}),o(ae)!=="svelte-amo8sd"&&(ae.textContent=Jn),Dl=p(t),M(oe.$$.fragment,t),Kl=p(t),me=a(t,"P",{"data-svelte-h":!0}),o(me)!=="svelte-bk35c9"&&(me.textContent=Tn),Ol=p(t),M(re.$$.fragment,t),ts=p(t),ue=a(t,"P",{"data-svelte-h":!0}),o(ue)!=="svelte-19a1qe1"&&(ue.innerHTML=yn),es=p(t),fe=a(t,"P",{"data-svelte-h":!0}),o(fe)!=="svelte-1t211s5"&&(fe.textContent=Un),ls=p(t),M(ce.$$.fragment,t),ss=p(t),Me=a(t,"P",{}),hn(Me).forEach(l),this.h()},h(){X(m,"name","hf:doc:metadata"),X(m,"content",Rn),X(_,"class","flex justify-center"),X(V,"class","flex justify-center"),xn(x.src,gs="https://matthijs-speecht5-tts-demo.hf.space")||X(x,"src",gs),X(x,"frameborder","0"),X(x,"width","850"),X(x,"height","450"),B.controls="",g.controls="",H.controls="",S.controls="",G.controls="",W.controls="",N.controls=""},m(t,e){Zn(document.head,m),s(t,$,e),s(t,u,e),s(t,f,e),J(w,t,e),s(t,d,e),J(C,t,e),s(t,k,e),s(t,r,e),s(t,ye,e),J(Q,t,e),s(t,Ue,e),s(t,z,e),s(t,de,e),s(t,E,e),s(t,Ce,e),s(t,L,e),s(t,ve,e),s(t,P,e),s(t,$e,e),s(t,_,e),s(t,we,e),s(t,q,e),s(t,he,e),s(t,Y,e),s(t,be,e),s(t,A,e),s(t,xe,e),J(j,t,e),s(t,ke,e),s(t,D,e),s(t,_e,e),s(t,K,e),s(t,je,e),s(t,O,e),s(t,Ve,e),s(t,V,e),s(t,Ze,e),s(t,tt,e),s(t,Ie,e),s(t,et,e),s(t,Be,e),s(t,lt,e),s(t,ge,e),J(st,t,e),s(t,He,e),s(t,nt,e),s(t,Se,e),J(pt,t,e),s(t,Ge,e),s(t,it,e),s(t,We,e),J(Z,t,e),s(t,Ne,e),s(t,at,e),s(t,Re,e),J(ot,t,e),s(t,Fe,e),s(t,mt,e),s(t,Xe,e),s(t,rt,e),s(t,Qe,e),J(ut,t,e),s(t,ze,e),s(t,ft,e),s(t,Ee,e),s(t,ct,e),s(t,Le,e),J(I,t,e),s(t,Pe,e),s(t,Mt,e),s(t,qe,e),J(Jt,t,e),s(t,Ye,e),s(t,Tt,e),s(t,Ae,e),J(yt,t,e),s(t,De,e),s(t,Ut,e),s(t,Ke,e),J(dt,t,e),s(t,Oe,e),s(t,Ct,e),s(t,tl,e),s(t,vt,e),s(t,el,e),s(t,x,e),s(t,ll,e),J($t,t,e),s(t,sl,e),s(t,wt,e),s(t,nl,e),s(t,ht,e),s(t,pl,e),s(t,bt,e),s(t,il,e),s(t,xt,e),s(t,al,e),s(t,kt,e),s(t,ol,e),s(t,_t,e),s(t,ml,e),s(t,jt,e),s(t,rl,e),s(t,Vt,e),s(t,ul,e),s(t,Zt,e),s(t,fl,e),s(t,It,e),s(t,cl,e),J(Bt,t,e),s(t,Ml,e),s(t,gt,e),s(t,Jl,e),J(Ht,t,e),s(t,Tl,e),s(t,B,e),s(t,yl,e),s(t,St,e),s(t,Ul,e),J(Gt,t,e),s(t,dl,e),s(t,g,e),s(t,Cl,e),s(t,Wt,e),s(t,vl,e),J(Nt,t,e),s(t,$l,e),s(t,H,e),s(t,wl,e),s(t,Rt,e),s(t,hl,e),J(Ft,t,e),s(t,bl,e),s(t,S,e),s(t,xl,e),s(t,Xt,e),s(t,kl,e),s(t,Qt,e),s(t,_l,e),J(zt,t,e),s(t,jl,e),s(t,Et,e),s(t,Vl,e),s(t,Lt,e),s(t,Zl,e),J(Pt,t,e),s(t,Il,e),s(t,G,e),s(t,Bl,e),s(t,qt,e),s(t,gl,e),J(Yt,t,e),s(t,Hl,e),s(t,W,e),s(t,Sl,e),s(t,At,e),s(t,Gl,e),J(Dt,t,e),s(t,Wl,e),s(t,N,e),s(t,Nl,e),J(R,t,e),s(t,Rl,e),J(Kt,t,e),s(t,Fl,e),s(t,Ot,e),s(t,Xl,e),s(t,te,e),s(t,Ql,e),s(t,ee,e),s(t,zl,e),J(F,t,e),s(t,El,e),s(t,le,e),s(t,Ll,e),J(se,t,e),s(t,Pl,e),s(t,ne,e),s(t,ql,e),s(t,pe,e),s(t,Yl,e),J(ie,t,e),s(t,Al,e),s(t,ae,e),s(t,Dl,e),J(oe,t,e),s(t,Kl,e),s(t,me,e),s(t,Ol,e),J(re,t,e),s(t,ts,e),s(t,ue,e),s(t,es,e),s(t,fe,e),s(t,ls,e),J(ce,t,e),s(t,ss,e),s(t,Me,e),ns=!0},p(t,[e]){const dn={};e&2&&(dn.$$scope={dirty:e,ctx:t}),j.$set(dn);const Cn={};e&2&&(Cn.$$scope={dirty:e,ctx:t}),Z.$set(Cn);const vn={};e&2&&(vn.$$scope={dirty:e,ctx:t}),I.$set(vn);const $n={};e&2&&($n.$$scope={dirty:e,ctx:t}),R.$set($n);const wn={};e&2&&(wn.$$scope={dirty:e,ctx:t}),F.$set(wn)},i(t){ns||(T(w.$$.fragment,t),T(C.$$.fragment,t),T(Q.$$.fragment,t),T(j.$$.fragment,t),T(st.$$.fragment,t),T(pt.$$.fragment,t),T(Z.$$.fragment,t),T(ot.$$.fragment,t),T(ut.$$.fragment,t),T(I.$$.fragment,t),T(Jt.$$.fragment,t),T(yt.$$.fragment,t),T(dt.$$.fragment,t),T($t.$$.fragment,t),T(Bt.$$.fragment,t),T(Ht.$$.fragment,t),T(Gt.$$.fragment,t),T(Nt.$$.fragment,t),T(Ft.$$.fragment,t),T(zt.$$.fragment,t),T(Pt.$$.fragment,t),T(Yt.$$.fragment,t),T(Dt.$$.fragment,t),T(R.$$.fragment,t),T(Kt.$$.fragment,t),T(F.$$.fragment,t),T(se.$$.fragment,t),T(ie.$$.fragment,t),T(oe.$$.fragment,t),T(re.$$.fragment,t),T(ce.$$.fragment,t),ns=!0)},o(t){y(w.$$.fragment,t),y(C.$$.fragment,t),y(Q.$$.fragment,t),y(j.$$.fragment,t),y(st.$$.fragment,t),y(pt.$$.fragment,t),y(Z.$$.fragment,t),y(ot.$$.fragment,t),y(ut.$$.fragment,t),y(I.$$.fragment,t),y(Jt.$$.fragment,t),y(yt.$$.fragment,t),y(dt.$$.fragment,t),y($t.$$.fragment,t),y(Bt.$$.fragment,t),y(Ht.$$.fragment,t),y(Gt.$$.fragment,t),y(Nt.$$.fragment,t),y(Ft.$$.fragment,t),y(zt.$$.fragment,t),y(Pt.$$.fragment,t),y(Yt.$$.fragment,t),y(Dt.$$.fragment,t),y(R.$$.fragment,t),y(Kt.$$.fragment,t),y(F.$$.fragment,t),y(se.$$.fragment,t),y(ie.$$.fragment,t),y(oe.$$.fragment,t),y(re.$$.fragment,t),y(ce.$$.fragment,t),ns=!1},d(t){t&&(l($),l(u),l(f),l(d),l(k),l(r),l(ye),l(Ue),l(z),l(de),l(E),l(Ce),l(L),l(ve),l(P),l($e),l(_),l(we),l(q),l(he),l(Y),l(be),l(A),l(xe),l(ke),l(D),l(_e),l(K),l(je),l(O),l(Ve),l(V),l(Ze),l(tt),l(Ie),l(et),l(Be),l(lt),l(ge),l(He),l(nt),l(Se),l(Ge),l(it),l(We),l(Ne),l(at),l(Re),l(Fe),l(mt),l(Xe),l(rt),l(Qe),l(ze),l(ft),l(Ee),l(ct),l(Le),l(Pe),l(Mt),l(qe),l(Ye),l(Tt),l(Ae),l(De),l(Ut),l(Ke),l(Oe),l(Ct),l(tl),l(vt),l(el),l(x),l(ll),l(sl),l(wt),l(nl),l(ht),l(pl),l(bt),l(il),l(xt),l(al),l(kt),l(ol),l(_t),l(ml),l(jt),l(rl),l(Vt),l(ul),l(Zt),l(fl),l(It),l(cl),l(Ml),l(gt),l(Jl),l(Tl),l(B),l(yl),l(St),l(Ul),l(dl),l(g),l(Cl),l(Wt),l(vl),l($l),l(H),l(wl),l(Rt),l(hl),l(bl),l(S),l(xl),l(Xt),l(kl),l(Qt),l(_l),l(jl),l(Et),l(Vl),l(Lt),l(Zl),l(Il),l(G),l(Bl),l(qt),l(gl),l(Hl),l(W),l(Sl),l(At),l(Gl),l(Wl),l(N),l(Nl),l(Rl),l(Fl),l(Ot),l(Xl),l(te),l(Ql),l(ee),l(zl),l(El),l(le),l(Ll),l(Pl),l(ne),l(ql),l(pe),l(Yl),l(Al),l(ae),l(Dl),l(Kl),l(me),l(Ol),l(ts),l(ue),l(es),l(fe),l(ls),l(ss),l(Me)),l(m),U(w,t),U(C,t),U(Q,t),U(j,t),U(st,t),U(pt,t),U(Z,t),U(ot,t),U(ut,t),U(I,t),U(Jt,t),U(yt,t),U(dt,t),U($t,t),U(Bt,t),U(Ht,t),U(Gt,t),U(Nt,t),U(Ft,t),U(zt,t),U(Pt,t),U(Yt,t),U(Dt,t),U(R,t),U(Kt,t),U(F,t),U(se,t),U(ie,t),U(oe,t),U(re,t),U(ce,t)}}}const Rn='{"title":"语音合成的预训练模型","local":"语音合成的预训练模型","sections":[{"title":"SpeechT5","local":"speecht5","sections":[],"depth":2},{"title":"Bark","local":"bark","sections":[],"depth":2},{"title":"Massive Multilingual Speech (MMS)","local":"massive-multilingual-speech-mms","sections":[],"depth":2}],"depth":1}';function Fn(b){return kn(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Pn extends _n{constructor(m){super(),jn(this,m,Fn,Nn,bn,{})}}export{Pn as component};
