Sputter 1.5.2 Released

While fiddling around with Sputter one of the recent days, I discovered three bugs and shortcomings which are now fixed in the latest version 1.5.2.

Some (most?) of you might not be aware of it, but the grid in Sputter is actually three times taller than what is shown on screen at any given time:

Actual grid is three times as big

The way you move through the range of notes is to slide up and down with two fingers, as described in the help screen:

Sputter 1.5.1 Released

Sputter version 1.5.1 is now available on Google Play.

As the version number implies this is in no way a major release. However, it does contain some under the hood changes which paves way for the new sequencer backend written in C++.

Still, there are some changes you might find useful:

  • Logarithmic filter cutoff frequencies
  • Position lock now locks at playing position, not currently viewed position
  • Improved audio performance
  • Upgraded to latest version of LibGDX, the graphics library powering Sputter’s GUI
  • A few minor bug fixes

Logarithmic cutoff frequencies was proposed by a user and is a surprisingly big improvement. As it were, the cutoff frequency would sound too sensitive at one end of the slider and very unresponsive in the rest of the range. The sliders now feel more evenly distributed and it is way easier to dial in the setting you want.

Overlapped/Seamless Looping

Lately I have been putting the C++ rewrite of the sequencer logic a bit on hold and implemented overlap (or seamless) looping into Spitback, the Pure Data patch responsible for playing sounds in Sputter.

As can be seen in the video below, this will make it vastly easier to make looped instrument presets in Sputter.

When will it arrive in Sputter?

With the technical solution in place, what’s left is to reorganize the UI to accomodate the new functionality and integrate it into Sputter’s code. At this time I am not 100% sure wether to prioritize this or continuing work on the C++ rewrite. Another great improvement could be to have seperate waveforms for each octave, or possibly ranges of notes, instead of just one as it currently stands. This would be highly beneficial for many types of instruments, for example piano.

New Version of Sputter is Taking Time, Here's Why

For the last couple of months I have been working on solving some of Sputter’s underlying weaknesses. As described in the previous blog post this involves converting the sequencer and logic code from Java to C++ while incorporating Test Driven Development. This has been going on since summer this year, so what is taking so long time?

C++ is hard(er than Java)

Java was designed with focus on simplicity and abstracts away much of what is going on under the hood when running a computer program. C++ on the other hand exposes the “bare metal” in order to make specific optimizations and memory management possible. In other words, C++ is more suited in situations where performance is a requirement. This also makes programming in C++ more like walking on a razor’s edge. Here are some examples:

Invisible Changes Coming to Sputter

I have a confession to make: The code for audio and sequencer logic in Sputter is really unoptimized. According to the holy grail of audio programming, and a lot of other general optimization advice, pretty much everything is done wrong. This means that it uses more CPU power and battery life than is really needed. Audio latency is also unreasonably long, which is evident when notes are played back as they are inserted in the grid.

Sputter 1.5.0 Released

Sputter version 1.5.0 has finally been uploaded and released on Google Play.

This release brings a not so exciting but very important feature: Backup functionality. This is very important on the Android platform to mitigate storage access restrictions in later versions of the operating system. These restrictions already led to one user losing all songs.

As a result of this, the global file menu has been reworked and now includes a backup option:

[SOLVED] Active Track Instrument

As discussed before highlighting the currently used instrument on a track in Sputter presents some challenges. What if the instrument is tweaked beyond recognition or a different wave is imported or recorded to it? Is the instrument used in the track then the same instrument which is highlighted? And what if a song is shared between two users and the receiving user does not have some of the instruments used in the song? In that case there would not be any highlighted and active instrument on some of the tracks.

Backup capabilities coming to Sputter

Because of limited file access in newer versions of Android, songs and instruments in Sputter has to be saved to the app’s internal storage. This means that when the app is uninstalled the user’s files are deleted with it, which of course can be disastrous. It also means that there is no simple way to migrate all your songs and instruments from one device to another.

To mitigate these issues there is now a backup feature in Sputter version 1.5.0-alpha2 which should now be available in the beta channel on Google Play.

Reorganizing Sputter's File Handling

After experiencing the horror of having a user loose all files, I have been considering ways to reorganize the way Sputter handles saving, exporting and importing songs and instruments. With that horror story in mind it seemed obvious that some kind of backup facilities are needed. In the same run it would also be nice to clean up the file handling UI, which for the time being is a bit all over the place.