Sputter 1.2.0 Released to Beta Channel

Yesterday the shiny new version 1.2.0 of Sputter was published to the Beta track on Google Play. This release brings long awaited MIDI song file export, and it means that Sputter can now be used as an on-the-go pocket music sequencer which can export songs to a desktop DAW.

For now the MIDI song files consists of mainly the note data, BPM and velocities. There may be further improvements added down the road.

Getting the Octaves Right

The MIDI export functionality is now at a point where all notes are exported correctly, in the correct time signature and tempo. However, while I was working on this and testing MIDI file exports, I discovered a shortcoming which has been with us all along: the octaves written at the beginning of each pattern are not correct.

For example, say you have a C note in the 5th octave like this:

MIDI Export: First Notes

There has been some progress made with regards to MIDI file export, and the challenge described in the previous post has now been solved. Actually the first MIDI file containing actual notes, with all events lined up correctly, has been exported from Sputter:

MIDI file exported from Sputter

The original song in Sputter looks like this:

Original song in Sputter

As you can see the first group repeats twice, and the longest note does not retrigger, so the exported MIDI file is correct.

MIDI File Export... Not So Fast!

So I have looked a bit more into bringing MIDI file export to Sputter. This could be very useful, making it possible to use Sputter as an on-the-go drafting tool.

This summer I have been reading up on and implementing code for the MIDI file format. This has gone really well. By this point it is a quite old and simple format, so writing the code for it was quite easy.

Sputter 1.1.4 Released, MIDI Export in the Works

Yesterday Sputter 1.1.4 was made public on Google Play. This release fixes some cringeworthy glitches in the UI, as well as an attempted fix for file export issues.

Additionally I am happy to report that work on MIDI file export has finally begun. This has been a frequently requested feature, and would make Sputter become a decent on-the-go sketching tool for ideas to bring back home to a fully featured DAW.

What Is the Current Instrument in Sputter?

Initially I had intended to implement a feature suggested by several users, which I also sometimes feel the need for when using Sputter: Highlighting the currently “active” instrument, something like this:

Active instrument highlighted in red

My first thought was that this would not make 100% sense since after making a change to the “current” instrument, like adjusting ADSR, you are not strictly speaking on that specific instrument any longer since it has been altered. The solution proposed from a user was to mark it as “edited”, something like this:

Sputter 1.1.3 Released

At last, the changes made to Sputter during the last 10 months has been made public in the form of version 1.1.3!

The planned automatic detection of output latency for both bluetooth and internal speakers has boiled down to a settings screen where it can be set quite easily, although manually, like this:

Later I am planning on porting the audio engine of Sputter to the Oboe library, which will allow for lower output latency, possibly also for bluetooth. In the meantime you will have to adjust it manually.

Sputter 1.1.2: A Dumb Release

Some days ago, this crash report was sent to my Google Play Developer Console:

Crash report from Google Play

For those not in the know it basically means that the UI is requesting a sequence position which does not exist in the sequencer logic. This was not unheard of before the great refactoring, but I thought I had taken care of it and that it couldn’t really happen anymore.

I first thought this was caused by some unlikely but possible condition in which two or more threads do operations on the same data in parallel. That is a classic case in software in general, but I did not find anywhere where it seemed likely to happen.

Bluetooth: The good, the Bad and the Compromise

After a lot of messing around an researching the issue, it seems like automatically determining latency for bluetooth audio is a long shot. Not only is it hard to determine the latency, but it seems like it can vary during a session too. Various other sequencers I have tried do not seem to attempt to do this.

Nevertheless, I think there should be an option for adjusting this manually, in a user friendly and simple way. You might think that using bluetooth headphones is not the way to go for music making, and you’d be right, but especially since phone vendors have been removing the headphone jack from many models, it will probably come in handy.

Sputter 1.1.1 Released

Finally, after way too much refactoring, experimenting and re-thinking, Sputter 1.1.1 finally went out the door to Google Play today. This release will probably seems quite subtle to most users, with the movement of the playhead indicator being the only visible change. However, this will pave way for better A/V sync with regards to audio latency, which will be tackled in a forthcoming release.

If Sputter is going to live a long and healthy life, it is crucial that a good foundation is layed and we don’t end up with an unrecoverable mess. I realize that some of the code structures used in previous versions were not optimal and actually quite dumb. This was the reasons for several crash reports I have received through Google Play. Starting from version 1.1.1 code quality has been vastly improved, and will be cleaned up further during the next couple of releases.