WEBVTT
00:00:02.000 --> 00:00:04.799
Hello, everyone, and welcome to the EmacsConf.
00:00:04.799 --> 00:00:07.200
I am Jonathan. In this talk, I'm going
00:00:07.200 --> 00:00:09.599
to demonstrate ways of producing sheet
00:00:09.599 --> 00:00:10.880
music in Emacs
00:00:10.880 --> 00:00:14.320
using Lilypond, and maybe also convince
00:00:14.320 --> 00:00:18.640
you to use Emacs for writing your scores.
00:00:18.640 --> 00:00:20.400
I'll start with an overview of the
00:00:20.400 --> 00:00:22.240
syntax 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.800
as a shallow dive into the deep pond of
00:00:26.800 --> 00:00:28.800
lilies and Lilypond,
00:00:28.800 --> 00:00:30.800
and move on to showcase some of its
00:00:30.800 --> 00:00:32.960
functionalities using Org Mode
00:00:32.960 --> 00:00:36.320
and lilypond-mode. One disclaimer,
00:00:36.320 --> 00:00:40.480
however: I am not a Lilypond developer.
00:00:40.480 --> 00:00:44.079
So what is Lilypond? Lilypond is
00:00:44.079 --> 00:00:46.800
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.640
It translates textual representations of
00:00:52.640 --> 00:00:55.120
music to graphical objects.
00:00:55.120 --> 00:00:57.760
It's similar to LaTeX in that its
00:00:57.760 --> 00:01:00.000
input format describes the visual
00:01:00.000 --> 00:01:01.600
layouts of the score,
00:01:01.600 --> 00:01:03.520
using commands to define musical
00:01:03.520 --> 00:01:05.119
expressions.
00:01:05.119 --> 00:01:07.760
Commands begin with a backslash.
00:01:07.760 --> 00:01:08.640
For example,
00:01:08.640 --> 00:01:10.479
the formatter command, as shown on the
00:01:10.479 --> 00:01:13.040
left, yields its graphical equivalents on
00:01:13.040 --> 00:01:13.920
the right,
00:01:13.920 --> 00:01:16.640
the fermata symbol over the low B and
00:01:16.640 --> 00:01:19.119
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:26.640
using the Scheme
00:01:26.640 --> 00:01:29.840
scripting language. It can be used for
00:01:29.840 --> 00:01:31.600
early and contemporary music
00:01:31.600 --> 00:01:34.479
tablature, vocal music lead sheets,
00:01:34.479 --> 00:01:35.200
and so on.
00:01:35.200 --> 00:01:38.000
Above all, it works with Emacs.
00:01:38.000 --> 00:01:38.479
In fact,
00:01:38.479 --> 00:01:41.040
Lilypond ships with Emacs Lisp libraries,
00:01:41.040 --> 00:01:43.119
including a major mode for editing
00:01:43.119 --> 00:01:47.360
Lilypond files.
00:01:47.360 --> 00:01:50.000
So the input files are similar to
00:01:50.000 --> 00:01:50.560
source files.
00:01:50.560 --> 00:01:52.560
They contain expressions formed with
00:01:52.560 --> 00:01:54.079
curly braces,
00:01:54.079 --> 00:01:55.840
comments that start with the percent
00:01:55.840 --> 00:02:00.240
sign, and the code is indented.
00:02:00.240 --> 00:02:02.159
Notes are entered using lowercase
00:02:02.159 --> 00:02:05.600
letters, 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:16.160
Durations are entered using numbers and
00:02:16.160 --> 00:02:18.480
dots after the note name.
00:02:18.480 --> 00:02:20.959
If you do not specify one, the previous
00:02:20.959 --> 00:02:22.640
duration is used.
00:02:22.640 --> 00:02:24.560
You can also tie notes together using
00:02:24.560 --> 00:02:27.360
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:33.920
I encourage you to read the manual for
00:02:33.920 --> 00:02:36.160
more information.
00:02:36.160 --> 00:02:39.680
Now let's switch to a terminal window.
00:02:39.680 --> 00:02:42.000
With Lilypond installed, let's create
00:02:42.000 --> 00:02:43.840
a test file with the extension
00:02:43.840 --> 00:02:50.560
.ly and open it in Emacs.
00:02:50.560 --> 00:02:52.400
At the top of the file is the version
00:02:52.400 --> 00:02:54.800
statement, which tells Lilypond which
00:02:54.800 --> 00:02:57.440
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.400
I'm going to close this now and
00:03:12.400 --> 00:03:14.560
compile the file by running
00:03:14.560 --> 00:03:19.760
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:34.080
The idea is to create new reading
00:03:34.080 --> 00:03:36.239
materials each time the code blocks are
00:03:36.239 --> 00:03:37.760
evaluated.
00:03:37.760 --> 00:03:40.640
As usual, we begin with a header.
00:03:40.640 --> 00:03:41.840
I've added the title
00:03:41.840 --> 00:03:45.200
and composer. Then we add the note
00:03:45.200 --> 00:03:47.920
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.799
So whatever the function returns is
00:04:10.799 --> 00:04:13.680
expanded inside the drums block.
00:04:13.680 --> 00:04:16.479
Now let's press C-c C-c to view
00:04:16.479 --> 00:04:20.079
the results.
00:04:20.079 --> 00:04:23.280
Okay. And if I run this again, it should
00:04:23.280 --> 00:04:26.840
create a new composition.
00:04:26.840 --> 00:04:29.680
Great. You can also audition a piece
00:04:29.680 --> 00:04:31.360
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:42.560
The one I'm using now is called
00:04:42.560 --> 00:04:43.440
arrange mode
00:04:43.440 --> 00:04:45.440
and is useful for assembling
00:04:45.440 --> 00:04:47.120
complete scores.
00:04:47.120 --> 00:04:49.360
The basic mode on the other hand allows
00:04:49.360 --> 00:04:51.199
you to mix text and music
00:04:51.199 --> 00:04:53.360
by embedding Lilypond snippets and
00:04:53.360 --> 00:04:55.440
export them using typical Org Mode
00:04:55.440 --> 00:05:00.240
commands.
00:05:00.240 --> 00:05:02.320
Now to demonstrate the basic mode in
00:05:02.320 --> 00:05:04.320
action. 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:08.240
In this case, the
00:05:08.240 --> 00:05:10.639
:file header argument is required, so you
00:05:10.639 --> 00:05:11.919
have to provide one
00:05:11.919 --> 00:05:15.600
and include the file name.
00:05:15.600 --> 00:05:17.919
Again, you can run the code and view
00:05:17.919 --> 00:05:22.160
the results.
00:05:22.160 --> 00:05:25.840
Here it is. So now let's
00:05:25.840 --> 00:05:33.680
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.440
Now I'm going to show you the workflow I
00:05:41.440 --> 00:05:44.000
used 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:50.160
I begin by sketching the first draft of the
00:05:50.160 --> 00:05:53.039
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:06:00.080
This is a typical source file. It begins
00:06:00.080 --> 00:06:01.360
with a stylesheet
00:06:01.360 --> 00:06:03.199
where I set variables and layout
00:06:03.199 --> 00:06:05.440
settings, although in general, there's no
00:06:05.440 --> 00:06:07.039
need for tweaking the layout
00:06:07.039 --> 00:06:09.280
unless you have specific requirements to
00:06:09.280 --> 00:06:11.199
do so.
00:06:11.199 --> 00:06:13.360
The easiest way to compile the file from
00:06:13.360 --> 00:06:15.520
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:26.000
Now to automate the process of compiling
00:06:26.000 --> 00:06:28.560
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:32.560
open the shell
00:06:32.560 --> 00:06:36.000
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.600
As I moved forward with the project, I
00:06:43.600 --> 00:06:46.000
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.960
so I built one for casual use and made
00:06:52.960 --> 00:06:55.919
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:03.199
between input and output files without
00:07:03.199 --> 00:07:04.479
getting lost.
00:07:04.479 --> 00:07:06.720
So I wrote a command for toggling bar
00:07:06.720 --> 00:07:10.000
numbers, 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:17.039
accents and tuplets, for example--so I use
00:07:17.039 --> 00:07:20.160
template expansion extensively for this purpose,
00:07:20.160 --> 00:07:23.440
mainly yasnippet.
00:07:23.440 --> 00:07:25.680
So what do I think? Well, I think
00:07:25.680 --> 00:07:28.080
Lilypond can be a sharp paradigm shift
00:07:28.080 --> 00:07:31.039
for people used to GUI alternatives, but
00:07:31.039 --> 00:07:32.720
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:38.880
Likewise, the ability to extend the
00:07:38.880 --> 00:07:40.720
software, I think, is especially appealing
00:07:40.720 --> 00:07:42.400
for music professionals,
00:07:42.400 --> 00:07:45.199
enthusiasts, composers, and the academic
00:07:45.199 --> 00:07:46.560
community:
00:07:46.560 --> 00:07:48.400
for example, allowing users to create
00:07:48.400 --> 00:07:50.800
alternative notation systems required in
00:07:50.800 --> 00:07:53.120
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:06.400
But if you're still not sure where to
00:08:06.400 --> 00:08:09.599
start and when to wedge your feet in the deep
00:08:09.599 --> 00:08:12.160
but warm pond of lilies, Lilypond, and
00:08:12.160 --> 00:08:13.680
Lilypond users,
00:08:13.680 --> 00:08:15.680
I invite you to contribute to my
00:08:15.680 --> 00:08:16.960
Lilypond projects,
00:08:16.960 --> 00:08:18.800
which you can do so from the links on
00:08:18.800 --> 00:08:20.720
the screen.
00:08:20.720 --> 00:08:22.800
So, thank you all. I look forward to your
00:08:22.800 --> 00:08:24.639
comments, and I hope you enjoy the rest
00:08:24.639 --> 00:08:27.840
of the conference.