Darwin: Okay. Today I have the great pleasure of meeting somebody who I've wanted to talk to for a while. We've been working on getting our schedules aligned, and it looks like it came together. His name's James McCartney and most of you will know him as the father of SuperCollider. But he's had really quite a career in computer music and I'm really happy to get a chance to talk to him. So with no further ado, let's talk to James. Hey, how's it going?
James McCartney: It's going well, yeah.
Darwin: Thanks so much for taking the time to have this chat. Why don't we kick this off by just having you talk a little bit about where you're at right now?
James: Well, I retired from Apple two years ago and I'm working on sort of my personal successor to SuperCollider. I mean I'm not making it as a product and I'm not making it as even something that I care too much about satisfying users other than myself. So whether or not someone else will want to use it is a question. But yeah, that's what I've been doing. And also I've been playing a piano that I have, which is very unusual. Has a Jankó keyboard, which is whole tone-based.
Or it's isomorphic. So basically, there's rows of whole tone notes that are offset by a semitone. Well, I have some MIDI of similar kinds of things here. These are MIDI keyboards that are in the same layout, but it doesn't look the same as my piano layout exactly. But it allows me to play with the same fingering, any key or pitch set, and everything can be mirrored around any point. Also, the width of an octave is a little bit narrower, so you can stretch wider. It has a lot of advantages that I find very fun to play with.
Darwin: Wow, I'm going to want to talk to you more about that. I can't even imagine. So you're saying you have an acoustic piano with one of these isomorphic...
James: Von Jankó keyboard is what its... It was invented in the 1880s by a guy named Paul von Jankó. And for a while it was thought that it was going to replace the regular piano. Franz Liszt knew about it and there were comments by people that would say they thought this would replace the keyboard within... The regular seven/five keyboard within 50 years. And there were 50 manufacturers for a while - of this kind of piano - up until about 1921 when they all sort of died out.
Darwin: Wow, I had no idea. That's amazing. It's interesting because I've had a chance to talk to a lot of people. And every once in a while, a whole class of instruments, someone will refer to that as something they're into. And it's stuff I've never heard of before. I had no idea that there were acoustic instruments that were developed with these keyboards. It's wild.
James: It's a lot of fun to play because you can just do things that would have required unbelievable amounts of practice with the regular keyboard, but you can just sort of blow them off really fast on this keyboard so...
Darwin: Yeah. Well I know that for a while I was using I was using the Snyderphonics Manta, which has just kind of an arbitrary...
James: I have one of those.
Darwin: Yeah. And I had mapped it out to have a isomorphic layout and again...
James: Well it's very similar to the Manta. If you took the Manta and you made horizontal whole tones and the diagonal up to be a semitone, that's the von Jankó.
Darwin: Oh. Well, that makes a lot of sense. Because, yeah, then you learn cluster shapes and stuff, which are just really easily translated to any key or any chord. So what is your involvement right now with SuperCollider?
James: Well, I'm not involved in SuperCollider right now. So when I went to Apple, the lawyers there sort of made clear to me that I was no longer allowed to contribute to open source software. I'm not sure if since they had to start hiring machine learning people and the machine learning people as a group would not sign on to any company that had that kind of restriction. So they've had to loosen up a bit, at least for the machine learning people. And I don't know to what extent they're willing to loosen up for other kinds of groups. But at least for me, when I signed on in 2002, I had to stop contributing to SuperCollider and so I was out of it for years. And then in the meantime, I sort of just decided I've learned a lot in 20 years and I want to do something different now. So yeah, I think I can do something. I won't say better but just suits the things I want to do better now.
Darwin: Well, what are those kind of things? What are the angles that you would like to now dive more deeply into?
James: Well, there's a number of things that I find just... They're just kind of workflow things... Well, one thing is something like Faust, where you can compile unit generators instead of having them pre-compiled like you'd have in many systems though. So rather than having a fixed set of unit generators that are pre-compiled, you just write the script and it compiles. In SuperCollider there's something called SynthDefs, which are basically graphs of unit generators that get assembled on the fly, but they're assembled out of pre-compiled bits. I'm doing the same thing now but I'm compiling the whole thing every time you write the script out. So, that's one thing. Also, my sort of preferences in programming languages has shifted a bit more towards functional styles. And I'm really a fan of APL, which is a language about array processing. Often in APL, you can write a lot of programs in a line or two that would have taken many more lines. So, I really like this kind of brief way of expressing things. So, I've incorporated some of those ideas into what I'm doing now.
Darwin: That's really interesting. I remember the first time I saw APL code, it looked like somebody actually trying to create hieroglyphics for programming. Yeah, I know people that use those kind of languages. For them, there's a connection to the symbolic nature of it so that they can consume and see code in larger chunks, because it has that kind of sense to it.
James: Yeah, I'm not going with the whole... It doesn't look like Chinese. ADL sort of looks like this hieroglyphics. But, I'm still using normal ASCII keyset. You know the guitar player Stanley Jordan, who had a big hit with Eleanor Rigby? Well, he studied actually with Paul Lansky at one point and he wrote papers on using APL to compose music. And you can find that at the ACM - Association for Computing Machinery. But they're about using APL to compose music. So, those are interesting. I actually wrote him an email and he wrote back very enthusiastically telling me about a MIDI sequencer he had written in APL, so...
Darwin: Unreal. Yeah, that's wild.
James: I've been interested in those kinds of ideas. I know I think of it as composing functions to compose music, so...
Darwin: Sure, right. That's cool. One of the things I like doing on my podcast is talking to people about kind of their background and how they got to be the creator, artist, or combination often, that they are. And I'm kind of curious, what is your background? Because it's interesting to me, you have a very computer science orientation towards your work in terms of language development. And you were one of the first people that I felt really embraced a client server connection in a musical environment. Also, you really do have a lot of the computer music and then actual music background that's combined, too. So I'm kind of curious where you're coming from. What's your background and how did you get to the point... Because I first ran into you as the developer of Pyrite, which was a language element - an object that implemented a language inside of Max. But there's obviously a world of work that you did before then. What is your background? And how did it lead into that?
James: Well, I guess if you start at the very beginning, my mom bought Switched-On Bach. Well, that was my first introduction to electronic music, but I thought it sounded interesting. But it didn't sort of turn me on yet. Sort of as Morton Subotnik called it, it was new old music. Then a friend of mine said, "You should come to this movie called Sorcerer, you're gonna like the soundtrack to it." And so I went and I did like the soundtrack which was by Tangerine Dream. And that was where I first heard that you can use electronics to do all kinds of new things that have never been sort of heard before. And so I got Carlos' Secrets of Synthesis. It was I think a three LP set. I sort of learned how to connect modules, synth modules together, but I didn't have a synthesizer at this time. But I sort of learned what the basics were and then as soon as I was able to at the university to take the electronic music course, I took it.
They had a studio in - it was way off. It was away from the music building in the education annex and there was a little crypt up at the very top of it. It had an old Moog that didn't work anymore. And they had some Wavemaker synths and stuff like that. I made my first piece there. And then the next year, they moved into a big, fancy facility with a huge E-mu and a Fairlight. So I got to learn how to patch a synth and make all kinds of sounds with the E-mu and do the digital stuff with the Fairlight.
And so that's how I got experience in making electronic music. But in the meantime, I was getting my computer science degree. And then after I got out, I worked for IBM for a while. And then I worked for the Astronomy Department at the University for a while. And actually at the Astronomy Department, my job was to maintain this little programming language that one of the professors had written that was used to analyze the data that came back from the Hubble Space Telescope, but it was a little programming language. So that's my first introduction to writing a compiler and that kind of thing. So I learned both electronic music and compilers.
Darwin: Right, right. Yeah, I was gonna say in CS studies you're always sort of compelled to build a compiler. But normally, you never do that, or even think about doing that again. Right? It's clear that that was something that just really resonated with you.
James: I guess. I mean, I think once I saw Max for the first time and got involved in that, and I started writing little objects. And then I sort of figured that well, Max is, for me, it was really good as a UI builder tool and IO for MIDI and stuff like that. But my ideas for making compositions required more kind of sequential code. And I wanted to do something that I could express in an algorithm more easily than I could with patching up Max objects, which I had tried to do. I made some Max objects that were sort of based on a pull model, instead of a push model, which was a little bit hard to do in Max. Then I just decide, well, I'm just going to write a little scripting language so, that was Pyrite.
Well first off, before Pyrite, I wrote two other things. I wrote something that actually was called Xcode, but it was a little C-like scripting language. But I didn't find it flexible enough so I kind of abandoned that one. And I also wrote another little score language called Scrypt, S and then the crypt, like cryptography, because I thought it was a cryptic scripting language but... And I did a lot of things with that. I had a Nintendo Power Glove, and I use this script language to program music that I would do with the Power Glove.
But it was algorithmic score based. I mean, it had things you could do it at similar to the things. You could do an HMSL, which is you have these trees of events and they can sort of add random branches. And basically, there's a score there, but it's got semi-random elements in it - or choosable elements, depending on what you're doing with your interactive. With my glove, I could sort of choose a branch of the score to go down. But then I wrote Pyrite because I was still searching for something more general to be able to do list operations on lists and that what Pyrite could do.
Darwin: Yeah, I think people coming to something like Max with a programming background, one of the things that actually is difficult is to say... There's a certain structure that comes when I'm trying to do, you mentioned it like algorithmic behaviors or algorithmic functions or whatever. You're used to this sort of way of dealing with it as a block of text or as a sequential set of steps. Especially a set of steps with a lot of conditionals, that isn't very convenient in a graphics language.
James: There's some things I found a bit hard in Max was things like the data structures like the call object, which is a data structure that's sitting in one place and anything that wants to interact with it has to send a wire to it and somehow get the result back out from it, instead of passing it around and being able to use it everywhere.
So, that was one thing. And then the other thing is about Pyrite as it had closures like Scheme. So you could write a function and then pass the function around as a value. In a Max, if you write a little patcher, you can't send the patcher down a wire and have things send values into it and get them back out. So that was the kind of things that I was trying to figure out how to do and so Pyrite was my solution to that.
And then that actually really helped my Max patches a lot. It cleaned them up hugely, because the patch would just be the UI. And all the logic could be just in the Pyrite object and it made things on the Max level a lot easier to understand. And not sort of lost in a big mass of wires.
Darwin: Right. Now, one of the things is most of what you're talking about here though, it's around the generation of notes or generation of events. But as you went from Pyrite to SuperCollider, there's a whole world of sound generation and in synth development as well. Where did that part of it come from? Because that's a big leap. It's a big leap going from generative event creation to synthesis and all of the synthesis options that you were bringing to the table.
James: Yeah. Well, okay. So, back in 1986, I wrote... Well, actually, when I was in high school, I knew basic at that point. And I heard electronic music, I hadn't gotten a college yet. And so I wrote out on a sheet of paper, a list of all the function calls I would need to make a modular synthesizer. This was in basic. Of course, there was no way that would be realizable because it was basically just not the right language to do that kind of thing in. But I had the idea back in high school about what I needed to do to make a modular synthesizer in software.
This was '86, was four years out of college, I got a Mirage keyboard, which is a sampler. The Ensoniq Mirage. And I wrote a piece of software that would generate... It was a modular synthesizer, where you had modules, I think there was maybe eight modules and they had jacks and patch cords, and then you could define - well, of the eight modules, you could choose what they were, the oscillators and the filter or anything else. And then you patch them together, and it would compute the sample, and then you could load that into the Mirage and play that sample. I had tried to sell it, I sold two copies. One was to Mark Polishook. And one was to Ivan Tcherepnin, who was Serge Tcherepnin's brother, who was a teacher at Harvard. And I got to talk to him on the phone. So that was worth it. But I got to talk to Ivan Tcherepnin on the phone.
And then I wrote another sort of follow on to that, which is called Synthomatic which was another software synthesizer. And for a while, the people who produce Deck... What was that company's name? They took an option to publish that software, but then they got bought by Macromedia so that fell through. That software apparently got out to Oberlin, someone had taken it to Oberlin. And then Curtis Rhodes sent me a letter, he apparently got it somehow and sent me a letter saying, "Oh, you should do more work on this software - develop it." And so I had this Synthomatic software and I had the Pyrite language. Then I was using Synthomatic to do a granular piece for a dance performance that was happening in Austin where I live.
And it was taking a long time to generate the sound files because it was really slow. I had a Mac IIci and the floating point in it was terribly slow. So on the day that the Power Mac came out, this is while I was trying to do this music for this dance performance, I went and bought the fastest one. And I took it home and recompiled my code and it ran 32 times faster. And I was thinking okay, now it's running faster than real time. So I immediately had the idea, I'm going to take Pyrite and I'm going to take Synthomatic and I'm going to put them together and make a real time synthesis scripting language. That was version one of SuperCollider. So that's how SuperCollider happened.
Darwin: That really helps stitch all of that. That makes a lot of sense. Now, one of the things that when I first tried working with SuperCollider, one of the things that surprised me - or that was a new experience for me - was sort of the client server separation. Was that in there from kind of version one or is that something that was...
James: No, that was version three actually. Okay, so version one was kind of basically Pyrite with synthesis. And then version two was Smalltalk with kind of a Ruby syntax, but I didn't know Ruby yet. Just sort of coincidentally have this similar syntax.
So but version two wasn't client server. The scripting language ran in the real time thread, generating new synth voices and things like that in real time. Later, I just came up with a client server model later. And it was sort of an experiment, but I just pushed it out. Because I had tried one other experiment that I'd never published, which may be the way I should have gone, which is I use SuperCollider to generate code for the SynthDefs, basically were generated C++ code, compiled.
That was before Faust but it was generated from SuperCollider code. But the problem is that the C++ compiler was so slow. It just killed interactivity. I mean, you'd write a script and then you'd say play and then you had to wait for 45 seconds or something for it to compile. And it was just not fast enough to get a turnaround so you could hear what you're wanting to. Of course, it was a lot better than the days when you had to wait a day.
It wasn't like turning a knob, which is what I wanted it to be. That kind of latency. You hit submit for your program, and then it's just ready within a second. And so I didn't pursue that further. I gave a paper at ICMC about it but I never did anything more with it. Even though I did the server model and the server model was so I could get the language out of the real time thread so that there weren't pauses because of the language running.
Darwin: Right. And it was also really flexible way of kind of doing multi-threading without having to over-complexify the codebase, I imagine.
James: Yeah, well, one thing that it enabled was having remote playing, because you could put the server on a machine over the network and things like that, so.-----
Darwin: Yeah, well, it's funny too. Because in a way, it's almost hard to remember back in those days, but you talk about how you got the fastest machine and all of a sudden things are running 32 times faster. I think it's hard for us to remember the days when the changes from model to model on machines were so huge, or the changes in compilers were so amazing. I remember there was a time where multi threading in any kind of audio application was just not even a reasonable consideration, just because thread-swapping and data sharing was so incredibly slow.
James: On Mac OS, you didn't have it...
Darwin: Didn't even have it, right. Yeah.
James: You're running in a callback, it was called by the OS or during an interrupt.
Darwin: It's hard to even imagine that now. So at some point, you moved to Apple. What was sort of the intervening steps before you got to Apple? You were working in the astronomy thing, did you...
James: Well, I worked on the Astronomy Department and then I started contracting. I left the Astronomy Department, I guess in 95 maybe or something. And I started contracting for Level Control Systems, which was a company that got acquired by Meyer Sound ultimately. When I was there, we were working on digital audio mixers that were used for the casino showrooms and cruise ships and big churches and things like that. Places where they needed large sound systems. It was basically a 128 x 128 mixing matrix.
So, you would buy these boxes and they would implement one tile of the matrix basically, an 8 x 128 slice of this matrix, and you could stack as many of them as you wanted. It would do five band EQ and delay on every input and output. So I wrote the software for authoring the queues for running a show on one of these mixers. And it also had a feature called space maps, which was a triangular mesh of speakers and it could move sounds through these triangular meshes. Cirque du Soleil Mystère show, we used it and it was used in a number of shows and it was used at the Hollywood Bowl, in a lot of places.
But so yeah, I worked for that company. And then I did a short contract with Arboretum Systems, which was a plugin manufacturer, made something called Hyperprism. And then I started selling SuperCollider, about 1996. That's when I started selling SuperCollider and in parallel with doing contracting for these companies. And then in 2000, I was only doing SuperCollider and that lasted two years. And I got married. And also I decided, well, I need to get a real job because I'm married now. And also if I work too many years just selling my own software and I ever want to get a job, they're gonna go, "Well, what did you do during these years?"
So I decided that I needed to get a job. So Austin is a great place if you want to live very cheaply, because I was living really cheaply. My mortgage was $700 a month I think. I was able to live really cheap. But SuperCollider was making some money, but I wasn't getting rich or anything. And Apple gave me an offer that was really good compared to what I was making. So I went with them. And I got a chance to work on a really great audio system.
Darwin: How much can you tell us about the work that you did at Apple?
James: So I worked in the Core Audio group, which is a group which is responsible for the operating system services for supporting audio apps. So I didn't have anything to do with iTunes or Logic. I mean, they were sitting on top of us, but I worked on things like the Audio Toolbox, which is a framework for doing encoding and decoding of various formats of audio and reading and writing files, and things like that. And sample rate conversion. So I worked on those bits of software, and I wrote a number of audio units. And I worked on other things that are either not interesting at all or cannot be talked about.
Darwin: Okay. All right. Well, we'll leave those on the table. Now it's interesting though, I would say that Core Audio is one of the secret power tools of computer music. Every once in a while I find myself compelled to use a Windows machine and when I do, I realize how difficult it is to have an audio system that's tacked on to the outside of the operating system. Right? How painful that process is. The way that Apple kind of has audio as part of its core system software, it really is a power move. And it's made a lot of stuff that we do, if not easy, at least viable.
James: I think the thing about core audio is that, I can't really say specifically what they're doing, but it started I think before I was there. It started with a really brilliant insight into the way that the lowest level should work to get to be able to get the timing, right and with minimum ways of being held up. And minimum overhead or almost no overhead. So that was a really great insight at the very beginning about how to build the whole thing. So I think that it gave a really good foundation for everything else to be built on. So I think that's why it's so successful and more than some other systems.
I mean, when you look at, I think, it's the JUCE people have a table of latencies of different audio systems and Core Audio and iOS, which is also Core Audio, are all down in the lower left corner. I think that's because of the way Core Audio was built from the very beginning.
Darwin: In kind of bigger than a breadbox terms, how many people were involved in audio development at Apple? I mean, was it a huge team or...
James: When I started in Apple, the Core Audio group was I think, maybe 10 to 12 people.
James: And then there were a few people who are in the kernel group who were responsible for that part of it. And then later there was the iPod group also, which was another separate group doing the iPod hardware. But they were not part of the OS at that point. IPod ran its own operating system or had its own firmware, I should say. As time went on the core audio group acquired the people who had been in the iPod group, and they acquired the people that got hired from Beats. And so when I left Apple, it was over 200 people doing audio.
There are things that had grown at a lot. When the phone came on, there was a whole bunch of people who came on to do codex and telephony and echo cancellation and all the stuff you need to do telephony correctly. That's a whole nother industry of expertise that needed to be added on, so those people got added. And then there was Apple TV and the home pod and Apple started doing a bunch of audio things that needed acousticians, and all kinds of stuff. So the audio group grew hugely.
Darwin: Well, I think audio also in general became a lot more of a commercial thing. I mean, it's not only audio devices, but even just audio as important kind of cultural stamps, right? I mean, it amazes me now to have commercials where, they'll be trying to sell soda by showing someone doing an Ableton Live Set. Or I noticed last night, they had the basketball player Damian Lillard trying to hawk a power drink while playing an MPC drum machine, right? It's almost like the world of audio and music production and all that stuff has really been mainlined as kind of a cool cultural stamp.
James: When I got out of college, I wanted to do something in audio. I came out to California because my aunt lives here. And I thought I'd go drop by EMU Systems and I discovered they were working out of a two-story house. And this was the largest synthesizer company I knew of. So I thought, "Okay, I'm going to have to find something else to do."
Darwin: What's my equivalent to that is that I had started doing a little bit of audio programming. And I heard about these guys making an editor called Sound Forge, and it was down the road from where I lived. So I was like, "Oh, man, I gotta go find out about these guys. I bet it's a cool company and I wonder if I could get a gig." And it was literally a guy working in his garage, hoping to come up with something to sell. It's interesting to think about how small that world was at the time.
James: Yeah, and now it's huge. Now you can go to college and study audio signal processing, and come out and have a really good expectation of getting a job. I did it. I sort of had to make digital signal processing degree because it didn't exist. Yeah.
Darwin: Yeah, that's really interesting. In point, I've got a friend who I was just talking to the other day, who is in the automobile audio thing, which you think of like, "Oh, yeah, car stereos and all that stuff." He's like, "Nah, most people don't understand that there are dozens of audio systems in a car." I mean, it's all the different entertainment systems, all the different contact systems. Now with electric cars, it's the 'vroom vroom' sound on the outside of the car even. It's all stuff that's having to be generated by audio systems. He's like, "You can't count on two hands the number of compressors there are in a typical car." I was like, "Well, that's crazy." It's a real industry now, which is pretty interesting. So when you joined Apple though, you had to kind of divorce yourself from the SuperCollider thing. Have you stayed connected with it in any way at all? Other than watching from a distance.
James: I was following it. Yeah. I just decided I want to do something new, now. And it's being maintained by a group of people who are very diligent about doing everything the right way, as far as releases go and all this stuff, which I've never been a really good process person with software releases and that kind of thing. When I was at Apple, there were people who took care of that stuff and...
Darwin: That's what their job... Right.
James: Fine with me because I just wanted to do the problem-solving and coding and I didn't want to have to... The process stuff was not something I was that interested in. So there's a lot of people doing SuperCollider releases now and they're making the trains run on time, which is something I can't really.
Darwin: Yeah, well it's probably important though too because there are a lot of products now where SuperCollider's an important at least component of the product. Again I know I use the Monome norns for which SuperCollider is an important part of that entire environment. So, yeah, I think that it's a really compelling thing that to talk about having people focusing on keeping your trains running. It's cool. So now you're retired, you're playing around with oddball keyboards and stuff like that. Do you get a chance to play much music?
James: Well I play my piano every day. I mean, I haven't played out anywhere.
Darwin: Right. That's what I was asking. I mean, it's because I would think especially on the West Coast. Because now with the move to Apple, you moved out to the West Coast. I would think that that your name would be a kind of a draw, just sort of among the underground computer music geeks. It's like, "Oh, let's go watch James McCartney play a gig."
James: At some point I might start playing out. Right now, getting my son through high school and once he's off to college, maybe I'll have time to do that kind of thing but...
Darwin: That sounds cool. Boy, I just looked at the counter and I see that, unfortunately, our time is already up. I can't believe it. But before we go, for people who want to stay connected to you and whatever work you're doing and however you wanted to share it, what's the best way for them to stay... So for me, I stay connected to you by following you on Facebook. Is that the best way?
James: Well, that's kind of my only outlet right now. I've thought about I should start a blog or something. But I'm too busy doing development of what I'm working on to really have time to go off and write something about what I'm doing. One thing, I'm changing my mind every week or two about what my direction is. So then I'd have to go back and delete my post or something. But no, I guess Facebook might be the only place I'm really online right now. And I'm not really posting a bunch of interesting computer music stuff there.
Darwin: Actually you've posited some good points on there about people who are wanting to get into audio programming and some of these other things. I find your posts to be really pretty compelling and interesting, too, so...
James: Well, yeah, I mean, someone who's interested in doing audio programming or music audio programming, there's a ton of resources out there now. So I'd encourage people to go read the source code for Csound, VCV Rack, SuperCollider. There's all this open source stuff out there. Chuck. And it's all out there, you can read it and you can figure out PD, Pure Data. So you can read how does an audio engine work, what are the issues that you have to deal with. And so you can go through that code and look and find out how people are solving the problems. And the thing about these programs that I listed is that they're each solving them in a slightly different way. So you can learn multiple ways of doing it.
Darwin: Well, and also, the ones that you mentioned - they don't have the kind of opaque skin of JUCE that a lot of other things do. And it's one of the things that recent posts that you had talked about that JUCE in a way abstracts you from some of the things that you need to know as an audio programmer.
James: I mean, so when I worked at Apple, we would interview a lot of people and they'd been to college and they'd learned how to use JUCE and some stuff. And so they knew how to write the inner loop of a DSP program, but that's not the kind of work we did that much. I mean, we do write some audio units, but plugin manufacturers write the audio units and we need people who... This is not "we", I'm not "we" anymore. I don't work there anymore.
But Apple needed people who knew what the issues were in writing an audio engine to stuff about threading and resource management and handling a bunch of the low level signal processing stuff that you need to know to do signal processing, to write an audio engine. And there are people who are doing algorithm development, like in MATLAB and stuff like that there. But they usually also know C++ programing and they know how to translate their MATLAB into efficient signal processing code.
So there are people who mostly just do the inner loop stuff. But even then, ultimately they need to know how the engines works. So people who only know JUCE, we just sort of thought of it as a crutch. And people relied on it and didn't know what JUCE was actually doing for them.
Darwin: Right, right. Pretty interesting. Well man, I want to thank you so much for having this discussion. Thanks for taking time out of your schedule.
James: Sure, yeah.