🧭 خلاصه (Summary)

Math CHOP عملیات‌های ریاضی را روی کانال‌های ورودی انجام می‌دهد.
این نود می‌تواند چند کانال از یک CHOP را با هم ترکیب کند تا یک کانال خروجی بسازد،
یا چندین CHOP را با هم ادغام کند تا یک خروجی نهایی تولید شود.

در صفحه‌ی OP می‌توان پیش از انجام عملیات اصلی، روی هر نمونه اعمالی مثل گرفتن قدر مطلق یا مجذور انجام داد.
در مرحله‌ی Combine Channels می‌توان نمونه‌های چند کانال را با هم جمع، ضرب، یا مقایسه کرد (مثلاً کمینه، بیشینه، میانگین).

در مرحله‌ی Combine CHOPs، چندین CHOP را با هم ترکیب می‌کند — به‌عنوان مثال کانال‌های CHOP اول را با CHOP دوم ضرب یا جمع می‌کند.

پس از آن، می‌توان روی نتایج نهایی عملیات پس‌پردازش (Post-Op) مثل منفی کردن یا گرفتن ریشه انجام داد.
در صفحه‌ی Mult-Add می‌توان مقادیر را ضرب و آفست کرد.
در صفحه‌ی Range می‌توان مقادیر را از یک بازه‌ی ورودی به بازه‌ی خروجی دلخواه مقیاس خطی (Linear Scaling) داد.
در پایان، می‌توان خروجی را گرد کرد (Round) تا فقط مقادیر عدد صحیح بدهد.

🔹 نکته: با پارامتر Scope در صفحه‌ی Common می‌توان مشخص کرد کدام کانال‌ها تحت تأثیر قرار بگیرند.
🔹 نکته: برای عملیات منطقی (AND، OR و …) باید از Logic CHOP استفاده شود.
🔹 نکته‌ی پیشرفته: می‌توان از متغیر chanIndex در پارامترهایی مثل Post-Add استفاده کرد
تا برای هر کانال مقدار متفاوتی تعریف شود. (مثلاً me.chanIndex*2)


⚙️ پارامترها – صفحه OP (Parameters – OP Page)

چهار مرحله‌ی اصلی به ترتیب زیر انجام می‌شود:

🔹 Channel Pre OP (preop)

اعمالی که به‌صورت تکی روی هر کانال انجام می‌شود (پیش از ترکیب):

گزینه توضیح
Off هیچ کاری انجام نمی‌دهد.
Negate مقدار منفی هر نمونه را می‌گیرد.
Positive همه‌ی مقادیر را مثبت می‌کند (قدر مطلق).
Root جذر هر مقدار را می‌گیرد.
Square مقدار را به توان ۲ می‌رساند.
Inverse معکوس هر مقدار را می‌گیرد (۱/x).

🔹 Combine Channels (chanop)

عملیاتی که بین کانال‌های یک CHOP انجام می‌شود:

گزینه توضیح
Off هیچ ترکیبی انجام نمی‌دهد.
Add مجموع تمام کانال‌ها.
Subtract تفریق همه از کانال اول.
Multiply ضرب همه‌ی کانال‌ها.
Divide تقسیم کانال اول بر بقیه.
Average میانگین همه‌ی کانال‌ها.
Minimum کمترین مقدار بین کانال‌ها.
Maximum بیشترین مقدار بین کانال‌ها.
Length فرض بر بردار بودن کانال‌ها و محاسبه‌ی طول آن‌ها.

🔹 Combine CHOPs (chopop)

عملیات بین چندین ورودی CHOP:

گزینه توضیح
Off هیچ ترکیبی انجام نمی‌دهد.
Add جمع کل CHOPها.
Subtract تفریق از CHOP اول.
Multiply ضرب تمام CHOPها.
Divide تقسیم CHOP اول بر بقیه.
Average میانگین همه‌ی ورودی‌ها.
Minimum / Maximum کمترین یا بیشترین مقدار.
Length طول برداری از ورودی‌ها.

🔹 Channel Post OP (postop)

عملیات نهایی روی نتایج ترکیب بالا، دقیقاً مانند Pre OP:

گزینه توضیح
Off بدون تغییر
Negate / Positive / Root / Square / Inverse همان گزینه‌های مرحله‌ی اول ولی بعد از ترکیب.

🔹 Match by (match)

مشخص می‌کند که کانال‌ها بین ورودی‌ها بر اساس نام یا شماره مطابقت داده شوند.

گزینه توضیح
Channel Number (index) بر اساس شماره‌ی کانال.
Channel Name (name) بر اساس نام کانال.

🔹 Align (align)

وقتی ورودی‌ها شروع یا پایان زمانی متفاوتی دارند، مشخص می‌کند چگونه هم‌تراز شوند:

گزینه توضیح
Automatic به‌صورت خودکار تریم یا اکستند می‌کند.
Extend to Min/Max ورودی‌ها را به بازه‌ی مشترک بلندتر گسترش می‌دهد.
Stretch to Min/Max ورودی‌ها را کشیده و هم‌طول می‌کند.
Shift to Minimum / Maximum شروع یا پایان ورودی‌ها را هماهنگ می‌کند.
Trim / Stretch to First / Smallest Interval تریم یا کشش بر اساس CHOP اول یا کوتاه‌ترین بازه.

🔹 Interp Pars per Sample (interppars)

در ورودی‌هایی با فرکانس بالا (مثل صوت)، از این گزینه استفاده می‌شود
تا در زمان تغییر پارامترهایی مثل Multiply یا Add صدای “کلیک” یا “کراکل” ایجاد نشود.


🔹 Integer (integer)

نتایج را به اعداد صحیح تبدیل می‌کند:

گزینه توضیح
Off بدون تغییر.
Ceiling گرد به بالا.
Floor گرد به پایین.
Round گرد به نزدیک‌ترین عدد.

⚙️ پارامترها – صفحه Mult-Add (Parameters – Mult-Add Page)

سه مرحله به ترتیب انجام می‌شود:

  1. Pre-Add (preoff) → ابتدا به هر نمونه مقدار اضافه می‌کند.

  2. Multiply (gain) → سپس در این مقدار ضرب می‌کند.

  3. Post-Add (postoff) → در پایان مقدار دیگری اضافه می‌کند.

ترکیب کلاسیک ریاضی:
Output = (Input + PreAdd) × Multiply + PostAdd


⚙️ پارامترها – صفحه Range (Parameters – Range Page)

آخرین مرحله قبل از خروجی‌گیری، برای مقیاس‌دهی بازه‌ها است.

پارامتر توضیح
From Range (fromrange) بازه‌ی ورودی (کمترین تا بیشترین مقدار).
To Range (torange) بازه‌ی خروجی که مقادیر به آن نگاشت می‌شوند.

مثال: اگر بخواهی ورودی بین ۰ تا ۱ را به خروجی بین -۵ تا ۵ تبدیل کنی،
From Range = 0→1 و To Range = -5→5


⚙️ پارامترهای مشترک – صفحه Common (Parameters – Common Page)

پارامتر توضیح
Time Slice (timeslice) خروجی فقط بین آخرین و فریم فعلی پردازش شود.
Scope (scope) انتخاب کانال‌هایی که باید تحت تأثیر قرار گیرند.
Sample Rate Match (srselect) نحوه‌ی هم‌زمان‌سازی نرخ نمونه‌برداری بین ورودی‌ها.
Export Method (exportmethod) نحوه‌ی اتصال خروجی به پارامترها یا DATها.
Export Root / Table مسیر پایه و جدول داده‌های Export.

🔌 ورودی‌ها (Operator Inputs)

ورودی توضیح
Input 0 CHOP یا CHOPهایی که قرار است عملیات ریاضی روی آن‌ها انجام شود.

📊 Info CHOP Channels

🔹 Common CHOP Info Channels

پارامتر توضیح
start شروع بازه در نمونه‌ها.
length تعداد نمونه‌ها.
sample_rate نرخ نمونه‌برداری بر حسب فریم بر ثانیه.
num_channels تعداد کانال‌ها.
time_slice فعال بودن Time Slice.
export_sernum شمار دفعات به‌روزرسانی Export.

🔹 Common Operator Info Channels

پارامتر توضیح
total_cooks تعداد دفعات پردازش (Cook).
cook_time مدت زمان Cook آخر (ms).
cook_frame / cook_abs_frame فریم نسبی و مطلق آخرین Cook.
cook_start_time / cook_end_time زمان شروع و پایان Cook.
cooked_this_frame آیا در همین فریم پردازش شده یا نه.
warnings / errors تعداد هشدارها یا خطاها.