百聆音樂產生大模型(Fun音樂大模型)支援輸入開放性歌曲的創作要求或歌詞,產生整首男/女聲演唱的中文或英文歌曲。歌曲通俗易懂,情緒由淺入深,是人類靈感與大模型能力的完美結合。
核心功能
根據提示詞(prompt)自動創作歌詞並產生完整歌曲
根據自訂歌詞(lyrics)產生歌曲
支援男聲(male)和女聲(female)演唱
支援中文和英文歌詞與提示詞
支援流式和非流式兩種輸出模式
支援 MP3 和 WAV 音頻格式輸出
支援的模型
音樂產生模型:fun-music-v1
支援的語言:
歌詞語言:中文、英文
提示詞語言:中文、英文
快速開始
前提條件
已擷取 API Key。擷取方式請參見擷取 API Key。
已將 API Key 配置到環境變數(推薦):
export DASHSCOPE_API_KEY="sk-xxx"
lyrics 和 prompt 參數必須至少提供一個,不可同時為空白。當同時傳入兩個參數時,僅 lyrics 生效,prompt 將被忽略。
通過提示詞產生音樂
傳入 prompt 參數描述音樂風格和情境,模型將自動創作歌詞並產生歌曲。
curl
curl -X POST 'https://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer' \
-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://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer"
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://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer";
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://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer' \
-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://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer"
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://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer";
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());
}
}
}流式調用
流式模式支援邊產生邊返迴音頻資料,適用於即時播放等情境。啟用流式輸出需要在要求標頭中添加 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://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer' \
-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://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer"
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://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer";
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);
}
}
}
}
}
}歌詞創作規範
Fun-music 內建專業歌詞創作模型。當您選擇自行提供歌詞時,遵循以下規範可產生更高品質的音樂。
結構標籤
標準歌詞結構應包含以下標籤:
標籤 | 說明 |
| 前奏,引入氛圍 |
| 主歌,敘述故事 |
| 副歌,情感高潮 |
| 橋段,視角轉換 |
| 尾奏,漸弱收尾 |
歌詞樣本
[intro]
琴鍵輕落,晚風微涼.
那年夏天,心跳悄悄發燙.
[verse]
教室窗邊,陽光斜照你側臉.
借半塊橡皮,指尖碰出電流線.
放學路上,單車鈴聲追雲煙.
你說未來很遠,我卻想走到終點.
[chorus]
青春是未拆的信箋,寫滿勇敢的誓言.
哪怕世界忽明又忽暗,有你就看見光點.
戀愛像初夏的雨甜,淋濕夢也不怕遠.
我們笑著奔向明天,手牽手不回頭望.
[bridge]
後來風雨打散紙傘,沉默代替了答案.
可心底那首歌未完,還等一句"別走散".
[chorus]
青春是未拆的信箋,寫滿勇敢的誓言.
哪怕世界忽明又忽暗,有你就看見光點.
戀愛像初夏的雨甜,淋濕夢也不怕遠.
我們笑著奔向明天,手牽手不回頭望.
[outro]
琴聲漸遠,星光鋪滿長街.
故事未完,下一頁仍熱烈.創作要求
原創性原則:嚴禁抄襲已發表歌曲的歌詞,不得模仿知名歌曲的押韻模式或標誌性句式。
Alibaba Content Security Service:禁止涉及政治、暴力、色情、低俗、恐怖、毒品等違法內容,保持內容健康、情感真摯。
語言要求:僅支援中文或英文,不支援日文、韓文等其他語言。
最佳實務
提示詞撰寫
具體描述情緒、情境、樂器偏好,能產生更貼合需求的音樂。
推薦:
悲傷鋼琴曲,雨夜思念不推薦:
悲傷音樂(過於籠統)
音頻格式選擇
mp3:適合網路傳輸和儲存,為預設格式。wav:適合後期處理和高品質播放。
API參考
常見問題
lyrics 和 prompt 有什麼區別?
lyrics 參數用於傳入您自己編寫的歌詞,模型將嚴格根據歌詞內容進行譜曲和演唱。prompt 參數用於傳入對音樂風格、情境的自然語言描述,模型將自動創作歌詞並產生對應的音樂。兩個參數至少傳入一個。如果同時傳入,僅 lyrics 生效。
流式和非流式模式如何選擇?
如果只需擷取最終的完整音頻檔案,推薦使用非流式模式,介面調用更簡單。如果需要在音樂產生過程中逐步擷取音頻資料(如邊產生邊播放),建議使用流式模式。
產生的音頻 URL 有效期間是多久?
音頻檔案下載 URL 的有效期間為 24 小時,請在此時間內完成下載。超過有效期間後 URL 將失效,需要重新調用介面產生。
流式和非流式模式的參數限制有何不同?
兩種模式下 lyrics 和 prompt 的字元數限制存在差異。非流式模式下,lyrics 支援中文 5~350 字元、英文 5~2000 字元,prompt 支援 1~2000 字元。流式模式下,lyrics 支援中文 300~350 字、英文 200~250 詞,prompt 支援 5~1000 個中文漢字或英文單詞。請根據所選模式注意對應的參數限制。