code logs -> 2008 -> Sun, 07 Sep 2008< code.20080906.log - code.20080908.log >
--- Log opened Sun Sep 07 00:00:13 2008
00:23 Vornicus [~vorn@ServicesOp.Nightstar.Net] has quit [Ping Timeout]
00:30 Vornicus [~vorn@64.252.178.ns-13935] has joined #code
00:30 mode/#code [+o Vornicus] by ChanServ
00:59 Thaqui [~Thaqui@121.98.137.ns-13370] has left #code [He was a wise man who invented beer - Plato]
01:24 * McMartin whips up a hundred lines or so of example to make sure it actually works. It does, hooray.
01:25
<@McMartin>
Now to see if I remember enough of the STL from memory to do the filter chain.
01:27 * Consul is back...
01:28
<@McMartin>
Give me a second to upload this stuff, then
01:28
<@McMartin>
a "g++ -o DSPTest *.cc" should compile it into something runnable basically anywhere.
01:29
<@McMartin>
http://www.stanford.edu/~mcmartin/DSPTest/
01:30
<@McMartin>
This is actually probably a decent test of your C++-fu, too, actually. This sample code more or less covers all the non-STL important bits of C++.
01:30
<@McMartin>
So if there's anything in those files you don't understand, pipe up so I can explain it.
01:30
< Consul>
Wow...
01:31
< Consul>
I really didn't mean for you to go this far on my behalf...
01:31
<@McMartin>
I've been a pro C++ programmer for the past month now; this was like 30 minutes.
01:31
<@McMartin>
(Feel free to adapt any of this if it turns out handy)
01:31
< Consul>
Well, it certainly runs fine.
01:32
<@McMartin>
And the filter chain thing is a good test of my ability to use STL (and which isn't there yet).
01:32
<@McMartin>
Also, the main program here was kind of what I was originally imagining being a mode of operation for your tools
01:32
<@McMartin>
You'd give it binary files representing the input streams, and it would give you an output stream that you could turn into AIFF or WAV or whatever.
01:33
<@McMartin>
Lists of samples to lists of samples, basically.
01:35
< Consul>
That's exactly what I was hoping for.
01:35
<@McMartin>
I'd gotten the impression that there was also a "generator" aspect which this doesn't touch
01:36
<@McMartin>
Though I *suppose* you could shoehorn it in by having a "transformer" that ignores its input and does whatever it wants.
01:36
<@McMartin>
It's probably better to actually have a generator though.
01:37
< Consul>
A generator would have an input at the sample rate, though: the exact phase at which to generate an output sample.
01:37
<@McMartin>
Hmm. Good point.
01:38
< Consul>
So the input would be phase in radians, and the output would be the sample.
01:38
< Consul>
Of course, beyond that, you'd need a phasor, which generates the phase info.
01:38
< Consul>
That would also have an input, which is the frequency to generate phase info for.
01:39
< Consul>
But that is more of an event or control input than a signal.
01:39
<@McMartin>
Right. Not that you couldn't script such things in a file format of there own (hi there, MIDI Sequence format)
01:39
<@McMartin>
*their
01:40
< Consul>
Actually, things like that is where I want to bring in Lua. :-)
01:40
<@McMartin>
Heh. Fair enough.
01:40
<@McMartin>
Though I would totally squee at a Timidity Of Doom.
01:40
< Consul>
A DSP engine with integrated scripting would be the bomb diggity!
01:41
< Consul>
Oh, what we want to do will go far beyond Timidity of Doom.
01:43
< Consul>
Imagine being able to build a graph of DSP components on the fly, all under the control of scripting...
01:43
<@McMartin>
For something like that - where the components are treated by the implementation as black boxes - you'll need to be pushing pointers to Component around.
01:43
<@McMartin>
More of a breadboard than an IC, as you will.
01:44
< Consul>
Yeah
01:45
< Consul>
Mind if I pass the link to your code to my project partner?
01:45
<@McMartin>
Not at all, but hang on a sec first so I can get this other bit working first
01:45
< Consul>
'k
01:45
< Consul>
I'll BRB, actually...
01:46
<@McMartin>
Especially if scripting is your goal, the FilterChain thing is much closer to what you'll eventually need, so the sample code is a bit misleading
01:49
<@McMartin>
There we go
01:50
< Consul>
The graph will also need to be able to handle serial and parallel paths, with splits and merges.
01:50
< Consul>
I'm thinking a matrix would do the job.
01:50
<@McMartin>
Well, that really means Component.h needs a different top-level class for each "kind" of black box.
01:50
<@McMartin>
Essentially, in that sample code, simplelinear is the "ICs", and blackboxlinear is the "breadboard".
01:51
<@McMartin>
You can stick ICs on the breadboards, or breadboards on the breadboard, but you'd need different kinds of Black Box depending on what the, er, pinouts look like.
01:52
<@McMartin>
OK.
01:52
< Consul>
Well, if every higher-order component, like a filter, is made up of lower-order components, like delay lines and integrators, then ultimately, everything is a black box, one in, one out.
01:52
<@McMartin>
Same URL, main.cc has changed and there's two new files.
01:52
<@McMartin>
Right, but it sounds like there'd be stuff in the middle that would look a little different.
01:53
<@McMartin>
But yeah, that's domain-specific stuff.
01:53
<@McMartin>
e.g., your job
01:53
< Consul>
Heh
01:53
<@McMartin>
Also stoked because I mostly remembered how to do std::list<> right with only one error the compiler had to catch.
01:53
< Consul>
Shoot, if we can break everything down into sets of black boxes, this might actually work!
01:54
<@McMartin>
So yeah, do check out the new main.cc for "whipping up a custom filter at run time from other components".
01:54
<@McMartin>
d2_2
01:55
<@McMartin>
This also means, as I understand it, that you also have a much more limited bit of C++ you have to personally deal with
01:55
<@McMartin>
The stuff you were doing in Python basically translates to various different subclasses of DSP::Component, right?
01:55
< Consul>
Oh, the python thing was just a brute-force attempt to make a cubic-interpolated table.
01:56
< Consul>
No classes were used.
01:56
< Consul>
That would be another black box, actually, with one in and out.
01:56
<@McMartin>
Which means that if you translated it into C++ as an subclass you'd be able to drop it righ tin.
01:57
< Consul>
Pretty much, probably. I'd like to try to clean up the math, though.
01:57
<@McMartin>
Good times.
01:58
<@McMartin>
Anyway, it looks pretty likely that this design will give you the division of labor that you were trying to sort out when you first joined.
01:59
< Consul>
I'm actually kinda annoyed that I didn't think of the black-box approach to begin with. :-P
01:59
< Consul>
But yes, I think this will work well.
02:00
<@McMartin>
There's a famous adage to the effect that a problem well-stated is a problem half-solved.
02:02
< Consul>
I'm just hoping that I can re-state it just as well in this email I'm writing to our list (which goes out to all of two other people, BTW).
02:20
< Consul>
Ack, can someone give me voice, please?
02:21 mode/#code [+o Consul] by McMartin
02:21
<@Consul>
http://www.native-instruments.com/index.php?id=reaktor5basics&L=1 -- Here's an example of a graph-based DSP builder application, which is something we'd ultimately like to make.
02:21
<@Consul>
Thanks
02:21
<@Consul>
http://www.native-instruments.com/index.php?id=coretechnology&L=1 -- Here's the lower-level of Reaktor.
02:22
<@Consul>
The pictures should help show what I'm on about.
02:24
<@McMartin>
So yeah, basically a Circuit CAD kind of thing, but with way more dials.
02:25
<@McMartin>
Eventually you're probably going to end up with a more complicated basic component, because you'll want your top level view to be not merely "signal in, signal out" but "signal in, signal out, and a bunch of dials"
02:25
<@Consul>
With a more limited problem domain (audio), yeah.
02:25
<@McMartin>
Nod
02:25
<@Consul>
Well, controls (dials) will be boxes with an input and output as well. :-)
02:26
<@Consul>
Just that the input comes from OSC instead of some other box.
02:26
<@McMartin>
If I were running such a project, I'd probably start with monolithic "IC" devices and then start refactoring to make more of it manageable and buildable at run time.
02:26 Reiver [~reaverta@Admin.Nightstar.Net] has quit [Ping Timeout]
02:27 DiceBot [~Reiver@Nightstar-22137.xdsl.xnet.co.nz] has quit [Ping Timeout]
02:27
<@Consul>
Well, A Reaktor-like application is something we want in the future.
02:28
<@Consul>
We're aiming to make a sampler in the shorter term.
02:28
<@Consul>
But they'll both have the same DSP core, no doubt.
02:28
<@Consul>
I also want to make a guitar amp sim.
02:28
<@McMartin>
Nod nod
02:29
<@McMartin>
What I mean is, if you don't immediately need the all-singing, all-dancing script-controllde edition you can get stuff out the door faster that does cool stuff.
02:29
<@Consul>
I am worried that some of our black boxes will need more than one input and/or output. Especially to represent some things graphically, like multipliers and adders.
02:29
<@McMartin>
I bet the amp could be a monolith with dials, frex.
02:29
<@McMartin>
Yeah
02:29
<@McMartin>
Or flangers (?).
02:30
<@McMartin>
That's why I named my classes "Linear", though.
02:30
<@Consul>
Oh, we could have a different base class for, say, two in one out?
02:30
<@McMartin>
Yeah.
02:30
<@McMartin>
Different class, of course, because it's not drop-in replacable
02:30
<@McMartin>
But that's all the stuff that would go in component.h
02:31
<@McMartin>
More than one out is a little messier
02:31
<@Consul>
Yeah, I don't think we'll need that.
02:31
<@McMartin>
I think I'd do that with "n in, ZERO out" as the process(), and then "current_out_1" and "current_out_2" or w/e as the readers.
02:31
<@Consul>
Some breadboards will have more than one out, but that's just how we're using the black boxes within.
02:32
<@McMartin>
Basically, your top level classes mean "anything that inherits from this class could replace anything else that does so without rewiring."
02:32
<@McMartin>
"It might not *do* what you want anymore, but the wiring is still sensible"
02:32
<@Consul>
I'm trying to fit all of this into my email...
02:32
<@McMartin>
So a one-in-one-out can't replace a two-in-one-out component, so, different base classes
02:33
<@McMartin>
There are horrific things you can do with templates to have this all in one nominal class, but please don't.
02:33
<@Consul>
I doubt I have the skill to know what. :-P
02:33
<@Consul>
Anyway, I was about to say...
02:33
<@McMartin>
(Then you'd have, say, a Component<4, 2> class that was 4-in, 2-out)
02:33
<@Consul>
I have some ideas on how to process audio non-linearly to try to re-create all of those spacey 70s sounds.
02:34
<@McMartin>
"Linear" is probably the wrong word there
02:34
<@Consul>
Oh, I think we'll avoid that.
02:34
<@McMartin>
I meant just "you could arrange them in a line"
02:34
<@Consul>
I know. :-)
02:34
<@McMartin>
Not "this is a function of the form Ax+B"
02:34
<@Consul>
We have five different definitions of the word linear floating around.
02:35
<@McMartin>
When I said "wrong word there" I meant in my sample code
02:35
<@Consul>
In the audio world, "non-linear" basically means distortion.
02:35
<@McMartin>
Nod
02:35
<@McMartin>
Though I guess that does match the "not an Ax+B function" =)
02:36
<@McMartin>
... along with pretty much everything else that isn't amplification.
02:42
<@Consul>
I think we could get away with 1 in:1 out when we're coding our processes directly.
02:42
<@McMartin>
If so, all the better
02:42
<@McMartin>
But if you can't, it doesn't end up being fatal.
02:42
<@Consul>
It's when we need to graphically represent things like adders and multipliers that we need the different base class.
02:43
<@Consul>
So people can drag a multplier onto the breadboard they're working on.
02:43
<@McMartin>
Yeah. I'm thinking one base class for each pinout.
02:44
<@Consul>
Well, email sent.
02:45
<@Consul>
http://groups.google.com/group/nuclear-project/browse_thread/thread/ec516ff2e335 74da -- Last email in the thread.
02:46
<@McMartin>
Looks about right.
02:46
<@McMartin>
There's a couple of minor caveats
02:46
<@Consul>
He'll look at the code.
02:46
<@McMartin>
The abstraction won't be optimized away from the breadboards, just from the "black boxes".
02:46
<@Consul>
Oh, did I miss that part?
02:47
<@McMartin>
I think so
02:48
<@McMartin>
Essentially (and this is really Too Much Detail, but what the heck, I'm a compilers guy) when you have a local or member like "AnyDelay ad(5)", when it sees "ad.process(3)", it'll be smart enough to directly call AnyDelay::process as a function call
02:48
<@Consul>
Okay, I added a correcting email.
02:49
<@McMartin>
In FilterChain, when it's going through it has to look at each entry and work out what it is and thus what to call
02:49
<@McMartin>
(Which is, admittedly, like two additional pointer lookups, so in practice, whatever)
02:49
<@McMartin>
(Which is why most other languages don't bother with this optimization explicitly)
02:51
<@McMartin>
Er, argh
02:51
<@McMartin>
I was unclear
02:51
<@McMartin>
Blackboxes can be treated as components so you can build them out of each other
02:52
<@McMartin>
Argha gain
02:52 Doctor_Nick [~Doctor_Ni@Nightstar-12626.tampfl.fios.verizon.net] has quit [Operation timed out]
02:52
<@McMartin>
the "takes great advantage of the strengths of C++" part only applies to the ICs, not the breadboards
02:52
<@McMartin>
Breadboards can include other breadboards.
02:52
<@McMartin>
In fact, blackboxes can include breadboards
02:52
<@McMartin>
Too many BBs.
02:52
<@Consul>
Darn, I'm going to have to send another email.
02:54
<@McMartin>
I should probably look into dinner soon
02:54
<@McMartin>
Anyway, glad to be of service
02:54
<@Consul>
Yes, thank you much.
02:55
<@Consul>
I just sent another email saying to ignore my correction. :-/
02:56
<@Consul>
Enjoy your dinner.
02:57
<@Consul>
I think I'll go get a popsicle.
02:57 gnolam [lenin@Nightstar-1382.A163.priv.bahnhof.se] has quit [Quit: Z?]
02:59 Doctor_Nick [~Doctor_Ni@Nightstar-12626.tampfl.fios.verizon.net] has joined #code
02:59 Attilla [~The.Attil@92.22.195.ns-12776] has quit [Quit: <Insert Humorous and/or serious exit message here>]
03:18 Derakon [~Derakon@Nightstar-4879.hsd1.ca.comcast.net] has joined #code
03:18 mode/#code [+o Derakon] by ChanServ
03:29 androsch [~androsch@Nightstar-3933.pools.arcor-ip.net] has quit [Connection reset by peer]
05:27 DiceBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has joined #Code
05:28 Reiver [~reaverta@Nightstar-9734.xdsl.xnet.co.nz] has joined #Code
05:28 mode/#code [+o Reiver] by ChanServ
05:39 Thaqui [~Thaqui@121.98.137.ns-13370] has joined #code
05:39 mode/#code [+o Thaqui] by ChanServ
05:41 Reiver [~reaverta@Nightstar-9734.xdsl.xnet.co.nz] has quit [Quit: Changing servers]
05:41 Reiver [~reaverta@Admin.Nightstar.Net] has joined #Code
05:41 mode/#code [+o Reiver] by ChanServ
06:19 Derakon [~Derakon@Nightstar-4879.hsd1.ca.comcast.net] has quit [Quit: Derakon]
06:34 Thaqui [~Thaqui@121.98.137.ns-13370] has quit [Quit: He was a wise man who invented beer - Plato]
07:38 AnnoDomini [AnnoDomini@Nightstar-29657.neoplus.adsl.tpnet.pl] has joined #Code
07:38 mode/#code [+o AnnoDomini] by ChanServ
07:51 Doctor_Nick is now known as drnick
08:57 RBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has joined #Code
08:58 DiceBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has quit [Ping Timeout]
08:58 Reiver [~reaverta@Admin.Nightstar.Net] has quit [Ping Timeout]
08:58 Thaqui [~Thaqui@121.98.137.ns-13370] has joined #code
08:58 mode/#code [+o Thaqui] by ChanServ
08:59 RBot is now known as DiceBot
09:00 You're now known as TheWatcher
09:05 Reiver [~reaverta@Admin.Nightstar.Net] has joined #Code
09:05 mode/#code [+o Reiver] by ChanServ
10:11 Attilla [~The.Attil@92.22.195.ns-12776] has joined #code
10:11 mode/#code [+o Attilla] by ChanServ
10:36 gnolam [lenin@Nightstar-1382.A163.priv.bahnhof.se] has joined #Code
10:36 mode/#code [+o gnolam] by ChanServ
11:37 Thaqui [~Thaqui@121.98.137.ns-13370] has left #code [He was a wise man who invented beer - Plato]
12:18
<@Reiver>
hey, gnolam. How goes the work on the island generator?
12:50 organmonkey [joseph@Nightstar-6872.dynamic.tiki.ne.jp] has joined #code
13:02
<@gnolam>
Haven't really had time to work on it lately. :-/
13:02
<@gnolam>
But I'll see what I can do tonight.
13:14
<@gnolam>
But I won't promise anything though.
13:16 Attilla_ [~The.Attil@92.22.195.ns-12776] has joined #code
13:17 Attilla [~The.Attil@92.22.195.ns-12776] has quit [Ping Timeout]
13:26 Attilla_ is now known as Attilla
13:37 Brother_Willibald [lenin@Nightstar-1382.A163.priv.bahnhof.se] has joined #Code
13:37 gnolam is now known as NSGuest-927
13:37 Brother_Willibald is now known as gnolam
13:37 NSGuest-927 [lenin@Nightstar-1382.A163.priv.bahnhof.se] has quit [Ping Timeout]
13:40 RBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has joined #Code
13:41 DiceBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has quit [Ping Timeout]
13:42 RBot is now known as DiceBot
13:53 RBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has joined #Code
13:55 DiceBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has quit [Ping Timeout]
13:55 Reivles [~reaverta@Admin.Nightstar.Net] has joined #Code
13:55 RBot is now known as DiceBot
13:56 Reiver [~reaverta@Admin.Nightstar.Net] has quit [Local kill by Reivles (sod off ghost)]
14:03 Reivles is now known as Reiver
14:43 organmonkey [joseph@Nightstar-6872.dynamic.tiki.ne.jp] has quit [Client exited]
17:35 RBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has joined #Code
17:36 Reiver [~reaverta@Admin.Nightstar.Net] has quit [Ping Timeout]
17:36 DiceBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has quit [Ping Timeout]
17:37 RBot is now known as DiceBot
17:38 Reiver [~reaverta@Admin.Nightstar.Net] has joined #Code
17:38 mode/#code [+o Reiver] by ChanServ
18:21 AnnoDomini is now known as Elizabeth
18:22 Reivles [~reaverta@Admin.Nightstar.Net] has joined #Code
18:22 EvilDarkLord is now known as Rico
18:22 Reiver [~reaverta@Admin.Nightstar.Net] has quit [Ping Timeout]
18:37 DiceBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has quit [Ping Timeout]
18:38 Reivles [~reaverta@Admin.Nightstar.Net] has quit [Ping Timeout]
18:44 Reiver [~reaverta@Admin.Nightstar.Net] has joined #Code
18:44 mode/#code [+o Reiver] by ChanServ
18:45 DiceBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has joined #Code
18:51 gnolam [lenin@Nightstar-1382.A163.priv.bahnhof.se] has quit [Ping Timeout]
18:57 gnolam [lenin@Nightstar-1382.A163.priv.bahnhof.se] has joined #Code
18:57 mode/#code [+o gnolam] by ChanServ
19:27
<@McMartin>
Yay, the game that used my conversation extension won IntroComp this year~
19:29
<@Vornicus>
woot
19:32
< GeekSoldier>
grats!
19:35
<@Consul>
I had to google IntroComp, but good going!
19:39
<@McMartin>
Heh
19:39
<@McMartin>
That means you should have turned up my actual claim to fame therein~
19:40
<@Consul>
I found the site, but didn't see the name you use in here...
19:40
<@Consul>
Or I didn't look hard enough.
19:40
<@McMartin>
Oh
19:40
<@McMartin>
I was the first person to complete an actual full-length game in the Comp, back from '05.
19:40
<@Consul>
Oh, I found the 2007 page
19:40
<@McMartin>
http://www.ifwiki.org/index.php/IntroComp
19:41
<@McMartin>
Since Thornton's FotR was a ROM hack on the Atari 2600 I consider mine the first real completed IntroComp game. =P
19:42
<@Consul>
Ah, I've seen this page before...
19:42
<@Consul>
I also remember that distinct art style...
19:42
<@McMartin>
Yes.
19:42
<@McMartin>
That's Josh Phillips.
19:43
<@McMartin>
Of Avalon, er, fame.
19:43
<@Consul>
Indeed.
19:44
<@Consul>
I seem to remember being the one who founded his channel on this network. I then turned it over to him when he showed up.
19:44
<@McMartin>
Possible.
19:45
<@McMartin>
I don't think I was a Locust Of #avalon until a while after the Nightstar move.
19:45
<@McMartin>
Anyway
19:45
<@McMartin>
Mountain View Art and Wine Festival
19:45
<@McMartin>
Later, all
19:45
<@Consul>
Heh. Have fun.
20:13 * gnolam hands McMartin a beret.
20:35 Rico is now known as EvilDarkLord
20:35 Elizabeth is now known as AnnoDomini
21:00 Vornicus is now known as Finerty
21:01 DiceBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has quit [Ping Timeout]
21:02 Reiver [~reaverta@Admin.Nightstar.Net] has quit [Ping Timeout]
21:08 Reiver [~reaverta@Admin.Nightstar.Net] has joined #Code
21:08 mode/#code [+o Reiver] by ChanServ
21:10 DiceBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has joined #Code
21:20
<@gnolam>
Reiver: nope, no coding on the island generator tonight. Too tired.
21:21
<@gnolam>
Been comatose on the couch since I got home.
21:48 Reiver [~reaverta@Admin.Nightstar.Net] has quit [Ping Timeout]
21:50 androsch [~androsch@Nightstar-4653.pools.arcor-ip.net] has joined #code
21:53 Finerty [~vorn@Admin.Nightstar.Net] has quit [Connection reset by peer]
21:54 Finerty [~vorn@64.252.178.ns-13935] has joined #code
21:54 Reiver [~reaverta@Admin.Nightstar.Net] has joined #Code
21:54 mode/#code [+o Reiver] by ChanServ
21:59 GeekSoldier [~Rob@Nightstar-8573.midstate.ip.cablemo.net] has quit [Connection reset by peer]
21:59 GeekSoldier [~Rob@Nightstar-8573.midstate.ip.cablemo.net] has joined #code
22:49 Frechemaus [~Frechemau@Nightstar-2016.adsl.alicedsl.de] has joined #code
23:18 AnnoDomini [AnnoDomini@Nightstar-29657.neoplus.adsl.tpnet.pl] has quit [Quit: Out of the night and into the fight it's BIXBY!!]
23:48 Frechemaus [~Frechemau@Nightstar-2016.adsl.alicedsl.de] has quit [Quit: ]
23:55 You're now known as TheWatcher[T-2]
23:57 You're now known as TheWatcher[zZzZ]
23:59 DiceBot [~Reiver@Nightstar-9734.xdsl.xnet.co.nz] has quit [Ping Timeout]
--- Log closed Mon Sep 08 00:00:22 2008
code logs -> 2008 -> Sun, 07 Sep 2008< code.20080906.log - code.20080908.log >