Skip to content

实时变声

Convbased.startVoiceChange 采集麦克风音频,协商连接,并按 output 把转换后的音频流接入音频元素或回调。每次调用对应独立会话,返回的会话句柄用于在线调参与结束。

启动会话

ts
import { Convbased } from "@convbased/sdk";

const session = await Convbased.startVoiceChange({
  auth,
  modelId: "model_xxx",
  output: document.querySelector("audio")!,
  preferences: { pitch: 0, rms_mix_rate: 0.25 },
  onStatus: (status) => console.log(status),
  onError: (err) => console.error(err),
});

参数:

参数类型说明
authSdkAuthentication必填。SDK 鉴权配置,见鉴权
modelIdstring必填。加载的模型 ID。
outputHTMLMediaElement | (stream) => void转换后的音频去向。传音频元素则设置 srcObject 并尝试播放,播放仍可能受浏览器策略阻止;传回调则自行处理 MediaStream;省略时可读取 session.stream
inputMediaStream | MediaTrackConstraints | boolean麦克风约束,或传入已采集的流。
preferencesVoicePreferences初始调音参数,详见末节。
onStatus(status) => void生命周期回调,取值 connecting / live / ended
onError(err) => void会话进入 live 后出现的失败。

startVoiceChange() 在服务端报告实时服务就绪后 resolve;连接失败则 reject。resolve 不表示音频元素已获准播放。

会话句柄

ts
session.setPitch(2);                 // 调音高(半音)
session.update({ formant: 1 });      // 调任意参数,只有传入字段生效
session.setMuted(true);              // 静音麦克风
session.mute();                      // 等价于 setMuted(true)
session.unmute();                    // 等价于 setMuted(false)
session.stream;                      // 转换后的流,便于自定义音频接线
await session.stop();                // 结束会话并释放麦克风

自定义输出

output 传回调可拿到转换后的 MediaStream,接入自己的音频图:

ts
await Convbased.startVoiceChange({
  auth,
  modelId,
  output: (stream) => myAudioGraph.connect(stream),
});

复用已有输入流

input 传入已采集的流可跳过取麦克风,便于接降噪、变调等前置管线:

ts
const raw = await navigator.mediaDevices.getUserMedia({ audio: true });
const processed = await applyEffects(raw);
await Convbased.startVoiceChange({ auth, modelId, input: processed });

调音参数

preferences 在启动时传入,也可经 session.update() 在线更新,只有传入的字段生效:

pitchrms_mix_ratef0_thresholdblock_timecrossfade_timeextra_timef0_autotunef0_autotune_strengthproposed_pitchproposed_pitch_thresholdenable_limiterlimiter_thresholdenable_lookaheadlookahead_timeformantindex_rateprotectthreshold