I have had major progress on the project! The project now has timekeeping, a basic step sequencer that updates for everyone in the same server, so that each user can listen to and edit the same sequencer. The other major update is the oscillators being controlled by a keyboard interface. Here is a more detailed breakdown on the progress I have made:
- The player’s position in the top left box changes the volume of their oscillator (and that’s mirrored in everyone else’s session)
- The keyboard changes the pitch of the oscillator using nexus’ mtof (MIDI to frequency) to cut lengthy switch statements mapping the frequencies. Each player can hear what the others are playing in real time.
- The player’s oscillator also has a choice of sawtooth, sine, square, and triangle waves – I plan to add custom adsr and wave support.
- The global transport works using Date()getTime() for accuracy reasons. I have yet to stress-test how in sync it is once I’ve left localhost.
- The sequencers are populated using an array – on connection, the user is given the current sequence, and sends out the contents of their sequencer when they click on the div containing the grid, but also updates all the other users on what changed. Nexus.sequencer does not support mouse events, and the only event it supports (on change) was very problematic as it retriggered when it received the info back from the server, creating a browser crashing loop!
The next steps will be:
- Adding in custom wave types (I need this for my synth museum as well, so it would be a two birds and one stone situation if I can get this sorted).
- Making the sequencers fully customisable which will let users set their own amount of columns (equating to a setting their own time signature), and have more than 3 notes on the sequencer!
- Making presets possible, so that a user can store their preferred custom wavetype on the database with their login. This is leading to people saving their own preset effects chains.
- Custom effects chains – a user interface that automatically connects a user’s signal to various effects (and mirrors these changes for other people)
- Basic bar counting – should be a very quick thing to implement, but needed for compositions and structure etc.
- An indicator on the sequencer to show where in the bar everyone is.
- Preset sequences for users to choose from.
- Other global sequencers for drum and bass parts to compliment the lead instrument. – The drums will likely be downloaded samples.
- Local sequencer mode – a separate sequencer that can take over your oscillator.
- Other interfaces to control your oscillator on, as well as parameter mapping for the x y coordinates.
- Examining polyphony – currently the single oscillator is okay, but the sounds could be taken much further.