curl -X POST https://funsound.cn/register \
-H "Content-Type: application/json" \
-d '{"account":"your@email.com","password":"yourpassword"}'
curl -X POST https://funsound.cn/register \
-H "Content-Type: application/json" \
-d '{"account":"your@email.com","password":"yourpassword", "code":"1234", "mode":"verify"}'
curl -X POST https://funsound.cn/login \
-H "Content-Type: application/json" \
-d '{"account":"your@email.com","password":"yourpassword"}'
curl -X POST https://funsound.cn/change_password \
-H "Content-Type: application/json" \
-d '{"account":"your@email.com","old_password":"123456","new_password":"1234"}'
curl -X GET "https://funsound.cn/get_account/?uid=yourUID"
curl -X GET "https://funsound.cn/get_languages/?uid=yourUID"
curl -X POST https://funsound.cn/asr_offline/ \
-F "file=@yourfile.m4a" \
-F "uid=yourUID" \
-F "engine=funasr"
use_sv=true
:启用说话人识别use_trans=true
:启用翻译target_language=English
:设置翻译的目标语言hotwords=["阿里巴巴","达摩院"]
:设置热词提升识别准确率,格式为 JSON 字符串示例代码(Python):
import asyncio
import websockets
import json
import os
import httpx
# 获取语言列表
response = httpx.get(url=f"https://funsound.cn/get_languages/")
languages = response.json()['result']
print(languages)
async def recognize_audio_file(
uri,
file_path,
filename="sample.wav",
uid="test_user",
hotwords=[],
use_sv=False,
use_trans=False,
source_language=None,
target_language="English",
engine="whisper",
chunk_size_kb=512,
):
assert target_language in languages
success = True
async with websockets.connect(uri, max_size=None, ping_interval=30, ping_timeout=300) as websocket:
try:
# S0: 发送初始化参数
init_config = {
"filename": filename,
"uid": uid,
"hotwords": hotwords,
"use_sv": use_sv,
"use_trans": use_trans,
"source_language": source_language,
"target_language": target_language,
"engine": engine
}
await websocket.send(json.dumps(init_config))
# S1: 获取鉴权回复
msg = json.loads(await websocket.recv())
print("S1:", msg)
if msg.get("status") != "success":
return False
# S2: 分块上传音频
chunk_size_kb = chunk_size_kb * 1024
with open(file_path, "rb") as f:
while True:
chunk = f.read(chunk_size_kb)
if not chunk:
break
await websocket.send(chunk)
# 等待服务端确认
msg = json.loads(await websocket.recv())
print("S2:", msg)
if msg.get("status") != "success":
return False
# 发送空帧表示结束
await websocket.send(b"")
msg = json.loads(await websocket.recv())
print("S2:", msg)
if msg.get("status") != "success":
return False
# S3: 余额检测
msg = json.loads(await websocket.recv())
print("S3:", msg)
if msg.get("status") != "success":
return False
# S4: 接收转写结果
while True:
msg = json.loads(await websocket.recv())
if msg.get("status") != "success":
return
line = msg['result']
print(line)
if line['completed']:
break
# S5: 费用结算
msg = json.loads(await websocket.recv())
print("S5:", msg)
except Exception as e:
print(e)
success = False
return success
async def main():
uri = f"wss://funsound.cn/ws/asr_offline/"
uid = '0mfxQa9iot' # 替换为你的uid
file_path = "./test1.wav" # 替换为你的文件
k = 10 # 并发请求数目
tasks = [asyncio.create_task(recognize_audio_file(
uri=uri,
file_path=file_path,
filename=os.path.basename(file_path),
uid=uid,
engine='funasr',
chunk_size_kb=256
)) for _ in range(k)]
results = await asyncio.gather(*tasks)
print("并发任务状态:",results)
if __name__ == "__main__":
asyncio.run(main())
功能 | 参数 | 说明 |
---|---|---|
说话人识别 | use_sv=true | 自动识别不同说话人 |
翻译功能 | use_trans=true | 转写后翻译成目标语言 |
目标语言 | target_language=English | 翻译目标语言 |
中文模型 | engine=funasr | 适用于中文转写 |
多语言模型 | engine=whisper | 支持多语言识别 |
热词支持 | hotwords=["词1","词2"] | 提升特定词汇识别准确率 |
官网访问:https://funsound.cn