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-modelaufklarer/MOSS-TTS-Nano-100M-CoreML모델 저장소 또는 로컬 디렉터리
--moss-nano-compute-unitscpucpu 또는 gpu
--moss-nano-max-frames300최대 80 ms 프레임 수; 자연 종료 필수
--moss-nano-seed0재현 가능한 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첫 토큰: 최초 / 워밍 / 캐시첫 오디오: 최초 / 워밍 / 캐시
CPU779 MiB542 / 203 / 52 ms563 / 216 / 65 ms
CPU+GPU731 MiB649 / 225 / 24 ms741 / 245 / 48 ms

Swift · Release

같은 M5 Pro의 네이티브 Swift release CLI에서 새 프로세스당 같은 참조·텍스트·시드로 요청을 한 번 실행했습니다. 참조 준비를 포함하고 합성 모델 로딩은 제외합니다. RSS는 ASR 가중치 없는 전체 CLI입니다. 대시는 미측정 워밍/캐시 조건입니다. 두 출력 모두 독립 ASR에서 요청 문장과 정확히 일치했습니다.

백엔드최대 RSS첫 토큰: 최초 / 워밍 / 캐시첫 오디오: 최초 / 워밍 / 캐시
CPU670.7 MiB537 / — / — ms560 / — / — ms
CPU+GPU602.5 MiB570 / — / — ms645 / — / — ms

MossTTSNano · OpenMOSS