Skip to content

BailianTTSClient 语音合成 ​

BailianTTSClient wraps Alibaba Cloud Bailian / DashScope text-to-speech through the /api/v1/services/audio/tts/SpeechSynthesizer endpoint.

Configuration ​

Load app.properties or environment variables before calling the client:

properties
BAILIAN_API_KEY=your-bailian-api-key

# Optional. Defaults to https://dashscope.aliyuncs.com
BAILIEN_BASE_URL=https://dashscope.aliyuncs.com

The base URL environment variable is currently named BAILIEN_BASE_URL in code.

Quick Start ​

This example follows nexus.io.bailian.BailianTTSClientTest.test():

java
import nexus.io.bailian.BailianTTSClient;
import nexus.io.bailian.tts.BailianTTSResponse;
import nexus.io.exception.GenerateException;
import nexus.io.tio.utils.environment.EnvUtils;
import nexus.io.tio.utils.json.JsonUtils;

public class BailianTTSExample {
  public static void main(String[] args) {
    EnvUtils.load();

    BailianTTSClient client = new BailianTTSClient();
    String model = "cosyvoice-v3.5-plus";
    String voice = "cosyvoice-v3.5-plus-bailian-e46c4292e6504f808be470fe6f9c8b93";

    try {
      BailianTTSResponse response = client.tts(model, voice, "How is the weather today?");
      System.out.println(JsonUtils.toJson(response));
    } catch (GenerateException e) {
      System.out.println(e.getRequestBody());
      System.out.println(e.getResponseBody());
    }
  }
}

The shortcut constructor sends MP3 audio with a 16000 Hz sample rate by default.

Custom Request ​

Use BailianTTSRequest and BailianTTSInput when you need to control format or sample rate:

java
import nexus.io.bailian.BailianTTSClient;
import nexus.io.bailian.tts.BailianTTSInput;
import nexus.io.bailian.tts.BailianTTSRequest;
import nexus.io.bailian.tts.BailianTTSResponse;

BailianTTSInput input = new BailianTTSInput();
input.setVoice("cosyvoice-v3.5-plus-bailian-e46c4292e6504f808be470fe6f9c8b93");
input.setText("How is the weather today?");
input.setFormat("mp3");
input.setSample_rate(16000);

BailianTTSRequest request = new BailianTTSRequest();
request.setModel("cosyvoice-v3.5-plus");
request.setInput(input);

BailianTTSResponse response = new BailianTTSClient().tts(request);

You can also pass a key explicitly:

java
BailianTTSResponse response = new BailianTTSClient().tts(apiKey, request);

Request Fields ​

FieldTypeDescription
modelStringBailian TTS model name, for example cosyvoice-v3.5-plus.
input.voiceStringVoice ID to synthesize with.
input.textStringText to synthesize.
input.formatStringAudio format. The shortcut constructor defaults to mp3.
input.sample_rateIntegerAudio sample rate. The shortcut constructor defaults to 16000.

Response Fields ​

FieldTypeDescription
request_idStringProvider request ID.
output.finish_reasonStringProvider finish reason.
output.audio.idStringAudio asset ID when returned by Bailian.
output.audio.urlStringRemote audio URL when returned by Bailian.
output.audio.dataStringInline audio data when returned by Bailian.
output.audio.expires_atIntegerExpiration timestamp for URL-based audio.
usage.charactersIntegerNumber of synthesized characters reported by the provider.

Error Handling ​

BailianTTSClient.generate(...) throws GenerateException for non-2xx HTTP responses. The exception includes the translated request JSON and provider response body:

java
try {
  BailianTTSResponse response = client.tts(model, voice, text);
} catch (GenerateException e) {
  log.error("Bailian TTS failed: status={}, request={}, response={}",
      e.getStatusCode(), e.getRequestBody(), e.getResponseBody(), e);
}