Gemini API ซึ่งใช้ Lyria RealTime ช่วยให้เข้าถึงโมเดลการสร้างเพลงแบบสตรีมมิงแบบเรียลไทม์ที่ล้ำสมัย ซึ่งช่วยให้นักพัฒนาแอปสร้างแอปพลิเคชันที่ผู้ใช้ สามารถสร้างแบบโต้ตอบ ควบคุมอย่างต่อเนื่อง และเล่นดนตรี บรรเลงได้
การสร้างเพลงแบบเรียลไทม์ของ Lyria ใช้การเชื่อมต่อสตรีมมิงแบบ 2 ทิศทางที่มีความหน่วงต่ำอย่างต่อเนื่องโดยใช้ WebSocket
หากต้องการสัมผัสสิ่งที่สร้างได้โดยใช้ Lyria RealTime ให้ลองใช้ใน AI Studio โดยใช้แอป Prompt DJ หรือ MIDI DJ
สร้างและควบคุมเพลง
Lyria RealTime ทำงานคล้ายกับ Live API โดยใช้ WebSockets เพื่อรักษาการสื่อสารแบบเรียลไทม์กับโมเดล
โค้ดต่อไปนี้แสดงวิธีสร้างเพลง
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.setWeightedPrompts({
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 ใช้พรอมต์ที่มีการถ่วงน้ำหนักเพื่อผสมผสานแนวเพลง เครื่องดนตรี และอารมณ์แบบไดนามิก ดูข้อมูลเกี่ยวกับกลยุทธ์การกำหนดพรอมต์ คำศัพท์แท็กคีย์เวิร์ด และตัวอย่างพรอมต์แบบเต็มได้ที่คู่มือการใช้พรอมต์ของ Lyria
แนวทางปฏิบัติแนะนำ
- แอปพลิเคชันไคลเอ็นต์ต้องใช้การบัฟเฟอร์เสียงที่มีประสิทธิภาพเพื่อให้การเล่นเป็นไปอย่างราบรื่น ซึ่งจะช่วยอธิบายถึงความผันผวนของเครือข่ายและความแตกต่างเล็กน้อยใน เวลาในการตอบสนองของการสร้าง
- การใช้พรอมต์อย่างมีประสิทธิภาพ
- สื่อความหมาย ใช้คำคุณศัพท์ที่อธิบายอารมณ์ แนวเพลง และเครื่องดนตรี
- ทำซ้ำและค่อยๆ ปรับเปลี่ยน แทนที่จะเปลี่ยนพรอมต์ทั้งหมด ให้ลองเพิ่มหรือแก้ไของค์ประกอบเพื่อเปลี่ยนเพลงให้ราบรื่นยิ่งขึ้น
- ทดลองใช้ค่าถ่วงน้ำหนักใน
WeightedPromptเพื่อกำหนดว่าพรอมต์ใหม่จะส่งผลต่อการสร้างที่กำลังดำเนินการอยู่มากน้อยเพียงใด
รายละเอียดทางเทคนิค
ส่วนนี้จะอธิบายรายละเอียดเกี่ยวกับวิธีใช้การสร้างเพลงแบบเรียลไทม์ของ Lyria
ข้อกำหนดเฉพาะ
- รูปแบบเอาต์พุต: เสียง PCM 16 บิตแบบดิบ
- อัตราการสุ่มตัวอย่าง: 48 kHz
- ช่องสัญญาณ: 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) ตั้งค่าบันไดเสียง (คีย์และโหมด) สำหรับการสร้าง ใช้Scaleค่า enum ที่ 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 ถึง 2147483647 โดยระบบจะเลือกแบบสุ่ม
โดยค่าเริ่มต้น) ได้ใน MusicGenerationConfig
ค่า Enum ของมาตราส่วน
ค่าสเกลทั้งหมดที่โมเดลยอมรับได้มีดังนี้
| ค่า enum | สเกล / คีย์ |
|---|---|
C_MAJOR_A_MINOR |
คีย์ C เมเจอร์ / A ไมเนอร์ |
D_FLAT_MAJOR_B_FLAT_MINOR |
D♭ เมเจอร์ / B♭ ไมเนอร์ |
D_MAJOR_B_MINOR |
D major / B minor |
E_FLAT_MAJOR_C_MINOR |
E♭ เมเจอร์ / C ไมเนอร์ |
E_MAJOR_D_FLAT_MINOR |
อีเมเจอร์ / ซีชาร์ป/ดีแฟลตไมเนอร์ |
F_MAJOR_D_MINOR |
F เมเจอร์ / D ไมเนอร์ |
G_FLAT_MAJOR_E_FLAT_MINOR |
คีย์ G♭ เมเจอร์ / คีย์ E♭ ไมเนอร์ |
G_MAJOR_E_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♭ เมเจอร์ / 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
ดูตัวอย่างโค้ดและบทแนะนำเพิ่มเติมได้ในตำราอาหาร