轻量化声音克隆-快速开始

功能介绍

轻量化声音克隆能力,通过真人语音数据训练生成独特的定制语音合成模型,为您的品牌或角色合成清晰自然的声音。定制的语音模型,可应用于数字人音频合成、音视频制作配音、个性化有声书朗读等场景。前往ModelScope开源社区,查看更多Sambert模型介绍。

重要
  • 声音克隆API调用需申请体验并通过后才可使用,否则API调用将返回错误状态码。

  • 仅面向企业认证客户开放申请。

  • 当前处于邀测阶段,模型训练免费,合成调用费用为1元/万字。

  • 目前仅支持中文普通话。

配额说明

邀测期间,每个申请通过的用户默认可训练10个模型,训练任务并发限制为2个。

如何恢复额度:

  1. 删除不再使用的模型。

  2. 向您的商务经理或对接人申请扩容。

使用步骤

下面概述了轻量化声音克隆使用步骤:

  1. 上传录音

    1. 音频文件支持wav/mp3/m4a格式,采样率建议满足24~48kHz,语音数据有效时长满足20分钟以上。

    2. 将音频数据压缩至zip包内(无目录限制要求),zip包文件小于等于300MB。

    3. 录音应避免出现噪音、混响等问题,详见录音指导

  2. 模型训练

    通过接口提交并训练,注意保存返回参数job_id。

  3. 查询任务状态

    通过接口查询训练状态,当返回参数status为UNDER_REVIEW时,表示训练成功待人工审核。

  4. 等待人工审核

    审核时间不超过1个工作日。

  5. 获取模型名称

    再次查询任务状态将返回最终模型名称。

  6. 合成调用

    通过模型名称按照Sambert语音合成的方式调用。

示例代码

以下代码展示了Sambert轻量化声音克隆服务上传录音至合成调用的全过程。

前提条件

已开通服务并获得API-KEY:API-KEY的获取与配置

上传录音

说明

需要替换示例中的代码才能正常运行:

  • your-dashscope-api-key,您的API-KEY。

  • your-audio-file-with-path,您本地的录音zip文件及路径。

curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/files' \
  --header 'Authorization: Bearer your-dashscope-api-key' \
  --form 'files=@"your-audio-file-with-path"'

请求示例:

curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/files' \
  --header 'Authorization: Bearer sk-2b961b351c7845408186d1XXXXXXXXXX' \
  --form 'files=@"/Users/XXXXX/Desktop/cf.zip"'

成功时生成file_id,请注意保存。

模型训练

说明

需要替换示例中的代码才能正常运行:

  • your-dashscope-api-key,您的API-KEY。

  • your-file-id,您的file_id,由上一步文件上传生成。

  • your-model-name,您期望的模型名称,最终模型名称在训练成功后由接口返回。

请求示例:

curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes' \
--header 'Authorization: your-dashscope-api-key' \
--header 'Content-Type: application/json' \
--data '{
    "model": "sambert",
    "training_file_ids": [
        "your-file-id"
    ],
    "finetuned_output_suffix": "your-model-name"
}'

返回示例:

{
  "request_id":"e4b52b13-af91-4b02-85bc-XXXXXXXXXXXX",
  "output":{
    "job_id":"ft-202307131709-XXXX",
    "status":"PENDING"
  }
}

成功时生成job_id,请注意保存。

查询训练状态

说明

需要替换示例中的代码才能正常运行:

  • your-dashscope-api-key,您的API-KEY。

  • your-job-id,您的job_id。

请求示例:

curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/your-job-id' \
--header 'Authorization: your-dashscope-api-key'

返回示例:

{
  "request_id":"6892b15e-4022-46c2-bc66-XXXXXXXXXXXX",
  "output":{
    "job_id":"ft-202307131709-XXXX",
    "status":"UNDER_REVIEW",
    "model":"sambert",
    "output_report":"https://finetune-swap-bj.oss-cn-beijing.aliyuncs.com/artifacts/tts/resources/reports/ft-202307131709-XXXX.zip?Expires=1689331675&OSSAccessKeyId=LTAI5tDAubSHmnPEoxJ7XXXX&Signature=avcPIxSHRxerHsU19TXXXXXXXXXXXX",
    "training_file_ids":["7947f965-a12f-4ebd-b57f-XXXXXXXXXXXX"],
    "validation_file_ids":[],
    "hyper_parameters":{}
  }
}

当返回参数statusUNDER_REVIEW时,表示当前正在进行人工审核,审核时间不超过1个工作日。

重要

模型训练过程中,如出现“FAILED”状态,可根据code参数判断原因,详见API详情错误码。

获取模型名称

人工审核通过后,再次查询训练状态,获取最终模型名称。

说明

需要替换示例中的代码才能正常运行:

  • your-dashscope-api-key,您的API-KEY。

  • your-job-id,您的job_id。

请求示例:

curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/your-job-id' \
--header 'Authorization: your-dashscope-api-key'

返回示例:

{
  "request_id":"976427b2-9dbe-4665-a08e-XXXXXXXXXXXX",
  "output":{
    "job_id":"ft-202307131709-XXXX",
    "status":"SUCCEEDED",
    "finetuned_output":"sambert-cf-ft-202307131709-XXXX",
    "model":"sambert",
    "output_report":"https://finetune-swap-bj.oss-cn-beijing.aliyuncs.com/artifacts/tts/resources/reports/ft-202307131709-XXXX.zip?Expires=1689332170&OSSAccessKeyId=LTAI5tDAubSHmnPEoxJ7XXXX&Signature=wPLXOJFGdsRMR%2Bn4cBXXXXXXXXXXXX",
    "training_file_ids":["7947f965-a12f-4ebd-b57f-XXXXXXXXXXXX"],
    "validation_file_ids":[],
    "hyper_parameters":{}
  }
}

当返回参数status为SUCCEEDED时,表示审核通过,可进行合成调用,最终模型名称是finetuned_output参数值。

合成调用

说明

需要替换示例中的代码才能正常运行:

  • your-dashscope-api-key,您的API-KEY。

  • your-model,您的模型名称,来自上一步finetuned_output返回参数。

更多合成调用方式详见API详情

# coding=utf-8

import dashscope
from dashscope.audio.tts import SpeechSynthesizer

dashscope.api_key='your-dashscope-api-key'

result = SpeechSynthesizer.call(model='your-model',
                                text='这是由阿里巴巴达摩院语音实验室提供的声音合成技术',
                                sample_rate=24000)
if result.get_audio_data() is not None:
    with open('output.wav', 'wb') as f:
        f.write(result.get_audio_data())

print('  get response: %s' % (result.get_response()))
package com.alibaba.dashscope.sample;

import com.alibaba.dashscope.audio.tts.SpeechSynthesizer;
import com.alibaba.dashscope.audio.tts.SpeechSynthesisParam;
import com.alibaba.dashscope.audio.tts.SpeechSynthesisResult;
import com.alibaba.dashscope.audio.tts.SpeechSynthesisAudioFormat;
import com.alibaba.dashscope.common.ResultCallback;
import com.alibaba.dashscope.common.Status;

import java.io.*;
import java.nio.ByteBuffer;

public class Main {

    public static void SyncAudioDataToFile() {
        SpeechSynthesizer synthesizer = new SpeechSynthesizer();
        SpeechSynthesisParam param =
                SpeechSynthesisParam.builder()
                        .apiKey("your-dashscope-api-key")
                        .model("your-model")
                        .text("这是由阿里巴巴达摩院语音实验室提供的声音合成技术")
                        .sampleRate(16000)
                        .build();

        File file = new File("output.wav");
        // 调用call方法,传入param参数,获取合成音频
        ByteBuffer audio = synthesizer.call(param);
        try (FileOutputStream fos = new FileOutputStream(file)) {
            fos.write(audio.array());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        SyncAudioDataToFile();
        System.exit(0);
    }
}

音频录制建议

重要
  • 最终模型的合成效果,很大程度取决于录音数据的质量和时长,请务必重视。

  • 更多的录音数据有利于合成更自然的效果。

  • 更多录制建议,请参考录音指导

混响控制

混响是声音经墙壁等反射产生的,录音场地要避免空旷或者很大的房间,可选择杂物比较多、摆放不规则的环境。

风格一致性

周期性的回放听测之前已录制的音频,尽量保持前后录音一致性,如音调、语速、情绪饱满度等。也可以请其他人协助监听,在风格不一致时发出提醒。

噪声控制

建议在室内进行,关闭会产生噪声的电器,如空调、风扇,避免录音时的肢体动作产生的摩擦声,尽量避免过于频繁的呼吸声和口腔噪声。

姿态控制

保持固定的身姿,控制与麦克风的距离不变,避免声音忽大忽小。

音频一致性

尽量保证一次完成所有录音,保持录音环境、录音质量的一致性。