*** MUS171 #14 02 17
Miller: @0000 Here's the final projects thing with the web page: There's a month to go, and this should be like a two week kind of a final project. The idea is not to
es: @0000
@0015 have you working all quarter for it, which is part of why I've been stalling. So the way the rest of the course goes is there'll be one more assignment after... This is assignment seven. Oh, I'm sorry, assignment seven is due a week from Thursday,
es: @0015
@0030 right. And then there'll be one more assignment after that. Assignment seven is up on the web, and assignment eight will... well, let's see, I have to think some about that. And then the final project, I came up with some possibilities, but basically
es: @0030
@0045 the idea is come up with a patch and be prepared to come show your patch to the class. The patch could be one of a bunch of a different things. Ideas that I had were...
es: @0045
@0060 I'm not sure this first one is a real good idea, but... make a thing that actually is a patch where you hit start and it plays a piece of music using synthesis techniques that you've learned. I have to teach you one technique in order to make that possible, which is how to sequence.
es: @0060
@0075 I've shown you how to do looping sequencers, but I haven't shown you the more general sequencing techniques we need. So that will be one thing that I shoe-horn in at some point maybe in the next week. I'm not sure. The next one is kind of the obvious one.
es: @0075
@0090 Make a nice 4/4 drum machine slash sequencer. I went and dug one up just to entertain you with. This is good; this isn't real syllabus stuff anyway so I can be doing this now.
es: @0090
@0105 Here's me making a drum sequencer: [music]
es: @0105
Miller: This uses all sorts of synthesis techniques you don't know. So yours won't sound like this. @0120 Notice that it doesn't do the same thing every time through. The interesting thing, the thing that's fun about making these things is figuring out when to
es: @0120
@0135 throw what with what probability in order to make something happen. Because you can make these very -- You can make these lame very easily. [laughs] In fact you might think this is lame. So. No comment. [music]
es: @0135
Miller: @0150 That was actually me trying to design a synthesis technique, and the synthesis technique didn't go very far, but the drum machine sounded cool so that's ... [laughs]
es: @0150
@0165 I haven't listened to this in about five years. But, drum machines. OK. Even people like me make drum machines sometimes. So there's that.
es: @0165
@0180 Another example of something is do the "Switched On Bach," by which I mean go find some nice two-part invention on the web somewhere. Figure out how to get Pd to play it. That might be the hard part. What I did, I had to do this
es: @0180
@0195 once because someone put me up to learning a piece of classical music. And I don't read music, so I went and found it on the web so that I could learn it by ear. [laughs] So, you can do this... Here.
es: @0195
@0210 You'll see this in more detail when I start showing you how to sequence again. Here's a nice sequence. This is a text file that contains times, pitches, and cumulative times.
es: @0210
@0225 You can make these files. You can get them on the web from various sites, and they're in various formats. And then you can teach Pd how to read them. So I made a little
es: @0225
@0240 sequence out of that. I made a little polyphonic synth that could play that sequence. This really sounds horrible; this'll make you feel good because yours is going to sound better than this almost no matter what you do.
es: @0240
@0255 Especially since it doesn't do anything! Let's get a pre-set... Ah, here it is.[music]
es: @0255
Miller: @0270 That's an old lute piece from the 1500s that I just had to know for some really weird, stupid reason that I can't explain to you. Weird things happen when you work in music departments. [laughter]
es: @0270
Miller: @0285 All right, so this is the "Switched On Bach" style project example where you just, you know, go make something that sounds like Walter Carlos. Except of course it doesn't sound like Walter Carlos, because no matter how hard you try you will not be able to sound like Walter Carlos.
es: @0285
@0300 And you can indeed -- the very best things to grab are those two-part inventions, because they're easy to make sound good. Those two-part inventions meaning the ones by Bach. There's that.
es: @0300
@0315 So those were just examples that I happened to have of times that I had to do these things. Just to show you that these are real projects that you might actually profit from being able to do. At least if you're in my line of work. So that was the:
es: @0315
@0330 "make a patch that plays the, blah blah blah..."
es: @0330
Here's a cool one that will make you impress your friends. Make a nice little laptop instrument that you can take to a bar and get people to dance to. Laptop instruments @0345 I think, are things where... the things that you see when you go to entertainment venues where someone is staring into a laptop. And they see the screen and you don't, or if you do you see a whole bunch of nonsense that's their screen, that means nothing.
es: @0345
@0360 The basic deal is you have something where you can mouse and keyboard away, and that changes something that typically is based on a loop that's modified by parameters that you set -- by moving sliders up and down or whatever it might be. That's a good thing to do.
es: @0360
@0375 And that could be based on sampling or whatever.
es: @0375
... I didn't put up the following idea, because I haven't thought it through well enough to know whether it's a good project or not: Make a mash-up. Find two pieces that are in compatible tempos and keys, @0390 and make a looping patch that allows you to superimpose them and change them around. That would be a good thing. But I don't know how to make that sound good and I'm not sure if you do it it will sound good, so I'm not sure
es: @0390
@0405 that's a really good suggestion.
es: @0405
You don't know how to do this because I'm not going to tell you. Tom might: Think of something you weren't able to do in Pd, whatever it might be, and write a C object @0420 to do it and make that a new Pd object. I won't go into that except to say that there are thousands of these running around. They're not hard to do and if you want to see some of them they're all over the Pd source code and also there are hundreds of examples
es: @0420
@0435 plus websites that tell you how to do this on the web. But don't do this unless you know how to code C pretty well because otherwise you will have to learn how to code C, which you cannot really do in four weeks.
es: @0435
@0450 Make a melodyne. This is fun. It is not easy to do because, well, the hardness is not because it's inherently hard to do. It's actually stupidly easy,
es: @0450
@0465 but you have to have a pitch shifter handy and I haven't told you how to make a pitch shifter, and you also have to figure out what the pitch is of the thing that's going in so that you can figure out how much you have to correct it. Then you have to make an algorithm that, given any pitch, figures out what
es: @0465
@0480 the nearest pitch is that it could have been supposed to be. So what you do is you say "the allowable pitches are the C major scale." Alright. And the current pitch that I'm getting is,
es: @0480
@0495 who knows, 110 Hertz. Well, that's not a real pitch, sorry -- 120 Hertz. OK. What's the nearest white key to that? Figure that out and then make a pitch shifter to change the pitch by that amount then you can talk into it and it will sing,
es: @0495
@0510 well sort of sing, it'll talk back at you in the C major scale. Then you'll have a melodyne and you can sell it. ... Actually, probably not because I think there are probably hundreds of them on the web now. "Melodyne" by the way, is a
es: @0510
@0525 trade name, but people use it generically just to mean something that whacks your pitch into something it's not. Then you can go from there. You can go wild from there because you can add a keyboard and make it allow you to play
es: @0525
@0540 ornaments on things .... or what-not. All sorts of good stuff you can do once you have this. But the two things I haven't told you is how to find what the pitch of the sound is and then how to change the pitch of the sound. Both of those are techniques that
es: @0540
@0555 I will try to squeeze into the rest of the quarter, but I don't know if I will be able to.
es: @0555
Think of something else. Oh, you know what? Something else: Go buy one of those Arduino hoo-ha's and make a little physical device @0570 that has buttons or knobs that allows you to give yourself a physical synthesizer and control interface. Student 2: Arduino?
es: @0570
Miller: Oh, the usual one is called Arduino. What I do is I go to sparkfun.com and you can buy processors for like, @0585 it depends, but $20-ish and you can build little circuits out of them that are anything that you want. You can make robots or sensor arrays or what-not. And that
es: @0585
@0600 really should be the subject of a different course. And, also, you shouldn't do that unless you're able to deal with voltages and solder and things like that. So don't do that unless you think you know what it entails. ...
es: @0600
@0615 Anyway, that would be another thing that would be perfectly cool, but I predict that most of you are going to want to make a drum machine or an interactive, playable laptop instrument or something like that and that's just cool because, actually, 30 different drum machines are going to have 30 different personalities.
es: @0615
@0630 It'll be fun.
es: @0630
... Questions about this? This is all up on the web now. Well, what this is so far is up on the web and if you have questions about it ask me and probably that means I should put something else up @0645 that says something more about what's going on. Alright. So that's the final project -- It's a presentation.
es: @0645
We are now still doing modulation, continued waveshaping. Waveshaping and not wave packets yet -- although @0660 I might get into that today depending on timing. Because what I want to do is make sure everyone is on the same page just about the waveshaping thing first and then we'll proceed from there time permitting.
es: @0660
The other sort of organizational thing @0675 that I'm succeeding in not forgetting to say is the following. I have two trips coming up and there will be a substitute teacher
es: @0675
@0690 the next two Tuesdays: Cooper Baker who is a graduate student who is also an expert Pd programmer and computer musician and circuit builder and many other things, who has a lot of good things to say and show will talk,
es: @0690
@0705 I believe, next Tuesday about frequency modulation, assuming the syllabus works. Then depending how it all works we'll be talking about delays the Tuesday after that and I will try to make it dovetail with the syllabus as closely as I can. I'm still not sure
es: @0705
@0720 how that's going to work with the taping scheme. Also, taping: All of these classes are taped thanks to Joe and you can get them, so don't forget if you need to review that's
es: @0720
@0735 one possible way of doing it, which might be useful. ... Questions about all that before I just jump in and patch away? Or things I forgot to say? OK.
es: @0735
@0750 So now what I'm going to do is ... I showed you a sort of mathematical way of thinking of all this stuff last time, but this time I propose simply to go straight in and deal with it at the level of patch
es: @0750
@0765 because -- just on the theory that if you change your teaching style every week it either makes everything totally coherent or else it makes everything totally incoherent...depending on your point of view.
es: @0765
So this is @0780 where we got at the end of the last class where, let's see, I'm going to give us 110 Hertz which is a low A. And then we were taking that signal and
es: @0780
@0795 messing with its amplitude and then reading the cosine of it and that was giving us this kind of signal. Let's see. ... I'm going to do is give us both channels. I don't know why. Turn this on then turn this on.
es: @0795
@0810 Yes. OK. So in goes sinusoid, out comes signal like that and the good thing about this signals is it changes timbre when you change the amplitude.
es: @0810
@0825 There are two things happening here that I mentioned last time:
es: @0825
One is, yeah, non-linear things like cosine don't react to doubling the input by doubling the output. They react to doubling the input by changing the output. @0840 And that's maybe most easily described as a change in waveform. The other thing I wanted to do was graph this so that you can see some sort of representation
es: @0840
@0855 of what this is. Woah! Oh yeah ... I'm listening to that and I'm graphing that. OK. Here it is.
es: @0855
This might remind you of what happened when I used the exponential @0870 look-up function last time which is if you give it an index of nothing you don't hear anything because we're multiplying it by 0, this adder's adding 0 too -- I haven't got there yet-- and now we're taking the cosine of 0, which is 1 --
es: @0870
@0885 so the thing is just sitting at the top of the table being constant 1. And then as we push this up we start getting sound and the thing starts acting
es: @0885
@0900 like a pulse train except it's not because instead of reading an exponential we're reading at cosine. So that after a certain point, well, so this is the most pulse-trainy it looks --
es: @0900
@0915 But notice that it doesn't just sit at zero it does the next thing, which is rising again.
es: @0915
So now the waveform that we've got is: we're making a sinusoid and we're reading the cosine wave, @0930 but we're reading not only the first lobe of it, if you'd like, which is to say it goes from minus one up to one, that's at zero, and back down to minus one, but we're making it go past that amplitude a half thing and therefore
es: @0930
@0945 it's giving us the next wiggle, if you like. Oh, I should put this in a metronome so you can see it. Well, maybe I shouldn't. I will.
es: @0945
@0960 Let's not do it too crazily fast. And now I need a nice toggle.
es: @0960
@0975 So, by the way, the reason this is changing, of course, is because the cosine is at a different phase each time the metronome goes off. Meanwhile, as I change the amplitude of the cosine
es: @0975
@0990 the waveform changes because it's reading more and more cycles of the cosine wave it's looking up in. Actually, I should turn the frequency down so you can see it more clearly.
es: @0990
@1005 So now we have ... nothing ... turning into something looking kind of sinusoidal but not, and then turning into progressively higher and higher frequencies.
es: @1005
@1020 And you can almost tell just by looking at this that this should have high frequencies in it, although I don't know a simple theorem that says that the more a thing wiggles up
es: @1020
@1035 and down the more high frequencies it has. Even so, it's clearly true that if you make something like this it's going to have some high frequencies that it didn't have when it looked more like this. Whoops.
es: @1035
@1050 What did I do wrong? I didn't hit the return. Like that. All right. So that's the amplitude-to-timbre change.
es: @1050
The good thing about the cosine as a waveshaping thing is that @1065 no matter what you do to this index, it gives you out roughly the same power. So even if you ask it to make some ridiculous index --
es: @1065
@1080 All right, how about 10,000? All right. Well, OK. But we can tell that it was basically, I mean, it ranges
es: @1080
@1095 from -1 to 1 and, you know, the power of that thing is going to be roughly the same as the power of the original cosine wave. That's a good thing for building computer music instruments because it means that
es: @1095
@1110 you can put it into your amplifier and expect decent results to come out.
es: @1110
The previous example, which was the exponential, sort of did that except that, actually, let me get it out and show it to you. @1125 Let's see. I'm going to save this and close it because I haven't changed the name of the table. I changed the name of the table. Let's see. This is 17.
es: @1125
@1140 Alright. Do that. Now we can actually open the other one and they won't fight.
es: @1140
@1155 2.15 ... There it was. OK. This one now, oh, wrong. -- Oh, I'm sorry. I'm looking in the wrong place. Where I wanted to look
es: @1155
@1170 was in the help. We were doing this and then we were looking at "E" -- exponential. Sorry. This is
es: @1170
@1185 the real one.
es: @1185
Now we have this situation where we can listen to the sound ... Oh yeah -- give it an index. Now it makes waveforms like this, but the trick is @1200 here if you start giving it extreme values here, which I didn't allow you to type because I didn't want to reveal this right away. ...2,000. At some point you're going to notice that
es: @1200
@1215 this thing doesn't have a whole lot of power and it's going to start fading out. So 20,000. Now it's getting quieter.
es: @1215
@1230 OK. So this is not terribly well behaved from the point of view of the power of the signal, although it's not too bad psychoacoustically, for the usual reasons.
es: @1230
Using the cosine is much more gentle to your audio hardware @1245 because it pretty much gives you the same signal power no matter what you do to it except in extreme situations like almost zero. OK. So the next thing about this is this:
es: @1245
Let's see. @1260 Let's go back down to something reasonable and let's listen to it. So we can also ask for the cosine or for sine by moving
es: @1260
@1275 by 25 percent down the waveform and then we have this change and then we have this stuff in-between, which is changing the even and odd harmonics.
es: @1275
@1290 That could even be a useful thing to listen to. OK. So that's exploiting the fact that the cosine is even, the sine is odd and if you just graph the cosine and changing the place
es: @1290
@1305 that you look at, just moving the origin, you can move continuously between being an even and odd function. That's a good thing. That's a property that the exponential wouldn't have.
es: @1305
@1320 As a sort of sneak preview, OK. So sneak preview --
es: @1320
@1335 This will last about five minutes: How to think about frequency modulation in these same terms. Alright. Let me just do a save here, or save as because I don't have to ruin my patch.
es: @1335
@1350 So what I'll do is I'll make two exactly equivalent frequency modulation patches: one the correct way to do it and the other the way that allows you to actually think about what it is and what it does.
es: @1350
@1365 So frequency modulation is this. First I'll do the classical one. Give yourself an oscillator. Oh, actually, let's do the whole thing.
es: @1365
@1380 Let's see. I'm going to get rid of this. This is now an amplitude controlled oscillator here. So I'm going to make myself a copy of that.
es: @1380
@1395 Let's see. Does this work? I'll give it a frequency then an amplitude and amplitude -- Sound!
es: @1395
Now, next idea is what if we took this and @1410 took another one and used this one to control or to mess with the phase of the other one? How would you do that? So we need another oscillator whose phase we can mess with, so we can't actually do that by just doing
es: @1410
@1425 the simplest form oscillator with osc~ -- we have to split that into cosine and phase. So we'll do that. So now this one's going to be an oscillator alright, but it's going to ... oh dear.
es: @1425
@1440 I don't know where to put this. ... I really need to put it on the other side. OK. This one I can leave alone and this one I'm going to make the phasor and the cosine separate.
es: @1440
So there's a cosine @1455 and then we're going to say phasor. Alright. And this now is just another oscillator.
es: @1455
@1470 It looks like we can't hear it. Alright. Except we can't hear it. Why not? Am I doing something wrong? OK. Alright.
es: @1470
@1485 Now what we're going to do is take this oscillator and use it to mess up the phase of this oscillator by adding it to the phase. I should put a plus~ to be explicit about it, but I'm going to be lazy and not do that.
es: @1485
@1500 Then I'm going to move this up here so you can see what's going on. Alright. That's as well as
es: @1500
@1515 I'm going to be able to make it.
es: @1515
So now we'll listen to this one. This one, to start with, @1530 I'm just going to make it run at six Hertz then I'm going to do that to it. Oh, let's make this higher. So now what we're doing, this is not what I showed you in the first
es: @1530
@1545 couple of weeks of class when I showed you, "Oh here's an oscillator and here's another oscillator changing the frequency of that one." Here, instead, I've taken this oscillator and split it up into a phasor and cosine so I can add this other oscillator not to the frequency, but the phase.
es: @1545
@1560 Why? Because that's the way that people do it. ... You know, there are two reasons to do this. Well, three. ... Yeah?
es: @1560
Student 2: @1575 Couldn't you accomplish the same thing by adding it into the second inlet of the oscillator?
es: @1575
Miller: No ... Because the second inlet of the oscillator takes messages to set the phase, but then the phase starts taking off from there, @1590 so the signal itself doesn't add in. It won't take a signal to offset the phase. So you have to explicitly do it this way. OK. So why don't you just have an oscillator here instead of separating it and then just changing the frequency?
es: @1590
@1605 The original reason, I think, was because this was once implemented in fixed point hardware and it turns out that if you put the thing up here you have to put it in units of frequency, so
es: @1605
@1620 you have to have the values in hundreds or thousands and that wasn't a good kind of an amplitude to give this oscillator if you were working with hardware whose maximum amplitude might be one.
es: @1620
@1635 So people figured out that by changing the phase directly instead of changing the frequency you got to give this thing a much, much smaller amplitude for the same amount of modulation. So this is almost equivalent to
es: @1635
@1650 putting this thing in here, except you have to give it much smaller amplitudes. -- Here I have an amplitude of 10 and it's already giving me plenty of modulation,
es: @1650
@1665 much more so than if I had taken that and put it here.
es: @1665
I won't do that now -- in a minute. And, again, the more you give it the deeper it gets. @1680 And then if I change this oscillator to an audible frequency then we get this kind of stuff. This is what people sell you when they sell you a frequency modulation instrument, although
es: @1680
@1695 to be completely pedantic about it, this is a phase-modulation instrument.
es: @1695
Another reason for doing phase-modulation instead of frequency modulation is it's better behaved if you're not using sinusoids @1710 but other waveforms or if you are using more than one modulator or more than one carrier. In other words, if you're making more than two oscillators, if you're making a more complicated network with five or six oscillators talking to each other, for various technical reasons it's better
es: @1710
@1725 to operate on phase than on frequency as well. Alright. So this is the incorrectly called frequency modulator, which is a phase-modulation instrument.
es: @1725
@1740 I think this is mostly what Cooper will talk to you about next Tuesday, but by smartly choosing these two frequencies and this so-called "index of modulation" you can make all these wonderful sounds.
es: @1740
@1755 And you're not limited to only two of these. You can make bunches more and then you can be smart about how you design the sound. There's a book about that that came out in the '70s or '80s
es: @1755
@1770 so you can find out lots of stuff about just frequency modulation. << Charles Dodge and Thomas A. Jerse, "Computer Music : Synthesis, Composition, and Performance." (1985). Also John Chowning and David Bristow "FM Theory and Applications: by Musicians for Musicians."(1986) >>
es: @1770
Well, not to go too far down that route... Why am I talking about this now? Because this is equivalent to one of these, @1785 so you can think about that by thinking about waveshaping -- if you're careful. So the careful way of thinking about this as waveshaping is the following: this is the cosine of the sum of two signals,
es: @1785
@1800 one is a phasor and the other is a sinusoid, OK, but the cosine of the sum of two things is equal to the usual formula: cos(A + B) = cos(A)*cos(B) - sin(A)*sin(B).
es: @1800
@1815 So we could rewrite this network -- And I'll only do the cosine half, I won't do the sine half just to save sanity.
es: @1815
(OK. I need a new window anyway. So make new window. Oh wait. You know what? This is a new window. I can just erase this. @1830 Another way of thinking about this is we'll take the cosine of this and we'll take the cosine of that and we'll multiply them. Let's get rid of this because we don't need it anymore...
es: @1830
@1845 So here's taking the cosine of the oscillator. That's taking the cosine of this side. Now we'll take the cosine of the phasor. That's one of these. Then we'll multiply.
es: @1845
@1860 So I'll cut these off and then I'll just say times~.
es: @1860
And here, of course, there's another simplification we can make: Phasor and cosine, we're not sticking anything extra here, so this actually could @1875 just be an oscillator -- So this is equivalent to just saying osc~. And now look what we've got: We've got
es: @1875
@1890 exactly that waveshaping instrument that I told you about before, which is: Take an oscillator and change its amplitude and take the cosine of it and then multiply that by this oscillator. And you've seen that before -- That's ring modulation.
es: @1890
@1905 So frequency modulation is equivalent to two networks like this because the other one would have to use sine instead of cosine, but basically it's an oscillator, take the cosine,
es: @1905
@1920 that does this, and then multiply it by some other cosine and then you get these sounds. Those sounds are pretty much the same kind of sounds as these sounds,
es: @1920
@1935 although I'm pulling a fast one on your because I'm not really checking that they're exactly the same. But, morally speaking, that's about the same deal.
es: @1935
@1950 So frequency modulation you can understand by understanding waveshaping and ring modulation and, again, the word modulation just means change and computer musicians use it to mean all sorts of things. So don't consider
es: @1950
@1965 ring modulation and frequency modulation as being in any way related except for the fact that they both use the word modulation for artificial reasons. Ring modulation is this multiplication thing. Ring modulation is linear, but it
es: @1965
@1980 is not time invariant, so it is able to make new frequencies out of old frequencies. That will get explained in more detail later, I think.
es: @1980
Then this is running @1995 this oscillator with an amplitude control through a non-linear function and this amplitude control corresponds exactly to this thing, which is called the "index of modulation" over in this thing, which is where we're doing phase modulation. So now modulation means
es: @1995
@2010 ring, frequency, phase, and then something else. Questions about this? ...
es: @2010
Student 2: @2025 I have a question. Does a DX7 use this phase modulation?
es: @2025
Miller: Yeah. Except they have six so-called "operators" @2040 instead of two. I don't know why they call them operators. They're just oscillators. Yeah. Then you get to make various networks of the six. There's some circuitry that allows you to re-route signals. But, yes, basically this is what's happening inside a DX7
es: @2040
@2055 for those of you who know what a DX7 is. They came out in '84 maybe ... Yeah. Now it's called a cell phone.
es: @2055
@2070 So this is the relationship between waveshaping and frequency modulation, however, it is a special case of waveshaping because it's this cosine function here. If you threw any other function in besides cosine
es: @2070
@2085 you would no longer have this identity that the sum of it means multiplying two of them. In other words, this trigonometric identity would work out differently if it were not cosine, but some other function --
es: @2085
@2100 Then this wouldn't work. So this kind of waveshaping followed by modulation is a much more general way of doing things, in some respects, than frequency modulation is. In fact,
es: @2100
@2115 I guess this is the moment to say this: What would happen if you
es: @2115
@2130 just made this thing be exponential instead? So what hat means is we go back to our patch. (I threw it out. OK so I'm going to save this. )
es: @2130
What I'm going to do is go back and get help @2145 and get that exponential patch again, the exponential waveshaping patch, and do the same thing to it to see what we get. Whoops, sorry. Go back here.
es: @2145
@2160 I don't want to build it because I don't want to go through the hassle of making this function. I'm just being stupid because I could just use exp~ couldn't I? OK. Let me be smart now. I'm going to get rid of this.
es: @2160
@2175 Oh, wait, I want all this graphing stuff. I'm going to keep this because I want to graph this for you. So we're going to save this as then we're going to go back over.
es: @2175
@2190 So this'll be three. <<saving "2.17/3.exponential.pd">>
es: @2190
So now what I'm going to do, OK, so reminder: What this patch @2205 does is this kind of sound and this kind of waveform. So there's the waveform up there. It hates me because I've got too much stuff on the screen.
es: @2205
@2220 There's the waveform for you and here's the spectrum. And to make it clear what's going to happen next I'm going to try to move this over so that you can see the whole spectrum pretty much.
es: @2220
@2235 Alright. Now what I propose to do is to take this. -- Oh, by the way, the reason you hear these skips in the sound is because it's using CPU time to graph these tables, which is making my little machine hate itself. If you want to have
es: @2235
@2250 tables that are changing while you're computing stuff put the tables in a sub-window and close it so your machine doesn't have to graph it so you won't get these skips. But I'm being pedagogical, so I'm leaving everything out here on the main page where everyone can see it.
es: @2250
@2265 OK. So now I did the table lookup.
es: @2265
Now I'm going to operate exactly as before, which is to say I'm going to multiply this by a nice sinusoid. So what that means is @2280 we'll say times <<*~>> Oh, I made one. Well, get this one. Here's an oscillator, here's an amplitude thing. Oh, but I don't need this. I just need
es: @2280
@2295 a number and this is no longer index. This is now a ring modulator. Oscillator times ... Now we look at it and listen to it: So nothing's different yet, but if
es: @2295
@2310 I start changing this now I get classic ring modulation. Well, it's just going to be what it is.
es: @2310
@2325 So each one of these peaks is split into two peaks because that's what ring modulation does to a spectrum.
es: @2325
This is the spectrum and this is the waveform and we're multiplying rather slowly. This thing is not really showing the waveform @2340 as it's changing because it's really going up and down 15 times a second, but if I make this higher then eventually you'll start seeing... Oh, drat --
es: @2340
@2355 I want that thing to be limited. There we go. OK. Let me see if I can get it exact.
es: @2355
@2370 Alright. So now what we have is a sinusoid which I tuned just by ear to be the second harmonic of the pulse train, and now
es: @2370
@2385 if I start pushing the index up I get a hat shaped function, which is centered around this frequency and, in fact, I can make that
es: @2385
@2400 whatever I want. I can slide this thing anywhere I want and have this sort of hat shaped spectrum move to whatever location I want it.
es: @2400
So now this is controlling bandwidth @2415 and this is controlling center frequency of the spectrum. "Bandwidth" is a term you will hear
es: @2415
@2430 a lot in computer music. It just means the width of the band, but bands in this case are ranges of frequencies. That, I think, is radio terminology originally like the "FM band." So in this case what we're talking about is
es: @2430
@2445 a band of frequencies like that. Why would that be a "band"? ... Never mind. The center of the band is being controlled by this ring modulating oscillator. This is what happened to DC.
es: @2445
@2460 So if I send the oscillator to frequency zero the biggest peak is at DC, right? This peak then got aliased out somewhere here and then these peaks got aliased out to DC plus and minus
es: @2460
@2475 those frequencies.
es: @2475
Or, to put it another way, there are negative frequencies in this thing that I'm not graphing and when we multiply it by a sinusoid which then moves it over, it actually moves it over like that, then we see the negative frequencies, as well as the positive ones showing up, @2490 which is this. Oh, we don't see any negative frequencies until this one bounces off.
es: @2490
@2505 Then there's the sound. OK. Now, these are perfectly nice, harmonic sounds as long I choose these things just right, like that number I found.
es: @2505
@2520 So this is going to put out a pitch, which is controlled by this fundamental. I don't know when this fundamental's being computed, so I can't use it.
es: @2520
@2535 This fundamental must be something about half this, like 170 something, but I think it was computed using load bang, so I don't think if I use it now it's going to give me a new value.
es: @2535
@2550 What else can I say about this? What does it look like in the time domain? I guess what I should do is ... Let me stop modulating it. OK. So there's our nice
es: @2550
@2565 pulse train and I'll skinny it up so that the pulse is decently small like that. Then when I start multiplying it by an oscillator, just to see what happens I'll give it a very high frequency here -- 5,000.
es: @2565
@2580 Now, what we see is that there is a pulse train. Every time this thing makes a pulse, which it does every cycle, you get a pulse times
es: @2580
@2595 this oscillator and I asked this oscillator to go very, very fast so that you can see it, but what's happening here is just a bunch of pulses, one after the other. Now the center frequency's way off the screen here so you can't see the spectrum anymore.
es: @2595
@2610 But you can sort of guess what this thing should sound like.
es: @2610
Its period should be from here to here. (That's the smallest interval at which you can see repetition). So that period's being controlled by @2625 this fundamental frequency, as long as this one's a multiple of it, which it's not so I'm pulling a slight fast one here. Meanwhile, if you think about what frequencies are present in this as a signal, they're mostly high. They're mostly these frequencies here and that
es: @2625
@2640 agrees with the general observation about ring modulation, which is if you ring modulate by a very high frequency it takes whatever you've got and slides it to where you can sort of see it as a clump of frequencies around the modulating frequency.
es: @2640
@2655 So another observation about this is that... Questions about this? Is everybody completely confused now?
es: @2655
@2670 There's nothing complicated about this patch, but the complexity is all in how you analyze what it does and that is typical, unfortunately, of electronic music, which is putting three or for modules
es: @2670
@2685 together quickly leads to a situation where it takes hours or days to explain what the thing is actually doing. That's just what it is. And unfortunately you have to go through the explanation because I don't know any other way to be able to design things with a some notion of what they're going to do. All right.
es: @2685
Student 2: @2700 Can we hear what it sounds like?
es: @2700
Miller: Oh gosh! If you really want to. Sounds like something out of Poème électronique. <<Edgard Varèse 1958>> @2715 Most of these are inharmonic, but every once in a while I'll hit a multiple of this and get a harmonic sound, but you can't even really tell the difference.
es: @2715
@2730 Well, there are theories of perception that say -- I don't know if they're true -- that basically the first ten harmonics are the things that your ears will use to try to determine the pitch of the thing and then after that your ear hears that there's energy there, but you won't use
es: @2730
@2745 the pitches of the harmonics to tell you what the pitch of the original sound is.
es: @2745
So here, don't do this, but I could take this thing and add it to @2760 the modulated sound and now you hear a nice sound with a fundamental and some nice high harmonics. And those high harmonics they don't have anything to do with that sound -- They're just whatever frequencies they are, but your ear
es: @2760
@2775 can't tell that so it just accepts it. All right. Don't tell anyone I told you that. Oh, actually, it's not as useful a fact to know as all that because,
es: @2775
@2790 in fact, what you'd really like to do is make things that can change _controllably_ between stuff that has low frequencies in it and not. And, of course, as soon as I change this thing so that some low frequencies come in you're going to hear the fact that they're mis-tuned and then you're not going to
es: @2790
@2805 believe that that's a harmonic tone any more. So you would have to work harder if you want to make a general instrument that would allows you to do this kind of thing. And I want to show you how to do that, but maybe not right now because ...
es: @2805
@2820 Why? Because there are two ways of doing it and they're equally important and I don't know how to fit both of them into one half of a class.
es: @2820
So what I want to do is show you things that will be useful for doing final projects. @2835 So there's stuff that doesn't fit in the syllabus that's just lore about how to use Pd, so what I want to do now for the rest of this class is show you Pd lore that is of use for just building stuff. The most important thing
es: @2835
@2850 that I haven't told you how to do yet is sequencing. Well, I've told you how to do two kinds of sequences -- both of which are table based. The thing that you do is make a counter and you make the counter
es: @2850
@2865 count through the table. It can either be a phasor reading a table as a signal or it can be a metronome driving something that increments.
es: @2865
That's a way of making a 1960's kind of sequencer and it's appropriate for driving monophonic synthesizers and @2880 then for polyphonic stuff, OK, there's a certain place you can go with it, but it's not going to like do general polyphonic sequencing for you. So how would you make something that's actually capable of polyphonic sequencing? There are many
es: @2880
@2895 ways, but I'll show you one that is just the second most general -- the third most general. Something that's about the right level of complexity to get most people's needs,
es: @2895
@2910 but without having to spend hours and days learning how to do it. OK. So here it is:
es: @2910
What I'm going to do is make a new window and give it a name. It's going to be 4 ...sequencer. <<saving "2.17/4.sequencer.pd">> @2925 So the object that does sequencing, in the most general
es: @2925
@2940 form that I want to deal with right now is called "qlist". This is probably a misuse of the word "qlist." (Let's make it have a decent font...)
es: @2940
@2955 But we can call it that anyway. What a qlist is is a bunch of messages in Pd language that can have ... I have to tell you some things I haven't told you:
es: @2955
First off, message boxes. @2970 Message boxes and receives: I've shown you how to do this so far: I've shown you how to do "send name1", "send name2".
es: @2970
@2985 Then we'll have "receive" s. Oh, "s" and "r" are short for "send" and "receive". And now I'm just going to put numbers here so that you can see that this is a way of making a non-local connection.
es: @2985
@3000 All right. So my reason for showing you this is so that I can now show you the following very strange thing: Let's get a message. First off, let's make it just have a number in it
es: @3000
@3015 and do this. Oh wait, that's the same number. OK. That's all good.
es: @3015
In fact, I showed you another thing which is that you can have commas. @3030 And here, if you do that, you will send those three messages and you'll just see the last value, even though the number box actually attained all three of those values, all in a zero period of time. OK.
es: @3030
@3045 You've seen one other syntactic element of message boxes, which is the dollar-sign. That's the thing that allows you to have an incoming number that changes the message.
es: @3045
@3060 There's one other syntactic thing available for message boxes and that is that you can have messages separated semicolons -- and by convention I put a carriage return in here.
es: @3060
@3075 So now if we do this, what we're doing is we're saying the message is 56 and then there's another message which is 67, but that message is going to be sent to the object named "name2" or
es: @3075
@3090 the objects named "name2" -- all of them, if there are more than one. So comma means begin a new message. Semicolon means begin a new message and, by the way, this message is not going to go to
es: @3090
@3105 this outlet at all; it's going to go this other object. Yeah? Student 3: So if we didn't have name2 there would it go to name1?
es: @3105
Miller: No. It would try to find an object named 67 and that's not a legal name for an object @3120 because it's a number and so then I should see an error message. I hope I get an error message. It just says "float no such object." Oh, that's horrible. Anyway, yeah. So there's no such object as 67.
es: @3120
@3135 It's not letting me do that. So you have to give it the name of a destination. OK.
es: @3135
Next thing. We don't really even have to use this first one. We can just say "no message at all, thanks, but @3150 name1 gets a message 67 and name2 gets a message 34" and then when we whack that those two messages go out. Now, this is starting to look useful
es: @3150
@3165 I hope. Now we can do this kind of stuff. So it's almost a preset mechanism. Not quite. .... Yeah?
es: @3165
Student 4: Do you need to have a semicolon in front of it like that? Can you put @3180 name1 123 semicolon then name2 221 semicolon and would that work?
es: @3180
Miller: Yeah. You have to have the semicolon otherwise there will be a message "name1 123" and that will come out this outlet, so the first semicolon means @3195 the name of a receiver follows and the receiver is this. So this is really a strange, ugly syntax. But it's what it is. It's consistent. It's logical even though it looks weird.
es: @3195
@3210 Now I showed you that so I could show you this: This is cool and this will allow you to have any number of parameters in a patch. Right. So I could now make an FM instrument and give the carrier frequency, well, I'm using
es: @3210
@3225 names I haven't described. You know, the frequency of the two oscillators, those could have names, and then the index of modulation could have a name, the amplitude could have a name. I could make it six operator and I could have, I don't know, 12 names and that would all be cool.
es: @3225
@3240 And then I can put them all in this one message box and just whack the message box once and all those values would go off to all the right things. I probably should have told you this before. You know, this becomes almost inescapably important as soon as your patch
es: @3240
@3255 reaches a certain level of complexity.
es: @3255
While we're here, it's always good when you have a patch more than a certain amount of complexity @3270 to have a button which is just "reset." So you probably have already had the experience of starting a patch up and not have it doing the thing it was doing when you last closed it.
es: @3270
@3285 This is your friend for being able to get things to go back to startes that you know about and it's often worthwhile having one of these things hooked up to a load bang so that every time your patch opens up the values are
es: @3285
@3300 as you wish them to be when the patch loads up. All right. So this is not computer music knowledge. This is just Pd lore and when you change to some other programming language this will be different.
es: @3300
Now, about qlist: @3315 So this allows you to do everything you could possibly want except for sequencing And now if you wanted to do sequencing with this I could tell you how to do it using delays. Well, you already know. You just make a whole bunch of message boxes separated by delays.
es: @3315
@3330 Yeah. And, in fact, let me show you the first ever Max patch, which I've imported into Pd, which does exactly that. I'm just doing this to horrify you.
es: @3330
@3345 So we're going to go back to here. "Repertory" because this is going to be public. We're going to go look at Pluton. This is on the web, by the way. If you download the "Pd repertory project" you can look at all these
es: @3345
@3360 scary patches.
es: @3360
This is going to be "manoury-pluton" and then we're going to have a patch called "pluton.pd" This is a 45 minute long piece of music. Maybe 48. @3375 And here's -- I'll get one at random -- here's section 31. It has a queue, which is a number, and then it has sub-patches and this sub-patch has events numbe 1, 2, 3 and 4 in it.
es: @3375
@3390 So we'll get an inlet and we'll select 1, 2, 3, and 4 and each one of them is going to have message boxes sending parameters to values. You can make message boxes like this. You will tear your hair out after a certain amount of time
es: @3390
@3405 keeping track of when you changed what because obviously this could lead to horrible messes. If you go looking in the right place, this is not a good example, but if I find a good example you'll find
es: @3405
@3420 delays in here.
es: @3420
Nope. Nope. OK. 21. Here we go. Oh, bad, bad, bad -- Wrong section. Two. Yeah. Here we go. So @3435 why don't we, on event 5, do all of this good stuff, but after a delay of 5 seconds we'll start at the other sequencer, whatever that is. OK. So now we have the ability to wait until event number 5 comes in,
es: @3435
@3450 never mind who's figuring out what queue we're on, but you can think there might be a queue number 5, so there's an incrementer in there somewhere. And event number 5 means do this, I shouldn't do that, and then after 5 seconds do this. But what if
es: @3450
@3465 someone did event number 6 before those 5 seconds had elapsed? Then you would have event 5 then part of event 6 then part of event 5 happening. What if this thing started something that this thing was supposed to stop?
es: @3465
@3480 Then instead of starting and stopping it would stop and start and then you would have the thing playing for the rest of the piece, which you didn't want, right? So you'd better stop this delay when the next puppy comes in or else it's going to go off.
es: @3480
@3495 And then it gets worse. OK. So this is making sequencers using message boxes. You can do it, but -- not pleasant. Also,
es: @3495
@3510 you will not be able to download a text file from the Internet and have it be that, right? OK. So that was Pluton. I'm not going to show you more about that just now.
es: @3510
So there's a better way, which is to make a qlist. @3525 A qlist is read from a text file, I should say, and the text file has a bunch of messages in it that are separated by numbers that are event numbers -- or actually that are times I should say.
es: @3525
@3540 So qlist acts like this. First off, you have to be able to read files in. So I'm going to make a message box that says "read sequence1.txt" and I'm going to give it an extent ".txt"
es: @3540
@3555 because on some kinds of machines if your file isn't named something.txt it doesn't know it's a text file. Now I'm going to make a text file named sequence1. You all have Macintoshes and you will get out
es: @3555
@3570 the text editor and it will not make a text file by default. It'll make a "rich text file." You've got to make a real text file and there's something in the text editor on the mac that lets you do this, but
es: @3570
@3585 I've forgotten what it is and it takes some finding. OK. I don't need this anymore. ,,, This thing is just an orphan, so let's get rid of it.
es: @3585
Now what I'm going to do is make a nice file. Are we in the right directory? Yes. @3600 I'll "nedit." OK. Text editor: Now I'm going to say message one. OK. So "name1 45;" "name2 67;"
es: @3600
@3615 and then let's wait a second and then let's do name1 back to 0 just to make it look like it's turning off. OK? Oops, I don't want that space there. And notice I'm putting semicolons
es: @3615
@3630 after every line because semicolon is the delimiter here -- just like in message boxes and if you forget then it will not do the right thing for you. Did I say sequence or sequence1?
es: @3630
@3645 I thought I said sequence1 ...
es: @3645
Then let's go back and get the patch. I've got all this junk open that I don't want. Yeah, of course I want to save. Yeah. @3660 Now we say "read" and meanwhile let's just check, make sure we didn't get any errors. We didn't get any errors, good. Oh, and of course if I had said the wrong thing here then I would get some horrible ...
es: @3660
@3675 Then it would say "message file." Yeah, right. OK. So this is good. We believe that this is working right.
es: @3675
Now what can we do? We can @3690 just say bang.. And then it says boing, right, and there's the sequence. So do it again? Idiot's delight now. OK so name1 and name2
es: @3690
@3705 are the "receive"s and now we hit the qlist and there's the first message and there's the second and those are the two messages or the two pairs of messages I've put in this file. ,,, Where's the file now?
es: @3705
@3720 I think I must have closed it. There. So that is
es: @3720
@3735 the easiest way to sequence stuff in Pd. And you can combine this with ... oh, these can be any kind of messages you want, so you can combine this with line~ objects to do things that
es: @3735
@3750 ramp or what-not. I mean, anything you can do with messages.
es: @3750
You can cofect things that have messages with bunches of arguments and then use unpack to get them out. @3765 Which one would do a lot of, actually ,when you really are doing this. What else should I say about this?
es: @3765
@3780 Other messages qlist takes: I don't know if, well ... "print" is a good message.
es: @3780
@3795 When you tell the thing to print itself, out on the Pd window comes everything the things has -- sorry about the back slashes. That's a good way of checking whether the thing is what you wanted to do. And finally, and
es: @3795
@3810 now we are going to be living dangerously. ...
es: @3810
If you want to make a nice loop out of this you could do something like this. Let's go back... where's the text file again? Here. @3825 Let's say we want to do this and then we want it to loop. So I'm going to say after another second -- By the way I could either have the semicolon or not here for technical reasons, but I'm going to put it just to be simple.
es: @3825
@3840 And then I'm going to say "restart bang." Semicolon just to be complete. Oh, this is not a really good idea is it? How am I going to ever
es: @3840
@3855 be able to stop this? ... Student 2: Is there a "stop" message?
es: @3855
There is, actually. That will work. We'll do this: "stop" ... Let's just check; so I should be able to say @3870 "bing" ...and the third thing is going to be an error message, because there's nobody named "restart." Oh, I ditn's get an error. Oh I didn't save ... This is the sort of thing that happens -- you've got to save this, then you've got to
es: @3870
@3885 tell it to read the sequence, and then you can tell it to do this stuff ... "bing" .. "bing" and then the error there" "restart: no such object" And now I can say "receive restart"
es: @3885
@3900 and that's just going to bang the qlist -- I'll make if flash by hooking it through the button. I hope this works: Yeah!
es: @3900
@3915 So now, you have another way of making the step sequencer, if you wanted to. There's one little thing about this, one more mesage that you might like, which is that you can set the tempo.
es: @3915
@3930 Let's do it this way: $1, recall is, in a message box, in the message box context, $1 is just
es: @3930
@3945 "take the value and stick it in the message." So here if I say 1 it's going to be "tempo 1, which should be the original tempo, and if I double it it does that for me: ...
es: @3945
@3960 And then "stop" doesn't stop it! -- because it doesn't have a method for stop... OK. I think it's called "rewind", actually.
es: @3960
@3975 Good. Why is it called "rewind"? Because there's more that you can do that I'm not telling you about. You can, if you want to, single-step through the messages instead of having it sequence through them. So to do that you send it "rewind"
es: @3975
@3990 and then "next" and then you can control your own timing instead of using qlists' own timing and that would be useful if you wanted to make something that had random variations in the timing or some algorithmic way
es: @3990
@4005 of controlling timing besides just the numbers in the qlist itself. Given the fact that there's this "tempo" message here we could set the tempo to 1/1000 and then just have this thing be in beats like one beat instead of 1,000 milliseconds
es: @4005
@4020 and that would work fine. -- Although when I'm starting out I just always do it in milliseconds because it's easier to think about that, I think. You don't have to agree with that.
es: @4020
@4035 Oh, since everything else in Pd is in milliseconds it might just be easier to have them be coherent as opposed to having them be different in the qlist from everywhere else. So that's the
es: @4035
@4050 qlist object, which is key to making sequences. ... Yeah? Student 2: Can you explain the $1 in the "tempo" message?
es: @4050
Miller: Oh yeah. This is a very confusing thing. So what I'll do @4065 is I'll print these out and give it a couple of tempi like that: ... and then it makes messages and the messages are what you put in there except that $1 has substituted for it the value
es: @4065
@4080 of the first argument that went in. So this is the way that you can make messages that vary inside a single message box. And furthermore, if you have a packed message with several numbers in it they can be addressed as $1,
es: @4080
@4095 $2, $3 and so on so you can have multi-dimensional variability. You haven't had to do this much because you haven't seen very many objects which are complicated enough where they take a bunch of different messages like this.
es: @4095
@4110 For the most part, messages are always just numbers because usually simple objects only do one kind of thing, or at least one kind of thing per inlet, so numbers suffice as a message passing language, but an object like qlist it has a bunch of state,
es: @4110
@4125 there are a bunch of things you might wish to ask it to do like rewind and go to the next thing and change its tempo and so on. And then you need a bunch of different kinds of messages like this and then you need message boxes that can put together messages that have both words and numbers in them,
es: @4125
@4140 symbols and numbers, and have them still be variable. So I've been avoiding doing this for reasons of sanity, but that's there and ready to get used. ...
es: @4140
@4155 Other questions about this? ... Yeah? Student 3: What are the outlets of qlist?
es: @4155
Miller: The outlets are useful if you want to make your own sequencer. @4170 This one gets a bang whenever qlist finishes, if you want to know that. Actually, I could have made this loop in a different way by just doing that. This one doesn't get anything when qlist is being used
es: @4170
@4185 as sequencer by itself, but if you single step it, if you say 'next,' it goes up to the next number and then outputs the number here. So, instead of having it interpret that number at time, you grab the number or numbers and interpret them to be whatever you want them to be. That's how you would make your own sequencer
es: @4185
@4200 out of qlist, that might do something more manual. And there'a much too much information in the help window for qlist that will tell you all this. The easy way to
es: @4200
@4215 get confused with qlist is to change the sequence in this text file and then forget to tell it to reread the new sequence. Also, if you read in a new sequence, I believe it will insist on rewinding itself,
es: @4215
@4230 so it won't be able to continue playing the sequence if you change the sequence while it's playing.
es: @4230
With one exception, this is able to do @4245 all of your sequencing needs. The one exception is that all these names are global, name1 and name2 and so on. If you wanted to have a bunch of instances of a patch, each of which was using a qlist to control
es: @4245
@4260 different variables that were "local," or dependent on the patch, then the qlist wouldn't suffice to do this. You would have to reach for a lower-level tool that allowed you to get those things and play with them yourself.
es: @4260
@4275 There are ways of doing that. In fact, if you get the qlist help window, it will send you on to the thing called "text file", which gives you less automation and lets you build more general things than what the qlist can do for you.
es: @4275
@4290 So, just to review where we're at, because we only have 5 minutes - that's not enough time to go start doing
es: @4290
@4305 wave packets or whatever it's going to be next. Next time is going to be frequency modulation from more of a 'how to do it' standpoint. How to make sounds out of it as opposed to simply with the theory is.
es: @4305
@4320 I've tried to fit that into this tale about waveshaping, which is what the last couple of things have been about, and ring modulation. Where we are in the book is now
es: @4320
@4335 Chapter 5-ish/Chapter 6. Chapter 6, I think, is what I'm going to squeeze down to a day or two, and that will be Thursday of next week if it's only one day. The topic there is going to be how to
es: @4335
@4350 go back and use that combination of waveshaping and ring modulation in a way that would allow you to be able to move the energy around
es: @4350
@4365 from peak to peak without having this problem not having things be harmonic when they're between two multiples of the same frequency. That's an important thing to be able to do, and there are several techniques for doing it. I think what I want to do is show you two of them
es: @4365
@4380 although I have to think very carefully about whether I can fit it in a reasonable amount of time. So, that would be next Thursday. Meanwhile, you see, I think, what you need to be able to see in order to do things that have sequences. That's sort of where we are.
es: @4380
And in @4395 book land, I've taken you pretty much all the way through modulation because this thing about frequency and phase modulation is that rampage
es: @4395
@4410 I went on about FM earlier. Then I'm going to give short shrift to this next one, as I call it, "designer spectra" -- That's just my own fanciful title. But that's going to be about how to
es: @4410
@4425 make peaks in the energy spectrum independently of whether the sound that you're making is harmonic or inharmonic. That's what's coming up next.
es: @4425
@4440 I've been looking in there, trying to make a plan as to how to do it but I haven't succeeded. Then, starting the week after next is going to be time shifts and delays. That's going to be how you make the standard delay effects, but also how you design reverberators and also
es: @4440
@4455 how you do delay tricks like pitch shifting, phasing, and chorus effects and what not. That will probably take a week. Then, by week 10, it will be time to look at GEM and that will probably be the rest of the quarter.
es: @4455