























@@ -4,8 +4,8 @@ import {
44Application,
55createDecoder as createLibopusDecoder,
66createEncoder as createLibopusEncoder,
7-type OpusDecoder as LibopusDecoder,
8-type OpusEncoder as LibopusEncoder,
7+type OpusDecoderHandle as LibopusDecoder,
8+type OpusEncoderHandle as LibopusEncoder,
99} from "libopus-wasm";
1010import { resamplePcm } from "openclaw/plugin-sdk/realtime-voice";
1111import { logVerbose, shouldLogVerbose } from "openclaw/plugin-sdk/runtime-env";
@@ -80,7 +80,12 @@ async function createOpusDecoder(params: {
8080return {
8181name: "libopus-wasm",
8282decoder: {
83-decode: (buffer) => pcmInt16ToBuffer(decoder.decodeFrame(buffer, DISCORD_OPUS_FRAME_SIZE)),
83+decode: (buffer) =>
84+pcmInt16ToBuffer(
85+decoder.decode(buffer, {
86+maxFrameSize: DISCORD_OPUS_FRAME_SIZE,
87+}),
88+),
8489free: () => decoder.free(),
8590},
8691};
@@ -141,7 +146,13 @@ class DiscordOpusEncodeStream extends Transform {
141146while (this.#buffer.length >= DISCORD_OPUS_FRAME_BYTES) {
142147const frame = this.#buffer.subarray(0, DISCORD_OPUS_FRAME_BYTES);
143148this.#buffer = this.#buffer.subarray(DISCORD_OPUS_FRAME_BYTES);
144-this.push(Buffer.from(encoder.encodePcm16(frame, DISCORD_OPUS_FRAME_SIZE)));
149+this.push(
150+Buffer.from(
151+encoder.encode(frame, {
152+frameSize: DISCORD_OPUS_FRAME_SIZE,
153+}),
154+),
155+);
145156}
146157done();
147158} catch (err) {
@@ -156,7 +167,13 @@ class DiscordOpusEncodeStream extends Transform {
156167const frame = Buffer.alloc(DISCORD_OPUS_FRAME_BYTES);
157168this.#buffer.copy(frame);
158169this.#buffer = Buffer.alloc(0);
159-this.push(Buffer.from(encoder.encodePcm16(frame, DISCORD_OPUS_FRAME_SIZE)));
170+this.push(
171+Buffer.from(
172+encoder.encode(frame, {
173+frameSize: DISCORD_OPUS_FRAME_SIZE,
174+}),
175+),
176+);
160177}
161178this.#freeEncoder();
162179done();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。