# EnCodec

## نظرة عامة

قُدِّم نموذج الترميز العصبي EnCodec في [High Fidelity Neural Audio Compression](https://huggingface.co/papers/2210.13438) بواسطة Alexandre Défossez وJade Copet وGabriel Synnaeve وYossi Adi.

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

*نقدّم هنا مشفّرًا صوتيًا (Audio Codec) فائق الدقة يعمل في الوقت الفعلي، ويعتمد على الشبكات العصبية. يتكوّن هذا المشفّر من بنية مشفّرة-مفكّكة (Encoder-Decoder) تعمل على تدفّق البيانات، مع مساحة كامنة مُكمّاة (Quantized Latent Space) يتم تدريبها بطريقة شاملة من البداية إلى النهاية (End-to-End). نبسّط عملية التدريب ونسرّعها باستخدام مُنافس طيفي متعدد المقاييس (Multiscale Spectrogram Adversary) واحد، مما يقلّل من الشوائب بكفاءة ويولّد عينات عالية الجودة. نطرح آلية جديدة لموازنة الدالة الخاسرة (Loss Balancer) لتثبيت عملية التدريب؛ فوزن الدالة الخاسرة يحدد الآن نسبة التدرّج الكلي التي ينبغي أن تمثلها، مما يفصل اختيار هذا المعامل (Hyper-parameter) عن المقياس النموذجي للدالة الخاسرة. أخيرًا، ندرس كيف يمكن استخدام نماذج Transformer خفيفة الوزن لضغط التمثيل الناتج بنسبة تصل إلى 40%، مع الحفاظ على سرعة أعلى من سرعة الوقت الفعلي. نقدّم وصفًا تفصيليًا للخيارات التصميمية الرئيسية للنموذج المقترح، بما في ذلك: هدف التدريب، والتعديلات المعمارية، ودراسة لدوال الخسارة الإدراكية (Perceptual Loss Functions) المختلفة. نعرض تقييمًا ذاتيًا موسّعًا (اختبارات MUSHRA) إلى جانب دراسة استئصالية (Ablation Study) لمجموعة من نطاقات التردد ومجالات الصوت، بما في ذلك الكلام، والكلام في بيئات مليئة بالضجيج والصدى، والموسيقى. يتفوق نهجنا على الطرق المرجعية (Baselines) في جميع الإعدادات المُقيَّمة، مع الأخذ في الاعتبار الصوت أحادي القناة (Monophonic) بمعدل 24 كيلوهرتز والصوت ثنائي القناة (Stereophonic) بمعدل 48 كيلوهرتز.*

تمت مساهمة هذا النموذج من قِبل [Matthijs](https://huggingface.co/Matthijs) و[Patrick Von Platen](https://huggingface.co/patrickvonplaten) و[Arthur Zucker](https://huggingface.co/ArthurZ). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/encodec).

## مثال على الاستخدام

فيما يلي مثال سريع على كيفية ترميز وفك ترميز صوت باستخدام هذا النموذج:

```python
from datasets import Audio, load_dataset

from transformers import AutoProcessor, EncodecModel

librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")

model = EncodecModel.from_pretrained("facebook/encodec_24khz", device_map="auto")
processor = AutoProcessor.from_pretrained("facebook/encodec_24khz")
librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
audio_sample = librispeech_dummy[-1]["audio"]["array"]
inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt").to(model.device)

encoder_outputs = model.encode(inputs["input_values"], inputs["padding_mask"])
# `encoder_outputs.audio_codes` contains discrete codes
audio_values = model.decode(**encoder_outputs, padding_mask=inputs["padding_mask"])[0]
# or the equivalent with a forward pass
audio_values = model(inputs["input_values"], inputs["padding_mask"]).audio_values
```

## EncodecConfig[[transformers.EncodecConfig]]

#### transformers.EncodecConfig[[transformers.EncodecConfig]]

```python
transformers.EncodecConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, target_bandwidths: list[float] | tuple[float, ...] = (1.5, 3.0, 6.0, 12.0, 24.0), sampling_rate: int = 24000, audio_channels: int = 1, normalize: bool = False, chunk_length_s: int | float | None = None, overlap: float | None = None, hidden_size: int = 128, num_filters: int = 32, num_residual_layers: int = 1, upsampling_ratios: list[int] | tuple[int, ...] = (8, 5, 4, 2), norm_type: str = 'weight_norm', kernel_size: int = 7, last_kernel_size: int = 7, residual_kernel_size: int = 3, dilation_growth_rate: int = 2, use_causal_conv: bool = True, pad_mode: str = 'reflect', compress: int = 2, num_lstm_layers: int = 2, trim_right_ratio: float = 1.0, codebook_size: int = 1024, codebook_dim: int | None = None, use_conv_shortcut: bool = True)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/encodec/configuration_encodec.py#L27)

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

target_bandwidths (`list[float]`، *اختياري*، القيمة الافتراضية `[1.5, 3.0, 6.0, 12.0, 24.0]`) : نطاق الترددات المختلفة التي يمكن للنموذج ترميز الصوت بها.

sampling_rate (`int`، *اختياري*، القيمة الافتراضية `24000`) : معدل أخذ العينات الذي يجب أن تُرقَم به ملفات الصوت، ويُعبَّر عنه بالهرتز (Hz).

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

normalize (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان يجب تطبيع الصوت عند تمريره.

chunk_length_s (`float`، *اختياري*) : إذا تم تعريفه، تتم معالجة الصوت مسبقًا إلى مقاطع بطول `chunk_length_s` ثم يتم ترميزها.

overlap (`float`، *اختياري*) : يحدد التداخل بين كل مقطع. يُستخدم لحساب `chunk_stride` باستخدام المعادلة التالية: `int((1.0 - self.overlap) * self.chunk_length)`.

hidden_size (`int`، *اختياري*، القيمة الافتراضية `128`) : بُعد التمثيلات المخفية.

num_filters (`int`، *اختياري*، القيمة الافتراضية 32) : عدد نوى الالتفاف في طبقة `EncodecConv1d` الأولى لتقليل العينة.

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

upsampling_ratios (`Sequence[int]` ، *اختياري*، القيمة الافتراضية `[8, 5, 4, 2]`) : نسب حجم النواة والخطوة. يستخدم المُشفِّر نسب تقليل الحجم بدلاً من نسب زيادة الحجم، لذا سيستخدم النسب بالترتيب المعاكس لتلك المحددة هنا، والتي يجب أن تتطابق مع ترتيب المُفكِّك.

norm_type (`str`، *اختياري*، القيمة الافتراضية `"weight_norm"`) : طريقة التطبيع. يجب أن تكون ضمن `["weight_norm", "time_group_norm"]`

kernel_size (`int`، *اختياري*، القيمة الافتراضية 7) : حجم النواة للتمرير الأولي.

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

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

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

use_causal_conv (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان سيتم استخدام الالتفاف السببي الكامل.

pad_mode (`str`، *اختياري*، القيمة الافتراضية `"reflect"`) : وضع الحشو للعمليات التجميعية.

compress (`int`، *اختياري*، القيمة الافتراضية 2) : الأبعاد المختزلة في الفروع المتبقية (من Demucs v3).

num_lstm_layers (`int`، *اختياري*، القيمة الافتراضية 2) : عدد طبقات LSTM في نهاية المُشفِّر.

trim_right_ratio (`float`، *اختياري*، القيمة الافتراضية 1.0) : النسبة المستخدمة لقص الجزء الأيمن من الالتفاف المنقول (transposed convolution) عند تفعيل الإعداد `use_causal_conv = True`. إذا كانت تساوي 1.0، فهذا يعني أن كل عملية القص تتم على الجانب الأيمن.

codebook_size (`int`، *اختياري*، القيمة الافتراضية `1024`) : عدد كتيّبات الأكواد المتوازية التي يستخدمها النموذج.

codebook_dim (`int`، *اختياري*) : بُعد متجه تضمين كل كتاب رموز.

use_conv_shortcut (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان سيتم استخدام طبقة تلافيفية (convolutional layer) كاتصال "تخطي" (skip) في كتلة `EncodecResnetBlock`. إذا كانت القيمة False، فسيتم استخدام دالة الهوية (identity function)، مما يوفر اتصالًا متبقيًا (residual) عامًا.

هذه فئة الإعدادات المخزنة لإعدادات نموذج EncodecModel. تُستخدم لاستحداث نموذج Encodec وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [facebook/encodec_24khz](https://huggingface.co/facebook/encodec_24khz)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

مثال:

```python
>>> from transformers import EncodecModel, EncodecConfig

>>> # Initializing a "facebook/encodec_24khz" style configuration
>>> configuration = EncodecConfig()

>>> # Initializing a model (with random weights) from the "facebook/encodec_24khz" style configuration
>>> model = EncodecModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## EncodecFeatureExtractor[[transformers.EncodecFeatureExtractor]]

#### transformers.EncodecFeatureExtractor[[transformers.EncodecFeatureExtractor]]

```python
transformers.EncodecFeatureExtractor(feature_size: int = 1, sampling_rate: int = 24000, padding_value: float = 0.0, chunk_length_s: float | None = None, overlap: float | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/encodec/feature_extraction_encodec.py#L26)

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

feature_size (`int`، *اختياري*، القيمة الافتراضية 1) : بُعد الميزة للميزات المستخرجة. استخدم 1 للمono و2 للستيريو.

sampling_rate (`int`, *اختياري*, القيمة الافتراضية 24000) : معدل أخذ العينات الذي يجب من خلاله تحويل الموجة الصوتية إلى شكل رقمي، ويُعبَّر عنه بالهرتز (Hz).

padding_value (`float`، *اختياري*، القيمة الافتراضية 0.0) : القيمة المستخدمة لملء قيم الحشو.

chunk_length_s (`float`، *اختياري*) : إذا تم تعريفه، تتم معالجة الصوت مسبقًا إلى مقاطع بطول `chunk_length_s` ثم يتم ترميزها.

overlap (`float`، *اختياري*) : يحدد التداخل بين كل مقطع. يُستخدم لحساب `chunk_stride` باستخدام المعادلة التالية: `int((1.0 - self.overlap) * self.chunk_length)`.

ينشئ مستخرج ميزات EnCodec.

يرث مستخرج الميزات هذا من [SequenceFeatureExtractor](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.SequenceFeatureExtractor) الذي يحتوي على معظم الطرق الرئيسية. ينبغي للمستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.

إنشاء مستخرج ميزات باستخدام القيم الافتراضية سيؤدي إلى تكوين مشابه لتكوين بنية [facebook/encodec_24khz](https://huggingface.co/facebook/encodec_24khz).

#### __call__[[transformers.EncodecFeatureExtractor.__call__]]

```python
__call__(raw_audio: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]], padding: bool | str | transformers.utils.generic.PaddingStrategy | None = None, truncation: bool | None = False, max_length: int | None = None, return_tensors: str | transformers.utils.generic.TensorType | None = None, sampling_rate: int | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/encodec/feature_extraction_encodec.py#L81)

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

raw_audio (`np.ndarray`، `list[float]`، `list[np.ndarray]`، `list[list[float]]`) : التسلسل أو الدفعة من التسلسلات المراد معالجتها. يمكن أن يكون كل تسلسل مصفوفة numpy، أو قائمة من قيم float، أو قائمة من مصفوفات numpy، أو قائمة من قوائم قيم float. يجب أن تكون المصفوفة numpy من الشكل `(num_samples,)` للصوت أحادي القناة (`feature_size = 1`)، أو `(2, num_samples)` للصوت ثنائي القناة (`feature_size = 2`).

padding (`bool` أو `str` أو [PaddingStrategy](/docs/transformers/main/ar/internal/file_utils#transformers.utils.PaddingStrategy)، *اختياري*، القيمة الافتراضية `True`) : اختيار استراتيجية لحشو التسلسلات المُعادَة (وفقًا لجانب الحشو وفهرس الحشو الخاص بالنموذج) من بين الخيارات التالية: - `True` أو `'longest'`: الحشو حتى أطول تسلسل في الدفعة (أو عدم الحشو إذا تم تقديم تسلسل واحد فقط). - `'max_length'`: الحشو حتى الحد الأقصى للطول المحدد بالحجة `max_length` أو حتى الحد الأقصى المقبول لطول الإدخال للنموذج إذا لم يتم تقديم تلك الحجة. - `False` أو `'do_not_pad'` (الافتراضي): لا يوجد حشو (أي، يمكن إخراج دفعة تحتوي على تسلسلات بطول مختلف).

truncation (`bool`، *اختياري*، القيمة الافتراضية `False`) : يُفعّل القصّ لقطع تسلسلات الإدخال الأطول من `max_length` إلى `max_length`.

max_length (`int`، *اختياري*) : الحد الأقصى لطول القائمة المُعاد، وطول الحشو اختياريًا (انظر أعلاه).

return_tensors (`str` أو [TensorType](/docs/transformers/main/ar/internal/file_utils#transformers.TensorType)، *اختياري*) : إذا تم تعيينه، فسيُرجع تينسورات بدلاً من قائمة من الأعداد الصحيحة بلغة بايثون. القيم المقبولة هي: - `'pt'`: يُرجع كائنات `torch.Tensor` من PyTorch. - `'np'`: يُرجع كائنات `np.ndarray` من Numpy.

sampling_rate (`int`, *اختياري*) : معدل أخذ العينات الذي تم به أخذ عينات إدخال `audio`. يُوصى بشدة بتمرير `sampling_rate` عند استدعاء الأمامي لمنع الأخطاء الصامتة.

الطريقة الرئيسية لتحويل السلسلة أو السلاسل إلى ميزات وتجهيزها للنموذج.

## EncodecModel[[transformers.EncodecModel]]

#### transformers.EncodecModel[[transformers.EncodecModel]]

```python
transformers.EncodecModel(config: EncodecConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/encodec/modeling_encodec.py#L485)

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

config ([EncodecConfig](/docs/transformers/main/ar/model_doc/encodec#transformers.EncodecConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج EnCodec، وهو مشفّر صوتي عصبي.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### فك الترميز[[transformers.EncodecModel.decode]]

```python
decode(audio_codes: LongTensor, audio_scales: Tensor, padding_mask: typing.Optional[torch.Tensor] = None, return_dict: bool | None = None, last_frame_pad_length: int | None = 0)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/encodec/modeling_encodec.py#L661)

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

audio_codes (`torch.LongTensor` من الشكل `(nb_frames, batch_size, nb_quantizers, frame_len)`، *اختياري*) : تضمينات رموز منفصلة محسوبة باستخدام `model.encode`.

audio_scales (قائمة بطول `nb_frames` من `torch.Tensor` بشكل `(batch_size, 1)`، *اختياري*) : معامل التوسيع لكل مدخل `audio_codes`.

padding_mask (`torch.Tensor` من الشكل `(channels, sequence_length)`) : قناع التعبئة (Padding mask) المستخدم لتعبئة `input_values`.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

last_frame_pad_length (`int`, *اختياري*) : عدد صحيح يمثل طول الحشو في الإطار الأخير، والذي يُزال أثناء فك الترميز.

يفكك الإطارات المعطاة إلى موجة صوتية ناتجة.

لاحظ أن المخرجات قد تكون أكبر قليلاً من المدخلات. في هذه الحالة، يمكن قص أي خطوات إضافية في النهاية.

#### encode[[transformers.EncodecModel.encode]]

```python
encode(input_values: Tensor, padding_mask: typing.Optional[torch.Tensor] = None, bandwidth: float | None = None, return_dict: bool | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/encodec/modeling_encodec.py#L525)

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

input_values (`torch.Tensor` من الشكل `(batch_size, channels, sequence_length)`) : قيم رقمية عشرية لموجة الصوت المدخلة.

padding_mask (`torch.Tensor` من الشكل `(batch_size, channels, sequence_length)`) : قناع التعبئة (Padding mask) المستخدم لتعبئة `input_values`.

bandwidth (`float`, *اختياري*) : عرض النطاق الترددي المستهدف. يجب أن يكون أحد قيم `config.target_bandwidths`. إذا كان `None`، يتم استخدام أصغر عرض نطاق ترددي ممكن. يتم تمثيل عرض النطاق الترددي كألف من قيمته الفعلية، على سبيل المثال، عرض نطاق ترددي 6kbps يتم تمثيله على أنه bandwidth == 6.0

**يعيد:** `EncodecEncoderOutput dict or a tuple containing`

- audio_codes (`torch.LongTensor` من الشكل `(nb_frames, batch_size, nb_quantizers, frame_len)`، *اختياري*)،
- audio_scales (قائمة بطول `nb_frames` من `torch.Tensor` بشكل `(batch_size, 1)`، *اختياري*)،
- last_frame_pad_length (`int`، *اختياري*).

يقوم بتشفير موجة الصوت المدخلة إلى رموز منفصلة ذات الشكل `(nb_frames, batch_size, nb_quantizers, frame_len)`.

- `nb_frames=1` إذا كان `self.config.chunk_length=None` (بما أن المُشفِّر يُطبَّق على الصوت الكامل)، وهو
في حالة نموذج 24kHz. وإلا، `nb_frames=ceil(input_length/self.config.chunk_stride)`، وهو ما ينطبق على نموذج 48kHz.
- `frame_len` هو طول كل إطار، وهو يساوي `ceil(input_length/self.config.hop_length)` إذا
`self.config.chunk_length=None` (على سبيل المثال، لنموذج 24kHz). وإلا، إذا كان `self.config.chunk_length` معرّفًا، فإن `frame_len=self.config.chunk_length/self.config.hop_length`، على سبيل المثال، حالة نموذج 48kHz مع `frame_len=150`.

#### forward[[transformers.EncodecModel.forward]]

```python
forward(input_values: Tensor, padding_mask: typing.Optional[torch.BoolTensor] = None, bandwidth: float | None = None, audio_codes: typing.Optional[torch.LongTensor] = None, audio_scales: typing.Optional[torch.Tensor] = None, return_dict: bool | None = None, last_frame_pad_length: int | None = 0)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/encodec/modeling_encodec.py#L716)

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

input_values (`torch.Tensor` من الشكل `(batch_size, channels, sequence_length)`، *اختياري*) : مدخلات صوت خام تم تحويلها إلى Float وتم ملؤها (Padded) إلى الطول المناسب لتتمكن من الترميز باستخدام مقاطع (Chunks) بطول self.chunk_length وخطوة (Stride) مقدارها `config.chunk_stride`.

padding_mask (`torch.BoolTensor` من الشكل `(batch_size, channels, sequence_length)`، *اختياري*) : قناع لتجنب حساب معاملات التوسيع على فهارس رموز الحشو (هل يمكننا تجنب حساب الالتفاف عليها+). قيم القناع المختارة من `[0, 1]`: - 1 للرموز التي **ليست مقنّعة**، - 0 للرموز التي **مقنّعة**.    يجب دائمًا تمرير `padding_mask`، ما لم يكن المدخل مقصوصًا أو غير محشو. والسبب في ذلك هو أنه من أجل معالجة المصفوفات بفعالية، يجب حشو الصوت المدخل بحيث يكون `input_length % stride = step` مع `step = chunk_length-stride`. وهذا يضمن أن تكون جميع المقاطع من نفس الشكل

bandwidth (`float`, *اختياري*) : عرض النطاق الترددي المستهدف. يجب أن يكون أحد قيم `config.target_bandwidths`. إذا كان `None`، يتم استخدام أصغر عرض نطاق ترددي ممكن. يتم تمثيل عرض النطاق الترددي كألف من قيمته الفعلية، على سبيل المثال، يتم تمثيل عرض نطاق ترددي قدره 6kbps على النحو التالي `bandwidth == 6.0`

audio_codes (`torch.LongTensor` من الشكل `(nb_frames, batch_size, nb_quantizers, frame_len)`، *اختياري*) : تضمينات رموز منفصلة محسوبة باستخدام `model.encode`.

audio_scales (`list` بطول `nb_frames` من `torch.Tensor` بشكل `(batch_size, 1)`، *اختياري*) : معامل التوسع لكل مدخل `audio_codes`.

return_dict (`bool`، *اختياري*) : ما إذا كان يجب إرجاع المخرجات على شكل قاموس.

last_frame_pad_length (`int`, *اختياري*) : طول الحشو في الإطار الأخير، إن وُجد. يُستخدم هذا لضمان إمكانية إخراج الإطارات المُرمّزة كمصفوفة. يجب تمرير هذه القيمة أثناء فك الترميز لضمان إزالة الحشو من الإطارات المُرمّزة.

**يعيد:** `EncodecOutput` أو `tuple(torch.Tensor)`

`EncodecOutput` أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) وتتضمن عناصر مختلفة اعتمادًا على الإعداد ([EncodecConfig](/docs/transformers/main/ar/model_doc/encodec#transformers.EncodecConfig)) والمدخلات.

تتجاوز طريقة [EncodecModel](/docs/transformers/main/ar/model_doc/encodec#transformers.EncodecModel) الخاصة بالتقدم الأمامي الطريقة الخاصة `__call__`.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن `Module` بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

- **audio_codes** (`torch.LongTensor` من الشكل `(nb_frames, batch_size, nb_quantizers, frame_len)`، *اختياري*) -- تضمينات رموز منفصلة محسوبة باستخدام `model.encode`.
- **audio_values** (`torch.Tensor` من الشكل `(batch_size, segment_length)`، *اختياري*) -- قيم الصوت المُفكّكة، المُستخرجة باستخدام جزء المُفكّك في Encodec.

أمثلة:

```python
>>> from datasets import load_dataset
>>> from transformers import AutoProcessor, EncodecModel

>>> dataset = load_dataset("hf-internal-testing/ashraq-esc50-1-dog-example")
>>> audio_sample = dataset["train"]["audio"][0]["array"]

>>> model_id = "facebook/encodec_24khz"
>>> model = EncodecModel.from_pretrained(model_id)
>>> processor = AutoProcessor.from_pretrained(model_id)

>>> inputs = processor(raw_audio=audio_sample, return_tensors="pt")

>>> outputs = model(**inputs)
>>> audio_codes = outputs.audio_codes
>>> audio_values = outputs.audio_values
```

