Fun-Music 支援通過提示詞描述音樂風格和情境,或提供自訂歌詞,產生帶有男聲或女聲的中文/英文完整歌曲。
該模型目前處於邀測階段,您需要前往模型廣場申請開通後方可使用。該模型服務僅在華北2(北京)地區下可用。
概述
Fun-Music 是端到端音樂產生模型,輸入自然語言描述或自訂歌詞即可產生完整歌曲:
通過提示詞(
prompt)描述音樂風格、情境、情緒和樂器偏好,模型自動創作歌詞並產生歌曲通過歌詞(
lyrics)提供自訂歌詞內容,模型據此譜曲並演唱通過聲音性別(
gender)選擇男聲或女聲(僅fun-music-v1模型)支援流式和非流式兩種輸出模式
支援 MP3 和 WAV 兩種音頻格式輸出
兩個模型的區別
Fun-Music 提供兩個模型,主要區別如下:
特性 | fun-music-v1 | fun-music-preview |
prompt | 與 lyrics 至少傳入其中之一 | 必選 |
lyrics | 與 prompt 至少傳入其中之一;同時傳入時僅 lyrics 生效 | 可選;傳入後優先作為歌詞內容(此時 prompt 不生效) |
gender | 支援 | 不支援 |
音訊輸出格式
通過 format 參數指定輸出格式:
格式 | 特點 | 適用情境 |
| 有損壓縮,檔案體積小 | 網路傳輸、線上播放、儲存 |
| 無損格式,檔案體積較大 | 後期處理、高品質播放 |
前提條件
已擷取 API Key。擷取方式請參見擷取 API Key。
已將 API Key 配置到環境變數(推薦):
export DASHSCOPE_API_KEY="sk-xxx"
以下範例程式碼中的 {WorkspaceId} 需要替換為您的業務空間ID。擷取方式請參見業務空間管理。
快速開始
以下樣本展示三種典型用法。
通過提示詞產生歌曲
傳入 prompt 參數描述音樂風格和情境,模型將自動創作歌詞並產生歌曲。
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": "夏日清新民謠,木吉他與口琴伴奏,輕快節奏,適合旅行Vlog背景音樂",
"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": "夏日清新民謠,木吉他與口琴伴奏,輕快節奏,適合旅行Vlog背景音樂",
"gender": "female"
}
}
)
result = response.json()
audio_url = result["output"]["audio"]["url"]
print(f"音樂產生成功!下載地址:{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\":\"夏日清新民謠,木吉他與口琴伴奏,輕快節奏,適合旅行Vlog背景音樂\","
+ "\"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());
}
}
}通過歌詞產生歌曲
傳入 lyrics 參數提供自訂歌詞,模型將根據歌詞譜曲並產生歌曲。
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]\n清晨的陽光穿過窗帘,\n咖啡的香氣瀰漫房間.\n翻開昨天未讀完的書,\n時光就這樣悄悄流轉.\n\n[chorus]\n慢慢來不著急,\n生活本該如此愜意.\n把煩惱都丟進風裡,\n擁抱每一個晴天雨季.",
"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]
清晨的陽光穿過窗帘,
咖啡的香氣瀰漫房間.
翻開昨天未讀完的書,
時光就這樣悄悄流轉.
[chorus]
慢慢來不著急,
生活本該如此愜意.
把煩惱都丟進風裡,
擁抱每一個晴天雨季."""
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"音樂產生成功!下載地址:{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]\\n清晨的陽光穿過窗帘,\\n"
+ "咖啡的香氣瀰漫房間.\\n"
+ "翻開昨天未讀完的書,\\n"
+ "時光就這樣悄悄流轉.\\n\\n"
+ "[chorus]\\n慢慢來不著急,\\n"
+ "生活本該如此愜意.\\n"
+ "把煩惱都丟進風裡,\\n"
+ "擁抱每一個晴天雨季.";
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());
}
}
}創作指南
提示詞(prompt)
prompt 是描述音樂創作意圖的核心參數。模型會根據您的描述自動創作歌詞、編曲並產生歌曲。
撰寫建議:具體描述情緒、情境、樂器偏好,能產生更貼合需求的音樂。
推薦:
悲傷鋼琴曲,雨夜思念不推薦:
悲傷音樂(過於籠統)
您可以在提示詞中直接指定樂器(如“鋼琴伴奏”“薩克斯獨奏”“古箏與竹笛”)、節奏(如“輕快節奏”“慢節拍”“密集鼓點”)和情感基調(如“溫暖”“傷感”“熱血”“慵懶”),模型會儘可能遵循這些描述進行創作。描述越具體,產生效果越貼合預期。
不同風格的提示詞樣本
風格 | 提示詞樣本 |
民謠 | 溫暖治癒的民謠歌曲,木吉他伴奏,講述午後咖啡館裡的慵懶時光 |
古風 | 古風歌曲,古箏與竹笛伴奏,水墨山水般的悠遠意境,訴說江湖離別 |
搖滾 | 熱血搖滾,電吉他失真音牆,密集鼓點,唱出青春的叛逆與自由 |
抒情 | 抒情慢歌,鋼琴伴奏,安靜深沉,帶有淡淡憂傷,適合表達思念與回憶 |
饒舌 | 節拍鮮明的嘻哈饒舌,808低音鼓,充滿街頭活力,講述城市生活故事 |
兒歌 | 歡快可愛的兒童歌曲,木琴與手鼓伴奏,節奏簡單明快,教小朋友認識大自然 |
歌詞(lyrics)
lyrics 參數用於傳入您自己編寫的歌詞,模型將嚴格根據歌詞內容譜曲並產生歌曲。在歌詞中使用結構標籤可以控制歌曲的段落編排。
結構標籤
標籤 | 說明 |
| 前奏,引入氛圍 |
| 主歌,敘述故事 |
| 副歌,情感高潮 |
| 橋段,視角轉換 |
| 尾奏,漸弱收尾 |
歌詞樣本
[intro]
琴鍵輕落,晚風微涼.
那年夏天,心跳悄悄發燙.
[verse]
教室窗邊,陽光斜照你側臉.
借半塊橡皮,指尖碰出電流線.
放學路上,單車鈴聲追雲煙.
你說未來很遠,我卻想走到終點.
[chorus]
青春是未拆的信箋,寫滿勇敢的誓言.
哪怕世界忽明又忽暗,有你就看見光點.
戀愛像初夏的雨甜,淋濕夢也不怕遠.
我們笑著奔向明天,手牽手不回頭望.
[bridge]
後來風雨打散紙傘,沉默代替了答案.
可心底那首歌未完,還等一句"別走散".
[chorus]
青春是未拆的信箋,寫滿勇敢的誓言.
哪怕世界忽明又忽暗,有你就看見光點.
戀愛像初夏的雨甜,淋濕夢也不怕遠.
我們笑著奔向明天,手牽手不回頭望.
[outro]
琴聲漸遠,星光鋪滿長街.
故事未完,下一頁仍熱烈.創作要求
原創性原則:嚴禁抄襲已發表歌曲的歌詞,不得模仿知名歌曲的押韻模式或標誌性句式。
Alibaba Content Security Service:禁止涉及政治、暴力、色情、低俗、恐怖、毒品等違法內容,保持內容健康、情感真摯。
語言要求:僅支援中文或英文,不支援日文、韓文等其他語言。
聲音性別(gender)
通過 gender 參數選擇演唱聲音的性別,預設為女聲。僅 fun-music-v1 模型支援該參數。
female:女聲(預設)male:男聲
進階功能
流式輸出
流式模式支援邊產生邊返迴音頻資料,適用於即時播放等情境,fun-music-v1 和 fun-music-preview 均支援該模式。啟用流式輸出需要在要求標頭中添加 X-DashScope-SSE: enable。
流式模式與非流式模式的輸入參數字元數限制不同,請注意區分:
非流式模式:
lyrics支援中文 5~350 字元、英文 5~2000 字元,prompt支援 1~2000 字元。流式模式:
lyrics支援中文 300~350 字、英文 200~250 詞,prompt支援 5~1000 個中文漢字或英文單詞。
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": "節奏感強的電子舞曲,合成器音效,充滿能量,適合健身運動情境",
"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": "節奏感強的電子舞曲,合成器音效,充滿能量,適合健身運動情境",
"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"音樂產生完成!已儲存到 {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\":\"節奏感強的電子舞曲,合成器音效,充滿能量,適合健身運動情境\","
+ "\"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("音樂產生完成!已儲存到 " + outputFile);
}
}
}
}
}
}支援的模型與地區
華北2(北京)
調用以下模型時,請選擇北京地區的API Key:
fun-music-v1
fun-music-preview
API參考
常見問題
能否指定樂器、節奏或情感?
可以。在 prompt 中直接描述即可,例如“鋼琴伴奏,慢節拍,傷感”。模型會儘可能遵循這些描述進行創作。描述越具體,產生效果越貼合預期。詳細的提示詞撰寫建議請參見提示詞(prompt)。
兩個模型怎麼選?
fun-music-v1 支援通過 gender 參數選擇男聲或女聲,且支援 prompt 和 lyrics 二選一。fun-music-preview 必須傳入 prompt,不支援 gender 參數。兩個模型的詳細差異請參見兩個模型的區別。
產生的音頻 URL 有效期間是多久?
音頻檔案下載 URL 的有效期間為 24 小時,請在此時間內完成下載。超過有效期間後 URL 將失效,需要重新調用介面產生。
lyrics 和 prompt 有什麼區別?
lyrics 參數用於傳入您自己編寫的歌詞,模型將嚴格根據歌詞內容譜曲並產生歌曲。prompt 參數用於傳入對音樂風格、情境的自然語言描述,模型將自動創作並產生音樂。兩個參數的必選性因模型而異:fun-music-v1 至少傳入其中之一,若同時傳入僅 lyrics 生效;fun-music-preview 必須傳入 prompt,lyrics 為選擇性參數,傳入後將優先作為歌詞內容。
流式和非流式模式如何選擇?
如果只需擷取最終的完整音頻檔案,推薦使用非流式模式,介面調用更簡單。如果需要在音樂產生過程中逐步擷取音頻資料(如邊產生邊播放),建議使用流式模式。
流式和非流式模式的參數限制有何不同?
兩種模式下 lyrics 和 prompt 的字元數限制存在差異。非流式模式下,lyrics 支援中文 5~350 字元、英文 5~2000 字元,prompt 支援 1~2000 字元。流式模式下,lyrics 支援中文 300~350 字、英文 200~250 詞,prompt 支援 5~1000 個中文漢字或英文單詞。請根據所選模式注意對應的參數限制。