Skip to content

浏览器实时变声 ​

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;应用应结束当前会话,再由用户决定是否重试。