Closed selinali2010 closed 2 years ago
**Estimate:** 40 hours **Goal:** Allow user to visualize equalizer settings as continuous gain values from 20Hz to 20kHz based on their specific frequency band settings (gain, quality, filter type) **Typical Scenario:** ``` [User] 1. Open the application (AQUA) [AQUA] 2. Retrieve saved application state from local storage. [AQUA] 3. Rewrite saved equalizer settings (frequency bands, gains, filter types, qualities) to aqua.txt file [EqAP] 4. Read aqua.txt for updated equalizer settings and apply them to the current audio output device. [AQUA] 5. Display the saved equalizer settings through the main frequency band slider UI to the user. [User] 6. User clicks on a toggle to view the equalizer settings graph [AQUA] 7. Using the current settings for frequency bands, gains, and qualities and filter types, calculate the response curve according to the transfer functions for each filter type. [AQUA] 8. Display the calculated response curve on the graph visualization. [User] 9. User is able to see their full equalization settings across the frequency range being equalized (20Hz to 20kHz) ``` **Alternatives:** ``` [AQUA] 5. Use the graph equalizer UI as the main layout for users when they open the app, so display the equalizer settings directly in graph format. [User] 6. Skip ``` **Exceptions:** ``` [AQUA] 2. If saved application state does not exist in local storage then write default settings to the expected saved settings file location in local storage. ``` ``` [AQUA] 7. Some gain and quality values may be invalid for the specific filter type to be visualized in the equalizer curve so notify the user and clamp user input according to valid gain and quality values for the filter type being used for the invalid frequency band. ``` **Assumptions:** * EqualizerAPO is installed on the device and drivers have been installed for the current audio output device * Equalizer effects will be applied on all devices * User won't alter `aqua.txt` while AQUA is running **Success Measures:** * Graph reflects settings applied using sliders for each frequency band (the more accurately this is done the better) * Interactivity of graph visualization of settings (the more interactive and intuitive it is for the user to visualize their equalizer settings the better) * Flexibility of visualization (the more flexible the visualization is in the sense that it can be applied to multiple different sources of gain values per frequency the better) * Latency of visualization (the less lag there is between changing equalizer settings and seeing them reflected on the graph the better) **Estimation Cases:** * (+20hr) Users may want to adjust the resulting equalizer settings graph directly (rather than using the sliders for each frequency band) **Quality Attribute Discussion - Useability:** The industry standard interface for equalizer applications is a set of sliders and knobs corresponding to some mutable or immutable set of frequencies for which the gains can be adjusted. Parametric equalizations are the most powerful equalizer apps that allow the number of frequency bands and the frequencies themselves to be changed while offering some customization of quality and filter type. However, none of these interfaces with sliders and numerical input fields ever capture the full extent of the effects of equalizer settings on all frequencies within the human hearing range from 20Hz to 20kHz. When you apply an equalizer setting at a specific frequency, it is not just the specific frequency for which the gain is adjusted, but a range of frequencies around it. To **fully** visualize the equalizer settings you are using, you **need** a graph representation of gains vs frequency to plot a smooth curve of the gain values against the frequencies from 20Hz to 20kHz. This improves the useability of the application by a significant margin because the visualization is so powerful for understanding the equalizer settings being used. Peace hides this graph interface away from users under an obscure button in the main UI layout. We want to bring this interface front and center in our application so that users are easily able to discover it. We also want to improve useability in creating a UI that is more visually contrasting with larger axis numberings so that there isn't significant difficulty in reading the graph. **Current Mock Up (Before Ticket):** [Current UI.png](https://uploads.linear.app/2bd15083-7f1f-4bc4-8ff1-f1cf8af5be93/f0f0a086-d3f2-4055-af3e-380b0d5dfba6/99a88ea0-bdb8-404a-9fe3-3a362866eeae) **New Mock Up (After Ticket):** [Future UI.png](https://uploads.linear.app/2bd15083-7f1f-4bc4-8ff1-f1cf8af5be93/0ff35960-e11c-4c1d-85ee-cd02f7a4803a/5f8d588e-f723-4bb9-b7cb-af17f2ab8a52) **Current Domain Model (Before Ticket):** Note that here we are at the completion of [JAT-62](https://linear.app/jaty/issue/JAT-62/parameterize-quality-for-each-frequency-band) [Domain Models-JAT-62.png](https://uploads.linear.app/2bd15083-7f1f-4bc4-8ff1-f1cf8af5be93/5829e3ef-aa54-4cf1-9816-2a6655db7bd0/836ac39e-b8f5-4cc4-9631-dce4a35de889) **New Domain Model (After Ticket):** [Domain Models-JAT-29.png](https://uploads.linear.app/2bd15083-7f1f-4bc4-8ff1-f1cf8af5be93/a539f10e-0cc9-4dc2-be73-92b1509f9c00/8b6c8a0e-1eb4-494f-af31-33a3b534c994) **Use Case Model:** Note that because graph equalization is meant to accomplish the same purpose as parametric equalization but in a more visual form, the use case model is not quite different from that in [JAT-65](https://linear.app/jaty/issue/JAT-65/provide-parametric-equalization). The same settings are meant to be adjusted in both user interfaces, and hence the use case model for graph equalizers is almost exactly the same as it is for parametric equalization, but the user can also choose to visualize their settings in a graph form. * User statement: "AQUA, I want to adjust my parametric equalizer settings" * The "User" actor gets the scenario started by starting AQUA * The user's goals are to adjust any specific parametric equalizer settings such as the number of bands and the frequency, gain, filter type, or quality of those bands and then be able to visualize their overall changes to the frequency response in a graph. * Summary of steps given above for how the user interacts with AQUA to accomplish this. * User must open AQUA first before modifying any settings [Domain Models-UML Use Case Graph EQ.png](https://uploads.linear.app/2bd15083-7f1f-4bc4-8ff1-f1cf8af5be93/fb9d657c-d330-467c-b1f5-f15d4036fa0b/a8486689-1196-4079-a8dc-9e5b8c54fc90) Note that verifying band integrity here is critical because specific transfer functions (unique to each filter type) only work reasonably with a small range of gain and quality values. Verifying band integrity means that these constraints are satisfied before the user tries to visualizer their equalizer settings in a graph. **Traceability to User Study Results:** This ticket is being brought into the sprint this week to formally begin research and development on it. It was the next feature prioritized after parametric equalization, which is assumed will be finished first with the completion of [JAT-65](https://linear.app/jaty/issue/JAT-65/provide-parametric-equalization). Graph equalization features were one of the key performance / excitor features based on the results of our requirement prioritization analysis which can be found [here](https://git.uwaterloo.ca/secapstone/se2023/team-Jaty/-/blob/master/Requirement%20Prioritization/Requirement%20Prioritization.pdf). It was prioritized to be done right after parametric equalization features were added to AQUA and hence is part of the upcoming few weeks of work in our sprints.
Add a graph display of the equalizer settings