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]
Armatures and bars.
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?
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 language.)
And a screenshot.
Next time: armature.
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.
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.
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.
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 that. 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.
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.)
Heights of lines are better. Maybe even correct. Joining staves of same line is also better.
Note heads are aligned! Woo woo!
Not much work today. Tired.
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.
Days 001 to 010
Fri, 03 Jul 2015 19:10:41 +0200
Last update: Fri, 03 Jul 2015 19:10:41 +0200