feat(voice): 百炼声音复刻create_voice + TTS instruction情绪驱动(主TTS-昔涟复刻音色)
This commit is contained in:
1 parent
73dabb9dde
commit
03d7050e1e
15 files changed
+686
-30
No files matched your search
@@ -33,3 +33,31 @@ type TTS interface {
|
||||
// honored.
|
||||
TTS(ctx context.Context, text string) (Audio, error)
|
||||
}
|
||||
|
||||
// VoiceCloner creates a custom voice (声音复刻) from a public reference audio URL.
|
||||
// A nil-cloner provider (no cloud rung configured) returns ErrNotConfigured.
|
||||
type VoiceCloner interface {
|
||||
// CloneVoice creates a custom voice and returns its voice_id. referenceURL is
|
||||
// a public audio URL; prefix is the voice-name prefix (≤10 alphanumeric chars).
|
||||
CloneVoice(ctx context.Context, referenceURL, prefix string) (string, error)
|
||||
}
|
||||
|
||||
// ctxKeyTTSInstruction is the context key for a per-request TTS instruction.
|
||||
// The TTS interface only carries (ctx, text), so an optional instruction is
|
||||
// threaded through ctx to reach the adapter without widening the interface.
|
||||
type ctxKeyTTSInstruction struct{}
|
||||
|
||||
// WithTTSInstruction returns ctx carrying an optional per-request TTS instruction
|
||||
// (emotion/tone) that overrides the configured VOICE_TTS_INSTRUCTION for one call.
|
||||
func WithTTSInstruction(ctx context.Context, instruction string) context.Context {
|
||||
return context.WithValue(ctx, ctxKeyTTSInstruction{}, instruction)
|
||||
}
|
||||
|
||||
// TTSInstructionFromContext returns the per-request TTS instruction set by
|
||||
// WithTTSInstruction, or "" when none is carried.
|
||||
func TTSInstructionFromContext(ctx context.Context) string {
|
||||
if v, ok := ctx.Value(ctxKeyTTSInstruction{}).(string); ok {
|
||||
return v
|
||||
}
|
||||
return ""
|
||||
}
|
||||
Reference in new issue
Block a user