NarraLeaf

配音

为对白行直接指定语音片段,或通过场景的语音映射与解析函数按 ID 引用

在台词的 voice 配置中传入 URL 或 Sound.voice() 实例

alice.say("早上好。", {
    voice: "/voice/alice/good-morning.ogg",
});
import { Sound } from "narraleaf-react";

const greeting = Sound.voice({
    src: "/voice/alice/good-morning.ogg",
    volume: 0.9,
});

alice.say("早上好。", { voice: greeting });

语音 ID

台词较多时,可以在场景上定义语音表或解析函数,再用 ID 引用音频。这样不需要在每句台词中重复文件路径

const room = new Scene("房间", {
    voices: {
        "alice-001": "/voice/alice/001.ogg",
        "alice-002": Sound.voice("/voice/alice/002.ogg"),
    },
});

room.action([
    alice.say("早上好。", { voiceId: "alice-001" }),
    alice.say("早餐准备好了。", { voiceId: "alice-002" }),
]);

语音 ID 与文件名有固定规则时,可以使用解析函数

const room = new Scene("房间", {
    voices: (id) => `/voice/${id}.ogg`,
});

按角色分别控制音量

voiceVolume 一次管辖全部角色。要为每个角色单独提供一个控制,就在 voice 之下为每个角色声明一条总线, 并把语音放到那条总线上:

const game = new Game({
    audioBuses: [
        {id: "alice", parentId: "voice"},
        {id: "bob", parentId: "voice"},
    ],
});

alice.say("早上好。", {
    voice: Sound.voice({src: "/voice/alice/001.ogg", type: "alice"}),
});

之后 game.audioBuses.setVolume("alice", 0.5) 会作用于正在播放的音频 参见音频总线

玩家侧的语音行为由 voiceVolumevoiceFadeDurationvoiceEndMode 控制。见管理偏好

本页目录