| SNDIOD(8) | System Manager's Manual | SNDIOD(8) |
نام (NAME)
sndiod —
سرور صدا
و MIDI
خلاصه دستور (SYNOPSIS)
sndiod [-d]
[-a flag]
[-b nframes]
[-C min:max]
[-c min:max]
[-e enc]
[-F device]
[-f device]
[-j flag]
[-L addr]
[-m mode]
[-Q port]
[-q port]
[-r rate]
[-s name]
[-t mode]
[-U unit]
[-v volume]
[-w flag]
[-z nframes]
توضیحات (DESCRIPTION)
دیمن sndiod
یک لایه
میانی بین
برنامههای
صوتی یا MIDI و
سختافزار
است. این
دیمن
پردازش
صوتی لازم
را انجام
میدهد تا
به هر
برنامهای
امکان دهد
روی هر
سختافزار
پشتیبانیشدهای
کار کند. به
طور
پیشفرض،
sndiod تنها
اتصالات
برنامههایی
را
میپذیرد
که روی همان
سیستم اجرا
میشوند؛
این دیمن
تنها زمانی
مقداردهی
اولیه
میشود که
برنامهها
از خدمات آن
استفاده
میکنند،
که به sndiod
امکان
میدهد در
بقیه
زمانها
مقدار
ناچیزی از
منابع
سیستم را
مصرف کند.
سیستمهای
فاقد
سختافزار
صوتی
میتوانند
از sndiod
استفاده
کنند تا
دستگاههای
با قابلیت
اتصال حین
کار (hot-pluggable) را به
صورت
پیشفرض و
تقریباً
بدون هزینه
فعال نگه
دارند.
عملکرد
sndiod به این
صورت است:
حداقل یک
زیردستگاه
(sub-device) ارائه
میدهد که
هر تعداد
برنامه
صوتی
میتوانند
به آن متصل
شوند و از آن
به گونهای
استفاده
کنند که
گویی یک
سختافزار
صوتی است. در
حین پخش،
sndiod
دادههای
صوتی را به
طور همزمان
از تمام
برنامهها
دریافت
میکند،
آنها را
میکس کرده و
نتیجه را به
دستگاه
سختافزاری
ارسال
مینماید.
به طور
مشابه، در
حین ضبط،
دادههای
صوتی
ضبطشده از
دستگاه را
تکثیر کرده
و به تمام
برنامهها
ارسال
میکند. از
آنجا که
دادههای
صوتی از
طریق
فرآیند
sndiod جریان
مییابند،
این امکان
وجود دارد
که
دادههای
صوتی را در
لحظه
پردازش
کند:
- تغییر کدگذاری صدا برای غلبه بر ناسازگاریهای بین نرمافزار و سختافزار.
- هدایت صدا از یک کانال به کانال دیگر، ادغام استریو یا تقسیم مونو.
- کنترل بلندی صدای پخش به ازای هر برنامه و همچنین کنترل بلندی صدای اصلی (مستر).
- نظارت بر صدای در حال پخش، که به یک برنامه اجازه میدهد آنچه برنامههای دیگر پخش میکنند را ضبط کند.
پردازش بر اساس هر زیردستگاه پیکربندی میشود، به این معنی که صدای تمام برنامههای متصل به یک زیردستگاه طبق همان پیکربندی پردازش خواهد شد. میتوان چندین زیردستگاه تعریف کرد، که امکان همزیستی چندین پیکربندی مختلف را فراهم میسازد. کاربر پیکربندی مورد استفاده یک برنامه خاص را با انتخاب زیردستگاهی که آن برنامه استفاده میکند، تعیین مینماید.
دیمن sndiod
جعبههای
عبور MIDI
(هابها) را
ارائه
میدهد، که
به
برنامهها
امکان
میدهد
پیامهای MIDI
را به روشی
یکپارچه
برای
یکدیگر یا
به
درگاههای
سختافزاری
MIDI ارسال
کنند.
در نهایت،
sndiod یک
درگاه
کنترل MIDI را
در دسترس
قرار
میدهد که
برای موارد
زیر قابل
استفاده
است:
- کنترل میزان بلندی صدا.
- منبع ساعت مشترک برای برنامههای صوتی و MIDI.
- شروع، توقف و تغییر مکان گروههایی از برنامههای صوتی.
گزینهها به شرح زیر هستند:
-aflag- کنترل
میکند که
آیا
sndiodدستگاه صوتی یا درگاه MIDI را تنها در صورت نیاز باز کند یا آن را همیشه باز نگه دارد. اگر پرچم on باشد، دستگاه صوتی یا درگاه MIDI همیشه باز نگه داشته میشود و اطمینان حاصل میشود که هیچ برنامه دیگری نمیتواند آن را در اختیار بگیرد. اگر پرچم off باشد، به طور خودکار بسته میشود و به برنامههای دیگر اجازه میدهد دسترسی مستقیم به دستگاه صوتی داشته باشند، یا دستگاه قطع شود. مقدار پیشفرض off است. -bnframes- اندازه
بافر
دستگاه
صوتی بر حسب
فریم. یک
فریم شامل
یک نمونه (sample)
برای هر
کانال در
جریان است.
این تعداد
فریمهایی
است که قبل
از پخش بافر
میشوند و
بنابراین
تأخیر پخش
را کنترل
میکند.
پیشفرض 7680
یا دو برابر
اندازه
بلوک (
-z) در صورت تنظیم بودن اندازه بلوک است. -Cmin:max,-cmin:max- محدوده شماره کانالها به ترتیب برای جهتهای ضبط و پخش که هر کلاینتی مجاز به استفاده از آن است. این زیرمجموعهای از کانالهای دستگاه صوتی است. پیشفرض 0:1 است، یعنی استریو.
-d- فعال کردن اشکالزدایی در خروجی خطای استاندارد و عدم جداسازی از ترمینال کنترلکننده. میتواند چندین بار برای افزایش بیشتر پرگویی لاگ مشخص شود.
-eenc- تلاش برای پیکربندی دستگاه جهت استفاده از این کدگذاری. پیشفرض s16 است. نامهای کدگذاری از طرح زیر استفاده میکنند: علامتدار بودن (s یا u) به همراه دقت بر حسب بیت، ترتیب بایت (le یا be) ، تعداد بایت در هر نمونه، و تراز (msb یا lsb) . تنها علامتدار بودن و دقت اجباری هستند. مثالها: u8 ، s16le ، s24le3 ، s24le4lsb .
-Fdevice- همانند
-fاست با این تفاوت که اگر دستگاه قطع شود، دستگاهی که با گزینه قبلی-fیا-Fداده شده است استفاده خواهد شد. -fdevice- افزودن این
دستگاه
صوتی
sndio(7) به
دستگاههای
مورد
استفاده
برای پخش
و/یا ضبط.
گزینههای
قبلی مربوط
به هر
دستگاه
(
-aberwz) برای این دستگاه اعمال میشوند. زیردستگاههایی (-s) که بعد از آن اعمال میشوند به این دستگاه متصل خواهند شد. حالت دستگاه و پارامترها از زیردستگاههای متصل به آن تعیین میشوند. اگر هیچ گزینه-fاستفاده نشود،sndiodاز rsnd/0 ، rsnd/1 ، ... ، rsnd/3 استفاده خواهد کرد. -jflag- کنترل میکند که آیا در صورتی که تعداد کانالهای درخواستی توسط یک برنامه با تعداد کانالهای دستگاه برابر نباشد، کانالهای برنامه ادغام یا گسترش یابند یا خیر. اگر پرچم off باشد، کانالهای کلاینت به کانال متناظر در دستگاه هدایت میشوند و احتمالاً کانالهایی که در دستگاه وجود ندارند دور ریخته میشوند. اگر پرچم on باشد، یک کانال منفرد کلاینت ممکن است روی چندین کانال دستگاه ارسال شود، یا چندین کانال کلاینت به یک کانال منفرد دستگاه فرستاده شوند. برای مثال، این ویژگی میتواند برای تبدیل مونو به استریو استفاده شود. پیشفرض on است.
-Laddr- مشخص کردن
نشانی شبکه
محلی که
sndiodباید روی آن گوش فرا دهد؛sndiodروی درگاه TCP به شماره 11025+n گوش خواهد داد، که در آن n شماره واحد مشخصشده با-Uاست. بدون این گزینه،sndiodتنها روی سوکت دامنه UNIX گوش میدهد و از هیچ شبکهای قابل دسترسی نیست. اگر آرگومان گزینه ‘-’ باشد، در این صورتsndiodاتصالات را از هر نشانی خواهد پذیرفت. از آنجا که ارتباط امن نیست، این گزینه تنها برای شبکههای محلی که تمام میزبانها و کاربران آن معتمد هستند مناسب است. -mmode- تنظیم حالت زیردستگاه. حالتهای معتبر عبارتند از play ، rec و mon ، متناظر با پخش، ضبط و نظارت (monitoring). جریان نظارت یک جریان ضبط ساختگی متناظر با میکس تمام جریانهای پخش است. میتوان چندین حالت را با کاما جدا کرد، اما نمیتوان از یک زیردستگاه برای هر دو مورد ضبط و نظارت استفاده نمود. پیشفرض play,rec است (یعنی تمامدوطرفه یا full-duplex).
-Qport- مشخص کردن
یک درگاه MIDI
جایگزین
برای
استفاده.
اگر کار
نکند،
درگاهی که
با آخرین
گزینههای
-Qیا-qداده شده است استفاده خواهد شد. به عنوان مثال، این اجازه میدهد یک کنترلکننده USB MIDI بدون نیاز به راهاندازی مجدد برنامههای استفادهکننده از آن جایگزین شود. -qport- در دسترس
قرار دادن
درگاه MIDI
دادهشده.
این به
چندین
برنامه
اجازه
میدهد
درگاه را به
اشتراک
بگذارند.
اگر هیچ
گزینه
-qاستفاده نشود،sndiodاز rmidi/0 ، rmidi/1 ، ... ، rmidi/7 استفاده خواهد کرد. -rrate- تلاش برای اجبار دستگاه جهت استفاده از این نرخ نمونهبرداری بر حسب هرتز. پیشفرض 48000 است.
-sname- افزودن
name به
فهرست
زیردستگاههای
در دسترس.
این به
کلاینتها
اجازه
میدهد به
جای دستگاه
صوتی
فیزیکی از
sndiodبرای ورودی و خروجی صدا استفاده کنند تا دستگاه فیزیکی را با سایر کلاینتها به اشتراک بگذارند. تعریف چندین زیردستگاه اجازه میدهد یک دستگاه صوتی فیزیکی به زیردستگاههایی با ویژگیهای متفاوت (مانند محدودههای کانال) تقسیم شود. نام دادهشده name متناظر با بخش “گزینه” از رشته نام دستگاه sndio(7) است. -tmode- انتخاب
روشی که
کلاینتها
توسط
پیامهای MIDI
Machine Control (MMC) دریافت
شده توسط
sndiodکنترل میشوند. اگر حالت off باشد (پیشفرض)، برنامهها تحت تأثیر پیامهای MMC قرار نمیگیرند. اگر حالت slave باشد، برنامهها به طور همگام با پیامهای شروع MMC راهاندازی میشوند؛ علاوه بر این، ساعت سرور به عنوان پیامهای MIDI Time Code (MTC) ارائه میشود که به نرمافزارها یا سختافزارهای با قابلیت MTC اجازه میدهد با برنامههای صوتی همگام شوند. -Uunit- شماره واحد.
هر نمونه از
سرور
sndiodیک شماره واحد منحصربهفرد دارد که در نامهای دستگاه sndio(7) استفاده میشود. پیشفرض 0 است. -vvolume- میزان تضعیف نرمافزاری بلندی صدای پخش. مقدار باید بین 1 تا 127 باشد، متناظر با تضعیف -42dB تا -0dB در گامهای 1/3dB. کلاینتها این پارامتر را به ارث میبرند. کاهش بلندی صدا از قبل به بلندی صدای کلاینت اجازه میدهد تا زمانی که تعداد کلاینتها به اندازه کافی کم است، مستقل از تعداد آنها باقی بماند. 18 واحد بلندی صدا (یعنی تضعیف -6dB) اجازه میدهد تعداد برنامههای پخش دو برابر شود. پیشفرض 127 است.
-wflag- کنترل
رفتار
sndiodهنگامی که حداکثر بلندی صدای سختافزار حاصل شده و یک برنامه جدید شروع به پخش میکند. این مورد تنها زمانی اتفاق میافتد که بلندی صدا با استفاده از گزینه-vبه درستی تنظیم نشده باشد. اگر پرچم on باشد، بلندی صدای اصلی (مستر) به طور خودکار تنظیم میشود تا از اعوجاج و برش صدا (clipping) جلوگیری گردد. پیشفرض off است. -znframes- اندازه
بلوک
دستگاه
صوتی بر حسب
فریم. این
تعداد
فریمهای
بین
تیکهای
ساعت صوتی
است، یعنی
دقت ساعت.
اگر یک
زیردستگاه
با گزینه
-tایجاد شود و MTC برای همگامسازی استفاده گردد، دقت ساعت باید 96، 100 یا 120 تیک در ثانیه برای حداکثر دقت باشد. به عنوان مثال، 100 تیک در ثانیه در فرکانس 48000Hz متناظر با اندازه بلوک 480 فریم است. پیشفرض 480 یا نصف اندازه بافر (-b) در صورت تنظیم اندازه بافر است.
در خط
فرمان،
پارامترهای
مربوط به هر
دستگاه
(-aberwz) باید
قبل از
تعریف
دستگاه
(-f) قرار
گیرند، و
پارامترهای
مربوط به هر
زیردستگاه
(-Ccjmtvx) باید
قبل از
تعریف
زیردستگاه
(-s) قرار
گیرند.
تعاریف
زیردستگاه
(-s) باید
پس از تعریف
دستگاهی
(-f) که به
آن متصل
میشوند
بیایند.
اگر هیچ
دستگاه
صوتی (-f)
مشخص نشود،
تنظیمات به
گونهای
اعمال
میشوند که
گویی
دستگاه
پیشفرض
مشخص شده
است. اگر هیچ
زیردستگاهی
(-s) برای
یک دستگاه
مشخص نشود،
یک
زیردستگاه
پیشفرض
متصل به آن
ایجاد
میشود. اگر
یک دستگاه
(-f) دو بار
تعریف شود،
هر دو تعریف
ادغام
میشوند:
پارامترهای
اولی
استفاده
میشوند
اما
زیردستگاههای
(-s) هر دو
تعریف
ایجاد
میگردند.
دستگاه
پیشفرض
sndio(7)
استفادهشده
توسط sndiod
عبارت است
از rsnd/0 ، و
زیردستگاه
پیشفرض
ارائهشده
توسط sndiod
عبارت است
از snd/default .
اگر برای
sndiod
سیگنال
SIGINT یا
SIGTERM ارسال
شود، خاتمه
مییابد.
اگر سیگنال
SIGHUP ارسال
شود، تمام
دستگاههای
صوتی و
درگاههای
MIDI را مجدداً
باز
میکند.
به طور
پیشفرض،
هنگامی که
برنامه
نمیتواند
دادههای
ضبطشده را
به اندازه
کافی سریع
بپذیرد یا
نمیتواند
دادهها را
برای پخش به
اندازه
کافی سریع
ارائه دهد،
برنامه
متوقف (pause)
میشود،
یعنی
نمونههایی
که
نمیتوان
نوشت دور
ریخته
میشوند و
نمونههایی
که
نمیتوان
خواند با
سکوت
جایگزین
میگردند.
اگر یک
زیردستگاه
با گزینه
-t ایجاد
شود،
نمونههای
ضبطشده
دور ریخته
میشوند،
اما به محض
رفع انسداد
برنامه،
همان مقدار
سکوت نوشته
خواهد شد تا
به موقعیت
زمانی صحیح
برسد. به طور
مشابه سکوت
پخش
میشود،
اما به محض
رفع انسداد
برنامه
همان مقدار
از
نمونهها
دور ریخته
خواهد شد.
این امر
همگامسازی
مناسب بین
برنامهها
را تضمین
میکند.
کنترل MIDI (MIDI CONTROL)
دیمن sndiod
یک درگاه MIDI
با همان نام
زیردستگاه
صوتی
ارائهشده
ایجاد
میکند که
برنامههای
MIDI
میتوانند
به آن متصل
شوند. sndiod
ساعت
دستگاه
صوتی را در
دسترس قرار
میدهد و
اجازه
میدهد
ویژگیهای
دستگاه
صوتی از
طریق MIDI
کنترل
شوند.
یک کانال MIDI به هر جریان اختصاص مییابد و بلندی صدا با استفاده از کنترلکننده استاندارد صدا (شماره 7) تغییر میکند. به طور مشابه، هنگامی که کلاینت صوتی بلندی صدای خود را تغییر میدهد، همان پیام کنترلکننده MIDI به بیرون ارسال میشود؛ به عنوان مثال میتواند برای نظارت یا به عنوان بازخورد برای فیدرهای موتوری استفاده شود.
بلندی صدای اصلی را میتوان با استفاده از پیام سیستمی انحصاری استاندارد master volume تغییر داد.
جریانهای
ایجادشده
با گزینه
-t توسط
پیامهای MMC
زیر کنترل
میشوند:
- relocate
- این پیام
توسط
کلاینتهای
صوتی
sndiodنادیده گرفته میشود، اما موقعیت زمانی دادهشده به عنوان یک پیام MTC “full frame” به درگاههای MIDI ارسال میشود و تمام دستگاههای تابع MTC را وادار به تغییر مکان به موقعیت دادهشده میکند (به زیر مراجعه کنید). - start
- تمام
جریانها
را در حالت
شروع قرار
میدهد. در
این حالت،
sndiodمنتظر میماند تا تمام جریانها برای شروع آماده شوند، و سپس آنها را به طور همگام شروع میکند. پس از شروع، جریانهای جدیدی میتوانند ایجاد شوند (sndiod) اما تا انتقال بعدی از stop به start مسدود خواهند شد. - stop
- تمام جریانها را در حالت متوقفشده قرار میدهد (پیشفرض). در این حالت، هر جریانی که قصد شروع پخش یا ضبط را داشته باشد متوقف میشود. جریانهای کلاینت که از قبل شروع شدهاند تحت تأثیر قرار نمیگیرند تا زمانی که متوقف شوند و مجدداً تلاش کنند شروع شوند.
جریانهای
ایجادشده
با گزینه
-t ساعت
دستگاه
sndiod را با
استفاده از
MTC صادر
میکنند،
که اجازه
میدهد
نرمافزارها
یا
سختافزارهای
غیرصوتی با
جریان صوتی
همگام شوند.
حداکثر دقت
زمانی به
دست میآید
که تعداد
بلوکها در
هر ثانیه با
یکی از
نرخهای
استاندارد
ساعت MTC (یعنی
96، 100 و 120 هرتز)
برابر باشد.
نرخهای
نمونهبرداری
(-r) و
اندازههای
بلوک (-z)
زیر توصیه
میشوند:
- 44100Hz، 441 فریم (نرخ MTC برابر 100Hz است)
- 48000Hz، 400 فریم (نرخ MTC برابر 120Hz است)
- 48000Hz، 480 فریم (نرخ MTC برابر 100Hz است)
- 48000Hz، 500 فریم (نرخ MTC برابر 96Hz است)
به عنوان مثال، دستور زیر دو دستگاه ایجاد خواهد کرد: دستگاه پیشفرض snd/default و یک دستگاه تحت کنترل MIDI به نام snd/mmc:
$ sndiod -r 48000 -z 400 -s default -t slave -s mmc
جریانهای متصل به snd/default به طور عادی رفتار میکنند، در حالی که جریانهای متصل به snd/mmc منتظر سیگنال شروع MMC مانده و به طور همگام شروع به کار میکنند. صرف نظر از اینکه یک جریان به کدام دستگاه متصل است، پیچ تنظیم بلندی صدای پخش آن در دسترس قرار دارد.
اتصال حین کار (HOT PLUGGING)
اگر
دستگاههای
مشخصشده
با -F در
صورت نیاز
در دسترس
نباشند یا
در حین اجرا
جدا شوند،
sndiod تلاش
خواهد کرد
تا به طور
یکپارچه به
آخرین
دستگاه
مشخصشده
بازگردد.
دیمن sndiod
به طور
خودکار به
دستگاه
مشخصشدهای
که در حین
اجرا متصل
شده است
تغییر
وضعیت
نمیدهد. در
عوض، باید
از sndioctl(1)
برای تغییر
کنترل server.device
استفاده
شود.
به عنوان
مثال، مشخص
کردن یک
دستگاه USB با
-F به
دنبال یک
دستگاه PCI با
-f به sndiod
اجازه
میدهد
هنگام
اتصال
دستگاه USB
ترجیحاً از
آن استفاده
کند و هنگام
قطع شدن به
دستگاه PCI
بازگردد.
مثالها (EXAMPLES)
راهاندازی سرور با استفاده از پارامترهای پیشفرض، ایجاد یک زیردستگاه اضافی برای خروجی به کانالهای 2:3 تنها (بلندگوهای عقب در اکثر کارتها)، و در دسترس قرار دادن دستگاههای snd/default و snd/rear:
$ sndiod -s default -c 2:3 -s rear
راهاندازی سرور برای ایجاد زیردستگاه پیشفرض با بلندی صدای کم و یک زیردستگاه اضافی برای خروجی با بلندی صدای زیاد، و در دسترس قرار دادن دستگاههای snd/default و snd/max:
$ sndiod -v 65 -s default -v 127 -s max
راهاندازی سرور برای پیکربندی دستگاه صوتی جهت استفاده از فرکانس نمونهبرداری 48kHz، اندازه بلوک 240 فریم، و بافرهای 2 بلوکی. تأخیر متناظر 10 میلیثانیه است، یعنی زمانی که طول میکشد تا صدا 3.5 متر منتشر شود.
$ sndiod -r 48000 -b 480 -z 240
همچنین ببینید (SEE ALSO)
اشکالات (BUGS)
نمونهبرداری مجدد (resampling) کیفیت پایینی دارد؛ به ویژه از کاهش نرخ نمونهبرداری (down-sampling) هنگام ضبط باید اجتناب شود.
اگر -a
off
استفاده
شود، sndiod
ابتدا
زیردستگاهها
را برای
ارائه
ایجاد
میکند و
سپس
سختافزار
صوتی را در
صورت تقاضا
باز میکند.
از نظر فنی،
این به sndiod
اجازه
میدهد تا
تلاش کند از
یکی از
زیردستگاههایی
که خود
ارائه
میدهد به
عنوان یک
دستگاه
صوتی
استفاده
کند، که
باعث ایجاد
بنبست (deadlock)
میشود. هیچ
چیزی وجود
ندارد که
مانع از
آسیب زدن
کاربر به
خود با
ایجاد چنین
بنبستی
شود.
| September 26, 2026 | Linux 6.12.107+deb13-amd64 |