PHP调用Suno获取WAV需用/audio_id请求专用接口,非本地转码;若走FFmpeg转格式,则须及时下载24小时有效期的audio_url并流式处理。

PHP 本身不直接处理 Suno 的音频格式转换,所有“转格式”动作实际发生在 Suno 服务端或你本地用 FFmpeg 做二次处理。关键分两层:一是拿到 Suno 生成的 MP3 后想转成 WAV/FLAC 等,二是调用 Suno 的 /wav 接口直接获取高保真 WAV —— 这两者技术路径完全不同,不能混用。
调用 Suno /wav 接口直接获取 WAV 文件
这不是 PHP 转码,而是向 Suno 后端发请求换一种输出格式。官方 /wav 接口只认 audio_id,不接受 URL 或文件上传。
- 必须确保你已有合法的
audio_id(来自/generate或/upload响应里的data.audio_id) - 请求地址是
https://api.acedata.cloud/suno/wav,不是 Suno 官网域名,也不是/api/generate - POST body 必须是 JSON 格式:
{"audio_id": "xxx"},不能传prompt或title - 响应中
data[0].file_url指向的是 CDN 上的.wav文件,有效期同 MP3 —— 仅 24 小时,需及时下载 - 若返回
"success": false,常见原因是audio_id无效或该音频未启用 WAV 导出(部分免费版生成结果不支持)
用 PHP + FFmpeg 把 Suno MP3 转成其他格式
当 /wav 接口不可用、或你需要 FLAC/OGG/AAC 等非官方支持格式时,才走本地转码。核心是让 PHP 调起系统级 FFmpeg。
- 先确认服务器已安装 FFmpeg 并加入 PATH:
exec('ffmpeg -version', $out, $return);返回码为 0 才算就绪 - 不要用
file_get_contents()读取远程 MP3 再喂给 FFmpeg —— 大文件易超内存,直接传 URL 给 FFmpeg:ffmpeg -i "https://cdn1.suno.ai/xxx.mp3" -f wav -y /tmp/output.wav - 务必加
-y参数自动覆盖输出文件,否则第二次执行会卡住等待 stdin 输入 - 转 WAV 时默认是 16bit PCM,如需 24bit 或 32bit float,显式加参数:
-sample_fmt s24或-sample_fmt fltp - 用
exec()时捕获错误:exec($cmd . ' 2>&1', $err_output, $exit_code),$exit_code 非 0 就说明转码失败(比如 URL 404 或权限不足)
audio_url 有效期只有 24 小时,别等“下次再转”
Suno 所有音频资源链接(MP3/WAV)都是临时 CDN 地址,签发后精确 24 小时过期,且无法刷新。这意味着:
立即学习“PHP免费学习笔记(深入)”;
- 轮询
/feed拿到audio_url后,必须在 24 小时内完成下载或转码,超时再访问会返回 403 或空响应 - 如果你的业务流程包含人工审核环节(比如等运营确认后再转格式),一定要把下载动作前置 —— 先
file_put_contents()存到本地,再处理 - 别依赖“用户点击下载时再拉取”,此时很可能已过期;正确做法是生成成功后立刻用
curl_init()下载并保存,后续所有操作基于本地文件 - 本地保存时建议用
audio_id命名(如ec13e502-d043-4eb2-92ee-e900c6da69d1.mp3),避免文件名冲突或丢失来源信息
最常被忽略的一点:Suno 的 /wav 接口和普通 MP3 下载一样受速率限制,高频请求会触发 429。如果批量处理,两个请求之间至少间隔 1.5 秒,比轮询 /feed 还要更保守。



















