رفتن به محتوا

دیکته‌ی صوتی

به‌جای تایپ‌کردن، پرامپت‌هایت را در Claude Code CLI با صدا بگو. گفتارت زنده در ورودیِ پرامپت رونویسی می‌شود، پس می‌توانی در یک پیام، صدا و تایپ را با هم ترکیب کنی. دیکته را با /voice فعال کن، بعد یا حین حرف‌زدن یک کلید را نگه دار، یا یک‌بار بزن تا شروع شود و دوباره بزن تا ارسال شود.

دیکته در agent view هم کار می‌کند. وقتی ورودیِ dispatch یا پاسخِ یک peek-panel فوکوس است، کلیدِ push-to-talk را نگه دار یا بزن تا برای یک نشستِ پس‌زمینه دیکته کنی.

دیکته‌ی صوتی صدای ضبط‌شده‌ات را برای رونویسی به سرورهای Anthropic استریم می‌کند. صدا به‌صورت محلی پردازش نمی‌شود. سرویسِ گفتار-به-متن فقط وقتی در دسترس است که با یک حسابِ Claude.ai احراز هویت کرده باشی، و وقتی Claude Code طوری پیکربندی شده باشد که مستقیماً از کلیدِ API انتروپیک، Amazon Bedrock، Google Vertex AI یا Microsoft Foundry استفاده کند، در دسترس نیست. دیکته‌ی صوتی همچنین وقتی سازمانت رعایتِ HIPAA را فعال کرده باشد در دسترس نیست. رونویسی پیام یا توکنِ Claude مصرف نمی‌کند و در سقفِ نمایش‌داده‌شده در /usage حساب نمی‌شود. برای اینکه ببینی Anthropic چطور با داده‌هایت رفتار می‌کند، data usage را ببین.

دیکته‌ی صوتی به دسترسیِ محلیِ میکروفون هم نیاز دارد، پس در محیط‌های راه‌دور مثل Claude Code on the web یا نشست‌های SSH کار نمی‌کند. در WSL، دیکته‌ی صوتی برای دسترسی به صدا به WSLg نیاز دارد. WSLg وقتی WSL2 از Microsoft Store روی Windows 10 یا 11 نصب شده باشد، همراهش می‌آید. اگر WSLg در دسترس نباشد، مثلاً روی WSL1، به‌جایش Claude Code را در ویندوزِ بومی اجرا کن.

ضبطِ صدا روی macOS، Linux و Windows از یک ماژولِ بومیِ داخلی استفاده می‌کند. روی Linux، اگر ماژولِ بومی نتواند بارگذاری شود، Claude Code به arecord از ALSA utils یا rec از SoX برمی‌گردد. اگر هیچ‌کدام در دسترس نباشد، /voice یک دستورِ نصب برای package managerت چاپ می‌کند.

افزونه‌ی VS Code برای Claude Code هم با همان نیازمندیِ حسابِ Claude.ai از دیکته‌ی صوتی پشتیبانی می‌کند. این قابلیت در نشست‌های VS Code Remote — شامل SSH، Dev Containers و Codespaces — در دسترس نیست، چون میکروفون روی دستگاهِ محلیِ توست و افزونه روی هاستِ راه‌دور اجرا می‌شود.

فعال‌کردن دیکته‌ی صوتی

Section titled “فعال‌کردن دیکته‌ی صوتی”

برای فعال‌کردن دیکته /voice را اجرا کن. اولین باری که فعالش می‌کنی، Claude Code یک بررسیِ میکروفون انجام می‌دهد. روی macOS، اگر تا حالا به ترمینالت دسترسی داده نشده باشد، این کار درخواستِ سیستمیِ دسترسی به میکروفون را تریگر می‌کند.

/voice
Voice mode enabled (hold). Hold Space to record. Dictation language: en (/config to change).

/voice یک آرگومانِ اختیاریِ حالت می‌پذیرد:

دستوراثر
/voiceروشن/خاموش، حالتِ فعلی حفظ می‌شود
/voice holdفعال‌کردن در hold mode
/voice tapفعال‌کردن در tap mode
/voice offغیرفعال‌کردن

دیکته‌ی صوتی بین نشست‌ها پایدار می‌ماند. به‌جای اجرای /voice، آن را مستقیماً در فایلِ تنظیماتِ کاربری تنظیم کن:

{
"voice": {
"enabled": true,
"mode": "tap"
}
}

تا وقتی دیکته‌ی صوتی فعال است، وقتی پرامپت خالی است، فوترِ ورودی راهنماییِ hold Space to speak را نشان می‌دهد. این راهنما باندِ فعلیِ voice:pushToTalk تو را بازتاب می‌دهد و اگر کلیدِ دیکته را تغییر بدهی به‌روز می‌شود. متنِ راهنما در هر دو حالت یکسان است، و اگر خط وضعیتِ سفارشی پیکربندی کرده باشی نمایش داده نمی‌شود.

رونویسی در هر دو حالت برای واژگانِ کدنویسی تنظیم شده است. اصطلاحاتِ رایجِ توسعه مثل regex، OAuth، JSON و localhost درست تشخیص داده می‌شوند، و نامِ پروژه‌ی فعلی و نامِ شاخه‌ی git تو به‌صورت خودکار به‌عنوان راهنماهای تشخیص اضافه می‌شوند.

حالت hold همان push-to-talk است: تا وقتی کلید را نگه داری ضبط ادامه دارد و وقتی رهایش کنی متوقف می‌شود. این حالتِ پیش‌فرض است.

برای شروعِ ضبط Space را نگه دار. Claude Code کلیدِ نگه‌داشته‌شده را با رصدِ رویدادهای سریعِ key-repeat از ترمینالت تشخیص می‌دهد، پس پیش از شروعِ ضبط یک گرم‌شدنِ کوتاه هست. فوتر حین گرم‌شدن keep holding… را نشان می‌دهد، بعد به‌محضِ فعال‌شدنِ ضبط به یک شکلِ موجِ زنده تغییر می‌کند.

چند کاراکترِ اولِ key-repeat حین گرم‌شدن داخل ورودی تایپ می‌شوند و به‌محضِ فعال‌شدنِ ضبط به‌صورت خودکار حذف می‌شوند. یک‌بار زدنِ تکیِ Space هنوز یک فاصله تایپ می‌کند، چون تشخیصِ نگه‌داشتن فقط روی تکرارِ سریع تریگر می‌شود.

حین حرف‌زدن، گفتارت در پرامپت ظاهر می‌شود، تا وقتی متن نهایی شود کم‌رنگ است. برای توقفِ ضبط و نهایی‌کردنِ متن، Space را رها کن. متن در محلِ مکان‌نمایت درج می‌شود و مکان‌نما در انتهای متنِ درج‌شده می‌ماند، پس می‌توانی تایپ و دیکته را به هر ترتیبی ترکیب کنی. برای افزودنِ یک ضبطِ دیگر دوباره Space را نگه دار، یا اول مکان‌نما را جابه‌جا کن تا گفتار را جای دیگری در پرامپت درج کنی:

> refactor the auth middleware to ▮
# hold Space, speak "use the new token validation helper"
> refactor the auth middleware to use the new token validation helper▮

به‌طور پیش‌فرض، رهاکردنِ کلید متن را درج می‌کند و منتظر می‌ماند تا Enter بزنی. در آبجکتِ تنظیماتِ voice مقدارِ "autoSubmit": true را بگذار تا وقتی کلید را رها می‌کنی پرامپت به‌صورت خودکار ارسال شود، به‌شرطی که متن دستِ‌کم سه کلمه باشد.

حالت tap با یک‌بار فشردنِ کلید ضبط را روشن/خاموش می‌کند: یک‌بار بزن تا شروع شود، حرف بزن، بعد دوباره بزن تا پرامپت ارسال شود. گرم‌شدنی در کار نیست، و لازم نیست کلید را نگه داری.

حالت tap را با /voice tap فعال کن. وقتی ورودیِ پرامپت خالی است، Space را بزن تا ضبط شروع شود. فوتر حین ضبط یک شکلِ موجِ زنده نشان می‌دهد. دوباره Space را بزن تا متوقف شود. اگر متن دستِ‌کم سه کلمه باشد، Claude Code متن را درج و پرامپت را به‌صورت خودکار ارسال می‌کند. متن‌های کوتاه‌تر درج می‌شوند ولی ارسال نمی‌شوند، پس یک زدنِ تصادفی یک کلمه‌ی پرت را نمی‌فرستد.

اولین زدن فقط وقتی ورودیِ پرامپت خالی است ضبط را شروع می‌کند، پس حین نوشتنِ یک پیام هنوز می‌توانی به‌طور معمول فاصله تایپ کنی. زدنِ دوم صرف‌نظر از محتوای ورودی ضبط را متوقف می‌کند. ضبط همچنین پس از ۱۵ ثانیه سکوت یا دو دقیقه به‌طورِ کامل، خودبه‌خود متوقف می‌شود.

دیکته‌ی صوتی از همان تنظیمِ language استفاده می‌کند که زبانِ پاسخِ Claude را کنترل می‌کند. اگر آن تنظیم خالی باشد، دیکته به‌طور پیش‌فرض انگلیسی است. در افزونه‌ی VS Code، اگر language خالی باشد، دیکته پیش از بازگشت به انگلیسی از تنظیمِ accessibility.voice.speechLanguage در VS Code استفاده می‌کند.

زبان‌های پشتیبانی‌شده‌ی دیکته
زبانکد
چکیcs
دانمارکیda
هلندیnl
انگلیسیen
فرانسویfr
آلمانیde
یونانیel
هندیhi
اندونزیاییid
ایتالیاییit
ژاپنیja
کره‌ایko
نروژیno
لهستانیpl
پرتغالیpt
روسیru
اسپانیاییes
سوئدیsv
ترکیtr
اوکراینیuk

زبان را در /config یا مستقیماً در تنظیمات بگذار. می‌توانی یا از کدِ زبانِ BCP 47 یا از نامِ زبان استفاده کنی:

{
"language": "japanese"
}

اگر تنظیمِ language تو در فهرستِ پشتیبانی‌شده نباشد، /voice هنگامِ فعال‌سازی هشدار می‌دهد و برای دیکته به انگلیسی برمی‌گردد. پاسخ‌های متنیِ Claude از این بازگشت تأثیر نمی‌گیرند.

کلیدِ دیکته در کانتکستِ Chat به voice:pushToTalk باند شده و پیش‌فرضش Space است. همین باند هر دو حالتِ hold و tap را کنترل می‌کند. آن را در ~/.claude/keybindings.json تغییر بده:

{
"bindings": [
{
"context": "Chat",
"bindings": {
"meta+k": "voice:pushToTalk",
"space": null
}
}
]
}

اکشنِ voice:pushToTalk هر بار یک کلید را به کار می‌گیرد. وقتی یک کلیدِ سفارشی باند می‌کنی، به‌جای افزودنِ یک تریگرِ دوم، جایگزینِ باندِ پیش‌فرضِ Space می‌شود؛ پس خطِ "space": null در این مثال فقط برای روشنیِ کار است و بدونِ تغییرِ رفتار می‌توان حذفش کرد.

در حالت hold، از باندکردنِ یک کلیدِ حرفِ تنها مثلِ v بپرهیز، چون تشخیصِ نگه‌داشتن به key-repeat تکیه دارد و آن حرف حین گرم‌شدن داخلِ پرامپت تایپ می‌شود. از Space استفاده کن، یا از یک ترکیبِ modifier مثلِ meta+k تا ضبط از همان اولین کلید بدونِ گرم‌شدن شروع شود. حالت tap گرم‌شدنی ندارد، پس بیشترِ کلیدها کار می‌کنند.

بعضی کلیدها به برنامه‌های ترمینالی تحویل داده نمی‌شوند و اصلاً نمی‌توان باندشان کرد. مثلاً Caps Lock اگر بخواهی باندش کنی خطا نشان می‌دهد. برای نحوِ کاملِ keybinding و فهرستِ میان‌برهای رزروشده، سفارشی‌کردن میان‌برهای صفحه‌کلید را ببین.

مشکلاتِ رایج وقتی دیکته‌ی صوتی فعال نمی‌شود یا ضبط نمی‌کند:

  • Voice mode requires a Claude.ai account: با یک کلیدِ API یا یک ارائه‌دهنده‌ی شخصِ ثالث احراز هویت کرده‌ای. برای ورود با حسابِ Claude.ai، /login را اجرا کن.
  • Microphone access is denied: در تنظیماتِ سیستم به ترمینالت دسترسیِ میکروفون بده. روی macOS برو به System Settings ← Privacy & Security ← Microphone و برنامه‌ی ترمینالت را فعال کن، بعد دوباره /voice را اجرا کن. روی Windows برو به Settings ← Privacy & security ← Microphone و دسترسیِ میکروفون را برای برنامه‌های دسکتاپ روشن کن، بعد دوباره /voice را اجرا کن. اگر ترمینالت در تنظیماتِ macOS فهرست نشده، ترمینال در تنظیماتِ میکروفونِ macOS فهرست نشده را ببین.
  • No audio recording tool found روی Linux: ماژولِ صدای بومی نتوانست بارگذاری شود و هیچ بازگشتی هم نصب نیست. SoX را با دستوری که در پیامِ خطا نشان داده شده نصب کن، مثلاً sudo apt-get install sox.
  • Voice mode could not find a working audio recorder in WSL: WSLg صدا را به‌جای یک دستگاهِ ALSA از طریقِ PulseAudio مسیریابی می‌کند، پس SoX باید بک‌اندِ PulseAudio‌اش را به‌صراحت نصب‌شده داشته باشد. sudo apt install sox libsox-fmt-pulse را اجرا کن. نصبِ تنهای sox بک‌اندِ ALSA را می‌آورد که روی WSL نمی‌تواند ضبط کند چون دستگاهِ /dev/snd وجود ندارد.
  • Voice input is failing repeatedly and has been paused: دیکته‌ی صوتی چند بارِ پیاپی هنگامِ راه‌اندازی شکست خورده و تا وقتی یکی موفق شود تلاش برای نشست‌های جدید را متوقف کرده است. این معمولاً یعنی میکروفون یا پشته‌ی صوتیِ این هاست نمی‌تواند صدا را ضبط کند، مثلاً یک سرورِ بدونِ نمایشگر، یک شِلِ راه‌دور بدونِ عبورِ صدا، یا یک دسترسیِ میکروفونِ ردشده. یک دستگاهِ ورودیِ سالم را تأیید کن، علتِ ریشه‌ای را از موارد بالا برطرف کن، بعد دوباره voice را تریگر کن.
  • در حالت hold با نگه‌داشتنِ Space هیچ اتفاقی نمی‌افتد: حین نگه‌داشتن، ورودیِ پرامپت را تماشا کن. اگر فاصله‌ها همین‌طور انباشته می‌شوند، احتمالاً دیکته‌ی صوتی خاموش است؛ برای فعال‌کردنش /voice hold را اجرا کن. اگر فقط یکی-دو فاصله ظاهر می‌شود و بعد هیچ، دیکته‌ی صوتی روشن است ولی تشخیصِ نگه‌داشتن تریگر نمی‌شود. تشخیصِ نگه‌داشتن نیاز دارد که ترمینالت رویدادهای key-repeat بفرستد، پس اگر key-repeat در سطحِ OS غیرفعال باشد نمی‌تواند کلیدِ نگه‌داشته‌شده را تشخیص دهد. با /voice tap به حالت tap برو تا از نیاز به key-repeat بگذری.
  • در حالت tap زدنِ Space به‌جای ضبط یک فاصله تایپ می‌کند: اولین زدن فقط وقتی ورودیِ پرامپت خالی است ضبط را شروع می‌کند. اول ورودی را پاک کن، یا با اجرای /voice tap مطمئن شو در حالت tap هستی.
  • No audio detected from microphone: ضبط شروع شد ولی سکوت گرفت. مطمئن شو دستگاهِ ورودیِ درست به‌عنوان پیش‌فرضِ سیستم تنظیم شده و سطحِ ورودی‌اش بی‌صدا یا نزدیکِ صفر نیست. روی Windows، Settings ← System ← Sound ← Input را باز کن و میکروفونت را انتخاب کن. روی macOS، System Settings ← Sound ← Input را باز کن.
  • No speech detected: صدا به سرویسِ رونویسی رسید ولی هیچ کلمه‌ای تشخیص داده نشد. نزدیک‌تر به میکروفون حرف بزن، نویزِ پس‌زمینه را کم کن، و مطمئن شو زبانِ دیکته‌ات با زبانی که حرف می‌زنی می‌خواند.
  • رونویسی به‌هم‌ریخته است یا به زبانِ اشتباه: دیکته به‌طور پیش‌فرض انگلیسی است. اگر به زبانِ دیگری دیکته می‌کنی، اول آن را در /config بگذار. تغییر زبانِ دیکته را ببین.

ترمینال در تنظیماتِ میکروفونِ macOS فهرست نشده

Section titled “ترمینال در تنظیماتِ میکروفونِ macOS فهرست نشده”

اگر برنامه‌ی ترمینالت زیرِ System Settings ← Privacy & Security ← Microphone ظاهر نمی‌شود، هیچ کلیدی نیست که بتوانی فعالش کنی. وضعیتِ دسترسیِ ترمینالت را ریست کن تا اجرای بعدیِ /voice یک درخواستِ تازه‌ی macOS را تریگر کند.

ریست‌کردن دسترسیِ میکروفون برای ترمینالت

tccutil reset Microphone <bundle-id> را اجرا کن و <bundle-id> را با شناسه‌ی ترمینالت جایگزین کن: com.apple.Terminal برای ترمینالِ داخلی، یا com.googlecode.iterm2 برای iTerm2. برای ترمینال‌های دیگر، شناسه را با osascript -e 'id of app "AppName"' پیدا کن.

بستن و دوباره باز‌کردن ترمینالت

macOS به فرایندی که از قبل در حالِ اجراست دوباره درخواست نمی‌دهد. برنامه‌ی ترمینال را با Cmd+Q ببند — نه فقط بستنِ پنجره‌هایش — بعد دوباره بازش کن.

تریگرکردن یک درخواستِ تازه

Claude Code را اجرا کن و /voice را بزن. macOS برای دسترسی به میکروفون درخواست می‌دهد؛ اجازه بده.