Edge 流式文本转语音。
使用 web.socket.client + dotNet.sslTunnel.client,不依赖 SocketSharp 或播放器。
一次提交完整文本,按序交付 MP3 字节块;不是向同一合成任务持续追加文本的双向流。
单次转义后 UTF-8 文本上限 4096 字节,是本适配器的保守策略。按需在调用层使用 string.sentences。
使用指南
创建引擎,构造时不联网。config 可省略,设置请求默认值。
voice: 默认 zh-CN-XiaoxiaoNeural;rate: 默认 1;volume: 默认 1;format: mp3。
boundary: sentence(默认)、word、none。
connectTimeoutMs=10000,receiveTimeoutMs=30000,timeoutMs=120000。
providerOptions={pitch="+0Hz";language="en-US"}。
没有 proxy、voiceOptions、ConnectAsync、pushText/popSpeech 等旧接口。
能力表:audioStreaming=true,textStreaming=false,formats=["mp3"],boundaries=["sentence","word"],maxTextBytes=4096。
创建并启动异步合成任务;request 是包含 text 及可选请求默认值覆盖项的表。
output 为有 write/finish 方法的输出对象(播放器、httpStreamMp3 等)时:
音频交给 output.write,成功调用 output.finish(),失败调用 output.finish(错误信息);
取消时不调用 output,由调用者 close。write 失败会终止合成。
output 也可以是回调表:onAudio(data,format)、onBoundary(info)、onFinish(result,err)。
成功返回 task;参数错误返回 null,err,不触发回调,也不调用 output。
回调在当前消息循环线程中执行,且始终在 synthesize 返回后开始。
联网获取可用音色(进程内缓存,第二次不联网);locale 可选,按地区前缀筛选(忽略大小写),
如 "zh"(含 zh-HK、zh-TW、zh-CN-shaanxi 等)、"zh-HK"、"en-US"。
返回数组,每项 {id;locale;localeName;gender;name;categories;personalities},
id 即 synthesize 的 voice,gender 为小写 "female"/"male"。失败返回 null,err。
请求在工作线程执行,GUI 线程调用不会卡住界面。
已交付的编码字节数。
已交付的音频块数。
onFinish 回调自身抛出的错误(如有);不会重复触发结束回调。
幂等取消当前合成。首次取消返回 true,已结束返回 false。
使用输出对象时:不调用 output 的任何方法;停止声音请另行调用 output.close()。
使用回调表时:在 cancel 内同步触发一次 onFinish(null,err),err.code 为 cancelled。
之后不再有任何回调。
合成是否已终结。
任务终结时的总耗时。
错误表:code,message,stage,partial,retryable,以及可选 httpStatus。
partial 表示已交付过音频。不自动重试,避免重复朗读。
自任务创建到首音频块的毫秒数;尚无音频则为 null。
音频描述:codec,mimeType,sampleRate,channels,bitrate。描述编码流,不是 PCM。
本次请求唯一 ID。
成功结果:id,format,audioBytes,audioChunks,firstAudioMs,elapsedMs。
不包含完整音频,完整音频由调用者按需收集。
connecting,synthesizing,streaming,completed,failed,cancelled。
消息泵等待合成结束,返回 result,err。可选等待超时不取消任务,错误码为 wait_timeout。
不要在该任务的回调内调用 wait。