Lyria RealTime の音楽生成では、WebSockets を使用した永続的な双方向の低レイテンシ ストリーミング接続が使用されます。このセクションでは、WebSockets API に関する詳細について説明します。
セッション
WebSocket 接続でセッションを確立し、モデルとのリアルタイム通信を維持します。クライアントが新しい接続を開始すると、セッションがサーバーとメッセージを交換し、次のことを実行できます。
- プロンプトとコントロールを送信して、音楽生成を操作します。
- 音楽再生コントロールを送信する。
- 音声チャンクを受信する。
WebSocket 接続
セッションを開始するには、次の WebSocket エンドポイントに接続します。
wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateMusic
セッション構成
接続後の最初のメッセージで、セッション中に使用するモデルを設定します。
次の構成例をご覧ください。SDK の名前の大文字と小文字は異なる場合があります。Python SDK の構成オプションについては、こちらをご覧ください。
{
"model": string
}
メッセージを送信する
WebSocket 接続を介してメッセージを交換するには、クライアントはオープンな WebSocket 接続を介して JSON オブジェクトを送信する必要があります。JSON オブジェクトには、次のオブジェクト セットのフィールドを 1 つだけ含める必要があります。
{
"setup": BidiGenerateMusicSetup,
"client_content": BidiGenerateMusicClientContent,
"music_generation_config": BidiGenerateMusicGenerationConfig,
"playback_control": BidiGenerateMusicPlaybackControl
}
サポートされているクライアント メッセージ
サポートされているクライアント メッセージについては、次の表をご覧ください。
| メッセージ | 説明 |
|---|---|
BidiGenerateMusicSetup
|
最初のメッセージでのみ送信されるセッション構成 |
BidiGenerateMusicClientContent |
モデル入力としての重み付けプロンプト |
BidiGenerateMusicGenerationConfig |
音楽生成の構成 |
BidiGenerateMusicPlaybackControl
|
モデル生成用の再生コントロール信号 |
メールの受信
サーバーからメッセージを受信するには、WebSocket の「message」イベントをリッスンし、サポートされているサーバー メッセージの定義に従って結果を解析します。
以下をご覧ください。
async def receive_audio(session):
"""Example background task to process incoming audio."""
while True:
async for message in session.receive():
audio_data = message.server_content.audio_chunks[0].data
# Process audio...
await asyncio.sleep(10**-12)
async with (
client.aio.live.music.connect(model='models/lyria-realtime-exp') as session,
asyncio.TaskGroup() as tg,
):
# Set up task to receive server messages.
tg.create_task(receive_audio(session))
# Send initial prompts and config
await session.set_weighted_prompts(
prompts=[
types.WeightedPrompt(text='minimal techno', weight=1.0),
]
)
await session.set_music_generation_config(
config=types.LiveMusicGenerationConfig(bpm=90, temperature=1.0)
)
# Start streaming music
await session.play()
サーバー メッセージには、BidiGenerateMusicServerMessage メッセージの他のフィールドが 1 つだけ含まれます。(messageType 共用体は JSON で表現されないため、フィールドはメッセージの最上位に表示されます)。
メッセージとイベント
AudioChunk
音声チャンクの表現。
| フィールド | |
|---|---|
共用体フィールド
|
|
data |
音声チャンクの未加工バイト。 |
mimeType |
音声チャンクのコンテンツの MIME タイプ(「audio/wav」など)。 |
sourceMetadata |
出力専用。この音声チャンクの生成に使用されるプロンプトと構成。 |
SourceMetadata
この音声チャンクの生成に使用された入力ソースに関するメタデータ。
| フィールド | |
|---|---|
clientContent |
この音声チャンクを生成するための重み付けプロンプト。 |
musicGenerationConfig |
この音声チャンクを生成するための音楽生成構成。 |
BidiGenerateMusicClientContent
音楽の開始や操作を行うためのユーザー入力。
| フィールド | |
|---|---|
weightedPrompts[] |
必須。モデル入力としての重み付けプロンプト。 |
BidiGenerateMusicClientMessage
BidiGenerateMusic 呼び出しでクライアントから送信されたメッセージ。
| フィールド | |
|---|---|
共用体フィールド
|
|
setup |
省略可。最初のクライアント メッセージでのみ送信されるセッション構成。 |
clientContent |
省略可。重み付けされたプロンプトと音楽生成構成を音楽生成の入力として使用します。 |
musicGenerationConfig |
省略可。音楽生成の構成。 |
playbackControl |
省略可。音楽生成の再生コントロール信号。 |
BidiGenerateMusicFilteredPrompt
理由とともにフィルタされたプロンプト。
| フィールド | |
|---|---|
filteredReason |
出力専用。プロンプトがフィルタされた理由。 |
共用体フィールド prompt。フィルタされたプロンプト。prompt は次のいずれかになります。 |
|
text |
省略可。テキスト プロンプト。 |
BidiGenerateMusicGenerationConfig
音楽生成の構成。
| フィールド | |
|---|---|
temperature |
省略可。音声生成のばらつきを制御します。 値が大きいほど、分散が大きくなります。範囲は [0.0, 3.0] です。デフォルトは 1.1 です。 |
topK |
省略可。モデルが出力用にトークンを選択する方法を制御します。 最も高い確率を持つ topK トークンをサンプリングします。範囲は [1, 1000] です。デフォルトは 40 です。 |
seed |
省略可。音声生成をシードします。設定されていない場合、リクエストはランダムに生成されたシードを使用します。 |
guidance |
省略可。モデルがプロンプトにどの程度従うかを制御します。ガイダンスを高くすると、より忠実に従いますが、遷移が急になります。範囲は [0.0, 6.0] です。デフォルトは 4.0 です。 |
bpm |
省略可。1 分あたりの心拍数。範囲は [60, 200] です。 |
density |
省略可。音の密度。範囲は [0.0, 1.0] です。 |
brightness |
省略可。値を大きくすると、より明るい音になります。範囲は [0.0, 1.0] です。 |
scale |
省略可。生成された音楽の音階。 |
muteBass |
省略可。オーディオ出力に低音が含まれていない。 |
muteDrums |
省略可。音声出力にドラムが含まれていないこと。 |
onlyBassAndDrums |
省略可。音声出力にはベースとドラムのみが含まれている必要があります。 |
musicGenerationMode |
省略可。音楽生成のモード。デフォルトは QUALITY です。 |
MusicGenerationMode
| 列挙型 | |
|---|---|
MUSIC_GENERATION_MODE_UNSPECIFIED |
この値は使用されません。 |
QUALITY |
このモードでは、テキスト プロンプトが、より高品質の音楽を含む潜在空間の領域に誘導されます。 |
DIVERSITY |
このモードでは、テキスト プロンプトが、より多様な音楽を含む潜在空間の領域に誘導されます。 |
VOCALIZATION |
このモードでは、テキスト プロンプトが、ボーカル音楽を生成する可能性が高い潜在空間の領域に誘導されます。 |
スケール
生成される音楽のスケール。
| 列挙型 | |
|---|---|
SCALE_UNSPECIFIED |
デフォルト値。この値は使用されません。 |
C_MAJOR_A_MINOR |
ハ長調またはイ短調 |
D_FLAT_MAJOR_B_FLAT_MINOR |
変ニ長調または変ロ短調 |
D_MAJOR_B_MINOR |
ニ長調またはロ短調 |
E_FLAT_MAJOR_C_MINOR |
変ホ長調またはハ短調 |
E_MAJOR_D_FLAT_MINOR |
ホ長調または変ニ短調 |
F_MAJOR_D_MINOR |
ヘ長調またはニ短調 |
G_FLAT_MAJOR_E_FLAT_MINOR |
変ト長調または変ホ短調 |
G_MAJOR_E_MINOR |
ト長調またはホ短調 |
A_FLAT_MAJOR_F_MINOR |
変イ長調またはヘ短調 |
A_MAJOR_G_FLAT_MINOR |
イ長調または嬰ヘ短調 |
B_FLAT_MAJOR_G_MINOR |
変ロ長調またはト短調 |
B_MAJOR_A_FLAT_MINOR |
ロ長調または変イ短調 |
BidiGenerateMusicPlaybackControl
音楽生成の再生コントロール。
| 列挙型 | |
|---|---|
PLAYBACK_CONTROL_UNSPECIFIED |
この値は使用されません。 |
PLAY |
音楽の生成を開始します。 |
PAUSE |
音楽生成を保留します。現在の位置から再開するには、[再生] を使用します。 |
STOP |
音楽生成を停止し、コンテキストをリセットします(プロンプトは保持されます)。音楽生成を再開するには、[再生] を使用します。 |
RESET_CONTEXT |
音楽生成を停止せずにコンテキストをリセットする(プロンプトは保持されます)。 |
BidiGenerateMusicServerContent
クライアント メッセージに応答してモデルが生成するサーバーの増分更新。
コンテンツはリアルタイムではなく、できるだけ早く生成されます。クライアントは、コンテンツをバッファリングしてリアルタイムで再生することもできます。
| フィールド | |
|---|---|
audioChunks[] |
出力専用。モデルが生成した音声チャンク。 |
BidiGenerateMusicServerMessage
BidiGenerateMusic 呼び出しのレスポンス メッセージ。
| フィールド | |
|---|---|
共用体フィールド messageType。メッセージのタイプ。messageType は次のいずれかになります。 |
|
setupComplete |
出力専用。セットアップが完了したときに、クライアントからの |
serverContent |
出力専用。クライアント メッセージに応答してモデルが生成したコンテンツ。 |
filteredPrompt |
出力専用。理由とともにフィルタされたプロンプト。 |
warning |
出力専用。サーバーからの警告メッセージ。警告によってストリームが終了することはありません。 |
BidiGenerateMusicSetup
最初の(最初の BidiGenerateMusicClientMessage でのみ)送信されるメッセージ。
クライアントは、BidiGenerateMusicSetupComplete メッセージを待って、追加メッセージを送信する必要があります。
| フィールド | |
|---|---|
model |
必須。モデルのリソース名。これは、使用するモデルの ID として機能します。 形式: |
BidiGenerateMusicSetupComplete
この型にはフィールドがありません。
クライアントからの BidiGenerateMusicSetup メッセージに応答して送信されます。
WeightedPrompt
モデル入力としての重み付けプロンプト。
| フィールド | |
|---|---|
weight |
必須。プロンプトの重み。 重みは、プロンプトの相対的な重要度を制御するために使用されます。重みが大きいほど重要度が高くなります。 この BidiGenerateMusicClientContent のすべての weighted_prompts の重みがすべて 0 であってはなりません。この BidiGenerateMusicClientContent メッセージ内のすべての weighted_prompts の重みは正規化されます。 |
共用体フィールド
|
|
text |
テキスト プロンプト。 |
型の詳細
API で使用される型の詳細については、Python SDK をご覧ください。