音声 Node.js SDK から Qwen-Audio-TTS を呼び出し、一括またはストリーミングのテキスト入力から音声を生成して、単語タイムスタンプと使用量イベントを処理します。
SDK のインストール
Node.js 18 以降が必要です。SDK 0.1.0 パッケージをダウンロードし、プロジェクトで次を実行します。
クイックスタート
コンソールで API キーを取得し、環境変数 DASHSCOPE_API_KEY に設定します。
次のサンプルを example.mjs として保存し、node example.mjs を実行します。
API リファレンス
コンストラクターのオプション
SpeechSynthesizer のコンストラクターオプション:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
apiKey | string | いいえ | API キー。デフォルトは DASHSCOPE_API_KEY。 |
workspaceId | string | いいえ | ワークスペース ID。デフォルトは DASHSCOPE_WORKSPACE_ID。 |
baseUrl | string | いいえ | サービスホスト名を dashscope-intl.aliyuncs.com(シンガポール)に設定します。 |
model | string | いいえ | モデル ID。デフォルト:qwen-audio-3.1-tts-flash。 |
voice | string | はい | 音色 ID。モデルに対応する音色を選択します。 |
format | 'pcm' | 'wav' | 'mp3' | 'opus' | いいえ | 音声エンコーディング。省略時はサービスのデフォルト値を使用します。 |
sampleRate | 8000 | 16000 | 22050 | 24000 | 44100 | 48000 | いいえ | 音声サンプリングレート(Hz)。エンコーディングに合わせます。省略時はサービスが決定します。 |
volume | number | いいえ | 音量:[0,100]。サービスのデフォルト:50。 |
rate | number | いいえ | 話速:[0.5,2.0]。サービスのデフォルト:1.0。 |
pitch | number | いいえ | ピッチ:[0.5,2.0]。サービスのデフォルト:1.0。 |
wordTimestampEnabled | boolean | いいえ | 単語タイムスタンプを返すか。デフォルト:false。 |
languageHints | string[] | いいえ | 対象言語のヒント。最初の要素のみ有効です。 |
instruction | string | いいえ | 方言、感情、役割などの合成指示。 |
parameters | TtsSynthesisParameters | いいえ | 追加の合成パラメーター(enable_ssml、seed、hot_fix など)。 |
connectTimeoutMs | number | いいえ | 接続タイムアウト(ms)。デフォルト:10000。 |
taskTimeoutMs | number | いいえ | 開始・終了確認のタイムアウト(ms)。デフォルト:60000。0 で無効化します。 |
parameters.enable_ssml | boolean | いいえ | SSML を有効化します。タスクごとに完全な空でない SSML テキストを 1 回送信します。制限を参照してください。 |
parameters.bit_rate | number | いいえ | MP3/Opus のビットレート(kbps)。範囲:[6,510]、デフォルト:32。 |
parameters.seed | number | いいえ | 乱数シード:[0,65535]。 |
parameters.hot_fix | Record<string, unknown> | いいえ | parameters.hot_fix で渡すホットフィックス設定。構造はクライアントイベントを参照してください。 |
主なメソッド
| メソッド | 戻り値 | 説明 |
|---|---|---|
synthesize(text: string) | Promise<Buffer> | 最大 20000 文字のテキストを合成し、音声を返します。 |
begin() | Promise<void> | ストリーミング合成タスクを開始し、テキストを送信可能にします。 |
sendText(text: string) | void | テキスト片を送信します。1 回最大 20000 文字、タスク合計最大 200000 文字。 |
end() | Promise<Buffer> | テキスト入力を終了し、合成完了後に全音声を返します。 |
cancel() | void | 合成のキャンセルを要求します。 |
close(code?: number, reason?: string) | void | 接続を閉じてタスクのリソースを解放します。 |
コールバックイベント
on(event, listener) でコールバックを登録します。全フィールドはサーバーイベントを参照してください。
| イベント | ペイロード | 説明 |
|---|---|---|
started | { taskId: string } | タスクが開始し、入力を受け付けます。 |
audio | Buffer | バイナリ音声チャンク。複数回発生する場合があります。 |
sentenceBegin | { index: number; text: string } | 文の合成が開始しました。 |
sentenceEnd | { index: number; text: string; characters?: number; words?: TtsWord[]; usage?: TtsUsage } | 文の合成が完了しました。単語タイムスタンプと元の使用量を含む場合があります。 |
finished | { taskId: string; characters?: number; usage?: TtsUsage } | タスクが終了し、ローカルのタスク状態がクリアされました。 |
failed / error | DashScopeError | 呼び出しエラー。code、message、リクエスト識別子を含みます。 |
close | { code: number; reason: string } | 基になる接続の切断通知。 |
event | ServerEvent | 元のサービス JSON メッセージ。 |