Close
0%
0%

Fire Sequencer

Turning an Akai Fire for FL Studio into an independent step sequencer

Similar projects worth following
The Akai Fire controller for FL Studio is cool and all, but how much cooler would it be if you could use it as a sequencer for any MIDI device? I say, a lot cooler!

I bought one of these controllers a while back but could never really get into using it as intended. It just didn't do it for me. So, with the help of a RasPi 4, I'm turning it into a step sequencer using node.js. Why node.js and not something more performant like C of C++? Because I don't feel like learning to code something more performant like C or C++. I like Javascript and I'm lazy.
Sorry. Not sorry.

The Akai Fire is a very affordable MIDI controller designed specifically for FL Studio. I want to use it without FL Studio. 

Why?

Because I like the layout and physical interface of the Fire, but I'm not a huge fan of FL Studio. In fact, I kinda dislike it. So now I have a MIDI controller designed only to work in FL Studio gathering dust. See this YouTube video for an intro to the Fire.

Introduction

The Fire interfaces with the host using class compliant USB MIDI and sends data to the host application as standard MIDI events. The host application controls the LEDs and OLED screen on the Fire with a combination of standard MIDI events and some custom system exclusive data. This was very well documented by Paul Curtis on Segger.com in a series of blog posts. Using his findings, I started experimenting with the Fire using a Teensy 3.6 but discovered that the USB host implementation on the Teensy was too slow for this project. Enter the RasPi 4.

The RasPi 4, runs a fairly vanilla version of Raspberry Pi OS in headless mode. This provides robust and "driverless" USB host support for class complaint devices which makes software development easier since I don't have to futz with USB implementations. Code is written in Javascript and runs on the node.js framework. 




Goals

1. Emulate as much functionality that exists in FL Studio as possible

2. Have the ability to interface with a wide range of hardware

3. Perform well enough that it actually functions as a sequencer


Goal 1. Emulate as much functionality that exists in FL Studio as possible

The Fire has four different modes that it can operate within: Step, Note, Drum and Perform.

Step mode is used to toggle steps in the step view within FL Studio.

Each row corresponds to a given instrument and each column is a step in the sequence. This is the essence of a step sequencer the most basic functionality I want to implement. However, I don't plan on implementing it exactly as it is in FL Studio. More on that later. 


Note mode plays notes on the selected instrument in FL Studio. The color of the button corresponds to whether a note is a white key, a black key, or the root of the scale. The layout of the notes can be selected from a list of scales, including a piano emulated layout. 

I want to recreate this functionality almost exactly as it exists in FL Studio.


Drum mode is similar to note mode in that it just sends notes to an instrument, but it can use customized note layouts and it can send notes to multiple instruments within a single layout. 

This is another mode I want to recreate almost exactly. 


In Perform mode, the buttons in the grid correspond to patterns, loops, or samples in FL Studio's playlist view. Pressing a button on the grid will trigger the corresponding pattern, loop or sample. Depending on the exact configuration within the FL Studio project, pressing a button on track that already has a pattern, loop or sample playing can do one of the following: stop the currently playing item and start a new item, queue up a new item to play after the current has finished, or play the new item at the same time as the current item. Samples can be configured to play immediately or to start on a particular beat.

I want to implement this mode a bit differently. The only thing that a button will trigger is a pattern for that track. 


Goal 2. Have the ability to interface with a wide range of hardware

In order to interface with class compliant USB MIDI devices, we need to implement a way to send MIDI data to them. Using a menu system that the user interacts with entirely on the Fire, we can design a UI that allows the user to configure which device a track sends data to. 

Interfacing with modular hardware will be a bit different. The user should still be able to configure the output via the menu system but there will need to be a hardware...

Read more »

  • Let's learn Rust

    AndrewMcDan07/19/2020 at 15:16 0 comments

    I have the step sequencer working to a certain degree and have done a bit of testing to see how well it performs. Results...? meh.

    The overhead involved with using JS makes it a bit CPU intensive if the track count gets too high or the pattern length gets too long. And so, I've decided to rewrite that part of the project in Rust so it can be compiled to a stand alone binary. I'll post an update once I've taught myself Rust and got it working.....

View project log

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates