🧭 خلاصه (Summary)
MIDI Out CHOP رویدادهای MIDI را به هر دستگاه MIDI در دسترس ارسال میکند، زمانیکه مقدار ورودی کانالهایش تغییر کند.
برای کنترل دقیقتر، میتوان از کلاس پایتون midioutCHOP استفاده کرد تا هر نوع رویداد MIDI را از طریق همین CHOP به دستگاه ارسال کند.
در Tscript نیز دستور midi برای خروجی رویدادهای MIDI استفاده میشود.
دستگاههای مقصد میتوانند نرمافزارهایی مثل midisynth یا سختافزارهای متصل به پورتهای سریال باشند.
کانالها برای کنترل ارسال رویدادها استفاده میشوند و در آخرین بازه زمانی (از موقعیت قبلی تایملاین تا موقعیت فعلی) ارزیابی میشوند.
MIDI Out CHOP فقط وقتی رویداد میفرستد که مقدار ورودی در همان بازه تغییر کرده باشد.
زمانبندی همهی رویدادها حفظ میشود، بهشرطیکه تایملاین در حالت Realtime باشد (پرچم “Realtime” در منوی بالا فعال باشد).
🎛️ نامگذاری کانالها (Channel Naming)
کانالها با نام خود به رویدادها نگاشت میشوند.
رویدادهایی مانند نتها، کنترلرها و وِلاسیتی باید با شمارهی مربوط همراه باشند:
n65→ نت شماره ۶۵c7→ کنترلر شماره ۷اگر شماره حذف شود، مقدار کانال به عنوان شماره نت تفسیر میشود.
سایر رویدادها که کل کانال MIDI را هدف میگیرند (مثل Program Change یا Pitch Wheel) نیازی به شماره ندارند.
پیشوند ch برای تعیین شماره کانال MIDI استفاده میشود.
مثلاً:
ch1n45→ نت شماره ۴۵ روی کانال MIDI شماره ۱ch14c7→ کنترلر ۷ (ولوم) در کانال ۱۴
میتوان با Rename CHOP نام کانالها را قبل از ورود به MIDI Out CHOP تغییر داد.
🎚️ وِلاسیتی (Velocity)
مقدار کانالهای ورودی بهعنوان وِلاسیتی نتها ارسال میشود.
اگر Normalize = None، مقدار باید بین ۰ تا ۱۲۷ باشد.
اگر Normalize = 0→1، مقادیر بین ۰ تا ۱ به محدودهی ۰ تا ۱۲۷ نگاشت میشوند.
⚙️ نکات عملی و عملکردی
گزینهی Cook Every Frame باعث میشود CHOP در هر فریم اجرا شود، حتی اگر روی صفحه دیده نشود.
گزینههای All Volume Off / On رویدادهایی برای کنترلر شماره ۷ در هر ۱۶ کانال ایجاد میکنند.
خروجی MIDI در رشتهای جداگانه اجرا میشود تا کندی عملکرد TouchDesigner را کاهش دهد.
در حالت Time Slice برای رویدادهای Note و Controller فعال است (نه برای Program Change یا SysEx).
نتها فقط زمانی Note On میفرستند که مقدار ورودی از ≤۰ به >۰ برسد.
به همین ترتیب، Note Off وقتی اتفاق میافتد که مقدار به ۰ برگردد.
📦 مثالها
| نام کانال | توضیح |
|---|---|
| ch3n60 | نت شماره ۶۰ در کانال ۳. وقتی مقدار از ۰ به بالاتر برود، Note On میفرستد. |
| ch5n | مقدار کانال شماره نت است. وقتی عدد تغییر کند (مثلاً ۵۳ → ۷۸)، نت قبلی Off و نت جدید On میشود. |
| ch14c7 | مقدار کانال به کنترلر ۷ (ولوم) در کانال ۱۴ ارسال میشود. مقادیر ۰ تا ۱ به ۰ تا ۱۲۷ نگاشت میشوند. |
ویژگیهای پیشرفته در حالت Time Slice
پیشوند کانالها بهصورت پیشفرض “ch” است (ch1 تا ch16).
نتها با
nو کنترلرها باcمشخص میشوند.از نسخههای جدید، Aftertouch، Pressure و Pitch Wheel نیز پشتیبانی میشود.
نرمالسازی مقادیر نتها بین ۰–۱۲۷ یا ۰–۱.
MIDI Clock از کانال ramp (مثلاً bar ramp) خوانده میشود و میتواند سیگنال زمان را به بیرون بفرستد.
Program Change از طریق کانالهای
pc.از کنترلرهای ۷ بیتی و ۱۴ بیتی پشتیبانی میشود.
امکان گرفتن جریان MIDI و ذخیره در فایل وجود دارد.
⚙️ پارامترها — صفحه Dest
| پارامتر | توضیح |
|---|---|
| Active | روشن/خاموشکردن خروجی MIDI. |
| MIDI Destination | انتخاب مقصد ارسال (بهصورت پیشفرض MIDI Mapper). |
| Device Table | مسیر Table DAT دستگاه MIDI. |
| Device ID | شناسهی دستگاه. |
| One Based Index | ایندکس یکمبنایی (بهجای صفر). |
| MIDI File | نام فایل خروجی MIDI (در صورت ذخیره روی دیسک). |
| Write MIDI File | نوشتن دادهها در فایل MIDI. |
| Channel Prefix | پیشوند مورد انتظار برای تشخیص شماره کانال (مثل "ch" در ch1n44). |
| Cook Every Frame | اجرای CHOP در تمام فریمها، حتی بدون نمایش. |
⚙️ پارامترها — صفحه Output
| پارامتر | توضیح |
|---|---|
| Automatic Note Off | ارسال خودکار پیام “All Note Off” هنگام شروع یا پایان پخش. |
| All Notes Off | ارسال پیام خاموشی تمام نتها. |
| All Volume Off / On | ارسال پیام کنترلر ۷ برای قطع یا فعالسازی ولوم. |
| Send Start/Stop/Continue Events | ارسال رویدادهای همزمان با توقف یا شروع تایملاین. |
| Send MIDI Timecode | ارسال MIDI Timecode (MTC) بهصورت جریان پیامهای quarter-frame. |
| Timecode Object/CHOP/DAT | منبع زمان برای MTC (میتواند CHOP، DAT یا شیء Timecode باشد). |
🎵 پارامترها — صفحه Note
| پارامتر | توضیح |
|---|---|
| Note Name | نام پایهی کانال نتها (اگر عددی پس از آن باشد، بهعنوان شماره نت استفاده میشود). |
| Aftertouch Name | نام کانال Aftertouch. |
| Pressure Name | نام کانال Channel Pressure. |
| Normalize | نرمالسازی مقادیر بین ۰–۱ به MIDI ۰–۱۲۷. |
| Pitch Wheel Name | نام کانال Pitch Wheel. |
🎚️ پارامترها — صفحه Control
| پارامتر | توضیح |
|---|---|
| Controller Name | نام پایهی کانالهای کنترلر. |
| Controller Format | انتخاب بین کنترلرهای ۷ بیتی یا ۱۴ بیتی. |
| Normalize | نرمالسازی مقادیر به محدودهی ۰–۱۲۷. |
| Program Change | نام کانال تغییر برنامه. |
| Bar Ramp Name | کانال ramp (۰ تا ۱) برای تولید MIDI Clock ticks در هر چهار ضرب. |
| Ticks per Bar | تعداد تیک در هر بار (پیشفرض ۹۶ = ۴ بیت × ۲۴ تیک). |
⚙️ پارامترها — صفحه Common
| پارامتر | توضیح |
|---|---|
| Time Slice | فقط تغییرات بین cook قبلی و فعلی پردازش میشود. |
| Scope | تعیین کانالهایی که تحت تأثیر قرار میگیرند. |
| Sample Rate Match | نحوهی هماهنگسازی نرخ نمونهبرداری چند ورودی. |
| Export Method / Root / Table | تنظیمات خروجی دادهها (Export) برای پارامترها یا DATها. |
🔌 ورودیها (Operator Inputs)
| ورودی | توضیح |
|---|---|
| Input 0 | CHOP ورودی شامل دادههای MIDI برای ارسال. |
📊 Info CHOP Channels
| نام | توضیح |
|---|---|
| events_sent | تعداد رویدادهای MIDI ارسالشده. |
| start / length / sample_rate / num_channels | اطلاعات عمومی CHOP. |
| time_slice / export_sernum | وضعیتهای داخلی و شمارش export. |
| cook_time / cook_frame / errors / warnings | اطلاعات زمان cook و خطاها. |
💡 نکات کاربردی برای استفاده در پروژه بابک
اتصال TouchDesigner به سینت نرمافزاری یا سختافزار MIDI
مثلاً برای کنترل نورها یا سینت فیزیکی از طریق پارامترهای صوتی یا بصری.تبدیل دادههای بصری به MIDI برای اجراهای زنده
با Mapping مقادیر تصویر یا صدا به کانالهایch1c1,ch1n36و … میتوان دادههای حرکتی را به صدا تبدیل کرد.هماهنگی با تایملاین و BPM پروژه
از Bar Ramp Name برای ایجاد MIDI Clock Sync با سایر نرمافزارها (Ableton Live، Logic، و غیره) استفاده کن.
