使用 Lyria RealTime 生成音乐

Gemini API 使用 Lyria RealTime,可让您使用最先进的实时流式音乐生成模型。借助它,开发者可以构建应用,让用户能够以交互方式创作、持续引导和演奏器乐音乐。

如需体验使用 Lyria RealTime 可以构建的内容,请使用 Prompt DJMIDI DJ 应用在 AI Studio 中试用!

音乐生成功能的运作方式

Lyria RealTime 音乐生成功能使用 WebSocket 建立持久的双向低延迟流式传输连接。

生成和控制音乐

Lyria RealTime 的运作方式与 Live API 有点类似,因为它使用 WebSocket 与模型保持实时通信。但仍不完全相同,因为您无法与模型对话,而必须使用特定格式向其提问。

以下代码演示了如何生成音乐:

Python

此示例使用 client.aio.live.music.connect() 初始化 Lyria RealTime 会话,然后使用 session.set_weighted_prompts() 发送初始提示以及使用 session.set_music_generation_config ���送初始���置,使用 session.play() 开始生成音乐,并设置 receive_audio() 以处理它收到的音频块。

  import asyncio
  from google import genai
  from google.genai import types

  client = genai.Client(api_key=API_KEY, http_options={'api_version': 'v1alpha'})

  async def main():
      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()
  if __name__ == "__main__":
      asyncio.run(main())

JavaScript

此示例使用 client.live.music.connect() 初始化 Lyria RealTime 会话,然后使用 session.setWeightedPrompts() 发送初始提示以及使用 session.setMusicGenerationConfig 发送初始配置,使用 session.play() 开始生成音乐,并设置 onMessage 回调以处理它收到的音频块。

import { GoogleGenAI } from '@google/genai';

const ai = new GoogleGenAI({
  apiKey: API_KEY, // Do not store your API client-side!
  apiVersion: 'v1alpha',
});

// Create session object to control music generation.
const session: MusicSession = client.live.music.connect({
  model: 'models/lyria-realtime-exp',
  callbacks: {
    onMessage: (message) => {
      // Application logic: buffer and play using Web Audio API etc.
    },
    onError: (error) => {
      console.error('music session error:', error);
    },
    onClose: () => {
      console.log('Lyria RealTime stream closed.');
    }
  }
}); 

// Send initial prompts and config
await session.setWeightedPrompts({
  weightedPrompts: [{ text: 'minimal techno', weight: 1.0 }],
});
await session.setMusicGenerationConfig({
  musicGenerationConfig: { bpm: 90, temperature: 1.0 },
});

// Start generation
await session.play();

然后,您可以使用 session.play()session.pause()session.stop()session.reset_context() 来启动、暂停、停止或重置会话。

实时调整音乐

提示 Lyria RealTime

在数据流处于活动状态时,您可以随时发送新的 WeightedPrompt 消息来更改生成的音乐。模型将根据新输入平稳过渡。

提示需要遵循正确的格式,包含 text(实际提示)和 weightweight 可以采用除 0 之外的任何值。1.0 通常是一个不错的起点。

Python

  await session.set_weighted_prompts(
    prompts=[
      {"text": "Piano", "weight": 2.0},
      types.WeightedPrompt(text="Meditation", weight=0.5),
      types.WeightedPrompt(text="Live Performance", weight=1.0),
    ]
  )

JavaScript

  await session.setMusicGenerationConfig({
    weightedPrompts: [
      { text: 'Harmonica', weight: 0.3 },
      { text: 'Afrobeat', weight: 0.7 }
    ],
  });

请注意,在大幅更改问题时,模型转换可能会有些突兀,因此建议通过向模型发送中间权重值来实现某种交叉淡化效果。

更新配置

您还可以实时更新音乐生成参数。您不能仅更新一个参数,而需要设置整个配置,否则其他字段将重置为默认值。

由于更新 bpm 或音阶对模型来说是一项重大变更,因此您还需要告知它使用 reset_context() 重置其上下文,以便考虑新配置。这不会停止直播,但会是硬切换。您无需为其他参数执行此操作。

Python

  await session.set_music_generation_config(
    config=types.LiveMusicGenerationConfig(
      bpm=128,
      scale=types.Scale.D_MAJOR_B_MINOR,
    )
  )
  await session.reset_context();

JavaScript

  await session.setMusicGenerationConfig({
    musicGenerationConfig: { bpm: 120, density: 0.75 },
  });
  await session.reset_context();

Lyria RealTime 提示指南

以下是您可以用来提示 Lyria RealTime 的提示(但并非详尽无遗):

  • 乐器:303 Acid Bass, 808 Hip Hop Beat, Accordion, Alto Saxophone, Bagpipes, Balalaika Ensemble, Banjo, Bass Clarinet, Bongos, Boomy Bass, Bouzouki, Buchla Synths, Cello, Charango, Clavichord, Conga Drums, Didgeridoo, Dirty Synths, Djembe, Drumline, Dulcimer, Fiddle, Flamenco Guitar, Funk Drums, Glockenspiel, Guitar, Hang Drum, Harmonica, Harp, Harpsichord, Hurdy-gurdy, Kalimba, Koto, Lyre, Mandolin, Maracas, Marimba, Mbira, Mellotron, Metallic Twang, Moog Oscillations, Ocarina, Persian Tar, Pipa, Precision Bass, Ragtime Piano, Rhodes Piano, Shamisen, Shredding Guitar, Sitar, Slide Guitar, Smooth Pianos, Spacey Synths, Steel Drum, Synth Pads, Tabla, TR-909 Drum Machine, Trumpet, Tuba, Vibraphone, Viola Ensemble, Warm Acoustic Guitar, Woodwinds, ...
  • 音乐类型:Acid Jazz, Afrobeat, Alternative Country, Baroque, Bengal Baul, Bhangra, Bluegrass, Blues Rock, Bossa Nova, Breakbeat, Celtic Folk, Chillout, Chiptune, Classic Rock, Contemporary R&B, Cumbia, Deep House, Disco Funk, Drum & Bass, Dubstep, EDM, Electro Swing, Funk Metal, G-funk, Garage Rock, Glitch Hop, Grime, Hyperpop, Indian Classical, Indie Electronic, Indie Folk, Indie Pop, Irish Folk, Jam Band, Jamaican Dub, Jazz Fusion, Latin Jazz, Lo-Fi Hip Hop, Marching Band, Merengue, New Jack Swing, Minimal Techno, Moombahton, Neo-Soul, Orchestral Score, Piano Ballad, Polka, Post-Punk, 60s Psychedelic Rock, Psytrance, R&B, Reggae, Reggaeton, Renaissance Music, Salsa, Shoegaze, Ska, Surf Rock, Synthpop, Techno, Trance, Trap Beat, Trip Hop, Vaporwave, Witch house, ...
  • 情绪/说明:Acoustic Instruments, Ambient, Bright Tones, Chill, Crunchy Distortion, Danceable, Dreamy, Echo, Emotional, Ethereal Ambience, Experimental, Fat Beats, Funky, Glitchy Effects, Huge Drop, Live Performance, Lo-fi, Ominous Drone, Psychedelic, Rich Orchestration, Saturated Tones, Subdued Melody, Sustained Chords, Swirling Phasers, Tight Groove, Unsettling, Upbeat, Virtuoso, Weird Noises, ...

以��只是一些示例,Lyria RealTime 还可以执行更多操作。使用您自己的提示进行实验!

最佳做法

  • 客户端应用必须实现强大的音频缓冲功能,以确保顺畅播放。这有助于考虑网络抖动和生成延迟时间的细微变化。
  • 有效提示:
    • 内容要描述得生动详细。使用形容词来描述情绪、类型和乐器。
    • 逐步迭代和调整。请尝试添加或修改元素,以更顺畅地转换音乐,而不是完全更改问题。
    • 尝试调整 WeightedPrompt 的权重,以影响新问题对正在生成的内容的影响力。

技术详情

本部分介绍了如何具体使用 Lyria RealTime 音乐生成功能。

规格

  • 输出格式:原始 16 位 PCM 音频
  • 采样率:48kHz
  • 声道:2(立体声)

控件

您可以通过发送包含以下内容的消息,实时影响音乐生成:

  • WeightedPrompt:用于描述音乐想法、类型、乐器、氛围或特征的文本字符串。您可以提供多个提示,以混合影响。如需详细了解如何以最佳方式提示 Lyra RealTime,请参阅上文
  • MusicGenerationConfig:音乐生成流程的配置,会影响输出音频的特征。参数包括:
    • guidance:(浮点数)范围:[0.0, 6.0]。默认值:4.0。 控制模型遵循提示的严格程度。引导力越高,用户遵循提示的可能性就越大,但过渡会更突然。
    • bpm:(int)范围:[60, 200]。 设置您希望生成的音乐的每分钟节拍数。您需要为模型停止/播放或重置上下文,以便它考虑新的 bpm。
    • density:(浮点数)范围:[0.0, 1.0]。 控制音符/音色的密度。值越低,音乐越稀疏;值越高,音乐越“繁忙”。
    • brightness:(浮点数)范围:[0.0, 1.0]。 调整色调质量。值越高,声音听起来越“明亮”,通常会强调较高的频率。
    • scale:(枚举)设置生成的音乐音阶(调和模式)。使用 SDK 提供的 Scale 枚举值。您需要为模型停止/播放或重置上下文,以便它考虑新的比例。
    • mute_bass:(布尔值)默认值:False。 控制模型是否降低输出的低音。
    • mute_drums:(布尔值)默认值:False。 控制模型输出是否会减少输出的鼓声。
    • only_bass_and_drums:(布尔值)默认值:False。 引导模型尝试仅输出低音和鼓声。
  • PlaybackControl:用于控制播放方面(例如播放、暂停、停止或重置上下文)的命令。

对于 bpmdensitybrightnessscale,如果未提供任何值,模型将根据您的初始提示来确定最佳值。

MusicGenerationConfig 中还可自定义一些更传统的参数,例如 temperature(0.0 到 3.0,默认值为 1.1)、top_k(1 到 1000,默认值为 40)和 seed(0 到 2147483647,默认随机选择)。

缩放枚举值

以下是该模型可以接受的所有比例值:

枚举值 比例 / 键
C_MAJOR_A_MINOR 大调 / 小调
D_FLAT_MAJOR_B_FLAT_MINOR D♭ 大调 / B♭ 小调
D_MAJOR_B_MINOR D 大调 / B 小调
E_FLAT_MAJOR_C_MINOR E♭ 大调 / C 小调
E_MAJOR_D_FLAT_MINOR E 大调 / C♯/D♭ 小调
F_MAJOR_D_MINOR F 大调 / D 小调
G_FLAT_MAJOR_E_FLAT_MINOR G♭ 大调 / E♭ 小调
G_MAJOR_E_MINOR G 大调 / E 小调
A_FLAT_MAJOR_F_MINOR A♭ 大调 / F 小调
A_MAJOR_G_FLAT_MINOR A 大调 / F♯/G♭ 小调
B_FLAT_MAJOR_G_MINOR B♭ 大调 / G 小调
B_MAJOR_A_FLAT_MINOR B 大调 / G♯/A♭ 小调
SCALE_UNSPECIFIED 默认 / 由模型决定

该模型能够引导演奏的音符,但无法区分相对键。因此,每个枚举都对应于相对的 major 和 minor。例如,C_MAJOR_A_MINOR 对应于钢琴上的所有白键,F_MAJOR_D_MINOR 对应于除降 B 外的所有白键。

限制

  • 仅器乐:模型仅生成器乐音乐。
  • 安全性:系统会使用安全过滤器检查提示。系统会忽略触发过滤条件的提示,在这种情况下,系统会在输出的 filtered_prompt 字段中写入说明。
  • 添加水印:根据我们的 Responsible AI 原则,输出音频始终会添加水印以进行识别。

后续步骤

如需查看更多代码示例和教程,请探索食谱