Gemini API ใช้ Lyria RealTime, เพื่อให้สิทธิ์เข้าถึงโมเดลการสร้างเพลงแบบสตรีมมิงแบบเรียลไทม์ที่ล้ำสมัย ซึ่งช่วยให้นักพัฒนาแอปสร้างแอปพลิเคชันที่ผู้ใช้สามารถสร้างเพลงบรรเลง กำกับเพลงอย่างต่อเนื่อง และเล่นเพลงบรรเลงแบบโต้ตอบได้
การสร้างเพลงด้วย Lyria RealTime ใช้การเชื่อมต่อแบบสตรีมมิงแบบสองทิศทางที่มีความหน่วงต่ำและคงอยู่ตลอดเวลาโดยใช้ WebSocket
หากต้องการสัมผัสประสบการณ์การใช้งาน Lyria RealTime ให้ลองใช้ใน AI Studio โดยใช้แอป Prompt DJ หรือ MIDI DJ
สร้างและควบคุมเพลง
Lyria RealTime ทำงานคล้ายกับ Live API โดยใช้ WebSocket เพื่อรักษาการสื่อสารแบบเรียลไทม์กับโมเดล
โค้ดต่อไปนี้แสดงวิธีสร้างเพลง
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': 'v1beta'})
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: "v1beta" ,
});
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() เพื่อเริ่ม หยุดชั่วคราว หยุด หรือรีเซ็ตเซสชัน
ควบคุมเพลงแบบเรียลไทม์
คุณสามารถควบคุมการสร้างเพลงแบบเรียลไทม์ได้โดยส่งพรอมต์และอัปเดตพารามิเตอร์การสร้างแบบเรียลไทม์
พรอมต์ 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 }
],
});
โปรดทราบว่าการเปลี่ยนเพลงของโมเดลอาจไม่ราบรื่นนักเมื่อเปลี่ยนพรอมต์อย่างมาก ดังนั้นเราขอแนะนำให้ใช้การเฟดเสียงโดยส่งค่า weight ระดับกลางไปยังโมเดล
อัปเดตการกำหนดค่า
คุณสามารถควบคุมการสร้างเพลงได้โดยอัปเดตพารามิเตอร์การสร้างเพลงแบบเรียลไทม์ คุณไม่สามารถอัปเดตพารามิเตอร์เพียงอย่างเดียวได้ แต่ต้องตั้งค่าการกำหนดค่าทั้งหมด มิเช่นนั้นระบบจะรีเซ็ตช่องอื่นๆ กลับเป็นค่าเริ่มต้น
เนื่องจากการอัปเดต 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 ทำได้มากกว่านี้ ลองใช้พรอมต์ของคุณเอง
แนวทางปฏิบัติแนะนำ
- แอปพลิเคชันไคลเอ็นต์ต้องใช้การบัฟเฟอร์เสียงที่มีประสิทธิภาพเพื่อให้เล่นได้อย่างราบรื่น ซึ่งจะช่วยชดเชยความกระวนกระวายของเครือข่ายและความแตกต่างเล็กน้อยในความหน่วงของการสร้าง
- การใช้พรอมต์อย่างมีประสิทธิภาพ
- สื่อความหมาย ใช้คำคุณศัพท์ที่อธิบายอารมณ์ แนวเพลง และเครื่องดนตรี
- ทำซ้ำและควบคุมทีละน้อย แทนที่จะเปลี่ยนพรอมต์ทั้งหมด ให้ลองเพิ่มหรือแก้ไของค์ประกอบเพื่อเปลี่ยนเพลงให้ราบรื่นยิ่งขึ้น
- ลองใช้ weight ใน
WeightedPromptเพื่อกำหนดว่าพรอมต์ใหม่จะส่งผลต่อการสร้างที่กำลังดำเนินอยู่อย่างไร
รายละเอียดทางเทคนิค
ส่วนนี้อธิบายรายละเอียดเกี่ยวกับวิธีใช้การสร้างเพลงด้วย Lyria RealTime
ข้อกำหนดเฉพาะ
- รูปแบบเอาต์พุต: Raw 16-bit PCM Audio
- อัตราการสุ่มตัวอย่าง: 48 kHz
- ช่องสัญญาณ: 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: (float) ช่วง:[0.0, 1.0]ปรับคุณภาพเสียง ค่าที่สูงจะสร้างเสียงที่ "สดใส" กว่า โดยโดยทั่วไปจะเน้นความถี่ที่สูงกว่าscale: (Enum) กำหนดสเกลเพลง (คีย์และโหมด) สำหรับการสร้าง ใช้ค่า enumScaleที่ SDK มีให้ คุณต้องหยุด/เล่นหรือรีเซ็ตบริบทเพื่อให้โมเดลพิจารณาสเกลใหม่mute_bass: (bool) ค่าเริ่มต้น:Falseควบคุมว่าโมเดลจะลดเสียงเบสของเอาต์พุตหรือไม่mute_drums: (bool) ค่าเริ่มต้น:Falseควบคุมว่าโมเดลจะลดเสียงกลองของเอาต์พุตหรือไม่only_bass_and_drums: (bool) ค่าเริ่มต้น:Falseควบคุมให้โมเดลพยายามสร้างเฉพาะเสียงเบสและเสียงกลองmusic_generation_mode: (Enum) ระบุให้โมเดลทราบว่าควรเน้น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
ค่า enum ของสเกล
ค่าสเกลทั้งหมดที่โมเดลยอมรับได้มีดังนี้
| ค่า enum | สเกล / คีย์ |
|---|---|
C_MAJOR_A_MINOR |
C เมเจอร์ / A ไมเนอร์ |
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 |
ค่าเริ่มต้น / โมเดลตัดสินใจ |
โมเดลสามารถแนะนำโน้ตที่เล่นได้ แต่ไม่แยกความแตกต่างระหว่างคีย์สัมพัทธ์ ดังนั้น enum แต่ละรายการจึงสอดคล้องกับทั้งเมเจอร์และไมเนอร์สัมพัทธ์ เช่น C_MAJOR_A_MINOR จะสอดคล้องกับคีย์สีขาวทั้งหมดของเปียโน และ F_MAJOR_D_MINOR จะสอดคล้องกับคีย์สีขาวทั้งหมด ยกเว้น B♭
ข้อจำกัด
- เฉพาะเพลงบรรเลง: โมเดลจะสร้างเฉพาะเพลงบรรเลง
- ความปลอดภัย: ระบบจะตรวจสอบพรอมต์โดยใช้ตัวกรองความปลอดภัย ระบบจะละเว้นพรอมต์ที่ทริกเกอร์ตัวกรอง ในกรณีนี้ ระบบจะเขียนคำอธิบายในช่อง
filtered_promptของเอาต์พุต - การใส่ลายน้ำ: ระบบจะใส่ลายน้ำในเสียงเอาต์พุตเสมอเพื่อระบุตามหลักการด้าน AI ที่มีความรับผิดชอบ ของเรา
ขั้นตอนถัดไป
- สร้างเพลงเต็มและแทร็กเสียงร้องด้วย Lyria 3.5
- ดูวิธีสร้างการสนทนาแบบหลายผู้พูดโดยใช้ โมเดล TTS แทนการสร้างเพลง
- ดูวิธีสร้างรูปภาพหรือวิดีโอ
- ดูวิธีที่ Gemini เข้าใจไฟล์เสียง แทนการสร้างเพลงหรือเสียง
- สนทนาแบบเรียลไทม์กับ Gemini โดยใช้ Live API
สำรวจ Cookbook เพื่อดูตัวอย่างโค้ดและบทแนะนำเพิ่มเติม