init
Browse files- .gitattributes +1 -0
- README.md +181 -0
- asset/sembridge.png +3 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
asset/sembridge.png filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -1,3 +1,184 @@
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
| 3 |
+
pipeline_tag: text-to-speech
|
| 4 |
+
language:
|
| 5 |
+
- zh
|
| 6 |
+
- en
|
| 7 |
+
tags:
|
| 8 |
+
- speech
|
| 9 |
+
- singing-voice-synthesis
|
| 10 |
+
- continuous-latent
|
| 11 |
---
|
| 12 |
+
|
| 13 |
+
<div align="center">
|
| 14 |
+
<h1>SemBridge</h1>
|
| 15 |
+
<p><strong>Semantic Token Anchoring for Continuous-Latent Autoregressive Speech Generation</strong></p>
|
| 16 |
+
<p><em>Speech. Singing. One continuous voice.</em></p>
|
| 17 |
+
<p>
|
| 18 |
+
<a href="https://arxiv.org/pdf/2608.07462"><img src="https://img.shields.io/badge/arXiv-2608.07462-b31b1b.svg" alt="Paper"></a>
|
| 19 |
+
<a href="https://tiamojames.github.io/SemBridge_Demo/"><img src="https://img.shields.io/badge/Listen-Demo-15803d.svg" alt="Audio demos"></a>
|
| 20 |
+
<a href="https://huggingface.co/ASLP-lab/SemBridge"><img src="https://img.shields.io/badge/Hugging_Face-Model-f2c744.svg" alt="Model"></a>
|
| 21 |
+
<a href="https://github.com/ASLP-lab/SemBridge"><img src="https://img.shields.io/badge/GitHub-Code-181717.svg?logo=github" alt="Code"></a>
|
| 22 |
+
<a href="https://github.com/ASLP-lab/SemBridge/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-2563eb.svg" alt="Code license"></a>
|
| 23 |
+
</p>
|
| 24 |
+
<p>
|
| 25 |
+
<a href="#introduction">Introduction</a> ·
|
| 26 |
+
<a href="#installation">Installation</a> ·
|
| 27 |
+
<a href="#inference">Inference</a> ·
|
| 28 |
+
<a href="#citation">Citation</a>
|
| 29 |
+
</p>
|
| 30 |
+
</div>
|
| 31 |
+
|
| 32 |
+
## Introduction
|
| 33 |
+
|
| 34 |
+
SemBridge bridges discrete semantic supervision and continuous acoustic generation.
|
| 35 |
+
A shared semantic tokenizer anchors both acoustic latents and autoregressive language-model
|
| 36 |
+
states, improving linguistic fidelity while retaining continuous-latent generation.
|
| 37 |
+
The unified model supports **text-to-speech**, **note-conditioned singing**, and
|
| 38 |
+
**mixed speech and singing**.
|
| 39 |
+
|
| 40 |
+
<div align="center">
|
| 41 |
+
<img src="https://huggingface.co/ASLP-lab/SemBridge/resolve/main/asset/sembridge.png" alt="SemBridge architecture: semantic anchoring for continuous-latent autoregressive generation" width="100%">
|
| 42 |
+
</div>
|
| 43 |
+
|
| 44 |
+
## News
|
| 45 |
+
|
| 46 |
+
- **[2026-10]**: Released the [inference code](https://github.com/ASLP-lab/SemBridge) and [model checkpoints](https://huggingface.co/ASLP-lab/SemBridge).
|
| 47 |
+
- **[2026-08]**: Released the [arXiv paper](https://arxiv.org/pdf/2608.07462).
|
| 48 |
+
|
| 49 |
+
## Installation
|
| 50 |
+
|
| 51 |
+
Use **Python 3.10+** and a matching **PyTorch / torchaudio 2.6-2.8** pair.
|
| 52 |
+
CUDA inference is recommended; BigVGAN uses standard PyTorch operations and
|
| 53 |
+
does not require custom CUDA extensions.
|
| 54 |
+
|
| 55 |
+
```bash
|
| 56 |
+
conda create -n sembridge python=3.10 -y
|
| 57 |
+
conda activate sembridge
|
| 58 |
+
|
| 59 |
+
git clone https://github.com/ASLP-lab/SemBridge.git
|
| 60 |
+
cd SemBridge
|
| 61 |
+
|
| 62 |
+
# CUDA 12.4 example; choose a build compatible with your NVIDIA driver.
|
| 63 |
+
python -m pip install torch==2.6.0 torchaudio==2.6.0 \
|
| 64 |
+
--index-url https://download.pytorch.org/whl/cu124
|
| 65 |
+
python -m pip install -e .
|
| 66 |
+
```
|
| 67 |
+
|
| 68 |
+
For other CUDA versions or CPU-only installation, use the
|
| 69 |
+
[official PyTorch installation commands](https://pytorch.org/get-started/previous-versions/).
|
| 70 |
+
Keep the `torch` and `torchaudio` versions matched.
|
| 71 |
+
|
| 72 |
+
## Inference
|
| 73 |
+
|
| 74 |
+
The examples and scripts below are included in the [GitHub repository](https://github.com/ASLP-lab/SemBridge).
|
| 75 |
+
Run them from the cloned `SemBridge` directory after installation.
|
| 76 |
+
|
| 77 |
+
```python
|
| 78 |
+
from sembridge import SemBridge
|
| 79 |
+
from sembridge.requests import load_request
|
| 80 |
+
|
| 81 |
+
# Automatically download and load the checkpoint.
|
| 82 |
+
model = SemBridge.from_pretrained(
|
| 83 |
+
"ASLP-lab/SemBridge", device="cuda", dtype="bfloat16"
|
| 84 |
+
)
|
| 85 |
+
model.generate_to_file(
|
| 86 |
+
"outputs/singing.wav",
|
| 87 |
+
**load_request("examples/svs/zh_r001.json"),
|
| 88 |
+
)
|
| 89 |
+
```
|
| 90 |
+
|
| 91 |
+
| Task | Input | Default decoder |
|
| 92 |
+
| :--- | :--- | :--- |
|
| 93 |
+
| **TTS** | Text | Native causal |
|
| 94 |
+
| **SVS** | Lyrics, MIDI pitches, note durations | BigVGAN-Large |
|
| 95 |
+
| **Unified** | Ordered speech and singing segments | BigVGAN-Large |
|
| 96 |
+
|
| 97 |
+
### Examples
|
| 98 |
+
|
| 99 |
+
The repository includes **10 complete examples from our [Demo page](https://tiamojames.github.io/SemBridge_Demo/)**:
|
| 100 |
+
4 TTS, 4 SVS, and 2 Unified cases, with reference audio and prepared requests.
|
| 101 |
+
SVS and Unified include **aligned lyrics, pitches, durations, and note-continuation labels**;
|
| 102 |
+
you do not need to prepare MIDI files or write note JSON to try them.
|
| 103 |
+
|
| 104 |
+
```bash
|
| 105 |
+
# Browse the available examples without loading a model
|
| 106 |
+
bash scripts/infer_examples.sh --list
|
| 107 |
+
|
| 108 |
+
# Run all four singing examples
|
| 109 |
+
CUDA_VISIBLE_DEVICES=0 bash scripts/infer_examples.sh --task svs
|
| 110 |
+
|
| 111 |
+
# Run one speech-singing-speech example
|
| 112 |
+
CUDA_VISIBLE_DEVICES=0 bash scripts/infer_examples.sh --example unified_zh_novel_wukong
|
| 113 |
+
|
| 114 |
+
# Run all 10 examples; the model is loaded only once
|
| 115 |
+
CUDA_VISIBLE_DEVICES=0 bash scripts/infer_examples.sh
|
| 116 |
+
```
|
| 117 |
+
|
| 118 |
+
Audio is saved to `outputs/examples/<example_id>.wav`. Set `MODEL=/path/to/SemBridge`
|
| 119 |
+
to use local weights. See the **[example catalog](https://github.com/ASLP-lab/SemBridge/blob/main/examples/README.md)** for the
|
| 120 |
+
complete list, reference recordings, and guidance on using your own songs.
|
| 121 |
+
|
| 122 |
+
### Single Request
|
| 123 |
+
|
| 124 |
+
```bash
|
| 125 |
+
# Text-to-speech
|
| 126 |
+
sembridge-infer --model ASLP-lab/SemBridge --task tts \
|
| 127 |
+
--input examples/tts/zh_r001.json --output outputs/tts.wav \
|
| 128 |
+
--device cuda --dtype bfloat16
|
| 129 |
+
|
| 130 |
+
# Singing voice synthesis
|
| 131 |
+
sembridge-infer --model ASLP-lab/SemBridge --task svs \
|
| 132 |
+
--input examples/svs/zh_r001.json --output outputs/svs.wav \
|
| 133 |
+
--device cuda --dtype bfloat16
|
| 134 |
+
|
| 135 |
+
# Mixed speech and singing
|
| 136 |
+
sembridge-infer --model ASLP-lab/SemBridge --task unified \
|
| 137 |
+
--input examples/unified/zh_novel_wukong.json --output outputs/unified.wav \
|
| 138 |
+
--device cuda --dtype bfloat16
|
| 139 |
+
```
|
| 140 |
+
|
| 141 |
+
Outputs are **mono, 44.1 kHz WAV**. `--decoder auto` uses the defaults above;
|
| 142 |
+
`--decoder native` or `--decoder bigvgan` selects a decoder explicitly for any task.
|
| 143 |
+
Prepared requests include per-example generation settings, which both entry points
|
| 144 |
+
honor. Explicit CLI options override those settings. Without request-specific limits,
|
| 145 |
+
`--max-patches 500` caps generation at 40 seconds; generation can stop earlier.
|
| 146 |
+
|
| 147 |
+
Add `prompt_audio` and its matching `prompt_text` for reference-conditioned generation.
|
| 148 |
+
Reference audio is automatically downmixed and resampled to 44.1 kHz.
|
| 149 |
+
For SVS, each note contains `text`, MIDI `pitch`, and `duration` **in seconds**.
|
| 150 |
+
|
| 151 |
+
See the **[inference guide](https://github.com/ASLP-lab/SemBridge/blob/main/docs/INFERENCE.md)** for reference voices, singing and
|
| 152 |
+
mixed-generation examples, sampling controls, and offline loading.
|
| 153 |
+
|
| 154 |
+
## Acknowledgements
|
| 155 |
+
|
| 156 |
+
We thank the authors of the following projects for their open research and resources:
|
| 157 |
+
|
| 158 |
+
- **Speech generation:** [VoxCPM](https://github.com/OpenBMB/VoxCPM) and [DiTAR](https://arxiv.org/abs/2502.03930).
|
| 159 |
+
- **Audio codecs:** [DAC](https://github.com/descriptinc/descript-audio-codec), [SAC](https://github.com/Soul-AILab/SAC), and [BigVGAN](https://github.com/NVIDIA/BigVGAN).
|
| 160 |
+
|
| 161 |
+
See [third-party notices](https://github.com/ASLP-lab/SemBridge/blob/main/THIRD_PARTY_NOTICES.md) for implementation attributions.
|
| 162 |
+
|
| 163 |
+
## Citation
|
| 164 |
+
|
| 165 |
+
If you find SemBridge useful in your research, please cite:
|
| 166 |
+
|
| 167 |
+
```bibtex
|
| 168 |
+
@article{xie2026sembridge,
|
| 169 |
+
title = {SemBridge: Semantic Token Anchoring for Continuous-Latent Autoregressive Speech Generation},
|
| 170 |
+
author = {Hanke Xie and Haopeng Lin and Jiale Qian and Dake Guo and Yuepeng Jiang and Zhichao Wang and Wenxiao Cao and Jingbin Hu and Guobin Ma and Wenhao Li and Huakang Chen and Chengyou Wang and Ming Tao and Zhonghua Fu and Lei Xie and Xinsheng Wang},
|
| 171 |
+
journal = {arXiv preprint arXiv:2608.07462},
|
| 172 |
+
year = {2026},
|
| 173 |
+
eprint = {2608.07462},
|
| 174 |
+
archivePrefix = {arXiv},
|
| 175 |
+
primaryClass = {eess.AS},
|
| 176 |
+
url = {https://arxiv.org/abs/2608.07462}
|
| 177 |
+
}
|
| 178 |
+
```
|
| 179 |
+
|
| 180 |
+
## License
|
| 181 |
+
|
| 182 |
+
Code is released under [Apache-2.0](https://github.com/ASLP-lab/SemBridge/blob/main/LICENSE).
|
| 183 |
+
Model weights and third-party resources are subject to their respective licenses.
|
| 184 |
+
Use reference recordings only with permission, and disclose synthetic audio where appropriate.
|
asset/sembridge.png
ADDED
|
Git LFS Details
|