MOSS-TTS-Nano
CoreML 기반 스트리밍 음성 합성과 음성 복제. 48 kHz 스테레오를 80 ms 청크로 출력합니다.
Apache-2.0 · aufklarer/MOSS-TTS-Nano-100M-CoreML
명령줄
speech speak "Hello world." --engine moss-nano -o hello.wav
speech speak "The weather is nice today." --engine moss-nano \
--voice-sample reference.wav --moss-nano-seed 1 -o cloned.wav
speech speak "Hello world." --engine moss-nano --stream --play -o streamed.wav--voice-sample로 음성을 복제하며 참조 전사문은 필요하지 않습니다. 모노 참조는 스테레오로 복제하고 48 kHz로 리샘플링한 뒤 80 ms 경계까지 패딩합니다. 참조를 한 번 인코딩하면 여러 요청에서 코드를 재사용할 수 있습니다.
--moss-nano-model | aufklarer/MOSS-TTS-Nano-100M-CoreML | 모델 저장소 또는 로컬 디렉터리 |
--moss-nano-compute-units | cpu | cpu 또는 gpu |
--moss-nano-max-frames | 300 | 최대 80 ms 프레임 수; 자연 종료 필수 |
--moss-nano-seed | 0 | 재현 가능한 Swift 샘플링 시드 |
Swift API
import AudioCommon
import MossTTSNano
let model = try await MossTTSNanoModel.fromPretrained()
let reference = try await model.encodeReference(url: referenceURL)
let result = try await model.synthesize(
text: "The weather is nice today.", reference: reference,
options: MossTTSNanoOptions(maxFrames: 300, seed: 1))
try WAVWriter.writeStereo(left: result.left, right: result.right,
sampleRate: 48000, to: outputURL)MossTTSNanoModel은 요청을 직렬화하며 발화마다 새 CoreML 상태를 만듭니다. synthesize와 synthesizeStream은 스테레오를 유지하고 SpeechGenerationModel은 모노 믹스를 반환합니다. language: nil을 전달하세요. 스트림은 빈 최종 마커로 끝납니다.
제한 및 측정
macOS 15+ / iOS 18+가 필요하며 컴파일된 모델 4개는 총 367.6 MB입니다. 프롬프트, 참조, 요청 프레임은 1,024행 컨텍스트를 공유합니다. 초과하거나 자연 종료 전에 maxFrames에 도달하면 오류가 발생합니다. 기본은 CPU이며 gpu는 CPU+GPU를 허용합니다. PCG64 시드는 NumPy와 호환되지만 백엔드 수치 차이로 출력이 달라질 수 있습니다.
M5 Pro, 48 GB, macOS 26.6.2의 Python/CoreML에서 측정했습니다. 백엔드별 독립 프로세스에서 조건별 워밍 요청 5회를 실행했습니다. 참조는 2.72초입니다. 최초/워밍 지연에는 참조 읽기, 인코더 로딩과 인코딩이 포함되며 캐시 요청은 참조 코드를 재사용합니다. 합성 모델 로딩은 제외합니다. RSS는 PyTorch/ASR 없는 전체 Python 프로세스입니다. Swift나 iPhone 측정 또는 화자 유사도 평가가 아닙니다.
| 백엔드 | 최대 RSS | 첫 토큰: 최초 / 워밍 / 캐시 | 첫 오디오: 최초 / 워밍 / 캐시 |
|---|---|---|---|
| CPU | 779 MiB | 542 / 203 / 52 ms | 563 / 216 / 65 ms |
| CPU+GPU | 731 MiB | 649 / 225 / 24 ms | 741 / 245 / 48 ms |
Swift · Release
같은 M5 Pro의 네이티브 Swift release CLI에서 새 프로세스당 같은 참조·텍스트·시드로 요청을 한 번 실행했습니다. 참조 준비를 포함하고 합성 모델 로딩은 제외합니다. RSS는 ASR 가중치 없는 전체 CLI입니다. 대시는 미측정 워밍/캐시 조건입니다. 두 출력 모두 독립 ASR에서 요청 문장과 정확히 일치했습니다.
| 백엔드 | 최대 RSS | 첫 토큰: 최초 / 워밍 / 캐시 | 첫 오디오: 최초 / 워밍 / 캐시 |
|---|---|---|---|
| CPU | 670.7 MiB | 537 / — / — ms | 560 / — / — ms |
| CPU+GPU | 602.5 MiB | 570 / — / — ms | 645 / — / — ms |