summaryrefslogblamecommitdiffstats
path: root/2020/info/35.md
blob: 68b8dd082f9c807f980312ab12c7ee3136696acd (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>.

The source can be found at <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

## Q9: 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.
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.
- That'd be awesome, thanks! Will do.

## Q8: Any MIDI mapping possibilities?
Should be! Would just need to change the low-level.

## Q7: 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.

## Q6: Have you written any actual songs (in RRRM/WAVEing)? Can you play one?
Nothing super or well put together as of now.

## 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)
I don't really know what a tracker/mod player is.

## 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!
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>