summaryrefslogblamecommitdiffstats
path: root/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt
blob: 773ff31b015e6604bae3cdf5d12191c4a8a67a12 (plain) (tree)
1
2
3
4
5
6
7





                                              
                                      













































































































                                         
                                   













                                         
                                  




                             
                                 
































































                                       
                                     































































































































                                             
                            








































                                         
                                    














































































































































                                                
                 



































































                                             
                                

















                                         
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.