API Gemini, использующий Lyria RealTime , предоставляет доступ к современной модели потоковой генерации музыки в режиме реального времени. Он позволяет разработчикам создавать приложения, в которых пользователи могут интерактивно создавать, непрерывно управлять и исполнять инструментальную музыку.
Чтобы увидеть, что можно создать с помощью Lyria RealTime, попробуйте использовать AI Studio с приложениями Prompt DJ или MIDI DJ !
Как работает генерация музыки
Генерация музыки Lyria RealTime использует постоянное, двунаправленное потоковое соединение с малой задержкой с использованием WebSocket .
Генерируйте и управляйте музыкой
Lyria RealTime работает примерно так же, как Live API, в том смысле, что использует веб-сокеты для поддержания связи с моделью в режиме реального времени. Однако это не совсем то же самое, поскольку вы не можете напрямую взаимодействовать с моделью и должны использовать определённый формат для отправки ей запросов.
Следующий код демонстрирует, как генерировать музыку:
Питон
В этом примере сеанс 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
обычно является хорошей отправной точкой.
Питон
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 }
],
});
Обратите внимание, что переходы модели могут быть немного резкими при резком изменении подсказок, поэтому рекомендуется реализовать своего рода плавный переход, отправив модели промежуточные значения веса.
Обновить конфигурацию
Вы также можете обновлять параметры генерации музыки в режиме реального времени. Нельзя просто обновить параметр, необходимо настроить всю конфигурацию, иначе остальные поля будут сброшены к значениям по умолчанию.
Поскольку обновление частоты ударов в минуту или масштаба — это радикальное изменение для модели, вам также потребуется указать ей сбросить контекст с помощью reset_context()
чтобы учесть новую конфигурацию. Это не остановит поток, но будет сложным переходом. Для других параметров это делать не нужно.
Питон
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.
Технические характеристики
- Формат вывода: Raw 16-битный PCM Audio
- Частота дискретизации: 48 кГц
- Каналы: 2 (стерео)
Элементы управления
На генерацию музыки можно влиять в режиме реального времени, отправляя сообщения, содержащие:
-
WeightedPrompt
: текстовая строка, описывающая музыкальную идею, жанр, инструмент, настроение или характеристику. Для комбинирования влияний можно использовать несколько подсказок. Подробнее о том, как лучше всего использовать подсказки для Lyria RealTime, см. выше. -
MusicGenerationConfig
: конфигурация процесса генерации музыки, влияющая на характеристики выходного звука. Параметры включают в себя:-
guidance
: (плавающее число) Диапазон:[0.0, 6.0]
. По умолчанию:4.0
. Управляет строгостью следования модели подсказкам. Более сильное руководство улучшает следование подсказкам, но делает переходы более резкими. -
bpm
: (целое число) Диапазон:[60, 200]
. Задаёт желаемое количество ударов в минуту для генерируемой музыки. Вам необходимо остановить/воспроизвести или сбросить контекст модели, чтобы она учитывала новое значение bpm. -
density
: (плавающее число) Диапазон:[0.0, 1.0]
. Управляет плотностью музыкальных нот/звуков. Более низкие значения создают более разреженную музыку; более высокие значения создают более «загруженную» музыку. -
brightness
: (плавающее число) Диапазон:[0.0, 1.0]
. Регулирует качество тона. Более высокие значения обеспечивают более «яркое» звучание, обычно подчёркивая высокие частоты. -
scale
: (перечисление) Задаёт музыкальную гамму (тональность и лад) для генерации. Используйте значения перечисленияScale
, предоставляемые SDK. Вам необходимо остановить/воспроизвести или сбросить контекст модели, чтобы учесть новую гамму. -
mute_bass
: (bool) Значение по умолчанию:False
. Управляет тем, подавляет ли модель басы на выходах. -
mute_drums
: (bool) Значение по умолчанию:False
. Управляет тем, подавляет ли выходной сигнал модели барабаны. -
only_bass_and_drums
: (bool) По умолчанию:False
. Управляет моделью так, чтобы она выводила только бас и барабаны. -
music_generation_mode
: (перечисление) указывает модели, следует ли ей сосредоточиться наQUALITY
(значение по умолчанию) илиDIVERSITY
музыки. Также можно установитьVOCALIZATION
, чтобы модель могла генерировать вокализации как отдельный инструмент (добавлять их как новые помпы).
-
-
PlaybackControl
: команды для управления аспектами воспроизведения, такими как воспроизведение, пауза, остановка или сброс контекста.
Если для bpm
, density
, brightness
и scale
значения не указаны, модель сама определит наилучший вариант в соответствии с вашими первоначальными подсказками.
Более классические параметры, такие как temperature
(от 0,0 до 3,0, по умолчанию 1,1), top_k
(от 1 до 1000, по умолчанию 40) и seed
(от 0 до 2 147 483 647, по умолчанию выбирается случайным образом), также настраиваются в MusicGenerationConfig
.
Масштабировать значения перечисления
Вот все значения шкалы, которые может принять модель:
Значение перечисления | Шкала / Ключ |
---|---|
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♭ мажор / соль минор |
B_MAJOR_A_FLAT_MINOR | Си мажор / соль♯/ля♭ минор |
SCALE_UNSPECIFIED | По умолчанию / Модель решает |
Модель способна управлять исполняемыми нотами, но не различает относительные тональности. Таким образом, каждое перечисление соответствует как относительному мажору, так и относительному минору. Например, C_MAJOR_A_MINOR
будет соответствовать всем белым клавишам фортепиано, а F_MAJOR_D_MINOR
— всем белым клавишам, кроме си-бемоль.
Ограничения
- Только инструментальная музыка: модель генерирует только инструментальную музыку.
- Безопасность: запросы проверяются фильтрами безопасности. Запросы, вызывающие срабатывание фильтров, будут игнорироваться, и в этом случае в поле
filtered_prompt
вывода будет записано пояснение. - Водяные знаки: Выходной аудиофайл всегда маркируется водяными знаками для идентификации в соответствии с нашими принципами ответственного ИИ .
Что дальше?
- Вместо музыки научитесь генерировать многоговорящую беседу, используя модели TTS .
- Узнайте, как создавать изображения или видео ,
- Вместо того, чтобы генерировать музыку или аудио, узнайте, как Gemini может понимать аудиофайлы ,
- Общайтесь с Gemini в режиме реального времени, используя Live API .
Дополнительные примеры кода и учебные пособия можно найти в « Кулинарной книге» .