Reference no: EM133758275
The purpose of this test is for you to demonstrate the mastery of your Python skills. What this means from an academic standpoint is: a superior effort will be given a superior grade. An average effort will be given an average grade. Simply stated: outputting the correct values doesn't represent a superior effort as it shows minimal Python programming skills. Add the standard and specialized functions and dunders to permit sort, search and other operations that be useful for a Note and Song object.
Question 1:
Design a "Note" class. The Note class represents a musical note and has an acoustic range. The acoustic range of musical Notes is defined by their frequencies, measured in Hertz (Hz). Here is a general overview of the frequency ranges for each Note in the chromatic scale. For non-musicians the '#' means a musical sharp note and a 'b' is a flat note:
- A0: 27.50 Hz
- A#0/Bb0: 29.14 Hz
- B0: 30.87 Hz
- C1: 32.70 Hz
- C#1/Db1: 34.65 Hz
- D1: 36.71 Hz
- D#1/Eb1: 38.89 Hz
- E1: 41.20 Hz
- F1: 43.65 Hz
- F#1/Gb1: 46.25 Hz
- G1: 49.00 Hz
- G#1/Ab1: 51.91 Hz
- A1: 55.00 Hz.
Question 2: Design a "Song" class. A Song is a Collection of Notes, which implies usage of Python iterators to manage the Notes in the Song. Add functionality and dunders as necessary to make a usable class. Encapsulate all data.
Question 3:
Song Files (location Data Files Module)
Each of the Song files is a collection of Hz unit values which collectively represent a Song. Read each Note Hz from the selected file and output the corresponding Note in the range in a TKinter GUI control. Allow the user of your app to select a Song file from the Current Directory, as this will eliminate the Directory choice option. Use a TKinter GUI control of your choice to display the list of Songs and the Notes of the selected Song.