back to list

Bytebeat

🔗Graham Breed <gbreed@...>

4/6/2012 11:49:38 AM

Music generated at audio rate from a single line of C:

http://canonical.org/~kragen/bytebeat/

It's implicitly microtonal in that it's too simple to
specify an equally tempered scale. According to the paper,
the pitches come from the harmonic series.

http://arxiv.org/abs/1112.1368

At this point, it's starting to make some sense, so maybe
it isn't an elaborate hoax based on an Easter egg planted
in my C compiler.

Graham

🔗Carl Lumma <carl@...>

4/6/2012 12:16:41 PM

Mike and I were discussing it late last year. It's algocomp
in the synthesis realm instead of the score realm. I don't
know why nobody's thought of it before. All algocomp I know
of, including Wolfram Tones, has been done at the score level.

-Carl

--- In tuning@yahoogroups.com, Graham Breed <gbreed@...> wrote:
>
> Music generated at audio rate from a single line of C:
>
> http://canonical.org/~kragen/bytebeat/
>
> It's implicitly microtonal in that it's too simple to
> specify an equally tempered scale. According to the paper,
> the pitches come from the harmonic series.
>
> http://arxiv.org/abs/1112.1368
>
> At this point, it's starting to make some sense, so maybe
> it isn't an elaborate hoax based on an Easter egg planted
> in my C compiler.
>
> Graham
>

🔗Graham Breed <gbreed@...>

4/6/2012 12:23:45 PM

"Carl Lumma" <carl@...> wrote:
> Mike and I were discussing it late last year. It's
> algocomp in the synthesis realm instead of the score
> realm. I don't know why nobody's thought of it before.
> All algocomp I know of, including Wolfram Tones, has been
> done at the score level.

There have been score realm and synthesis realm algorithms,
like Chua's oscillator. The good thing here is they've got
it all working together -- simple synthesis realm
algorithms that do interesting things at the score level.
It probably wasn't done before because it's difficult.

Graham

🔗chrisvaisvil@...

4/6/2012 12:25:36 PM

Back in the early days of PCs with a BASIC interpetor (and then quick basic) I used to fool around with modulating the Beep command. Actually take that back to 82 or so on an HP 85a computer in the lab. If I did I'm sure others did.

It was not as straight forward as the 1 liner C code syntax but it was the same type of thing. Modulate a device that had only 2 states. People used to be real creative with early games for PCs w/o sound cards and just a dumb speaker i/o port.
*

-----Original Message-----
From: "Carl Lumma" <carl@lumma.org>
Sender: tuning@yahoogroups.com
Date: Fri, 06 Apr 2012 19:16:41
To: <tuning@yahoogroups.com>
Reply-To: tuning@yahoogroups.com
Subject: [tuning] Re: Bytebeat

Mike and I were discussing it late last year. It's algocomp
in the synthesis realm instead of the score realm. I don't
know why nobody's thought of it before. All algocomp I know
of, including Wolfram Tones, has been done at the score level.

-Carl

--- In tuning@yahoogroups.com, Graham Breed <gbreed@...> wrote:
>
> Music generated at audio rate from a single line of C:
>
> http://canonical.org/~kragen/bytebeat/
>
> It's implicitly microtonal in that it's too simple to
> specify an equally tempered scale. According to the paper,
> the pitches come from the harmonic series.
>
> http://arxiv.org/abs/1112.1368
>
> At this point, it's starting to make some sense, so maybe
> it isn't an elaborate hoax based on an Easter egg planted
> in my C compiler.
>
> Graham
>

🔗Mike Battaglia <battaglia01@...>

4/6/2012 12:28:52 PM

On Fri, Apr 6, 2012 at 2:49 PM, Graham Breed <gbreed@...> wrote:
>
> Music generated at audio rate from a single line of C:
>
> http://canonical.org/~kragen/bytebeat/
>
> It's implicitly microtonal in that it's too simple to
> specify an equally tempered scale. According to the paper,
> the pitches come from the harmonic series.
>
> http://arxiv.org/abs/1112.1368
>
> At this point, it's starting to make some sense, so maybe
> it isn't an elaborate hoax based on an Easter egg planted
> in my C compiler.
>
> Graham

Yeah, we talked about something similar last year. Here's a thread on it:

/tuning/topicId_15674.html#102326

The example I wrote in is playing in porcupine. All of the same
techniques that they're using to do half-assed overtone stuff are
easily adapted to doing less half-assed regular temperament stuff.

-Mike

🔗genewardsmith <genewardsmith@...>

4/6/2012 2:46:09 PM

--- In tuning@yahoogroups.com, Mike Battaglia <battaglia01@...> wrote:

> The example I wrote in is playing in porcupine. All of the same
> techniques that they're using to do half-assed overtone stuff are
> easily adapted to doing less half-assed regular temperament stuff.

Progress! For the next step, instead of music from one line of C code, what about good music from 50 lines?

🔗Mike Battaglia <battaglia01@...>

4/6/2012 3:15:22 PM

On Fri, Apr 6, 2012 at 5:46 PM, genewardsmith <genewardsmith@...>
wrote:
>
> --- In tuning@yahoogroups.com, Mike Battaglia <battaglia01@...> wrote:
>
> > The example I wrote in is playing in porcupine. All of the same
> > techniques that they're using to do half-assed overtone stuff are
> > easily adapted to doing less half-assed regular temperament stuff.
>
> Progress! For the next step, instead of music from one line of C code,
> what about good music from 50 lines?

I have a lot of thoughts on the subject of algorithmic composition,
but the thought of computers writing better music than people really
bums me out. The only way to bum me back in at that point is to
consider the automatic demoing of an infinite set of useful regular
temperaments.

-Mike

🔗Graham Breed <gbreed@...>

4/6/2012 3:31:16 PM

"genewardsmith" <genewardsmith@...> wrote:

> Progress! For the next step, instead of music from one
> line of C code, what about good music from 50 lines?

They're clearly getting more detail out than they put in,
and some of the results are pretty good. With more work
they can probably rival images produced from the Mandelbrot
set. I don't expect this approach to output anything like
Mozart the same way I wouldn't expect to find Turner in the
Mandelbrot set. Normal music is likely to come from a
separation between the score and the timbres. But it's
still a great amount of progress to get listenable music
despite ignoring that separation.

Graham

🔗Graham Breed <gbreed@...>

4/8/2012 7:22:30 AM

Mike Battaglia <battaglia01@...> wrote:

> Yeah, we talked about something similar last year. Here's
> a thread on it:
>
> /tuning/topicId_15674.html#102326
>
> The example I wrote in is playing in porcupine. All of
> the same techniques that they're using to do half-assed
> overtone stuff are easily adapted to doing less
> half-assed regular temperament stuff.

What example? I don't see any code from you. (There is
one from AKJ, so he was on to this early.)

Graham

🔗Carl Lumma <carl@...>

4/8/2012 9:42:27 AM

Follow the bit.ly link (it contains the code). Where's
Aaron's? I didn't make a xenharmonic version of this stuff
after looking at it for 5 minutes like Mike, but I am willing
to bet I'm the first person here to know about bytebeat.

-Carl

--- In tuning@yahoogroups.com, Graham Breed <gbreed@...> wrote:

> What example? I don't see any code from you. (There is
> one from AKJ, so he was on to this early.)
>
> Graham
>

🔗Mike Battaglia <battaglia01@...>

4/8/2012 9:46:43 AM

http://bit.ly/vpbZeV

-Mike

On Apr 8, 2012, at 10:23 AM, Graham Breed <gbreed@...> wrote:

Mike Battaglia <battaglia01@...> wrote:

> Yeah, we talked about something similar last year. Here's
> a thread on it:
>
> /tuning/topicId_15674.html#102326
>
> The example I wrote in is playing in porcupine. All of
> the same techniques that they're using to do half-assed
> overtone stuff are easily adapted to doing less
> half-assed regular temperament stuff.

What example? I don't see any code from you. (There is
one from AKJ, so he was on to this early.)

Graham

🔗Graham Breed <gbreed@...>

4/8/2012 9:53:03 AM

Mike Battaglia <battaglia01@...> wrote:
> http://bit.ly/vpbZeV

That's the same link you posted to me before, and it makes
no more sense now than it did then. I can see something in
the query string that looks like an expression. Am I
supposed to decode it myself and work out what language
it's in, or will you help me?

Graham

🔗Graham Breed <gbreed@...>

4/8/2012 9:54:02 AM

"Carl Lumma" <carl@...> wrote:
> Follow the bit.ly link (it contains the code). Where's
> Aaron's? I didn't make a xenharmonic version of this
> stuff after looking at it for 5 minutes like Mike, but I
> am willing to bet I'm the first person here to know about
> bytebeat.

Aaron's is here:

http://countercomplex.blogspot.co.uk/2011/10/algorithmic-symphonies-from-one-line-of.html

(int)(((t>>4)|(t%10))+3.3) |
(((t%101)|(t>>14))&((t>>7)|(t*t%17)))

Graham

🔗genewardsmith <genewardsmith@...>

4/8/2012 10:18:08 AM

--- In tuning@yahoogroups.com, Graham Breed <gbreed@...> wrote:

> Aaron's is here:
>
> http://countercomplex.blogspot.co.uk/2011/10/algorithmic-symphonies-from-one-line-of.html
>
> (int)(((t>>4)|(t%10))+3.3) |
> (((t%101)|(t>>14))&((t>>7)|(t*t%17)))

With all due respect to your contrary view, I am still awaiting the first example which doesn't sound like shit. Can we encourage people to care more about that, and less about fitting it onto one line?

🔗Mike Battaglia <battaglia01@...>

4/8/2012 10:30:12 AM

On Apr 8, 2012, at 12:53 PM, Graham Breed <gbreed@...> wrote:

Mike Battaglia <battaglia01@...> wrote:
> http://bit.ly/vpbZeV

That's the same link you posted to me before, and it makes
no more sense now than it did then. I can see something in
the query string that looks like an expression. Am I
supposed to decode it myself and work out what language
it's in, or will you help me?

Graham

The code is in the two separate textboxes marked "left" and "right." The
code is technically in Javascript, but it's supposed to be such that you
can enter the same sort of syntax that they used here, which was in C

http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html?m=1

So you just do stuff with the variable t in those 2 boxes, and the for loop
and putchar is implicit.

Since Javascript and C are more or less syntactically equivalent for simple
one-line mathematical statements like these, someone made a Javascript app
that lets you just put code the same sort of expressions in, spits the
output into a data URI, and plays it. They defined functions called sin,
cos, tan so that you can just type that instead of Math.sin, Math.cos,
Math.tan, as though you really were typing in C and had included math.h.

They didn't define pow, though, because I guess nobody was looking at that.
So I just typed Math.pow explicitly to get what I wanted. The result is
what you see.

-Mike

🔗Mike Battaglia <battaglia01@...>

4/8/2012 10:32:23 AM

On Apr 8, 2012, at 1:18 PM, genewardsmith <genewardsmith@...>
wrote:

--- In tuning@yahoogroups.com, Graham Breed <gbreed@...> wrote:

> Aaron's is here:
>
>
http://countercomplex.blogspot.co.uk/2011/10/algorithmic-symphonies-from-one-line-of.html
>
> (int)(((t>>4)|(t%10))+3.3) |
> (((t%101)|(t>>14))&((t>>7)|(t*t%17)))

With all due respect to your contrary view, I am still awaiting the first
example which doesn't sound like shit. Can we encourage people to care more
about that, and less about fitting it onto one line?

Why don't you just make one?

Mike

🔗Graham Breed <gbreed@...>

4/8/2012 11:35:48 AM

Mike Battaglia <battaglia01@...> wrote:

> They didn't define pow, though, because I guess nobody
> was looking at that. So I just typed Math.pow explicitly
> to get what I wanted. The result is what you see.

No, I don't see that at all. Can you post what you think I
should see?

Here's what I cooked up this evening. People who hate
regular bytebeat will absolutely loathe this.

/*
* 8-bit bytebeat with feedback
*
* Run as ./crowdhack | aplay
*/

/*
* The original crowd expression with shorter lines
*/
crowd(t){
int a,b,c,d;
a = t<<1;
b = t>>7;
c = a+b&t>>12;
d = t>>(4-(1^7&(t>>19)))|b;
return (a^c)|d;
}

/*
* Feedback timebase
*/
main(){
int c,i,x;
c=0;
for(i=0;;i++) {
x = crowd(i+c);
c += (x>>9)&15;
putchar(x);
}
}

Graham

🔗Mike Battaglia <battaglia01@...>

4/8/2012 1:17:23 PM

On Apr 8, 2012, at 2:35 PM, Graham Breed <gbreed@...> wrote:

Mike Battaglia <battaglia01@...> wrote:

> They didn't define pow, though, because I guess nobody
> was looking at that. So I just typed Math.pow explicitly
> to get what I wanted. The result is what you see.

No, I don't see that at all. Can you post what you think I
should see?

Left channel

0*(g=Math.pow(2,-3/22)) | 2*t*(Math.pow(g,((40+(t>>13)%8)&t>>11)%7))|(t>>8)
+ ((t&t>>5)-5)>>5

Right channel

0*(g=Math.pow(2,-3/22)) |
4*t*(Math.pow(g,((40+(t>>13)%32)&t>>11)%7))&(t>>5) + (((t&t>>5)-5)>>5)

-Mike

🔗Graham Breed <gbreed@...>

4/9/2012 5:35:58 AM

Mike Battaglia <battaglia01@...> wrote:

> Left channel
>
> 0*(g=Math.pow(2,-3/22)) |
> 2*t*(Math.pow(g,((40+(t>>13)%8)&t>>11)%7))|(t>>8)
> + ((t&t>>5)-5)>>5

Should the last term be in parentheses, so that the
precedence matches the spacing?

> Right channel
>
> 0*(g=Math.pow(2,-3/22)) |
> 4*t*(Math.pow(g,((40+(t>>13)%32)&t>>11)%7))&(t>>5) +
> (((t&t>>5)-5)>>5)

Well, it has something to do with Porcupine. But I'm not
sure you win on the "less half-assed" than overtones front.
The best simple pieces tend to be the ones that have the
last to do with melody anyway. If we want to impose a
scale, it is possible to use arrays as tuning tables. (Or,
at least, strings to sneak past C expression syntax.)

Here's something I found with overtones and feedback. The
Forty-Two Melody in a more melodic 15-limit form, then
hacked, ascending, and turning into a drum machine. (ANSI
C99, 8 bit, 8 kHz mono.)

#include <stdio.h>

int fortytwo(int t) {
int n = 21&t>>11;
return t*(n==1?4:(n>15?n-8:n));
}

int main(){
for(int i=0;;i++) {
int x = fortytwo(i);
i += x>>19|x>>23&3;
putchar(x);
}
}

Graham

🔗Mike Battaglia <battaglia01@...>

4/9/2012 5:47:34 AM

On Apr 9, 2012, at 8:36 AM, Graham Breed <gbreed@...> wrote:

Mike Battaglia <battaglia01@...> wrote:

> Left channel
>
> 0*(g=Math.pow(2,-3/22)) |
> 2*t*(Math.pow(g,((40+(t>>13)%8)&t>>11)%7))|(t>>8)
> + ((t&t>>5)-5)>>5

Should the last term be in parentheses, so that the
precedence matches the spacing?

No. It was originally a typo but I decided I liked it better that way.

> Right channel
>
> 0*(g=Math.pow(2,-3/22)) |
> 4*t*(Math.pow(g,((40+(t>>13)%32)&t>>11)%7))&(t>>5) +
> (((t&t>>5)-5)>>5)

Well, it has something to do with Porcupine. But I'm not
sure you win on the "less half-assed" than overtones front.
The best simple pieces tend to be the ones that have the
last to do with melody anyway. If we want to impose a
scale, it is possible to use arrays as tuning tables. (Or,
at least, strings to sneak past C expression syntax.)

What does that have to do with percent assed?

Here's something I found with overtones and feedback. The
Forty-Two Melody in a more melodic 15-limit form, then
hacked, ascending, and turning into a drum machine. (ANSI
C99, 8 bit, 8 kHz mono.)

Why not do some of these in the online Javascript interpreter linked to, so
we can all hear the examples done up in the browser and just pass links
back and forth?

The fact that you made fortytwo() a separate function instead of putting it
all on one line is only 35% assed.

-Mike

🔗Graham Breed <gbreed@...>

4/9/2012 6:51:42 AM

Mike Battaglia <battaglia01@...> wrote:

> Well, it has something to do with Porcupine. But I'm not
> sure you win on the "less half-assed" than overtones
> front. The best simple pieces tend to be the ones that
> have the last to do with melody anyway. If we want to
> impose a scale, it is possible to use arrays as tuning
> tables. (Or, at least, strings to sneak past C expression
> syntax.)
>
> What does that have to do with percent assed?

I assumed being half-assed had something to do with how it
sounded. Maybe you're defining the term to make sure what
you said was true. I can easily see how you can build
regular temperaments into a simple expression. I'm
finding it more difficult to see how doing that would
improve the music and you haven't convinced me.

> Here's something I found with overtones and feedback. The
> Forty-Two Melody in a more melodic 15-limit form, then
> hacked, ascending, and turning into a drum machine. (ANSI
> C99, 8 bit, 8 kHz mono.)
>
> Why not do some of these in the online Javascript
> interpreter linked to, so we can all hear the examples
> done up in the browser and just pass links back and forth?

Well, obviously we can't all hear examples like that
because I can't. In this case, the feedback is
specifically something that wouldn't work in that interface
because it's built around expressions without a memory. So
I wrote it in C, which follows the examples I found and got
working. I made it C99 (ISO, not ANSI, sorry) to be
maximally portable.

The drum machine turns into a buzz eventually.

> The fact that you made fortytwo() a separate function
> instead of putting it all on one line is only 35% assed.

That's incidental. The expression could probably be done
in RPM format. I think this will give the melody the way
you do things:

t*((n = 21&t>>11)==1?4:(n>15?n-8:n))

or

0*(n=21&t>>11) | t*(n==1?4:(n>15?n-8:n))

Graham

🔗Mike Battaglia <battaglia01@...>

4/9/2012 8:04:47 AM

On Mon, Apr 9, 2012 at 9:51 AM, Graham Breed <gbreed@...> wrote:
>
> Mike Battaglia <battaglia01@...> wrote:
> >
> > What does that have to do with percent assed?
>
> I assumed being half-assed had something to do with how it
> sounded. Maybe you're defining the term to make sure what
> you said was true. I can easily see how you can build
> regular temperaments into a simple expression. I'm
> finding it more difficult to see how doing that would
> improve the music and you haven't convinced me.

As far as I know, this is the first page to talk about this stuff:

http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html

The whole point was to write pieces of music that are much more
complex than their size would suggest. Once you get the hang of
constructs like the Serpinski triangle (read article above), you can
just use those everywhere to write melodies. And then, you can have
those melodies change via another Serpinski triangle, to make "forms."
By doing stuff like this, you can ultimately come up with a huge piece
of music that's generated from a very small amount of code.

It's partly interesting from a demoscene standpoint, for people who
are trying to make tiny programs that do cool stuff. All of the
Serpinski triangle-based stuff is also interesting to me because it
shows how really complex sounding musical structures can come from
just a few simple rules. For instance, consider this

(t>>1)*((42+4*((t>>15)&(t>>14)))&t>>9)

Which, for those who can use the web app, is this

http://wurstcaptures.untergrund.net/music/?oneliner=(t%3E%3E1)*((42%2B4*((t%3E%3E15)%26(t%3E%3E14)))%26t%3E%3E9)&oneliner2=&t0=0&tmod=0&duration=60&separation=100&rate=11025

This thing arranges the 42 melody out into a larger form, and it does
so by adding a Serpinski triangle to the number 42.

If you run the above but crank the duration up to 300 seconds or so,
you'll hear it play the 42 melody, alter it a bit the second time, go
back to the first one again, and finally add a primitive "cadence" and
come back around. Then it'll do it again, but this time through, there
will be a second ending. Sooner or later it "takes it to the bridge,"
and then does some other stuff, all while continually reprising the 42
melody, etc. Another one is here

(t>>1)*((42+4*((t>>14)&(t>>13)))&t>>9)

If you'd like to make this more fully assed feel free to mess around
with more Serpinski triangles to make the "development" of the piece
more authentic. I don't have time to screw around on bytebeat all day
so I can't do that myself.

> > Why not do some of these in the online Javascript
> > interpreter linked to, so we can all hear the examples
> > done up in the browser and just pass links back and forth?
>
> Well, obviously we can't all hear examples like that
> because I can't. In this case, the feedback is
> specifically something that wouldn't work in that interface
> because it's built around expressions without a memory. So
> I wrote it in C, which follows the examples I found and got
> working. I made it C99 (ISO, not ANSI, sorry) to be
> maximally portable.

Why can't you? What browser are you using?

How about these ones?

http://wry.me/toys/bytebeat/
http://www.bemmu.com/music/index.html

> That's incidental. The expression could probably be done
> in RPM format. I think this will give the melody the way
> you do things:

What's RPM mean?

-Mike

🔗Mike Battaglia <battaglia01@...>

4/9/2012 8:05:18 AM

On Mon, Apr 9, 2012 at 11:04 AM, Mike Battaglia <battaglia01@...> wrote:
>
> As far as I know, this is the first page to talk about this stuff:
>
> http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html
>
> The whole point was to write pieces of music that are much more
> complex than their size would suggest. Once you get the hang of
> constructs like the Serpinski triangle (read article above), you can
> just use those everywhere to write melodies.

My bad, Serpinski triangle is here

http://countercomplex.blogspot.com/2011/10/some-deep-analysis-of-one-line-music.html

-Mike

🔗Petr Parízek <petrparizek2000@...>

4/9/2012 10:13:49 AM

Mike wrote:

> This thing arranges the 42 melody out into a larger form, and it does
> so by adding a Serpinski triangle to the number 42.

I think I can finally see the answer to the "question about life, the universe, and everything." :-D

Petr

🔗Graham Breed <gbreed@...>

4/9/2012 11:55:47 AM

Mike Battaglia <battaglia01@...> wrote:

> It's partly interesting from a demoscene standpoint, for
> people who are trying to make tiny programs that do cool
> stuff. All of the Serpinski triangle-based stuff is also
> interesting to me because it shows how really complex
> sounding musical structures can come from just a few
> simple rules. For instance, consider this

Sierpinski

> (t>>1)*((42+4*((t>>15)&(t>>14)))&t>>9)
>
> Which, for those who can use the web app, is this
>
> http://wurstcaptures.untergrund.net/music/?oneliner=(t%3E%3E1)*((42%2B4*((t%3E%3E15)%26(t%3E%3E14)))%26t%3E%3E9)&oneliner2=&t0=0&tmod=0&duration=60&separation=100&rate=11025
>
> This thing arranges the 42 melody out into a larger form,
> and it does so by adding a Serpinski triangle to the
> number 42.

Right, and what I'm doing is using feedback to generally
mess things up. It's nice that they got this far without
feedback, but it's the obvious way of adding a bit more
variety.

My Sierpinski variation is this:

main(t) {
int x;
for (;;t++) {
putchar(x = t&t>>8);
t += (x>>12^x>>9)&5;
}
}

It runs for over 5 minutes doing different and not
completely weird stuff. Then it gets weird in a way it
didn't start out. I still don't know how to get this
working with the JavaScript expressions.

> Why can't you? What browser are you using?

I got them working by catching NoScript in time. I'm using
one of the now Firefoxes that took away the status bar.

> How about these ones?
>
> http://wry.me/toys/bytebeat/
> http://www.bemmu.com/music/index.html

They work but they're resource intensive. Anyway, I worked
out Frere Jacques:

(t*"0066<<0\x000066<<00<<@@HHHH<<@@HHH\x00HPH@<<00HPH@<<00<<$$0000<<$$000\x00".charCodeAt(t>>11&63))>>3

http://wurstcaptures.untergrund.net/music/?oneliner=(t*%220066%3C%3C0%5Cx000066%3C%3C00%3C%3C%40%40HHHH%3C%3C%40%40HHH%5Cx00HPH%40%3C%3C00HPH%40%3C%3C00%3C%3C%24%240000%3C%3C%24%24000%5Cx00%22.charCodeAt(t%3E%3E11%2663))%3E%3E3&oneliner2=&t0=0&tmod=0&duration=60&separation=100&rate=11025

That shows it's possible to use these techniques to do
non-algorithmic music, and with lots of lines of C the
temptation will be to design your own sequencer and
synthesis engine. These techniques -- overflow oscillators
and Sierpinski gaskets -- may help then, or the extra
effort of a more traditional approach might be no more
work. (That particular example may not require anything
new. It's still quite neat that you can get a tune from so
little code, though.)

The feedback looks like an interesting way of doing
unpredictable, ego-free algorithmic music. It gives new
sounds as well as chopping up the old sounds into new
patterns.

> > That's incidental. The expression could probably be done
> > in RPM format. I think this will give the melody the way
> > you do things:
>
> What's RPM mean?

Sorry, RPN. Reverse Polish Notation.

Graham

🔗Petr Parízek <petrparizek2000@...>

4/9/2012 10:39:07 PM

Graham wrote:

> They work but they're resource intensive. Anyway, I worked
> out Frere Jacques:

Why does it think my browser doesn't support audio?

Petr

🔗Charles Turner <vze26m98@...>

4/11/2012 4:56:40 AM

I may have made some mistakes is converted the escape, but:

http://wurstcaptures.untergrund.net/music/?

oneliner=0*(g=Math.pow(2,-3/22))
| 2*t*(Math.pow(g,((40+(t>>13)%8)&t>>11)%7))
|(t>>8) + ((t&t>>5)-5)>>5

&oneliner2=0*(g=Math.pow(2,-3/22))
| 4*t*(Math.pow(g,((40+(t>>13)%32)&t>>11)%7))&(t>>5) + (((t&t>>5)-5)>>5)

&t0=0&tmod=0&duration=30&separation=100&rate=22050

🔗Graham Breed <gbreed@...>

4/11/2012 12:50:20 PM

Petr Parízek <petrparizek2000@...> wrote:
> Graham wrote:
>
> > They work but they're resource intensive. Anyway, I
> > worked out Frere Jacques:
>
> Why does it think my browser doesn't support audio?

I don't know but it might be a blessing if other sites
can't bleep at you.

My C code is here:

https://bitbucket.org/x31eq/bytebeat

If you don't have a /dev/audio clone, your wave editor of
choice should be able to understand the output.

Graham