summaryrefslogtreecommitdiffstats
path: root/2020
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2020/info/35.md234
-rw-r--r--2020/meetings.org74
-rw-r--r--2020/organizers-notebook.md12
-rw-r--r--2020/organizers-notebook.org8
-rw-r--r--2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt (renamed from 2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt)296
-rw-r--r--2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt (renamed from 2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt)454
6 files changed, 681 insertions, 397 deletions
diff --git a/2020/info/35.md b/2020/info/35.md
index 2901eee9..276d24aa 100644
--- a/2020/info/35.md
+++ b/2020/info/35.md
@@ -1,11 +1,13 @@
# WAVEing at Repetitive Repetitive Repetitive Music
Zachary Kanfer
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.webm"]]
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.webm" size="122M" subtitles="/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt" duration="9:44"]]
[Download compressed .webm video (12.7M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm" download="Download Q&A video"]]
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm" download="Download Q&A video" size="89M" subtitles="/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt" duration="6:18"]]
[Download compressed Q&A .webm video (6.9M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer--vp9-q56-video-original-audio.webm)
+[View transcript for Q&A](#transcript-questions)
During quarantine, I found myself spending time with an Android app.
One of the features this app has is composing music that loops
@@ -77,3 +79,231 @@ something worth looking into.
# Notes
Notes, references, and links at <https://zck.org/emacsconf2020>
+
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt -->
+
+<a name="transcript"></a>
+# Transcript
+
+(00:04) Hi. I'm Zachary Kanfer, and this is waving at repetitive
+repetitive repetitive music. Over quarantine, I've been bored, and I
+found this Android app that has a bunch of mini-games, one of which
+lets you compose music. And it works, but I want a little bit more
+functionality than it offers, it's not very flexible. So, I thought
+what if I made this, and what programs could I make this in that are
+really flexible, are really customizable. Emacs. So, I looked into
+it, and Emacs can play sounds, right? If you hit control g a couple of
+times, you'll hear like an error tone, and it turns out that, that is
+actually playing a WAVE file, but what's a WAVE file?
+
+(00:58) Well, it turns out that WAVE is a musical file format, or
+really an annoying file format. So, data in it can be an unsigned
+integer or a signed integer, it's not consistent, and it's
+little-endian by default which is not the way I like to think about
+it. Now, you can set a WAVE file to be big-endian, but if you do
+that, Emacs can't play it. So, little-endian it is. There's also
+duplicate data fields. Here are some fields that are fine, but then
+there's a fourth field that's calculated based on multiplying two of
+the other ones together, and then there's another data field that's…
+you multiply those three ones together. So, it's just repetitive and
+unnecessary, but you have to do it, or it's not a valid WAVE file.
+Also, the last part of the file is described as data or as one website
+I found said, the actual sound data.
+
+(02:04) Now, I don't know about you but when I see that, I think, what
+is data? It turns out that sound is just a wave, and the data is just
+a bunch of measurements of the height of that wave forming each
+sample. So, this wave starts at 8 goes 9, 11, 13, 14, 15, and then
+back down. If you just take those measurements, those numbers, put
+them in a file, that's all your data is.
+
+(02:35) All right. Let's go to a demo of my program. So, this is what
+zmusic looks like. The blue highlighted row is a single beat, there's
+16 of them in this zmusic file, and each dash in the row is a single
+note increasing…, starting really low all the way on the left and
+going up as we go to the right. So, if we started playing, we won't
+hear anything, but we'll see the highlighted beat is the currently
+playing one, and we see that it loops. So, we can stop it, and now we
+can click to add some notes. [Music] Even more than one note at the
+same time works. [Music] And we can even add notes while it's
+playing. [Music]
+
+(04:08) Okay, here are some other features that I didn't have time to
+demo. So, you can save the music to a file, and this is interesting
+because normally if there's no note in a beat, we just don't play that
+beat, but if you're writing to a file you have to put something in, so
+when it's playing it knows to not make a sound there. We can also use
+different scales. We're using the minor pentatonic in the demo, but
+you can use the major scale the minor scale or anything else. And
+there's also keyboard support, but it sounds really bad, and I'll
+explain why later.
+
+(04:48) Here are some things I learned while writing zmusic. Emacs
+has buttons which are great as long as you don't put two of them right
+next to each other. So, if you do that, mousing over one of them
+highlights both of them. Now, that's because a button is really just
+a series of characters with a text property to highlight them. So,
+the fix is, you put another character between the two buttons, then
+mousing over one of them only highlights the one you want, but even
+this doesn't work really great for zmusic, because zmusic has a lot of
+very small buttons in a row. So, it's really easy to accidentally put
+your cursor over the space and click on that instead of the button.
+So, I looked into unicode, and I found this character called a
+zero-width space. So, we should be able to put that between buttons
+and not be able to accidentally click on it. Unfortunately, a
+zero-width space isn't actually zero width. If we put a hundred of
+them between two other characters, you can see there's space there,
+and I think what's happening is, the space is zero width but then
+Emacs `put` uses one pixel between each pair of characters for the
+cursor, so it's almost zero width. Some ways to play sound that don't
+quite work! `play-sound` plays music, but it blocks, you can't do
+things like, set other notes or even pause the music. And if you
+throw it into async.el, it's silent, and I don't know why. So, the
+solution I went with is taking that WAVE file, ran into the file
+system, and then shelling out to a native executable to play the
+sound. And that works fine as long as you only do it once, because if
+you do it a couple of times at the same time like if you have a chord,
+and you want to play three notes simultaneously, you get this weird
+interference, and that's actually why the keyboard from before didn't
+work. Also, side effects have this unexpected impact, when you saw
+the demo it was running pretty smoothly, but if I just add one message
+statement every beat for debugging purposes, I was getting lag and
+jitter.
+
+(07:03) Here's the one thing I learned about music theory, music
+theory is not easy to program. I was looking around to see what
+concepts we can use to code the scales, to code the notes, the first
+thing that I saw is scale degrees, and this when I looked into it, you
+don't want to program in scale degrees. So, you see we have the
+first, second, third, fourth, fifth, sixth, seventh but then it wraps
+around. That octave up is also a first, and that's because both of
+those notes are C, so that didn't work, and also you couldn't really
+easily specify a flat or sharp. You could say a sharp third or you
+know, a flat seventh or whatever, but then you kind of have these two
+pieces of data that indicate the note, and I didn't love that.
+
+(07:55) So, I looked again, and I found intervals, and then I thought
+about it, and you don't really want to program in intervals either.
+It fixes some of the problems with scale degrees, you see, all the way
+on the right you have an octave, so you wrap to 8, and you go 9, 10
+and that works. But you solve the same problem, you see you have a
+major third but below we also have a minor third, so you saw that
+problem of having two pieces of information.
+
+(08:20) So, I thought about it. Music is really frequencies. Like an A
+is 440 hertz. So, at a low level that's what we're going to do, we're
+just going to use frequencies. And then at the one level above that,
+that's a little bit easier for humans to think about, we're going to
+use semitones up from the root, which is kind of like scale degrees,
+but instead of just counting each note as one more, we're going to say
+how many semitones up it is. So, if there's a sharp between two
+notes, that's going to be two steps up instead of just one. And then
+we translate those two frequencies, so your A is 440 hertz, another
+note might be 613.5, or whatever, and that's we use the low level to
+play.
+
+(09:02) Some future work I have, I want to add some drums. I want to
+make that keyboard actually work, and computers and synthesizers are
+the only place you hear a pure sine wave like the one we have here, so
+I want to add overtones or other octaves above it just to make it
+sound a little bit more realistic. I've put notes references and the
+source code up at <https://zck.org/emacsconf2020> [updated]. I'm one
+of the organizers of EmacsNYC check that out. And if you take a look
+or have any thoughts, I'd love to hear them, and thanks so much for
+coming to my talk.
+
+<!-- /transcript -->
+
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt -->
+
+<a name="transcript-questions"></a>
+# Transcript: Q&A
+
+(00:09) Okay, yeah, so I'm Zachary Kanfer, let's go to the
+questions. The first question, "Why do we go top to bottom for time
+progression, and left to right for low to high?" Interesting, I
+think…, so the initial thing I was copying, that initial app work this
+way, and yeah, I mean, certainly traditional music, you know, on a
+staff does go left to right like this. I mean, going top to bottom
+does make it easier to add more beats without having to wrap, but
+certainly that could be managed. Yeah, I had not really thought about
+it, but it is definitely something worth looking into.
+
+(01:21) Two, "Will you play us another song?" Not now, I can make some
+recordings of it, or certainly you can try it. I couldn't quite get
+the microphone and the webcam and everything to work with the sound
+playing now. So, I can record some. Also, I have put a link in the
+Etherpad, <https://zck.org/emacsconf2020> [updated], where you can go
+and get the source, and you can try it yourself. There's no
+dependencies needed, so it's just all in Emacs. So, please, you know,
+try it yourself.
+
+(01:57) "Any chance for an Emacs tracker or mod player?" I don't
+really know what a mod player or tracker are, but I mean, I'm sure
+that would be cool, maybe there's one on now, but I don't know.
+
+(02:11) My musical background. So, I've played various instruments
+since about the third grade. Started recorder, play cello, I play
+guitar now. But yeah, so just kind of random instruments, and I guess
+kind of some of those things influence how I think about music.
+
+(02:33) "Are there any open source musical management sample libraries
+that could be used?" Good question, I'm sure there are, I don't know
+any of that integrate really well with Emacs. One of the cool things
+that I liked about this is that there are no dependencies, you know,
+you don't need any external program to generate the music. I mean, it
+does shell out to to play, but that should be able to be done on any
+operating system, as always, you have something that can play WAVE
+files, but yeah, it is interesting to kind of try the different sounds
+and different tones that you could get with different instruments.
+
+(03:14) Have I written any actual songs? Nothing super well put
+together, I kind of just been playing around with this. It's kind of…
+making this was one of those things where once I made it, I was like,
+okay, now I can play with it, and I did a little bit, and was like, I
+don't know if I feel like it right now. You know, which I've found
+that to be the case with some things that I've implemented in Emacs
+where it's… I make it, and then it's the kind of some of the desire to
+use it all the time goes away, but I'm sure I'll circle back around at
+some point especially kind of maybe once I add in different tones or
+something.
+
+(03:54) I guess a similar question for pre-recorded sounds. Yeah, I
+mean, if it's… part of what I did, what I wrote was a WAVE generation
+library, so, if you kind of have the data, you could use those and
+chop them up and take certain lengths of them and make a WAVE file, so
+it's not plug and play right now, but you could certainly add those
+notes to do it.
+
+(04:19) "Any MIDI mapping possibilities?" I haven't looked into it,
+but I'm sure you definitely could output to MIDI which is another
+benefit of having that multiple layers with the top layer is just, you
+know, if the root note is this, we're just two semitones up or seven
+semitones up or whatever it is. It should be relatively simple to
+kind of switch out that layer underneath from WAVE to MIDI or other
+things.
+
+(04:44) "What were some of the challenges with writing a special mode
+for Emacs?" Interested in getting into this, not sure where to start.
+This isn't the first mode I've written, so that's right…, certainly
+that helps. I actually… I have a video that we recorded it as part of
+EmacsNYC on making a major mode. That's basically starts from
+nothing, and kind of builds up to an implementation of tic-tac-toe,
+but so it kind of goes into printing things out and buttons and making
+the mode. I mean, one of the best parts about Emacs is, because it's
+so configurable and so introspectible, you can start pretty simply,
+and just kind of ask Emacs about things, and then make one little
+change. It's really… it's not that bad, so, I'll try to throw a link
+up on that page I put up, or please email me for whoever asked this
+question to get a link to that video, or just look at the source code
+of this or any other major mode. Emacs makes it pretty easy to extend
+major modes.
+
+(05:54) And I think that's the last question in the Etherpad, so,
+thanks so much everybody for coming. (Amin: Thank you so much to
+Zachary for your awesome talk, and for doing live questions. Thank
+you.) Thank you. (Amin: Cheers.)
+
+<!-- /transcript -->
diff --git a/2020/meetings.org b/2020/meetings.org
index 2dbd8fd3..e1af50e9 100644
--- a/2020/meetings.org
+++ b/2020/meetings.org
@@ -25,10 +25,76 @@
* January 21, 2021 meeting
-- Updates
- - Sacha:
- - Added transcript for 08 and edited subtitles for 21; only 03-questions and the opening/closing remarks remaining for day 1
-
+- Updates:
+ - Sacha: one more talk left to transcribe for day 1, hooray!
+ Everything else has been edited. Next step for day 1 is to edit
+ the subtitles into transcripts and make them available. Also want
+ to check if ableplayer passes LibreJS, since that can give us
+ clickable transcripts; will include text transcript anyway for
+ non-JS.
+ - zaeph: Emacs Research Group wants to meet daily
+ - bandali: A little tired because of work; but good progress is
+ being made (yay!). Some progress done on the podcast.
+ - corwin: mental health improving; looking forward to getting back
+ to the swing of things :)
+- Next EmacsConf: Calendar?
+ - We could stick to the same period as 2020's edition (i.e.,
+ mid-November to mid-December)
+ - CFP?
+ - start earlier: accomidated anticipated higher
+ - First entire week of July might be a good time: it'd give us 4
+ months before the actual conference
+ - Office hours
+ - Could be used for the outreach part of the CFP
+ - Could also keep people excited about EmacsConf
+ - On the format
+ - A regular timeslot where people can join
+ - We ask them whether we could use a recording of the session to
+ build some hype for the EmacsConf
+ - We can also have a private moment with them to address some of
+ the possible problems with their talk/topic
+ - Short-ish and regular works best, probably
+ - Let's work on this during February, and let's aim for a first
+ session in March
+ - if there are not presentations we can record and share we
+ could use clips from recent orginizer meetings; we could close
+ meetings with statements intended for this use.
+- On having multiple tracks for the next EmacsConf, either
+ simultaneous or single-threaded
+ - Three tracks based on levels of mastery, e.g.:
+ - Beginners
+ - Pro-users
+ - Package developers
+ - Last year, we had de-facto tracks, or recurring topics like music,
+ academic research, SVG-graphics, games, typography/themes,
+ free-software philosophy, etc.
+ - We could use this info for the *outreach program*: 'We'd love to
+ have people come talk to us about music'
+- Overhauling the graphics for the conferenc
+ - Posters?
+ - Scenes in OBS
+ - Custom dashboard.el ?
+- Figuring out the roles for the next EmacsConf
+ - Fleshing out roles for everyone in advance (so that we're not
+ figuring it out one week prior) and along with this any private
+ comms to faciliate (e.g. iff voice-over and cuts are different
+ roles).
+- Diversity discussions
+ - Taking inspiration from the GNU Kind Communication Guidelines
+- On changing the time for the weekly meeting
+ - Corwin is happy to keep the same time because it'll motivate him
+ to wake up early on Saturdays
+ - We could have a monthly session which takes place on a weekday to
+ try to get more people on board (David O'Toole, David Bremner,
+ Karl Voit, etc.)
+
+- Ongoing projects for February:
+ - FSF Fiscal sponsorship (Leo)
+ - Office hours roadmap (Leo)
+
+
+
+
* January 14, 2021 meeting
- Updates:
diff --git a/2020/organizers-notebook.md b/2020/organizers-notebook.md
index b2edbf12..e2847847 100644
--- a/2020/organizers-notebook.md
+++ b/2020/organizers-notebook.md
@@ -46,8 +46,8 @@ I modified the `subed` package to work with VTT files. The modified version is a
- [X] sachac <./info/16.md> <./subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt>
- [X] sachac <./info/17.md> <./subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt>
- [X] sachac <./info/18.md> <./subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt>
-- [ ] sachac <./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt>
-- [ ] sachac <./subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt>
+- [X] sachac <./info/19.md> <./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt>
+- [X] sachac <./info/20.md> <./subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt>
- [ ] <./subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt>
- [ ] sachac <./subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy-autogen.vtt>
- [ ] <./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt>
@@ -61,11 +61,11 @@ I modified the `subed` package to work with VTT files. The modified version is a
- [ ] <./subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt>
- [ ] <./subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt>
- [ ] <./subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt>
-- [ ] <./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt>
-- [ ] <./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt>
+- [ ] bhavin192 <./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt>
+- [ ] bhavin192 <./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt>
- [ ] bhavin192 <./subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt>
-- [ ] bhavin192 <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt>
-- [ ] bhavin192 <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt>
+- [X] bhavin192 <./info/35.md> <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt>
+- [X] bhavin192 <./info/35.md> <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt>
- [X] bhavin192 <./info/38.md> <./subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt>
- [X] bhavin192 <./info/39.md> <./subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt>
- [X] bhavin192 <./info/39.md> <./subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt>
diff --git a/2020/organizers-notebook.org b/2020/organizers-notebook.org
index f3d68cdb..89792aab 100644
--- a/2020/organizers-notebook.org
+++ b/2020/organizers-notebook.org
@@ -61,11 +61,11 @@ I modified the =subed= package to work with VTT files. The modified version is a
- [ ] [[./subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt]]
- [ ] [[./subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt]]
- [ ] [[./subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt]]
+- [ ] bhavin192 [[./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt]]
+- [ ] bhavin192 [[./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt]]
- [ ] bhavin192 [[./subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt]]
-- [ ] bhavin192 [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt]]
-- [ ] bhavin192 [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt]]
+- [X] bhavin192 [[./info/35.md]] [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt]]
+- [X] bhavin192 [[./info/35.md]] [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt]]
- [X] bhavin192 [[./info/38.md]] [[./subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt]]
- [X] bhavin192 [[./info/39.md]] [[./subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt]]
- [X] bhavin192 [[./info/39.md]] [[./subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt]]
diff --git a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt
index 3c8dd20c..c60bd115 100644
--- a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt
+++ b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt
@@ -1,286 +1,274 @@
WEBVTT
00:00:02.800 --> 00:00:09.200
-I can yes
+I can, yes.
00:00:09.200 --> 00:00:13.120
-okay um yeah so I'm uh zachary canfer
+Okay, yeah, so I'm Zachary Kanfer,
00:00:13.120 --> 00:00:14.920
let's go to the
00:00:14.920 --> 00:00:17.520
-questions uh the first question uh why
+questions. The first question, "Why
00:00:17.520 --> 00:00:19.119
do we go top to bottom for time
00:00:19.119 --> 00:00:19.840
-progression
+progression,
00:00:19.840 --> 00:00:23.920
-uh and left to right uh for low to high
+and left to right for low to high?"
00:00:23.920 --> 00:00:27.279
-interesting I think uh so the initial
+Interesting, I think…, so the initial
00:00:27.279 --> 00:00:30.000
-uh thing I was copying that initial app
+thing I was copying, that initial app
-00:00:30.000 --> 00:00:31.599
-work this way
-
-00:00:31.599 --> 00:00:35.280
-um and
+00:00:30.000 --> 00:00:35.280
+work this way, and
00:00:35.280 --> 00:00:36.960
-yeah I mean certainly traditional music
+yeah, I mean, certainly traditional music,
00:00:36.960 --> 00:00:38.960
-you know on a staff uh
+you know, on a staff
00:00:38.960 --> 00:00:43.040
-does go left to right uh like this
+does go left to right like this.
00:00:43.040 --> 00:00:46.000
-um I mean going top to bottom does make
+I mean, going top to bottom does make
00:00:46.000 --> 00:00:47.440
it easier to add more beats without
00:00:47.440 --> 00:00:48.960
-having to wrap but certainly that could
+having to wrap, but certainly that could
00:00:48.960 --> 00:00:49.920
-be managed
+be managed.
00:00:49.920 --> 00:00:52.239
-um yeah I I had not really thought about
+Yeah, I had not really thought about
00:00:52.239 --> 00:00:53.760
-it but it is definitely something worth
+it, but it is definitely something worth
00:00:53.760 --> 00:00:55.199
-looking into
+looking into.
00:00:55.199 --> 00:01:02.480
-uh yeah you are now unmuted
+Yeah.
00:01:02.480 --> 00:01:05.680
-ah good point thank you let me go ahead
+Ah, good point, thank you. Let me go ahead
00:01:05.680 --> 00:01:06.960
-and do that
+and do that.
00:01:06.960 --> 00:01:14.240
-uh the entire screen
+The entire screen…
00:01:14.240 --> 00:01:16.880
-okay so the screen share should be
+Okay, so the screen share should be
00:01:16.880 --> 00:01:18.320
-starting
+starting,
00:01:18.320 --> 00:01:21.439
-there we go cool all right uh
+there we go. Cool, all right.
00:01:21.439 --> 00:01:24.880
-two will be placed on the song um not
+Two, "Will you play us another song?" Not
00:01:24.880 --> 00:01:26.640
-now I can I can make some recordings of
+now, I can make some recordings of
00:01:26.640 --> 00:01:28.080
-it or certainly you can try it
+it, or certainly you can try it.
00:01:28.080 --> 00:01:30.720
-um I couldn't quite get the the
+I couldn't quite get the
00:01:30.720 --> 00:01:33.119
microphone and the webcam and everything
00:01:33.119 --> 00:01:37.040
-to work with the sound playing now um so
+to work with the sound playing now. So,
00:01:37.040 --> 00:01:40.079
-uh I can record some also please uh
+I can record some. Also, please…
00:01:40.079 --> 00:01:43.520
-I put a link at the uh here in the uh
+I have put a link at the… here in the
00:01:43.520 --> 00:01:46.640
-etherpad https://zck.me/emacsconf2020
+Etherpad, zck.org/emacsconf2020 [updated],
00:01:46.640 --> 00:01:48.479
-where you can go and get the source
+where you can go and get the source,
00:01:48.479 --> 00:01:49.920
-and you can try it yourself uh there's
+and you can try it yourself. There's
00:01:49.920 --> 00:01:51.920
-no dependencies needed so it's just all
+no dependencies needed, so it's just all
00:01:51.920 --> 00:01:54.560
-in Emacs um so please you know try it
+in Emacs. So, please, you know, try it
00:01:54.560 --> 00:01:57.040
-yourself
+yourself.
00:01:57.040 --> 00:02:00.079
-any chance for an Emacs tracker or mod
+"Any chance for an Emacs tracker or mod
00:02:00.079 --> 00:02:01.040
-player
+player?"
00:02:01.040 --> 00:02:03.680
-um I don't really know what a mod player
+I don't really know what a mod player
00:02:03.680 --> 00:02:04.479
or tracker
00:02:04.479 --> 00:02:08.000
-are but I mean I'm sure
+are, but I mean, I'm sure
00:02:08.000 --> 00:02:09.679
-that would be cool uh maybe there's one
+that would be cool, maybe there's one
00:02:09.679 --> 00:02:11.599
-on now but I don't know uh
+on now, but I don't know.
00:02:11.599 --> 00:02:13.920
-my musical background so I've played
+My musical background. So, I've played
00:02:13.920 --> 00:02:15.200
various instruments since about the
00:02:15.200 --> 00:02:15.840
-third grade
+third grade.
00:02:15.840 --> 00:02:18.160
-uh started recorder uh play cello I play
+Started recorder, play cello, I play
00:02:18.160 --> 00:02:19.520
-guitar now
+guitar now.
00:02:19.520 --> 00:02:22.560
-um but yeah so just kind of random
+But yeah, so just kind of random
00:02:22.560 --> 00:02:23.680
-instruments and
+instruments, and
00:02:23.680 --> 00:02:26.959
-uh yeah I guess kind of some of those
+I guess kind of some of those
00:02:26.959 --> 00:02:27.280
things
00:02:27.280 --> 00:02:30.480
-influence how I think about music um
-
-00:02:30.480 --> 00:02:33.519
-uh yeah um
+influence how I think about music.
00:02:33.519 --> 00:02:35.360
-are there any open source musical
+"Are there any open source musical
00:02:35.360 --> 00:02:36.640
management sample libraries that could
00:02:36.640 --> 00:02:37.840
-be used
+be used?"
00:02:37.840 --> 00:02:41.200
-um good question I'm sure there are um I
+Good question, I'm sure there are, I
00:02:41.200 --> 00:02:42.400
-don't know any that integrate really
+don't know any of that integrate really
00:02:42.400 --> 00:02:43.360
-well with Emacs
+well with Emacs.
00:02:43.360 --> 00:02:44.560
-one of the cool things that I liked
+One of the cool things that I liked
00:02:44.560 --> 00:02:45.680
about this is that there are no
00:02:45.680 --> 00:02:47.440
-dependencies
+dependencies,
00:02:47.440 --> 00:02:49.360
-you know you don't need any external
+you know, you don't need any external
00:02:49.360 --> 00:02:50.800
program to
00:02:50.800 --> 00:02:53.040
-uh generate the music I mean it it does
+generate the music. I mean, it does
00:02:53.040 --> 00:02:54.160
shell out to
00:02:54.160 --> 00:02:57.280
-to play um but that
+to play, but that
00:02:57.280 --> 00:02:58.640
should be able to be done on any
00:02:58.640 --> 00:02:59.840
-operating system as always you have
+operating system, as always, you have
00:02:59.840 --> 00:03:03.519
-something that can play wav files
+something that can play WAVE files,
00:03:03.519 --> 00:03:05.599
-um but yeah it is interesting to kind of
-
-00:03:05.599 --> 00:03:06.879
-try the different
+but yeah, it is interesting to kind of
-00:03:06.879 --> 00:03:10.000
-uh different sounds and different
+00:03:05.599 --> 00:03:10.000
+try the different sounds and different
00:03:10.000 --> 00:03:12.239
-tones uh that you could get with
+tones that you could get with
00:03:12.239 --> 00:03:14.400
-different instruments
+different instruments.
00:03:14.400 --> 00:03:16.959
-have I written any actual songs um
+Have I written any actual songs?
-00:03:16.959 --> 00:03:17.599
-nothing
-
-00:03:17.599 --> 00:03:21.040
-super uh
+00:03:16.959 --> 00:03:21.040
+Nothing super
00:03:21.040 --> 00:03:23.680
-uh well put together just I kind of just
+well put together, I kind of just
00:03:23.680 --> 00:03:25.519
-been playing around with this
+been playing around with this.
00:03:25.519 --> 00:03:27.440
-it's kind of I making this was one of
+It's kind of… making this was one of
00:03:27.440 --> 00:03:29.040
-those things where like once I made it I
+those things where once I made it, I
00:03:29.040 --> 00:03:30.080
-was like okay
+was like, okay,
00:03:30.080 --> 00:03:31.280
-now I can play with it and I did a
+now I can play with it, and I did a
00:03:31.280 --> 00:03:32.720
-little bit and was like I don't know if
+little bit, and was like, I don't know if
00:03:32.720 --> 00:03:33.920
-I feel like it right now
+I feel like it right now.
00:03:33.920 --> 00:03:37.280
-you know which I've I've found that to
+You know, which I've found that to
00:03:37.280 --> 00:03:38.720
be the case with some things that I've
@@ -289,7 +277,7 @@ be the case with some things that I've
implemented
00:03:39.599 --> 00:03:41.360
-in Emacs where it's I make it and then
+in Emacs where it's… I make it, and then
00:03:41.360 --> 00:03:43.519
it's the kind of some of the desire to
@@ -298,7 +286,7 @@ it's the kind of some of the desire to
use it all the time
00:03:44.480 --> 00:03:46.879
-goes away but I'm sure I'll circle back
+goes away, but I'm sure I'll circle back
00:03:46.879 --> 00:03:47.760
around
@@ -310,121 +298,118 @@ at some point especially kind of maybe
once I add in different tones or
00:03:52.400 --> 00:03:54.640
-something
+something.
00:03:54.640 --> 00:03:56.400
I guess a similar question for
00:03:56.400 --> 00:03:57.840
-pre-recorded sounds yeah I mean
+pre-recorded sounds. Yeah, I mean,
00:03:57.840 --> 00:04:01.120
-if it's part of what I did what I wrote
+if it's… part of what I did, what I wrote
00:04:01.120 --> 00:04:02.080
was a
00:04:02.080 --> 00:04:04.720
-wave generation library so if you kind
+WAVE generation library, so, if you kind
00:04:04.720 --> 00:04:06.720
-of have the data
+of have the data,
00:04:06.720 --> 00:04:08.400
-you could use those and like chop them
+you could use those and chop them
00:04:08.400 --> 00:04:10.159
up and take certain lengths of them
00:04:10.159 --> 00:04:13.360
-and make a wav file so it's not plug and
+and make a WAVE file, so it's not plug and
00:04:13.360 --> 00:04:14.959
-play right now but you could certainly
+play right now, but you could certainly
00:04:14.959 --> 00:04:19.120
-add those notes uh to do it
-
-00:04:19.120 --> 00:04:21.040
-um any knitting midi mapping
+add those notes to do it.
-00:04:21.040 --> 00:04:22.720
-possibilities um
+00:04:19.120 --> 00:04:22.720
+"Any MIDI mapping possibilities?"
00:04:22.720 --> 00:04:24.560
-I haven't looked into it but I'm sure
+I haven't looked into it, but I'm sure
00:04:24.560 --> 00:04:26.160
-you definitely could output to midi
+you definitely could output to MIDI
00:04:26.160 --> 00:04:28.800
-um which is another benefit of having
+which is another benefit of having
00:04:28.800 --> 00:04:30.400
that multiple layers with the top layer
00:04:30.400 --> 00:04:31.520
-is just like
+is just,
00:04:31.520 --> 00:04:33.360
-um you know if the root note is this
+you know, if the root note is this,
00:04:33.360 --> 00:04:35.120
we're just two semitones up or seven
00:04:35.120 --> 00:04:36.560
-semitones up or whatever it is
+semitones up or whatever it is.
00:04:36.560 --> 00:04:38.160
-uh it should be relatively simple to
+It should be relatively simple to
00:04:38.160 --> 00:04:40.720
kind of switch out that layer underneath
00:04:40.720 --> 00:04:44.479
-uh from wave to midi or other things
+from WAVE to MIDI or other things.
00:04:44.479 --> 00:04:45.759
-what were some of the challenges with
+"What were some of the challenges with
00:04:45.759 --> 00:04:47.520
-writing a special mode for Emacs
+writing a special mode for Emacs?"
00:04:47.520 --> 00:04:49.759
-uh interested in getting into this not
+Interested in getting into this, not
00:04:49.759 --> 00:04:51.040
-sure where to start
+sure where to start.
00:04:51.040 --> 00:04:54.960
-um there uh yeah it so
+There… yeah, it so…
00:04:54.960 --> 00:04:57.120
-this isn't the first mode I've written
+this isn't the first mode I've written,
00:04:57.120 --> 00:04:58.320
-um so that's right
+so that's right…,
00:04:58.320 --> 00:05:01.759
-certainly that helps um I actually
+certainly that helps. I actually…
00:05:01.759 --> 00:05:05.600
-um I have a video that we recorded it
+I have a video that we recorded it
00:05:05.600 --> 00:05:08.240
-as part of Emacs nyc on making a major
+as part of EmacsNYC on making a major
00:05:08.240 --> 00:05:09.039
-mode
+mode.
00:05:09.039 --> 00:05:10.720
-that's basically like starts from
+That's basically starts from
00:05:10.720 --> 00:05:12.639
-nothing and kind of builds up to
+nothing, and kind of builds up to
00:05:12.639 --> 00:05:15.680
-an implementation of tic-tac-toe um
+an implementation of tic-tac-toe,
00:05:15.680 --> 00:05:17.039
but so it kind of goes into printing
@@ -433,76 +418,73 @@ but so it kind of goes into printing
things out and buttons and making the
00:05:19.600 --> 00:05:21.280
-mode
+mode.
00:05:21.280 --> 00:05:22.800
-I mean one of the best parts about Emacs
+I mean, one of the best parts about Emacs
00:05:22.800 --> 00:05:24.560
-is because it's so
+is, because it's so
00:05:24.560 --> 00:05:26.479
-uh configurable and so introspectible
+configurable and so introspectible,
00:05:26.479 --> 00:05:28.479
-you can start pretty simply
+you can start pretty simply,
00:05:28.479 --> 00:05:30.320
-and just kind of asking max about things
+and just kind of ask Emacs about things,
00:05:30.320 --> 00:05:32.320
and then make one little
00:05:32.320 --> 00:05:34.960
-change um it's really it's not that bad
-
-00:05:34.960 --> 00:05:36.479
-so uh
+change. It's really… it's not that bad,
-00:05:36.479 --> 00:05:39.039
-I'll try to throw a link up on that uh
+00:05:34.960 --> 00:05:39.039
+so, I'll try to throw a link up on that
00:05:39.039 --> 00:05:40.560
-on on that page I put up or
+page I put up, or
00:05:40.560 --> 00:05:42.000
please email me for whoever asked this
00:05:42.000 --> 00:05:44.479
-question uh to get a link to that video
+question to get a link to that video,
00:05:44.479 --> 00:05:46.240
-um or just look at look at the source
+or just look at the source
00:05:46.240 --> 00:05:47.919
-code of this or any other major mode
+code of this or any other major mode.
00:05:47.919 --> 00:05:50.479
-um it it's pretty ems breaks it makes it
+Emacs makes it
00:05:50.479 --> 00:05:52.880
-pretty easy to extend uh
+pretty easy to extend
00:05:52.880 --> 00:05:56.479
-major modes and I think that's that's
+major modes. And I think that's
00:05:56.479 --> 00:05:57.600
the last question
00:05:57.600 --> 00:06:00.240
-in the ether pad so uh thanks so much
+in the Etherpad, so, thanks so much
00:06:00.240 --> 00:06:02.479
-everybody for coming
+everybody for coming.
-00:06:02.479 --> 00:06:06.720
-you are now unmuted uh thank you so much
+00:06:04.033 --> 00:06:06.720
+(Amin: Thank you so much
00:06:06.720 --> 00:06:09.039
-to curry for your awesome talk
+to Zachary for your awesome talk,
00:06:09.039 --> 00:06:12.960
-and for doing live questions
+and for doing live questions.
00:06:12.960 --> 00:06:19.840
-thank you thank you cheers
+Thank you.) Thank you. (Amin: Cheers.)
diff --git a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt
index 8fce6e98..57837210 100644
--- a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt
+++ b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt
@@ -1,106 +1,109 @@
WEBVTT
00:00:04.080 --> 00:00:04.960
-hi
+Hi.
00:00:04.960 --> 00:00:08.559
-i'm zachary canfer and this is waving
+I'm Zachary Kanfer, and this is waving
00:00:08.559 --> 00:00:11.679
-and repetitive repetitive repetitive
+at repetitive repetitive repetitive
00:00:11.679 --> 00:00:15.759
-music over quarantine i've been bored
+music. Over quarantine, I've been bored,
00:00:15.759 --> 00:00:18.400
-and i found this android app that has a
+and I found this Android app that has a
00:00:18.400 --> 00:00:19.680
-bunch of mini games
+bunch of mini-games,
00:00:19.680 --> 00:00:23.519
-one of which lets you compose music
+one of which lets you compose music.
00:00:23.519 --> 00:00:26.640
-and it works but i
+And it works, but I
00:00:26.640 --> 00:00:28.160
want a little bit more functionality
00:00:28.160 --> 00:00:30.720
-than it offers it's not very flexible
+than it offers, it's not very flexible.
00:00:30.720 --> 00:00:33.760
-so i thought what if i made this
+So, I thought what if I made this,
00:00:33.760 --> 00:00:35.360
-what and what programs could i make this
+and what programs could I make this
00:00:35.360 --> 00:00:37.760
-in that are really flexible are really
+in that are really flexible, are really
00:00:37.760 --> 00:00:40.320
-customizable
+customizable.
00:00:40.320 --> 00:00:44.239
-emacs so i looked into it and
+Emacs. So, I looked into it, and
00:00:44.239 --> 00:00:46.320
-emacs can play sounds right if you hit
+Emacs can play sounds, right? If you hit
00:00:46.320 --> 00:00:47.840
-control g a couple times you'll hear
+control g a couple of times, you'll hear
00:00:47.840 --> 00:00:49.760
-like an error tone
+like an error tone,
00:00:49.760 --> 00:00:51.360
-and it turns out that that is actually
+and it turns out that, that is actually
00:00:51.360 --> 00:00:54.559
-playing a wave file
+playing a WAVE file,
00:00:54.559 --> 00:00:58.960
-but what's a wave file
+but what's a WAVE file?
00:00:58.960 --> 00:01:01.920
-well it turns out that wave is a musical
+Well, it turns out that WAVE is a musical
00:01:01.920 --> 00:01:03.440
-file format
+file format,
00:01:03.440 --> 00:01:07.840
-or really an annoying file format
+or really an annoying file format.
00:01:07.840 --> 00:01:12.080
-so data in it can be an unsigned integer
+So, data in it can be an unsigned integer
00:01:12.080 --> 00:01:15.360
-or a science integer it's not consistent
+or a signed integer, it's not consistent,
00:01:15.360 --> 00:01:17.920
-and it's little ending by default which
+and it's little-endian by default which
00:01:17.920 --> 00:01:20.320
-is not the way i like to think about it
+is not the way I like to think about it.
-00:01:20.320 --> 00:01:23.200
-now you can set a wav file to be big
+00:01:20.320 --> 00:01:21.600
+Now, you can
-00:01:23.200 --> 00:01:25.200
-endian but if you do that
+00:01:21.600 --> 00:01:23.733
+set a WAVE file to be big-endian,
-00:01:25.200 --> 00:01:28.640
-emacs can't play it so little ending it
+00:01:23.733 --> 00:01:25.200
+but if you do that,
-00:01:28.640 --> 00:01:30.479
-is
+00:01:25.200 --> 00:01:26.600
+Emacs can't play it.
+
+00:01:26.600 --> 00:01:30.479
+So, little-endian it is.
00:01:30.479 --> 00:01:33.520
-there's also duplicate data fields
+There's also duplicate data fields.
00:01:33.520 --> 00:01:35.360
-here are some fields that are fine but
+Here are some fields that are fine, but
00:01:35.360 --> 00:01:36.960
then there's a fourth field that's
@@ -109,46 +112,46 @@ then there's a fourth field that's
calculated based on multiplying two of
00:01:38.960 --> 00:01:40.799
-the other ones together
+the other ones together,
00:01:40.799 --> 00:01:42.399
and then there's another data field
00:01:42.399 --> 00:01:44.880
-that's you multiply those three ones
+that's… you multiply those three ones
00:01:44.880 --> 00:01:48.479
-together so it's just repetitive and
+together. So, it's just repetitive and
00:01:48.479 --> 00:01:50.479
-unnecessary but you have to do it or
+unnecessary, but you have to do it, or
00:01:50.479 --> 00:01:54.159
-it's not a valid wave file
+it's not a valid WAVE file.
00:01:54.159 --> 00:01:56.479
-also the last part of the file is
+Also, the last part of the file is
00:01:56.479 --> 00:01:58.159
described as data
00:01:58.159 --> 00:02:01.759
-or as one website i found said
+or as one website I found said,
00:02:01.759 --> 00:02:05.200
-the actual sound data now
+the actual sound data. Now,
00:02:05.200 --> 00:02:06.960
-i don't know about you but when i see
+I don't know about you but when I see
00:02:06.960 --> 00:02:09.039
-that i think
+that, I think,
00:02:09.039 --> 00:02:12.080
-what is a data it turns out
+what is data? It turns out
00:02:12.080 --> 00:02:15.120
-that sound is just a wave and
+that sound is just a wave, and
00:02:15.120 --> 00:02:17.760
the data is just a bunch of measurements
@@ -157,43 +160,43 @@ the data is just a bunch of measurements
of the height of that wave forming each
00:02:19.120 --> 00:02:20.400
-sample
+sample.
00:02:20.400 --> 00:02:24.480
-so this wave starts at 8 goes 9 11 13
+So, this wave starts at 8 goes 9, 11, 13,
00:02:24.480 --> 00:02:27.840
-14 15 and then back down and if you just
+14, 15, and then back down. If you just
00:02:27.840 --> 00:02:29.520
-take those measurements those numbers
+take those measurements, those numbers,
-00:02:29.520 --> 00:02:32.080
-put them in a file that's all your data
+00:02:29.520 --> 00:02:30.700
+put them in a file,
-00:02:32.080 --> 00:02:35.200
-is
+00:02:30.700 --> 00:02:35.200
+that's all your data is.
00:02:35.200 --> 00:02:36.560
-all right let's go to a demo of my
+All right. Let's go to a demo of my
00:02:36.560 --> 00:02:38.959
-program
+program.
00:02:38.959 --> 00:02:41.920
-so this is what z music looks like the
+So, this is what zmusic looks like. The
00:02:41.920 --> 00:02:44.080
-blue highlighted row is a single beat
+blue highlighted row is a single beat,
00:02:44.080 --> 00:02:48.319
-there's 16 of them in this z music file
+there's 16 of them in this zmusic file,
00:02:48.319 --> 00:02:52.000
and each dash in the row
00:02:52.000 --> 00:02:55.040
-is a single note increasing starting
+is a single note increasing…, starting
00:02:55.040 --> 00:02:57.920
really low all the way on the left and
@@ -202,109 +205,112 @@ really low all the way on the left and
going up
00:02:58.959 --> 00:03:01.680
-as we go to the right so if we started
+as we go to the right. So, if we started
00:03:01.680 --> 00:03:02.400
-playing
+playing,
00:03:02.400 --> 00:03:05.040
-we won't hear anything but we'll see the
+we won't hear anything, but we'll see the
00:03:05.040 --> 00:03:06.400
highlighted beat is the currently
00:03:06.400 --> 00:03:07.680
-playing one
+playing one,
+
+00:03:07.680 --> 00:03:09.833
+and we see that it loops.
-00:03:07.680 --> 00:03:11.120
-and we see that it loops so we can stop
+00:03:09.833 --> 00:03:12.720
+So, we can stop it,
-00:03:11.120 --> 00:03:12.720
-it
+00:03:12.720 --> 00:03:20.633
+and now we can click to add some notes.
-00:03:12.720 --> 00:03:30.879
-and now we can click to add some notes
+00:03:20.633 --> 00:03:30.879
+[Music]
00:03:30.879 --> 00:03:33.120
-even more than one note at the same time
+Even more than one note at the same time
-00:03:33.120 --> 00:03:43.920
-works
+00:03:33.120 --> 00:03:37.333
+works.
-00:03:43.920 --> 00:03:56.160
-and we can even add notes while it's
+00:03:37.333 --> 00:03:43.920
+[Music]
-00:03:56.160 --> 00:03:58.840
-[Applause]
+00:03:43.920 --> 00:03:45.567
+And we can even add notes
-00:03:58.840 --> 00:04:00.150
-playing
+00:03:45.567 --> 00:03:56.160
+while it's playing.
-00:04:00.150 --> 00:04:08.239
-[Applause]
+00:03:56.160 --> 00:04:08.239
+[Music]
00:04:08.239 --> 00:04:10.480
-okay here are some other features that i
+Okay, here are some other features that I
00:04:10.480 --> 00:04:12.959
-didn't have time to demo
+didn't have time to demo.
00:04:12.959 --> 00:04:16.000
-so you can save the music to a file and
+So, you can save the music to a file, and
00:04:16.000 --> 00:04:18.239
this is interesting because normally
00:04:18.239 --> 00:04:20.880
-if there's no note in a beat we just
+if there's no note in a beat, we just
00:04:20.880 --> 00:04:22.800
-don't play that beat
+don't play that beat,
00:04:22.800 --> 00:04:24.639
but if you're writing to a file you have
00:04:24.639 --> 00:04:25.919
-to put something in
+to put something in,
00:04:25.919 --> 00:04:27.840
so when it's playing it knows to not
00:04:27.840 --> 00:04:31.360
-make a sound there
+make a sound there.
-00:04:31.360 --> 00:04:34.479
-we can also use different scales we're
+00:04:31.360 --> 00:04:33.800
+We can also use different scales.
-00:04:34.479 --> 00:04:36.240
-using the minor pentatonic
+00:04:33.800 --> 00:04:36.240
+We're using the minor pentatonic
00:04:36.240 --> 00:04:38.080
-in the demo but you can use the major
+in the demo, but you can use the major
00:04:38.080 --> 00:04:39.680
scale the minor scale
-00:04:39.680 --> 00:04:42.400
-or anything else and there's also
+00:04:39.680 --> 00:04:40.967
+or anything else.
-00:04:42.400 --> 00:04:44.400
-keyboard support but it sounds really
+00:04:40.967 --> 00:04:43.367
+And there's also keyboard support,
-00:04:44.400 --> 00:04:45.199
-bad
+00:04:43.367 --> 00:04:45.199
+but it sounds really bad,
00:04:45.199 --> 00:04:48.240
-and i'll explain why later
+and I'll explain why later.
00:04:48.240 --> 00:04:50.800
-here are some things i learned while
+Here are some things I learned while
00:04:50.800 --> 00:04:53.520
-writing z music
+writing zmusic.
00:04:53.520 --> 00:04:56.479
-emacs has buttons which are great as
+Emacs has buttons which are great as
00:04:56.479 --> 00:04:58.240
long
@@ -313,412 +319,412 @@ long
as you don't put two of them right next
00:04:59.919 --> 00:05:02.160
-to each other so if you do that
+to each other. So, if you do that,
00:05:02.160 --> 00:05:04.400
mousing over one of them highlights both
00:05:04.400 --> 00:05:06.160
-of them
+of them.
00:05:06.160 --> 00:05:07.919
-now that's because a button is really
+Now, that's because a button is really
00:05:07.919 --> 00:05:10.080
just a series of characters with a text
00:05:10.080 --> 00:05:11.680
-property to highlight them
+property to highlight them.
00:05:11.680 --> 00:05:15.120
-so the fix is you put another character
+So, the fix is, you put another character
00:05:15.120 --> 00:05:16.479
-between the two buttons
+between the two buttons,
00:05:16.479 --> 00:05:18.080
then mousing over one of them only
00:05:18.080 --> 00:05:19.759
-highlights the one you want
+highlights the one you want,
00:05:19.759 --> 00:05:21.600
but even this doesn't work really great
00:05:21.600 --> 00:05:22.800
-for z music
+for zmusic,
00:05:22.800 --> 00:05:25.440
-because the music has a lot of very
+because zmusic has a lot of very
00:05:25.440 --> 00:05:27.120
-small buttons in a row
+small buttons in a row.
00:05:27.120 --> 00:05:29.840
-so it's really easy to accidentally put
+So, it's really easy to accidentally put
00:05:29.840 --> 00:05:31.600
your cursor over the space
00:05:31.600 --> 00:05:34.639
-and click on that instead of the button
+and click on that instead of the button.
00:05:34.639 --> 00:05:37.120
-so i looked into unicode and i found
+So, I looked into unicode, and I found
00:05:37.120 --> 00:05:38.160
this character called
00:05:38.160 --> 00:05:40.800
-a zero width space so we should be able
+a zero-width space. So, we should be able
00:05:40.800 --> 00:05:42.560
to put that between buttons and not be
00:05:42.560 --> 00:05:45.120
-able to accidentally click on it
+able to accidentally click on it.
00:05:45.120 --> 00:05:46.960
-unfortunately a zeroth space isn't
+Unfortunately, a zero-width space isn't
00:05:46.960 --> 00:05:50.080
-actually zero width
+actually zero width.
00:05:50.080 --> 00:05:51.680
-if we put a hundred of them between two
+If we put a hundred of them between two
00:05:51.680 --> 00:05:53.759
-other characters you can see there's
+other characters, you can see there's
00:05:53.759 --> 00:05:54.880
-space there
+space there,
00:05:54.880 --> 00:05:56.240
-and i think what's happening is the
+and I think what's happening is, the
00:05:56.240 --> 00:05:58.160
space is zero width
00:05:58.160 --> 00:06:01.360
-but then emax put uses one pixel between
+but then Emacs `put` uses one pixel between
00:06:01.360 --> 00:06:02.800
each pair of characters
00:06:02.800 --> 00:06:08.080
-for the cursor so it's almost zero width
+for the cursor, so it's almost zero width.
00:06:08.080 --> 00:06:09.919
-some ways to play sound that don't quite
+Some ways to play sound that don't quite
00:06:09.919 --> 00:06:12.960
-work play sound plays music
+work! `play-sound` plays music,
00:06:12.960 --> 00:06:14.800
-but it blocks you can't do things like
+but it blocks, you can't do things like,
00:06:14.800 --> 00:06:17.280
-set other notes or even pause the music
+set other notes or even pause the music.
00:06:17.280 --> 00:06:19.600
-and if you throw it into async.el it's
+And if you throw it into async.el, it's
00:06:19.600 --> 00:06:21.600
-silent and i don't know why
+silent, and I don't know why.
00:06:21.600 --> 00:06:24.479
-so the solution i went with is taking
+So, the solution I went with is taking
00:06:24.479 --> 00:06:25.440
-that wav file
+that WAVE file,
00:06:25.440 --> 00:06:27.039
-ran into the file system and then
+ran into the file system, and then
00:06:27.039 --> 00:06:29.199
shelling out to a native executable to
00:06:29.199 --> 00:06:30.639
-play the sound
+play the sound.
00:06:30.639 --> 00:06:32.880
-and that works fine as long as you only
+And that works fine as long as you only
00:06:32.880 --> 00:06:34.240
-do it once
+do it once,
00:06:34.240 --> 00:06:36.080
-because if you do it a couple times at
+because if you do it a couple of times at
00:06:36.080 --> 00:06:37.600
-the same time like if you have a chord
+the same time like if you have a chord,
00:06:37.600 --> 00:06:38.639
and you want to play three notes
00:06:38.639 --> 00:06:40.000
-simultaneously
+simultaneously,
00:06:40.000 --> 00:06:42.319
-you get this weird interference and
+you get this weird interference, and
00:06:42.319 --> 00:06:43.680
that's actually why the keyboard from
00:06:43.680 --> 00:06:46.319
-before didn't work
+before didn't work.
00:06:46.319 --> 00:06:49.199
-also side effects have this unexpected
+Also, side effects have this unexpected
00:06:49.199 --> 00:06:50.240
-impact
+impact,
00:06:50.240 --> 00:06:53.039
-uh when you saw the demo it was running
+when you saw the demo it was running
00:06:53.039 --> 00:06:55.120
-pretty smoothly
+pretty smoothly,
00:06:55.120 --> 00:06:57.680
-but if i just add one message statement
+but if I just add one message statement
00:06:57.680 --> 00:06:58.479
every beat for
00:06:58.479 --> 00:07:00.960
-debugging purposes i was getting lag and
+debugging purposes, I was getting lag and
00:07:00.960 --> 00:07:03.759
-jitter
+jitter.
00:07:03.759 --> 00:07:05.440
-here's the one thing i learned about
+Here's the one thing I learned about
00:07:05.440 --> 00:07:08.319
-music theory music theory
+music theory, music theory
00:07:08.319 --> 00:07:11.599
-is not easy to program
+is not easy to program.
00:07:11.599 --> 00:07:12.880
-i was looking around to see what
+I was looking around to see what
00:07:12.880 --> 00:07:15.440
-concepts we can use to code the scales
+concepts we can use to code the scales,
-00:07:15.440 --> 00:07:16.080
-to code the
+00:07:15.440 --> 00:07:16.933
+to code the notes,
-00:07:16.080 --> 00:07:18.160
-notes the first thing that i saw is
+00:07:16.933 --> 00:07:18.160
+the first thing that I saw is
00:07:18.160 --> 00:07:20.240
-scale degrees
+scale degrees,
00:07:20.240 --> 00:07:23.360
-and this when i looked into it you don't
+and this when I looked into it, you don't
00:07:23.360 --> 00:07:26.319
-want to program in scale degrees
+want to program in scale degrees.
00:07:26.319 --> 00:07:28.240
-so you see we have the first second
+So, you see we have the first, second,
00:07:28.240 --> 00:07:29.759
-third fourth fifth sixth seventh but
+third, fourth, fifth, sixth, seventh but
00:07:29.759 --> 00:07:32.080
-then it wraps around that octave up
+then it wraps around. That octave up
00:07:32.080 --> 00:07:33.919
-is also a first and that's because both
+is also a first, and that's because both
00:07:33.919 --> 00:07:36.000
-of those notes are c
+of those notes are C,
00:07:36.000 --> 00:07:38.479
-uh so that didn't work and also you
+so that didn't work, and also you
00:07:38.479 --> 00:07:39.759
couldn't really easily
00:07:39.759 --> 00:07:43.599
-specify a flat or sharp you could say
+specify a flat or sharp. You could say
00:07:43.599 --> 00:07:47.680
-a sharp third uh or
+a sharp third or
00:07:47.680 --> 00:07:50.879
-you know a flat seventh or whatever but
+you know, a flat seventh or whatever, but
00:07:50.879 --> 00:07:52.319
then you kind of have these two pieces
00:07:52.319 --> 00:07:53.759
-of data that indicate the note and i
+of data that indicate the note, and I
00:07:53.759 --> 00:07:55.840
-didn't i didn't love that
+didn't love that.
00:07:55.840 --> 00:07:57.440
-so i looked a little looked again and i
+So, I looked again, and I
00:07:57.440 --> 00:07:59.280
-found intervals
+found intervals,
00:07:59.280 --> 00:08:01.120
-and then i thought about it and you
+and then I thought about it, and you
00:08:01.120 --> 00:08:02.080
don't really want to program in
00:08:02.080 --> 00:08:03.440
-intervals either
+intervals either.
00:08:03.440 --> 00:08:05.520
-it fixes some of the problems with scale
+It fixes some of the problems with scale
00:08:05.520 --> 00:08:07.039
-degrees you see
+degrees, you see,
00:08:07.039 --> 00:08:08.319
all the way on the right you have an
00:08:08.319 --> 00:08:10.319
-octave so you wrap to 8 and you
+octave, so you wrap to 8, and you
00:08:10.319 --> 00:08:13.039
-go 9 10 and that works but you solve the
+go 9, 10 and that works. But you solve the
00:08:13.039 --> 00:08:14.319
-same problem you see you have a major
+same problem, you see you have a major
00:08:14.319 --> 00:08:16.400
third but below we also have a minor
00:08:16.400 --> 00:08:18.080
-third so you saw that problem of having
+third, so you saw that problem of having
00:08:18.080 --> 00:08:20.160
-two pieces of information
+two pieces of information.
00:08:20.160 --> 00:08:23.360
-uh so i thought about it music's really
+So, I thought about it. Music is really
00:08:23.360 --> 00:08:27.120
-frequencies like an a is 440 hertz
+frequencies. Like an A is 440 hertz.
00:08:27.120 --> 00:08:28.400
-so at a low level that's what we're
+So, at a low level that's what we're
00:08:28.400 --> 00:08:29.360
-going to do we're just going to use
+going to do, we're just going to use
00:08:29.360 --> 00:08:30.560
-frequencies
+frequencies.
00:08:30.560 --> 00:08:32.800
-and then at the one level above that uh
+And then at the one level above that,
00:08:32.800 --> 00:08:34.159
that's a little bit easier for humans to
00:08:34.159 --> 00:08:35.360
-think about
+think about,
00:08:35.360 --> 00:08:37.039
we're going to use semitones up from the
00:08:37.039 --> 00:08:39.519
-root which is kind of like scale degrees
+root, which is kind of like scale degrees,
00:08:39.519 --> 00:08:40.959
but instead of just counting each note
00:08:40.959 --> 00:08:42.880
-as one more we're going to say how many
+as one more, we're going to say how many
00:08:42.880 --> 00:08:44.560
-semitones up it is
+semitones up it is.
00:08:44.560 --> 00:08:47.200
-so if there's a sharp between two notes
+So, if there's a sharp between two notes,
00:08:47.200 --> 00:08:48.480
that's going to be two steps up instead
00:08:48.480 --> 00:08:50.000
-of just one
+of just one.
00:08:50.000 --> 00:08:51.279
-and then we translate those two
+And then we translate those two
00:08:51.279 --> 00:08:54.160
-frequencies so your a is 440 hertz
+frequencies, so your A is 440 hertz,
00:08:54.160 --> 00:08:56.920
another note might be
00:08:56.920 --> 00:08:58.480
-613.5
+613.5,
00:08:58.480 --> 00:09:00.720
-or whatever and we that's we use the low
+or whatever, and that's we use the low
00:09:00.720 --> 00:09:02.959
-level to play
+level to play.
00:09:02.959 --> 00:09:05.200
-some future work i have i want to add
+Some future work I have, I want to add
00:09:05.200 --> 00:09:06.480
-some drums
+some drums.
00:09:06.480 --> 00:09:08.240
-i want to make that keyboard actually
+I want to make that keyboard actually
00:09:08.240 --> 00:09:09.680
-work uh
+work,
00:09:09.680 --> 00:09:12.399
-and uh computers and synthesizers are
+and computers and synthesizers are
00:09:12.399 --> 00:09:14.320
the only place you hear a pure sine wave
00:09:14.320 --> 00:09:16.000
-like the one we have here
+like the one we have here,
00:09:16.000 --> 00:09:17.680
-so i want to add overtones or other
+so I want to add overtones or other
00:09:17.680 --> 00:09:19.440
-octaves above it uh just to make it
+octaves above it just to make it
00:09:19.440 --> 00:09:23.120
-sound a little bit more realistic
+sound a little bit more realistic.
00:09:23.120 --> 00:09:25.360
-i've put notes references in the source
+I've put notes references and the source
-00:09:25.360 --> 00:09:28.480
-code up at zck dot me slash emacs conf
+00:09:25.360 --> 00:09:26.000
+code up
-00:09:28.480 --> 00:09:31.839
-2020 i'm one of the organizers of emacs
+00:09:26.000 --> 00:09:30.067
+at zck.org/emacsconf2020 [updated].
-00:09:31.839 --> 00:09:33.040
-nyc
+00:09:30.067 --> 00:09:33.040
+I'm one of the organizers of EmacsNYC
00:09:33.040 --> 00:09:36.080
-check that out and if you take a look
+check that out. And if you take a look
00:09:36.080 --> 00:09:38.240
-or have any thoughts i'd love to hear
+or have any thoughts, I'd love to hear
00:09:38.240 --> 00:09:39.839
-them and
+them, and
00:09:39.839 --> 00:09:46.160
-thanks so much for coming to my talk
+thanks so much for coming to my talk.