You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP与Curl将Voicerss API返回的音频保存为文件

解决VoiceRSS TTS API音频数据保存与浏览器兼容问题

问题分析

你遇到的Chrome显示乱码问题,本质是直接输出二进制音频数据时未指定正确的响应头,浏览器无法识别这是MP3文件,所以把二进制流当成文本解析了;而Firefox可能自动识别了音频类型,所以能正常播放。

保存音频到本地文件的解决方案

修改你的代码,在获取到API返回的二进制音频数据后,用file_put_contents()将数据写入本地文件即可。需要注意目标目录要有写入权限,示例代码如下:

$src = $_GET['src'];
$curl = curl_init();    
curl_setopt_array($curl, [
CURLOPT_URL => "https://voicerss-text-to-speech.p.rapidapi.com/?key=MYAPIKEY&src=$src&hl=en-us&r=0&c=mp3&f=8khz_8bit_mono",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
    "X-RapidAPI-Host: voicerss-text-to-speech.p.rapidapi.com",
    "X-RapidAPI-Key: MYAPIKEY"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    // 定义保存路径,确保该目录存在且PHP有写入权限
    $savePath = './audio/' . uniqid() . '.mp3';
    // 自动创建上级目录(如果不存在)
    if (!is_dir(dirname($savePath))) {
        mkdir(dirname($savePath), 0755, true);
    }
    // 写入音频文件
    if (file_put_contents($savePath, $response)) {
        echo "音频已保存到:$savePath";
        // 也可以输出文件访问链接供下载
        // echo "<a href='$savePath'>点击下载音频</a>";
    } else {
        echo "保存音频文件失败,请检查目录权限";
    }
}

额外:修复浏览器直接播放的兼容问题

如果需要直接在浏览器播放而不保存文件,只需在echo $response前添加正确的响应头,告诉浏览器这是MP3音频:

// 添加响应头指定内容类型
header('Content-Type: audio/mpeg');
echo $response;

这样Chrome就能正确识别音频数据,不会显示乱码。

内容的提问来源于stack exchange,提问作者David Jeffery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:37:39