برنامه نویس Front-End ، علاقه مند به جاوا اسکریپت و پایتون که گاهی وقتا هم طراحی میکنه.
هرکاری یه اسکریپت پایتون داره - موزیک پلیر
همون جور که تو سری مقالههای قبلی هم گفتیم اصولا هر کاری یه اسکریپت پایتون داره واسه همین هم امروز تصمیم گرفتم تا با استفاده از پایتون یه موزیک پلیر خیلی خیلیی ساده رو طراحی کنیم تا اینجوری اگه دوست داشتین برای خودتون یه موزیک پلیر جمع و جور بنویسید خدا رو چه دیدن شاید بعدا گسترشش دادین و یه VLC یا PotPlayer از توش دراومد ?
حالا برای اینکه بریم سراغ این موزیک پلیر چه چیزایی لازم داریم بالاخره ما که قرار نیست اینجا "چرخ رو از اول اختراع کنیم" قراره فقط از یک سری ابزار که قبلا نوشته شده استفاده کنیم و اون چیزی که مد نظرمون هست رو براساس نیاز خودمون بنوسیم پس من کتابخونههایی رو که تو این مورد ازشون استفاده کردم واستون این زیر لیست میکنم تا اگه ندارید نصب کنید و این مقاله رو تا آخر دنبال کنید:
کتابخونههای مورد نیاز
- کتابخونه Tkinter برای ساخت رابط گرافیکی
- کتابخونه Mutagen برای خواندن Tagهای نوشته شده روی فایلهای صوتی
- کتابخونه Pillow برای کار با تصاویر
- کتابخونه PyGame برای کنترل موزیک پلیر
سایر کتابخونههایی که استفاده خواهیم کرد نیازی به نصب نداره.
فقط یک نکته اگر احیانا کتابخونه Tkinter رو نمیتونید داخل کدهاتون Import کنید حتما موقع نصب Python نصب این کتابخونه رو غیرفعال کردید و گرنه به صورت پیش فرض همراه با Python براتون نصب میشه.
صورت مسئله
برای اینکه بهتر بتونیم برنامه نویسی رو انجام بدیم لازمه که یکبار صورت مسئله رو با هم دوره کنیم و ببینیم به چه چیزی نیاز داریم. خب برای داشتن یه موزیک پلیر ساده ما به یک سری دکمه برای کنترل نیاز داریم که این دکمهها شامل پخش، توقف، افزودن فایل و در صورت نیاز کنترلهای صدا هستیم بعد از اون برای گرافیک بهتر ما نیاز داریم که بتونیم Tagهای مربوط به فایلهای صوتی رو بخونیم و از همه مهمتر بتونیم Cover مربوط به فایلهارو نشون بدیم و در نهایت نیاز به یک لیست داریم که بتونیم فایلهای صورتی رو بهش اضافه کنیم تا از موزیک پلیر از روی همون به خوندن ادامه بده.
پیاده سازی و چالشها
تو این اسکریپت بر خلاف موردهای قبلی سعی کردم از Classها برای نوشتن کد استفاده کنم تا هم یه تمرینی برای خودم باشه هم یکم منظمتر کد نوشته باشم واسه همین اگه مثل من با کلاسها در پایتون زیاد کار نکردید پس بهتره این تکه کد زیر رو ببینید تا یک دوره کوچولو روی این موضوع باهم داشته باشیم.
برای مثال در کد بالا ما یک کلاس Document داریم که با استفاده از اون یک فایل رو خوندیم و محتوایاتش رو داخل یک متغیر به اسم myFile ذخیره کردیم و حالا با استفاده از فانکشنهای داخل کلاس میتونیم اون فایلهارو تغییر بدیم یا محتوای داخل فایل رو ببینیم این تکه کد ساده ترین کد برای معرفی کلاس هست. که فک میکنم برای شروع کار با کلاسها کافی باشی فقط نکته دیگه اینکه اگه متغیرهایی رو نیاز دارید که باید تو سایر متدهای کلاس بهش دسترسی باشید لازم هست تا با صورت .self شروع کنید تا بتونید مقدارش تو سایر متدها تغییر بدید.
و اما بریم یکم جلوتر و یکم در مورد روند اصلی کار توضیح بدم چون اینجا بنظرم توضیح دادن کدها واقعا کار بیهودهای هست و تا وقتی کد نزنید هر چه قدر که توضیح داده باشه اون تاثیر لازم رو نمیذاره برای همین من روند کار رو توضیح میدم و در نهایت هم کدهایی که نوشتم رو براتون قرار میدم تا اگه دوست داشتین ادامه بدید و تغییراتی که دوس دارید رو روش اعمال کنید.
برای شروع ما نیاز داشتیم که یک رابط کاربری داشته باشیم تا از طریق اون بتونیم کارهای لازم رو انجام بدید برای همین از Tkinter استفاده کردیم که خیلی ساده و دم دستی محسوب میشه برای کارهم یک منو به اپلیکیشن اضافه کردیم تا بتونیم از طریق اون فایل به سیستم وارد کنیم یا اصن اپلیکیشن رو ببندیم. بعد از اون دو تا دکمه لازم داشتیم تا بتونیم پخش و توقف موزیک رو کنترل کنیم و برای قشنگی هم یه باکس برای نمایش کاور موزیک که بدونیم چه چیزی در حال پخش هست راستی یه لیست هم لازم داشتیم که صف پخش موزیکها رو نشون بده و از داخل اون بتونیم انتخاب کنیم چه موزیک پخش بشه. اما برای نمایش کاور آهنگها چندین کتابخونه وجود داره که بتونید ازشون استفاده کنید اما من چیزی که بنظر از همه بهتر بود کتابخونه Mutagen بود که کلاسهای جالبی برای خوندن این تگها داشت و خیلی راحت شما میتونستید عکس رو به Pillow Img تبدیل کنید و جای مورد نظر ازش استفاده کنید اما راه حلی که من برای نمایش تونستم بهش برسم این بود که هر بار فایل جاری رو با یک عنوان مشخص ذخیره کنم در مثلا Cover.png بعد همیشه همین فایل رو نشون بدم اما اگه شما بتونید بدون ذخیره فایل اون رو نشون بدید خیلی خوب میشه
من دیگه خب بیشتر از این توضیح نمیدم اگه فک میکنید چیزی رو از قلم انداختم واسم بنویسید تا برانون توضیح بدم یا همین مقاله رو آپدیت کنم. اگه اسکریپت دیگهای هم مد نظرتون هست یا موضوعات دیگه رو میخواید تحت این مجموعا مقالات بخونید بازم برام کامنت بذارید تا در موردشون براتون بنویسم.
مطلبی دیگر از این انتشارات
ویژگی جدید پایتون 3.10: Structural pattern matching
مطلبی دیگر از این انتشارات
اجرای برنامه flask با استفاده از docker
مطلبی دیگر از این انتشارات
تجربیات من از ارشد، MBA و دانشگاه خوارزمی