WEBVTT
00:00:02.000 --> 00:00:04.799
Hello, everyone, and welcome to the EmacsConf.
00:00:04.799 --> 00:00:06.631
I am Jonathan. In this talk,
00:00:06.631 --> 00:00:10.880
I'm going to demonstrate ways of
producing sheet music in Emacs
00:00:10.880 --> 00:00:14.636
using Lilypond, and maybe also
convince you
00:00:14.636 --> 00:00:18.640
to use Emacs for writing your scores.
00:00:18.640 --> 00:00:20.698
I'll start with an overview
of the syntax
00:00:20.698 --> 00:00:22.240
for those who are new to using
00:00:22.240 --> 00:00:24.400
text-based notation
00:00:24.400 --> 00:00:26.615
as a shallow dive into the deep pond
00:00:26.615 --> 00:00:28.800
of lilies and Lilypond,
00:00:28.800 --> 00:00:30.171
and move on to showcase
00:00:30.171 --> 00:00:34.723
some of its functionalities
using Org Mode and lilypond-mode.
00:00:34.723 --> 00:00:37.173
One disclaimer, however:
00:00:37.173 --> 00:00:40.480
I am not a Lilypond developer.
00:00:40.480 --> 00:00:42.841
So what is Lilypond?
00:00:42.841 --> 00:00:46.800
Lilypond is a file format and music
engraving system
00:00:46.800 --> 00:00:50.000
for producing high-quality sheet music.
00:00:50.000 --> 00:00:52.442
It translates textual representations
00:00:52.442 --> 00:00:55.120
of music to graphical objects.
00:00:55.120 --> 00:00:57.520
It's similar to LaTeX in that
00:00:57.520 --> 00:00:59.329
its input format describes
00:00:59.329 --> 00:01:01.600
the visual layouts of the score,
00:01:01.600 --> 00:01:05.119
using commands to define musical
expressions.
00:01:05.119 --> 00:01:07.760
Commands begin with a backslash.
00:01:07.760 --> 00:01:10.791
For example, the formatter command,
as shown on the left,
00:01:10.791 --> 00:01:13.920
yields its graphical equivalents
on the right,
00:01:13.920 --> 00:01:16.345
the fermata symbol over the low B
00:01:16.345 --> 00:01:19.119
and so on and so forth.
00:01:19.119 --> 00:01:21.600
It's also fully extensible, like Emacs,
00:01:21.600 --> 00:01:23.119
allowing users to extend
00:01:23.119 --> 00:01:25.600
and override Lilypond's functionalities
00:01:25.600 --> 00:01:28.452
using the Scheme scripting language.
00:01:28.452 --> 00:01:32.422
It can be used for early and
contemporary music tablature,
00:01:32.422 --> 00:01:35.200
vocal music lead sheets, and so on.
00:01:35.200 --> 00:01:38.000
Above all, it works with Emacs.
00:01:38.000 --> 00:01:41.040
In fact, Lilypond ships with
Emacs Lisp libraries,
00:01:41.040 --> 00:01:47.360
including a major mode for editing
Lilypond files.
00:01:47.360 --> 00:01:50.560
So the input files are similar to source
files.
00:01:50.560 --> 00:01:54.079
They contain expressions formed with
curly braces,
00:01:54.079 --> 00:01:56.549
comments that start with
the percent sign,
00:01:56.549 --> 00:02:00.240
and the code is indented.
00:02:00.240 --> 00:02:02.903
Notes are entered using lowercase
letters,
00:02:02.903 --> 00:02:05.600
and rests with the letter r.
00:02:05.600 --> 00:02:08.800
In this case, the lowercase r or r4
00:02:08.800 --> 00:02:11.039
is the equivalence of a crotchet or
00:02:11.039 --> 00:02:14.000
quarter note rest.
00:02:14.000 --> 00:02:15.938
Durations are entered using numbers
00:02:15.938 --> 00:02:18.480
and dots after the note name.
00:02:18.480 --> 00:02:20.196
If you do not specify one,
00:02:20.196 --> 00:02:22.640
the previous duration is used.
00:02:22.640 --> 00:02:27.360
You can also tie notes together using
the tilde symbol (~).
00:02:27.360 --> 00:02:30.000
In fact, you can input chords, lyrics,
00:02:30.000 --> 00:02:32.080
embellishments, and a lot more.
00:02:32.080 --> 00:02:36.160
I encourage you to read the manual for
more information.
00:02:36.160 --> 00:02:39.680
Now let's switch to a terminal window.
00:02:39.680 --> 00:02:41.247
With Lilypond installed,
00:02:41.247 --> 00:02:50.560
let's create a test file with the
extension .ly and open it in Emacs.
00:02:50.560 --> 00:02:53.048
At the top of the file is
the version statement,
00:02:53.048 --> 00:02:54.395
which tells Lilypond
00:02:54.395 --> 00:02:57.440
which version to use when
compiling the file.
00:02:57.440 --> 00:03:00.959
Here I'm using version 2.20.0.
00:03:00.959 --> 00:03:04.159
I've added the clef and time signature.
00:03:04.159 --> 00:03:09.280
Let's add some notes.
00:03:09.280 --> 00:03:12.098
I'm going to close this now
00:03:12.098 --> 00:03:13.765
and compile the file
00:03:13.765 --> 00:03:19.760
by running lilypond followed
by the file name.
00:03:19.760 --> 00:03:27.360
So now let's view the output.
00:03:27.360 --> 00:03:29.760
Okay. So here's a more complex example
00:03:29.760 --> 00:03:32.239
for randomizing note sequences.
00:03:32.239 --> 00:03:33.410
The idea is to create
00:03:33.410 --> 00:03:37.760
new reading materials each time the code
blocks are evaluated.
00:03:37.760 --> 00:03:40.640
As usual, we begin with a header.
00:03:40.640 --> 00:03:43.541
I've added the title and composer.
00:03:43.541 --> 00:03:47.920
Then we add the note sequences to use in
the composition.
00:03:47.920 --> 00:03:51.200
In this case, sn is a note name just like
00:03:51.200 --> 00:03:54.959
a b c d and so on, and stands for snare drum,
00:03:54.959 --> 00:03:58.879
the percussion instruments.
00:03:58.879 --> 00:04:00.720
Now here's a function that's going to
00:04:00.720 --> 00:04:04.080
shuffle the notes in the table.
00:04:04.080 --> 00:04:06.560
Finally, we expand the notes inside
00:04:06.560 --> 00:04:08.799
the Lilypond source block.
00:04:08.799 --> 00:04:10.684
So whatever the function returns
00:04:10.684 --> 00:04:13.680
is expanded inside the drums block.
00:04:13.680 --> 00:04:20.079
Now let's press C-c C-c to view the
results.
00:04:20.079 --> 00:04:26.840
Okay. And if I run this again, it should
create a new composition.
00:04:26.840 --> 00:04:31.360
Great. You can also audition a piece
using the midi command,
00:04:31.360 --> 00:04:34.320
which creates a midi file of the score.
00:04:34.320 --> 00:04:36.560
Note also that the ob library--
00:04:36.560 --> 00:04:39.040
sorry, the ob-lilypond library comes
00:04:39.040 --> 00:04:40.400
with two modes.
00:04:40.400 --> 00:04:43.440
The one I'm using now is called
arrange mode
00:04:43.440 --> 00:04:47.120
and is useful for assembling
complete scores.
00:04:47.120 --> 00:04:49.015
The basic mode, on the other hand,
00:04:49.015 --> 00:04:51.199
allows you to mix text and music
00:04:51.199 --> 00:04:53.360
by embedding Lilypond snippets and
00:04:53.360 --> 00:05:00.240
export them using typical Org Mode
commands.
00:05:00.240 --> 00:05:02.661
Now to demonstrate the basic mode in
action.
00:05:02.661 --> 00:05:04.320
I'm going to export this document
00:05:04.320 --> 00:05:05.120
to a PDF file.
00:05:05.120 --> 00:05:10.077
In this case, the :file header argument
is required,
00:05:10.077 --> 00:05:11.919
so you have to provide one
00:05:11.919 --> 00:05:15.600
and include the file name.
00:05:15.600 --> 00:05:22.160
Again, you can run the code and view the
results.
00:05:22.160 --> 00:05:33.680
Here it is. So now let's export this to
a PDF file.
00:05:33.680 --> 00:05:39.680
And here it is, what it generates.
00:05:39.680 --> 00:05:41.716
Now I'm going to show you
the workflow I used
00:05:41.716 --> 00:05:44.000
to produce music books in Emacs,
00:05:44.000 --> 00:05:46.160
combining Lilypond and LaTeX for a
00:05:46.160 --> 00:05:48.000
perfect marriage.
00:05:48.000 --> 00:05:49.858
I begin by sketching the first draft
00:05:49.858 --> 00:05:53.039
of the manuscript using
pencil and paper.
00:05:53.039 --> 00:05:55.039
Then I move to Emacs to input the notes
00:05:55.039 --> 00:05:57.440
in a git repository.
00:05:57.440 --> 00:05:59.486
This is a typical source file.
00:05:59.486 --> 00:06:01.360
It begins with a stylesheet
00:06:01.360 --> 00:06:03.690
where I set variables and layout settings,
00:06:03.690 --> 00:06:04.875
although in general,
00:06:04.875 --> 00:06:07.039
there's no need for tweaking the layout
00:06:07.039 --> 00:06:11.199
unless you have specific requirements to
do so.
00:06:11.199 --> 00:06:15.520
The easiest way to compile the file
from Emacs is by pressing C-c C-l,
00:06:15.520 --> 00:06:19.280
so let's do this now,
00:06:19.280 --> 00:06:21.199
and the compilation buffer will tell you
00:06:21.199 --> 00:06:23.759
if there were any errors in the file.
00:06:23.759 --> 00:06:25.439
Now to automate the process of
00:06:25.439 --> 00:06:28.560
compiling several files and
building the PDF,
00:06:28.560 --> 00:06:31.280
I use GNU Make, so all I have to do is
00:06:31.280 --> 00:06:36.000
open the shell and run the make command.
Don't worry,
00:06:36.000 --> 00:06:37.840
I'll provide a link to the source code
00:06:37.840 --> 00:06:41.600
on the last slide.
00:06:41.600 --> 00:06:43.494
As I moved forward with the project,
00:06:43.494 --> 00:06:46.000
I found at least two things missing.
00:06:46.000 --> 00:06:48.720
One, I had no access to a metronome,
00:06:48.720 --> 00:06:50.479
at least not from the editor,
00:06:50.479 --> 00:06:52.437
so I built one for casual use
00:06:52.437 --> 00:06:55.919
and made it available in the MELPA
repository.
00:06:55.919 --> 00:06:59.039
I also missed bar numbers in the
source file.
00:06:59.039 --> 00:07:00.880
This is useful when going back and forth
00:07:00.880 --> 00:07:04.479
between input and output files without
getting lost.
00:07:04.479 --> 00:07:07.290
So I wrote a command for toggling bar
numbers,
00:07:07.290 --> 00:07:10.000
which I hope you can see on the left.
00:07:10.000 --> 00:07:12.080
Also, some expressions are difficult or
00:07:12.080 --> 00:07:14.160
slow to write on the keyboard--
00:07:14.160 --> 00:07:16.490
accents and tuplets, for example--
00:07:16.490 --> 00:07:20.160
so I use template expansion extensively
for this purpose,
00:07:20.160 --> 00:07:23.440
mainly yasnippet.
00:07:23.440 --> 00:07:24.797
So what do I think?
00:07:24.797 --> 00:07:28.080
Well, I think Lilypond can be a sharp
paradigm shift
00:07:28.080 --> 00:07:30.817
for people used to GUI alternatives,
00:07:30.817 --> 00:07:32.720
but the results are impressive.
00:07:32.720 --> 00:07:34.639
You don't have to dive too deeply to
00:07:34.639 --> 00:07:36.960
start using Lilypond.
00:07:36.960 --> 00:07:39.635
Likewise, the ability to extend the
software,
I think,
00:07:39.635 --> 00:07:42.400
is especially appealing for music
professionals,
00:07:42.400 --> 00:07:46.560
enthusiasts, composers, and the academic
community:
00:07:46.560 --> 00:07:48.400
for example, allowing users to create
00:07:48.400 --> 00:07:50.187
alternative notation systems
00:07:50.187 --> 00:07:53.120
required in non-Western music traditions
00:07:53.120 --> 00:07:56.160
and other non-conventional requirements.
00:07:56.160 --> 00:07:58.400
Also, Lilypond and Emacs both have
00:07:58.400 --> 00:08:00.720
extensive and well-written manuals
00:08:00.720 --> 00:08:04.639
and active communities of users.
00:08:04.639 --> 00:08:05.971
But if you're still not sure
00:08:05.971 --> 00:08:10.475
where to start and when to wedge your
feet in the deep but warm pond
00:08:10.475 --> 00:08:13.680
of lilies, Lilypond, and Lilypond users,
00:08:13.680 --> 00:08:16.960
I invite you to contribute to my
Lilypond projects,
00:08:16.960 --> 00:08:20.720
which you can do so from the links on
the screen.
00:08:20.720 --> 00:08:23.271
So, thank you all. I look forward to
your comments,
00:08:23.271 --> 00:08:27.840
and I hope you enjoy the rest of the
conference.