Find us on Google+ سییتم های تعاملی - رسانه های تعاملی - پیور دیتا: آموزش PureData

۲۰ آبان ۱۳۹۱

آموزش 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


هیچ نظری موجود نیست:

ارسال یک نظر