سه کار صوتی از یک نشانی: گفتار به متن (فایل صوتی را به متن فارسی یا زیرنویس تبدیل کنید)، ترجمهٔ صوت (متن انگلیسی یک صدای غیرانگلیسی) و متن به گفتار (از متن، فایل صوتی بسازید). درخواستها همان شکل API صوتی OpenAI را دارند.
گفتار به متن#
فایل را به شکل multipart/form-data در فیلد file بفرستید؛ حداکثر ۲۵ مگابایت، با قالبهای mp3، mp4، m4a، wav، webm یا ogg.
curl https://gisoo.pro/api/v1/audio/transcriptions \
-H "Authorization: Bearer $GISOO_API_KEY" \
-F file=@meeting.mp3 \
-F model=gpt-4o-mini-transcribe \
-F language=fa
from openai import OpenAI
client = OpenAI(base_url="https://gisoo.pro/api/v1", api_key="sk-gisoo-v1-...")
with open("meeting.mp3", "rb") as audio:
result = client.audio.transcriptions.create(
model="gpt-4o-mini-transcribe",
file=audio,
language="fa",
prompt="نامها: گیسو، نِت اَرز، لاراول", # optional: spellings the model should know
)
print(result.text)
import fs from "node:fs";
const result = await client.audio.transcriptions.create({
model: "gpt-4o-mini-transcribe",
file: fs.createReadStream("meeting.mp3"),
language: "fa",
});
console.log(result.text);
<?php
$result = $client->audio()->transcribe([
'model' => 'gpt-4o-mini-transcribe',
'file' => fopen('meeting.mp3', 'r'),
'language' => 'fa',
]);
echo $result->text;
GET /models?type=audio_stt.fa دقت فارسی را بالا میبرد و جلوی حدس اشتباه زبان را میگیرد.json (پیشفرض)، text، srt، vtt یا verbose_json. زیرنویس و زمانبندی فقط در whisper-1 است.verbose_json: word و/یا segment برای زمان هر واژه یا هر جمله.کدام مدل#
| model | مناسب برای | قیمتگذاری |
|---|---|---|
gpt-4o-mini-transcribe | متن روان و دقیق فارسی | توکنی (ورودی صوت و خروجی متن) |
gpt-4o-transcribe | صدای شلوغ و کیفیت پایین | توکنی |
whisper-1 | زیرنویس SRT/VTT، زمان هر واژه، ترجمه به انگلیسی | بهازای هر دقیقهٔ صوت |
فهرست بهروز و قیمتها را از GET /models?type=audio_stt بگیرید.
زیرنویس و زمانبندی#
# Subtitles with timestamps (whisper-1)
curl https://gisoo.pro/api/v1/audio/transcriptions \
-H "Authorization: Bearer $GISOO_API_KEY" \
-F file=@lecture.mp3 -F model=whisper-1 -F language=fa \
-F response_format=srt > lecture.srt
with open("lecture.mp3", "rb") as audio:
result = client.audio.transcriptions.create(
model="whisper-1",
file=audio,
response_format="verbose_json",
timestamp_granularities=["word", "segment"],
)
for seg in result.segments:
print(f"{seg.start:7.2f}–{seg.end:7.2f} {seg.text}")
ترجمهٔ صوت به انگلیسی#
صدای هر زبانی را میگیرد و متن انگلیسی برمیگرداند. فقط با whisper-1:
with open("interview-fa.mp3", "rb") as audio:
english = client.audio.translations.create(model="whisper-1", file=audio)
print(english.text) # English text of a Persian recording
فایل بزرگتر از ۲۵ مگابایت#
صدای گفتوگو با کیفیت پایینتر هم خوب شنیده میشود. فایل را تککاناله و کمحجم کنید و اگر هنوز بزرگ بود، تکهتکه بفرستید:
# Mono, 32 kbps MP3 — speech stays clear, the file shrinks a lot
ffmpeg -i input.m4a -ac 1 -b:a 32k -ar 16000 small.mp3
# Cut a long recording into 15-minute pieces
ffmpeg -i long.mp3 -f segment -segment_time 900 -c copy part-%02d.mp3
صدای بلند با Gemini#
مدلهای Gemini فایل صوتی را در خود گفتوگو میپذیرند (بخش input_audio در /chat/completions). مزیتش این است که همانجا میگویید خروجی چه شکلی باشد:
با زمانبندی، خلاصه، جدا کردن گویندهها. حجم کل درخواست تا ۲۰ مگابایت است؛ فایل را با دستور ffmpeg بالا کوچک کنید و برای ضبطهای طولانی تکههای ۱۵ دقیقهای بفرستید.
Gemini صدا را خودش به کیفیت پایین تبدیل میکند، پس کوچک کردن فایل چیزی از دقت کم نمیکند.
import base64
with open("voice-note.mp3", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
reply = client.chat.completions.create(
model="gemini-3.6-flash",
max_tokens=4000,
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Transcribe this Persian recording with [mm:ss] timestamps every few sentences."},
{"type": "input_audio", "input_audio": {"data": b64, "format": "mp3"}},
],
}],
)
print(reply.choices[0].message.content)
SDK اختصاصی گوگل (google-genai) و بارگذاری فایل در Files API گوگل با گیسو کار نمیکنند؛ فایل را همانطور که بالا آمده، base64 و داخل پیام بفرستید.
متن به گفتار#
پاسخ خودِ فایل صوتی است (بهطور پیشفرض mp3)، نه JSON. قیمت بهازای تعداد نویسههای متن است و هر درخواست حداکثر ۴٬۰۹۶ نویسه میپذیرد؛ متن بلندتر را به چند تکه بشکنید.
curl https://gisoo.pro/api/v1/audio/speech \
-H "Authorization: Bearer $GISOO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini-tts",
"voice": "nova",
"input": "Your order has shipped and will arrive within two days.",
"response_format": "mp3"
}' --output notice.mp3
speech = client.audio.speech.create(
model="gpt-4o-mini-tts",
voice="nova",
input="Your order has shipped and will arrive within two days.",
instructions="Warm and calm, like a helpful shop assistant.", # gpt-4o-mini-tts only
)
speech.write_to_file("notice.mp3")
import fs from "node:fs";
const speech = await client.audio.speech.create({
model: "gpt-4o-mini-tts",
voice: "nova",
input: "Your order has shipped and will arrive within two days.",
});
fs.writeFileSync("notice.mp3", Buffer.from(await speech.arrayBuffer()));
gpt-4o-mini-tts (با کنترل لحن)، tts-1 (سریع) یا tts-1-hd (کیفیت بالاتر).alloy، echo، fable، onyx، nova، shimmer و صداهای تازهتری که هر مدل دارد.gpt-4o-mini-tts.mp3، opus، aac، flac، wav یا pcm.این مدلها متن فارسی را هم میخوانند، ولی لهجه و آهنگ گفتارشان انگلیسیگونه است. پیش از استفاده در محصول، چند جملهٔ واقعی خودتان را با صداهای مختلف بشنوید.
پاسخ پرسشتان را پیدا نکردید؟
شناسهٔ درخواست (هدر X-Request-Id) را با پرسشتان در تیکت بفرستید تا دقیق بررسی کنیم.