# AudioLDM 2

قُدِّم AudioLDM 2 في [AudioLDM 2: Learning Holistic Audio Generation with Self-supervised Pretraining](https://huggingface.co/papers/2308.05734) بواسطة Haohe Liu وآخرون. يستقبل AudioLDM 2 نصًا كمدخل ويتنبأ بالصوت المقابل. يمكنه توليد مؤثرات صوتية بشرط نصي، وكلام بشري، وموسيقى.

Inspired by [Stable Diffusion](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/overview), AudioLDM 2 is a text-to-audio _latent diffusion model (LDM)_ that learns continuous audio representations from text embeddings. Two text encoder models are used to compute the text embeddings from a prompt input: the text-branch of [CLAP](https://huggingface.co/docs/transformers/main/en/model_doc/clap) and the encoder of [Flan-T5](https://huggingface.co/docs/transformers/main/en/model_doc/flan-t5). These text embeddings are then projected to a shared embedding space by an [AudioLDM2ProjectionModel](https://huggingface.co/docs/diffusers/main/api/pipelines/audioldm2#diffusers.AudioLDM2ProjectionModel). A [GPT2](https://huggingface.co/docs/transformers/main/en/model_doc/gpt2) _language model (LM)_ is used to auto-regressively predict eight new embedding vectors, conditional on the projected CLAP and Flan-T5 embeddings. The generated embedding vectors and Flan-T5 text embeddings are used as cross-attention conditioning in the LDM. The [UNet](https://huggingface.co/docs/diffusers/main/en/api/pipelines/audioldm2#diffusers.AudioLDM2UNet2DConditionModel) of AudioLDM 2 is unique in the sense that it takes **two** cross-attention embeddings, as opposed to one cross-attention conditioning, as in most other LDMs.

ملخص الورقة البحثية هو كالتالي:

*على الرغم من أن توليد الصوت يتشارك أوجه تشابه عبر أنواع مختلفة من الصوت، مثل الكلام والموسيقى والمؤثرات الصوتية، فإن تصميم نماذج لكل نوع يتطلب مراعاة دقيقة للأهداف والتحيزات المحددة التي قد تختلف بشكل كبير عن تلك الخاصة بالأنواع الأخرى. ولإقناعنا بمنظور موحّد لتوليد الصوت، تقترح هذه الورقة إطار عمل يستخدم نفس طريقة التعلم لتوليد الكلام والموسيقى والمؤثرات الصوتية. يُقدّم إطار عملنا تمثيلاً عاماً للصوت يُسمى "لغة الصوت" (LOA). يمكن ترجمة أي صوت إلى LOA بناءً على AudioMAE، وهو نموذج تعلّم تمثيلات مُسبق التدريب ذاتي الإشراف. في عملية التوليد، نترجم أي أنماط إلى LOA باستخدام نموذج GPT-2، ونقوم بتعلم توليد الصوت ذاتي الإشراف باستخدام نموذج انتشار كامن مشروط على LOA. يجلب الإطار المقترح مزايا طبيعية مثل قدرات التعلم ضمن السياق، والنماذج المُسبقة التدريب ذاتية الإشراف القابلة لإعادة الاستخدام من AudioMAE ونماذج الانتشار الكامن. تُظهر التجارب على المعايير الرئيسية لتحويل النص إلى صوت، والنص إلى موسيقى، والنص إلى كلام أداءً متقدماً أو تنافسياً مقارنةً بالأساليب السابقة. كودنا، ونموذجنا المُسبق التدريب، وعرضنا التجريبي متاحة في [هذا الرابط](https://audioldm.github.io/audioldm2).*

تمت مساهمة خط المعالجة هذا من قِبل [sanchit-gandhi](https://huggingface.co/sanchit-gandhi) و [Nguyễn Công Tú Anh](https://github.com/tuanh123789). يمكن العثور على قاعدة الكود الأصلية في [haoheliu/audioldm2](https://github.com/haoheliu/audioldm2).

## نصائح

### اختيار نقطة تفتيش

يتوفر AudioLDM2 بثلاثة متغيرات. يمكن تطبيق نقطتي تفتيش من هذه النقاط على المهمة العامة لتوليد الصوت من النص. أما نقطة التفتيش الثالثة فقد تم تدريبها حصريًا على توليد الموسيقى من النص.

تشارك جميع نقاط التفتيش (checkpoints) نفس حجم النموذج لمشفرات النص ووحدة VAE. وتختلف في حجم وعمق UNet. راجع الجدول أدناه للتفاصيل حول نقاط التفتيش الثلاث:

| نقطة التفتيش                                                      | المهمة          | حجم نموذج UNet | الحجم الكلي للنموذج | بيانات التدريب / ساعة |
|-----------------------------------------------------------------|---------------|-----------------|------------------|-------------------|
| [audioldm2](https://huggingface.co/cvssp/audioldm2)             | النص إلى الصوت | 350M            | 1.1B             | 1150k             |
| [audioldm2-large](https://huggingface.co/cvssp/audioldm2-large) | النص إلى الصوت | 750M            | 1.5B             | 1150k             |
| [audioldm2-music](https://huggingface.co/cvssp/audioldm2-music) | النص إلى الموسيقى | 350M            | 1.1B             | 665k              |
| [audioldm2-gigaspeech](https://huggingface.co/anhnct/audioldm2_gigaspeech) | النص إلى كلام | 350M            | 1.1B             |10k              |
| [audioldm2-ljspeech](https://huggingface.co/anhnct/audioldm2_ljspeech) | النص إلى كلام | 350M            | 1.1B             |              |

### بناء الاستعلام

* تعمل مدخلات الأوامر الوصفية بشكل أفضل: استخدم الصفات لوصف الصوت (مثل "جودة عالية" أو "واضح") واجعل سياق الأمر محددًا (مثل "جريان الماء في الغابة" بدلاً من "جريان الماء").
* من الأفضل استخدام مصطلحات عامة مثل "cat" أو "dog" بدلاً من أسماء محددة أو كائنات مجردة قد لا يكون النموذج على دراية بها.
* يمكن أن يحسّن استخدام **موجّه سلبي** بشكل كبير من جودة الموجة الصوتية المولّدة، من خلال توجيه عملية التوليد بعيدًا عن المصطلحات التي تتوافق مع الصوت منخفض الجودة. جرّب استخدام موجّه سلبي هو "Low quality."

### التحكم في الاستدلال

* يمكن التحكم في _الجودة_ لعينة الصوت المتوقعة عبر الحجة `num_inference_steps`؛ فزيادة عدد الخطوات تمنح صوتاً بجودة أعلى على حساب بطء الاستدلال.
* يمكن التحكم في _الطول_ لعينة الصوت المتوقعة عن طريق تغيير الحجة `audio_length_in_s`.

### تقييم الموجات المولّدة:

* يمكن أن يختلف مستوى جودة الموجات الصوتية المولّدة بشكل كبير اعتمادًا على البذرة (seed). جرّب التوليد ببذور مختلفة حتى تجد نتيجة توليد مرضية.
* يمكن توليد عدة موجات صوتية دفعة واحدة: اضبط `num_waveforms_per_prompt` على قيمة أكبر من 1. سيتم إجراء تقييم تلقائي بين الموجات الصوتية المولّدة ونص الأمر، ثم ترتيب المقاطع الصوتية من الأفضل إلى الأسوأ بناءً على ذلك.

يُظهر المثال التالي كيفية بناء موسيقى وكلام جيدين باستخدام النصائح المذكورة أعلاه: [مثال](https://huggingface.co/docs/diffusers/main/en/api/pipelines/audioldm2#diffusers.AudioLDM2Pipeline.__call__.example).

> [!TIP]
> تأكد من الاطلاع على [دليل المجدولين](../../using-diffusers/schedulers) لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم [إعادة استخدام المكونات عبر خطوط الأنابيب](../../using-diffusers/loading#reusing-models-in-multiple-pipelines) لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة.

## AudioLDM2Pipeline[[diffusers.AudioLDM2Pipeline]]

#### diffusers.AudioLDM2Pipeline[[diffusers.AudioLDM2Pipeline]]

```python
diffusers.AudioLDM2Pipeline(vae: AutoencoderKL, text_encoder: ClapModel, text_encoder_2: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.vits.modeling_vits.VitsModel, projection_model: AudioLDM2ProjectionModel, language_model: GPT2LMHeadModel, tokenizer: RobertaTokenizer, tokenizer_2: transformers.models.t5.tokenization_t5.T5Tokenizer | transformers.models.vits.tokenization_vits.VitsTokenizer, feature_extractor: ClapFeatureExtractor, unet: AudioLDM2UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, vocoder: SpeechT5HifiGan)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/audioldm2/pipeline_audioldm2.py#L150)

**المعاملات:**

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/ar/api/models/autoencoderkl#diffusers.AutoencoderKL)) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.

text_encoder ([ClapModel](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clap#transformers.ClapModel)) : مُشفِّر النص المجمّد الأول. يستخدم AudioLDM2 نموذج التضمين المشترك للصوت والنص [CLAP](https://huggingface.co/docs/transformers/model_doc/clap#transformers.CLAPTextModelWithProjection)، وتحديداً النسخة [laion/clap-htsat-unfused](https://huggingface.co/laion/clap-htsat-unfused). يُستخدم فرع النص لتشفير موجه النص إلى تضمين موجه. ويُستخدم نموذج الصوت والنص الكامل لترتيب الموجات الصوتية المولّدة مقابل موجه النص من خلال حساب درجات التشابه.

text_encoder_2 ([`~transformers.T5EncoderModel`, `~transformers.VitsModel`]) : مُشفِّر النص الثاني المُجمَّد. يستخدم AudioLDM2 مُشفِّر [T5](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5EncoderModel)، وتحديداً النسخة [google/flan-t5-large](https://huggingface.co/google/flan-t5-large). يُستخدم مُشفِّر النص الثاني المُجمَّد لتوليد الكلام من النص. يستخدم AudioLDM2 مُشفِّر [Vits](https://huggingface.co/docs/transformers/model_doc/vits#transformers.VitsModel).

projection_model ([AudioLDM2ProjectionModel](/docs/diffusers/v0.43.0/ar/api/pipelines/audioldm2#diffusers.AudioLDM2ProjectionModel)) : نموذج مُدرَّب يُستخدم لإسقاط الحالات المخفية (hidden-states) خطيًا من نموذجَي مُشفِّر النص الأول والثاني، وإدراج تمثيلات رموز SOS وEOS المُتعلَّمة. يتم دمج الحالات المخفية المُسقطة من مُشفِّري النص الاثنين لتكوين مدخل نموذج اللغة. تمثيل موضع مُتعلَّم للحالات المخفية الخاصة بـ Vits

language_model ([GPT2Model](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/gpt2#transformers.GPT2Model)) : نموذج لغوي ذاتي التوليد يُستخدم لتوليد تسلسل من حالات المخفية (hidden-states) مشروطًا بالمخرجات المُساقطة من مشفري النص.

tokenizer ([RobertaTokenizer](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/led#transformers.RobertaTokenizer)) : مُجزِّئ (Tokenizer) لتجزئة النص الخاص بمُشفِّر النص الأول المُجمَّد.

tokenizer_2 ([`~transformers.T5Tokenizer`, `~transformers.VitsTokenizer`]) : مُجزِّئ (Tokenizer) لتجزئة النص الخاص بمُشفِّر النص الثاني المُجمَّد.

feature_extractor ([ClapFeatureExtractor](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clap#transformers.ClapFeatureExtractor)) : مستخرج ميزات لمعالجة الموجات الصوتية المولّدة مسبقًا وتحويلها إلى طيف لوجاريتمي-ميلي (log-mel spectrogram) من أجل التقييم التلقائي.

unet ([UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : نموذج `UNet2DConditionModel` لإزالة الضوضاء من الكامنات الصوتية المُرمّزة.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/ar/api/schedulers/overview#diffusers.SchedulerMixin)) : مُجدول يُستخدم بالاقتران مع `unet` لإزالة الضوضاء من الكامنات الصوتية المُرمّزة. يمكن أن يكون أحد [DDIMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/ddim#diffusers.DDIMScheduler) أو [LMSDiscreteScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler) أو [PNDMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/pndm#diffusers.PNDMScheduler).

vocoder ([SpeechT5HifiGan](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/speecht5#transformers.SpeechT5HifiGan)) : مُولّد صوت من فئة `SpeechT5HifiGan` لتحويل مُخرجات طيف الميّل إلى موجة الصوت النهائية.

خط أنابيب لتوليد الصوت من النص باستخدام AudioLDM2.

يرث هذا النموذج من [DiffusionPipeline](/docs/diffusers/v0.43.0/ar/api/pipelines/overview#diffusers.DiffusionPipeline). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).

#### __call__[[diffusers.AudioLDM2Pipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, transcription: str | list[str] = None, audio_length_in_s: float | None = None, num_inference_steps: int = 200, guidance_scale: float = 3.5, negative_prompt: str | list[str] | None = None, num_waveforms_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, generated_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_generated_prompt_embeds: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.LongTensor] = None, negative_attention_mask: typing.Optional[torch.LongTensor] = None, max_new_tokens: int | None = None, return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int | None = 1, cross_attention_kwargs: dict[str, typing.Any] | None = None, output_type: str | None = 'np')
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/audioldm2/pipeline_audioldm2.py#L844)

**المعاملات:**

prompt (`str` أو `list[str]`، *اختياري*) : الأمر أو الأوامر الموجِّهة لتوليد الصوت. إذا لم يُعرَّف، يجب عليك تمرير `prompt_embeds`.

transcription (`str` أو `list[str]`، *اختياري*) -- نصّ النصّ إلى كلام.

audio_length_in_s (`int`، *اختياري*، القيمة الافتراضية 10.24) : طول عينة الصوت المولّدة بالثواني.

num_inference_steps (`int`، *اختياري*، القيمة الافتراضية 200) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى جودة صوتية أعلى على حساب بطء الاستدلال.

guidance_scale (`float`، *اختياري*، القيمة الافتراضية 3.5) : تشجع قيمة أعلى لمقياس التوجيه النموذج على توليد صوت مرتبط ارتباطًا وثيقًا بنص `prompt` على حساب انخفاض جودة الصوت. يتم تفعيل مقياس التوجيه عندما يكون `guidance_scale > 1`.

negative_prompt (`str` أو `list[str]`، *اختياري*) : الأمر أو الأوامر التي توجّه ما يجب عدم تضمينه في توليد الصوت. إذا لم يُعرَّف، يجب عليك تمرير `negative_prompt_embeds` بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (`guidance_scale < 1`).

num_waveforms_per_prompt (`int`، *اختياري*، القيمة الافتراضية 1) : عدد الموجات الصوتية التي سيتم توليدها لكل موجه. إذا كان `num_waveforms_per_prompt > 1`، يتم إجراء تقييم تلقائي بين المخرجات المولّدة والموجه النصي. يقوم هذا التقييم بترتيب الموجات الصوتية المولّدة بناءً على تشابه جيب التمام (cosine similarity) بينها وبين المدخل النصي في فضاء التضمين المشترك للنص والصوت.

eta (`float`، *اختياري*، القيمة الافتراضية 0.0) : يتوافق مع المعامل eta (η) من ورقة [DDIM](https://huggingface.co/papers/2010.02502). ينطبق فقط على [DDIMScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/ddim#diffusers.DDIMScheduler)، ويُتجاهل في جدولة أخرى.

generator (`torch.Generator` أو `list[torch.Generator]`، *اختياري*) : [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) لجعل التوليد حتميًا.

latents (`torch.Tensor`، *اختياري*) : كامنات ضجيج مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الطيف الصوتي. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كامنات من خلال الاستخراج باستخدام `generator` العشوائي المُقدَّم.

prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة (وزن الأوامر). إذا لم تُقدَّم، يتم توليد تمثيلات النص من معامل الإدخال `prompt`.

negative_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا. يمكن استخدامها لضبط مدخلات النص بسهولة (وزن الموجه). إذا لم تُقدَّم، يتم توليد `negative_prompt_embeds` من معامل الإدخال `negative_prompt`.

generated_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا من نموذج اللغة GPT2. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد التمثيلات النصية من معامل الإدخال `prompt`.

negative_generated_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا من نموذج اللغة GPT2. يمكن استخدامها لضبط مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم حساب negative_prompt_embeds من معامل الإدخال `negative_prompt`.

attention_mask (`torch.LongTensor`، *اختياري*) : قناع الانتباه المُحسب مسبقًا الذي سيُطبَّق على `prompt_embeds`. إذا لم يُوفَّر، فسيتم حساب قناع الانتباه من معامل الإدخال `prompt`.

negative_attention_mask (`torch.LongTensor`، *اختياري*) : قناع الانتباه المُحسب مسبقًا الذي سيُطبَّق على `negative_prompt_embeds`. إذا لم يُوفَّر، فسيتم حساب قناع الانتباه من معامل الإدخال `negative_prompt`.

max_new_tokens (`int`، *اختياري*، القيمة الافتراضية هي None) : عدد الرموز الجديدة التي سيتم توليدها باستخدام نموذج اللغة GPT2. إذا لم يتم تقديمه، فسيتم أخذ عدد الرموز من إعدادات النموذج.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [StableDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ar/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput) بدلاً من tuple عادي.

callback (`Callable`، *اختياري*) : دالة تُستدعى كل `callback_steps` خطوات أثناء الاستدلال. تُستدعى الدالة بالحجج التالية: `callback(step: int, timestep: int, latents: torch.Tensor)`.

callback_steps (`int`، *اختياري*، القيمة الافتراضية 1) : التكرار الذي تُستدعى فيه دالة `callback`. إذا لم يُحدد، تُستدعى الدالة في كل خطوة.

cross_attention_kwargs (`dict`، *اختياري*) : قاموس kwargs يُمرَّر إلى `AttentionProcessor` إذا تم تحديده، كما هو معرّف في [`self.processor`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

output_type (`str`، *اختياري*، القيمة الافتراضية `"np"`) : صيغة مخرجات الصوت المولّد. اختر بين `"np"` لإرجاع مصفوفة NumPy `np.ndarray` أو `"pt"` لإرجاع كائن PyTorch `torch.Tensor`. اضبطه على `"latent"` لإرجاع مخرجات نموذج الانتشار الكامن (LDM).

**يعيد:** [StableDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ar/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput) أو `tuple`

إذا كان `return_dict` هو `True`، يُعاد [StableDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ar/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput)، وإلا يُعاد `tuple` حيث يكون العنصر الأول قائمة تحتوي على الصوت المولّد.

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

أمثلة:
```py
>>> import scipy
>>> import torch
>>> from diffusers import AudioLDM2Pipeline

>>> repo_id = "cvssp/audioldm2"
>>> pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")

>>> # define the prompts
>>> prompt = "The sound of a hammer hitting a wooden surface."
>>> negative_prompt = "Low quality."

>>> # set the seed for generator
>>> generator = torch.Generator("cuda").manual_seed(0)

>>> # run the generation
>>> audio = pipe(
...     prompt,
...     negative_prompt=negative_prompt,
...     num_inference_steps=200,
...     audio_length_in_s=10.0,
...     num_waveforms_per_prompt=3,
...     generator=generator,
... ).audios

>>> # save the best audio sample (index 0) as a .wav file
>>> scipy.io.wavfile.write("techno.wav", rate=16000, data=audio[0])
```

```
#Using AudioLDM2 for Text To Speech
>>> import scipy
>>> import torch
>>> from diffusers import AudioLDM2Pipeline

>>> repo_id = "anhnct/audioldm2_gigaspeech"
>>> pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")

>>> # define the prompts
>>> prompt = "A female reporter is speaking"
>>> transcript = "wish you have a good day"

>>> # set the seed for generator
>>> generator = torch.Generator("cuda").manual_seed(0)

>>> # run the generation
>>> audio = pipe(
...     prompt,
...     transcription=transcript,
...     num_inference_steps=200,
...     audio_length_in_s=10.0,
...     num_waveforms_per_prompt=2,
...     generator=generator,
...     max_new_tokens=512,          #Must set max_new_tokens equa to 512 for TTS
... ).audios

>>> # save the best audio sample (index 0) as a .wav file
>>> scipy.io.wavfile.write("tts.wav", rate=16000, data=audio[0])
```

#### enable_model_cpu_offload[[diffusers.AudioLDM2Pipeline.enable_model_cpu_offload]]

```python
enable_model_cpu_offload(gpu_id: int | None = None, device: typing.Union[torch.device, str] = 'cuda')
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/audioldm2/pipeline_audioldm2.py#L226)

ينقل جميع النماذج إلى وحدة المعالجة المركزية (CPU) باستخدام accelerate، مما يقلل من استهلاك الذاكرة مع تأثير ضئيل على الأداء. مقارنةً بـ `enable_sequential_cpu_offload`، تنقل هذه الطريقة نموذجًا كاملًا واحدًا في كل مرة إلى وحدة معالجة الرسوميات (GPU) عند استدعاء طريقة `forward` الخاصة به، ويبقى النموذج في وحدة معالجة الرسوميات حتى تشغيل النموذج التالي. تكون وفورات الذاكرة أقل مما هي عليه مع `enable_sequential_cpu_offload`، لكن الأداء يكون أفضل بكثير بسبب التنفيذ التكراري لـ `unet`.

#### encode_prompt[[diffusers.AudioLDM2Pipeline.encode_prompt]]

```python
encode_prompt(prompt, device, num_waveforms_per_prompt, do_classifier_free_guidance, transcription = None, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, generated_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_generated_prompt_embeds: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.LongTensor] = None, negative_attention_mask: typing.Optional[torch.LongTensor] = None, max_new_tokens: int | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/audioldm2/pipeline_audioldm2.py#L331)

**المعاملات:**

prompt (`str` أو `list[str]`، *اختياري*) : النص الذي سيتم ترميزه

transcription (`str` أو `list[str]`) : نصّ يُحوَّل إلى كلام

device (`torch.device`) : جهاز torch

num_waveforms_per_prompt (`int`) : عدد الموجات الصوتية التي يجب توليدها لكل موجه

do_classifier_free_guidance (`bool`) : ما إذا كان سيتم استخدام التوجيه الحر للتصنيف أم لا

negative_prompt (`str` أو `list[str]`، *اختياري*) : الأمر أو الأوامر التي لا ينبغي أن توجه توليد الصوت. إذا لم يُعرَّف، يجب تمرير `negative_prompt_embeds` بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يُتجاهل إذا كان `guidance_scale` أقل من `1`).

prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية محسوبة مسبقًا من نموذج Flan T5. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم حساب التمثيلات النصية من معامل الإدخال `prompt`.

negative_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية سالبة محسوبة مسبقًا من نموذج Flan T5. يمكن استخدامها لضبط مدخلات النص بسهولة، *مثلًا* وزن الموجه. إذا لم تُقدَّم، فسيتم حساب negative_prompt_embeds من معامل الإدخال `negative_prompt`.

generated_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا من نموذج اللغة GPT2. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد التمثيلات النصية من معامل الإدخال `prompt`.

negative_generated_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا من نموذج اللغة GPT2. يمكن استخدامها لضبط مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم حساب negative_prompt_embeds من معامل الإدخال `negative_prompt`.

attention_mask (`torch.LongTensor`، *اختياري*) : قناع الانتباه المُحسب مسبقًا الذي سيُطبَّق على `prompt_embeds`. إذا لم يُوفَّر، فسيتم حساب قناع الانتباه من معامل الإدخال `prompt`.

negative_attention_mask (`torch.LongTensor`، *اختياري*) : قناع الانتباه المُحسب مسبقًا الذي سيُطبَّق على `negative_prompt_embeds`. إذا لم يُوفَّر، فسيتم حساب قناع الانتباه من معامل الإدخال `negative_prompt`.

max_new_tokens (`int`، *اختياري*، القيمة الافتراضية هي None) : عدد الرموز الجديدة التي سيتم توليدها باستخدام نموذج اللغة GPT2.

**يعيد:** prompt_embeds (`torch.Tensor`)

تضمينات نصية من نموذج Flan T5. attention_mask (`torch.LongTensor`): قناع الانتباه الذي سيُطبَّق على `prompt_embeds`. generated_prompt_embeds (`torch.Tensor`): تضمينات نصية مُولَّدة من نموذج اللغة GPT2.

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

مثال:

```python
>>> import scipy
>>> import torch
>>> from diffusers import AudioLDM2Pipeline

>>> repo_id = "cvssp/audioldm2"
>>> pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")

>>> # Get text embedding vectors
>>> prompt_embeds, attention_mask, generated_prompt_embeds = pipe.encode_prompt(
...     prompt="Techno music with a strong, upbeat tempo and high melodic riffs",
...     device="cuda",
...     do_classifier_free_guidance=True,
... )

>>> # Pass text embeddings to pipeline for text-conditional audio generation
>>> audio = pipe(
...     prompt_embeds=prompt_embeds,
...     attention_mask=attention_mask,
...     generated_prompt_embeds=generated_prompt_embeds,
...     num_inference_steps=200,
...     audio_length_in_s=10.0,
... ).audios[0]

>>> # save generated audio sample
>>> scipy.io.wavfile.write("techno.wav", rate=16000, data=audio)
```

#### generate_language_model[[diffusers.AudioLDM2Pipeline.generate_language_model]]

```python
generate_language_model(inputs_embeds: Tensor = None, max_new_tokens: int = 8, **model_kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/audioldm2/pipeline_audioldm2.py#L278)

**المعاملات:**

inputs_embeds (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`) : التسلسل المستخدم كموجّه (prompt) للتوليد.

max_new_tokens (`int`) : عدد الرموز الجديدة التي سيتم توليدها.

model_kwargs (`dict[str, Any]`، *اختياري*) : تخصيص مؤقت لمعاملات إضافية خاصة بالنموذج سيتم تمريرها إلى دالة `forward` في النموذج.

**يعيد:** `inputs_embeds (`torch.Tensor` of shape `(batch_size, sequence_length, hidden_size)`)

تسلسل حالات الخفاء المولّدة.

يولّد تسلسلاً من حالات الخفاء من نموذج اللغة، مشروطاً بمدخلات التضمين.

## AudioLDM2ProjectionModel[[diffusers.AudioLDM2ProjectionModel]]

#### diffusers.AudioLDM2ProjectionModel[[diffusers.AudioLDM2ProjectionModel]]

```python
diffusers.AudioLDM2ProjectionModel(text_encoder_dim, text_encoder_1_dim, langauge_model_dim, use_learned_position_embedding = None, max_seq_length = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/condition_embedders/condition_embedder_audioldm2.py#L60)

**المعاملات:**

text_encoder_dim (`int`) : بُعد تمثيلات النص من مُشفِّر النص الأول (CLAP).

text_encoder_1_dim (`int`) : بُعد التضمينات النصية من مُشفِّر النص الثاني (T5 أو VITS).

langauge_model_dim (`int`) : بُعد التضمينات النصية من نموذج اللغة (GPT2).

نموذج إسقاط خطي بسيط لربط تضمينين نصيين بمساحة كامنة مشتركة. كما يقوم بإدراج متجهات تضمين متعلمة في بداية ونهاية كل تسلسل تضمين نصي على التوالي. يشير كل متغير مُضاف إليه `_1` إلى المتغير المقابل في مُرمِّز النص الثاني. وإلا فهو من المُرمِّز الأول.

#### forward[[diffusers.AudioLDM2ProjectionModel.forward]]

```python
forward(hidden_states: typing.Optional[torch.Tensor] = None, hidden_states_1: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.LongTensor] = None, attention_mask_1: typing.Optional[torch.LongTensor] = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/condition_embedders/condition_embedder_audioldm2.py#L104)

**المعاملات:**

hidden_states (`torch.Tensor` من الشكل `(batch_size, sequence_length, text_encoder_dim)`، *اختياري*) : تمثيلات النص من مُشفِّر النص الأول (CLAP).

hidden_states_1 (`torch.Tensor` من الشكل `(batch_size, sequence_length_1, text_encoder_1_dim)`، *اختياري*) : تمثيلات النص من مُشفِّر النص الثاني (T5 أو VITS).

attention_mask (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع الانتباه لـ `hidden_states`.

attention_mask_1 (`torch.LongTensor` من الشكل `(batch_size, sequence_length_1)`، *اختياري*) : قناع الانتباه لـ `hidden_states_1`.

**يعيد:** `AudioLDM2ProjectionModelOutput`

تضمينات النص المُتوقَّعة لكلا مشفّري النص، مُلحقةً على طول بُعد التسلسل، وقناع الانتباه المُجمَّع لهما.

## AudioLDM2UNet2DConditionModel[[diffusers.AudioLDM2UNet2DConditionModel]]

#### diffusers.AudioLDM2UNet2DConditionModel[[diffusers.AudioLDM2UNet2DConditionModel]]

```python
diffusers.AudioLDM2UNet2DConditionModel(sample_size: int | None = None, in_channels: int = 4, out_channels: int = 4, flip_sin_to_cos: bool = True, freq_shift: int = 0, down_block_types: tuple[str] = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D'), mid_block_type: str = 'UNetMidBlock2DCrossAttn', up_block_types: tuple[str] = ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D'), only_cross_attention: bool | tuple[bool] = False, block_out_channels: tuple[int] = (320, 640, 1280, 1280), layers_per_block: int | tuple[int] = 2, downsample_padding: int = 1, mid_block_scale_factor: float = 1, act_fn: str = 'silu', norm_num_groups: int | None = 32, norm_eps: float = 1e-05, cross_attention_dim: int | tuple[int] = 1280, transformer_layers_per_block: int | tuple[int] = 1, attention_head_dim: int | tuple[int] = 8, num_attention_heads: int | tuple[int] | None = None, use_linear_projection: bool = False, class_embed_type: str | None = None, num_class_embeds: int | None = None, upcast_attention: bool = False, resnet_time_scale_shift: str = 'default', time_embedding_type: str = 'positional', time_embedding_dim: int | None = None, time_embedding_act_fn: str | None = None, timestep_post_act: str | None = None, time_cond_proj_dim: int | None = None, conv_in_kernel: int = 3, conv_out_kernel: int = 3, projection_class_embeddings_input_dim: int | None = None, class_embeddings_concat: bool = False)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/audioldm2/modeling_audioldm2.py#L45)

**المعاملات:**

sample_size (`int` أو `tuple[int, int]`، *اختياري*، القيمة الافتراضية `None`) : ارتفاع وعينة الإدخال/الإخراج.

in_channels (`int`، *اختياري*، القيمة الافتراضية 4) : عدد القنوات في العينة المدخلة.

out_channels (`int`، *اختياري*، القيمة الافتراضية 4) : عدد القنوات في المخرجات.

flip_sin_to_cos (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان يجب عكس sin إلى cos في تضمين الوقت.

freq_shift (`int`، *اختياري*، القيمة الافتراضية 0) : إزاحة التردد التي تُطبَّق على تضمين الوقت.

down_block_types (`tuple[str]`، *اختياري*، القيمة الافتراضية `("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")`) : مجموعة (tuple) من كتل التقليل (downsample blocks) التي سيتم استخدامها.

mid_block_type (`str`، *اختياري*، القيمة الافتراضية `"UNetMidBlock2DCrossAttn"`) : نوع الكتلة في منتصف UNet، حيث يمكن أن يكون `UNetMidBlock2DCrossAttn` فقط في AudioLDM2.

up_block_types (`tuple[str]`، *اختياري*، القيمة الافتراضية `("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")`) : مجموعة (tuple) من كتل التوسيع (upsample blocks) التي سيتم استخدامها.

only_cross_attention (`bool` أو `tuple[bool]`، *اختياري*، الافتراضي `False`) : ما إذا كان يجب تضمين الانتباه الذاتي في كتل التحوّل الأساسية، راجع `BasicTransformerBlock`.

block_out_channels (`tuple[int]`، *اختياري*، القيمة الافتراضية هي `(320, 640, 1280, 1280)`) : مجموعة من القيم تمثل عدد قنوات الإخراج لكل كتلة.

layers_per_block (`int`، *اختياري*، القيمة الافتراضية 2) : عدد الطبقات في كل كتلة.

downsample_padding (`int`، *اختياري*، القيمة الافتراضية 1) : الحشو المستخدم لفولتير التجميع (downsampling convolution).

mid_block_scale_factor (`float`، *اختياري*، القيمة الافتراضية 1.0) : معامل المقياس المستخدم للكتلة الوسطى.

act_fn (`str`، *اختياري*، القيمة الافتراضية `"silu"`) : دالة التنشيط المستخدمة.

norm_num_groups (`int`، *اختياري*، القيمة الافتراضية 32) : عدد المجموعات المستخدمة للتطبيع. إذا كانت `None`، يتم تجاوز طبقات التطبيع والتفعيل في المعالجة اللاحقة.

norm_eps (`float`، *اختياري*، القيمة الافتراضية 1e-5) : قيمة الإيبسلون المستخدمة في عملية التطبيع.

cross_attention_dim (`int` أو `tuple[int]`، *اختياري*، القيمة الافتراضية 1280) : بُعد ميزات الانتباه المتقاطع.

transformer_layers_per_block (`int` أو `tuple[int]`، *اختياري*، القيمة الافتراضية 1) : عدد كتل التحويل من النوع `BasicTransformerBlock`. لا ينطبق إلا على `~models.unet_2d_blocks.CrossAttnDownBlock2D`، `~models.unet_2d_blocks.CrossAttnUpBlock2D`، `~models.unet_2d_blocks.UNetMidBlock2DCrossAttn`.

attention_head_dim (`int`، *اختياري*، القيمة الافتراضية 8) : بُعد رؤوس الانتباه.

num_attention_heads (`int`، *اختياري*) : عدد رؤوس الانتباه. إذا لم يُعرَّف، يكون الافتراضي `attention_head_dim`

resnet_time_scale_shift (`str`، *اختياري*، القيمة الافتراضية `"default"`) : إعدادات إزاحة مقياس الوقت لكتل ResNet (انظر `ResnetBlock2D`). اختر من بين `default` أو `scale_shift`.

class_embed_type (`str`، *اختياري*، القيمة الافتراضية `None`) : نوع تضمين الفئة المستخدم، والذي يُجمع في النهاية مع تضمينات الوقت. اختر من بين `None`، `"timestep"`، `"identity"`، `"projection"`، أو `"simple_projection"`.

num_class_embeds (`int`، *اختياري*، القيمة الافتراضية `None`) : بُعد المدخلات لمصفوفة التضمين القابلة للتعلم التي سيتم إسقاطها إلى `time_embed_dim`، عند تنفيذ التكييف حسب الفئة مع أن `class_embed_type` يساوي `None`.

time_embedding_type (`str`، *اختياري*، الافتراضي `positional`) : نوع تضمين الموضع المستخدم لخطوات الزمن. اختر من بين `positional` أو `fourier`.

time_embedding_dim (`int`، *اختياري*، القيمة الافتراضية `None`) : تجاوز اختياري لأبعاد تضمين الوقت المُسقَط.

time_embedding_act_fn (`str`، *اختياري*، القيمة الافتراضية `None`) : دالة تفعيل اختيارية تُستخدم مرة واحدة فقط على تضمينات الوقت قبل تمريرها إلى بقية UNet. اختر من بين `silu`، `mish`، `gelu`، و`swish`.

timestep_post_act (`str`، *اختياري*، القيمة الافتراضية `None`) : دالة التنشيط الثانية المستخدمة في تضمين خطوة الزمن. اختر من بين `silu` و`mish` و`gelu`.

time_cond_proj_dim (`int`، *اختياري*، القيمة الافتراضية `None`) : بُعد طبقة `cond_proj` في تضمين خطوة الزمن.

conv_in_kernel (`int`، *اختياري*، الافتراضي `3`) : حجم النواة لطبقة `conv_in`.

conv_out_kernel (`int`، *اختياري*، الافتراضي `3`) : حجم النواة لطبقة `conv_out`.

projection_class_embeddings_input_dim (`int`, *اختياري*) : بُعد مدخل `class_labels` عندما يكون `class_embed_type="projection"`. مطلوب عندما يكون `class_embed_type="projection"`.

class_embeddings_concat (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان يجب دمج تضمينات الوقت مع تضمينات الفئة.

نموذج UNet ثنائي الأبعاد مشروط يستقبل عينة ضجيجية، وحالة شرطية، وخطوة زمنية، ويعيد إخراجًا على شكل العينة. مقارنةً بنموذج [UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel) الأساسي، يتضمن هذا المتغير اختياريًا طبقة انتباه ذاتي إضافية في كل كتلة Transformer، بالإضافة إلى طبقات انتباه متقاطعة متعددة. كما يسمح حتى بطبقتي تضمين انتباه متقاطع، وهما `encoder_hidden_states` و`encoder_hidden_states_1`.

يرث هذا النموذج من [ModelMixin](/docs/diffusers/v0.43.0/ar/api/models/overview#diffusers.ModelMixin). راجع توثيق الفئة الأصلية لمعرفة طرقه العامة المُنفَّذة لجميع النماذج (مثل التنزيل أو الحفظ).

#### forward[[diffusers.AudioLDM2UNet2DConditionModel.forward]]

```python
forward(sample: Tensor, timestep: typing.Union[torch.Tensor, float, int], encoder_hidden_states: Tensor, class_labels: typing.Optional[torch.Tensor] = None, timestep_cond: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, cross_attention_kwargs: dict[str, typing.Any] | None = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, return_dict: bool = True, encoder_hidden_states_1: typing.Optional[torch.Tensor] = None, encoder_attention_mask_1: typing.Optional[torch.Tensor] = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/audioldm2/modeling_audioldm2.py#L494)

**المعاملات:**

sample (`torch.Tensor`) : المصفوفة المدخلة الضوضائية ذات الشكل التالي `(batch, channel, height, width)`.

timestep (`torch.Tensor` أو `float` أو `int`) : عدد خطوات الزمن لإزالة الضوضاء من مدخل.

encoder_hidden_states (`torch.Tensor`) : حالات المُشفِّر المخفية (encoder hidden states) ذات الشكل `(batch, sequence_length, feature_dim)`.

encoder_attention_mask (`torch.Tensor`) : يُطبَّق قناع الانتباه المتقاطع (cross-attention mask) ذو الشكل `(batch, sequence_length)` على `encoder_hidden_states`. إذا كان `True` يُحفظ القناع، وإلا إذا كان `False` يُستبعد. يُحوَّل القناع إلى انحياز (bias) يضيف قيمًا سالبة كبيرة إلى درجات الانتباه المقابلة لرموز "الاستبعاد".

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [UNet2DConditionOutput](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput) بدلاً من tuple عادي.

cross_attention_kwargs (`dict`، *اختياري*) : قاموس kwargs يُمرَّر إلى `AttnProcessor` إذا تم تحديده.

encoder_hidden_states_1 (`torch.Tensor`، *اختياري*) : مجموعة ثانية من حالات المُشفِّر المخفية (encoder hidden states) ذات الشكل `(batch, sequence_length_2, feature_dim_2)`. يمكن استخدامها لتكييف النموذج على مجموعة مختلفة من التضمينات (embeddings) عن `encoder_hidden_states`.

encoder_attention_mask_1 (`torch.Tensor`, *اختياري*) : يُطبَّق قناع الانتباه المتقاطع (cross-attention mask) ذو الشكل `(batch, sequence_length_2)` على `encoder_hidden_states_1`. إذا كان `True` يُحافظ على القناع، وإلا إذا كان `False` يُستبعد. يُحوَّل القناع إلى انحياز (bias) يضيف قيمًا سالبة كبيرة إلى درجات الانتباه المقابلة لرموز "الاستبعاد".

**يعيد:** [UNet2DConditionOutput](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput) أو `tuple`

إذا كان `return_dict` صحيحًا، يُعاد [UNet2DConditionOutput](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput)، وإلا يُعاد `tuple` يكون عنصره الأول هو متجه العينة.

طريقة [AudioLDM2UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/pipelines/audioldm2#diffusers.AudioLDM2UNet2DConditionModel) الأمامية.

## AudioPipelineOutput[[diffusers.AudioPipelineOutput]]

#### diffusers.AudioPipelineOutput[[diffusers.AudioPipelineOutput]]

```python
diffusers.AudioPipelineOutput(audios: ndarray)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/pipeline_utils.py#L149)

**المعاملات:**

audios (`np.ndarray`) : قائمة بعينات الصوت بعد إزالة الضوضاء، على شكل مصفوفة NumPy بأبعاد `(batch_size, num_channels, sample_rate)`.

فئة الإخراج لخطوط أنابيب الصوت.

