Gemini API ที่ใช้ Lyria RealTime จะให้สิทธิ์เข้าถึงโมเดลการสร้างเพลงแบบสตรีมมิงแบบเรียลไทม์ที่ล้ำสมัย ซึ่งช่วยให้นักพัฒนาแอปสามารถสร้างแอปพลิเคชันที่ผู้ใช้สามารถโต้ตอบ ควบคุม และเล่นดนตรีด้วยเครื่องดนตรีได้อย่างต่อเนื่อง
หากต้องการสัมผัสประสบการณ์การสร้างเพลงด้วย Lyria RealTime ให้ลองใช้ AI Studio โดยใช้แอป Prompt DJ หรือ MIDI DJ
วิธีการทำงานของการสร้างเพลง
การสร้างเพลงแบบเรียลไทม์ของ Lyria ใช้การเชื่อมต่อสตรีมมิงแบบ 2 ทิศทางแบบถาวรที่มีเวลาในการตอบสนองต่ำโดยใช้ WebSocket
สร้างและควบคุมเพลง
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(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()
เพื่อเริ่ม หยุดชั่วคราว หยุด หรือรีเซ็ตเซสชัน
ควบคุมเพลงแบบเรียลไทม์
Prompt Lyria RealTime
ขณะสตรีมทำงานอยู่ คุณสามารถส่งข้อความ WeightedPrompt
ใหม่ได้ทุกเมื่อเพื่อเปลี่ยนเพลงที่สร้างขึ้น โมเดลจะเปลี่ยนตามข้อมูลใหม่อย่างราบรื่น
พรอมต์ต้องเป็นไปตามรูปแบบที่ถูกต้องโดยมี text
(พรอมต์จริง) และ weight
weight
จะเป็นค่าใด���็ได้ยกเว้น 0
1.0
มักเป็นจุดเริ่มต้นที่ดี
Python
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
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
ข้อกำหนดเฉพาะ
- รูปแบบเอาต์พุต: เสียง PCM 16 บิตดิบ
- อัตราการสุ่มตัวอย่าง: 48 kHz
- ช่องสัญญาณ: 2 (สเตอริโอ)
การควบคุม
คุณสร้างเพลงแบบเรียลไทม์ได้โดยส่งข้อความที่มีข้อมูลต่อไปนี้
WeightedPrompt
: สตริงข้อความที่อธิบายแนวคิดทางดนตรี แนวเพลง เครื่องดนตรี อารมณ์ หรือลักษณะ คุณอาจระบุพรอมต์หลายรายการเพื่อผสมผสานอิทธิพล ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีเรียกใช้ Lyria RealTime ที่ดีที่สุดได้ด้านบนMusicGenerationConfig
: การกําหนดค่าสําหร���บกระบวนการสร้างเพลง ซึ่งส่งผลต่อลักษณะของเสียงเอาต์พุต) พารามิเตอร์ได้แก่guidance
: (float) ช่วง:[0.0, 6.0]
ค่าเริ่มต้น:4.0
ควบคุมความเข้มงวดที่โมเดลจะปฏิบัติตามพรอมต์ คำแนะนำที่สูงขึ้นจะช่วยปรับปรุงการปฏิบัติตามพรอมต์ แต่จะทำให้การเปลี่ยนภาพกะทันหันมากขึ้นbpm
: (int) ช่วง:[60, 200]
ตั้งค่าจังหวะต่อนาทีที่ต้องการสำหรับเพลงที่สร้างขึ้น คุณต้องหยุด/เล่นหรือรีเซ็ตบริบทของโมเดลเพื่อให้พิจารณา bpm ใหม่density
: (float) ช่วง:[0.0, 1.0]
ควบคุมความหนาแน่นของโน้ต/เสียงเพลง ค่าที่ต่ำจะให้เสียงเพลงที่เบาบางกว่า ส่วนค่าที่สูงจะให้เสียงเพลงที่ "ซับซ้อน" กว่าbrightness
: (float) ช่วง:[0.0, 1.0]
ปรับคุณภาพโทนเสียง ค่าที่สูงขึ้นจะให้เสียงที่ "สดใส" ขึ้น โดยมักจะเน้นความถี่ที่สูงขึ้นscale
: (Enum) ตั้งค่าสเกลเพลง (คีย์และโห��ด) สำหรับการสร้างขึ้น ใช้Scale
ค่า enum ที่ 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 ถึง 1,000, ค่าเริ่มต้น 40) และ seed
(0 ถึง 2,147,483,647 ซึ่งระบบจะสุ่มเลือกโดยค่าเริ่มต้น) ก็สามารถกําหนดค่าได้ใน MusicGenerationConfig
ปรับขนาดค่า enum
ค่าสเกลทั้งหมดที่โมเดลยอมรับมีดังนี้
ค่า enum | สเกล / คีย์ |
---|---|
C_MAJOR_A_MINOR |
ไมเนอร์ / ไมเนอร์ |
D_FLAT_MAJOR_B_FLAT_MINOR |
D♭ เมเจอร์ / B♭ ไมเนอร์ |
D_MAJOR_B_MINOR |
ดีเมเจอร์ / บีไมเนอร์ |
E_FLAT_MAJOR_C_MINOR |
ไมเนอร์ E♭ / ไมเนอร์ C |
E_MAJOR_D_FLAT_MINOR |
ไมเนอร์ E หลัก / C♯/D♭ |
F_MAJOR_D_MINOR |
ฟา เมเจอร์ / ดีไมเนอร์ |
G_FLAT_MAJOR_E_FLAT_MINOR |
จี♭ เมเจอร์ / อี♭ ไมเนอร์ |
G_MAJOR_E_MINOR |
จีเมเจอร์ / อีไมเนอร์ |
A_FLAT_MAJOR_F_MINOR |
A♭ เมเจอร์ / F ไมเนอร์ |
A_MAJOR_G_FLAT_MINOR |
ไมเนอร์ A / F♯/G♭ |
B_FLAT_MAJOR_G_MINOR |
บันไดเสียง B♭ ใหญ่ / จี ไมเนอร์ |
B_MAJOR_A_FLAT_MINOR |
บันไดเสียงเมเจอร์ บี / บันไดเสียงไมเนอร์ จีชาร์ป/เอบแฟลต |
SCALE_UNSPECIFIED |
ค่าเริ่มต้น / โมเดลเป็นผู้ตัดสินใจ |
โมเดลนี้สามารถแนะนำโน้ตที่เล่นได้ แต่จะแยกแยะระหว่างคีย์สัมพัทธ์ไม่ได้ ดังนั้น แต่ละ enum จึงสอดคล้องกับทั้งระดับหลักแ��ะรองที่เกี่ยวข้อง เช่น C_MAJOR_A_MINOR
จะสอดคล้องกับแป้นสีขาวทั้งหมดของเปียโน และ F_MAJOR_D_MINOR
จะสอดคล้องกับแป้นสีขาวทั้งหมดยกเว้น B แฟลต
ข้อจำกัด
- เฉพาะเพลงบรรเลง: โมเดลจะสร้างเฉพาะเพลงบรรเลง
- ความปลอดภัย: ตัวกรองความปลอดภัยจะตรวจสอบพรอมต์ ระบบจะไม่สนใจพรอมต์ที่ทริกเกอร์ตัวกรอง ซึ่งในกรณีนี้ ระบบจะเขียนคำอธิบายในช่อง
filtered_prompt
ของเอาต์พุต - ลายน้ำ: ระบบจะใส่ลายน้ำในเสียงเอาต์พุตเสมอเพื่อระบุตัวตนตามหลักการAI อย่างมีความรับผิดชอบ
ขั้นตอนถัดไป
- ดูวิธีสร้างการสนทนาที่มีผู้พูดหลายคนโดยใช้รูปแบบ TTS แทนเพลง
- ดูวิธีสร้างรูปภาพหรือวิดีโอ
- แทนที่จะสร้างเพลงหรือเสียง ให้ดูวิธีที่ Gemini สามารถทำความเข้าใจไฟล์เสียง
- สนทนากับ Gemini แบบเรียลไทม์โดยใช้ Live API
ดูตัวอย่างโค้ดและบทแนะนำเพิ่มเติมในตำรา