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(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
В этом примере сеанс Lyria RealTime инициализируется с помощью client.live.music.connect()
, затем отправляется начальный запрос с помощью 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
(фактическая подсказка) и 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 }
],
});
Обратите внимание, что переходы модели могут быть немного резкими при резком изменении подсказок, поэтому рекомендуется реализовать своего рода плавный переход, отправив модели промежуточные значения веса.
Обновить конфигурацию
Вы также можете обновлять параметры генерации музыки в реальном времени. Вы не можете просто обновить параметр, вам нужно задать всю конфигурацию, иначе другие поля будут сброшены до значений по умолчанию.
Поскольку обновление bpm или масштаба — это радикальное изменение для модели, вам также нужно будет указать ей сбросить контекст с помощью reset_context()
чтобы учесть новую конфигурацию. Это не остановит поток, но это будет сложный переход. Вам не нужно делать этого для других параметров.
Питон
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.
Технические характеристики
- Формат выходного сигнала: Raw 16-битный PCM Audio
- Частота дискретизации: 48 кГц
- Каналы: 2 (стерео)
Управление
На создание музыки можно влиять в режиме реального времени, отправляя сообщения, содержащие:
-
WeightedPrompt
: Текстовая строка, описывающая музыкальную идею, жанр, инструмент, настроение или характеристику. Несколько подсказок могут быть потенциально предоставлены для смешивания влияний. См. выше для получения более подробной информации о том, как лучше всего подсказать Lyria 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
: (Enum) Устанавливает музыкальную шкалу (Key и Mode) для генерации. Используйте значения перечисленияScale
, предоставленные SDK. Вам необходимо остановить/воспроизвести или сбросить контекст для модели, чтобы учесть новую шкалу. -
mute_bass
: (bool) По умолчанию:False
. Управляет тем, будет ли модель уменьшать басы выходов. -
mute_drums
: (bool) По умолчанию:False
. Управляет тем, уменьшает ли выходы модели барабаны. -
only_bass_and_drums
: (bool) По умолчанию:False
. Управляйте моделью, чтобы попытаться вывести только бас и барабаны.
-
-
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_MAJOR_A_FLAT_MINOR | Си мажор / Соль♯/Ля♭ минор |
SCALE_UNSPECIFIED | По умолчанию / Модель решает |
Модель способна направлять проигрываемые ноты, но не различает относительные тональности. Таким образом, каждое перечисление соответствует как относительному мажору, так и минору. Например, C_MAJOR_A_MINOR
будет соответствовать всем белым клавишам фортепиано, а F_MAJOR_D_MINOR
будет всем белым клавишам, кроме B-бемоль.
Ограничения
- То��ь��о инструментальная музыка: модель генерирует только инструментальную музыку.
- Безопасность: Подсказки проверяются фильтрами безопасности. Подсказки, вызывающие фильтры, будут игнорироваться, и в этом случае в поле
filtered_prompt
вывода будет записано пояснение. - Водяные знаки: Выходной аудиофайл всегда маркируется водяными знаками для идентификации в соответствии с нашими принципами ответственного ИИ .
Что дальше?
- Вместо музыки научитесь генерировать многоговорящую беседу, используя модели TTS ,
- Узнайте, как создавать изображения или видео ,
- Вместо того, чтобы генерировать музыку или аудио, узнайте, как Gemini может понимать аудиофайлы ,
- Общайтесь с Gemini в режиме реального времени, используя Live API .
Изучите «Кулинарную книгу» для получения дополнительных примеров кода и учебных пособий.