Mixdown Profiles Functional Specification
Basics
Mixdown Profiles are how a musician can string together a set of things they want to do to export their Jokosher project, and then save that set of things so they can reload it and apply the same things to a different project.
This is a functional spec, so it doesn't describe how all this stuff works under the covers; it just describes what the musician sees and how they interact with it.
Mixing down
When our musician wants to mix down their project, they choose File > Mix Down. This pops up the Mix Down window:
+-------------------------------------+ | Mix Down x| +-------------------------------------+ | Steps to mix down My Test Project: | | | | [export as Ogg] -> FINISH | | [Add new step v] | | [Save these settings] [Mix Down] | +-------------------------------------+
"Add new step" is a dropdown list of all possible addable steps. Examples might include "Upload to a remote server" and "Run a script". If the musician drops down the list and chooses "Upload to a remote server" then the window will change to:
+-------------------------------------+ | Mix Down x| +-------------------------------------+ | Steps to mix down My Test Project: | | | | [export as Ogg] | | [Upload to *] -> FINISH | | [Add new step v] | | [Save these settings] [Mix Down] | +-------------------------------------+
Each step is a button. Clicking the button shows the configuration dialog for that step. For example, the configuration dialog for "Upload to a remote server" would look something like this:
+------------------------------------------------+ | Upload to... x| +------------------------------------------------+ | Remote server: [remote.whatever.com] [Browse] | +------------------------------------------------+
and remote.whatever.com is a disabled textbox; Browse pops up the Gnome folder open dialog, so adding a new server to this list means configuring it as a remote place in Nautilus. Changes to this window are (of course) instant apply, so it has no OK or Close buttons. It is a modal dialog, so you can't edit the Mix Down window until it's closed.
Pressing Mix Down on the Mix Down window will run through each of the steps, one after another, and do what each says (see below for a list of possible steps).
Pressing Save these settings on the Mix Down window pops up a dialog asking for a name for these settings. Saving the settings under a name saves each step, and each step's options, under that name. Once a profile has been given a name, changes to it are automatically saved; you don't have to hit Save ever again.
If any mix down profiles have been saved with a name, then the File Menu gets a new option, "Mix Down As", which is the head of a submenu. In that submenu are all the names of all the saved mixdown profiles, and choosing one pops up the Mix Down window with that profile loaded.
Notes
Since every mix down will actually include an export of the project to a particular format, hitting File > Mix Down to get a new profile automatically adds an Export as Ogg option. It's no more effort to change that to another format than it is to add an "Export as" mixdown yourself, and it subtly encourages people to use Ogg if they don't really care about formats. The "Export as" option can't be removed, although its output filetype and filename can obviously be changed.
Example
Dann produces a podcast, which he releases in Ogg Vorbis format once a week. At the moment, he records the podcast in Audacity, saves it as Ogg, copies it to his webserver with Nautilus, and then sshes to his webserver and edits his HTML front page and RSS feed to link to the new audio file. He's deciding to move to Jokosher, because he's a pretty intelligent guy. The first new podcast he does with Jokosher records absolutely fine, and he's highly pleased with the result; now he wants to export and upload it. He clicks File > Mix Down to start mixing down his project, and gets the Mix Down window.
He notes that it already has Export to Ogg, which is pretty useful, but it doesn't say where it'll export the Ogg file to. So he clicks that button and enters a location ("podcasts", in his home directory) to save the file to. Then he says "Add new step" and chooses "Upload to remote server". It pops up the configuration dialog, and he clicks Browse after Remote Server and browses to a folder on www.dann.example.org, his webserver, which is already in there because Nautilus knows about it. He then clicks "Save these settings" and enters the name "My podcast". Finally, he clicks Mix Down and is pleased to see that it creates the Ogg file in his home dir and also uploads it (he can see a progress window running through the steps while it's doing them).
A week later, he creates a new podcast. This time, when he's finished, he says File > Mix Down As > My podcast, and the Mix Down window pops up with everything already filled in. All he has to do is click Mix Down and it's all done for him.
Next week he's planning to use the "Run a script" step to have Jokosher run a script of his devising which posts to his Wordpress weblog using the Weblog API...
Mixdown steps supplied with Jokosher
- Export as: export the project as a particular file format. Defaults to Ogg. Config window has two widgets: a file type, which is a dropdown of all output formats supported by the GStreamer that we have on the machine, and a location, which is a file location with a browser button that allows you to change it. It also allows "don't save anywhere", which is what you pick if you want to export something and then upload it somewhere else and not bother keeping a copy yourself.
- Upload to remote server: take the exported file and copy it somewhere else. Defaults to your home dir. Config window has one widget, a file location, which can be set with a Browse button which starts the gnome folder chooser including remote servers. (This might be combined with Export as.)
- Run a script: runs a Python script. Defaults to nothing. Config window contains one widget, the name of a script, settable with a Browse button. Details of input parameters and output parameters for this script are not yet defined (and need to be defined!)
