Skip to content

peteseta/production-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Music Production Workflow Manager

Java app for managing music project deliveries

music production manager v0.1

Who is this application for? Why might it interest you?

If you are a freelance mixing and mastering engineer like me, you likely juggle managing files on a file-sharing platform like Google Drive or Dropbox, revision comments over email or text, and tasks and scheduling on another platform altogether.

In other words, you have no central place to see the status of all your projects and no way to ensure errors don't slip through the cracks and accidentally get delivered.

What can this tool do?

This tool aims to help freelance mixing and mastering engineers:

  • Auto-organize files into a standardized folder structure (compliant to AES technical directive 1002.2.15-02).
  • Enforce checklist completion at song/project levels before delivery.
  • Track blocking and non-blocking statuses (e.g., "Waiting on Client", "Ready for Delivery").
  • Log time per revision and calculate total song/project costs.

Instructions for end user (CPSC210)

  • You can generate the first required action—adding songs—related to the user story "adding multiple Xs to a Y" (adding multiple songs to a project) by creating then selecting a project, then clicking "Add Song" to add a new song to that project.
  • You can generate the second required action—removing songs—related to the user story "adding multiple Xs to a Y" ( adding multiple songs to a project) by selecting a song in the tree, then clicking "Remove Song" to remove that song from the project.
  • You can locate my visual component by viewing the splash screen that appears for ~2s when the app is first launched.
  • You can save the state of my application by clicking Save Projects, located in the top toolbar.
  • You can reload the state of my application by clicking Load Projects, located in the top toolbar.

Instructions for end user (general)

On the left side of the window is the tree view, where the hierarchy of projects, songs, and song versions are shown. On the right side are the toolbars and detail panes, which are contextual based on what is selected on the tree.

  • To add a new project, click Add Project, located in the right Project toolbar.
  • Once a project in the tree is selected, click Add Song to add a new song to that project.
    • To remove it, click Remove Project in the right Project toolbar.
  • Once a song in the tree is selected, click Add Version to add a new version to the song.
    • The status of that song can also be configured using the dropdown in the detail pane.
    • To remove the song, click Remove Song in the right Song toolbar.
  • Once a song version is selected, click Add Todo to add a new todo item for that version.
    • To remove the version, click Remove Version in the right Version toolbar.
  • To save all the projects to disk, click Save Projects, located in the top toolbar.
  • To load saved projects from disk, click Load Projects, located in the top toolbar.
  • To generate the delivery folders for the projects loaded into the manager, click Generate Delivery Folders, located in the top toolbar.

User Stories

  • As a user, I want to add a song to a project with client/title, so I can track its revisions
  • As a user, I want to view all songs in a project in order and sorted by status (e.g., "Blocked/Waiting", "Ready")
  • As a user, I want to add a version (e.g., "Mix_R02") to a song
  • As a user, I want to log time per version (e.g., "Mix_R01: 2.5h") and see totals per song/project
  • As a user, I want to add todos/notes to song versions (e.g., "Update mix with new vox stems")
  • As a user, I want to auto-generate delivery folders (e.g., Project/Client_Song/Stems/) to prevent manual errors
  • As a user, I want to be able to save the state of all my projects (+ their songs and versions) to disk.
    • I want to be able to load the saved state of my projects, or to start fresh.

Phase 4 / Task 2 (event log example)

A sample of events that are printed to console on app exit:

# EVENT LOG:
Tue Mar 25 18:31:57 PDT 2025
Created project test
Tue Mar 25 18:31:57 PDT 2025
Created song Mother
Tue Mar 25 18:31:57 PDT 2025
Set status of Mother to TODO
Tue Mar 25 18:31:57 PDT 2025
Created song version final
Tue Mar 25 18:31:57 PDT 2025
Added to-do "making sure this works..." to final
Tue Mar 25 18:31:57 PDT 2025
Added version final to Mother
Tue Mar 25 18:31:57 PDT 2025
Added song Mother to project test
Tue Mar 25 18:31:57 PDT 2025
Created song Forsaken
Tue Mar 25 18:31:57 PDT 2025
Set status of Forsaken to BLOCKED
Tue Mar 25 18:31:57 PDT 2025
Added song Forsaken to project test
Tue Mar 25 18:31:57 PDT 2025
Created project WIll EP1
Tue Mar 25 18:31:57 PDT 2025
Created song where do we go?
Tue Mar 25 18:31:57 PDT 2025
Set status of where do we go? to TODO
Tue Mar 25 18:31:57 PDT 2025
Added song where do we go? to project WIll EP1
Tue Mar 25 18:31:57 PDT 2025
Created project test
Tue Mar 25 18:31:57 PDT 2025
Created song song 1
Tue Mar 25 18:31:57 PDT 2025
Set status of song 1 to TODO
Tue Mar 25 18:31:57 PDT 2025
Created song version v1 initial
Tue Mar 25 18:31:57 PDT 2025
Added version v1 initial to song 1
Tue Mar 25 18:31:57 PDT 2025
Created song version v2
Tue Mar 25 18:31:57 PDT 2025
Added version v2 to song 1
Tue Mar 25 18:31:57 PDT 2025
Added song song 1 to project test
Tue Mar 25 18:32:00 PDT 2025
Set status of song 1 to TODO
Tue Mar 25 18:32:01 PDT 2025
Generated delivery folder for song song 1
Tue Mar 25 18:32:01 PDT 2025
Generated delivery folders for project test

Phase 4 / Task 3 (reflection)

One refactoring change I would make is moving logic that deals with ArrayList<Project> into its own class, rather than handling all this in the UI. Currently, both the TUI and GUI store an ArrayList of Project objects. Operations like saving and loading to/from JSON (where the data file contains a JSONArray of JSONObjects that each represent one Project object) are handled by the UI, when they should probably be handled by the model.

There are multiple benefits I see to this:

  • Event logging could be added to these operations, like when the user saves or loads the state of the application.
  • Unit testing can be performed more easily on these operations.
  • Code duplication between the TUI (terminal UI) and GUI would be reduced.

Attributions

Splash screen image: https://www.ableton.com/en/live/ Button action listeners: https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html Tree selection listener: https://docs.oracle.com/javase/tutorial/uiswing/events/treeselectionlistener.html

About

Java app for managing music project deliveries

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages