音声ボット開発
音声ボットは、@metatell/bot-sdkと@metatell/bot-realtimeを組み合わせて実装します。
ルームの音声は16ビットPCMフレームとして受け取り、生成したPCMをボットの音声として送信できます。
インストール
npm install @metatell/bot-sdk @metatell/bot-realtime
音声を使う前に通常のクライアント接続を完了させてください。
音声を有効にする
import {
createMetatellClient,
enableVoice,
} from "@metatell/bot-sdk";
const client = createMetatellClient({
serverUrl: "wss://metatell.app",
roomId: "YOUR_ROOM_ID",
username: "VoiceBot",
});
await client.connect();
const voice = await enableVoice(client, {
transport: { type: "livekit" },
sampleRate: 48000,
channels: 1,
frameDurationMs: 20,
handlers: {
onRemotePcm: async (frame, { fromIdentity }) => {
console.log(fromIdentity, frame.length);
},
},
});
enableVoice()はLiveKitトランスポートへ接続し、SDKクライ アントと音声ハンドラーを結び付けます。
| 設定 | 現在利用する値 | 説明 |
|---|---|---|
sampleRate | 48000 | PCMのサンプルレートです。 |
channels | 1 | モノラル音声を指定します。 |
frameDurationMs | 20 | 1フレームの長さです。 |
autoStartPublish | 真偽値 | 接続後に音声送信を自動で開始するかを指定します。 |
enableTopicAutoAdd | 真偽値 | 音声トピックの自動追加を指定します。 |
transport.type | auto、livekit、mock | 音声トランスポートを指定します。 |
現行のLiveKit接続では、16ビット、48kHz、モノラルのPCMを使用します。
sampleRate、channels、frameDurationMsは上表の値から変更しないでください。
1フレームは20ms、960サンプルです。
mockはテスト用です。
通常のルーム接続ではautoまたはlivekitを使用してください。
標準環境以外では、環境に対応するLiveKit URLをMETATELL_REALTIME_URLへ設定できます。
値は運用環境の管理者から入手してください。
受信PCMを処理する
onRemotePcmにはInt16Arrayと送信元メタデータが渡されます。
handlers: {
onRemotePcm: async (frame, meta) => {
await speechToText.write(frame, {
sampleRate: 48000,
channels: 1,
identity: meta.fromIdentity,
});
},
}
Speech-to-Textへ転送するときは、APIが要求するフレーム長、サンプ ルレート、エンディアンをそろえてください。 同意やプライバシーの要件を確認し、必要のない音声を保存しないでください。
送信用PCMストリームを提供する
getLocalPcmStreamは、送信するInt16Arrayを返す非同期イテレーターです。
async function* localPcm(): AsyncIterable<Int16Array> {
// 16bit、48kHz、モノラルのPCMフレームを順に返します。
// 1フレームは20ms(960サンプル)です。
}
const voice = await enableVoice(client, {
handlers: {
getLocalPcmStream: localPcm,
},
sampleRate: 48000,
channels: 1,
frameDurationMs: 20,
});
音声を送る場合は、getLocalPcmStreamからPCMを供給する方法を使用してください。
このハンドラーがあると、enableVoice()が音声送信を開始します。