FunSound 接口文档

目录

账号注册与登录

1. 注册账号

curl -X POST https://funsound.cn/register \
  -H "Content-Type: application/json" \
  -d '{"account":"your@email.com","password":"yourpassword"}'

2. 提交验证码

curl -X POST https://funsound.cn/register \
  -H "Content-Type: application/json" \
  -d '{"account":"your@email.com","password":"yourpassword", "code":"1234", "mode":"verify"}'

3. 登录获取 UID

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"}'

文件转写(REST API)

查询余额

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"

可选参数说明:

文件转写(WebSocket)

示例代码(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