Skip to content

Instantly share code, notes, and snippets.

@wilinz
Last active November 1, 2024 08:58
Show Gist options
  • Save wilinz/13f4bc343754f01c06a90aa9c12e449a to your computer and use it in GitHub Desktop.
Save wilinz/13f4bc343754f01c06a90aa9c12e449a to your computer and use it in GitHub Desktop.
微软edge-tts-api(大声朗读协议)

edge tts

获取语音列表:

https://speech.platform.bing.com/consumer/speech/synthesize/readaloud/voices/list?trustedclienttoken=6A5AA1D4EAFF4E9FB37E23D68491D6F4

tts接口

wss://speech.platform.bing.com/consumer/speech/synthesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&Sec-MS-GEC=C14242292B2241ECB17DD93BD17E481FADED759D70DCE83CA526064D9E90420C&Sec-MS-GEC-Version=1-114.0.1823.67&ConnectionId=373cb9fe3c926de352de8ad4c800b24c HTTP/1.1
Host: speech.platform.bing.com
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67
Upgrade: websocket
Origin: chrome-extension://jdiccldimpdaibmpdkjnbmckianbfold
Sec-WebSocket-Version: 13
Accept-Encoding: gzip, deflate, br
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: Imported_MUID=279D5D30479A67B120EC4CF8465A66EC; SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=56CF87A361464E7D97109A4DE5068B80&dmnchg=1; MUID=325A63E135A06AAA171571C234606B8E; _tarLang=default=zh-Hans; _TTSS_OUT=hist=WyJ6aC1IYW5zIl0=; MMCASM=ID=DB36A1CCBCE141C988893F7658931D00; ANON=A=BDF919D5061D7F41CCECB893FFFFFFFF&E=1c5e&W=5; NAP=V=1.9&E=1c04&C=3tftpzkAdHnos47AExrgJwTp6Puwum9ieFNAkA8kcyzaw9FsgBNcHA&W=5; PPLState=1; _UR=QS=0&TQS=0; ABDEF=V=13&ABDV=13&MRNB=1685903928257&MRB=0; USRLOC=HS=1&ELOC=LAT=25.30931282043457|LON=110.4037857055664|N=Lingchuan%20County%2C%20Guangxi%20Zhuang|ELT=2|&CLOC=LAT=25.309329051998866|LON=110.40374008805972|A=733.4464586120832|TS=230701173629|SRC=W; KievRPSSecAuth=FAByBBRaTOJILtFsMkpLVWSG6AN6C/svRwNmAAAEgAAACIcO+OPnBnDOMARvQ4a99TLFSEe5qktVEWTUqgPRylgzmpHo0criSIMfmIxbCWKerYz/xckSZ9fIVmh+xtn2waP/f4XRaTroOgRra3Ez3S17ty6xyXVS8sUMoAM/vOjuQMjtyM6ahjmUBda+sjPxekYt/l83dgpaz4zqH9Tto8RPnlsf/4T63XNA/uf48oeq0U2YXKthu5N/guoBTs8tIiBCWqpfKcu8SRgzLx2kBE8XkrzYDBR8cBdOvJuWeUqEiJg0SbGjXYt6FGFEKeYpshDeksDrvJVPij6ymAs0j7PHJVLjM5Tds3AcpBdmWAwNz2yKfLaT9jlIJjtfY6+8Du1BfOvb0noJB00DyF3L7JTnRXdQlRkQG6i3J85gZp5XKfyucptiStnNhwZKYyt5qTz5bFxnZW0Q1DqJnuVMvT0dyLwBV2RUUkeo4IeB6lZtfxthjY2KFe5ZbWpKzECwt22qktDZdYu+tBXlO2rJwDtwKba+gLWP/vBLUAa4hBrRtbuDypx+AHTT9qlxgKY5go0Wz085oPWpq8VxDo1aRiUqXGrqnbJWKzVx50oUnIEJy3DQbxSZzitD6MJ4mmzVbYAyrlwpFtXYO4X7TKvlWnlPstdGdRxykIERl/S3+jp9DBDRCTkXRoFa3VSOkzeuDj0FfDKlQtrQh6Q/GPyCUKy8KRFK3hwxJR7HsE2ivEjMYwdHsfk6hD+Ocw0q1OZT9L5EPkC3XqK0K1JFWuRyDKXmxvjRfazgD1GOszIOvk85MzOXw6uhKHpbLt3vEMX6MkUaFuHSOscFlgYdrP4NIfe/db+48F96hOgY8qLmRfNyRUQZk2oghT7X/Hp8Jjq6KvU30RAzl5VpxlNIHjXg9iBacD46m9zBMCsEt8mie27r0a8plN6T3i/xKVbefueJoa9RE3dDdDaAB3TsLDnKmklSVDR70gPFS4NCCVM2iApD5+TH7nuQ3TvOn0wHOY3AUa2TE41nYA/jiQWdQkXR5q5/p0pQpRMcRyWiGEtydSy+tW/uYoRJs4x0/JdpYrlFjo0skC8Lbin5Fc9mL8+qMlWAF2pCspX2KwQ7ahzeragrLm0KDH41/wFdjiM3POGwF+K/eIKynR1WNwxVFtguiEgPmKo/1IFpl0C20MyKBRtJDt+pRZftYE4fGHS2bB7fb4hCVc9GCTQuirLpvH1oIvRFqOjoka52hVvjm4lWHrOKPKBEns7ab1YuCR9b8VF/fWYrWAmDbCMeLTmWs6Ip8b6d8gm6pxTi1X2l93Hu/gzkT4Xo0eZouRsO5DlO9ARfjDCNwdNy0bSiG4vIJ6ZwPc9WssXxZMHBNRw/cZmoJlS1sOsO437DFm4vQZ45q4LNgrgpNA692EF59vH49QsQDzZikR0GflucdEqlNPUtccYEAmR/i0DEhj3OELuDQY8a3Yk0uvyTncOZaNIWFAD9zf+45bbF2xm/AWoh+ArXEpBQuQ==; WLID=KUYfPWEbNlPRDrYXPelkjmxJvZFv0wz6tT96dilh4DCgLNrpdRPJSpCbu2rfDBmVcuJKl1X4cpPSqjovbW50ggCgqZIzWp683k+1CUJICHs=; SRCHUSR=DOB=20220619&T=1688146375000&TPC=1685734779000&POEX=W; _HPVN=CS=eyJQbiI6eyJDbiI6MTQsIlN0IjowLCJRcyI6MCwiUHJvZCI6IlAifSwiU2MiOnsiQ24iOjE0LCJTdCI6MCwiUXMiOjAsIlByb2QiOiJIIn0sIlF6Ijp7IkNuIjoxNCwiU3QiOjAsIlFzIjowLCJQcm9kIjoiVCJ9LCJBcCI6dHJ1ZSwiTXV0ZSI6dHJ1ZSwiTGFkIjoiMjAyMy0wNi0zMFQwMDowMDowMFoiLCJJb3RkIjowLCJHd2IiOjAsIkRmdCI6bnVsbCwiTXZzIjowLCJGbHQiOjAsIkltcCI6NDN9; SRCHHPGUSR=SRCHLANG=en&BRW=MW&BRH=MT&CW=1902&CH=922&SW=1536&SH=864&DPR=2.8&UTC=480&DM=0&PV=11&WTS=63823445133&BZA=0&PRVCW=393&PRVCH=851&HV=1688146817&SCW=1902&SCH=922&HBOPEN=2; _RwBf=ilt=5&ihpd=1&ispd=0&rc=30&rb=30&gb=0&rg=0&pc=30&mtu=0&rbb=0.0&g=0&cid=&clo=0&v=4&l=2023-06-30T07:00:00.0000000Z&lft=0001-01-01T00:00:00.0000000&aof=0&o=0&p=bingcopilotwaitlist&c=MY00IA&t=8305&s=2023-02-19T09:46:05.9860389+00:00&ts=2023-06-30T17:39:35.7692651+00:00&rwred=0&wls=2&lka=0&lkt=0&TH=&mta=0&e=1FouwS5GVXBVl-SkUiOwiZzt0OE6NrGp9VOEBUZVm8_C_dS7_q_nvq-yiW1bzUP-KIXibyq2kf5HkqCbVM7EGg&A=BDF919D5061D7F41CCECB893FFFFFFFF&dci=0; SUID=A; WLS=C=aa4e6de0bbbb2fd0&N=lizan; _SS=SID=1A9307EC7FD662F3261514AD7E0F63C8; _U=10tbPuGOdzPNMte05ZF-7PujpfTktYWP5vffV0QlYXYElxiZIenSCz69Wr4_EmJH3DEPDT1ewxutXE28f8BucrmvsUMM_dYx23lrl6ia2XHR-B6dZ9TBlLRw-dFn9KqwXmaY6ozCPvW5bvnayy9h5AQpSwxa50xkfSZhxivIgiaQWz6fx0JAdT4mAQSoaumIW1cJZi3gR5nRXxe4x2uJJ5Q
Sec-WebSocket-Key: BgvTFvtUpQzEgl0tGl/iNg==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

发送配置

X-Timestamp:Sun Jul 02 2023 03:46:41 GMT+0800 (中国标准时间)
Content-Type:application/json; charset=utf-8
Path:speech.config

{"context":{"synthesis":{"audio":{"metadataoptions":{"sentenceBoundaryEnabled":"false","wordBoundaryEnabled":"true"},"outputFormat":"webm-24khz-16bit-mono-opus"}}}}

发送文本ssml:

X-RequestId:04b1283ca619378ea55726f80903a6bf
Content-Type:application/ssml+xml
X-Timestamp:Sun Jul 02 2023 03:46:41 GMT+0800 (中国标准时间)Z
Path:ssml

<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xmlns:mstts='https://www.w3.org/2001/mstts' xml:lang='en-US'><voice name='Microsoft Server Speech Text to Speech Voice (en-US, AriaNeural)'><prosody pitch='+0Hz' rate ='+0%' volume='+0%'>         Prepare for a career in tech by joining GitHub Global Campus. Global Campus will help you get the practical industry         knowledge you need by giving you access to industry tools, events, learning resources and a growing student community.       </prosody></voice></speak>

回复

1.
X-RequestId:04b1283ca619378ea55726f80903a6bf
Content-Type:application/json; charset=utf-8
Path:turn.start

{
  "context": {
    "serviceTag": "a11f02b087bc4f7ea6ee4731eebf85f6"
  }
}

2.
X-RequestId:04b1283ca619378ea55726f80903a6bf
Content-Type:application/json; charset=utf-8
Path:response

{"context":{"serviceTag":"a11f02b087bc4f7ea6ee4731eebf85f6"},"audio":{"type":"inline","streamId":"575A2A1723424F01BE42AF68534E15B9"}}

3.
X-RequestId:04b1283ca619378ea55726f80903a6bf
Content-Type:application/json; charset=utf-8
Path:audio.metadata

{
  "Metadata": [
    {
      "Type": "WordBoundary",
      "Data": {
        "Offset": 1000000,
        "Duration": 4625000,
        "text": {
          "Text": "Prepare",
          "Length": 7,
          "BoundaryType": "WordBoundary"
        }
      }
    }
  ]
}

4.
X-RequestId:04b1283ca619378ea55726f80903a6bf
Content-Type:application/json; charset=utf-8
Path:audio.metadata

{
  "Metadata": [
    {
      "Type": "WordBoundary",
      "Data": {
        "Offset": 5750000,
        "Duration": 2000000,
        "text": {
          "Text": "for",
          "Length": 3,
          "BoundaryType": "WordBoundary"
        }
      }
    }
  ]
}

以此类推...

5.二进制
[0x00,0x8C]X-RequestId:04b1283ca619378ea55726f80903a6bf
Content-Type:audio/webm; codec=opus
X-StreamId:575A2A1723424F01BE42AF68534E15B9
Path:audio[\r\n]
音频二进制数据...

@wilinz
Copy link
Author

wilinz commented Jul 2, 2023

注意 Websocket 中的发送的文本均需把 \n 替换成 \r\n

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment