主题
浏览器实时变声
Convbased.startVoiceChange() 打开麦克风或使用你传入的音频流,建立 WebRTC 会话,并返回 VoiceSession。会话建立失败时函数抛出错误;进入 live 状态后的错误通过 onError 通知。
启动会话
ts
import { Convbased } from "@convbased/sdk";
const output = document.querySelector<HTMLAudioElement>("#output");
if (!output) throw new Error("Missing output element");
const session = await Convbased.startVoiceChange({
auth,
modelId: "model_xxx",
output,
preferences: { pitch: 0, rms_mix_rate: 0.25 },
onStatus: (status) => console.log(status),
onError: (error) => console.error(error),
});startVoiceChange() 在实时服务就绪后返回。onStatus 报告 connecting、live 和 ended。
输入
省略 input 时,SDK 调用 getUserMedia({ audio: true }) 打开默认麦克风。也可以传入媒体约束,设置回声消除、降噪等采集选项:
ts
const session = await Convbased.startVoiceChange({
auth,
modelId,
input: { echoCancellation: true, noiseSuppression: true },
});已有 MediaStream 可以直接传入:
ts
const input = await navigator.mediaDevices.getUserMedia({ audio: true });
const session = await Convbased.startVoiceChange({ auth, modelId, input });会话结束时 SDK 会停止输入流中的音轨,包括你传入的流。这条流之后还要使用时,请传入它的克隆流。
输出
output 可以是 HTMLMediaElement 或回调函数。传入媒体元素时,SDK 设置 srcObject 并调用 play();浏览器仍可能因自动播放限制而拒绝播放。传入回调函数时,由应用自行处理转换后的流:
ts
const session = await Convbased.startVoiceChange({
auth,
modelId,
output: (stream) => connectToAudioGraph(stream),
});省略 output 时,可以从 session.stream 读取转换后的流;收到转换后的音频之前该值为 null。
控制会话
ts
session.setPitch(2);
session.update({ formant: 1, rms_mix_rate: 0.2 });
session.mute();
session.unmute();
await session.stop();update() 只更新传入的字段。变声参数可用的字段见 VoicePreferences 类型;preferences 不接受 model_id 或 sample_rate。
结束与错误
页面关闭、用户停止或不再需要变声时调用 session.stop()。mute() 只让麦克风静音,会话仍保持连接。
连接建立过程中的鉴权、模型、信令或网络错误由 startVoiceChange() 抛出。会话进入 live 状态后发生的错误交给 onError;应用应结束当前会话,再由用户决定是否重试。