> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/curator/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/curator/_mcp/server.

# nemo_curator.stages.audio.tagging.split

Audio Splitting and Joining Stages.

## Module Contents

### Classes

| Name                                                                                                  | Description                                                     |
| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| [`JoinSplitAudioMetadataStage`](#nemo_curator-stages-audio-tagging-split-JoinSplitAudioMetadataStage) | Stage for joining metadata of previously split audio files.     |
| [`SplitASRAlignJoinStage`](#nemo_curator-stages-audio-tagging-split-SplitASRAlignJoinStage)           | Composite stage: Split long audio -> ASR align -> Join results. |
| [`SplitLongAudioStage`](#nemo_curator-stages-audio-tagging-split-SplitLongAudioStage)                 | Stage that splits long audio files into smaller segments.       |

### API

```python
class nemo_curator.stages.audio.tagging.split.JoinSplitAudioMetadataStage(
    text_key: str = 'text',
    name: str = 'JoinSplitAudioMetadata'
)
```

Dataclass

**Bases:** [ProcessingStage\[AudioTask, AudioTask\]](/nemo-curator/nemo_curator/stages/base#nemo_curator-stages-base-ProcessingStage)

Stage for joining metadata of previously split audio files.

Combines the metadata (transcripts and alignments) of audio files that were
previously split by SplitLongAudioStage. Adjusts timestamps and concatenates
transcripts to recreate the original audio's metadata.

**Parameters:**

**`text_key`** `str` — default: 'text'

Key used for transcript text in split entries.
Defaults to `"text"` for backward compatibility.

---

**`name`** `str = 'JoinSplitAudioMetadata'`

---

**`text_key`** `str = 'text'`

---

```python
nemo_curator.stages.audio.tagging.split.JoinSplitAudioMetadataStage._join_split_metadata(
    meta_entry: dict
) -> None
```

Join metadata from split audio files.

```python
nemo_curator.stages.audio.tagging.split.JoinSplitAudioMetadataStage.inputs() -> tuple[list[str], list[str]]
```

```python
nemo_curator.stages.audio.tagging.split.JoinSplitAudioMetadataStage.outputs() -> tuple[list[str], list[str]]
```

```python
nemo_curator.stages.audio.tagging.split.JoinSplitAudioMetadataStage.process(
    task: nemo_curator.tasks.AudioTask
) -> nemo_curator.tasks.AudioTask
```

Process entries and join split audio metadata.

This stage collects all entries and processes meta-entries to join
split audio files back together.

```python
class nemo_curator.stages.audio.tagging.split.SplitASRAlignJoinStage(
    suggested_max_len: float = 3600.0,
    min_len: float = 1.0,
    model_name: str = 'nvidia/parakeet-tdt_ctc-1.1b',
    model_path: str | None = None,
    is_fastconformer: bool = True,
    decoder_type: str = 'rnnt',
    max_len: float = 40.0,
    batch_size: int = 100,
    transcribe_batch_size: int = 32,
    split_batch_size: int = 5000,
    dataloader_num_workers: int = 10,
    infer_segment_only: bool = False,
    compute_timestamps: bool = True,
    timestamp_type: str = 'word',
    text_key: str = 'text',
    words_key: str = 'words',
    disable_word_confidence: bool = False,
    segments_key: str = 'segments',
    name: str = 'SplitASRAlignJoin'
)
```

Dataclass

**Bases:** [CompositeStage\[AudioTask, AudioTask\]](/nemo-curator/nemo_curator/stages/base#nemo_curator-stages-base-CompositeStage)

Composite stage: Split long audio -> ASR align -> Join results.

Decomposes into three sequential stages that always run together:

1. SplitLongAudioStage — splits audio exceeding `suggested_max_len`
2. NeMoASRAlignerStage — transcribes and aligns each chunk
3. JoinSplitAudioMetadataStage — merges transcripts back into original entries

**Parameters:**

**`suggested_max_len`** `float` — default: 3600.0

Target max length for audio segments (seconds).

---

**`min_len`** `float` — default: 1.0

Minimum length for any split segment (also used by ASR).

---

**`max_len`** `float` — default: 40.0

Maximum length of audio segments for ASR processing (seconds).

---

**`model_name`** `str` — default: 'nvidia/parakeet-tdt\_ctc-1.1b'

Pretrained NeMo ASR model name.

---

**`model_path`** `str | None` — default: None

Local model file path (overrides `model_name` if set).

---

**`is_fastconformer`** `bool` — default: True

Whether the model encoder is FastConformer.

---

**`decoder_type`** `str` — default: 'rnnt'

Decoder type — `"ctc"` or `"rnnt"`.

---

**`batch_size`** `int` — default: 100

Entries per processing chunk in ASR.

---

**`transcribe_batch_size`** `int` — default: 32

Batch size passed to the ASR model's transcribe call.

---

**`split_batch_size`** `int` — default: 5000

Max entries/paths per batch when chunking segments.

---

**`dataloader_num_workers`** `int` — default: 10

Data-loading workers for ASR inference.

---

**`infer_segment_only`** `bool` — default: False

If True, run ASR only on individual segments
rather than full audio / meta-entries.

---

**`compute_timestamps`** `bool` — default: True

Whether to compute word-level timestamps.

---

**`timestamp_type`** `str` — default: 'word'

Timestamp granularity (`"word"` or `"char"`).

---

**`text_key`** `str` — default: 'text'

Output key for predicted text.

---

**`words_key`** `str` — default: 'words'

Output key for word-level alignments.

---

**`disable_word_confidence`** `bool` — default: False

Whether to disable word confidence scores.

---

**`segments_key`** `str` — default: 'segments'

Key for the segments list in each manifest entry.

---

**`batch_size`** `int = 100`

---

**`compute_timestamps`** `bool = True`

---

**`dataloader_num_workers`** `int = 10`

---

**`decoder_type`** `str = 'rnnt'`

---

**`disable_word_confidence`** `bool = False`

---

**`infer_segment_only`** `bool = False`

---

**`is_fastconformer`** `bool = True`

---

**`max_len`** `float = 40.0`

---

**`min_len`** `float = 1.0`

---

**`model_name`** `str = 'nvidia/parakeet-tdt_ctc-1.1b'`

---

**`model_path`** `str | None = None`

---

**`name`** `str = 'SplitASRAlignJoin'`

---

**`segments_key`** `str = 'segments'`

---

**`split_batch_size`** `int = 5000`

---

**`suggested_max_len`** `float = 3600.0`

---

**`text_key`** `str = 'text'`

---

**`timestamp_type`** `str = 'word'`

---

**`transcribe_batch_size`** `int = 32`

---

**`words_key`** `str = 'words'`

---

```python
nemo_curator.stages.audio.tagging.split.SplitASRAlignJoinStage.__post_init__() -> None
```

```python
nemo_curator.stages.audio.tagging.split.SplitASRAlignJoinStage.decompose() -> list[nemo_curator.stages.base.ProcessingStage]
```

```python
class nemo_curator.stages.audio.tagging.split.SplitLongAudioStage(
    suggested_max_len: float = 3600.0,
    min_len: float = 1.0,
    name: str = 'SplitLongAudio'
)
```

Dataclass

**Bases:** [ProcessingStage\[AudioTask, AudioTask\]](/nemo-curator/nemo_curator/stages/base#nemo_curator-stages-base-ProcessingStage)

Stage that splits long audio files into smaller segments.

Processes audio files that exceed a specified maximum length by splitting
them at natural pauses to maintain speech coherence.

**Parameters:**

**`suggested_max_len`** `float` — default: 3600.0

Target maximum length for audio segments in seconds

---

**`min_len`** `float` — default: 1.0

Minimum length for any split segment

---

**`min_len`** `float = 1.0`

---

**`name`** `str = 'SplitLongAudio'`

---

**`suggested_max_len`** `float = 3600.0`

---

```python
nemo_curator.stages.audio.tagging.split.SplitLongAudioStage._build_split_metadata(
    audio_item_id: str,
    split_filepaths: list[str],
    split_durations: list[float],
    fallback: bool = False
) -> list[dict]
```

staticmethod

Build per-split metadata dicts from filepaths and durations.

```python
nemo_curator.stages.audio.tagging.split.SplitLongAudioStage._do_split(
    task: nemo_curator.tasks.AudioTask
) -> nemo_curator.tasks.AudioTask
```

Core splitting logic, separated to keep statement count within limits.

```python
nemo_curator.stages.audio.tagging.split.SplitLongAudioStage.get_split_points(
    metadata: dict
) -> list[float]
```

Get the split points for the audio file based on segments.

```python
nemo_curator.stages.audio.tagging.split.SplitLongAudioStage.inputs() -> tuple[list[str], list[str]]
```

```python
nemo_curator.stages.audio.tagging.split.SplitLongAudioStage.outputs() -> tuple[list[str], list[str]]
```

```python
nemo_curator.stages.audio.tagging.split.SplitLongAudioStage.process(
    task: nemo_curator.tasks.AudioTask
) -> nemo_curator.tasks.AudioTask
```

Process entry to split long audio files.