MOSS-TTS-Nano
Streaming-Sprachsynthese und Stimmklonen mit CoreML, 48 kHz Stereo und 80-ms-Blöcken.
Apache-2.0 · aufklarer/MOSS-TTS-Nano-100M-CoreML
CLI
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 klont eine Stimme ohne Referenztranskript. Mono-Referenzen werden zu Stereo dupliziert, auf 48 kHz resampelt und auf volle 80 ms aufgefüllt. Eine Referenz einmal kodieren und ihre Codes für weitere Anfragen wiederverwenden.
--moss-nano-model | aufklarer/MOSS-TTS-Nano-100M-CoreML | Modell-Repository oder lokales Verzeichnis |
--moss-nano-compute-units | cpu | cpu oder gpu |
--moss-nano-max-frames | 300 | Maximale 80-ms-Frames; natürliches Ende erforderlich |
--moss-nano-seed | 0 | Reproduzierbarer Swift-Sampling-Seed |
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 serialisiert Anfragen und erzeugt pro Äußerung einen neuen CoreML-Zustand. synthesize und synthesizeStream erhalten Stereo; SpeechGenerationModel liefert eine Mono-Mischung. language: nil übergeben. Streams enden mit einer leeren Abschlussmarkierung.
Grenzen und Messungen
macOS 15+ / iOS 18+; vier kompilierte Modelle mit insgesamt 367,6 MB. Prompt, Referenz und angeforderte Frames teilen sich 1.024 Kontextzeilen. Überlauf und maxFrames vor dem natürlichen Sprachende lösen Fehler aus. Standard ist CPU; gpu erlaubt CPU+GPU. PCG64-Seeds sind NumPy-kompatibel; numerische Backend-Unterschiede können die Ausgabe dennoch ändern.
Python/CoreML auf M5 Pro, 48 GB, macOS 26.6.2; eigene Prozesse und fünf warme Anfragen je Fall. Referenz: 2,72 s. Erst-/Warmwerte enthalten Lesen, Encoderladen und Referenzkodierung; der Cache verwendet vorhandene Codes. Das Laden der Synthesemodelle ist ausgeschlossen. RSS umfasst den gesamten Python-Prozess ohne PyTorch oder ASR. Keine Swift-/iPhone-Messung oder Bewertung der Sprecherähnlichkeit.
| Backend | Spitzen-RSS | Erstes Token: erst / warm / Cache | Erstes Audio: erst / warm / Cache |
|---|---|---|---|
| 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
Native Swift-release-CLI auf demselben M5 Pro: eine Anfrage je neuem Prozess mit gleicher Referenz, Text und Seed. Referenzvorbereitung ist enthalten, Laden der Synthesemodelle ausgeschlossen. RSS umfasst die gesamte CLI ohne ASR-Gewichte. Striche kennzeichnen ungemessene Warm-/Cache-Fälle. Beide Ausgaben ergaben bei unabhängiger ASR exakt den angeforderten Satz.
| Backend | Spitzen-RSS | Erstes Token: erst / warm / Cache | Erstes Audio: erst / warm / Cache |
|---|---|---|---|
| CPU | 670.7 MiB | 537 / — / — ms | 560 / — / — ms |
| CPU+GPU | 602.5 MiB | 570 / — / — ms | 645 / — / — ms |