Генерация музыки с использованием Lyria RealTime

API Gemini, использующий Lyria RealTime , предоставляет доступ к современной модели генерации потоковой музыки в реальном времени. Он позволяет разработчикам создавать приложения, в которых пользователи могут интерактивно создавать, непрерывно управлять и исполнять инструментальную музыку.

Чтобы оценить возможности Lyria RealTime, попробуйте использовать её в AI Studio с помощью приложений Prompt DJ или MIDI DJ !

Как работает генерация музыки

В Lyria для генерации музыки в реальном времени используется постоянное, двунаправленное потоковое соединение с низкой задержкой на основе WebSocket .

Создание и управление музыкой

Lyria RealTime работает несколько похоже на Live API в том смысле, что использует веб-сокеты для поддержания связи с моделью в режиме реального времени. Тем не менее, это не совсем то же самое, поскольку вы не можете напрямую общаться с моделью, и вам необходимо использовать определенный формат для отправки ей запросов.

Следующий код демонстрирует, как генерировать музыку:

Python

В этом примере сессия Lyria RealTime инициализируется с помощью client.aio.live.music.connect() , затем отправляется начальный запрос с помощью 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(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

В этом примере сессия Lyria RealTime инициализируется с помощью client.live.music.connect() , затем отправляется начальный запрос с помощью session.setWeightedPrompts() вместе с начальной конфигурацией с помощью session.setMusicGenerationConfig , запускается генерация музыки с помощью session.play() и настраивается обратный вызов onMessage для обработки полученных аудиофрагментов.

import { GoogleGenAI } from "@google/genai";
import Speaker from "speaker";
import { Buffer } from "buffer";

const client = new GoogleGenAI({
  apiKey: GEMINI_API_KEY,
    apiVersion: "v1alpha" ,
});

async function main() {
  const speaker = new Speaker({
    channels: 2,       // stereo
    bitDepth: 16,      // 16-bit PCM
    sampleRate: 44100, // 44.1 kHz
  });

  const session = await client.live.music.connect({
    model: "models/lyria-realtime-exp",
    callbacks: {
      onmessage: (message) => {
        if (message.serverContent?.audioChunks) {
          for (const chunk of message.serverContent.audioChunks) {
            const audioBuffer = Buffer.from(chunk.data, "base64");
            speaker.write(audioBuffer);
          }
        }
      },
      onerror: (error) => console.error("music session error:", error),
      onclose: () => console.log("Lyria RealTime stream closed."),
    },
  });

  await session.setWeightedPrompts({
    weightedPrompts: [
      { text: "Minimal techno with deep bass, sparse percussion, and atmospheric synths", weight: 1.0 },
    ],
  });

  await session.setMusicGenerationConfig({
    musicGenerationConfig: {
      bpm: 90,
      temperature: 1.0,
      audioFormat: "pcm16",  // important so we know format
      sampleRateHz: 44100,
    },
  });

  await session.play();
}

main().catch(console.error);

Затем вы можете использовать session.play() , session.pause() , session.stop() и session.reset_context() для запуска, приостановки, остановки или сброса сессии.

Управляйте музыкой в ​​режиме реального времени.

Prompt Lyria RealTime

Пока поток активен, вы можете в любой момент отправлять новые сообщения WeightedPrompt , чтобы изменить генерируемую музыку. Модель плавно перейдет в соответствии с новым входным сигналом.

Запросы должны соответствовать правильному формату и включать text (сам запрос) и weight . weight может принимать любое значение, кроме 0 Обычно хорошей отправной точкой является значение 1.0 .

Python

  from google.genai import types

  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

  from google.genai import types

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

JavaScript

  await session.setMusicGenerationConfig({
    musicGenerationConfig: { 
      bpm: 120,
      density: 0.75,
      musicGenerationMode: MusicGenerationMode.QUALITY
    },
  });
  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-аудиофайл.
  • Частота дискретизации: 48 кГц
  • Каналы: 2 (стерео)

Элементы управления

На процесс создания музыки можно влиять в режиме реального времени, отправляя сообщения, содержащие:

  • WeightedPrompt : текстовая строка, описывающая музыкальную идею, жанр, инструмент, настроение или характеристику. Можно указать несколько подсказок, чтобы смешать различные влияния. Подробнее о том, как лучше всего настроить подсказки для Lyria RealTime, см. выше.
  • MusicGenerationConfig : Настройки процесса генерации музыки, влияющие на характеристики выходного аудиофайла. Параметры включают:
    • guidance : (float) Диапазон: [0.0, 6.0] . Значение по умолчанию: 4.0 . Определяет, насколько строго модель следует подсказкам. Более высокое значение guidance улучшает следование подсказкам, но делает переходы более резкими.
    • bpm : (int) Диапазон: [60, 200] . Задает желаемое количество ударов в минуту для генерируемой музыки. Вам необходимо остановить/воспроизвести или сбросить контекст модели, чтобы она учла новое значение bpm.
    • density : (float) Диапазон: [0.0, 1.0] . Управляет плотностью музыкальных нот/звуков. Более низкие значения создают более разреженную музыку; более высокие значения — более насыщенную.
    • brightness : (число с плавающей запятой) Диапазон: [0.0, 1.0] . Регулирует тембр звука. Более высокие значения обеспечивают более «яркое» звучание, как правило, с акцентом на высокие частоты.
    • scale : (Перечисление) Задает музыкальную гамму (тональность и лад) для генерации. Используйте значения перечисления Scale предоставляемые SDK. Вам необходимо остановить/воспроизвести или сбросить контекст для модели, чтобы учесть новую гамму.
    • mute_bass : (логическое значение) По умолчанию: False . Определяет, уменьшает ли модель низкие частоты выходных сигналов.
    • mute_drums : (логическое значение) По умолчанию: False . Определяет, уменьшает ли модель уровень барабанов на выходных данных.
    • only_bass_and_drums : (bool) По умолчанию: False . Направляет модель таким образом, чтобы она пыталась выдавать только бас и ударные.
    • music_generation_mode : (Перечисление) Указывает модели, следует ли ей сосредоточиться на QUALITY (значение по умолчанию) или DIVERSITY музыки. Также можно установить VOCALIZATION , чтобы модель генерировала вокализации как ещё один инструмент (добавляла их в качестве новых подсказок).
  • PlaybackControl : Команды для управления аспектами воспроизведения, такими как воспроизведение, пауза, остановка или сброс контекста.

Если значения для bpm , density , brightness и scale не указаны, модель определит оптимальный вариант на основе ваших первоначальных запросов.

В файле MusicGenerationConfig также можно настроить более классические параметры, такие как temperature (от 0,0 до 3,0, по умолчанию 1,1), top_k (от 1 до 1000, по умолчанию 40) и начальное значение генератора случайных seed (от 0 до 2 147 483 647, выбирается случайным образом по умолчанию).

Значения перечисления масштаба

Вот все значения масштаба, которые может принимать модель:

Значение перечисления Масштаб / Ключ
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 Си мажор / Соль♯/Ля♭ минор
SCALE_UNSPECIFIED По умолчанию / Модель определяет

Модель способна направлять воспроизводимые ноты, но не различает относительные тональности. Таким образом, каждый перечислимый тип соответствует как мажорной, так и минорной тональности. Например, C_MAJOR_A_MINOR будет соответствовать всем белым клавишам фортепиано, а F_MAJOR_D_MINOR — всем белым клавишам, кроме си-бемоль.

Ограничения

  • Только инструментальная музыка: Модель генерирует только инструментальную музыку.
  • Безопасность: Запросы проверяются фильтрами безопасности. Запросы, вызывающие срабатывание фильтров, будут проигнорированы, в этом случае в поле filtered_prompt выходных данных будет записано пояснение.
  • Водяные знаки: Выходной аудиофайл всегда помечается водяным знаком для идентификации в соответствии с нашими принципами ответственного использования ИИ .

Что дальше?

В разделе «Сборник рецептов» вы найдете больше примеров кода и обучающих материалов.