Yet another sequencer

Hi.

With JUCE I’ve done the sequencer of my dreams.
Maybe it can interest others.

It is a big mess.
If some people are interested I’ll clean it, but I use it like it is.
I did a few things I’d like to have.
I’m not a pro developper.

It is forked from the audio plugin host, and from the sampler example too.

I put it on https://codeberg.org/bgg/yetanothersequencer

Peace,
bgg.

What about a demo video or something? Kind of hard to get into it if I have to build it first ..

A picture there : http://yetanothersequencer.hd.free.fr/

Well .. that looks quite a sophisticated environment with some interesting aesthetic choices. Dare I say it, you probably make a wicked fruit salad. :wink:

The only thing stopping me from downloading your repo and doing a build is the shock factor at how much you’ve altered JUCE .. in my opinion that’s a bit scary (although perfectly fine if all you want is to do your own local builds), because its a big commitment to understand the diffs. I’m curious if you plan on refactoring any of those modifications and maybe use some C++ features to enhance things in your own local codebase, keeping JUCE as clean as possible - or were there simply far too many things that JUCE didn’t quite get right for your needs? That’s actually quite interesting as a subject in itself.

This is a big yes :
I tried to do very few modifications in the JUCE code,
and I’m not against at all to make this more in the JUCE way.

  • I didn’t manage to make “chords” keyboard shortcuts with the keycodes, which are not coherent when doing key chords. So I did a mess with keycodes and isCurrentlyDown(), redoing a list of keycodes.

  • I didn’t manage to make some derived objects, with the AudioProcessorGraph. I added fields to Node for example.
    And in JUCE 7, nodes are in a container with reorganisation, but it breaks my way to use them.
    But I simply have to learn how to cleany derive all that I modify. C++ is very easy, even with templates and smart pointers :slight_smile:

  • I don’t use very much the division in components.
    I didn’t manage to make the repaint system working like I wanted.
    I’ve prefer to use bools to redraw only portions. Btw it makes problems for the display on Linux.
    This may be simple to arrange, with components.
    For example with the MonSampler window : I didn’t manage not to redraw the wave when not useful.
    There’s still a glitch if the window goes partly out of screen.
    Maybe because that’s a MS component in another component, a PluginWindow.

  • I did a system of presets different from the banks of FXB. But one of my goals was to use easily big databases of presets, of patterns, etc.

But I want to keep it simple, for optimisation.

And a part of me wants to rewrite it without JUCE, maybe in C :slight_smile: But I’ll be redo a work yet done, and well done.

(post deleted by author)

I’ve done a version of my sequencer which works with a clean JUCE_8, and on Linux.
And it is a bit more clean.
So it should compile, if put in the same directory as the Audio Plugin Host : extras/, in JUCE repository,
with the Makefile I added. So it’s here : Making sure you're not a bot! .

Of course there is the display problem explained in : AudioPluginHost on Linux : plugin window display problem - #4 by bgg .

I secretly hoped that someone who knows well JUCE will look at it, and give me a few advices.
I’d like to concentrate on my ideas and I’m a bit bored to struggle with JUCE : I struggled with Components, opacity, bufferedToImage, top windows, resizeableWindows, etc. to have an almost working thing, without redrawing everything. There are still a few glitches, but it is usable.

I realized that the TextEditor I used as console was unusable on Linux : after a few lines it becomes so CPU consuming that my program is unusable. There are several posts about this problem.
On Windows I did sessions of hours, with thousands of lines without clearing it, without problems.
On Linux it makes the UI not well responding. It looks a bit like : User input events delayed (Juce >= 6.0.5 on Linux) , sometimes the keypress event is not taken into account, until a mouse move is made … Without the TextEditor it is usable. I liked this console, so I’ll do it in another way.
In debug it’s not very smooth, but in release it is usable. I don’t know why, on Windows I use the debug version without problems.

I didn’t manage to use the AudioProcessorGraph of JUCE 8 : there are now unique_ptr, and a auto-sorted container, and it breaks my way of loading a graph : copying/moving the nodes in an array, clearing the graph, and reputing the ones that are still there : all the mess with unique_ptr makes some processors disappear.
After weeks of tries I simply kept the AudioProcessorGraph.cpp and .h of JUCE 5.

Once again, I did an effort to share it, secretly hoping a little help from someone who knows better JUCE :slight_smile:

I’ve not yet test it with Windows10/11, but I’ll do it. I’ve made my program on an offline Windows 8, and I didn’t want to break this working version. So my code is full of #if JUCE_5, and I set #define JUCE_5 !LINUX.

As I said I’ve did it for myself, and I yet didn’t write clear explanations. If someone wants to dive in, the simplest is to come on IRC. Or one has to read my messy and not completly translated README_en.

Btw it’s better, obfuscated like it is, as I didn’t want my ideas beeing stolen.