בחסות נגה אוסין. תודה @Noga_o
מוזיקה class־ית
בתרגיל זה ניצור סימפוניה קטנה, באמצעות מחלקות.
חלק 1
ממשו מחלקה של תו (Note). בפעולת האתחול של המופע, לכל תו יהיה:
- גובה צליל (Pitch) – אחד מהערכים דו־רה־מי־פה־סול־לה־סי.
- אורך (Length): כלומר, במשך כמה ביטים (יחידות זמן) התו ינוגן. (למוזיקאים: לשם הפשטות, נקרא לתו של רבע פשוט “ביט” בתרגיל זה. תו של חצי יהיה שני ביטים, וכן הלאה.)
משימות נוספות:
- צרו
__str__
למחלקת התו שלכם. כל תו יהיה מהצורה Pitch(xLength). לדוגמה: Do(x1), Re(x2).
על האות הראשונה בגובה הצליל להיות אות גדולה. - על מנת להלחין את הסימפוניה שלנו הפעם, “נצנץ לך כוכב קטן”, עליכם ליצור תו של דו, באורך ביט אחד; תו של סול, באורך ביט אחד; תו של לה, באורך ביט אחד; תו של סול, באורך שני ביטים.
חלק 2
ממשו מחלקה של תיבה מוזיקלית (Bar). כל תיבה מסוגלת להכיל מספר קבוע של ביטים – לא פחות ולא יותר.
בדוגמה למעלה ישנן ארבע תיבות, עם ארבעה ביטים בכל אחת. התיבות מופרדות זו מזו באמצעות פסים אנכיים.
חדי העין ודאי ישימו לב שבתיבה השנייה והרביעית מצוירים רק שלושה תווים; זה מכיוון שתו “חלול” נחשב כשני ביטים, בעוד שאר התווים בדוגמה נחשבים כביט אחד בלבד.
- תחת פעולת האתחול, הגדירו לתיבה כמה ביטים היא יכולה להכיל. אם שמעתם על מונחים כמו “שלושה רבעים”, “ארבעה רבעים” או אפילו “שבע שמיניות” – זה בדיוק מה שאנחנו הולכים לממש כאן, אם כי בגרסה מעט פשוטה יותר. לתרגיל הנוכחי נממש שתי תיבות של ארבעה ביטים.
- ממשו את פעולת
compose
(הלחנה), בה התיבה תקבל מספר בלתי מוגבל של תווים, ותציב אותם בסדר בו היא קיבלה אותם. אם מספר הביטים של כלל התווים אינו תואם במדויק את הגדרת ההכלה של התיבה, החזירוFalse
במקום להציב את התווים בתיבה. למשל, עבור תיבה המכילה ארבעה ביטים, התווים Do(x1), Re(x1), Mi(x1) לא יתקבלו מכיוון שמספר הביטים קטן מדי. התווים Do(x2), Re(x2), Mi(x1) לא יתקבלו אף הם, כיוון שמספר הביטים גדול מדי. - ממשו את פעולת
__str__
בצורה הבאה: אם התיבה הולחנה, יוחזרו התווים המאוחסנים בה משורשרים אחד לשני, כשביניהם פסיק ורווח. אם היא טרם הולחנה – החזירו את ההודעה “not composed yet”.
צרו את התיבה הראשונה והשנייה בשיר המופיע מטה!
- התיבה הראשונה אמורה להיראות כך: (Do(x1), Do(x1), Sol(x1), Sol(x1
- והשנייה, כך: (La(x1), La(x1), Sol(x2
חלק 3
הגיע הזמן לחבר את התיבות שלכן לסימפוניה! אין סימפוניה בלי תיבות, לכן פעולת האתחול של מחלקת הסימפוניה (Symphony
) תקבל מספר בלתי מוגבל של תיבות. למחלקה זו תהיה פעולה אחת ויחידה – הדפסת כל התיבות, בזו אחר זו. תוכלו להוסיף קישוט אם בא לכם.
התוצאה הסופית אמורה להיראות כך:
Do(x1), Do(x1), Sol(x1), Sol(x1) || La(x1), La(x1), Sol(x2)