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-seed0seed สุ่ม 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+ โมเดลคอมไพล์สี่ตัวรวม 367.6 MB พรอมป์ต์ เสียงอ้างอิง และเฟรมที่ขอใช้บริบท 1,024 แถวร่วมกัน หากเกินบริบทหรือถึง maxFrames ก่อนจบเสียงตามธรรมชาติจะเกิดข้อผิดพลาด ค่าเริ่มต้นเป็น CPU; gpu อนุญาต CPU+GPU ค่า seed ของ PCG64 เข้ากันได้กับ NumPy แต่ความต่างเชิงตัวเลขของแบ็กเอนด์อาจเปลี่ยนผลลัพธ์

วัด Python/CoreML บน M5 Pro, 48 GB, macOS 26.6.2 ใช้โปรเซสแยกและคำขออุ่นเครื่องห้าครั้งต่อกรณี เสียงอ้างอิงยาว 2.72 วินาที ค่าแรก/อุ่นเครื่องรวมการอ่าน โหลดตัวเข้ารหัส และเข้ารหัส ส่วนแคชใช้รหัสเดิม ไม่รวมการโหลดโมเดลสังเคราะห์ RSS รวมโปรเซส Python ทั้งหมดโดยไม่มี PyTorch หรือ ASR ไม่ใช่ค่าของ Swift/iPhone และไม่ได้วัดความคล้ายผู้พูด

แบ็กเอนด์RSS สูงสุดโทเคนแรก: แรก / อุ่น / แคชเสียงแรก: แรก / อุ่น / แคช
CPU779 MiB542 / 203 / 52 ms563 / 216 / 65 ms
CPU+GPU731 MiB649 / 225 / 24 ms741 / 245 / 48 ms

Swift · Release

Swift release CLI แบบเนทีฟบน M5 Pro เครื่องเดิม ใช้หนึ่งคำขอต่อโปรเซสใหม่ด้วยเสียงอ้างอิง ข้อความ และ seed เดียวกัน รวมการเตรียมเสียงอ้างอิงแต่ไม่รวมการโหลดโมเดลสังเคราะห์ RSS คือทั้ง CLI โดยไม่มีน้ำหนัก ASR ขีดหมายถึงกรณีอุ่น/แคชที่ยังไม่วัด ผลลัพธ์ทั้งสองผ่าน ASR อิสระและตรงกับประโยคที่ขอทุกคำ

แบ็กเอนด์RSS สูงสุดโทเคนแรก: แรก / อุ่น / แคชเสียงแรก: แรก / อุ่น / แคช
CPU670.7 MiB537 / — / — ms560 / — / — ms
CPU+GPU602.5 MiB570 / — / — ms645 / — / — ms

MossTTSNano · OpenMOSS