
Show HN: Music for Geeks and Nerds - kroger
http://musicforgeeksandnerds.com
======
nano_o
Here are two related books that are freely available (and that I haven't
read):

The Haskell School of Music — From Signals to Symphonies, by Paul Hudak (pdf
available at <http://www.cs.yale.edu/homes/hudak/Papers/HSoM.pdf>).

Music: a Mathematical Offering, by David J. Benson (pdf available at
<http://homepages.abdn.ac.uk/mth192/pages/html/music.pdf>)

------
gravitronic
Clicked it expecting another "list of mixtapes by deadmau5", ended up very
surprised, and bought a copy! Very cool!

I know Ableton Live has python scripting support built in. I wonder how hard
it'd be to integrate all this into composer tools in the DAW

~~~
AhtiK
Unfortunately I haven't seen an official Ableton Live python scripting
support. I have tried to find it with no success.

Yes, the controllers are configured using precompiled python scripts and 3rd
party users have been decompiling them and building their own bindings based
on that. But liveapi.org / <http://code.google.com/p/liveapi/> has been down
for a while and was built for version 6.0.7 (current is version 8).

Currently official way to access Ableton API seems to be MAX [1] but I have no
experience with that. At first sight it didn't seem to have any python
reference. I could be wrong.

[1]
[http://cycling74.com/docs/max5/refpages/m4l-ref/m4l_live_api...](http://cycling74.com/docs/max5/refpages/m4l-ref/m4l_live_api_overview.html)

~~~
jamesbritt
On a side note, Renoise is a terrific DAW/Tracker, and has built-in Lua
scripting, plus native OSC support (something still lacking in Live).

~~~
franklinben
Yes, Renoise is _definitely_ a music program every geek should check out :D

------
zoba
I purchased this with a credit card and got an error that starts off: "The
request signature we calculated does not match the signature you provided.
Check your key and signing method."

I waited a couple minutes and clicked the download link again and it worked.
Wanted to let someone know, since the site doesn't appear to have any contact
information.

~~~
kroger
Thanks for the report, I'll check what is the problem. I added a contact
email.

------
AhtiK
Wonderful! Is the codebase[1] using pyknon[2] or also csound [3]?

I'm asking this because <http://musicforgeeksandnerds.com/resources.html>
lists csound as one of the resources.

Any ideas how pyknon API relates to csound API?

I was working with some programmatic sound generation and csound built-in
python interpreter seemed to be one of the most advanced free solutions to get
some python-based music generated. Csound is free for academic and research.
Commercial license requires contacting MIT. But yes, csound itself is not
python...

I even didn't find anything close to csound in terms of features, instruments
available and community.

[1] <https://s3.amazonaws.com/musicforgeeksandnerds.com/code.zip>

[2] <https://github.com/kroger/pyknon>

[3]
[http://www.csounds.com/journal/issue14/realtimeCsoundPython....](http://www.csounds.com/journal/issue14/realtimeCsoundPython.html)

EDIT: I just noticed that pyknon is generating a MIDI, not an audiofile.
Pyknon is for building midi scores and is not meant for sound synthesis.

~~~
kroger
The codebase only uses Pyknon. Csound is used to generate the examples in
chapter "A Look Inside the Primitives", that's why it's included on the
resources page.

------
prezjordan
Oof, I think you just brought my open-source[0] project to its end! This is
quite nice.

[0]: <http://github.com/prezjordan/Melopy>

~~~
kroger
And the documentation page is even nicer:

<http://prezjordan.github.com/Melopy/>

------
kafkaesque
Hopefully, Kroger sees this and has a bit of time to reply.

I excelled in music. Is there anything in particular in programming that you
teach differently so musicians can understand it better? If so, do you have
any ebooks, PDFs or other resources of this? Just wondering because I've only
recently taken up programming and I'm looking to pull information from various
resources. Thank you!

~~~
kroger
Good question. When I teach programming to musicians I find that they can
learn programming from a functional perspective very quickly and they take a
long time to "get" object oriented programming (or maybe I'm not good at
teaching OOP ;-).

Usually I start with a SICP-like [1] approach, but focused on musical, instead
of mathematical problems. I show them some basics of the language and ask them
to implement musical operations they already know, such as transposition and
inversion. Then, I show how they can simplify their code.

If you want to learn programming, I suggest SICP [1]. The videos [2] are also
very good.

[1] <http://mitpress.mit.edu/sicp/>

[2] [http://ocw.mit.edu/courses/electrical-engineering-and-
comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/6-001-structure-and-interpretation-of-computer-programs-
spring-2005/video-lectures/)

~~~
squidsoup
That's an interesting observation - as a musician, functional programming has
somehow always felt more intuitive to me than OOP. What characteristics of
functional programming do you think are similar to music?

~~~
kroger
To be honest, I think both paradigms are good for music. You can have a Note
as an object with attributes such as pitch, octave, name, etc. Maybe musicians
like FP at first because it's somewhat simpler (I'm not talking about Monads
here ;-). They already know about functions from high school and function
composition translates directly to how they may think about music operations:

    
    
        retrogradation(transposition(inversion([0, 4, 7])))

~~~
kafkaesque
Do the musical terms in this analogy:

retrogradation(transposition(inversion([0, 4, 7])))

also explain the relationship between each part of this function as
retrogradation does with transposition and inversion? E.g., if you start with
a triad, transpose it to another key, and then create an inverted chord out of
it? Or were the musical terms chosen merely to indicate that they can be a
"subset" of a particular general idea ("chord" or "function"?)?

------
Gormo
This is extremely interesting in concept; I know essentially nothing about
music theory and have been interested in learning more about it, and a
logical/mathematical approach sounds perfect.

But is the book suitable for someone seeking to acquire a foundational
knowledge of music theory, or does it require some level of pre-existing
understanding?

I ask because most of the material on the page refers to learning "more" about
music, and the sample material does seem to assume some background knowledge
in musical notation, etc.

If this isn't suitable as an entry-level primer on music theory, can anyone
recommend some other works to read first?

~~~
kroger
In theory you should be fine but it's hard for me to tell. You could use the
book and supplement the things you don't know with Wikipedia (I even recommend
a few articles in the book). Have you tried the sample?

~~~
Gormo
I've looked at the sample, and found some of it to rely on prior knowledge,
but perhaps it will be fine if I have appropriate reference material handy.
I'll go ahead and get a copy.

------
_exec
Perfect, just what the doctor ordered. May I suggest you create a forum /
subreddit for the readers to discuss the book?

~~~
kroger
Good idea, I created a subreddit: <http://www.reddit.com/r/mfgan/>

~~~
_exec
Perfect. I'd add a link to the list of resources :)

Thank you for the awesome work! I'll try and leave feedback on the subreddit
once I get started.

~~~
kroger
> Perfect. I'd add a link to the list of resources :)

done. :)

------
gboyd
Pure Data is awesome! It's a "patcher" language which makes it pretty
approachable for musicians, who are already used to the "plugging in wires"
paradigm --

Also with (<http://libpd.cc/>) you can embed your Pd code almost anywhere!

I'm using Pd/libpd for an audio-focused mobile project --- so far it's a great
architecture, perfect separation of concerns, keeps the audio guts cross-
platform. Plus everything is permissively licensed.

Supercollider seems to have a lot of traction with the improvisational
community, folks who do "live coding", i.e. hacking at curly-bracket syntax in
a performance setting. But it's GPL and not easily embeddable in mobile
devices afaik ---

P.S. Custom python scripts against Ableton work great if you are using a
hardware controller that supports the Framework classes. You can access pretty
much the entire Max for Live object model, via python. It's definitely an
unsupported back door though.

Here's a tutorial: <http://remotescripts.blogspot.com/2010_03_01_archive.html>

------
gtani
Thx.

Some others you have to pay for, but worth it IMHO:

<http://www.musimathics.com/>

[http://www.amazon.com/Music-Probability-David-
Temperley/dp/0...](http://www.amazon.com/Music-Probability-David-
Temperley/dp/0262515199/)

also Prof Cope from UCSC:

<http://artsites.ucsc.edu/faculty/cope/experiments.htm>

------
cardamomo
I love this as a pedagogical tool. Composers and hackers have a lot more in
common than many folks realize, so to teach the basics of composing in a
familiar language makes a lot of sense.

That said, where do we go from here? Many of the challenges in writing
contemporary music are in fact notational challenges. We have a system of
music notation that developed largely alongside the musical styles of the
baroque and early classical eras, which tends to emphasize discrete pitches
and a "divisional" model of time. (That is, the only allowable note lengths
are those that can be expressed roughly as multiples of powers of 2.)

This book seems like a _great_ way to get your toes wet, but what is the geek
or nerd to do when their compositional ideas begin to butt up against what is
possible within western notation and, indeed, pyknon?

~~~
kroger
haliax is right, although I don't cover Csound much.

If you want to compose for instruments, you may want to learn more about what
contemporary classical composers are doing (or have done) [1] to address the
notational challenges.

On the other hand, if you want to have completely freedom, computer generated
music [2] can give you that, specially if you use something like Csound,
Supercollider [3], Chuck [4], or PD [5].

[1] <http://en.wikipedia.org/wiki/Contemporary_classical_music>

[2] [http://en.wikipedia.org/wiki/Computer_music#Computer-
generat...](http://en.wikipedia.org/wiki/Computer_music#Computer-
generated_music)

[3] <http://supercollider.sourceforge.net>

[4] <http://chuck.cs.princeton.edu>

[5] <http://puredata.info>

~~~
lewisgodowski
+1 for ChucK. Learned that this past year in school. Was my first time
programming, definitely wasn't as difficult as I always envisioned it being...
(:

------
danso
FYI, since it isn't mentioned on the OP, the Amazon version only costs $9.99.
The downside is that it's Kindle only, though with no restriction on number of
Kindle devices. <http://www.amazon.com/dp/B008NSO6SI>

------
Yhippa
I so want to buy this book but I don't know if it's right for me yet even
after reading the sample.

Is there anything practical I can expect to use as a result of reading it and
going through the exercises?

~~~
JshWright
A better understanding of music theory?

------
lukev
Perfect! I've often wished for such a book.

Note - It's also available on Amazon priced at 9.99, though that would be DRM
encumbered and (probably?) not include the sound samples.

~~~
kroger
You can download the code and sound examples at:
<http://musicforgeeksandnerds.com/resources.html>

The kindle version at amazon shouldn't have DRM (I hate DRM).

Just keep in mind that some (older) kindle readers may not display some
formatting properly, such as code blocks and tables (gasp!) that's why I sell
a package with 3 formats. It looks good on my kindle3, but your mileage may
very.

Unfortunately this is a limitation of the format (modi) and readers (it should
get better with the kindle format 8).

I bought some programming books from Amazon for the kindle that I end up
buying again from the publisher just to have a pdf copy and be able to read
the source code better. It's still convenient to have some programming books
on the kindle, though.

~~~
donall
So the extra $5 just gets you a broader choice of file formats?

I'm interested in buying it, and I'm pretty sure my kindle show be able to
handle the format. That said, I think I'd rather buy from your website than
from Amazon (assuming more of the money ends up in your pocket) - but not at a
markup of 50%!

------
jroll
Out of curiosity, are the examples intended for python 3? I noticed in the
sample you're passing around 1/4, 1/2, etc. which doesn't do a whole lot in
2.x. :)

~~~
kroger
They should work with 2.7 and 3.x. I the book I use from __future__ import
division.

~~~
jroll
Gotcha, thanks! I forgot about __future__.

------
dmansen
Great stuff. Bought myself a copy after reading that you're strongly
influenced by SICP - good enough for me :)

Edit: Forgot to mention, I spent a weekend writing a bunch of similar music
manipulation tools in clojure if anybody is interested in checking it out:
<https://github.com/dmansen/composition-assistant>

------
RockofStrength
Musicnovatory.com presents quite a few interesting music theory concepts,
though it is quite opaque and off-putting in parts. For example, they present
a generative binary theory of rhythm, a 'tetrad' theory of chords (by fifths
and 'metamorphoses'), and a whole array of binary open/close 'entities'
(rhythm, harmony, and 'melolines' (the chord tones of the melody)).

------
ninjin
This seems like a great read! I have wished for years to dive into music
theory and this would suit me great. I would prefer a physical copy though,
any chance of seeing an e-mail list where you can get back to people that want
to wait for the paper version? I signed up for notifications for volume 2 but
I didn't see anything similar regarding the paper version.

------
danso
I have to say, just skimming through on the Kindle version (on iPad), the book
looks beautiful and well laid-out. Can't wait to dig in.

------
efields
This could be perfect for me. I studied guitar in high school and played
trombone for 8 years, but I've all but abandoned both and haven't looked at
sheet music for years. I'll admit that I never _got_ the structures of chords
and why they sounded like what they sounded like and what types of sounds
should logically proceed another.

@kroger Will this help?

~~~
kroger
I think it may help. I don't cover chord progressions in the book (that's for
volume 2 ;-), but it should give you a good foundation.

~~~
reitzensteinm
Is there some mailing list we can sign up for, to get volume 2 news? I just
bought volume 1, browsed it, and it seems like an excellent fit for my way of
thinking.

I'd love to see some more advanced topics covered in much the same way!

~~~
kroger
Thanks for the interest! I added a mailing list for volume 2 (at the bottom of
the page).

------
bloat
Looks great! Now we need an edition using Overtone...

<http://overtone.github.com/>

------
richardjs
The site says a paperback edition is coming... is there a way we can sign up
to be notified when it's available?

~~~
kroger
I added a mailing list at the end of the page.

~~~
richardjs
Thanks!

------
dmitrig01
Kudos for Steve Reich on the very front!

~~~
kroger
Thanks!

------
corin_
Will grab it and read when I next have some space on my reading list, but as a
former professional musician and occasional amateur coder, I'm pretty much the
exact opposite of the target audience, so will be interesting to see how it
reads for me.

~~~
kroger
Interesting! Please let me know how it works for you. You may find "Learn
Python the Hard Way" a good complement:

<http://learnpythonthehardway.org>

------
juanre
This is great, Pedro. Just bought a copy. I've tried ---and failed--- many
times to learn music: I hope this will be the one. Now if you just found the
way to include a couple of properly tuned ears in the package...

------
tprice7
For those curious, here are a few of the author's musical compositions:
<http://pedrokroger.net/compositions/>

------
mahmud
This is EXCELLENT!

I'm currently Yale's free online course, Listening to Music. Should be a great
complement.

<http://oyc.yale.edu/music/musi-112>

------
marianoguerra
exactly what I was looking for, just bought it, thanks!

------
criveros
So, If I want to just learn the guitar and to be able to play classics like
wonderwall, will this book help me?

~~~
kroger
Maybe not. If you are a programmer the book may help you to understand music
better and if you understand music better you may be able to play better. But
to be a good performer you need to work on many other skills.

------
gbog
Bet someone could generate the Art of the Fugue from a few functions...

------
twfarland
What a beautiful idea. Will a physical copy be available at some time?

~~~
kroger
Yes, it should be available in a few weeks at Amazon.

~~~
jamesmcn
Can't you just submit a manuscript to CreateSpace and get it live tomorrow?

~~~
kroger
I could, but I want to make sure the resulting quality is good (I need to have
high resolution images, make B&W images, etc.). Unfortunately it takes weeks
until they send you the printed review and I don't feel comfortable selling
something without seeing it first.

------
khafra
Speaking of which, who's going to be at Nerdapalooza next weekend?

