summaryrefslogblamecommitdiffstats
path: root/2020/info/35.md
blob: 0effe3cabb8fb19ab3b8ca19bc3f83ae6e04b333 (plain) (tree)
1
2
3
4
5
6
7
8
9


                                                   


                                                                                                                                                                                      


                                                                                                                                                                                                     









                                                                      


                                                                                                                












                                                                                                                                                                         
                                  
 
                                                                                                                                                                                                                                                                                                                                      



                                                                                            
                                                                                                                                      






                                                                                                                                                                                
                                                                                                                                                      



                                                                    
                                                                                            






                                                                                                                                                                           
                                                                      
 
                                                                                            
                                                                                    
                                                                                                                                    
                            




                                                                                                                                                                                                                        
                                                                                                 



       
                                                              
 
# 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"]] 
[Download .webm video, 720p, 122M](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--questions--zachary-kanfer.webm"]]  
[Download Q&A .webm video, 720p, 89MB](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm)

During quarantine, I found myself spending time with an Android app.
One of the features this app has is composing music that loops
endlessly.  As with many things, I wondered how much better this tool
would be, if only it was inside Emacs.

This talk will explain how I made this tool inside Emacs, with detours
through Emacs text properties, font rendering, the .WAVE file format,
and music theory.  And hopefully at the end, we'll have something
worth listening to.

There are extended notes, references, and links at [https://zck.me/emacsconf2020](https://zck.me/emacsconf2020).

The source can be found at [https://hg.sr.ht/~zck/zmusic/](https://hg.sr.ht/~zck/zmusic/). 
<!-- from the pad --->

-   Actual start and end time (EST): Start 2020-11-29T16:29; Stop 2020-11-29T16:46


# Questions (note that we don't have audio out from Zachary's computer in BigBlueButton, so any music demos will need to wait for a recorded video)


## Q9 : Any MIDI mapping possibilities?  (Sorry Q8)


## Q8: What were some of the challenges with writing a special-mode for Emacs? I'm interested in getting into this in the future, but I'm not really sure where to start.

That'd be awesome, thanks! Will do

I used define-derived-mode (<https://www.gnu.org/software/emacs/manual/html_node/elisp/Derived-Modes.html>) to make this mode. It's really useful! For more information, I recorded a talk about making major modes (<https://www.youtube.com/watch?v=gk39mp8Vy4M>) a few years ago, at an EmacsNYC (<https://emacsnyc.org/>) meeting.


## Q6: Do you think would be possible to add a set of recorded sounds in order to use those?

Yes! Part of zmusic is tooling to make wave files, so it should be possible to slice-and-dice input data, and output valid wave files.


## Q7: have you written any actual songs (in RRRM/WAVEing)?   Can you play one ?


## Q5: Are there any open source musical instrument sample libraries that could be used? E.g. "play A 440 on Piano sample 1" to provide better quality notes than built-in tones

Experimentation would be fun. However, the nice part about Emacs is that it doesn't have any external dependencies, you only need a way to play WAVes.


## Q4: What is your musical background? Do you play any instruments?

Random instruments, started with recorder, played cello for a long time, now playing guitar.


## Q3: Any chance for an Emacs tracker/mod player? (plays several samples arranged in the same top-down fashion with effects applied to them for chiptune and keygen music)


## Q2: Will you play us another song? (RIP ears — who needs 'em, this is awesome! it is!)

UPDATE: can confirm, it was easy to play a song myself :-)  Very nice!

However git clone <https://hg.sr.ht/~zck/zmusic> didn't work, I wonder if I'm doing it wrong
-   Had to browse to <https://hg.sr.ht/~zck/zmusic/browse/zmusic.el> and copy/paste.
-   It's mercurial! (I have Opinions about version control systems). Try \`hg clone\` instead, or copy/paste from the link directly.
-   BAM! hg clone works fine
    -   Hooray!


## Q1: Why do you go top-to-bottom for time progression and left-to-right for low-to-high in stead of doing it pivoted? (e.g. higher is higher tone, left-to-right is time progression). This is awesome by the way!(+1)

The initial app (the inspiration) worked this way. It is definitely something worth looking into.


# Notes

notes, references, and links at <https://zck.me/emacsconf2020>