compose - days 011 to 020

Day 020 [2015-06-08]

Audio! Woo woo!

Just the beginning, don't get wet.

Here is the git log.

    day 020 - midi driver started
    There we go: alsa midi.
    The program plays all the 88 piano notes at ten notes per second.
    I use fluidsynth as a, well, synth. Run as:
      fluidsynth -a alsa /usr/share/sounds/sf2/FluidR3_GM.sf2
    Then I launch compose.
    And then I connect compose and fluidsynth with aconnect:
      aconnect 128:0 129:0
    Maybe not 128 and 129 for you. Run aconnect -l to see your ports.
    Maybe not 0 either. Well, you know what to do, don't ya?
    Next step is to generate an ordered list of midi commands from
    the score. It's not trivial. Not too hard, but requires some
    focus. And some synchronization between those funky threads
    that popup at each new functionality in there. I think all
    document's modifications and manipulations will be done in
    a unique thread which will obviously synchronize things by
    the mere ordering provided by the sequential interpretation
    done by the central processor unit. And these days this
    sequential stuff is not a trivial task. Optimizations gives
    work to zillions of "engineers" (I defy you to use a computer
    as an engine. Sit on it and turn it on. It won't move. If it
    does then you have a problem.) And modern computers put
    parallelism everywhere. It is supposed to behave "as if" it
    was our old beloved sequential processor (think 6502) but
    well, you know, bugs...
    Oh my, it's late!

And some audioshot, for a change.

[audio file: day_020.ogg]

Day 019 [2015-06-07]

Armatures and bars.



[image: screenshot of day_019]

Yes I put a bar in the middle of an armature. And yes the two armatures are not the same on the sol and fa lines. You know what freedom means, don't you?

Day 018 [2015-06-06]

Clefs! Easy. The code starts to be messy again because a lot of code to handle clefs and notes is almost the same (if not the same) in size.c and plot.c. I don't know how I'll deal with that. We'll see. As it is it works but it's not pretty.

The git log of the day follows.

    day 018 - handle clefs
    And there we go! the clefs! Sol, fa and do. First I put them in
    glyphs.c from notes.png via an export in gimp through the xpm format
    (export as 'toto.xpm'). Then copy/paste from that file and replace
    whatever with ' ' and '.'
    In (modern) vi, you do that easily with the V command followed by moving
    your cursor and then 's/x/y/g' where 'x' is the current characted
    and 'y' is the one you want. Ah, you can also add space at beginning of
    lines still with 'V', move the cursor and 's/^/  /'. Go learn
    basic regular expression, it's useful. Sometimes. I've seen some people
    go mad with regular expressions. I think I even remember a code that
    failed because of a way too complex regular expression in there.
    Simplicity, you and me we have a mission. Wait... the door bell
    just rang! Oh! laziness! thy are welcome! (I dominate the english

And a screenshot.

[image: screenshot of day_018]

Next time: armature.

Day 017 [2015-06-04]

Not much today, I just prepared the clefs in gimp, need to put them in glyphs.c and then use them. Sol, fa and do clefs.

Here comes notes.png.

[image: notes.png on day 017]

I'm getting close! But the worst (user interaction) is like that hill I prepare my bike to climb with. It is said there is a terrific one in Italy at more than 20% all along or something. That's what I expect. That should be fun!

I love simplicity and how it's easy to play with that philosophical concept applied to real life.

Yes, writing software is real life. For me it is.

Day 016 [2015-06-03]

Blinking cursor!

The commit message? Okay.

    day 016 - blinking cursor
    Smooth. It was just smooth! The X thread now has its pipe.
    There is a cursor thread. Both can be commanded by others
    through their pipes. Simplicity. A blinking cursor.

No screenshot, I mean, it's blinking.

Next steps? Clefs, "armature" stuff, bars. Then playback. Then, what about some sort of interaction, hum? I mean, it's an interactive program after all. Or is supposed to be. Somewhere up there deep in my marvelous (I didn't write perfect but I thought it hard) brain this program is interactive. Then I'll be done for a while. I'll go back to music study. It's all what it's about after all.

Day 015 [2015-06-02]


Here comes the commit message.

    day 015 - cursor
    There it comes! Easy. I changed heights computation of lines/sublines
    and whatever in size.c because they were wrong. The cursor revealed
    I would have thought that part to be harder. I still need to
    make it blink. There will be a thread and some mechanism to
    start/stop/restart the blinking. When you do something the
    cursor has to be plotted right away, as some sort of reset
    of its blinking timing.
    For some reason you don't care about I did use vi in gnome-terminal
    today. I played with the mouse wheel. And the cursor was moving.
    Except its blinking continued as if nothing. So you wait for the
    "blink off" time and then you scroll like hell and when the
    cursor becomes "blink on" again it has moved a lot. It moved
    while being totally invisible. This is wrong. What should happen
    is when the cursor is moved it's visible right away and becomes
    invisible only after you stop moving it and its "blink on" period
    is over. And this "blinking on" period starts counting only after
    the cursor has stopped. Funky bug in a bloated software. It won't
    be in 'compose'. Or so I think.
    Time to sleep.

And the screenshot.

[image: screenshot of day_015]

Day 014 [2015-06-01]

Minilines for high and low notes! If you want some cake, I have a piece of it.

Screenshot? Okay. (Extracted from the program. It's the third line when you run it.)

[image: screenshot of day_014]

Day 013 [2015-05-31]

Heights of lines are better. Maybe even correct. Joining staves of same line is also better.

[image: screenshot of day_013]

Day 012 [2015-05-28]

Note heads are aligned! Woo woo!

Not much work today. Tired.

[image: screenshot of day_012]

Day 011 [2015-05-27]

Accidentals are aligned! I introduced a reference point in the glyphs. Only using the y for the moment. And only for accidentals.

Bounding boxes are correct! Well, as long as a stem is longer than an accidental. I should fix that at some point...

A small screenshot. Note heads still not aligned. Next time.

[image: screenshot of day_011]

Days 001 to 010


Created: Fri, 03 Jul 2015 19:10:41 +0200
Last update: Fri, 03 Jul 2015 19:10:41 +0200