diff options
Diffstat (limited to '')
-rw-r--r-- | 2020/info/05.md | 371 |
1 files changed, 371 insertions, 0 deletions
diff --git a/2020/info/05.md b/2020/info/05.md index 103c1ece..8a462efd 100644 --- a/2020/info/05.md +++ b/2020/info/05.md @@ -3,9 +3,11 @@ Grant Shangreaux [[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.webm" subtitles="/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt"]] [Download compressed .webm video (20.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux--vp9-q56-video-original-audio.webm) +[View transcript](#transcript) [[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.webm" download="Download Q&A video, 720p" subtitles="/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt"]] [Download compressed Q&A .webm video (15.7M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux--vp9-q56-video-original-audio.webm) +[View transcript for Q&A](#transcript-questions) I hoped to become a successful musician someday, and while that has yet to happen, I've recorded a fair share of unreleased music over the @@ -103,3 +105,372 @@ screenshots from within Emacs as SVG (if compiled `--with-cairo`). it's worth trying out. The other disadvantage of the approach is that there's few vector animation formats (Flash, HTML5), so saving it losslessly to disk will be tricky. + + +<!-- transcript: 2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt --> + +<a name="transcript"></a> +# Transcript + +Hello, my name is Grant Shangreaux. This is my talk titled Bard +Bivou(m)acs: Publishing Music with Emacs. I'm a software developer +with Unabridged Software in Lincoln, Nebraska. Long time Emacs user, +relatively new Emacs hacker. Hopefully, I'll be able to show you my +workflow, with how I publish music with Emacs. All right. + +(00:30) So as a musician, I would like to publish my music online. I could +publish with popular online music services, but I'm more of a +DIY-type, so I chose to go ahead and publish with Emacs. What's the +motivation behind this? A lot of it comes down to some fundamental +freedoms that Emacs and GNU software represent to me, as well as my +ideas on culture and my background. I don't believe that music is a +consumer good. It's a form of knowledge, like an algorithm. And it's +just such a part of culture, like in tribal cultures, music was seen +as a gift from the cosmos or the gods. It was a gift maybe through an +individual vessel, but was shared with the people and shared with +everyone, kept alive by the culture itself. So to me, music is +something that should be shared and should be freely enjoyed by +everyone. Of course, artists should be compensated as well, but that's +a whole different topic. + +(01:39) So when I want to share my music, I want to do it without +impacting anyone's freedom. Using GNU software like Emacs is a good +way that I can ensure that I won't be requiring people to sign away +their freedoms for anything. There's a lot more I could say about this +but I don't have time. Feel free to reach out to me by email or IRC. +Part of the motivation for me, personally, is that Emacs is super +magical. It's an all-in-one solution. Like I said, the GNU software +aligns with Creative Commons' ideas. I can do file management. I can +author HTML, all the web stuff I need even, literate-style. I can +handle media and metadata. I've got version control, remote server +access... All the tools I need are right under my fingertips with this +tool that I use every day for a long time. I don't need to look +elsewhere. + +(02:31) It was a challenge. I wanted to see if I could do this all +within Emacs itself. So, how do you use Emacs to publish music? Well, +for me, I needed a couple of things. I needed to be able to audition +and label unlabeled audio tracks. I have a lot of files that I don't +know where they came from. I don't know what they are. I need to be +able to listen to them, and I need to be able to add metadata to +whatever audio format it is and rename the files based on that +metadata, potentially. And in the end, I wanted to take those files +and programmatically produce a web page for people to consume. + +(03:08) I found out that Emacs scores a hundred percent on all of +these requirements that I had for this, and a lot of that came from +EMMS, the Emacs multimedia system. EMMS is great. If you haven't +checked it out, please do. It's a little bit unintuitive, but once you +get into it, you know it works. Basically, what EMMS gave me was the +ability to listen to the tracks, organize playlists. On top of that, +it gave me super-powered metadata authoring. + +(03:42) I'm going to demonstrate that to you. So in order to do this, +you have to require markable playlists, so (require 'emms-mark). I'm +going to go through, and I'm going to open the red... I've got this. +These files here. So you can see these files are mp3s. They're +recorded on a digital recorder. If I had the choice, I would have a +recorder that used a different format, but so be it. I can mark all +these files and I can do EMMS add to .., and now they've been loaded +into a playlist. So you can see the playlist here. There's some +leftover files. + +(04:30) So I've got these three files in my playlist, and as +you can see, it's just the file name, the path. I don't have any +metadata associated with them. In this playlist, I can hit E, and +it'll bring up a buffer showing the tag information that I have. I +could edit these here. I could edit them one at a time, but that's not +really great. I want superpower metadata authoring. So, by marking +them, I can then hit E, and I have all three of the tracks loaded up +in this tags buffer. On top of that, I can do EMMS tag editor, set +all, C-c C-r, and I want to set the artist. so these are some +recordings of my family. So, Shangreaux, set all three of them. I want +to set the album: Spring Walk with Lap Harp. I want to set the year. +And then I'm going to go ahead and put these in manually, but with the +power of Emacs keyboard macros and registers and so on. I could do +this programmatically as well, which would make it a lot easier if I +had much more than three files to do this with. Submit the changes +with C-c C-c, and now we've got the playlist. You can see the artist +and track number have been updated here. + +(6:15) And then the final piece of this is that if you look at this, +you can see that the file name is still the same. So if I were looking +at the directory, I would still have this file name. When packaging +these up for a release, for people to download, it's nice to be able +to have that filename reflect the track number and the artist and so +on. So there's another command, EMMS rename tag editor, rename, so it +could be just capital R. I think I need to mark all of these, hit +capital R, and then it's going to ask me to confirm and say yes to all +of them. And now, if you look in the-- whoops I have to update +it--you'll see it's been updated with the artist, track number and +track name. This format is a format string, so it's customizable of +course. I just decided to go with the default. + +(7:21) So that's pretty great, this workflow just with EMMS. I didn't +have to do anything. This is all there. It's all built in. It gave me +exactly what I was looking for in terms of being able to process a lot +of raw audio files add metadata to them and get them ready for +publishing. And this is for publishing for playback in any media +player. It'll be useful. Not just for the web page that I'm building. + +(7:48) So the final part, of course, is to build the web page. Emacs +makes authoring HTML trivial. As I was going through this, I wanted to +challenge myself and just be, like, can I do this just all with Emacs? +Can I just make this? I don't need a... I don't need Ruby. I don't +need Rails. I don't need Node. I don't need any of this other stuff. I +have my tool right here. It's a fully... It's a whole operating +system, basically, plus programming languages. So the first thing I +started with was buffer scripting for manipulating text. That's kind +of the easiest way to do it. Basically, anything you can do in a +buffer, you can do programmatically with Elisp. So this might be a +good example for beginners. If you haven't done any Elisp yet, a +simple example is to create this this div output here. You can use +this with-temp-buffer, so basically creating an imaginary buffer. +insert is just like typing, so you put strings in, you put new lines +in, you can build some strings together. Here you can see I'm doing a +random number, so every time I execute this, my content change. I +can generate dynamic content in HTML blocks with Elisp. + +(9:04) For my web page builder, It's a little more complex. I'm +pulling data out using EMMS data structures, so it's pulling that out +from the track data. And then I'm using some program to generate list +elements, so each track is going to have the title and track number, +and then a button for playing it, plus the source of the audio file, +which will get added here. Right now, this is hard coded for Opus, so +it won't work for my MP3s. I'm going to skip over snippets. Turns out +format strings were good enough for me. Snippets could be useful, but +format is super powerful, and I didn't really even need all that much +power, basically, just doing string interpolation. So if you haven't +seen format before, you basically put these control strings or control +characters inside of a string, and you can generate an output string +that you want. So in my generator code, basically, it's down here, I'm +calling format with this Bard Bivou(m)acs template, and that's +basically a big a big string of HTML. It's just my whole page of HTML +with those control characters in just four places. One of them +populates the track list. That's really the meat of the program. +Again, this is a combination of using buffer scripting, using HTML +mode, inserting text format strings, and then I can indent-region so +the HTML actually looks pretty when it comes out of it as well. I will +show that, just really quick actually. So you can see, this is the +HTML that got generated. I've got my template. I inserted the title +here, the style, the font was all inserted, and then this whole list +of of tracks here. It's kind of messy to look at, but this track list, +this whole div here, is all generated by my generator code, and it +works. It's great. Okay, moving on. + +(11:27) So the other thing was that as I was developing this, I +decided to use Org Babel and some of his its features for +multi-language things because I needed to style it with CSS and and +put actions in Javascript, and also I used SVG for authoring stuff. It +was a little bit complicated. It probably would have been simpler had +I not used Org Babel, but it's also really fun. I think it's a cool, +cool idea to use literate programming. My idea was to create HTML +components. I could name it like this, put a format string inside it, +and build a function in Elisp to format it and spit out the HTML that +I want. By doing this, then, I can just change things in my Org file +which, not getting a whole lot of time to work on it, I can come back +to it and I have a lot of notes. I can kind of generate things as I'm +going and keep notes for myself, and keep the... I don't know. It's +cool. Literate programming is fun. So I don't need to go into that too +much, but you can see if I execute this here, I get the the div that I +want. It's a little bit funny. You'll see I have the string like this, +the way that noweb expands, I can't do this on a single line. It looks +funny when you do that, so that might be something to work out later. +CSS blocks can either be tangled out and referenced in the HTML source +or inlined. Here's an example I have of inlining it. So I've got my +little CSS block named style, Javascript named script, and then I've +got this HTML source block with noweb expansion. These double angle +brackets here are where I'm going to expand the block named style. I'm +actually calling a function, so I want the result of the function +here, and then the script will just get expanded here. So +org-babel-expand-src-block, you can see what it looks like. I've got +my style here. I've got my title. I've got that main content class I +showed before, and the script as well. So that's kind of cool. I could +just run org-babel-tangle and get my thing out and just edit one file +instead of multiple files. Not for everyone, but I thought it was kind +of fun. All right. + +(13:45) Oh, and the final thing is that in Emacs, you can author and +view SVG. So this is just an Org. This SVG, I used to make the play +and pause buttons. I didn't know this, but if you edit an SVG file, +you can toggle back and forth between the code and the image. It's +pretty sweet. So I can iteratively work through this because of how +Emacs is. + +(14:20) Final considerations here, like when doing this, I want it to +be all free, so I want to use fonts that use a free license. I found +GNU Unifont. It's kind of cool. The content license... I chose +Creative Commons Attribution ShareAlike, which is kind of like the +GPL. Ideally, I could serve it with Emacs. I'd like to remove +idiosyncrasy so other people can use it. It's pretty much just my tool +right now. Not requiring the web browser... I can ship playlists so +that you can just click or link to a playlist on your favorite player, +even EMMS if you want, and then packing up those albums in like a ZIP +or .tar file. + +(15:04) So you can go to churls.world . It just has a link to this +album. I'll display it here in just a second. You can contact me. I'm +shoshin on #emacs in IRC and on sourcehut. You can email me +grant@churls.world, personal, or grant@unabridgedsoftware.com. All +right, now. Let's see about this... This is up online, so if you want +to listen to my college band's album from 20 years ago, here it is: +Cassiopeia Basement Days. Whoops. I made this art in Krita. You can +press play. You can skip around. I do have the playlist up here too. +So yeah, thanks for listening. I hope you enjoyed it, and enjoy the +rest of EmacsConf. Goodbye! + +<!-- /transcript --> + + +<!-- transcript: 2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt --> + +<a name="transcript-questions"></a> +# Transcript: Q&A + +So first question, what does Bard Bivou(m)acs mean? Good question. In +one version of my talk, I spent too long explaining it, and decided to +cut it out. It's basically a bad pun on band camp. A bivouac--I don't +even know if I'm pronouncing that correctly--it's like a tent or a +camp that you put up hastily, and a bard is a musician, of course. +Yeah, I don't know. I like puns. I'm a dad. That's the best I could +come up with. I'll probably find a different name for it but I liked +that "bivoaucs," if you stick an m in there, it becomes Bivou(m)acs. +It's kind of like editor macros for generating some HTML. Yes, it is +confusing, chatting on IRC at the same time. Great question. (Amin: +Grant, so right now, you're sharing your screen. Are you planning on +showing something with it, or for example, should I maximize you?) I +don't know. I can turn it off for now. Okay. (Amin: You can turn on +the webcam.) Yeah, okay. (Amin: I'll maximize your webcam.) Okay, +thanks. I'll get to the answer for my color theme here in a bit in +IRC. + +(1:31) Next question on the Etherpad, does this metadata workflow also +support unsynchronized lyrics within ID3 tags, multi-line metadata? I +don't know, actually. It's funny because I was trying out different +things with metadata, and really the biggest thing was to figure out +how to do mass tag editing. And that was like... It wasn't very +intuitive, like I said, with EMMS. I think EMMS is really great, but +its interface is huge. like if you do M-x and type emms, you get I +don't know, 270-some candidates. There's a lot of functions going on. +I basically found the features that I needed to get this workflow +working. I would guess that you probably can do it, and if you don't, +if you can't do it out of the box, I think you could script EMMS to do +that. I'd like to know more, and I'm certainly going to be +investigating it. I will try and post my findings somewhere online. + +(2:39) Is it possible to import batch metadata? I'm not sure. I would +guess yes is the answer. EMMS can connect to metadata services. I +haven't done that because I was just using audio files that I created +myself. I know that on the back end, it calls out to shell programs +for tagging things. there's a lot of different options that can shell +out too. I was using the the vorbis tools to tag the particular files +I was working with. You can also use tiny tag, and there's some +other... That might be the python library. I can't remember. There's +two other libraries that I can shell out to for doing metadata. + +(3:24) My current workflow for tagging music is to first apply replay +gain in fubar 2000, fix egregious mistakes, use beats to apply +metadata from music brains, or discogs, go over remaining albums with +fubar 2000 again. Is there a chance textual tagging could allow doing +it all in one program? Have I experimented with mass tag update +queries? I have not. Again, I was just doing this workflow, taking raw +files with no tags and doing that. I believe because it calls out to +the programs in the back end, I'm sure you could work that out. I +think EMMS would benefit from having something like that because we +work with text, and being able to use Emacs as a front end for those +updates would be really fantastic. So really, it's just a matter of +writing the interface to the external tool. + +(4:22) Is there a link to some info expanding philosophy of how to +compensate musicians? No, I don't really have a lot of philosophy +around that. I guess the first thing I could say would be something +like a universal income. I feel like that would solve a lot of +problems, if musicians could just be musicians and not have to worry +about their pay. I will think about it more. This is one of my first +forays into getting public with some of these ideas, so I will try to +do more and let the community know. + +(4:54) What Emacs theme am I using? Can't remember. It's one of the +Kaolin themes. I think it was Aurora or or Bubble Gum, maybe, but the +Kaolin themes are nice. I recommend them. Not using Doom Emacs, Doom +mode line though. It's very pretty. + +(5:17) SVG support built into Emacs? I'm using Emacs 27.1, and yes, +SVG support is built in. I may have had to compile it with some Cairo +support. I don't remember for sure. But yes, you can even take +screenshots of your Emacs from within Emacs in SVG. It's pretty great. +I don't know how much more time we have left for questions. That's +most of the things on the etherpad. (Amin: I think we have like 10 +more minutes to catch up with the schedule. If there are more +questions, feel free to answer them.) I'll start looking through IRC. +(Amin: And keep an eye on the pad too.) Thank you all for listening +and for enjoying the talk. I'm glad it turned out well. Awesome. Yeah, +it's been fun so far. How did I manage? I can post a snippet of that, +or actually I can share my screen, can't I... Okay. I actually have it +up right here. + +(6:49) So I think I got this from alphapapa, to be honest. I define +screenshot-svg. It's an interactive command. Oh yeah, there's +alphae.papa Okay, there we go. I would like to change this so that I +can get it into the copy-paste buffer so I don't have to copy the file +in, but I haven't really hacked on it yet. + +(7:20) Okay, org heading colors. That might be a good question. I know, the +presentation... Sorry, it's hard to think and type at the same time. +Think and talk and type. + +(7:41) So the presentation is just a normal org file, right, so I have my +headers, and the author--you can even stick your email and other +headers in there. But there's a package called org-tree-slide. Whoops, +why is it not... I must have not required it. Good question. (Amin: +Grant, can you try sharing your screen maybe?) Oh, is it not shared? +I'm sorry. (Amin: Thank you.) There we go, should be coming up. (Amin: +It's coming up. Yep, we see it.) Awesome. All right. Okay. I don't +know why this isn't working. It was working. Okay, you want to see the +screenshot. Whoops. Okay, I just took a screenshot. So, org-tree-slide. +I don't know why it's not launching. I thought that I had required it, +but I must not have. Maybe I'll try. Okay. So there we go. So +org-tree-slide is a way that basically uses narrowing and some kind of +font tricks to... it changes your titles or your metadata into this +banner for the title here, and it automatically sets the faces for +you. You can customize that, of course. And then, as you go through +the Org file, you get these kind of nice animations and-- what's it +called--breadcrumbs up at the top. So org-tree-slide. I highly +recommend it. It's really nice because you can give your presentation +and practice it, and while you're practicing it, you can edit things +as well, because it's still just an Org document using narrowing, you +know. It doesn't actually change anything. Definitely recommend +org-tree-slide mode. Okay, let's see, what else... + +(10:29) Share my screen to demo. Oh, that's the SVG. Let's see. Okay, so I +don't know if you can see this now, but I'm actually viewing the SVG +screenshot that I took with Emacs. See here's the source of it. So +Emacs made that. And here's the image. It's cool because you can even +do it again and again, and open more screenshots of screenshots. Yeah, +definitely Emacsception. Fun stuff. Anything else in chat? Heading +colors? Oh, yeah. I talked about the themes. This is another Kaolin +theme. I think the one in the talk was maybe this one, Aurora. Oh, +here, there's something funny when you start org-tree-slide with a +different theme. This top header bar gets the faces from that previous +theme. I have not figured out how to fix that yet. Did I have to +compile to get the screenshot? I think maybe I did. Yes, if I'm +remembering correctly. I got Emacs 27. I'm not on a Mac. I saw +alphapapa's comment on reddit, and then I recompiled it with Cairo +support. Yes. + +(12:18) Okay, lots of good conversation on here. Yep, I have like one or two +more minutes. Okay I guess while I'm here, I might as well say thank +you to the organizers. I really appreciate everybody's work on this. +It's fun to be a part of this community. I'm enjoying the other talks +I've seen so far today, and I'm looking forward to to the rest. It's +really interesting, just from being on Emacs in IRC for a few months, +I've already connected with a lot of interesting people and have a lot +of cool connections already. (Amin: Thank you for being a part of the +community, Grant.) That's good to be here. I have another talk +tomorrow as well. Oh, thanks for everyone in the Etherpad for putting +more comments on these questions here and taking the notes. (Amin: I +think that's about all the time that we have for the Q&A. Okay. Thank +you again so much, Grant, for your awesome talk and for popping in for +questions.) Yeah, thanks again for hosting. See you later. Cheers! + +<!-- /transcript --> |