长期免费的语音合成与识别 API——零成本基建系列
长期免费的语音合成与识别 API——零成本基建系列上期介绍的是文生图API这期介绍长期免费的语音合成与识别 API。同样的只介绍有持续免费档位的服务这里的“长期”不能保证永远免费而是指截至目前官方有非一次性的免费规则的API。为确保API接口真实可用每个API接口都用同一组短句跑过中英文测试才拿出来分享This is an English speech recognition test. 这是中文语音识别测试。识别用的测试语音是 Windows 内置语音生成的 16 kHz WAV。服务能做什么当前免费规则这次结果Cloudflare Workers AI英文 TTS、中英文 ASR免费计划每天 10,000 NeuronsAura-1 英文合成成功Whisper 中英文识别正确Groq中英文 ASRFree Plan 的 Whisper 为 2,000 次/日中英文识别正确硅基流动中英文 ASRSenseVoiceSmall、TeleSpeechASR当前价格页标为免费两个模型的中英文识别都正确Azure Speech中英文 TTS、ASRF0每月 50 万神经语音字符、5 小时语音识别中英文合成与识别都正确Cloudflare 更擅长英文Cloudflare Workers AI 免费计划每天有 10,000 Neurons到 UTC 零点重置。测试用cf/deepgram/aura-1合成英文识别用cf/openai/whisper-large-v3-turbo。两项都直接通过 Workers AI REST API 调用。关于如何注册申请API key请参考前一篇文章。import{readFile,writeFile}fromnode:fs/promises;constbasehttps://api.cloudflare.com/client/v4/accounts/${process.env.CLOUDFLARE_ACCOUNT_ID}/ai/run;constheaders{Authorization:Bearer${process.env.CLOUDFLARE_API_TOKEN},Content-Type:application/json};// 英文 TTSconstttsawaitfetch(${base}/cf/deepgram/aura-1,{method:POST,headers,body:JSON.stringify({text:This is an English text to speech test.,speaker:asteria,encoding:mp3})});awaitwriteFile(cloudflare-en.mp3,Buffer.from(awaittts.arrayBuffer()));// 中英文 ASRlanguage 改成 en 或 zhconstaudioawaitreadFile(asr-fixture-zh.wav);constasrawaitfetch(${base}/cf/openai/whisper-large-v3-turbo,{method:POST,headers,body:JSON.stringify({audio:audio.toString(base64),language:zh,task:transcribe})});const{result}awaitasr.json();console.log(result.text);实测中Aura-1 正常生成了英文 MP3Whisper 对两句样本的返回分别是This is an English speech recognition test.和这是中文语音识别测试。Cloudflare 还有cf/myshell-ai/melotts可以做中文 TTS。我拿同一句中文试过曾成功拿到音频也连续遇到两次服务端500 / 3043。这个波动很难说是代码问题因此不把它放进这次的推荐路径中文合成直接看后面的 Azure 更稳妥。Groq只做识别额度很大方Groq 的语音接口兼容 OpenAI 风格。whisper-large-v3-turbo在 Free Plan 的限额是 2,000 次/日具体还有 RPM、音频时长等限制直接看 Groq Rate Limits。注册申请也非常简单就不赘述了。import{readFile,writeFile}fromnode:fs/promises;constfileawaitreadFile(asr-fixture-zh.wav);constformnewFormData();form.set(model,whisper-large-v3-turbo);form.set(response_format,json);form.set(file,newBlob([file],{type:audio/wav}),asr-fixture-zh.wav);constresponseawaitfetch(https://api.groq.com/openai/v1/audio/transcriptions,{method:POST,headers:{Authorization:Bearer${process.env.GROQ_API_KEY}},body:form});const{text}awaitresponse.json();awaitwriteFile(groq-zh.txt,text);console.log(text);测试下来英文和中文都识别正确。它没有把语音合成塞进同一套免费入口接口细节见 Groq Speech-to-Text 文档。硅基流动国内接口两个免费 ASR 模型都能跑硅基流动的价格页目前把FunAudioLLM/SenseVoiceSmall与TeleAI/TeleSpeechASR标为免费。价格页。申请API Key前需要先完成实名。这里有个很容易踩到的小坑。旧的英文文档示例写过api.siliconflow.com而现在的中文 API 文档指定的是https://api.siliconflow.cn。前者会把一个完全正确的 Key 打成401 Token is invalid。这次改到.cn后四组请求就都通过了。import{readFile,writeFile}fromnode:fs/promises;asyncfunctiontranscribe(model,fileName){constfileawaitreadFile(fileName);constformnewFormData();form.set(model,model);form.set(file,newBlob([file],{type:audio/wav}),fileName);constresponseawaitfetch(https://api.siliconflow.cn/v1/audio/transcriptions,{method:POST,headers:{Authorization:Bearer${process.env.SILICONFLOW_API_KEY}},body:form});const{text}awaitresponse.json();awaitwriteFile(${model.split(/)[1]}.txt,text);returntext;}console.log(awaittranscribe(FunAudioLLM/SenseVoiceSmall,asr-fixture-zh.wav));console.log(awaittranscribe(TeleAI/TeleSpeechASR,asr-fixture-en.wav));SenseVoiceSmall对中英文样本都原样返回TeleSpeechASR也正确识别了两句只把英文里的English写成了小写。对命令、专有名词很多的真实录音还是要自己再用一段业务音频验证。接口的文件上限是 50 MB、时长上限 1 小时模型名以 官方转写文档 为准。Azure Speech中文合成和识别都很完整Azure 的好处不止声音多。它的 TTS 与 ASR 是一套服务中文神经语音、英文语音、短音频识别都能用。注意创建资源时要选F0免费API 响应本身看不出资源是 F0 还是 S0别因为接口跑通就默认没有计费风险。Azure 目前的 F0 额度是每月 50 万神经语音字符、5 小时语音识别。实时语音合成限 20 次/60 秒实时识别并发为 1做个人工具足够做高并发服务则不合适。Azure 价格页 和 配额文档 写得很清楚。创建key相对复杂一些需要先访问 https://portal.azure.com/#create/Microsoft.CognitiveServicesSpeechServices 来创建语音服务服务创建完成后进入该资源获取密钥import{readFile,writeFile}fromnode:fs/promises;constregionprocess.env.AZURE_SPEECH_REGION;constkeyprocess.env.AZURE_SPEECH_KEY;// 中文 TTS英文可把 voice 换成 en-US-AvaMultilingualNeuralconstttsawaitfetch(https://${region}.tts.speech.microsoft.com/cognitiveservices/v1,{method:POST,headers:{Ocp-Apim-Subscription-Key:key,Content-Type:application/ssmlxml,X-Microsoft-OutputFormat:audio-16khz-128kbitrate-mono-mp3,User-Agent:voice-api-test},body:speak version1.0 xml:langzh-CNvoice namezh-CN-XiaoxiaoMultilingualNeural这是中文语音合成测试。/voice/speak});awaitwriteFile(azure-zh.mp3,Buffer.from(awaittts.arrayBuffer()));// 中文 ASR英文时换 languageen-US 和输入文件constaudioawaitreadFile(asr-fixture-zh.wav);constasrawaitfetch(https://${region}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?languagezh-CN,{method:POST,headers:{Ocp-Apim-Subscription-Key:key,Accept:application/json,Content-Type:audio/wav; codecsaudio/pcm; samplerate16000},body:audio});console.log((awaitasr.json()).DisplayText);我用en-US-AvaMultilingualNeural和zh-CN-XiaoxiaoMultilingualNeural生成过两段 MP3中文、英文短音频也都识别正确。配置时需要保存 Key 和区域名例如AZURE_SPEECH_KEY... AZURE_SPEECH_REGIONeastus怎么选已经用 Cloudflare Workers 的用它的 Whisper 做识别最省事不用新注册账号和申请API KEY想做中文 TTSAzure F0 是这次最完整、也最稳定的选项。只做识别且不想开 AzureGroq 的 2,000 次/日够宽松国内项目则可以先试硅基流动的两个免费模型。这些免费入口适合原型、个人工具和低频功能。你可以关注我获取更多的零成本基建资讯。