MaaS_FishAudio
请求协议
Https
文生语音
请求URL
POST https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/v1/tts
请求参数
Header
-
Authorization,Bearer \
-
Content-Type,支持application/json和application/msgpack
注意:使用application/msgpack时,需将请求体转换为msgpack格式传输
Body
| 参数名 | 字段类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
| text | string | 是 | - | 待合成语音文本 |
| temperature | number | 否 | 0.7 | 0\~1,值越高越随机,越低越稳定 |
| top_p | number | 否 | 0.7 | 0\~1,核采样,控制多样性 |
| references | object[] | 否 | - | ReferenceAudio数组 |
| references.audio | file | 是 | - | 原始音频字节数据,支持的格式:WAV、MP3、FLAC。为获得最佳效果,请使用 10-30 秒的清晰语音,并尽量减少背景噪音。 |
| references.text | string | 是 | - | 音频样本中所述内容的精确文字记录。准确性对语音克隆质量至关重要。 |
| reference_id | string | 否 | - | 声音模型 ID |
| prosody | object | 否 | - | 输出速度和音量调节 |
| prosody.speed | string |
否 | 1.0 | 速度。有效范围:0.5到2.0。1.0 = 正常速度,0.5 = 半速,2.0 = 双倍速度 |
| prosody.volume | number | 否 | 0 | 音量,单位为分贝(dB)。0 = 无变化,正值 = 更大声,负值 = 更安静 |
| prosody.normalize_loudness | string | 否 | true | 将输出音量标准化,以使听觉感受的音量更加一致,仅限 S2-Pro。非必填,默认true |
| chunk_length | int | 否 | 300 | 用于处理的文本段大小。100 \<= x \<= 300 |
| normalize | bool | 否 | true | 对英文和中文文本进行标准化处理,同时提高数字的稳定性。 |
| format |
string | 否 | mp3 | 输出音频格式:wav、pcm、mp3、opus |
| sample_rate | int |
否 | 音频采样率以 Hz 为单位。当为空时,使用该格式的默认值(大多数格式为 44100 Hz,opus 为 48000 Hz)。 | |
| mp3_bitrate | int | 否 | 128 | MP3 码率,以 kbps 为单位,可选值:64、128、192 。只适用于格式为 mp3 的情况。 |
| opus_bitrate | int | 否 | -1000 | Opus的比特率,以bps为单位,可选值:-1000, 24000, 32000, 48000, 64000。-1000为自动,仅适用于格式为opus的情况。 |
| latency | string | 否 | normal | 延迟与质量的权衡:low, normal, balanced,分别表示最低延迟、最佳质量和均衡 |
| max_new_tokens | int | 否 | 1024 | 每个文本片段可生成的最大音频token。 |
| repetition_penalty | number | 否 | 1.2 | 重复音频模式的惩罚机制。数值高于 1.0 时会减少重复现象。 |
| min_chunk_length | int | 否 | 50 | 分割成新块前的最小字符数。0 \<= x \<= 100 |
| condition_on_previous_chunks | boolean | 否 | true | 使用之前的音频作为上下文以保持语音一致性。 |
| early_stop_threshold | number | 否 | 1 | 批处理的提前停止阈值:0 \<= x \<= 1 |
支持创建单声道语音和多声道语音 单声道可选方式:
-
使用reference_id指定声音模型
-
使用references(ReferenceAudio 数组)上传用户参考音频
多声道可选方式:
-
reference_id : 声音模型 ID 的数组,例如,
["speaker-0-id", "speaker-1-id"],text : 使用说话人标签<|speaker:0|>、<|speaker:1|>等来指示说话人变化,例如<|speaker:0|>你好!<|speaker:1|>你好啊! -
references : 每个内部数组包含一个说话者的引用的 2D 数组,reference_id : 标识符数组(对于零样本学习而言,可以是任意字符串)
响应参数
返回值为音频数据
请求示例
curl --location 'https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/v1/tts' \
--header 'Authorization: Bearer {YOUR_AK}' \
--header 'Content-Type: application/json' \
--data '{
"text": "Hello! Welcome to Fish Audio.",
"reference_id": "model-id",
"temperature": 0.7,
"top_p": 0.7,
"prosody": {
"speed": 1,
"volume": 0,
"normalize_loudness": true
},
"chunk_length": 300,
"normalize": true,
"format": "mp3",
"sample_rate": 44100,
"mp3_bitrate": 128,
"latency": "normal",
"max_new_tokens": 1024,
"repetition_penalty": 1.2,
"min_chunk_length": 50,
"condition_on_previous_chunks": true,
"early_stop_threshold": 1
}'
响应示例
语音转文字
请求URL
POST https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/v1/asr
请求参数
Header
-
Authorization,Bearer \
-
Content-Type,支持multipart/form-data和application/msgpack
Body
| 参数名 | 字段类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
| audio | file | 是 | - | 待转换为文字的音频文件 |
| language | string | 否 | null | 指定音频的语言。如果为空则自动检测 |
| ignore_timestamps | boolean | 否 | true | 是否在文本中返回精确的时间戳。对于短于30秒的音频,启用时间戳会增加延迟 |
响应参数
| 参数名 | 字段类型 | 描述 |
|---|---|---|
| text | string | 转换后的文本内容 |
| duration | number | 音频时长(秒) |
| segments | object[] | 分段数组,包含每段文本及其时间戳 |
| segments.text | string | 该段的文本内容 |
| segments.start | number | 该段开始时间(秒) |
| segments.end | number | 该段结束时间(秒) |
请求示例
# 使用 form-data 方式
curl --location 'https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/v1/asr' \
--header 'Authorization: Bearer {YOUR_AK}' \
--form 'audio=@"/path/to/audio.mp3"' \
--form 'language="zh"' \
--form 'ignore_timestamps=false'
# 或使用 msgpack 方式(需要先将请求体序列化为msgpack格式)
curl --location 'https://genaiapi.cloudsway.net/v1/ai/{ENDPOINT_PATH}/fishaudio/asr' \
--header 'Authorization: Bearer {YOUR_AK}' \
--header 'Content-Type: application/msgpack' \
--data-binary '@request.msgpack'
响应示例
{
"text": "你好,欢迎使用Fish Audio语音转文字服务。",
"duration": 5.2,
"segments": [
{
"text": "你好,",
"start": 0.0,
"end": 0.8
},
{
"text": "欢迎使用Fish Audio",
"start": 0.8,
"end": 3.5
},
{
"text": "语音转文字服务。",
"start": 3.5,
"end": 5.2
}
]
}
创建声音模型
请求URL
POST https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/model
请求参数
Header
-
Authorization,Bearer \
-
Content-Type,支持multipart/form-data和application/msgpack
Body
| 参数名 | 字段类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
| type | string | 是 | - | 模型类型,固定为"tts" |
| title | string | 是 | - | 模型标题或名称 |
| train_mode | string | 是 | - | 训练模式,固定为"fast",表示模型创建后可立即使用 |
| voices |
file[] | 是 | - | 用于调优模型的音频文件数组,支持WAV、MP3、FLAC格式 |
| visibility | string | 否 | public | 模型可见性:public(公开显示在发现页)、unlist(任何人可通过链接访问)、private(仅创建者可见) |
| description | string | 否 | 模型描述 | |
| cover_image | file | 否 | 模型封面图片,当visibility为public时必填 | |
| texts | string[] | 否 | 与voices对应的文本内容,如未指定将对音频执行ASR | |
| tags | string[] | 否 | 模型标签 | |
| enhance_audio_quality | boolean | 否 | true | 是否增强音频质量 |
| generate_sample | boolean | 否 | false | 是否生成默认文本样本 |
响应参数
| 参数名 | 字段类型 | 描述 |
|---|---|---|
| _id | string | 模型ID |
| type | string | 模型类型(svc/tts) |
| title | string | 模型标题 |
| description | string | 模型描述 |
| cover_image | string | |
| train_mode | string | 训练模式(fast/full) |
| state | string | 模型状态(created/training/trained/failed) |
| tags | string[] | 标签数组 |
| samples | object[] | 样本数组 |
| samples.title | string | |
| samples.text | string | |
| samples.task_id | string | |
| samples.audio | string | |
| created_at | string | 创建时间 |
| updated_at | string | 更新时间 |
| languages | string[] | 语言数组 |
| visibility | string | 可见性(public/unlist/private) |
| lock_visibility | boolean | 是否锁定可见性 |
| dmca_taken_down | boolean | |
| default_text | string | |
| quality | object | |
| quality.created_at | string | |
| quality.updated_at | string | |
| quality.audios | object[] | |
| quality.audios.filename | string | |
| quality.audios.duration_ms | string | |
| quality.audios.language | string | |
| quality.audios.quality | object | |
| quality.audios.quality.{key} | string | |
| quality.audios.quality_passed | string | |
| quality.audios.quality_reason | string | |
| like_count | integer | 点赞数 |
| mark_count | integer | 收藏数 |
| shared_count | integer | 分享数 |
| task_count | integer | 任务数 |
| author | object | 作者信息 |
| author._id | string | |
| author.nickname | string | |
| author.avatar | string | |
| unliked | boolean | |
| liked | boolean | |
| marked | boolean |
请求示例
# 使用 multipart/form-data 方式
curl --location 'https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/model' \
--header 'Authorization: Bearer {YOUR_AK}' \
--form 'type="tts"' \
--form 'title="我的声音模型"' \
--form 'train_mode="fast"' \
--form 'voices=@"/path/to/audio1.wav"' \
--form 'voices=@"/path/to/audio2.wav"' \
--form 'texts="这是第一段音频的文本"' \
--form 'texts="这是第二段音频的文本"' \
--form 'visibility="private"' \
--form 'tags=["中文","女声"]' \
--form 'enhance_audio_quality=true'
# 或使用 msgpack 方式
curl --location 'https://genaiapi.cloudsway.net/v1/ai/{ENDPOINT_PATH}/fishaudio/model' \
--header 'Authorization: Bearer {YOUR_AK}' \
--header 'Content-Type: application/msgpack' \
--data-binary '@request.msgpack'
响应示例
{
"_id": "model-abc123",
"type": "tts",
"title": "我的声音模型",
"description": "",
"cover_image": "",
"train_mode": "fast",
"state": "created",
"tags": ["中文", "女声"],
"samples": [],
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"languages": ["zh"],
"visibility": "private",
"lock_visibility": false,
"dmca_taken_down": null,
"default_text": "",
"quality": null,
"like_count": 0,
"mark_count": 0,
"shared_count": 0,
"task_count": 0,
"unliked": false,
"liked": false,
"marked": false,
"author": {
"_id": "user-xyz789",
"nickname": "用户名",
"avatar": "https://example.com/avatar.jpg"
}
}
获取模型列表
请求URL
GET https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/model
请求参数
Header
- Authorization,Bearer \
Query Parameters
| 参数名 | 字段类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
| page_size | integer | 否 | 10 | 每页数量,最小值为1 |
| page_number | integer | 否 | 1 | 页码,最小值为1 |
| title | string | 否 | null | 按标题过滤模型 |
| tag | string[] | 否 | null | 按标签过滤模型,支持单个标签或标签数组 |
| self | boolean | 否 | false | 如果为true,仅返回当前用户创建的模型 |
| author_id | string | 否 |
null | 按作者ID过滤,当self为true时忽略此参数 |
| language | string[] | 否 | null | 按语言过滤模型 |
| title_language | string[] | 否 | null | 按标题语言过滤模型 |
| sort_by | string |
否 | score | 排序方式:score(评分)、task_count(任务数)、created_at(创建时间) |
响应参数
| 参数名 | 字段类型 | 描述 |
|---|---|---|
| total | integer | 模型总数 |
| items | object[] | 模型列表数组 |
| items._id | string | 模型ID |
| items.type | string | 模型类型(svc/tts) |
| items.title | string | 模型标题 |
| items.state | string | 模型状态(created/training/trained/failed) |
| items.tags | string[] | 标签数组 |
| items.created_at | string | 创建时间 |
| items.updated_at | string | 更新时间 |
| items.visibility | string | 可见性(public/unlist/private) |
| items.like_count | integer | 点赞数 |
| items.mark_count | integer | 收藏数 |
| items.shared_count | integer | 分享数 |
| items.task_count | integer | 任务数 |
| items.author | AuthorEntity | 作者信息 |
| items.author._id | string | 作者ID |
| items.author.nickname | string | 作者昵称 |
| items.author.avatar | string | 作者头像URL |
| items.description | string | 模型描述 |
| items.cover_image | string | 封面图片URL |
| items.train_mode | string | 训练模式(fast/full) |
| items.samples | object[] | 样本数组 |
| items.samples.title | string | 样本标题 |
| items.samples.text | string | 样本文本内容 |
| items.samples.task_id | string | 任务ID |
| items.samples.audio | string | 音频URL |
| items.languages | string[] | 语言数组 |
| items.lock_visibility | boolean | 是否锁定可见性 |
| items.dmca_taken_down | boolean | null |
| items.default_text | string | 默认文本 |
| items.quality | object | null |
| items.quality.audios | object[] | 音频质量评估数组 |
| items.quality.audios.filename | string | 文件名 |
| items.quality.audios.duration_ms | number | 时长(毫秒) |
| items.quality.audios.language | string | 语言 |
| items.quality.audios.quality | object | 质量评分对象 |
| items.quality.audios.quality.{key} | number | |
| items.quality.audios.quality_passed | boolean | 是否通过质量检测 |
| items.quality.audios.quality_reason | string | 质量评估原因 |
| items.quality.created_at | string | 质量评估创建时间 |
| items.quality.updated_at | string | 质量评估更新时间 |
| items.unliked | boolean | 是否未点赞 |
| items.liked | boolean | 是否已点赞 |
| items.marked | boolean | 是否已收藏 |
| has_more | boolean | null |
请求示例
curl --location 'https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/model?page_size=10&page_number=1&sort_by=created_at' \
--header 'Authorization: Bearer {YOUR_AK}'
响应示例
{
"total": 25,
"items": [
{
"_id": "model-abc123",
"type": "tts",
"title": "我的声音模型",
"description": "这是一个测试模型",
"cover_image": "https://example.com/cover.jpg",
"train_mode": "fast",
"state": "trained",
"tags": ["中文", "女声"],
"samples": [
{
"title": "样本1",
"text": "你好世界",
"task_id": "task-001",
"audio": "https://example.com/sample1.mp3"
}
],
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-02T00:00:00Z",
"languages": ["zh"],
"visibility": "public",
"lock_visibility": false,
"dmca_taken_down": false,
"default_text": "",
"quality": null,
"like_count": 10,
"mark_count": 5,
"shared_count": 3,
"task_count": 100,
"unliked": false,
"liked": true,
"marked": false,
"author": {
"_id": "user-xyz789",
"nickname": "用户名",
"avatar": "https://example.com/avatar.jpg"
}
}
],
"has_more": true
}
获取模型详情
请求URL
GET https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/model/{id}
请求参数
Header
- Authorization,Bearer \
Path Parameters
| 参数名 | 字段类型 | 是否必填 | 描述 |
|---|---|---|---|
| id | string | 是 | 模型ID |
响应参数
| 参数名 | 字段类型 | 描述 |
|---|---|---|
| _id | string | 模型ID |
| type | string | 模型类型(svc/tts) |
| title | string | 模型标题 |
| state | string | 模型状态(created/training/trained/failed) |
| tags | string[] | 标签数组 |
| created_at | string | 创建时间 |
| updated_at | string | 更新时间 |
| visibility | string | 可见性(public/unlist/private) |
| like_count | integer | 点赞数 |
| mark_count | integer | 收藏数 |
| shared_count | integer | 分享数 |
| task_count | integer | 任务数 |
| author | AuthorEntity | 作者信息 |
| author._id | string | 作者ID |
| author.nickname | string | 作者昵称 |
| author.avatar | string | 作者头像URL |
| description | string | 模型描述 |
| cover_image | string | 封面图片URL |
| train_mode | string | 训练模式(fast/full) |
| samples | object[] | 样本数组 |
| samples.title | string | 样本标题 |
| samples.text | string | 样本文本内容 |
| samples.task_id | string | 任务ID |
| samples.audio | string | 音频URL |
| languages | string[] | 语言数组 |
| lock_visibility | boolean | 是否锁定可见性 |
| dmca_taken_down | boolean | null |
| default_text | string | 默认文本 |
| quality | object | null |
| quality.audios | object[] | 音频质量评估数组 |
| quality.audios.filename | string | 文件名 |
| quality.audios.duration_ms | number | 时长(毫秒) |
| quality.audios.language | string | 语言 |
| quality.audios.quality | object | 质量评分对象 |
| quality.audios.quality.{key} | number | |
| quality.audios.quality_passed | boolean | 是否通过质量检测 |
| quality.audios.quality_reason | string | 质量评估原因 |
| quality.created_at | string | 质量评估创建时间 |
| quality.updated_at | string | 质量评估更新时间 |
| unliked | boolean | 是否未点赞 |
| liked | boolean | 是否已点赞 |
| marked | boolean | 是否已收藏 |
请求示例
curl --location 'https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/model/{model_id}' \
--header 'Authorization: Bearer {YOUR_AK}'
响应示例
{
"_id": "model-abc123",
"type": "tts",
"title": "我的声音模型",
"description": "这是一个测试模型",
"cover_image": "https://example.com/cover.jpg",
"train_mode": "fast",
"state": "trained",
"tags": ["中文", "女声"],
"samples": [
{
"title": "样本1",
"text": "你好世界",
"task_id": "task-001",
"audio": "https://example.com/sample1.mp3"
}
],
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-02T00:00:00Z",
"languages": ["zh"],
"visibility": "public",
"lock_visibility": false,
"dmca_taken_down": false,
"default_text": "",
"quality": {
"audios": [
{
"filename": "sample1.wav",
"duration_ms": 5000,
"language": "zh",
"quality": {"score": 0.95},
"quality_passed": true,
"quality_reason": ""
}
],
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
},
"like_count": 10,
"mark_count": 5,
"shared_count": 3,
"task_count": 100,
"unliked": false,
"liked": true,
"marked": false,
"author": {
"_id": "user-xyz789",
"nickname": "用户名",
"avatar": "https://example.com/avatar.jpg"
}
}
更新模型
请求URL
PATCH https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/model/{id}
请求参数
Header
-
Authorization,Bearer \
-
Content-Type,支持multipart/form-data
Path Parameters
| 参数名 | 字段类型 | 是否必填 | 描述 |
|---|---|---|---|
| id | string | 是 | 模型ID |
body参数
| 参数名 | 字段类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
| title | string | 否 | null | 模型标题 |
| description | string | 否 | null | 模型描述 |
| cover_image | file | 否 | null | 模型封面图片 |
| visibility | string | 否 | null | 可见性:public/unlist/private |
| tags | string[] | 否 | null | 模型标签数组或字符串 |
响应参数
成功响应(200):无返回内容
请求示例
curl --location --request PATCH 'https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/model/model-abc123' \
--header 'Authorization: Bearer {YOUR_AK}' \
--form 'cover_image=@"/path/to/new-cover.jpg"' \
--form 'visibility="private"'
响应示例
成功响应(200):无返回内容
删除模型
请求URL
DELETE https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/model/{id}
请求参数
Header
- Authorization,Bearer \
Path Parameters
| 参数名 | 字段类型 | 是否必填 | 描述 |
|---|---|---|---|
| id | string | 是 | 模型ID |
响应参数
成功响应(200):无返回内容
请求示例
curl --location --request DELETE 'https://genaiapi.cloudsway.net/v1/ai/${ENDPOINT_PATH}/fishaudio/model/model-abc123' \
--header 'Authorization: Bearer {YOUR_AK}'
响应示例
成功响应(200):无返回内容