API อัปโหลดเสียงต้นทาง
คำอธิบายเอนด์พอยต์
การอัปโหลดเสียงต้นทางใช้เปลี่ยนไฟล์เสียงในเครื่องหรือจากระยะไกลให้เป็นคลิปต้นทางที่ความสามารถถัดไปใช้ได้ เช่น คัฟเวอร์ ต่อเพลง แทนที่ท่อน หรือแยกแทร็ก
เอนด์พอยต์: POST /api/music/upload-source
ค่าบริการ: ฟรี เอนด์พอยต์นี้เพียงอัปโหลดเสียงต้นทาง ไม่เริ่มงานสร้างเพลง
วิธีใช้ที่แนะนำ: นี่คือขั้นที่ 1 ของ «คัฟเวอร์สองขั้น» อัปโหลดเสียงด้วยเอนด์พอยต์นี้ก่อน (ฟรี และถ้าล้มเหลวลองใหม่ได้ทุกเมื่อ) แล้วเก็บ
clip_idที่ได้ เมื่อยืนยันว่าอัปโหลดสำเร็จ (statusเป็นสถานะเสร็จสิ้น) จึงเรียก API คัฟเวอร์จากคลิปต้นทาง เพื่อเริ่มคัฟเวอร์ — ขั้นนั้นเนื้อคำขอมีเพียงไม่กี่ร้อยไบต์ จึงไม่ถูกตัดขาดกลางทางเพราะไฟล์เสียงใหญ่เกินไป เมื่อเทียบกับ API แบบครั้งเดียว อัปโหลดแล้วคัฟเวอร์ การแยกแบบนี้เสถียรกว่าเมื่อ ไฟล์เสียงใหญ่ เครือข่ายไม่เสถียร หรือต้องใช้วัสดุเดิมซ้ำหลายครั้ง (ต่อเพลง / แทนที่ / แยกแทร็ก)
คำแนะนำการอัปโหลดไฟล์ขนาดใหญ่
| กรณี | วิธีที่แนะนำ |
|---|---|
| เสียงอยู่บนอินเทอร์เน็ตแล้ว (มีลิงก์ตรง https) | ใช้ file_url: เนื้อคำขอเพียงไม่กี่ร้อยไบต์ เสถียรที่สุด |
| URL ที่ลงนามชั่วคราว (ByteDance และอื่น ๆ) | ใช้ file_url เฉพาะเมื่อ URL เข้าถึงได้แบบสาธารณะและยังไม่หมดอายุ; มิฉะนั้นใช้ multipart หรืออัปโหลดทันที |
| ไฟล์ในเครื่อง (Node / Python / เดสก์ท็อป) | ใช้การอัปโหลดแบบ multipart (-F "file=@source.mp3") และ อย่าตั้ง Content-Type เอง |
| ใช้ได้แค่ JSON + base64 | ระวังว่า Content-Length ต้องเป็นจำนวนไบต์ (Buffer.byteLength) ไม่เช่นนั้นเนื้อคำขออาจถูกตัด |
หลังอัปโหลดเสร็จ ต้องยืนยันว่า status ในคำตอบเป็นสถานะเสร็จสิ้นแล้ว และบันทึก clip_id ก่อนไปขั้นที่ 2;
การอัปโหลดที่ล้มเหลวไม่คิดค่าใช้จ่ายและไม่สร้างงานสร้างเพลง ลองใหม่ได้เลย
ตรวจสอบ file_url ก่อนอัปโหลด
เซิร์ฟเวอร์ของแพลตฟอร์มเป็นผู้ดาวน์โหลด
file_urlผ่าน HTTP ไม่ใช่เบราว์เซอร์ของคุณ URL ที่เปิดได้ในเบราว์เซอร์อาจไม่สามารถเข้าถึงได้จากเซิร์ฟเวอร์โปรดักชัน
ไฟล์ในเครื่องควรอัปโหลดด้วย multipart และฟิลด์ file อย่าใช้ file_url กับลิงก์ ByteDance หรือ URL ที่ลงนามชั่วคราว เว้นแต่ URL นั้นเข้าถึงได้แบบสาธารณะและยังไม่หมดอายุเมื่อส่งคำขอ
เรียกใช้คำสั่งนี้จากเซิร์ฟเวอร์สาธารณะก่อนส่งคำขออัปโหลด:
curl -L --max-time 30 -D - -o /dev/null "https://example.com/source.mp3"
คำขอ GET ต้องจบด้วย HTTP 200 คืนค่า MIME ประเภทเสียง และมีข้อมูลที่ไม่ว่าง หน้าเข้าสู่ระบบ หน้า HTML และรหัส 401, 403, 404 หรือ 410 ไม่สามารถใช้ได้
file_url download failed: HTTP 404 มักหมายถึงลายเซ็นหมดอายุ ไฟล์ถูกลบ หรือพารามิเตอร์ URL ไม่ครบ
การอัปโหลดนี้ฟรี หากดาวน์โหลด file_url ล้มเหลว จะไม่มีการสร้าง clip_id งานเพลง หรือการเรียกสร้างเพลง และไม่มีการเรียกเก็บเงิน จึงไม่ต้องคืนเงิน
พารามิเตอร์คำขอ
Headers
สำหรับคำขอ JSON:
| พารามิเตอร์ | ชนิด | จำเป็น | หมายเหตุ |
|---|---|---|---|
| Authorization | string | ใช่ | Bearer YOUR_API_KEY |
| Content-Type | string | ใช่ | application/json |
คำขอแบบ multipart ไม่ต้องตั้ง Content-Type เอง ให้ไคลเอนต์สร้างอัตโนมัติ
พารามิเตอร์บอดี
| พารามิเตอร์ | ชนิด | จำเป็น | ค่าเริ่มต้น | หมายเหตุ |
|---|---|---|---|---|
| model | string | ไม่ | suno-v6 | ชื่อโมเดลสำหรับลูกค้า: suno-v6, suno-v6-wild หรือ suno-v6-mini |
| file_url | string | ไม่ | - | URL เสียงจากระยะไกล |
| file_base64 | string | ไม่ | - | เสียงแบบ Base64 |
| file | ไฟล์ (multipart) | ไม่ | - | ไฟล์เสียงที่ต้องการอัปโหลด ชื่อฟิลด์ต้องเป็น file |
| file_name | string | ไม่ | - | ชื่อไฟล์ |
| upload_type | string | ไม่ | file_upload | ประเภทการอัปโหลด |
ตัวอย่างคำขอ JSON
curl -X POST https://www.suno-api.io/api/music/upload-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"file_url": "https://example.com/source.mp3",
"file_name": "source.mp3",
"upload_type": "file_upload"
}'
ตัวอย่างคำขอ multipart
curl -X POST https://www.suno-api.io/api/music/upload-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@source.mp3" \
-F "file_name=source.mp3" \
-F "upload_type=file_upload" \
-F "model=suno-v6"
import requests
with open("source.mp3", "rb") as audio:
response = requests.post(
"https://www.suno-api.io/api/music/upload-source",
headers={"Authorization": "Bearer YOUR_API_KEY"},
data={
"file_name": "source.mp3",
"upload_type": "file_upload",
"model": "suno-v6",
},
files={"file": ("source.mp3", audio, "audio/mpeg")},
timeout=300,
)
response.raise_for_status()
print(response.json())
คำตอบ
{
"clip_id": "uploaded_clip_id",
"status": "complete",
"title": "source.mp3",
"image_url": "https://...",
"audio_url": "https://...",
"display_tags": "pop, vocal",
"inferred_description": "uploaded source audio",
"clip_metadata": {}
}
รับคีย์ API
สร้างคีย์ API ในคอนโซลหลังสมัครสมาชิก การสร้างหนึ่งครั้งราคา 0.6 หยวน ได้ 2 เพลง ดาวน์โหลดไม่จำกัด และไม่ต้องใช้เบอร์โทรศัพท์
รับคีย์ API กลับไปภาพรวม