Skip to content

音色资源生命周期与语音合成(Voice Asset Lifecycle) ​

在 Nimi 的语音体系中,音色创建(voice.create)与语音合成(audio.synthesize)分为两个职责明确的阶段。开发者可以通过参考音频复刻真实声线,也可以通过文字描述设计专属音色;生成的音色资源由 Runtime 统一托管为 VoiceAsset,供后续语音交互直接引用。

音色创建的两种来源模式 ​

应用可通过 SDK 发起音色创建请求,支持两种来源模式:

创建来源必需参数底层能力要求适用场景
参考音频(Reference Audio)referenceAudio 字节流/URI、referenceAudioMime、preferredName、languageHints、text(无参考转写时传空字符串 "")推理模型支持 input.audio声音克隆、复刻真实人物声线
文字描述(Text Description)instructionText(音色提示词)、previewText(试听文本)、language、preferredName推理模型支持 input.text创意设计虚构角色的个性化声线

在底层协议中,这两种方式分别对应 VoiceCreationSource 的 REFERENCE_AUDIO 与 TEXT_DESCRIPTION,统一输出由 Runtime 管理的标准 VoiceAsset。

代码示例:通过文字描述创建音色 ​

ts
import type { NimiLocalAppClient } from '@nimiplatform/sdk';

/**
 * 通过文字音色描述发起音色创建任务
 * 在调用前推荐在应用本地存储中生成并保存唯一的 clientSubmissionId,以便在网络重连时追踪该任务
 */
export async function submitVoiceDescription(
  client: NimiLocalAppClient,
  clientSubmissionId: string,
  instructionText: string,
  previewText: string,
) {
  return await client.ai.scenarioJobs.submit({
    type: 'voice-create',
    creationSource: 'text-description',
    instructionText,
    previewText,
    language: 'en',
    preferredName: 'My custom voice',
  }, { clientSubmissionId });
}

任务提交成功后,接口会返回唯一的 jobId。应用可通过 client.ai.scenarioJobs.get(jobId) 查询任务状态,待任务处理完成后即可获取生成的音色资源详情。

音色资源结果与引用结构 ​

当任务顺利完成(状态为 completed)时,读取接口会返回完整的音色资源及标准引用对象:

结果字段业务含义用途说明
asset.voiceAssetIdRuntime 托管的音色资源全局唯一 ID用于后续语音合成时的音色指定
asset.creationSource音色创建模式(音频克隆或文字生成)元数据追溯
asset.status资源当前状态(active, expired, deleted)校验该音色是否处于可用状态
voiceReference标准化的音色引用结构体 { kind: 'voice_asset_id', voiceAssetId }取出 voiceAssetId,按下方的合成入参格式构造引用

voiceReference 是任务结果的引用格式;语音合成使用的是另一种入参格式 voiceRef。请将结果中的 voiceReference.voiceAssetId 放入 { type: 'voice-asset', id: voiceAssetId },不要原样传入整个结果对象。

音色的日常管理与语音合成使用 ​

业务任务推荐 SDK 接口
查询系统内置的预设音色client.aiConfig.listOptions({ kind: 'preset-voices' })
查询当前应用可用的自建音色client.ai.voiceAssets.list({ pageSize: 20 })
删除已创建的自建音色client.ai.voiceAssets.delete(voiceAssetId)

在发起语音合成任务时,只需将 voiceRef 设为 { type: 'voice-asset', id: voiceAssetId } 或 { type: 'preset', id: presetVoiceId },Runtime 在已配置的 audio.synthesize 路由上校验音色兼容性并执行任务;完成后读取音频产物。

Source Basis ​

Nimi 文档:可安装、开源、本地优先的个人 AI 产品。