A newbie's experiences with Lilypond, Lilypond-book, LaTeX, and Perl
CC Attribution 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
McCool, Joe
The author is an active Irish traditional musician. He is also a keen inland boater. He is having a lot of fun composing a book on “Traditional Music for Boaters”. In this paper he describes his successes and frustrations using Lilypond, Lilypond-book, LaTeX, and ABC musical notation. Lilypond and LaTeX have a lot in common. Neither are WYSIWYG, neither demand GUIs. Both compile simple flat files to produce beautiful graphical output. Lilypond’s original manifestations produced output directly for LaTeX, but of late users writing books have been encouraged to use Lilypond-book. This looks for Lilypond code within LaTeX source files and produces graphics and associated instructions which can then be processed by LaTeX. Most joy has been gained from automating these processes under Linux and Perl.
 Good morning everybody. Can I assume that you all hear me? I have to start by making a few admissions or a few confessions. The first thing isn't the confession, in fact I'm actually very proud of it. This is actually my name. It's not a nickname and it's not a joke. I'm very proud of it. It's a very old name that goes right back into Irish mythology. Finn McCool was a giant. Somehow I seem to have got that wrong. My family, my immediate cousins and even my brother are actually quite tall. I followed my mother's side of the family. Finn McCool was a giant who had a fight with another giant in Scotland or England or somewhere around here. He stepped down to pick up a clod and he threw it at the other giant. The clod that he picked up formed Loch Naye in Northern Ireland, which is the biggest inland freshwater lake in the British Isles. On the island we are told, it formed the Isle of Man. That's my name. My confession. Yesterday I was asked to describe what my connection with latex was and I very simply said that I'm a latex user. I left it that. In fact that's all I am. I'm just a latex user. I work entirely on my own. I live in a very rural area. I'm looking at a window of cows. Yesterday was the first time that I ever physically met anyone who had used latex or knew it was. If I mentioned latex as I pronounce it to any of my work colleagues, they all think it's something to do with pornography. So again you'll have to forgive my pronunciation. I'm going to pronounce words wrong. I'm really sorry about that and it's because I'm not mixing with other latex people. My second confession is that essentially I really don't know what I'm talking about. I'm a fumbling, lazy, groping amateur. I try things, they work. I won't be at all surprised if before the end of the week or even before the end of this talk, somebody's going to tell me, oh this is much easier by doing that and you could have saved yourself once it worked. That's the winners. First of all the context. As Peter described, I'm very keen with boats. I do a lot of sailing. We spend a lot of time on this old boat. It was made in 1913 up in Northern Ireland. We use it around the Irish and on the West all year. My family and I, this boat is part of my life. I'm as passionate about this boat as I am about more or less anything else. The other part of the context is this is a typical boat scenario. This is myself here, scruffy as ever. My daughter on my left, another daughter on down here and an occasional caller. We get together and we make music. It's a great, great joy to be in the middle of nowhere surrounded by nothing and to play some music together. You'll notice some sheets here and these would be rough manuscripts of some sort. About 12 months or so ago I had finished writing a very small book again connected with boats and waterways. We were trying to store a canal in Northern Ireland, the Ulster Canal. I wrote a guide to the Ulster Canal and I used Laetic to do that. I really enjoyed the process very much. About 12 months ago I was itching for another project and I had two ideas. One was a cookbook for bookers where I describe bolting type recipes and bolting approaches to cooking on water. Barbecues and methods of cooking. The other one was to produce a tune of traditional music. It's not classical music, it's traditional tunes that are in some way connected with boats, water, rivers, lakes, the sea, whatever. Traditional music is learnt by ear. That is the essence of it. It's not generally written down. There's not a strong tradition in the folk music world for writing down tunes. They're just copied by ear from one person to another. Traditional players are not strong sight leaders. Because of this I had to take in a few very definite parameters. The first one was an integer number of tunes per page. I can't have page turns in the middle of a tune. I'm aiming for two or three tunes. This is just another typical book of Irish tunes. I need nice big bright fonts, very clear and with a minimal clutter. I was going to have tunes that are normally played in sets that might be two, three, possibly even four tunes grouped together and played once, one after the other. I needed strong cross-revencing from one tune to another. Ideally I would like to produce tunes on the one page where those two tunes would be played together. I haven't got there yet, but that's one of my objectives. I need snippets of text along with the tunes. Those snippets of text might be historical notes or approaches to playing the tunes, or maybe an alternative name or something like that. I need that piece of text to plant to the tune so that I move the tune around to the book and the piece of text will follow it. I needed a very easy way of keying in the tunes. Most of the tunes I take down from the internet, but sometimes I can't do that. Sometimes I have to take them out of books. A few of them I've written myself, some I just get from friends, and I have to keying them raw. So I need a fast way of keying the tunes. I needed good control of the output, and I needed good community support for whatever tools that I was going to use. And I needed high quality layout. Now at this point I'm going to jump a bit. Oh, no, I have to hit Escape here first. Yeah. Ultimately I ended up using Lilypond. And the essential message that I want to try and get across to you here, although I am not a representative Lilypond, I can't pretend to be a Lilypond ambassador at all. They don't know me from Adam. But the impression that I get, and the message that I want to get across to you, is that Lilypond are as concerned with the beauty and the presentation of the scores, as the tech and lexic people are with the presentation of text. Yeah. So to illustrate this, this is just a page from the Lilypond user manual. We can see three characters here. This is the flat symbol. I don't know if you're familiar with that or not. The one on the left is from a relatively modern, probably Windows type computer pieces software setting that character. The one in the middle is a hand set 1950 from a German book. And the one on the right is Lilypond. I think you can compare them yourselves. The Lilypond one tries to emulate 1951 as close as it can. Notice the rounded top to the B and the square top to the B on the left-hand side. Traditionally, music was set by hand. The characters were graved by hand out from plates and then inked and pressed from that. The process of producing music is actually known as engraving, not type setting. Although I myself would very often use the word type setting. So we're talking about engraving here. The Lilypond people suggest that with the proliferation of PCs and with the Microsoft products that we have at hand, that everybody thinks now they can type set music. And the Lilypond people disagree with this entirely. They suggest that, particularly for classical music, that the presentation of the music must be as clear and as beautiful as possible. Because orchestral musicians trying to play a violin with a very, very complex piece of Wagner or something, and the script is sitting back two meters away from them, it has got to be 100% not 99%. Any distraction that's on the piece at all is likely to distract them from natural play. I'll give you an example here. They make a suggestion here that the spacing between the upstain and the downstain is wider here in the Lilypond than it is in the Olyphos. So I want to just point that out to you that they are very concerned with quality. Excuse me. I don't know if I'm the only one who doesn't know what to do with this. Can you give me a 30 second intro? I jumped ahead of myself a little bit and I'm going to jump back again now, okay? Another apology that I have to make to you is that I've never actually read a paper at a conference before. This is my first time ever to do this. So you'd have to bear with me again my amateurish fumbling. I don't know how that managed to wind back on me. Okay, so there's the objective. There are some more needs. I need MIDI production because I make an assumption that the people who will use the book will want to be able to hear the tunes as well. Do you know what MIDI is? No? This is brilliant. I know something you don't know. MIDI is a music industry digital interchange. It's a standard format for storing music in files. If I put a MIDI file on my computer, I can play it. It's a standard for music in files. There is a laser exchange down in the wire and so one instrument can control the other instrument and also transfer files and all that stuff. You can hook up to a MIDI interface from a keyboard to a PC and suck the data straight into the keyboard. It's a wonderful system. You probably know more about it than I do. I just listened to the stuff. I needed indexing by tune type. Whenever I'm looking up a tune, if it's a tune called Out in the Ocean, I want to know whether it's a jig or a reel or what it is. Because then I know what kind of lead it is. I wanted the process to be as automatic as possible and that takes me to Perl and so on. A lot of the tunes I pulled them down from the net. Those were their programs. What's out there? By far the most popular programs in use out there, amongst everyone, is Finale and Sedanus. They are fighting neck and neck in the Windows world. They're both commercial products. Their output is OK. You talk about the same kind of quality output as you get from Word. Note where the composer is shareware. You send off and you get it on a floppy disk or CD or whatever and you can use it as long as you want. There's some restrictions in it. You want to use the full system. You have to pay them $35 or something. It's very cheap. It uses a proprietary file format to store the music in. So for me that's it. I'm not too sure about Finale and Sedanus. I think they might use XML. I'm not too sure about that or music XML. I'm not too sure. Cake Rock is another one. I rejected all of those because I'm just not a Windows person. I'm a very traditional Unix type person and they just don't suit me at all. I may not be treating them fairly but I dismissed them fairly early in the process. At Open Source we've got Music Tech. I looked at it briefly. I read a paper which I think was presented at this conference living a few years ago by an Italian shop. Is that right about? But it struck me as being horrendously complex and way, way over my head completely. So I knocked that on my head. I did read somewhere in the standard latex, textbooks, that PS6 can be used to produce music. But again, it just seemed to me to be too cumbersome for what I wanted to do. And I settled finally on Lilipond. Now if you ask anybody in the classical music world of publishing, they will tell you that Lilipond is the boy. The depth is very, very high quality output. Even Phenallian Zabelius will output Lilipond code. They're fine. Phenallian Zabelius have got very nice gooey cotton paste. You can drag notes about on the screen and all this sort of stuff. And yes, you can connect it to a MIDI keyboard and suck the data in from MIDI keyboard. But whenever it comes to producing the scores, they're horrible. You've seen that from the B-flat that I illustrated there. Okay, so Lilipond then answered a lot of my requirements. It is very, very actively underdeveloped. It was originally started by two guys from a Dutch quartet. I can't pronounce their names. You'll get it in the documentation. And they started, I think, kind of about 1986 or thereabouts. And they've been working on it for a good number of years. It's very much open source, very much out there in the community. And it's very much being contributed to by a lot of people. Very strong community support. I subscribe to the Lilipond mailing list. I also subscribe to the text hacks. Is that text? And what's the other one called? The Tug One? I submit to both those mailing lists for Leatech. And certainly the traffic on the Lilipond One matches if not exceeds the Leatech ones. Very, very active. A lot of it is way over my head. One of the problems with music type setting is that music itself has an awful lot of technical terms in it. Particularly in classical musicians. And a lot of them are in Italian, which I don't understand. I can't even pronounce the words, you know, if I don't understand them. It's really difficult. Ease of key. I've come back to that in a minute. Partial compilation. If I produce a big long piece and I'm working on it, yeah. Obviously it's getting longer and longer as I work on it. But I can tell Lilipond to ignore the first two quarters of it and just compile the last 25% that I'm working on. And that saves time. I've got a mode, Lilipond mode from my beloved Emacs. Which is wonderful. But best of all, the most important thing to me and where the crunch comes is I've got a classical Unix command line interface. There's no GUI, none of this high-candy stuff at all. It's really, really old-fashioned and absolutely beautiful. It incorporates the Scheme programming language. Now again, I confess that I haven't got that far as to actually dabble the Scheme yet. But it's in there and you can do all sorts of things with it. Again, very, very high quality output. And the documentation, I've come back to the documentation now. I'm going to go back again to the high quality output. I have to do that, that. And then I go to bookmarks and I go to a demonstration. I just wanted to put up this demonstration for you on the example of what Lilipond can do to give you some idea of where things can go wrong. I mean, this is beautiful. This is excellent. Wonderful and great. But you can see that lesser software could very easily screw off the app. You can see the number of parameters that are dependent on the app. It really is very complex. I would suggest to you probably, dare I say, more complex than Type-Coding Text. There are a lot of parameters there. There's a lot of space to be handled and a lot of symbols to be positioned correctly. So there's loads around for it to go wrong. But it doesn't, Lilipond. It doesn't. It's a rock solid system. I haven't yet found any books in it. And in reading the mailing list, very seldom do I come across reports of books. It really is a very, very solid, typical Unix-type product. Why does it keep going back to there? This is another apology. I should have presented the slides using latex, but I just haven't got that far yet. Sorry about this. Okay, now, the documentation is excellent. It really is very good. And again, I just jumped back to Firefox if I may. And I want to show you. I want to show you. Now, for some reason, I have to close down this open office rubbish thing. I can't seem to be able to jump from one to the other. It just doesn't respond. I just go to bookmarks and I go to... This is part of the learning manual, the online learning manual. And Lilipond, I can simply click on an example, a musical example and it pops the code behind it. So that's something that latex people might think about in their documentation, online documentation. Right? Okay. That's a musical example, yeah? You'll notice as I scroll over it, I get the pointer coming up, yeah? I click on it and it pops the score behind it. Yeah, they're coming back to the scores again. Yeah? But that's just a thought for people to document and let it. I didn't do this last night. Okay. I got as far as the documentation. The documentation is excellent and I put it here on my list of pluses for Lilipond. And I've also put active development on my list of pluses for Lilipond. But on my list of negatives, I've had to feature the documentation again. Because despite the fact that I've got all these snippets of music and the code behind them, there's examples upon examples upon examples upon examples. It's still very, very difficult to learn. It's still very difficult to grasp the overall picture of how the code is structured and how the system works. It's a bit like Perl. You know one of the strong strengths of Perl is that there's more than one way to do it? Larry Wall keeps telling us this. Okay? We've already had this comment this morning where you write a program this year and you come back next year and you can understand how it works. Well, Lilipond's a bit like that as well. I'll be coming back to the code in a minute. There's more than one way to do it. And the code can get really quite complex and quite hairy. The evolving documentation, yes. The documentation for Lilipond is a monolith. It's just the one source for it. I'm not too sure there's any books out there on Lilipond. But on the site, there's only the one source. Because the documentation for Lilipond, as we know, there's lots of books. There's lots and lots and lots and lots of different easy-to-read HTML files and PDFs and all sorts of things. I would compare the learning curve of tech and Lilipond. I would say they're in or about the same. I'd say Lilipond, maybe, is a little bit more difficult. It's not easy. The end product is very high quality. It's command-like to it. It's got a novel strength. It's not easy to learn. OK. So on we go. OK. The ease of key. You know what a bar is? In the music app? We write music in chunks. And we feature bars. You'll see this in a bit of the code. It's got a bar check in there. So if you accidentally plug an extra note in a bar, it'll tell you. It's got octave checks. So if you do ridiculous jumps from middle C octave, super high C, it'll quench at you, and it'll tell you that. It's got an absolutely called relative C. The initial versions of Lilipond, you just had to feature the code A, B, C, D, E, F. And you have to tell it where and the state those notes were. Now, more recent versions have got this facility called relative C, where the notes are all positioned relative to C. And again, if you warn you, you can go outside there. The duration of the note is simply given by a number of halfs. This D is a quarter note. Yeah. And again, in the earlier versions, that E would also have to be followed by a time, which might be a 4, 2, or 1, or 8, or whatever. But now, once you've made your time once, Lilipond automatically attaches that time to the following notes. So you can keep really, really quicker. Much, much quicker, I would suggest, than you can with the most dragging notes about them, talking them on stage. Musical phrases. This would be the equivalent of a new command in later. I can just define the music of fragments, and I can feature it later in my code, and Lilipond. Wonderful. Now, within the Lilipond family, there are a number of utilities. There's a utility for converting from music XML to Lilipond. There's a utility for converting from ABC, which is another music format that I've converted to Lilip. And in particular, there's this item here, Lilipond Book, and it's designed specifically for writing books. It's very closely coupled to Letec. It'll produce output for Letec, Text Info, HTML, and the rest. But of course, the one that I'm most concerned with is Letec. In the early days, whenever Lilipond was first developed, the output from Lilipond was only Letec. That's what they used. But for some reason or other, they moved away from Letec about, I think about five years ago, other abouts. They just abandoned the Letec route, and now they go straight to PostScript or to PDF. But the Lilipond Book gives you these options. And again, it's driven from the command line. Okay, now, as I said, Lilipond was designed by classical musicians, for classical musicians. There's very, very little Lilipond code out there for traditional musicians. The vast majority is held in what's known as ABC notation. And I'll come back to that in a minute. There are, literally, out on the internet, there are thousands and thousands and thousands of tunes in ABC format. You can use this search engine here, key in a few words, and bingo. Within seconds, it will bring up maybe hundreds of tunes that feature those words. Incredible. And the tunes come from all over the world. This is my main source. My main source is the internet. I pull down the tunes in ABC format. I use this utility here called ABC to Lilipond to convert them to Lilipond. And then I get Perl, which goes along, gathers the whole order, and builds, first of all, the Lilipond file, and then a Letec file. So essentially that's what I'm at. I'm going to take you out, and we'll actually take a look at how it actually works. Out to my beloved command line. Well, we go back to Emacs, first of all, and there's a piece of Lilipond code. Okay? We've got a header, which is, I'm tempted to say that it's like the preamble in a Letec file, but it isn't, really. It just does what it says. And I could take that header, and I could move it down here, and it'll score section. And it'll still work, and it'll still come out. That's the Perl-like. There's more than one way to do it. Next, I've got a music object called melody. See it? Just a clump of music. Is there a light pen thing that I can do? Yes. Here you see my melody. So all these notes here are all relative to middle C on the piano. I don't need to stipulate their exact position on the stage. You'll see here that MIDI I told it to use a ladder. Okay? These are repeats. Here repeat both of two, see? Doesn't seem to stay on this. You have to hold it down. Hold it down? You can use the mouse. It's still not in the key. Useable. That'll be fine. I can use my mouse. Anyway, you get the gist of it, yeah? It's just plain ordinary ASCII code. Then if I move down the bottom here, I've got the key section, which is the score section, and this is where the action is. The score section says, lay it. Give me a printed layer. And the MIDI section says, give me a MIDI output and use... Look at this. This is a horribly complex piece of code here. Temple code permanent, code permanent equals blah blah blah 64. That means use a corporate note and make it... I think it's 60 milliseconds. I'm not too sure about that. Okay, so off we go. I'll compile that one. It's simply lily-pwned. Example zero. It's very fussy about versions. I don't know if you noticed at the start, there was a version in the source code. It's very... And again, this is a function of the active development. It's so active that you have to keep very strong. You have to keep a very close eye on what version you're using. Now, why this here? I'm not going to worry about it. There's my M-flot. I think it comes up with that fail message because my version is too old. I think the version of my source code was 2.6 something, wasn't it? Whereas I'm actually compiling with a 2.11 compiler. So it's saying that the version is too far back. It just can't recover from that error. But it does its best. It's a very rugged plot. Nothing terribly exciting about that tune. There's no shimmers in it or funny things. So it's well within the capabilities of the lily-pwned. What we'll do now is we'll play that tune. That's enough of that. I don't think Knuth will be very impressed with that. What we'll do is... Can you change it to instrument equals organ? I can try that. What I will do is I'll Irish-ify it by speeding it up a little bit. Okay? You can pick up one. Let me go. Just compile it again. Yeah, too old to see. And again, play it. There you are. So a trivial composition. Okay, so now what we'll do is we'll take a look. Oh, that example that I played there was a pure lily-pwned example. A standalone lily-pwned example. Now I'll take a look at a lily-pwned example that's incorporated within Linux. Okay? Now I'll give a class, an article, really very, very simple. Begin document, a piece of Linux, some Linux code, and some more Linux. And yeah, very, very simple. Okay, this is where lily-pwned book comes into play. So what I say is I say lily-pwned book. I tell it to give me a leotech output. I tell it to put the output equals book. And I tell it to use psponts. And I tell it to demilify. Example 1.txt. We'll do that under... Clear the old file inside. Okay, off we go. I'm run now. Off it goes. This is a very old PC. This is actually my kid's PC that I'm using here. It's absolutely ancient. So it has put all the files into a directly called book. Rather a lot of files. You'll remember that was only a very small snippet of music. There's it there. Very, very small. But look at the number of files. What it does here is... Well, I go ahead and I explain to you what it does now. So what I have to do is I have to run leotechs again now. On that example 1.txt. So I run leotechs again. Well, before I do that... I'll let you have a quick look at the leotech file itself. Now, this would probably make more sense to you guys than it will to me. Yeah, okay. Okay. Can I go on? Now, I'll compile that. Of course, it compiles. Thanks, DDI. Well, that's my... Okay. Very, very simple. So this is where I have featured a piece of lilypond code directly in my text. Well, obviously, that's not very practical. What I want to do is I want to store the lilypond code in a file and let it be sucked in. Yeah? So, I'm going to... Oh my goodness. Well, very quickly then. Yeah. Here, I've just got a small file. See it? Okay. But that small lily file is actually the source for the first tune that I played you. It's a lot more complex. So I've got a lilypond on that. Now, you can see there's a lot more files now. So you can understand that whenever I come to write in my book, the number of files here in this directory, and then put directly, goes up very dramatically. I'll compile that. An XDI. Okay. What it does is it's actually creating a graphic for the header, the title, and each one of those lines. It creates a separate EPS file for each one of those, and it creates an EPS file for the whole line. So the impression I get is whenever Xnetix comes to actually put it all together then, if it can't fit up on the page, it only uses the first two or three graphics. Yeah? They can fit the whole line on the page, then it uses the whole big graphic. That's my understanding of it. Okay. I haven't got that much time left. So very quickly, I just wanted to show you the end product. And it'll show you how far I've got. Okay. There's my title. Nice table of contents. Nice, nicely laid out text. And typical change. Yeah? I do have some problems with white space. I mean, this is not very clever. So what I have to do is I have to do a manual, a footprint about here, either to include something that is nice with graphic here or not a tune. But remember, I want the tunes coupled together in particular sequences. And I've got a nice table of contents from out the way. So all I can tell you people is that I'm a typical letic user, but I'm a very happy letic user. And I thank you all very much indeed for making these tunes available to me. It really is a joy for me to use this. I have automated this whole procedure where I can just pull an ADC file down from the Internet and my Perl demons run it. The ADC code is full of errors, but my Perl code can recognize both of those errors and fix them. And then it converts it to Lilay and builds a letic span. And the whole thing is sweet, isn't it? Okay. Thank you, Joey. A couple of extra questions. Sorry, can you speak up just a second? Yeah, yeah. It's not always there. I think it has to do with the way that that particular piece of code was called. Do you see it there, look? If I call it without those parameters, the red box is not there. No. I think it's there for... It shows the graph rate. Yeah, yeah. It's there for engineering reasons. Also, this is changing points a lot, isn't it? Just repeat that, please. It's illustrating what you were saying about the 30-minute yes and no. Yes, yes. As a suggestion, you can have it basically clickable to place the media point. Oh, yeah. I'm just going to put in a PDF and get all the media with the PDF to the consumer. Yeah. Just click on that and the media will be placed. I do plan to do an online version of that. Can you embed the media in the PDF? Yes. You can write it. No? Right, yes. Sorry, just... I wanted to put in a plug here which boils down to an appeal. The appeal is that I would like to see the LaTeX and the Lillipon community perhaps be working a bit closer together. I can't help but feel... I didn't mention this, but whenever I post it to the Lillipon mailing list about my intention of putting this book together, their suggestion was forget LaTeX and just use Lillipon itself. But I was just... I was scared of that. Yeah, and I also do use Lillipon a lot. I think it's a bit... It doesn't use LaTeX. It's a very useful book and it could tell the internet, I'm sure, but if you look somewhere, you can see this talk you're going... I can't help but feel that there is a divergence there, which I think is a bit sad. It could be because I suspect amongst the LaTeX community there's not a large number of professional musicians. And a lot of people like music, but professional musicians are few. Danza Tupman is not from Denmark. Sorry, I'm suspecting that amongst the LaTeX community there's not an awful lot of professional musicians. So, after a time of damage, there's a lot of people with disney music, but people who have actually run or write books on it, they probably don't know what to do, so maybe we should encourage them. There's a piece of abandonism to be done there. It is a pretty rarefied and specialized book. Right, Joe, thank you very much indeed. My pleasure. APPLAUSE
 Good morning everybody. Can I assume that you all hear me?  I have to start by making a few admissions or a few confessions.  The first thing isn't the confession, in fact I'm actually very proud of it.  This is actually my name.  It's not a nickname and it's not a joke.  I'm very proud of it. It's a very old name that goes right back into Irish mythology.  Finn McCool was a giant. Somehow I seem to have got that wrong.  My family, my immediate cousins and even my brother are actually quite tall.  I followed my mother's side of the family.  Finn McCool was a giant who had a fight with another giant in Scotland or England or somewhere around here.  He stepped down to pick up a clod and he threw it at the other giant.  The clod that he picked up formed Loch Naye in Northern Ireland,  which is the biggest inland freshwater lake in the British Isles.  On the island we are told, it formed the Isle of Man.  That's my name.  My confession.  Yesterday I was asked to describe what my connection with latex was and I very simply said that I'm a latex user.  I left it that. In fact that's all I am. I'm just a latex user.  I work entirely on my own. I live in a very rural area. I'm looking at a window of cows.  Yesterday was the first time that I ever physically met anyone who had used latex or knew it was.  If I mentioned latex as I pronounce it to any of my work colleagues, they all think it's something to do with pornography.  So again you'll have to forgive my pronunciation. I'm going to pronounce words wrong.  I'm really sorry about that and it's because I'm not mixing with other latex people.  My second confession is that essentially I really don't know what I'm talking about.  I'm a fumbling, lazy, groping amateur. I try things, they work.  I won't be at all surprised if before the end of the week or even before the end of this talk,  somebody's going to tell me, oh this is much easier by doing that and you could have saved yourself once it worked.  That's the winners.  First of all the context. As Peter described, I'm very keen with boats.  I do a lot of sailing. We spend a lot of time on this old boat.  It was made in 1913 up in Northern Ireland. We use it around the Irish and on the West all year.  My family and I, this boat is part of my life. I'm as passionate about this boat as I am about more or less anything else.  The other part of the context is this is a typical boat scenario.  This is myself here, scruffy as ever. My daughter on my left, another daughter on down here and an occasional caller.  We get together and we make music. It's a great, great joy to be in the middle of nowhere surrounded by nothing and to play some music together.  You'll notice some sheets here and these would be rough manuscripts of some sort.  About 12 months or so ago I had finished writing a very small book again connected with boats and waterways.  We were trying to store a canal in Northern Ireland, the Ulster Canal.  I wrote a guide to the Ulster Canal and I used Laetic to do that. I really enjoyed the process very much.  About 12 months ago I was itching for another project and I had two ideas.  One was a cookbook for bookers where I describe bolting type recipes and bolting approaches to cooking on water.  Barbecues and methods of cooking.  The other one was to produce a tune of traditional music.  It's not classical music, it's traditional tunes that are in some way connected with boats, water, rivers, lakes, the sea, whatever.  Traditional music is learnt by ear. That is the essence of it. It's not generally written down.  There's not a strong tradition in the folk music world for writing down tunes.  They're just copied by ear from one person to another.  Traditional players are not strong sight leaders.  Because of this I had to take in a few very definite parameters.  The first one was an integer number of tunes per page. I can't have page turns in the middle of a tune.  I'm aiming for two or three tunes. This is just another typical book of Irish tunes.  I need nice big bright fonts, very clear and with a minimal clutter.  I was going to have tunes that are normally played in sets that might be two, three, possibly even four tunes grouped together and played once, one after the other.  I needed strong cross-revencing from one tune to another.  Ideally I would like to produce tunes on the one page where those two tunes would be played together.  I haven't got there yet, but that's one of my objectives.  I need snippets of text along with the tunes. Those snippets of text might be historical notes or approaches to playing the tunes, or maybe an alternative name or something like that.  I need that piece of text to plant to the tune so that I move the tune around to the book and the piece of text will follow it.  I needed a very easy way of keying in the tunes. Most of the tunes I take down from the internet, but sometimes I can't do that.  Sometimes I have to take them out of books. A few of them I've written myself, some I just get from friends, and I have to keying them raw.  So I need a fast way of keying the tunes. I needed good control of the output, and I needed good community support for whatever tools that I was going to use.  And I needed high quality layout. Now at this point I'm going to jump a bit.  Oh, no, I have to hit Escape here first.  Yeah. Ultimately I ended up using Lilypond.  And the essential message that I want to try and get across to you here, although I am not a representative Lilypond, I can't pretend to be a Lilypond ambassador at all.  They don't know me from Adam.  But the impression that I get, and the message that I want to get across to you, is that Lilypond are as concerned with the beauty and the presentation of the scores, as the tech and lexic people are with the presentation of text.  Yeah.  So to illustrate this, this is just a page from the Lilypond user manual.  We can see three characters here. This is the flat symbol. I don't know if you're familiar with that or not.  The one on the left is from a relatively modern, probably Windows type computer pieces software setting that character.  The one in the middle is a hand set 1950 from a German book.  And the one on the right is Lilypond.  I think you can compare them yourselves.  The Lilypond one tries to emulate 1951 as close as it can.  Notice the rounded top to the B and the square top to the B on the left-hand side.  Traditionally, music was set by hand.  The characters were graved by hand out from plates and then inked and pressed from that.  The process of producing music is actually known as engraving, not type setting.  Although I myself would very often use the word type setting.  So we're talking about engraving here.  The Lilypond people suggest that with the proliferation of PCs and with the Microsoft products that we have at hand,  that everybody thinks now they can type set music.  And the Lilypond people disagree with this entirely.  They suggest that, particularly for classical music, that the presentation of the music must be as clear and as beautiful as possible.  Because orchestral musicians trying to play a violin with a very, very complex piece of Wagner or something,  and the script is sitting back two meters away from them, it has got to be 100% not 99%.  Any distraction that's on the piece at all is likely to distract them from natural play.  I'll give you an example here.  They make a suggestion here that the spacing between the upstain and the downstain is wider here in the Lilypond than it is in the Olyphos.  So I want to just point that out to you that they are very concerned with quality.  Excuse me.  I don't know if I'm the only one who doesn't know what to do with this.  Can you give me a 30 second intro?  I jumped ahead of myself a little bit and I'm going to jump back again now, okay?  Another apology that I have to make to you is that I've never actually read a paper at a conference before.  This is my first time ever to do this.  So you'd have to bear with me again my amateurish fumbling.  I don't know how that managed to wind back on me.  Okay, so there's the objective.  There are some more needs.  I need MIDI production because I make an assumption that the people who will use the book will want to be able to hear the tunes as well.  Do you know what MIDI is?  No?  This is brilliant.  I know something you don't know.  MIDI is a music industry digital interchange.  It's a standard format for storing music in files.  If I put a MIDI file on my computer, I can play it.  It's a standard for music in files.  There is a laser exchange down in the wire and so one instrument can control the other instrument and also transfer files and all that stuff.  You can hook up to a MIDI interface from a keyboard to a PC and suck the data straight into the keyboard.  It's a wonderful system.  You probably know more about it than I do.  I just listened to the stuff.  I needed indexing by tune type.  Whenever I'm looking up a tune, if it's a tune called Out in the Ocean, I want to know whether it's a jig or a reel or what it is.  Because then I know what kind of lead it is.  I wanted the process to be as automatic as possible and that takes me to Perl and so on.  A lot of the tunes I pulled them down from the net.  Those were their programs.  What's out there?  By far the most popular programs in use out there, amongst everyone, is Finale and Sedanus.  They are fighting neck and neck in the Windows world.  They're both commercial products.  Their output is OK.  You talk about the same kind of quality output as you get from Word.  Note where the composer is shareware.  You send off and you get it on a floppy disk or CD or whatever and you can use it as long as you want.  There's some restrictions in it.  You want to use the full system.  You have to pay them $35 or something.  It's very cheap.  It uses a proprietary file format to store the music in.  So for me that's it.  I'm not too sure about Finale and Sedanus.  I think they might use XML.  I'm not too sure about that or music XML.  I'm not too sure.  Cake Rock is another one.  I rejected all of those because I'm just not a Windows person.  I'm a very traditional Unix type person and they just don't suit me at all.  I may not be treating them fairly but I dismissed them fairly early in the process.  At Open Source we've got Music Tech.  I looked at it briefly.  I read a paper which I think was presented at this conference living a few years ago by an Italian shop.  Is that right about?  But it struck me as being horrendously complex and way, way over my head completely.  So I knocked that on my head.  I did read somewhere in the standard latex, textbooks, that PS6 can be used to produce music.  But again, it just seemed to me to be too cumbersome for what I wanted to do.  And I settled finally on Lilipond.  Now if you ask anybody in the classical music world of publishing,  they will tell you that Lilipond is the boy.  The depth is very, very high quality output.  Even Phenallian Zabelius will output Lilipond code.  They're fine. Phenallian Zabelius have got very nice gooey cotton paste.  You can drag notes about on the screen and all this sort of stuff.  And yes, you can connect it to a MIDI keyboard and suck the data in from MIDI keyboard.  But whenever it comes to producing the scores, they're horrible.  You've seen that from the B-flat that I illustrated there.  Okay, so Lilipond then answered a lot of my requirements.  It is very, very actively underdeveloped.  It was originally started by two guys from a Dutch quartet.  I can't pronounce their names. You'll get it in the documentation.  And they started, I think, kind of about 1986 or thereabouts.  And they've been working on it for a good number of years.  It's very much open source, very much out there in the community.  And it's very much being contributed to by a lot of people.  Very strong community support.  I subscribe to the Lilipond mailing list.  I also subscribe to the text hacks.  Is that text?  And what's the other one called? The Tug One?  I submit to both those mailing lists for Leatech.  And certainly the traffic on the Lilipond One matches if not exceeds the Leatech ones.  Very, very active.  A lot of it is way over my head.  One of the problems with music type setting is that music itself has an awful lot of technical terms in it.  Particularly in classical musicians.  And a lot of them are in Italian, which I don't understand.  I can't even pronounce the words, you know, if I don't understand them.  It's really difficult.  Ease of key.  I've come back to that in a minute.  Partial compilation.  If I produce a big long piece and I'm working on it, yeah.  Obviously it's getting longer and longer as I work on it.  But I can tell Lilipond to ignore the first two quarters of it and just compile the last 25% that I'm working on.  And that saves time.  I've got a mode, Lilipond mode from my beloved Emacs.  Which is wonderful.  But best of all, the most important thing to me and where the crunch comes is I've got a classical Unix command line interface.  There's no GUI, none of this high-candy stuff at all.  It's really, really old-fashioned and absolutely beautiful.  It incorporates the Scheme programming language.  Now again, I confess that I haven't got that far as to actually dabble the Scheme yet.  But it's in there and you can do all sorts of things with it.  Again, very, very high quality output.  And the documentation, I've come back to the documentation now.  I'm going to go back again to the high quality output.  I have to do that, that.  And then I go to bookmarks and I go to a demonstration.  I just wanted to put up this demonstration for you on the example of what Lilipond can do to give you some idea of where things can go wrong.  I mean, this is beautiful. This is excellent.  Wonderful and great.  But you can see that lesser software could very easily screw off the app.  You can see the number of parameters that are dependent on the app.  It really is very complex.  I would suggest to you probably, dare I say, more complex than Type-Coding Text.  There are a lot of parameters there.  There's a lot of space to be handled and a lot of symbols to be positioned correctly.  So there's loads around for it to go wrong.  But it doesn't, Lilipond.  It doesn't. It's a rock solid system.  I haven't yet found any books in it.  And in reading the mailing list, very seldom do I come across reports of books.  It really is a very, very solid, typical Unix-type product.  Why does it keep going back to there?  This is another apology. I should have presented the slides using latex,  but I just haven't got that far yet. Sorry about this.  Okay, now, the documentation is excellent.  It really is very good. And again, I just jumped back to Firefox if I may.  And I want to show you.  I want to show you.  Now, for some reason, I have to close down this open office rubbish thing.  I can't seem to be able to jump from one to the other.  It just doesn't respond.  I just go to bookmarks and I go to...  This is part of the learning manual, the online learning manual.  And Lilipond, I can simply click on an example,  a musical example and it pops the code behind it.  So that's something that latex people might think about in their documentation,  online documentation.  Right? Okay.  That's a musical example, yeah?  You'll notice as I scroll over it, I get the pointer coming up, yeah?  I click on it and it pops the score behind it.  Yeah, they're coming back to the scores again.  Yeah?  But that's just a thought for people to document and let it.  I didn't do this last night.  Okay.  I got as far as the documentation.  The documentation is excellent and I put it here on my list of pluses for Lilipond.  And I've also put active development on my list of pluses for Lilipond.  But on my list of negatives, I've had to feature the documentation again.  Because despite the fact that I've got all these snippets of music and the code behind them,  there's examples upon examples upon examples upon examples.  It's still very, very difficult to learn.  It's still very difficult to grasp the overall picture of how the code is structured  and how the system works.  It's a bit like Perl.  You know one of the strong strengths of Perl is that there's more than one way to do it?  Larry Wall keeps telling us this.  Okay?  We've already had this comment this morning where you write a program this year  and you come back next year and you can understand how it works.  Well, Lilipond's a bit like that as well.  I'll be coming back to the code in a minute.  There's more than one way to do it.  And the code can get really quite complex and quite hairy.  The evolving documentation, yes.  The documentation for Lilipond is a monolith.  It's just the one source for it.  I'm not too sure there's any books out there on Lilipond.  But on the site, there's only the one source.  Because the documentation for Lilipond, as we know, there's lots of books.  There's lots and lots and lots and lots of different easy-to-read HTML files  and PDFs and all sorts of things.  I would compare the learning curve of tech and Lilipond.  I would say they're in or about the same.  I'd say Lilipond, maybe, is a little bit more difficult.  It's not easy.  The end product is very high quality.  It's command-like to it.  It's got a novel strength.  It's not easy to learn.  OK.  So on we go.  OK.  The ease of key.  You know what a bar is?  In the music app?  We write music in chunks.  And we feature bars.  You'll see this in a bit of the code.  It's got a bar check in there.  So if you accidentally plug an extra note in a bar, it'll tell you.  It's got octave checks.  So if you do ridiculous jumps from middle C octave, super high C,  it'll quench at you, and it'll tell you that.  It's got an absolutely called relative C.  The initial versions of Lilipond, you just had to feature the code A, B, C, D, E, F.  And you have to tell it where and the state those notes were.  Now, more recent versions have got this facility called relative C,  where the notes are all positioned relative to C.  And again, if you warn you, you can go outside there.  The duration of the note is simply given by a number of halfs.  This D is a quarter note.  Yeah.  And again, in the earlier versions, that E would also have to be followed by a time,  which might be a 4, 2, or 1, or 8, or whatever.  But now, once you've made your time once,  Lilipond automatically attaches that time to the following notes.  So you can keep really, really quicker.  Much, much quicker, I would suggest, than you can with the most dragging notes about them,  talking them on stage.  Musical phrases.  This would be the equivalent of a new command in later.  I can just define the music of fragments, and I can feature it later in my code, and Lilipond.  Wonderful.  Now, within the Lilipond family, there are a number of utilities.  There's a utility for converting from music XML to Lilipond.  There's a utility for converting from ABC, which is another music format that I've converted to Lilip.  And in particular, there's this item here, Lilipond Book, and it's designed specifically for writing books.  It's very closely coupled to Letec.  It'll produce output for Letec, Text Info, HTML, and the rest.  But of course, the one that I'm most concerned with is Letec.  In the early days, whenever Lilipond was first developed, the output from Lilipond was only Letec.  That's what they used.  But for some reason or other, they moved away from Letec about, I think about five years ago, other abouts.  They just abandoned the Letec route, and now they go straight to PostScript or to PDF.  But the Lilipond Book gives you these options.  And again, it's driven from the command line.  Okay, now, as I said, Lilipond was designed by classical musicians, for classical musicians.  There's very, very little Lilipond code out there for traditional musicians.  The vast majority is held in what's known as ABC notation.  And I'll come back to that in a minute.  There are, literally, out on the internet, there are thousands and thousands and thousands of tunes in ABC format.  You can use this search engine here, key in a few words, and bingo.  Within seconds, it will bring up maybe hundreds of tunes that feature those words.  Incredible. And the tunes come from all over the world.  This is my main source. My main source is the internet.  I pull down the tunes in ABC format.  I use this utility here called ABC to Lilipond to convert them to Lilipond.  And then I get Perl, which goes along, gathers the whole order, and builds, first of all, the Lilipond file, and then a Letec file.  So essentially that's what I'm at. I'm going to take you out, and we'll actually take a look at how it actually works.  Out to my beloved command line.  Well, we go back to Emacs, first of all, and there's a piece of Lilipond code.  Okay?  We've got a header, which is, I'm tempted to say that it's like the preamble in a Letec file, but it isn't, really.  It just does what it says. And I could take that header, and I could move it down here, and it'll score section.  And it'll still work, and it'll still come out.  That's the Perl-like. There's more than one way to do it.  Next, I've got a music object called melody. See it?  Just a clump of music. Is there a light pen thing that I can do?  Yes.  Here you see my melody. So all these notes here are all relative to middle C on the piano.  I don't need to stipulate their exact position on the stage.  You'll see here that MIDI I told it to use a ladder. Okay?  These are repeats. Here repeat both of two, see?  Doesn't seem to stay on this.  You have to hold it down.  Hold it down?  You can use the mouse. It's still not in the key.  Useable.  That'll be fine.  I can use my mouse.  Anyway, you get the gist of it, yeah?  It's just plain ordinary ASCII code.  Then if I move down the bottom here,  I've got the key section, which is the score section,  and this is where the action is.  The score section says, lay it.  Give me a printed layer.  And the MIDI section says,  give me a MIDI output and use...  Look at this.  This is a horribly complex piece of code here.  Temple code permanent,  code permanent equals blah blah blah 64.  That means use a corporate note and make it...  I think it's 60 milliseconds.  I'm not too sure about that.  Okay, so off we go. I'll compile that one.  It's simply lily-pwned.  Example zero.  It's very fussy about versions.  I don't know if you noticed at the start,  there was a version in the source code.  It's very...  And again, this is a function of the active development.  It's so active that you have to keep very strong.  You have to keep a very close eye on what version you're using.  Now, why this here?  I'm not going to worry about it.  There's my M-flot.  I think it comes up with that fail message  because my version is too old.  I think the version of my source code was 2.6 something, wasn't it?  Whereas I'm actually compiling with a 2.11 compiler.  So it's saying that the version is too far back.  It just can't recover from that error.  But it does its best.  It's a very rugged plot.  Nothing terribly exciting about that tune.  There's no shimmers in it or funny things.  So it's well within the capabilities of the lily-pwned.  What we'll do now is we'll play that tune.  That's enough of that.  I don't think Knuth will be very impressed with that.  What we'll do is...  Can you change it to instrument equals organ?  I can try that.  What I will do is I'll Irish-ify it by speeding it up a little bit.  Okay?  You can pick up one.  Let me go.  Just compile it again.  Yeah, too old to see.  And again, play it.  There you are.  So a trivial composition.  Okay, so now what we'll do is we'll take a look.  Oh, that example that I played there was a pure lily-pwned example.  A standalone lily-pwned example.  Now I'll take a look at a lily-pwned example that's incorporated within Linux.  Okay?  Now I'll give a class, an article, really very, very simple.  Begin document, a piece of Linux, some Linux code, and some more Linux.  And yeah, very, very simple.  Okay, this is where lily-pwned book comes into play.  So what I say is I say lily-pwned book.  I tell it to give me a leotech output.  I tell it to put the output equals book.  And I tell it to use psponts.  And I tell it to demilify.  Example 1.txt.  We'll do that under...  Clear the old file inside.  Okay, off we go.  I'm run now.  Off it goes.  This is a very old PC.  This is actually my kid's PC that I'm using here.  It's absolutely ancient.  So it has put all the files into a directly called book.  Rather a lot of files.  You'll remember that was only a very small snippet of music.  There's it there.  Very, very small.  But look at the number of files.  What it does here is...  Well, I go ahead and I explain to you what it does now.  So what I have to do is I have to run leotechs again now.  On that example 1.txt.  So I run leotechs again.  Well, before I do that...  I'll let you have a quick look at the leotech file itself.  Now, this would probably make more sense to you guys than it will to me.  Yeah, okay.  Okay.  Can I go on?  Now, I'll compile that.  Of course, it compiles. Thanks, DDI.  Well, that's my...  Okay.  Very, very simple.  So this is where I have featured a piece of lilypond code directly in my text.  Well, obviously, that's not very practical.  What I want to do is I want to store the lilypond code in a file and let it be sucked in.  Yeah?  So, I'm going to...  Oh my goodness.  Well, very quickly then.  Yeah.  Here, I've just got a small file. See it?  Okay.  But that small lily file is actually the source for the first tune that I played you.  It's a lot more complex.  So I've got a lilypond on that.  Now, you can see there's a lot more files now.  So you can understand that whenever I come to write in my book, the number of files here in this directory,  and then put directly, goes up very dramatically.  I'll compile that.  An XDI.  Okay.  What it does is it's actually creating a graphic for the header, the title, and each one of those lines.  It creates a separate EPS file for each one of those, and it creates an EPS file for the whole line.  So the impression I get is whenever Xnetix comes to actually put it all together then,  if it can't fit up on the page, it only uses the first two or three graphics.  Yeah?  They can fit the whole line on the page, then it uses the whole big graphic.  That's my understanding of it.  Okay.  I haven't got that much time left.  So very quickly, I just wanted to show you the end product.  And it'll show you how far I've got.  Okay.  There's my title.  Nice table of contents.  Nice, nicely laid out text.  And typical change.  Yeah?  I do have some problems with white space.  I mean, this is not very clever.  So what I have to do is I have to do a manual, a footprint about here,  either to include something that is nice with graphic here or not a tune.  But remember, I want the tunes coupled together in particular sequences.  And I've got a nice table of contents from out the way.  So all I can tell you people is that I'm a typical letic user,  but I'm a very happy letic user.  And I thank you all very much indeed for making these tunes available to me.  It really is a joy for me to use this.  I have automated this whole procedure where I can just pull an ADC file down from the Internet  and my Perl demons run it.  The ADC code is full of errors,  but my Perl code can recognize both of those errors and fix them.  And then it converts it to Lilay and builds a letic span.  And the whole thing is sweet, isn't it?  Okay.  Thank you, Joey.  A couple of extra questions.  Sorry, can you speak up just a second?  Yeah, yeah.  It's not always there.  I think it has to do with the way that that particular piece of code was called.  Do you see it there, look?  If I call it without those parameters, the red box is not there.  No.  I think it's there for...  It shows the graph rate.  Yeah, yeah.  It's there for engineering reasons.  Also, this is changing points a lot, isn't it?  Just repeat that, please.  It's illustrating what you were saying about the 30-minute yes and no.  Yes, yes.  As a suggestion, you can have it basically clickable to place the media point.  Oh, yeah.  I'm just going to put in a PDF and get all the media with the PDF to the consumer.  Yeah.  Just click on that and the media will be placed.  I do plan to do an online version of that.  Can you embed the media in the PDF?  Yes.  You can write it.  No?  Right, yes.  Sorry, just... I wanted to put in a plug here which boils down to an appeal.  The appeal is that I would like to see the LaTeX and the Lillipon community perhaps be working a bit closer together.  I can't help but feel... I didn't mention this, but whenever I post it to the Lillipon mailing list about my intention of putting this book together,  their suggestion was forget LaTeX and just use Lillipon itself.  But I was just... I was scared of that.  Yeah, and I also do use Lillipon a lot.  I think it's a bit...  It doesn't use LaTeX.  It's a very useful book and it could tell the internet, I'm sure,  but if you look somewhere, you can see this talk you're going...  I can't help but feel that there is a divergence there, which I think is a bit sad.  It could be because I suspect amongst the LaTeX community there's not a large number of professional musicians.  And a lot of people like music, but professional musicians are few.  Danza Tupman is not from Denmark.  Sorry, I'm suspecting that amongst the LaTeX community there's not an awful lot of professional musicians.  So, after a time of damage, there's a lot of people with disney music, but people who have actually run or write books on it,  they probably don't know what to do, so maybe we should encourage them.  There's a piece of abandonism to be done there.  It is a pretty rarefied and specialized book.  Right, Joe, thank you very much indeed.  My pleasure.  APPLAUSE
A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_0_5015.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_5016_5939.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_5940_11075.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_11076_11135.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_11136_12143.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_12144_12191.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_12192_16259.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_16260_16307.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_16308_16583.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_16584_16667.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_16668_16715.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_16716_16763.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_16764_16955.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_16956_27923.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_27924_28187.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_28188_30287.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_30288_30347.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_30348_30395.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_30396_30527.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_30528_30587.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_30588_30635.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_30636_31211.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_31212_31283.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_31284_31859.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_31860_32675.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_32676_33011.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_33012_33059.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_33060_33107.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_33108_33431.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_33432_43955.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_43956_44027.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_44028_44099.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_44100_47735.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_47736_48779.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_48780_49703.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_49704_50327.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_50328_51743.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_51744_54407.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_54408_55379.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_55380_55967.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_55968_56363.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_56364_57587.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_57588_59099.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_59100_59951.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_59952_60047.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_60048_60251.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_60252_60455.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_60456_60611.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_60612_60671.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_60672_60731.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_60732_60779.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_60780_61283.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_61284_62771.png A_newbie_s_experiences_with_Lilypond__Lilypond--book__LaTeX__and_Perl_62772_67863.png