اگر امروز در حال توسعهی یک اپلیکیشن هوش مصنوعی هستید، فاصله میان صدای رباتیک و بیان انسانی بالاخره در حال بسته شدن است. در ۷ ژوئن ۲۰۲۶، یک مستند فنی دقیق فاش کرد که مدل Gemini 3.1 Flash TTS Preview چگونه از مکانیزم تگگذاری خاصی برای تزریق احساسات و ریتم مستقیماً به خروجیهای صوتی استفاده میکند. این مدل از طریق Gemini API، Gemini in Vertex AI و Gemini AI Studio در دسترس است.
سالها بود که توسعهدهندگان با «تکبعدی بودن» یا Flatness صداهای هوش مصنوعی دستوپنجه نرم میکردند. در اکثر سیستمها، تکیه بر پروفایلهای صوتی عمومی است و تنها راه تغییر لحن، تعویض کامل مدل بود. اما رویکرد جدید گوگل اجازه میدهد یک مدل واحد، در یک متن واحد، از پچپچهای وحشتزده به لحن رسمی یک گوینده خبر تغییر حالت دهد.
طبق راهنمای فنی وبسایت dev.to، هستهی این قابلیت «تگهای صوتی» (Audio tags) است. این ویژگی به توسعهدهندگان اجازه میدهد دستورات خاصی — مانند [panicked] یا [very slow] — را مستقیماً دور بلوکهای متنی بپیچند تا اجرای صوتی را دیکته کنند.
معماری فنی
این پیادهسازی از یک استک مدرن شامل Angular 21 (آخرین نسخه تا می ۲۰۲۶)، Node.js LTS (می ۲۰۲۶) و Firebase Cloud Functions استفاده میکند. گردش کار زمانی شروع میشود که کاربر عکسی را آپلود میکند؛ سپس یک مدل Gemini آن را تحلیل کرده تا توصیههایی برای بهبود تصویر، یک توصیف، تگهای جایگزین و یک «فکت ناشناخته» (obscure fact) تولید کند.
این فکت سپس به یک تابع در Firebase ارسال میشود که به عنوان پل ارتباطی با Vertex AI عمل میکند. توسعهدهنده به دلیل محدودیتهای منطقهای در هنگکنگ، Vertex AI را به Google AI Studio ترجیح داد تا پایداری سطح سازمانی را برای تولید TTS تضمین کند. اپلیکیشن همچنین از Firebase Remote Config برای مدیریت پارامترهای پویا و از Firebase Local Emulator Suite برای تستهای محلی در آدرس http://localhost:5001 استفاده میکند.

جزئیات استقرار فنی
برای آمادهسازی محیط، توسعهدهنده از Firebase CLI با ترتیب دستورات زیر استفاده میکند:
npm i -g firebase-tools: نصب سراسری ابزارها.firebase logoutو سپسfirebase login: برای اطمینان از احراز هویت صحیح.firebase init: تنظیم Cloud Functions، محیط شبیهساز محلی (Local Emulator Suite)، Cloud Storage و Remote Config. در صورت وجود چندین پروژه، از فلگ--project <PROJECT_ID>استفاده میشود.
نصب وابستگیها برای شروع به کار توابع ابری حیاتی است. پروژه به firebase-admin و firebase-functions و همچنین کتابخانههای خاص GenAI نیاز دارد:
@google/genai: SDK اصلی برای دسترسی به Gemini.@cfworker/json-schema: وابستگی مورد نیاز برای SDK مدلهای GenAI.@modelcontextprotocol/sdk: وابستگی مورد نیاز برای SDK مدلهای GenAI.
بدون این سه کتابخانه خاص، توابع ابری قادر به اجرا نخواهند بود. در بخش فرانتاند، اپلیکیشن Angular برای مقداردهی اولیه برنامه، بارگذاری تنظیمات Remote Config و فراخوانی توابع، به وابستگی firebase نیاز دارد.
مهندسی پرامپت برای بیان احساسی
تولید صدای واقعگرایانه به چیزی بیشتر از یک تگ نیاز دارد؛ مدل به یک «صحنه» نیاز دارد. سیستم از یک SCENE_DICTIONARY استفاده میکند تا بافت محیطی را به مدل بفهماند. این آرایه شامل محیطهای متنوعی برای آمادهسازی عملکرد مدل است:
- کتابخانه: محیطی تاریک و غبارآلود با آرشیویستی که با میکروفونهای قدیمی نواری، با شدت و صدای پایین دربارهی یک راز فراموششده در یک دستنوشته در حال پوسیدن صحبت میکند.
- استودیو: استودیویی با دیوارهای شیشهای در لندن در ساعت ۱۰ شب، با چراغ روشن «ON AIR» و گویندهای پرانرژی که با ریتم یک آهنگ تپنده، سعی میکند ملتی را بیدار کند.
- اتاق خواب: محیطی صمیمی در یک اتاق خواب حومهشهری با پردههای مخملی و فرش ضخیم، که آکوستیکی شبیه به یک «دوست مورد اعتماد» ایجاد میکند.
- آزمایشگاه: محیطی مینیمالیست و پیشرفته با شیشه و فولاد، با دانشمندی عجیبوغریب که سریعاً در یک هدست صحبت میکند تا پدیدهای پیچیده را توضیح دهد.
برای جلوگیری از نادیده گرفتن دستورات توسط مدل، توسعهدهنده چندین قانون حیاتی در مهندسی پرامپت شناسایی کرد:
- قانون مرز توکن: تگها باید با یک فاصله از متن جدا شوند. استفاده از
[slow]Beforeاغلب شکست میخورد، در حالی که[slow] Beforeرفتار صحیح را فعال میکند. کد از یک تابعmakeTagاستفاده میکند تا اطمینان حاصل شود که یک فاصله به تگ اضافه شده است. - وزندهی تکراری: تگهای استاندارد مانند
[slow]ممکن است بیش از حد نامحسوس باشند. افزودن کلمه «بسیار» (مثلاً[very, very, very slow]) اثر دراماتیک را افزایش داده و طول فایل صوتی را بیشتر میکند. - پاکسازی ورودی: سیستم از توابع
sanitizeSceneوsanitizeTranscriptبرای حذف هدرهای Markdown (مانند #) و نقلقولهای سهگانه استفاده میکند. این کار مانع از شکست پارسر LLM شده و صحنه را به یک پاراگراف واحد و ایمن تبدیل میکند. - تختسازی خطوط جدید: نویسههای خط جدید (
\n) برای تبدیل خطوط به یک رشته دادهای پیوسته، Escape میشوند. - پرهیز از اصطلاحات: مدل اصطلاحات یا Idiomها را نمیفهمد. برای مثال، استفاده از تگ
[at a snail's pace]باعث شد مدل عبارت را عیناً بخواند، به جای اینکه سرعت صحبت را کم کند.
مدیریت جریانهای صوتی و Blobها
از آنجایی که مدل Gemini 3.1 Flash TTS Preview به صورت بومی از استریمینگ پشتیبانی نمیکند، پیادهسازی دادهها را به دو روش متمایز از طریق تابع readFact مدیریت میکند. تابع readFactFunction یک رشته base64 کدگذاری شده را برای تحویل همزمان (Synchronous) برمیگرداند. این تابع از convertToWav برای تبدیل دادههای خام پیش از کدگذاری به صورت data:audio/wav;base64,... استفاده میکند.
در روش جایگزین، readFactStreamFunction با ارسال تکههای (Chunks) صوتی به کلاینت، استریم را شبیهسازی میکند. فرآیند به این صورت است:
- تابع
generateAudioStreamتکههای دریافتی ازai.models.generateContentStreamرا پیمایش میکند. - دادههای خام و انواع mime را استخراج کرده و ابتدا نرخ نمونهبرداری (sample rate) را به عنوان متادیتا از طریق
response.sendChunkارسال میکند. - بافر خام هر تکه را ارسال کرده و مجموع
byteLengthرا جمعآوری میکند. - پس از ارسال تمام تکهها، تابع
createWavHeaderبا استفاده از طول کل بایتها و تنظیمات صوتی، یک هدر WAV میسازد و آن را به کلاینت بازمیگرداند.

لایههای امنیتی و زیرساختی
برای تأمین امنیت خط لوله، توسعهدهنده یک IIFE (عبارت تابعی فوراً اجرا شونده) برای اعتبارسنجی متغیرهای محیطی پیاده کرد. IIFE مربوط به AUDIO_CONFIG تضمین میکند که GOOGLE_CLOUD_LOCATION (تنظیم شده روی "global" برای دسترسی به آخرین مدل)، GEMINI_TTS_MODEL_NAME (gemini-3.1-flash-tts-preview) و GCLOUD_PROJECT موجود باشند. در صورت نبود هر یک، یک خطای HttpsError از نوع failed-precondition صادر میشود.
برای Node.js ۲۴ (تا می ۲۰۲۶)، سیستم از تابع داخلی process.loadEnvFile() استفاده میکند. برای نسخههای قدیمیتر، dotenv به عنوان جایگزین به کار میرود. امنیت بیشتر با استفاده از Firebase App Check و یک کلید سایت reCAPTCHA Enterprise تقویت شده است. این کار از دسترسیهای غیرمجاز به توابع ابری جلوگیری میکند. این توابع با محدودیت زمانی ۶۰۰ ثانیه و محدودیتهای CORS (از طریق متغیرهای WHITELIST و REFERER) پیکربندی شدهاند تا پردازشهای پیچیده تولید صوت را مدیریت کنند.
پیادهسازی در فرانتاند Angular
بخش فرانتاند دارای یک AudioTagsComponent است که از یک فرم سیگنالی (Signal Form) آزمایشی استفاده میکند. این به کاربران اجازه میدهد صحنه، احساس و سرعت را وارد کنند. audioPromptForm با یک سیگنال حاوی مقادیر پیشفرض مقداردهی شده است: صحنه یک گوینده خبر حرفهای، احساس «حرفهای و کمی جدی» و سرعت «تلفظ متوسط و واضح». این کامپوننت از یک سیگنال computed برای مرتبسازی VOICE_OPTIONS بر اساس نام و نگاشت آنها به برچسبی شامل نام و توصیف استفاده میکند.
در کامپوننت ObscureFactComponent متد generateSpeech هماهنگی تحویل صدا را بر اساس حالت انتخاب شده مدیریت میکند:
- همزمان/استریم: از
SpeechService.generateAudioیاgenerateAudioBlobURLاستفاده میکند. دومی یکBlobاز آرایه تکهها ساخته و باURL.createObjectURLیک URL قابل پخش ایجاد میکند. ابزارrevokeBlobURLدر هنگام پاکسازی برای جلوگیری از نشت حافظه (Memory Leak) استفاده میشود. - Web Audio API: از
AudioPlayerService.playStreamبرای پردازش و پخش فوری تکهها استفاده میکند.
پیکربندی اپلیکیشن فایربیس
برای مدیریت ارتباط بین فرانتاند و بکاند، یک IIFE برای اعتبارسنجی APP_API_KEY ،APP_ID ،APP_MESSAGING_SENDER_ID و RECAPTCHA_ENTERPRISE_SITE_KEY استفاده شده است. این پیکربندی از طریق تابع getFirebaseConfig ارائه میشود که از هدر Cache-Control با مقدار public, max-age=3600, s-maxage=3600 برای کش کردن تنظیمات به مدت یک ساعت بهره میبرد.
در فرآیند بوتاسترپ، تابع bootstrapFirebase چندین گام کلیدی را طی میکند:
- فراخوانی
loadFirebaseConfigبرای دریافت تنظیمات از تابع ابری. - مقداردهی اولیه
FirebaseAppوApp Checkبا استفاده ازReCaptchaEnterpriseProvider. - دریافت Remote Configuration برای تعیین
functionRegion. - اتصال به شبیهساز محلی در صورتی که نام میزبان
localhostباشد، با استفاده ازconnectFunctionsEmulator.
تحلیل: گذار به سوی «هوش مصنوعی نمایشی»
این پیشرفت نشاندهنده تغییری از «متن به گفتار» (TTS) به «متن به اجرا» (Text-to-Performance) است. با treating کردن تولید صدا به عنوان یک صحنه کارگردانی شده به جای یک تبدیل دادهای ساده، توسعهدهندگان اکنون میتوانند شخصیتهای AI غوطهورکنندهای خلق کنند که به بافت محیط واکنش نشان میدهند.
برای کاربر نهایی، این بدان معناست که دستیارهای هوش مصنوعی دیگر شبیه به یک شخصیت واحد نخواهند بود. آنها میتوانند لحن خود را بر اساس فوریت اطلاعات یا محیط کاربر تطبیق دهند و در نتیجه رزونانس عاطفی تعامل انسان و کامپیوتر را به شدت افزایش دهند.
با این حال، محدودیتها همچنان پابرجا هستند؛ پنجره متنی ۳۲ هزار توکنی و نبود استریمینگ بومی نشان میدهد که اگرچه کیفیت بالاست، اما تأخیر (Latency) برای فایلهای صوتی بسیار طولانی همچنان یک مانع برای اپلیکیشنهای بلادرنگ است. برای آزمایش این قابلیتها، توسعهدهندگان باید زبانهای پشتیبانی شده در Gemini API را بررسی کنند، هرچند باید توجه داشت که برخی گویشها مانند کانتونزی در این نسخه پیشنمایش پشتیبانی نمیشوند. باید منتظر انتقال از نسخه Preview به General Availability بود تا مشخص شود آیا استریمینگ بومی به خط تولید Flash TTS اضافه میشود یا خیر.




گفتگو