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 bgg/yetanothersequencer: Yet another sequencer Made with JUCE, juce.com Good luck is someone dares to go into this. - Codeberg.org

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.

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.

Most comments, function-names, and variable-names are in French.

Classes frequently are thousands of lines. The Arrangement class is over 16,000 lines!

Formatting is completely inconsistent and all over the place.

Communication via IRC?

You put so many roadblocks into your project, that I doubt anybody is able to help you. You talk about obfuscation, so nobody can steal your ideas? How do you expect people to help you, if you intentionally make it impossible to help you?

3 Likes

This is a very interesting project, but I echo the concern regarding obfuscation and so on .. there are some low hanging fruit in your project, vis a vis things to improve/fix, but it’ll be moderately bothersome to fork and make a PR contribution in its current state .. my French is simply not good enough, and well .. the project kind of breaks a few coding rules, indeed, which I’d find difficult to overlook just to get onboard ..

That’s the same thing, said more kindly :slight_smile: And… “c’est pas faux”, it’s not false.

But I said, I’m not a pro, and I just wanted very much to have something to make music with, so I struggled to make something work.

When I said “a little help”, bah, I managed, in a dirty way, to make it work by myself. It was for windowing, resizing, components problems on Linux. But it’s me I don’t do it the right way and my mess is counterproductive. First, why haven’t I yet created a personnal class derived from Component for all my windows, before asking ? :slight_smile:

Yes I break all the rules :slight_smile: I dislike to do functions. I mix camel case and GNU style. I mix two languages, with many faults in both. It’s full of useless comments, with non uniform style. I ignore the warnings of my compiler. I prefer to take care of my pointers myself, it’s not so big a project. It’s C with classes, full of macros. I’ve no idea where to put some objects, methods and variables. I’ve done almost no reflexion about the global objects structure, and put everything in MainComponent. Have a big “Engine” object, inside PluginHostApp, where to put all the mess ?

One can even find pieces of the SAME code written TWO times !! :slight_smile:

For functions : more precisely, I dislike to have a 2 km tall stack for doing a simple thing :slight_smile:

Sometimes I feel I invent a style, like a messy litteral style, like a scratch, and that I work better with it.
But I didn’t realize that it’s so much work to refactorize, translate and write doc.

But well, I plan to compile without warnings.

And I recently read a motto on a book : “labeur sans soin, labeur de rien” : work without care, work of nothing.


I regret to have talked of obfuscation, it was idiot. Now I share it, so


A precision, it may have sound pretentious : I said ‘redo it in C, but that’s redoing a work well done’ : the work well done, I meant JUCE.

But I’m in the process of redoing it with Carla. It’ll not be so hard.
My program is just an user interface around a callback function :slight_smile:

I don’t want to go far further. I don’t want to reinvent the wheel.


I’ve done a video : http://yetanothersequencer.hd.free.fr/mySeq_video_with_subtitles_on_right_screen.mp4
And I’m writing some doc. Still messy of course. It’s on a mediawiki on my site. The link is on Codeberg.

I actually like the direction you’re taking with this. The UI already feels pretty clean for a sequencer project, and the pattern editing workflow looks easy to follow. One thing that could make it even nicer later on is adding a quick randomize/humanize option for velocity or timing - those little features end up being surprisingly useful when sketching ideas fast.