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выходных данных будет записано пояснение. - Водяные знаки: Выходной аудиофайл всегда помечается водяным знаком для идентификации в соответствии с нашими принципами ответственного использования ИИ .
Что дальше?
- Вместо музыки научитесь создавать многоголосый диалог с помощью моделей синтеза речи (TTS) .
- Узнайте, как создавать изображения или видео .
- Вместо того чтобы создавать музыку или аудио, узнайте, как Близнецы могут понимать аудиофайлы .
- Общайтесь с Gemini в режиме реального времени, используя Live API .
В разделе «Сборник рецептов» вы найдете больше примеров кода и обучающих материалов.