Download vanta/data/dataset.py from rjattt/echofocus: direct link, hf CLI and curl.
- Browser
- Download file 1.63 kB
-
https://huggingface.co/spaces/rjattt/echofocus/resolve/main/vanta/data/dataset.py
- Command line
-
hf download hf://spaces/rjattt/echofocus/vanta/data/dataset.py
-
curl -L -o dataset.py https://huggingface.co/spaces/rjattt/echofocus/resolve/main/vanta/data/dataset.py
1.63 kB
| """PyTorch Dataset over a manifest.jsonl produced by build_dataset.py.""" | |
| from __future__ import annotations | |
| import json | |
| from pathlib import Path | |
| import soundfile as sf | |
| import torch | |
| from torch.utils.data import Dataset | |
| class VantaDataset(Dataset): | |
| """Reads (mixture, target, enrollment) triples from a manifest. | |
| All clips are fixed-length at build time, so there is no padding logic | |
| here and no need for a custom collate_fn beyond the default stacker. | |
| """ | |
| def __init__(self, manifest_path: str | Path, base_dir: str | Path | None = None): | |
| manifest_path = Path(manifest_path) | |
| # Manifest paths are stored relative to the dataset root (datasets/vanta/), | |
| # i.e. one level above the split dir. If not given, infer it. | |
| self.base = Path(base_dir) if base_dir else manifest_path.parent.parent | |
| with manifest_path.open() as f: | |
| self.entries = [json.loads(line) for line in f] | |
| def __len__(self) -> int: | |
| return len(self.entries) | |
| def _read(self, rel: str) -> torch.Tensor: | |
| # Windows-style backslashes in manifest -> forward slashes | |
| p = self.base / rel.replace("\\", "/") | |
| wav, _ = sf.read(p, dtype="float32") | |
| return torch.from_numpy(wav) | |
| def __getitem__(self, idx: int) -> dict[str, torch.Tensor | str]: | |
| e = self.entries[idx] | |
| return { | |
| "mixture": self._read(e["mixture"]), | |
| "target": self._read(e["target"]), | |
| "enrollment": self._read(e["enrollment"]), | |
| "target_speaker": e["target_speaker"], | |
| } | |