پرش به محتوا

API تبدیل متن به صدا و صدا به متن

API تبدیل صدا به متن فارسی با زیرنویس SRT و جدا کردن گوینده‌ها، و API تبدیل متن به صدا با صداهای Gemini و دستور لحن؛ نمونه‌کد، حجم مجاز و قالب‌ها.

بازبینی: ۲۰ مهر ۱۴۰۵ ۱۴ دقیقه مطالعه

سه کار صوتی از یک نشانی: گفتار به متن (فایل صوتی را به متن فارسی یا زیرنویس تبدیل کنید)، ترجمهٔ صوت (متن انگلیسی یک صدای غیرانگلیسی) و متن به گفتار (از متن، فایل صوتی بسازید). درخواست‌ها همان شکل API صوتی OpenAI را دارند.

اگر دنبال API تبدیل صدا به متن فارسی برای ویس‌های یک ربات یا فایل جلسه‌ها هستید، از گفتار به متن شروع کنید. برای API تبدیل متن به صدای فارسی، مثلاً پیام تلفن گویا یا خواندن مقاله‌های سایت، بخش متن به گفتار و صداهای فارسی Gemini را بخوانید. هر دو با همان کلید گیسو و از سرور داخل ایران هم کار می‌کنند. اگر فقط می‌خواهید یک متن را بدون برنامه‌نویسی به صدا تبدیل کنید، ابزار تبدیل متن به صدا در اپ گیسو همین کار را می‌کند.

گفتار به متن

POSThttps://gisoo.pro/api/v1/audio/transcriptions

فایل را به شکل multipart/form-data در فیلد file بفرستید؛ حداکثر ۲۵ مگابایت، با قالب‌های mp3، mp4، m4a، wav، webm یا ogg.

برای سرورها و کاربران داخل ایران، در این نمونه نشانی gisoo.pro را با ir.gisoo.pro جایگزین کنید؛ مسیر و کلید همان‌اند.

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
file file الزامی
فایل صوتی، حداکثر ۲۵ مگابایت.
model string الزامی
مدل گفتار به متن؛ از GET /models?type=audio_stt.
language string
زبان صدا با کد دوحرفی؛ fa دقت فارسی را بالا می‌برد و جلوی حدس اشتباه زبان را می‌گیرد.
prompt string
چند واژهٔ خاص (نام آدم‌ها، برند، اصطلاح) تا مدل املای درستشان را بداند.
response_format string
json (پیش‌فرض)، text، srt، vtt یا verbose_json. زیرنویس و زمان‌بندی فقط در whisper-1 و gemini-3.5-transcribe است؛ مدل‌های gpt-*-transcribe فقط json و text برمی‌گردانند. با gemini-3.5-transcribe، diarized_json هم هست: یک بخش به‌ازای هر نوبت حرف، با برچسب گوینده.
diarize boolean
فقط با gemini-3.5-transcribe: true گوینده‌ها را جدا می‌کند (تا ۸ نفر) و هر نوبت حرف در خطی جدا با برچسب گوینده می‌آید. برچسب، نام آدم‌ها نیست.
timestamp_granularities string[]
با verbose_json: word و/یا segment برای زمان هر واژه یا هر جمله.

کدام مدل

modelمناسب برایقیمت‌گذاری
gpt-4o-mini-transcribeمتن روان و دقیق فارسیتوکنی (ورودی صوت و خروجی متن)
gpt-4o-transcribeصدای شلوغ و کیفیت پایینتوکنی
gemini-3.5-transcribeجدا کردن گوینده‌ها، زیرنویس SRT/VTT، زمان هر واژهتوکنی (ورودی صوت و خروجی متن)
whisper-1زیرنویس SRT/VTT، زمان هر واژه، ترجمه به انگلیسیبه‌ازای هر دقیقهٔ صوت

فهرست به‌روز و قیمت‌ها را از GET /models?type=audio_stt بگیرید.

دقت بیشتر در صدای فارسی

  • language=fa را بفرستید. بدون آن، مدل زبان را از چند ثانیهٔ اول حدس می‌زند و صدایی که با یک جملهٔ انگلیسی شروع شود، ممکن است به خط لاتین نوشته شود.
  • نام‌های خاص را در prompt بنویسید. نام آدم‌ها، برند، شهر و اصطلاح تخصصی جلسه را با املای درست فارسی بدهید تا متن همان‌طور بنویسدشان.
  • صدای تمیز مهم‌تر از کیفیت فایل است. یک میکروفون نزدیک به گوینده بیشتر از فایل با بیت‌ریت بالا کمک می‌کند؛ ضبط ۱۶ کیلوهرتز تک‌کاناله برای گفتار کافی است.
  • برای جلسهٔ چندنفره gemini-3.5-transcribe را با diarize=true بفرستید تا هر نوبت حرف با برچسب گوینده جدا شود.
  • متن پیاده‌شده را یک بار بخوانید. عدد، نام و اصطلاح فنی جاهایی‌اند که مدل بیشتر اشتباه می‌کند؛ پیش از انتشار زیرنویس یا صورتجلسه، همین‌ها را چک کنید.

زیرنویس و زمان‌بندی

برای سرورها و کاربران داخل ایران، در این نمونه نشانی gisoo.pro را با ir.gisoo.pro جایگزین کنید؛ مسیر و کلید همان‌اند.

# 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

ترجمهٔ صوت به انگلیسی

POSThttps://gisoo.pro/api/v1/audio/translations

صدای هر زبانی را می‌گیرد و متن انگلیسی برمی‌گرداند. فقط با whisper-1:

Python audio.translations
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

فایل بزرگ‌تر از ۲۵ مگابایت

صدای گفت‌وگو با کیفیت پایین‌تر هم خوب شنیده می‌شود. فایل را تک‌کاناله و کم‌حجم کنید و اگر هنوز بزرگ بود، تکه‌تکه بفرستید:

Shell ffmpeg
# 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 صدا را خودش به کیفیت پایین تبدیل می‌کند، پس کوچک کردن فایل چیزی از دقت کم نمی‌کند.

Python input_audio با 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)
کتابخانهٔ Google

SDK اختصاصی گوگل (google-genai) و بارگذاری فایل در Files API گوگل با گیسو کار نمی‌کنند؛ فایل را همان‌طور که بالا آمده، base64 و داخل پیام بفرستید.

متن به گفتار

POSThttps://gisoo.pro/api/v1/audio/speech

پاسخ خودِ فایل صوتی است (به‌طور پیش‌فرض mp3)، نه JSON. قیمت به‌ازای تعداد نویسه‌های متن است و هر درخواست حداکثر ۴٬۰۹۶ نویسه می‌پذیرد؛ متن بلندتر را به چند تکه بشکنید.

برای سرورها و کاربران داخل ایران، در این نمونه نشانی gisoo.pro را با ir.gisoo.pro جایگزین کنید؛ مسیر و کلید همان‌اند.

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
model string الزامی
gpt-4o-mini-tts (با کنترل لحن)، tts-1 (سریع) یا tts-1-hd (کیفیت بالاتر).
input string الزامی
متن، حداکثر ۴٬۰۹۶ نویسه.
voice string الزامی
صدا: alloy، echo، fable، onyx، nova، shimmer و صداهای تازه‌تری که هر مدل دارد.
instructions string
لحن و حالت گفتار، فقط در gpt-4o-mini-tts.
response_format string
mp3، opus، aac، flac، wav یا pcm.
speed number
سرعت خواندن، از ۰٫۲۵ تا ۴.
متن فارسی

این مدل‌ها متن فارسی را هم می‌خوانند، ولی لهجه و آهنگ گفتارشان انگلیسی‌گونه است. پیش از استفاده در محصول، چند جملهٔ واقعی خودتان را با صداهای مختلف بشنوید.

صداهای فارسی Gemini

برای فارسی، gemini-3.8-flash-tts را امتحان کنید. همان POST /audio/speech است با همان پارامترها، و سه فرق دارد: صداها نام‌های خودشان را دارند (فهرست پایین)، دستور لحن در instructions جدا از متن می‌رود و بلند خوانده نمی‌شود، و با speakers یک گفت‌وگوی دونفره با دو صدا در یک فایل می‌سازید. هر درخواست تا ۳٬۰۰۰ نویسه می‌پذیرد. خود مدل صدا را با سرعت طبیعی می‌سازد و speed و response_format بعد از ساخت روی فایل اعمال می‌شوند.

برای سرورها و کاربران داخل ایران، در این نمونه نشانی gisoo.pro را با ir.gisoo.pro جایگزین کنید؛ مسیر و کلید همان‌اند.

speech = client.audio.speech.create(
    model="gemini-3.8-flash-tts",
    voice="Despina",
    input="سلام، به فروشگاه ما خوش آمدید. سفارش شما ثبت شد و تا دو روز کاری به دستتان می‌رسد.",
    instructions="Warm and calm, like a friendly shop assistant.",   # read as a style, never spoken
    response_format="mp3",
)
speech.write_to_file("welcome-fa.mp3")
Python گفت‌وگوی دونفره (speakers)
speech = client.audio.speech.create(
    model="gemini-3.8-flash-tts",
    voice="Kore",   # ignored when speakers is set
    input="مریم: امروز دربارهٔ تبدیل متن به صدا حرف می‌زنیم.\nعلی: و این‌که چطور فارسی طبیعی خوانده شود.",
    extra_body={"speakers": [
        {"speaker": "مریم", "voice": "Despina"},
        {"speaker": "علی", "voice": "Charon"},
    ]},
)
speech.write_to_file("podcast-intro.mp3")
  • voice نام یکی از صداهای جدول است. نام صداهای OpenAI (مثل nova) هم پذیرفته می‌شود و به یکی از صداهای Gemini می‌رسد؛ نام ناشناخته صدای پیش‌فرض را می‌گیرد.
  • در speakers دقیقاً دو نفر با speaker و voice بفرستید و هر خط متن را با «نام: جمله» شروع کنید. خطی که نام ندارد، ادامهٔ حرف گویندهٔ قبلی است.
  • هزینهٔ این مدل‌ها بر پایهٔ طول صدای ساخته‌شده است، نه تعداد نویسه؛ مبلغ دقیق هر درخواست در گزارش مصرف می‌آید.
صداهای gemini-3.8-flash-tts
voiceصداحال‌وهوا
Achernarزنلطیف
Aoedeزنسبک و راحت
Autonoeزنروشن
Callirrhoeزنخودمانی
Despinaزننرم
Erinomeزنشفاف
Gacruxزنپخته
Koreزنمحکم
Laomedeiaزنسرزنده
Ledaزنجوان
Pulcherrimaزنرک و مستقیم
Sulafatزنگرم
Vindemiatrixزنملایم
Zephyrزنروشن
Achirdمرددوستانه
Algenibمردخش‌دار
Algiebaمردنرم
Alnilamمردمحکم
Charonمردگویا و رسمی
Enceladusمردنجواگونه
Fenrirمردپرشور
Iapetusمردشفاف
Orusمردمحکم
Puckمردسرزنده
Rasalgethiمردگویا و رسمی
Sadachbiaمردپرانرژی
Sadaltagerمردباتجربه
Schedarمردآرام و یک‌دست
Umbrielمردخودمانی
Zubenelgenubiمردبی‌تکلف

متن فارسی را برای خواندن آماده کنید

مدل همان را می‌خواند که می‌فرستید، پس چند قاعدهٔ ساده در کد خودتان پیش از درخواست، خوانش را از عوض کردن صدا بهتر می‌کند:

  • عدد، تاریخ، ساعت و مبلغ را پیش از فرستادن به حروف تبدیل کنید («ساعت دو و نیم»، نه «14:30»).
  • نام لاتین را همان‌طور که باید شنیده شود به فارسی بنویسید و برای واژه‌ای که دو تلفظ دارد، اعراب بگذارید؛ یک جدول جایگزینی کوچک در کد برای نام برند و محصول‌هایتان کافی است.
  • متن را سر نقطه و علامت سؤال تکه کنید، نه وسط جمله؛ هر تکه را با همان صدا و همان دستور لحن بسازید تا فایل‌ها پشت هم یکدست شنیده شوند.
  • فایل‌های کوتاه و تکراری (خوش‌آمد، پیام انتظار، «سفارش شما ثبت شد») را یک بار بسازید و نگه دارید؛ هر بار ساختن دوباره هزینهٔ دوباره دارد.

پرسش‌های پرتکرار

برای API تبدیل متن به صدای فارسی کدام مدل را انتخاب کنم؟

صداهای Gemini (gemini-3.8-flash-tts و نسخهٔ ارزان‌تر gemini-3.8-flash-lite-tts) فارسی می‌خوانند و لحن را از فیلد instructions می‌گیرند. ElevenLabs v3 و v4 هم فارسی می‌خوانند؛ بیشتر مدل‌های دیگر فهرست برای انگلیسی و زبان‌های دیگرند. پیش از انتخاب، دو سه جملهٔ واقعی خودتان را با چند صدا بسازید و بشنوید.

هر درخواست متن به گفتار چقدر متن می‌پذیرد؟

با مدل‌های OpenAI تا ۴٬۰۹۶ نویسه و با صداهای Gemini تا ۳٬۰۰۰ نویسه. متن بلندتر را سر جمله‌ها تکه کنید، هر تکه را با همان صدا و همان دستور لحن بسازید و فایل‌ها را پشت هم بگذارید.

API تبدیل صدا به متن فارسی زیرنویس SRT هم می‌دهد؟

بله، با whisper-1 و gemini-3.5-transcribe: response_format را srt یا vtt بگذارید. مدل‌های gpt-*-transcribe، مثل gpt-4o-mini-transcribe، فقط json و text برمی‌گردانند.

گوینده‌های یک جلسه را از هم جدا می‌کند؟

با gemini-3.5-transcribe و diarize=true بله، تا ۸ گوینده؛ هر نوبت حرف در خطی جدا با برچسب گوینده می‌آید. برچسب نام آدم‌ها نیست و نام‌ها را خودتان جایگزین می‌کنید.

فایل صوتی حداکثر چه حجمی می‌تواند باشد؟

هر فایل در /audio/transcriptions تا ۲۵ مگابایت. ضبط‌های بلند را تک‌کاناله و کم‌حجم کنید یا به تکه‌های ۱۵ دقیقه‌ای ببرید؛ دستور ffmpeg همین صفحه هر دو را انجام می‌دهد.

صدای خودم یا یک شخص مشخص را از API می‌سازد؟

نه. فقط صداهای آمادهٔ هر مدل در دسترس است؛ ساخت صدا از روی صدای یک شخص (Voice Clone) و دوبله روی وب‌سرویس نیست.

قدم بعدی

پاسخ پرسشتان را پیدا نکردید؟

شناسهٔ درخواست (هدر X-Request-Id) را با پرسشتان در تیکت بفرستید تا دقیق بررسی کنیم.

تیکت پشتیبانی