Find us on Google+ سییتم های تعاملی - رسانه های تعاملی - پیور دیتا

۲۳ آبان ۱۳۹۱

نکات اولیه در puredata


نحوه ذخیره سازی پچ ها (patch) در Puredata :

در Puredata برای باز کردن و ذخیره کردن یک پچ ( patch) از منوی معمول File زیرمنوی Save ( جهت ذخیره سازی پتچ ) و یا زیر منوی Open را (جهت باز کردن یک پتچ) استفاده میکنیم .

 بهتر است بخاطر داشته باشیم که از پتچ در حال اجرا چند نسخه ی متفاوت داشته باشیم و با پیشرفت کار روی نسخه قبلی ان  را ذخیره نکنیم .این کار را به ۲ دلیل توصیه میکنیم :
۱-مسیر پیشرفت پروژه را ذخیره خواهید کرد و در صورت وقوع هرگونه اشتباه در مراحل پیشرفت کارو کار نکردن پتچ (Patch) مجبور به بازگشت به نقطه صفر نخواهید شد. (اما اگر فقط یک نسخه ذخیره شده از کل پروژه داشته باشد برگشت به یک مرحله عقب تر غیر ممکن خواهد بود )
۲-اگر به هر دلیل هنگام کار روی پروژه  کامپیوتر شما قفل شود کل پروژه را از دست خواهید داد،اما با داشتن چند نسخه ذخیره شده از مراحل پروژه حداقل میتوان به یک مرحله قبل از قفل شدن کامپیوتر برگشت.
پس با ذخیره کردن Patch  به صورت زیر از وقوع چنین مشکلاتی جلو گیری میکنیم :
versione: “_v1”, “_v2”,...

اتصال ها و خطا ها در Puredata :

به خاطر داشته باشد که لزوما همه ی  خروجی ها،نمیتوانند به ورودی هایی از  هرنوع جعبه ای وصل شوند و در این صورت در پنجره اصلی Pure data با پیغام خطا روبرو خواهید شد.


اتصال ها و خطا ها در Puredata
اتصال ها و خطا ها در Puredata
همیشه پنجره اصلی برنامه را کنترل کنید تا از وجود هر گونه خطا به سرعت مطلع شوید و ان را بررسی کنید.

ارایه (Array) :

یک ساختاری از داده ها از اندازه N با ویژگی های زیر است :
   -دنباله ای از N تعداد Float
   -۴ byte  ضرب در عدد،۱ ثانیه از صوت ضبط شده از ۴۴.۱KHzبرابر است با  ۴۴.۱ *۴ =۱۷۶KB  
   -شاخص از۰ تا n-۱   
برای ذخیره کردن اعداد و صدا ها لازم است.
        [tabread <arrayname>] [tabwrite <arrayname>]

Array را میتوانید از منوی Put انتخاب کرده و مشخصه های ان را تنظیم کنید:
Name: نام ارایه 
Size: اندازه 
Save contents [ ]:اگر درست(TRUE) بود محتوا را در فایل pd ذخیره کند،
                          اگر غلط (FALSE) بود هر بار از صفر مقدار دهی کند 
Delete me [ ]:  پاک کردن ارایه (Array)
   -نمونه های صوتی را بهتر است در یک فایل جداگانه ذخیره کنید


ارایه Array
ارایه
نمایش گرافی
نمایش گرافی  

زیر پتچ Subpatch :

یک زیر پتچ (Subpatch)  در یک جعبه گنجانیده میشود و در واقع امکان ساختن یک مجموعه از مولفه های هوشمند را دارد.
برای ایجاد یک Subpatch  دو راه وجود دارد و در هر۲ راه Subpatch مثل یک آبجکت ظاهر میشود :


     ۱-ONE-OFF SUPATCH
     -با نوشتن عبارت pd ( بدون هرگونه فاصله یا حروف خاص ) در درون یک جعبه از نوع Object  و قرار دادن ان در پتچ     
      مادر میتوانیم یک Subpatch داشته باشیم .
 ONE_OFF SUBPATCH
Subpatch


      *در صورت کپی شدن Subpatch، هر یک از نسخه های کپی شده  مستقل از دیگران میباشد و تغییرات اعمال شده روی         
         سایر نسخه های کپی شده  Subpatch تاثیر نمی گذارد.*

      ۲-ABSTRACTION
      - فراخواندن یک  پتچی که از قبل ایجاد شده ،زمانی که Object ای را با نام پتچ موجود، پیدا میکند.
ABSTRACTION
Subpatch

      *به عنوان مثال  با ذخیره کردن یک پتچ با نام abstraction1.pd و ایجاد یک
       شی با نام  [Abstraction1].پچ  با این نام  لود خواهد شد.*
      *تغیرات اعمال شده روی Subpatch روی سایر نسخه های کپی شده یا Object  های با همان اسم اعمال میشود  اما برای
        این کار لازم است یک بارذخیره،سپس بسته و دوباره باز شود.*

      *برای کنترل کردن GUI پتچ مادر  :
       Right Click → open → open subpatch → properties →  [ ] graph on parent 


Subpatch
Subpatch

Subpatch In/Out :

-اشیاء "ورودی"، "ورودی ~" "خروجی" و "خروجی ~" هنگامی که در یک Subpatch قرار داده میشوند ، "ورودی" و "خروجی" برای box ای که subpatch در ان قرار دارد، ایجاد میکنند.
                     
        * ورودی = inlet
           خروجی = outlet
           ورودی ~ = ~ inlet
           خروجی ~ = ~ outlet*
                       
-شامل هر دو  subpatcheها یعنی  one-off subpatches وAbstraction  است.
-ورودی و خروجی ها به همراه علامت " ~ " ،ورودی و خروجی ها یی برای سیگنال های صوتی به شمار می آیند .

-ادغام کردن  ورودی و خروجی  message ها با audio درsubpatch امکان پذیر نیست و باید همه از یک نوع باشند.
-ترتیب ورودی و خروجی ها در جعبه subpatch از چپ به راست است.

Object های مربوط به زمان :

<delay<n
-وقفه زمانی  بین هردستورbang در هر n هزارم ثانیه .
timer
-فاصله زمانی بین ورودی راست و چپ .
<pipe<n
-تاخیر بین یک message در هر n هزارم ثانیه .
<metro <n
-اتفاق افتادن یک bang در هر n هزارم ثانیه .
line[~]
-ایجاد یک شیب صوتی .
qlist
-یک ترتیب سنج (sequencer) ساده ایجاد میکند . 


برای درک بیشتر مفاهیم فوق نگاهی به مثال های موجود  دربرنامه puredata  بیاندازید  :

•Pure Data/ → 2.Control.examples/ → 07.time,09.send_receive, 13.locality
14.dollarsigns, 18.conditional, 19.random, 20.weighted-random, 
23.sequencing, 24.loops

Object های مشروط (conditional objects) :

select
-ورودی ها را با آرگومان ها مقایسه میکند؛تعداد خروجی های ان با تعداد آرگومان ها متفاوت است ،اگر ورودی با آرگومان مقارن
وهم زمان بود یک دستور bang رو روی خروجی مرتبط اعمال میکند.
route
-شبیه select است،با این تفاوت که در این مورد داده ها( نه یک bang ) روی خروجی مرتبط مشاهده می شوند. و در واقع messagge ها را بر اساس  اولین المان اشان مسیر دهی میکند.
spigot
-messagge را در ورودی  بر اساس اینکه ورودی دوم مقداری برابر ۰ یا ۱ داشته باشد، جلو و عقب میکند. در واقع کار ان    تصویب و یا مسدود کردن پیام ها است .
moses
-moses ها اعداد را میگیرند و خروجی چپ میدهند،اگر مقدارشان از یک مقدار کنترل شده کمتر باشد و اگر بزرگتر یا مساوی ان مقدار کنترل شده باشند خروجی راست میدهند.  









۲۰ آبان ۱۳۹۱

آموزش PureData

معرفی :
تحقق بخشیدن به یک اثر چند رسانه ایی تعاملی (interactive multimedia) بدون داشتن دانش کافی از فناوری های امروزی ممکن نیست . فناوری اطلاعات ابزار های جدیدی معرفی کرده است که اجازه یک حالت تعامل طبییعی ، بر اساس حرکات بدن و صداها بین کاربر و اثر میدهد .

یک تکنولوژی که در برابر کاربر پنهان میماند ، در حالی که با ایجاد تماس مستقیم کاربر با اثر روی اثر، تاثییر میگذرد.


تاریخچه PureData :
در نیمه دوم دهه هشتاد نرم افزار Max در IRCAM توسط Miller Puckette ریاضیدانMIT متولد میشود .

سال 1988 Puckette یک مقاله تحت عنوان “The Patcher” ارائه میکند که او در آن به شرح یک ویرایشگر برای الگوریتم های موسیقی میپردازد که در آن از بخش هایی از آهنگ Pluton از Philippe Manoury استفاده میکند.

این اولین ظهور MAX بود که با افتخارMax Mathews (پیشگام موسیقی کامپیوتری) نامیده شده!
توسعه MAX ادامه پیدا میکند تا زمان توافق صنعتی با Opcode .شرکت آمریکایی توسعه آن را به David Zicarelli کسی که آنرا دوباره مهندسی کرد واگذار کرد، برای فروش.
اما Opcode امکان دخالت مستقیم در کد را از Puckette میگیرد و وی را محروم میکند .
سپس Opcode به کارخانه گیتار سازی Gibson فروخته میشود و تولید تمام محصولاتش متوقف میشود .
MAX از طریق شرکت تاسیس شده توسط Zicarelli شناسایی میشد .
Puckette به امریکا بازگشت دوباره درخواستی به مدیر MAX مینویسد که امکان توسعه (بازنویسی) آن را هنوز دارد و آن را PureData نامید . برای جلوگیری از اشتباهات گذشته، Puckette گواهی (مجوز) از نوع FreeBSD برای نرم افزار صادر میکند و آن را در واقع یک نرم افزار رایگان و GPL-compatibile معرفی میکند .
در بازنویسی، برخی از مشکلات که او با MAX داشت رفع میکند و پردازش سیگنال های صوتی را می افزاید .
این ویژگی آخر (پردازش سیگنال های صوتی) بعدا توسط Zicarelli بهبود پیدا میکند و در نهایت افزونه MSP را میسازد.
(که مخفف Max Signal Processing است ، اما حرف اول Puckette نیز میباشد)

Puredata :

مدیریت کنترل زمان واقعی (real-time)
مجموعه ای از وظایف در حال اجرا به صورت موازی
زمانبندی کار توسط تابع صبر (wait function)
Trigger : می تواند خارجی (به عنوان مثال master keyboard) باشد.
- به عنوان مثال پیانو متشکل از 91 وظیفه (task) میباشد (88 کلید + 3 پدال) نوازنده آن به عنوان trigger عمل میکند.
- ایده ها قبل از تولد MIDI
رابط کاربری گرافیکی -GUI- با استفاده از یک زبان بصری (از patch) ساخته شده است .


puredata با تعداد زیادی patch باز
puredata با تعداد زیادی patch باز


Pd vs Max :
Max/MSP و Pure Data اساسا مشابه هستند، اما :
-PureData یک نرم افزار متن باز (open source) است ، به همین دلیل می توان از وب سایت متفاوت و بیشماری آن را متناسب به سیستم عامل های مختلف دانلود کرد و تنها هزینه آن هزینه اتصال به اینترنت میباشد .
بنابرین میتواند آزادانه کپی کنید ، یاد بگیرید ، ویرایش کنید ، دوباره آن توزیع کنید ، در نتیجه برای آموزش بسیار مناسب است.

-PureData برای استفاده بسیار ساده و آسان است.
-معماری “plugin-like”
ماژول های اضافی می توانند نوشته شوند، وارد شده، و در زمان اجرا لود شوند .

-افزونه های متعدد و کتابخانه های اضافی. به خصوص GEM برای رندر کردن گرافیک

برنامه نویسی ویژوال (بصری)
- با یک محیط برنامه نویسی بصری برای ایجاد سیستم های پردازش تصویر و صدا کار خواهیم کرد.
- برنامه نویسی بصری بدان معناست که به دانش زبان های برنامه نویسی نیاز ندارد و احتیاج به هیچگونه برنامه نویسی نخواهد بود. پروژه از طریق جعبه های اتصال انجام خواهد شد ، که هر کدام از آنها جهت انجام عملیات مشخص میباشد.

انجام این دست از عملیات ها به کمک اتصال منطقی بین جعبه امکانپذیر است. به عنوان مثال :






تصویری از وب سایت pure data
تصویری از وب سایت pure data
لینک ها :


سایت رسمی puredata  :

اسناد آنلاین و کتاب هایی در مورد PD (به  زبان انگلیسی!)

کتابخانه پردازشگر تصویر Intel OpenCV  مخفف (Open Source Computer Vision Libaray) 
Intel OpenCV کتابخانه نوشته شده به زبان C / C + + میباشد و روش کار با آن میتواند برای یک  کاربر غیر برنامه نویس پر زحمت باشد ، اما از طریق مستندات آن میتوان درکی نسبی از بسیاری از عملکرد های آن داشت.
سایت مرجع به زبان ایتالیایی (forum , patches)

سایت آموزش 

: Puredata (PD) شروع به کار با  
 نسخه فعلی  Pure Data در هنگام نگارش این مطلب  0.43 و برای Pd-Extended آخرین ورژن 0.42.5 میباشد.
PD بروی سیستم عامل های لینوکس ، مک و ویندوز کار میکند .


نصب PD:
بهترین انتخاب  برای نصب pd ، نصب پکیج pdextended میباشد ، که علاوه بر pd شامل یک سری از کتابخانه های خارجی (از قبیل کتابخانه گرافیکی GEM) ، افزونه ها ، مستندات و مثال ها میباشد ، به طوری که میتوان خیلی سریع کار با آن را شروع کرد .

Pd-extended همچنان حاوی تغییراتی نسبت به ورژن پایه pd میباشد ، که معرف ویژگی های جدید است ، اما 99% این تغییرات روی سازگاری آن تاثیری نمیگذارد.
هدف اصلی از pd-extended ایجاد یک ابزار با نصب آسان بروی انواع مختلف پلاتفورم ها میباشد . 



نرم افزار Pure Data و یا (PD): 

نرم افزار PureData
نرم افزار PureData


PD یک رابط کاربری اصلی دارد ،  پنجره اصلی شامل کنترل برای مدیریت برخی از قابلیت های اساسی (غیر فعال کردن صدا در سطح global  و کنترل سطح ورودی / خروجی صدا)
بخش مرکزی اختصاص داده شده به نمایش پیغام های سیستم و خروجی patch ها .


وصله ها (Patches) :
پچ یک اصطلاح مورد استفاده برای تعریف یک پروژه است. در pure data یک patch ، شبکه ای از جعبه ها / بلاک ها  (box) هاست که یک جریان ورودی از داده ها را دستکاری میکند و در نهایت یک جریان از داده مورد نظر را به خروجی باز بازمیگرداند.

این عمل میتواند استاتیک باشد ، و یا تحت کنترل یک اثر متقابل خارجی به صورت زنده باشد (داینامیک)
به عنوان مثال Motion Tracking
بنابراین یک patch مانند یک برنامه کوچک میباشد.

وصله ها (Patches)
وصله ها (Patches)


یک پچ (patch) میتواند تبدیل به یک شبکه پیچیده و گسترده بشود ، بنابراین ، بهتر است از کامنت های متنی و دسته بندی بلاک ها بر اساس نوع عملکرد با تقسیم کردن به بخش های خروجی و ورودی به خوانا بودن patch در استفاده های بعدی کمک کنید.
با این کار  خوانا بودن patch را بهبود خواهید بخشید  و تغییرات بعدی را در زمان کوتاه تری انجام خواهید داد .
patch ها اسناد pd هستند و گسترش آنها به صورت عمودی به سمت پایین میباشد.
هر سند باز دارای یک پنجره اصلی و تعدادی  زیر پنجره میباشد ، زیر پنجره ها  میتوانند باز یا بسته باشند، اما همیشه در حال اجرا هستند ، چه قابل مشاهده باشند چه خیر!
 به شکل زیر دقت کنید ، یک مثال سده از Patch Pd

مسیر جریان داده ها patch puredata
مسیر جریان داده ها 
چهار جعبه (box) در این patch وجود دارد، یک باکس عدد یا number box (که مقدار 0 را نمایش میدهد)، یک object box که "print" را نمایش میدهد و ۲ کامنت .
number box و object box به هم  از طریق خروجی number box به ورودی object box متصل شده اند.

box  ها میتوانند 0  یا بیشتر ورودی یا خروجی داشته باشند . ورودی ها در بخش بالای box  و خروجی ها در قسمت پایین آن قرار دارند. ورودی ها inlet  و خروجی ها outlet نامیده میشوند .
دستور print در باکس دوم متن را در پنجره اصلی چاپ میکند ، مگر آنکه به جای دیگری هدایت شود.


راهنمای برنامه با Help browser:
از منوی Help->Browser یک پنجره اصلی برای یاد گیری و شناخت Pd بازمیشود  می توان اسناد و تمامی  patch های  نمونه با قابلیت های مختلف ،همینطور کتابخانه های خارجی را باز کنید.

Help browser در PureData
Help browser در PureData


جعبه (box) ، بلاک (block)، ماژول ها (modules) :

4 نوع از جعبه ها / بلوک وجود دارد:  objects, messages, GUI, comments



Objects
با ایجاد متن ساخته میشوند (حساس به حروف کوچک و بزرگ ، "Print" از "print" متفاوت است)، متن با فاصله  تقسیم شده که به آن ATOM  گفته میشود.
اولین ATOM را selector می نامند ، که تعریف کننده نوع object و در نتیجه نوع  inlet/outlet  را نیز تعیین میکند .
دومین و سومین ، ...  creation argument نامیده میشوند و مقدار اولیه را مشخص میکنند.
ATOM  ها میتوانند به صورت زیر باشند :

- اعداد  : اعداد معتبر میتوانند نقطه برای اعشار داشته باشند یا نداشته باشند . به عنوان مثال : 12, 15.6, 456.- یا   میتوانند به صورت نماد تصاعدی نمایش داده شوند مثل : "4.5e6" که برابر 4،500،000 میباشد   

تصاعد منفی مثل 1.23e-5 که برابر با  0.000123 است .

- نمادها (رشته های عمومی) : اعداد غیر معتبر همانند نماد ها دیده میشوند .


اولین ATOM یعنی  "+" نماد جمع و دومین اتم مقداری که باید جمع شود .این object جمع 13+ را اجرا میکند.
Messages
متن را همانند ی پیغام قابل ارسال تفسیر میکند ، زمانی که فعال شده باشد (از inlet و یا کلیک کردن بر روی آن)
قابل اتصال به تمام باکس ها هستند.


سومین باکس یک GUI number box است.

GUI
object های گرافیکی : number box, checkbox, slider, bang,...

Commentsرشته ای از متن  مورد استفاده برای نوشتن نظر، یادداشت ها، منابع در داخل پچ ها

ورودی / خروجی > inlet/outlet :
در PureData ورودی های یک ماژول inlet نامیده میشوند و در قسمت بالای باکس قرار دارند(شکل زیر)، در حالیکه خروجی ها (outlet) در قسمت پایین باکس قرار دارند.

ورودی / خروجی > inlet/outlet
ورودی / خروجی > inlet/outlet 
ترتیب آنها از سمت چپ (اولین ورودی یا خروجی) به راست میباشد  
یک خروجی میتواند به بیش از یک ورودی متصل شود (شکل زیر)


یک خروجی میتواند به بیش از یک ورودی متصل شود
یک خروجی میتواند به بیش از یک ورودی متصل شود
ترتیب خروجی ها قابل پیش بینی نیست، میتوان از یک trigger استفاده کرد که داده ها را متوالی و پی در پی از راست به چاپ بفرستد.

 چیست ؟ Inlet hot و  cold
با چند مورد استثنا (object تایمر) ، ورودی در سمت چپ باکس hot نامیده مشود ، و بقیه را cold مینامند. 

زمانی که inlet hot یک داده/bang دریافت میکند ، باکس با محاسبه پارامتر های فعلی خروجی را ایجاد میکند.
اگر یک داده / bang به inlet cold برسد ، باکس خروجی ایجاد نمیکند ، بلکه تنها محدود به محاسبه داخلی با یک پارامتر جدید میشود . 

اتصالات : 
اتصالات در patch (خط ها بین باکس ها) ۲ نوع هستند : کنترلی و سیگنالی 
نوع اتصال بستگی دارد به outlet که از آن می آید. اتصالات سیگنال توسط خطوط ضخیم تر نسبت به اتصالات کنترل نشان داده 
می شوند.


اتصالات در patch
اتصالات در patch
در این patch ، دو اتصال پایینی از نوع سیگنال هستند ، و بقیه از نوع کنترل . به طور کلی، یک اتصال کنترل را می تواند همراه با یک inlet از نوع  سیگنال باشد ، اگر یک عدد فرستاده شود به یکی از آنها ، به صورت خودکار به یک سیگنال تبدیل میشود .
در عوض، اتصالات سیگنال نمیتوانند برای کنترل ورودی ها استفاده شوند. اما باید به درستی تبدیل شوند .


Patches & files :
زمانی که یک پچ (patch) را در یک فایل ذخیره میکنید ، pd تنظیمات داخلی اشیاء  در patch را ذخیره نمیکند. اما فقط آنهایی که دیده میشوند را ذخیره میکند: موضوعات ایجاد اشیاء و ارتباطات درونی آنها است. 
اما بعضی از اشیاء ذخیره سازی ، دارای قابلیت خواندن و نوشتن داخل فایل ها برای ذخیره و بازیابی وضعیت داخلی خود است.

Edit/Run :
دو نوع عملکرد وجود دارد : 
Edit : در این روش امکان افزودن عناصر و ویرایش کردن آنها وجود دارد .
Run: در این روش شما میتوانید patch ها را از طریق جعبه GUI با میانبر Ctrl+E کنترل کنید . منوی edit->edit mode 
سویچ کردن از یک حالت به دیگری در هر دو حالت patch ، همیشه قابل انجام است . تفاوت تنها در روشی است که موس یا صفحه کلید با هم ارتباط برقرار میکنند.  

زمانی که یک patch باز میشود ، به صورت خودکار run میشود .
در طول یک performance مهم است که حالت run را ، برای کنترل اشیا؛ GUI  و جلوگیری از ویرایش های اشتباه  patch انتخاب کنید.

درج  box وعناصر  : 
امکان افزودن عناصر جدید (Object, Message , GUI , Comment) با استفاده از منوی put یا کلید میانبر آنها وجود دارد .

Object و Message ها "( ctrl +  (۱،۲،۳،۴،۵ " به محض ایجاد خالی میباشد ، شما می توانید آنها را به هر کجا که می خواهید بکشید و متن را وارد کنید.  

Object های GUI با میانبر (shift+Ctrl+...) تایپ کردن نیاز ندارد، فقط کافیست آنها را اضافه کنید و مکان آنها را مشخص کنید 

درج  box وعناصر run
درج  box وعناصر
Editing : 
box ها را میتوان با کلیک کردن روی آنها انتخاب کرد . برای انتخاب Object های بیشتر با نگاه داشتن shift آنرا انتخاب کنید ، و یا با کلیک و کشیدن موس box های مورد نظر را انتخاب کنید .
پس از انتخاب ،  متن box ها میتوانند ویرایش یا حذف شوند ، برای حذف از کلید های Del یا BackSpace استفاده میشود.
علاوه بر آن ، عملیات cut , copy و past معتبر میباشند .
از منوی Edit->TextEditor امکان ویرایش اسم ها ، نماد ها ، متنهای طولانی وجود دارد .
با راست کلیک کردن روی یک box ، یک منوی متنی باز میشود .
با راست کلیک کردن روی یک box ، یک منوی متنی باز میشود .

Prorperties - اجازه ویرایش ویژگی های خاصی از GUI box را میدهد .
Open - فقط برای sub-patch ها فعال خواهد بود، برای باز کردن آن .
Help - صفحه راهنمایی مربوط به آن box را باز میکند .

انواع داده ها : 
۱- Float 
در pd تمام اعداد از نوع float هستند ( اما Max/msp از int استفاده میکنند )
اعداد با ویرگول 

 Symbol (Stop, Clear , . . . ) -۲ 
کلمات کلیدی هستند که تنظیم پارامترهای خاصی , یا کنترل عملیات خاص (هر box نماد خاصی را می پذیرد)

Bang (trigger events) -۳ 
مفهوم bang به راحتی قابل درک نمیباشد ، می تواند به عنوان یک شوک الکتریکی باشد که یک لحظه طول میکشد ، و در امتداد پیوند منتقل میشود .
هدف فعال کردن رویدادهای های خاصی در box ها است ، به عنوان مثال:   play, pause, start ، counter


List (list of objects) -۴ 
انتقال به عنوان یک داده تنها ، در صورت فضای خالی متناوب ' '
انتقال به عنوان یک مجموعه ای از داده های مختلف اگر به صورت غیر متناوب  ','

پیغام ها :
- انتقال به ورودی یک bang یا زمانی که کلیک شود.
- اولین tag افزوده شده ، یک متن ، نماد یا یک عدد است.
    -- SELECTOR نامیده میشود ، اگر یک اتم بدون فاصله ، ویرگول و یا نقطه ویرگول باشد .
    -- تصمیم گیری در مورد ماهیت پیغام : اعداد یا نماد
    -- دنباله ای از اعداد و موضوعات
- پیغام های wireless : دسته ای از object های send و receive
- یک پیغام میتواند به صورتی از اشکال زیر باشد :

انواع پیغام ها
single

انواع پیغام ها
list
 هر دو عمل مانند یک پیام
لیست جدا شده با استفاده از ","
لیست جدا شده با استفاده از ","
دنباله ای از پیام های متعدد
لیست جدا شده با استفاده از ";"
 شروع با '';'
دنباله ای از پیام های متعدد برای n-1  گیرنده
به عنوان نمونه  در مثال ، پیغام 50 برای fred و 3.14159 برای sue 

لیست :
یک لیست ، یک ساختار داده ها است که حاوی بیش از یک داده میباشد .
چاپ میکند : print : 1 2 3
چاپ میکند :
print : 1 2 3
 چاپ میکند :

print: 1
print: 2
print: 3



اگر با روش مناسب لیست مدیریت نشوند،اشیاء یی که به این پیغام ها پاسخ میدهند ،عناصر لیست را بین inlet های خودشان توزیع میکنند. اولین عنصر همانند یک float یا نماد عبور کرده است .

ترکیب / تجزیه لیست های پیغام : عناصر pack و unpack

dollar ($):
$1 $2 … در یک message به عناصر تشکیل دهنده در پیغام ورودی اشاره میکند .

این مثال را ببینید : C:\Program Files\pd\doc\2.control.examples\dollarsign2.pd
اگر در آغاز یک نماد نشان دهنده یک متغیر قرار می گیرد، $1 و یا  $3-dog, که در آن مقدار ورودی مربوط به آن جایگزین / گسترش داده میشود  . 

 $3-dog OK --  متغیر مرتبط
dog-$3 NO, گسترش یافته نیست!

به مثال زیر دقت کنید :
چاپ میکند :  sidro until 23


Depth first and trigger :
جریان پیغام ها "لحظه" است ، پیغام ها در همان لحظه ایجادشان پردازش میشوند ، برای حفظ  real-time. 

نحوه ی اجرای درخت پیغام ها : استراتژی depth-first

- یک شاخه به پایین اجرا می شود. به شکل زیر دقت کنید :
استراتژی depth-first
استراتژی depth-first
- ترتیب ورود ABCD یا  ACDB خواهد بود.
    -- C ارسال نخواهد شد ، تا زمانی که D ارسال نشود .
    -- A ارسال نخواهد شد، تا زمانی که B و  C, D ارسال نشوند.
    -- نمیتوان فهمید که آیا ابتدا B ارسال خواهد شد یا C
با استفاده از یک trigger میتوان یک دستور برای آن تعریف کرد (به عنوان مثال از چپ به راست)


ببینید :  C:\Program Files\pd\doc\2.control.examples\08.depthfirst.pd
T مخففو معادل trigger میباشد .

منابع :

► Pd Documentation, www.puredata.info
► Federico Avanzini, “Corso di Sistemi di elaborazione per la musica”, DIE, 
Università di Padova


۷ آبان ۱۳۹۱

تعریف flosc و روش کار کردن با آن



flosc یک سرور جاوا ست که توسط Ben Chun نوشته شده و قادر به برقراری ارتباط با اپلیکیشن هایی که از پروتکل
Open Sound Control - OSC استفاده میکنند است . مثل PureData، Max/MSP, Reaktor , EyesWeb.
همینطور قابلیت برقراری ارتباط با Macromedia Flash ورژن ۵ به بالاتر و در نسخه های بالاتر آن یعنی محصولات Adobe FLash را با استفاده از ویژگی های XMLSochet در فلش را دارا میباشد.
نام flosc ترکیبی از نام های flash و OSC است.
flosc همانند یک درگاه مابین OSC و Flash عمل میکند ، و اجازه ارسال پیغام در هر دو جهت را میدهد.
این موضوع بسیاری از ترکیبات قدرتمند، پلت فرم های قابل برنامه ریزی برای انیمیشن های با کیفیت بالا ، صدا ، ویدئو ، و تولید برنامه های تعاملی را امکان پذیر میسازد.
flosc قادر به دریافت چند گانه ورودی های همزمان از اتصالات OSC و Flash Client ها میباشد و همچنین میتواند پیام های چند گانه به Flash Clients ارسال کند ، اما هیچ گونه مسیر یابی انجام نمیدهد .
اینطور تصور کنید که مانند یک دروازه یا پل ارتباطی بین دنیای UDP از OSC و دنیای TCP از Flash XMLSockets باشد.
این فرایند دو طرفه است، flosc می توانید در هر دو جهت داده ارسال و دریافت کند ،بنابرین ارتباطات بین برنامه های کاربردی OSC به فلش و بالعکس جاری خواهد بود.


نصب و طریقه استفاده 
از آنجا که این برنامه توسط جاوا نوشته شده ، بروی تمام سیستم عامل هایی که جاوا (و بدیهی ست هم فلش)را ساپورت میکنند کار میکند، مانند نسخته های مختلف سیستم عامل ویندوز 98/2000/XP/Vista/7 ، لینوکس و macOSX
فایل ها را در هر جایی که مایلید کپی کنید ، فقط مطمئن شوید که Java runtime environment ورژن ۱.۱ یا بالاتر نصب شده باشد . (تمام ورژن های OS X به همین صورت خواهد بود ، بنابراین آن زندگی شما را آسان می سازد، اگر شما بر روی مک هستید)



اجرای flosc در ویندوز
فایل فشرده حاوی flosc را در یک مسیر Unzip کنید (که آن را <floscDir> خواهیم نامید)
که داخل آن تمام کلاس های flosc و یک مثال قابل استفاده از فلش موجود میباشد.
یک فایل متنی بسازید و آنرا gateway.bat بنامید ، و داخل آن متن زیر را قرار دهید :


<drive di installazione>     ( c: , d: , ... درایو جاییست که فایل ها در آنجا نصب شده اند ، به عنوان مثال)
cd <floscDir>                  ( \programmi\flosc\ مسیر کامل ، به عنوان مثال )
set CLASSPATH= <نام درایو><floscDir>
ipconfig
Java Gateway oscPort FlashPort


oscPort نام پورتی ست که سرور بسته های OSC را دریافت خواهد کرد و FlashPort جاییست که client Flash به آن متصل خواهد شد ، به صورت پیشفرض oscPort برابر با 1250 و FlashPort برابر با 3000 خواهد بود .
اکنون با ۲ بار کلیک بروی gateway.bat سرور روشن میشود و یک پنجره دستور Dos یا Dos Prompt باز باقی خواهد ماند برای نمایش عملیات انجام شده .

این مراحل انجام کار توسط Batch File ها (یا فایل های دسته ای) است که برای اجرای flosc در ویندوز قابل استفاده است

اجرای flosc در Linux و MacOsX 
داخل home فولدر flosc.zip را unzip کنید (که حاوی فولدر دیگری داخل آن با نام flosc میباشد)
دستورات زیر را در terminal مطابق زیر وارد کنید و در انتهای هر کدام کلید ارسال یا return را بزنید

– cd
– cd flosc
– chmod 775 gateway.command

اکنون با کلیک بروی gateway.command یک پنجره سیاه از terminal باز خواهد شد که بدان معناست که سرور در حال اجراست.

استفاده بلافاصله از flosc در کار
پوشه flosc موجود در فایل zip فقط برای اجرای سریع و نمایشی از عملکرد flosc بدون هیچ گونه ویرایشی و تغیری در ساختار آن ساخته شده است.

این پوشه را در مسیر زیر کپی کنید :

- Windows users: c: \
- Mac, Linux: in home


2 مرتبه روی فایل gateway.bat (ویندوز) و یا gateway.command (لینوکس و مک) کلیک کنید ،
این فایل از قبل برای اجرای سرور flosc با تنظیمات پیشفرض :
  • پورت ۱۲۵۰ برای پیغام هایی که قصد دارند به فلش ارسال بشوند
  • پورت ۳۰۰۰ برای پیغام های قابل ارسال برای برنامه های خارجی نظیر pd

پیکربندی شده است .


دانلود
شما می توانید همه چیز را، از جمله فایل هایprecompiled class و یک نمونه از Flash client را از لینک زیر دریافت کنید :


همینطور شما میتوانید کل پروژه را در اینجا مشاهده کنید

https://github.com/benchun/flosc


مجوز ها
flosc کاملا متن باز میباشد و هر کسی میتواند کد های آن رو دست کاری کند و آن را آنطور که میخواهد گسترش دهد .

سایت های مفید
سایت رسمی
آموزش ها
فروم یا انجمن

پیکر بندی  flosc در  flash 
برای اجازه دادن به یک actionscript جهت برقراری ارتباط با یک flosc ضروری ست که تابع زیر را داخل آن اضافه کنیم :

//connessione a OSC
connect();
_root.onEnterFrame = function () {
varFlash=varInputOSC;
...
...
};
//alla fine disconnetti da OSC
disconnect ();

varFlash یک متغیر ورودی در فلش است که از  سرور flosc خوانده میشود ، بنابراین داده ای هست که میخواهیم به فلش برسد .
بنابرین ضروری ست که توابع و متغیر هایی که ارتباط را مدیریت میکنند  به صورت صحیح و دقیق وارد شوند. 

داخل فایل CambioColoreOsc_cs3.fla (پیوست شده)  یک مثال یافت میشود که میتوانید از آن کد ی که برای کنترل actionscript استفاده میشود برای فلش خودتان استخراج کنید .
 قسمت اول آن مربوط میشود به قسمتی که قبلا در بالا توضیح دادیم ، سایر قسمت های ضروری ۳ قسمت هستند : 

۱-  تابع اتصال "() connect"

// *** create a new socket and attempts to connect to the server
function connect () {
mySocket = new XMLSocket();
mySocket.onConnect = handleConnect;
mySocket.onClose = handleClose;
mySocket.onXML = handleIncoming;
if (!mySocket.connect("127.0.0.1", "3000")) trace("connectionFailed");
else trace("CONNESSO");
}

جایی که شما لازم است که IP سرور flosc را مشخص کنید مشاهده کنید  (127.0.0.1 و یا  localhost )
و پورت برای برقراری ارتباط (همان تنظیمات انجام شده در flosc که برابر با 3000 میباشد)


۲- تابع "()parseMessages"
function parseMessages(node) {
if (node.nodeName == "MESSAGE") {
    oscMess.messaggio=node.attributes.NAME;
for (var child = node.firstChild; child != null; child=child.nextSibling) {
        if (child.nodeName == "ARGUMENT") {
            oscMess.value=child.attributes.VALUE;
if (oscMess.value >Number(-2147483648)) {
        switch (oscMess.messaggio){
        case "/posx":
        posizionex=oscMess.value;
        break;
        case "/posy":
        posizioney=oscMess.value;
        break;
        case "/col":
        colore=oscMess.value;
        break;
        default:;
        }// fine switch
                   }//fine if
            }
        }
}
else { // look recursively for a message node
    for (var child = node.firstChild; child != null; child=child.nextSibling) {
        parseMessages(child);
    }
}
}
- سوئیچ (به صورت پررنگ برجسته شده در کد بالا) مهم ترین بخش آن است ، در حقیقت همان جاییست که پیغام  OSC وارد شونده  به flash  تفسیر میشوند و اینجاست که لازم است رشته های پیغام تشخیص داده شوند ،
همانند مثال : "col/" ,  "/posx/" , "/posy/"
هر کدام از اینها یک رشته دلخواه است ، که میتواند به جای این هر چیز دیگری باشد اما باید فقط ۲ شرط داشته باشد :

  • باید با کاراکتر / شروع شود 
  • باید دقیقا همان چیزی باشد  که در  اپلیکیشن OSC (به عنوان مثال اپلیکشن PD , Eyesweb) برای ارسال پیغام به flash استفاده کردید. 


در مثالی که آورده شده ، اطلاعات مربوط به رنگ میخواهد انتقال داده شود ، به اینصورت که در اپلیکیشن OSC پیغامی وجود دارد که در خروجی یک بسته با رشته (شناسه) col/ ارسال میکند ، که در صورتی در سوئیچ فلش استفاده خواهد شد که دقیقا با همان نام رشته یعنی col/ صدا شود 

نکته : رشته های (پیغام های OSC) مختلفی مورد استفاده قرار میگیرند ، برای ورودی (flash) داده های مختلف ، مربوط به اطلاعات گوناگون . مانند : مختصات x , مختصات y , رنگ ، سطح ، وسعت و غیره. 

نکته : در این روش ، در actionscript فلش ، خواندن و تفسیر (کامپایل) کردن هر گونه داده ای  که از یک اپلیکیشنی که استاندارد OSC را ساپورت میکند امکان پذیر است.

در آخرین نسخه flosc یعنی 0.3.1 سوییچی که باید ویرایش کنید داخل تابع  () ParseArguments میباشد ، 
اما روش همان روش گفته شده در بالا میباشد 


flosc و  PureData

اکنون ببینیم چگونه  یک patch ساده در PD ساخته میشود ، که بطور مثال با فلش ارتباط برقرار میکند!

flosc و  PureData
3 قسمت اصلی وجود دارد: 

1- send <مقدار> <متغیر>
یک پیغام OSC میسازد با فرمت  از (متغیر و مقدار) 
2- connect <IP><porta> 
اکنون این پیغام با پارامتر اول درخواست میکند (در قسمت sendOSC) به host  متصل شود ، و با پارامتر دوم پورت مورد نظر را انتخاب میکند . برای شروع مکالمه میبایست با این پیغام این ارتباط را برقرار کنید .   
3- sendOsc

انجامعملیات ارسال  پیام  

همانطوری که در پارامتر های اتصال مشاهده میکنید ، در قسمت host از آدرس localhost  (جایی که سرور flosc را درخواست میکند) بنابراین همان کامپیوتر محلی میباشد که PD و Flash همزمان با هم روی ان کار میکنند .
در قسمت پورت از 1250 استفاده شده که همان تنظیمات انجام شده در flosc است .
و پیام رشته “col”, “/posx” o “/posy/” است. 
و به این ترتیب یک داده از PD به flash ارسال میشود.

از flash به بیرون

در Flash :
 سومین تابع اضافه شده به actionscript که sendOSC نامیده میشود (name, arg, destAddr, destPort)
به جای name نامه متغیر (رشته) برای ارسال (مثل قبل به عنوان مثال "col/" , ... )
arg مقدار قابل ارسال میباشد ، destAddr آدرس ip  سرور flosc و destPort نام پورتی ست برای برقراری ارتباط (در این مورد ، 3000 پورت فلش است)

در مثال آورده شده این تابع وارد

la _root.onEnterFrame = function (){…}
با این پارامتر ها 
sendOSC("/colore",c1_color.getRGB(),"127.0.0.1","3000");


در Puredata :

  • dumpOSC بروی پورت 3000 در حالت انتظار میماند (یا بروی هر پورت دیگری که از قبل مشخص کرده ایم)
  • Oscroute انجام مسیریابی پیام ها بر اساس نام متغیر، پیام های ناشناس به آخرین خروجی ارسال میشوند .

dumpOSC

نکته بسیار مهم : توجه داشته باشد که در این مدل از ارتباط ، پورت اتصال دقیقا همانی خواهد بود که چه برای فلش یا هر اپلیکیشن OSC دیگر از قبل تعریف کردید ! ( در اینجا ما از پورت 3000 استفاده کردیم)

نکته : داده های ورودی فرستاده شده توسط فلشهمیشه یک رشته است ، به همین خاطر  پس از آن استفاده از بلوک [atoi] برای  تبدیل کردن داده به یک عدد صحیح  و تفسیر آن لازم است .


بلوک های بعدی برای تبدیل یک عدد 24 بیتی (مربوط به رنگ و ارسال شده از فلش) مورد استفاده قرار میگیرند 
در 3 عدد مختلف مربوط به سه مولفه رنگ RGB.
در حقیقت ، یک  رنگ ۲۴ بیتی (مانند مثال در متغیر val32 ) در باینری با ۸ بیت نمایش داده شده : 


Val24 = rrrrrrrrggggggggbbbbbbbb

برای تقسیم به ۳ مولفه رنگ ، لازم است که از عملگر  AND (&&) و RIGHT SHIFT (<<) استفاده کنیم .

R = Val24 >> 16 = rrrrrrrr
G = (Val24 >> 8) AND 11111111 = gggggggg
B = Val24 AND 11111111 = bbbbbbbb

(<<) یک عملگر انتقال به راست میباشد و عدد وارد شده را به با افزودن 0 در سمت چپ آنرا به سمت راست می راند.
مثال  (Es: 1001 >> 2 = 0010)  

در نهایت  تبدیل ۳ مولفه RGB  با طیف [0-255] با اعدادی از [0,1] (باینری).

عملگر AND  &&


فایل های مورد نیاز :

۶ آبان ۱۳۹۱

روشهای برقراری ارتباط توسط OSC در PureData

استفاده از بلوک های sendOsc و  dumpOsc
تصویر (۱)
استفاده از بلوک های sendOsc و  dumpOsc
تصویر (۲)

۲ روش برای برقراری ارتباط توسط OSC در Pure Data وجود دارد که عبارت است از :



۱- استفاده از بلوک های sendOsc و dumpOsc
استفاده از بلوک های udpsend - udpreceive و packOSC - unpackOSC
تصویر (۳)
(مطابق تصویر ۱ و ۲ )
















۲ - استفاده از بلوک های udpsend و udpreceive
و بلوک های  packOSC و unpackOSC

(این روش تنها راهی ست که با Synapse-Kinect کار میکند )
استفاده از بلوک های udpsend - udpreceive و packOSC - unpackOSC
تصویر (۴)

( تصویر۳ و ۴  )







routeOSC مورد استفاده برای ارائه انواع پیغام های   OSC در درگاه های خروجی 

مختصری درباره OSC


OSC چیست ؟
OSC مخفف Open Sound Control یک پروتکل برقراری ارتباط (برای تبادل اطلاعات از نوع عددی) بین برنامه هاست ، 
قابلیت حرکت در مسیر شبکه را داراست ، بنابراین میتواند در بین کامپیوتر ها با با فواصل زیاد از طریق اتصال شبکه ارتباط برقرار کند
نکته :
-  در مسیر اینترنت ایجاد یک VPN ضروری خواهد بود . 
-  OSC یک فرمت اطلاعاتی شبیه MIDI ست ، اما سریعتر و انعطاف پذیرتر 
-  هر برنامه یی که قصد فرستادن یک داده را دارد باید IP کامپیوتر مقصد و پورتی که  تا دریافت اولین داده در حالت انتظار میماند را بشناسد 
- اگر ۲ برنامه روی یک کامپیوتر بخواهند با هم ارتباط برقرار کنند IP ما 127.0.0.1 و یا دستور localhost خواهد بود .

اجزای تشکیل دهنده :
داده معمولا از ۲ بخش واژه و مقدار تشکیل میشود :
واژه : واژه رشته یی  از کاراکتر هاست که باد از ' / ' قرار میگیرد : به عنوان مثال
/pippo
مقدار : مقدار عدد صحیح که قصد دارید در برقراری ارتباط ارسال کنید : به عنوان مثال
/pippo 15

OSC  توسط برنامه های زیادی نظیر Reactvision (Kinect) , Synapse استفاده شده است . 

۳ آبان ۱۳۹۱

زبان برنامه‌نویسی تصویری


زبان برنامه‌نویسی تصویری (ویژوال) (VPL) به آن دسته از زبان‌های برنامه‌نویسی گفته می‌شود که روند برنامه‌نویسی در آن‌ها به جای اینکه به صورت متنی باشد، به صورت تصویری است. در برنامه‌نویسی تصویری از عبارات تصویری و نمادهای گرافیکی برای برنامه‌نویسی استفاده می‌شود. بیشتر زبان‌های برنامه‌نویسی تصویری بر پایه ایده "جعبه‌ها و پیکان‌ها" هستند. در این روش از جعبه‌هایی به عنوان اشیای صفحه‌ای و پیکان‌ها یا خطهایی برای ارتباط دادن این جعبه‌ها به هم استفاده می‌شود.

مراحل برنامه‌نویسی [ویرایش]

در یک زبان برنامه‌نویسی تصویری مراحل برنامه‌نویسی بسیار شبیه زبان‌های برنامه‌نویسی متنی است. به این معنی که در این زبان‌ها نیز تعریف متغیرها، تخصیص مقدار به آن‌ها، عبارات شرطی، توابع و ... وجود دارند اما برای بیان آن‌ها از "جعبه‌ها و پیکان‌ها" استفاده می‌شود. مثلا تخصیص عدد یک به متغیری صحیح به نام Test با کاربرد دو جعبه و یک پیکان به صورت زیر انجام می‌شود. در زبان‌های متنی ترتیب اجرای خطوط برنامه از بالا به پایین است اما در زبان‌های تصویری پیکان‌ها بیان می‌کنند که کدام دستور باید اول انجام شود و کدام دستور پس از آن و الی آخر.
                                 _________          __________
                                 |   Test  |<========|   1   |
                                 |_______|         |_________|
برای فرستادن پیام معروف Hello World در این زبان‌ها معمولاً نیاز به ساختن دیاگرام زیر است. ساختن این نمودار نیز کاملا به صورت تصویری امکان‌پذیر است (نیاز به باز کردن یک یا دو پنجره در محیط برنامه‌نویسی و چند کلیک است).
                       __________________                      ___________________
                       |   Sample Dialog   |<====Alert Dialog====|  Hello World   |
                       |________________|                     |___________________|
منبع 

۱۹ اردیبهشت ۱۳۹۱

patch for Pd-extended

این یک پچ برای پی دی اکستندد  است که اطلاعات را از دوربین کینکت دریافت میکند و با استفاده ازجم اطلاعات را روی صفحه 
طراحی میکند  و با حرکت دست میتوان صدا ها را کنترل کرد  
https://github.com/Sensebloom/OSCeleton