All Products
Search
Document Center

Alibaba Cloud Model Studio:Pembuatan musik

Last Updated:Jul 02, 2026

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.

Penting

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 prompt atau lyrics)

Wajib

lyrics

Opsional jika prompt disediakan; jika keduanya diberikan, lyrics yang berlaku

Opsional; jika diberikan, lyrics memiliki prioritas

Jenis kelamin vokal (gender)

Didukung

Tidak didukung

Format keluaran audio

Tetapkan parameter format untuk menentukan format output:

Format

Karakteristik

Kasus penggunaan

mp3

Kompresi lossy, ukuran file kecil

Streaming, pemutaran online, penyimpanan

wav

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"
Catatan

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 hujan

  • Tidak disarankan: Musik melankolis (terlalu samar)

Catatan

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]

Intro, menetapkan suasana

[verse]

Verse, menceritakan kisah

[chorus]

Chorus, puncak emosional

[bridge]

Bridge, mengubah perspektif

[outro]

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.

Catatan

Mode streaming dan non-streaming memiliki batas karakter yang berbeda:

  • Mode non-streaming: lyrics menerima 5–350 karakter Tiongkok atau 5–2.000 karakter Inggris; prompt menerima 1–2.000 karakter.

  • Mode streaming: lyrics menerima 300–350 karakter Tiongkok atau 200–250 kata Inggris; prompt menerima 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

Referensi API pembuatan musik

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).