نمای کلی
Gateway AiFO endpointهای OpenAI-compatible برای TTS (Text-to-Speech) و STT (Speech-to-Text) ارائه میدهد. مدلهای ElevenLabs و سایر providerها از همین مسیرها قابل دسترسیاند.
- POST /v1/audio/speech — تبدیل متن به صوت
- POST /v1/audio/transcriptions — تبدیل فایل صوتی به متن
TTS — Text to Speech
در body فیلدهای model، input (متن) و voice (شناسه صدا) را ارسال کنید. پاسخ binary audio stream است — Content-Type بسته به فرmat (mp3, pcm, …).
curl https://api.aifoapp.ir/v1/audio/speech \
-H "Authorization: Bearer aifo_sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "elevenlabs/eleven_multilingual_v2",
"input": "سلام، به AiFO خوش آمدید.",
"voice": "YOUR_VOICE_ID"
}' --output speech.mp3
import requests
r = requests.post(
"https://api.aifoapp.ir/v1/audio/speech",
headers={"Authorization": "Bearer aifo_sk_live_YOUR_API_KEY"},
json={
"model": "elevenlabs/eleven_multilingual_v2",
"input": "سلام، به AiFO خوش آمدید.",
"voice": "YOUR_VOICE_ID",
},
)
with open("speech.mp3", "wb") as f:
f.write(r.content)
const res = await fetch("https://api.aifoapp.ir/v1/audio/speech", {
method: "POST",
headers: {
Authorization: "Bearer aifo_sk_live_YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "elevenlabs/eleven_multilingual_v2",
input: "سلام، به AiFO خوش آمدید.",
voice: "YOUR_VOICE_ID",
}),
});
const blob = await res.blob();
// save or play blob
const fs = require("fs");
const OpenAI = require("openai");
const client = new OpenAI({ baseURL: "https://api.aifoapp.ir/v1", apiKey: "aifo_sk_live_YOUR_API_KEY" });
const mp3 = await client.audio.speech.create({
model: "elevenlabs/eleven_multilingual_v2",
input: "سلام، به AiFO خوش آمدید.",
voice: "YOUR_VOICE_ID",
});
const buffer = Buffer.from(await mp3.arrayBuffer());
fs.writeFileSync("speech.mp3", buffer);
STT — Speech to Text
درخواست multipart/form-data با فیلدهای file (فایل صوتی) و model. برای فایلهای بزرگ timeout و اندازه upload را در نظر بگیرید.
curl https://api.aifoapp.ir/v1/audio/transcriptions \
-H "Authorization: Bearer aifo_sk_live_YOUR_API_KEY" \
-F "file=@sample.wav" \
-F "model=openai/whisper-1"
import requests
with open("sample.wav", "rb") as f:
r = requests.post(
"https://api.aifoapp.ir/v1/audio/transcriptions",
headers={"Authorization": "Bearer aifo_sk_live_YOUR_API_KEY"},
files={"file": f},
data={"model": "openai/whisper-1"},
)
print(r.json()["text"])
const form = new FormData();
form.append("file", fileInput.files[0]);
form.append("model", "openai/whisper-1");
const res = await fetch("https://api.aifoapp.ir/v1/audio/transcriptions", {
method: "POST",
headers: { Authorization: "Bearer aifo_sk_live_YOUR_API_KEY" },
body: form,
});
const data = await res.json();
console.log(data.text);
const fs = require("fs");
const OpenAI = require("openai");
const client = new OpenAI({ baseURL: "https://api.aifoapp.ir/v1", apiKey: "aifo_sk_live_YOUR_API_KEY" });
const transcription = await client.audio.transcriptions.create({
file: fs.createReadStream("sample.wav"),
model: "openai/whisper-1",
});
console.log(transcription.text);