Fun-Music menghasilkan lagu lengkap dengan vokal pria atau wanita dalam bahasa Tiongkok atau Inggris berdasarkan prompt teks yang menggambarkan gaya dan suasana musik, atau dari lirik kustom.
Model ini saat ini dalam pratinjau terbatas. Ajukan akses di Model Gallery sebelum digunakan. Model ini hanya tersedia di Wilayah China (Beijing).
Ikhtisar
Fun-Music adalah model pembuatan musik end-to-end. Berikan deskripsi dalam bahasa alami atau lirik kustom, dan model akan mengembalikan lagu lengkap:
prompt: Jelaskan gaya musik, suasana, suasana hati, dan preferensi instrumen. Model akan menulis lirik dan menghasilkan lagu secara otomatis.lyrics: Berikan lirik kustom. Model akan mengaransemen dan membawakan lagu berdasarkan lirik Anda.gender: Pilih vokal pria atau wanita (hanya untuk fun-music-v1).Output streaming dan non-streaming
Output audio MP3 dan WAV
Perbedaan antara kedua model
Fun-Music menyediakan dua model dengan perbedaan sebagai berikut:
Fitur | fun-music-v1 | fun-music-preview |
prompt | Wajib (minimal salah satu dari | Wajib |
lyrics | Opsional jika | Opsional; jika diberikan, |
Jenis kelamin vokal (gender) | Didukung | Tidak didukung |
Format keluaran audio
Tetapkan parameter format untuk menentukan format output:
Format | Karakteristik | Kasus penggunaan |
| Kompresi lossy, ukuran file kecil | Streaming, pemutaran online, penyimpanan |
| Format lossless, ukuran file lebih besar | Pascaproduksi, pemutaran berkualitas tinggi |
Prasyarat
Kunci API. Untuk informasi selengkapnya, lihat Dapatkan Kunci API.
Kunci API dikonfigurasi sebagai variabel lingkungan (disarankan):
export DASHSCOPE_API_KEY="sk-xxx"
Ganti {WorkspaceId} dalam contoh kode dengan ID ruang kerja aktual Anda. Untuk informasi selengkapnya, lihat Manajemen ruang kerja.
Mulai cepat
Contoh berikut menunjukkan tiga kasus penggunaan umum.
Buat lagu dari prompt
Teruskan parameter prompt dengan deskripsi gaya dan suasana musik. Model akan menulis lirik dan mengaransemen lagu.
curl
curl -X POST 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/music/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "fun-music-v1",
"input": {
"prompt": "Fresh summer folk song, acoustic guitar and harmonica accompaniment, upbeat tempo, suitable as background music for travel vlogs",
"gender": "female"
}
}'Python
import requests
import os
import json
api_key = os.getenv("DASHSCOPE_API_KEY")
url = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/music/generation"
response = requests.post(url,
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
json={
"model": "fun-music-v1",
"input": {
"prompt": "Fresh summer folk song, accompanied by acoustic guitar and harmonica, upbeat tempo, suitable as travel vlog background music",
"gender": "female"
}
}
)
result = response.json()
audio_url = result["output"]["audio"]["url"]
print(f"Music generated successfully! Download URL: {audio_url}")Java
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class FunMusicDemo {
public static void main(String[] args) throws Exception {
String apiKey = System.getenv("DASHSCOPE_API_KEY");
String endpoint = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/music/generation";
HttpURLConnection conn = (HttpURLConnection) new URL(endpoint).openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Bearer " + apiKey);
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
String jsonBody = "{\"model\":\"fun-music-v1\","
+ "\"input\":{\"prompt\":\"Fresh summer folk song, accompanied by acoustic guitar and harmonica, upbeat tempo, suitable as travel vlog background music\","
+ "\"gender\":\"female\"}}";
try (OutputStream os = conn.getOutputStream()) {
os.write(jsonBody.getBytes("UTF-8"));
}
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
System.out.println(sb.toString());
}
}
}Buat lagu dari lirik
Teruskan parameter lyrics dengan lirik Anda. Model akan mengaransemen dan menghasilkan lagu berdasarkan lirik tersebut.
curl
curl -X POST 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/music/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "fun-music-v1",
"input": {
"lyrics": "[verse]\nMorning sunlight streams through the curtains,\nThe aroma of coffee fills the room.\nOpening a book left unfinished yesterday,\nTime quietly slips away like this.\n\n[chorus]\nTake it slow, no need to rush,\nLife should be this easygoing.\nToss all the worries into the wind,\nEmbrace every sunny day and rainy season.",
"gender": "female"
}
}'Python
import requests
import os
import json
api_key = os.getenv("DASHSCOPE_API_KEY")
url = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/music/generation"
lyrics = """[verse]
Morning sunlight filters through the curtains,
The aroma of coffee fills the room.
Opening the book left unfinished yesterday,
Time quietly slips away.
[chorus]
Take it slow, no rush,
Life should be this easy.
Toss your worries into the wind,
Embrace every sunny day and rainy season."""
response = requests.post(url,
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
json={
"model": "fun-music-v1",
"input": {
"lyrics": lyrics,
"gender": "female"
}
}
)
result = response.json()
audio_url = result["output"]["audio"]["url"]
print(f"Music generated successfully! Download URL: {audio_url}")Java
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class FunMusicLyricsDemo {
public static void main(String[] args) throws Exception {
String apiKey = System.getenv("DASHSCOPE_API_KEY");
String endpoint = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/music/generation";
HttpURLConnection conn = (HttpURLConnection) new URL(endpoint).openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Bearer " + apiKey);
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
String lyrics = "[verse]\\nMorning sunlight filters through the curtains,\\n"
+ "The aroma of coffee fills the room.\\n"
+ "Opening the book left unfinished yesterday,\\n"
+ "Time quietly slips away.\\n\\n"
+ "[chorus]\\nTake it slow, no rush,\\n"
+ "Life should be this easy.\\n"
+ "Toss your worries into the wind,\\n"
+ "Embrace every sunny day and rainy season.";
String jsonBody = "{\"model\":\"fun-music-v1\","
+ "\"input\":{\"lyrics\":\"" + lyrics + "\","
+ "\"gender\":\"female\"}}";
try (OutputStream os = conn.getOutputStream()) {
os.write(jsonBody.getBytes("UTF-8"));
}
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
System.out.println(sb.toString());
}
}
}Panduan komposisi
Prompt
prompt adalah parameter utama untuk menggambarkan maksud pembuatan musik Anda. Model akan menulis lirik, mengaransemen musik, dan menghasilkan lagu berdasarkan deskripsi Anda.
Kiat penulisan: Gunakan deskripsi spesifik tentang suasana hati, suasana, dan preferensi instrumen untuk hasil yang lebih baik.
Disarankan:
Piano melankolis, kerinduan malam hujanTidak disarankan:
Musik melankolis(terlalu samar)
Dalam prompt Anda, tentukan instrumen (misalnya "iringan piano", "solo saksofon", atau "guzheng dan seruling bambu"), tempo (misalnya "cepat", "lambat", atau "ketukan drum padat"), dan nada emosional (misalnya "hangat", "melankolis", "intens", atau "santai"). Model akan mengikuti deskripsi ini seakurat mungkin. Prompt yang lebih spesifik menghasilkan output yang lebih akurat.
Contoh prompt berdasarkan gaya
Gaya | Contoh prompt |
Folk | A warm, healing folk song with acoustic guitar, telling a story of a lazy afternoon in a cafe |
Traditional Chinese | A traditional Chinese song with guzheng and bamboo flute, evoking misty landscapes and a farewell between wanderers |
Rock | Intense rock with distorted electric guitar, dense drum beats, singing about youthful rebellion and freedom |
Ballad | A slow ballad with piano accompaniment, quiet and deep, with a touch of melancholy, expressing longing and memories |
Rap | A hip-hop rap with a sharp beat, 808 bass drums, full of street energy, telling stories of city life |
Children's song | A cheerful children's song with xylophone and hand drums, simple and catchy rhythm, teaching kids about nature |
Lirik
Parameter lyrics menerima lirik Anda. Model akan mengaransemen lagu yang mengikuti lirik tersebut secara ketat. Gunakan tag bagian lagu untuk mengontrol susunan bagian lagu.
Tag bagian lagu
Tag | Deskripsi |
| Intro, menetapkan suasana |
| Verse, menceritakan kisah |
| Chorus, puncak emosional |
| Bridge, mengubah perspektif |
| Outro, memudar perlahan |
Contoh lirik
[intro]
Piano keys fall gently, the evening breeze is cool.
That summer, heartbeats quietly grew warm.
[verse]
By the classroom window, sunlight slants across your profile.
Borrowing half an eraser, fingertips spark an electric line.
On the way home from school, bicycle bells chase the clouds.
You said the future is far away, but I wanted to walk to the end.
[chorus]
Youth is an unopened letter, filled with brave promises.
Even if the world flickers bright and dark, with you I see the light.
Love is like the sweet rain of early summer, soaking dreams without fear of distance.
We run toward tomorrow with laughter, hand in hand, never looking back.
[bridge]
Later, wind and rain scattered the paper umbrella, silence replaced the answers.
But the song in my heart is unfinished, still waiting for "don't drift apart."
[chorus]
Youth is an unopened letter, filled with brave promises.
Even if the world flickers bright and dark, with you I see the light.
Love is like the sweet rain of early summer, soaking dreams without fear of distance.
We run toward tomorrow with laughter, hand in hand, never looking back.
[outro]
The piano fades, starlight paves the long street.
The story is unfinished, the next page is still passionate.Persyaratan penulisan
Orisinalitas: Jangan menyalin atau meniru lirik, skema rima, atau frasa khas dari lagu yang telah dipublikasikan.
Keamanan konten: Jangan sertakan konten yang terkait politik, kekerasan, pornografi, vulgaritas, horor, atau narkoba. Pertahankan konten yang positif dan emosional secara autentik.
Bahasa: Hanya lirik berbahasa Tiongkok dan Inggris yang didukung. Bahasa Jepang, Korea, dan bahasa lain tidak didukung.
Jenis kelamin vokal (gender)
Parameter gender memilih jenis kelamin vokal. Hanya didukung oleh model fun-music-v1. Nilai default-nya adalah female.
female: Vokal wanita (default)male: Vokal pria
Fitur lanjutan
Output streaming
Mode streaming mengembalikan data audio secara progresif saat dihasilkan, yang ideal untuk pemutaran real-time. Kedua model fun-music-v1 dan fun-music-preview mendukung mode ini. Untuk mengaktifkan output streaming, tambahkan X-DashScope-SSE: enable ke header permintaan.
Mode streaming dan non-streaming memiliki batas karakter yang berbeda:
Mode non-streaming:
lyricsmenerima 5–350 karakter Tiongkok atau 5–2.000 karakter Inggris;promptmenerima 1–2.000 karakter.Mode streaming:
lyricsmenerima 300–350 karakter Tiongkok atau 200–250 kata Inggris;promptmenerima 5–1.000 karakter (Tiongkok atau Inggris).
curl
curl -X POST 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/music/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
"model": "fun-music-v1",
"input": {
"prompt": "High-energy electronic dance music, synthesizer effects, full of energy, suitable for workout scenes",
"gender": "male"
}
}'Python
import requests
import os
import json
import base64
api_key = os.getenv("DASHSCOPE_API_KEY")
url = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/music/generation"
response = requests.post(url,
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
"X-DashScope-SSE": "enable"
},
json={
"model": "fun-music-v1",
"input": {
"prompt": "Musik dansa elektronik berenergi tinggi, efek synthesizer, penuh energi, cocok untuk suasana olahraga",
"gender": "male"
}
},
stream=True
)
output_file = "output.mp3"
with open(output_file, "wb") as f:
for line in response.iter_lines():
if not line:
continue
decoded = line.decode("utf-8")
if decoded.startswith("data:"):
data = json.loads(decoded[5:])
finish_reason = data.get("output", {}).get("finish_reason")
if finish_reason == "null":
audio_data = data["output"]["audio"].get("data", "")
if audio_data:
f.write(base64.b64decode(audio_data))
elif finish_reason == "stop":
print(f"Pembuatan musik selesai! Disimpan ke {output_file}")Java
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
public class FunMusicStreamDemo {
public static void main(String[] args) throws Exception {
String apiKey = System.getenv("DASHSCOPE_API_KEY");
String endpoint = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/music/generation";
HttpURLConnection conn = (HttpURLConnection) new URL(endpoint).openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Bearer " + apiKey);
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("X-DashScope-SSE", "enable");
conn.setDoOutput(true);
String jsonBody = "{\"model\":\"fun-music-v1\","
+ "\"input\":{\"prompt\":\"High-energy electronic dance music, synthesizer effects, full of energy, suitable for workout scenes\","
+ "\"gender\":\"male\"}}";
try (OutputStream os = conn.getOutputStream()) {
os.write(jsonBody.getBytes("UTF-8"));
}
String outputFile = "output.mp3";
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"));
FileOutputStream fos = new FileOutputStream(outputFile)) {
String line;
while ((line = reader.readLine()) != null) {
if (line.startsWith("data:")) {
String data = line.substring(5);
if (data.contains("\"finish_reason\":\"null\"")) {
int start = data.indexOf("\"data\":\"") + 8;
int end = data.indexOf("\"", start);
if (start > 8 && end > start) {
byte[] chunk = Base64.getDecoder().decode(
data.substring(start, end));
fos.write(chunk);
}
} else if (data.contains("\"finish_reason\":\"stop\"")) {
System.out.println("Music generation complete! Saved to " + outputFile);
}
}
}
}
}
}Model dan wilayah yang didukung
China (Beijing)
Untuk memanggil model berikut, gunakan Kunci API dari wilayah Beijing:
fun-music-v1
fun-music-preview
Referensi API
FAQ
Bisakah saya menentukan instrumen, tempo, atau suasana hati?
Ya. Jelaskan langsung dalam prompt Anda, misalnya "iringan piano, tempo lambat, melankolis." Model akan mengikuti deskripsi ini seakurat mungkin. Prompt yang lebih spesifik menghasilkan output yang lebih akurat. Untuk tips penulisan prompt selengkapnya, lihat Prompt.
Model mana yang harus saya pilih?
fun-music-v1 mendukung pemilihan jenis kelamin vokal dan menghasilkan audio berkualitas lebih tinggi. fun-music-preview mendukung lirik kustom dan pembuatan berbasis prompt. Untuk perbandingan detail, lihat Perbedaan antara kedua model.
Berapa lama URL unduhan audio berlaku?
URL unduhan file audio berlaku selama 24 jam. Unduh file dalam periode ini. Setelah URL kedaluwarsa, panggil API lagi untuk menghasilkan URL baru.
Apa perbedaan antara lirik dan prompt?
Parameter lyrics menggunakan lirik Anda, dan model mengaransemen lagu berdasarkan lirik tersebut. Parameter prompt menggunakan deskripsi bahasa alami tentang gaya dan suasana musik, dan model menulis lirik serta menghasilkan musik secara otomatis. Persyaratan parameter berbeda tergantung model: untuk fun-music-v1, minimal salah satu dari dua parameter wajib disediakan; jika keduanya diberikan, lyrics yang berlaku. Untuk fun-music-preview, prompt wajib; lyrics opsional dan memiliki prioritas atas prompt bila disediakan.
Kapan sebaiknya saya menggunakan mode streaming vs. non-streaming?
Gunakan mode non-streaming jika Anda hanya membutuhkan file audio akhir. Panggilan API lebih sederhana. Gunakan mode streaming jika Anda membutuhkan data audio yang dikirimkan secara progresif selama proses pembuatan, seperti untuk pemutaran real-time.
Apa batas parameter untuk mode streaming vs. non-streaming?
Batas karakter untuk lyrics dan prompt berbeda antara kedua mode. Dalam mode non-streaming, lyrics menerima 5–350 karakter Tiongkok atau 5–2.000 karakter Inggris, dan prompt menerima 1–2.000 karakter. Dalam mode streaming, lyrics menerima 300–350 karakter Tiongkok atau 200–250 kata Inggris, dan prompt menerima 5–1.000 karakter (Tiongkok atau Inggris).