Fish Audio S2 Pro / Drama 3

이 Soniqo 페이지는 로컬 speech-swift / speech-core 구현의 Fish Audio S2 Pro을 설명합니다. Hugging Face 번들 링크는 통합 메모 뒤에 있습니다.

내부 페이지 우선

랜딩 카드와 문서 메뉴는 먼저 이 페이지로 이동하고, 원본 모델과 번들 링크는 이 페이지 안에 둡니다.

개요

모델Fish Audio S2 Pro
역할Experimental multilingual TTS with raw-reference cloning and style markers
백엔드MLX fp16
출력44.1 kHz mono PCM
언어Multilingual
라이선스Research / non-commercial bundle; obtain Fish Audio license for commercial exposure
상태Programmatic runtime; CLI integration is still pending
소스Fish Audio S2 Pro
Swift 제품FishAudioTTS
CLI / 런타임Programmatic runtime today; planned speech speak --engine fish-audio

사용

아래 스니펫은 현재 speech-swift 저장소의 API 또는 명령과 일치합니다.

import FishAudioTTS

let model = try await FishAudioTTSModel.fromPretrained()
let pcm = try await model.generate(
    text: "आज मैं बहुत खुश हूँ। [excited]",
    referenceAudioURL: URL(fileURLWithPath: "reference.wav"),
    referenceText: "नमस्ते, यह संदर्भ आवाज है।"
)

모델 링크

구현 메모

Fish Audio Drama 3

Drama 3의 실험적 네이티브 MLX 지원은 FishAudioDrama3Model로 제공됩니다. 350억 매개변수의 혼합 어텐션 MoE, 시간축 오디오 타워와 Fish DAC 코덱으로 44.1 kHz 모노 오디오를 생성합니다. 4비트 체크포인트는 Apple M5 Pro에서 텍스트 생성, 참조 음성 복제 및 CLI 출력의 파형과 독립 ASR 검증을 통과했습니다. 8비트와 BF16은 아직 검증되지 않았습니다.

기본 balanced 모드는 단계 경계에서 512 MiB를 초과하는 유휴 MLX 버퍼를 정리합니다. 모델 수명 동안 공유 캐시 한도도 적용되며 더 낮은 호출자 예산을 유지합니다. 두 제어 모두 전체 프로세스 메모리 한도는 아닙니다. --fish-drama3-memory-mode unrestricted 또는 memoryOptions: .unrestricted는 가중치를 미리 로드하고 단계별 정리를 생략하지만 모델 수명의 한도는 유지합니다.

텍스트만 생성할 때는 참조 인코더 가중치 794.4 MiB의 로딩을 지연합니다. 첫 참조 인코딩에서 로드한 후 유지하므로 그때까지 codec.safetensors 파일을 사용할 수 있어야 합니다. 미리 계산한 참조 코드에는 인코더가 필요하지 않습니다.

전체 입력 텍스트를 제공하세요. 음성 복제에는 참조 녹음과 정확한 전사가 필요합니다. 화자 태그 0–15와 인라인 감정 제어를 지원합니다. generateStreaming, generateStream, --stream으로 PCM 스트리밍을 지원합니다. 기본 청크는 코덱 프레임 3개로 약 139ms의 오디오입니다. 긴 텍스트 자동 분할과 스트리밍 텍스트 입력은 아직 지원하지 않습니다. 프레임 한도에 도달하면 오류가 발생합니다.

speech speak "Hello from Drama 3." --engine fish-drama3 --fish-drama3-bundle-dir /path/to/bundle -o hello.wav
speech speak "Hello from Drama 3." --engine fish-drama3 --stream --fish-drama3-chunk-frames 3 -o streamed.wav
speech speak "Hello in the reference voice." --engine fish-drama3 --voice-sample reference.wav --fish-drama3-reference-text "The exact reference transcript." --seed 42 -o cloned.wav
import FishAudioTTS
let model = try await FishAudioDrama3Model.fromBundle(bundleURL, memoryOptions: .balanced)
let pcm = try await model.generate(text: "Hello from Drama 3.", options: .init(seed: 42))
try await model.generateStreaming(text: "Hello from Drama 3.", options: .init(seed: 42, streamingChunkFrames: 3)) { chunk in
    print(chunk.frameIndex, chunk.samples.count, chunk.isFinal)
}
옵션기본값
--fish-drama3-model-idmlx-community/fish-audio-drama-3-4bit
--fish-drama3-bundle-dir—
--fish-drama3-reference-text—
--fish-drama3-max-frames2048
--fish-drama3-temperature1
--fish-drama3-top-k30
--fish-drama3-top-p0.9
--voice-sample—
--seed0
--streamfalse
--fish-drama3-chunk-frames3
--fish-drama3-memory-modebalanced

Fish Audio로 제작되었습니다. 번들에 Community License와 NOTICE가 포함됩니다.

4비트 벤치마크

모드첫 PCM, ms워밍업 후 합성, 초오디오, 초RTF최대 RSS, GiB최대 물리 메모리, GiB
텍스트만 / 전체 생성—2.3063.4830.66214.45724.220
참조 음성 복제 / 전체 생성—2.6813.2040.83715.06424.789
텍스트만 / 스트리밍275.32.5293.4830.72615.57122.321
참조 음성 복제 / 스트리밍730.22.8603.2040.89314.67623.885

Apple M5 Pro, 48 GiB, 릴리스 빌드, 2026-10-17. 워밍업 후 세 번 호출한 중앙값이며 전체 파형 생성을 측정합니다. 모델 로딩과 WAV 파일 입출력은 제외하고, 복제에는 매번 참조 오디오 인코딩을 포함합니다. RTF = 합성 시간 / 오디오 길이. 독립 ASR: 16/16 클립 통과, 단어 오류 0개. 통합 메모리 용량을 계획할 때는 물리 메모리 사용량을 기준으로 하세요. 첫 PCM은 비어 있지 않은 첫 스트리밍 콜백을 뜻하며, 전체 생성에는 청크 콜백이 없습니다. 기본 청크는 139.3ms의 오디오입니다. 실제 재생 시작 시간은 측정하지 않았습니다.