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("room", {
    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("room", {
    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 で制御します。環境設定を管理するを参照してください。

このページの目次