<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6545261779449247218</id><updated>2012-01-14T17:33:11.525Z</updated><category term='coolstuff'/><category term='firefox'/><category term='meta'/><category term='math'/><category term='bugs'/><category term='elsewhere'/><category term='graphics'/><category term='code'/><category term='lambda'/><category term='sample'/><category term='offtopic'/><category term='synthesis'/><category term='life'/><title type='text'>Shaped Waves</title><subtitle type='html'>Exploration of sound, music, code and everything else in between.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-2983942600587225988</id><published>2012-01-14T17:09:00.001Z</published><updated>2012-01-14T17:33:11.535Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Z-buffer precision, camera pivot and optimal zNear</title><content type='html'>Everyone who has done any non-trivial 3D programming knows that sooner or later you run into problems with z-buffer precision. Especially a first-person situation you can have objects very near to the camera, which should not clip against the near-plane. But you also want to draw objects far away (say hills to the horizon). So you need a small zNear and a large zFar which runs into problems with precision, because of the non-linear screen-space z.&lt;br /&gt;&lt;br /&gt;There are well-known solutions from depth partitioning to distorting the z values, but sometimes you just need a "bit more precision" and the above solutions just cause more trouble than they solve. If only you could move the zNear a bit further away.&lt;br /&gt;&lt;br /&gt;Let's look at a first-person situation. The necessary (and sufficient) condition for avoiding any near-plane clipping (with any colliding geometry at least) is to place the near-plane completely inside the collision sphere (for rotational symmetry) of the camera. This can be a collision sphere of a player, or it can be the largest sphere that will fit inside the AABB or whatever else we collide with.&lt;br /&gt;&lt;br /&gt;The question is, what is the largest possible value of the zNear (for a given field-of-view) that will keep the near-plane completely inside the collision sphere? Well, it depends on where you put the "eye" point.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.signaldust.com/pics/near-plane-placement.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://www.signaldust.com/pics/near-plane-placement.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As should be obvious in the image, the near-plane (and hence the zNear distance) is larger in the right-image. The largest possible near-plane that will fit inside the sphere will always go through the sphere origin. It is important to realize that it doesn't matter (at all) whether the "eye" is inside the collision sphere: anything behind the near-plane will get clipped anyway and the eye is purely virtual. Both placements will avoid any near-plane clipping as long as no geometry gets inside the sphere.&lt;br /&gt;&lt;br /&gt;In practice first-person cameras (and other cameras that you turn directly) usually use the example on the left (it's quite obvious when you zoom: if you don't see any "parallax" movement when turning, then it's using the "left" version). This is what any text-book view/projection matrices will give you (eg D3DX helpers and whatever) unless you explicitly move the camera somewhere else.&lt;br /&gt;&lt;br /&gt;Now, I would like to argue that the placement on the right is &lt;i&gt;better even if you don't have precision issues&lt;/i&gt;, because it ends up feeling much more natural (on top of giving you larger optimal zNear which is easier to calculate). To understand why, we need to think of the "near-plane" as a lens. Then for a narrow field-of-view (eg high zoom) the "virtual" eye &lt;i&gt;should&lt;/i&gt; end up behind the "real eye." The pivot point then &lt;i&gt;should&lt;/i&gt; be much closer to the lens than the virtual eye position.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.signaldust.com/pics/near-plane-lens.png" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="134" src="http://www.signaldust.com/pics/near-plane-lens.png" width="488" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When I actually tried this in practice, I immediately realized why zooming in most games has always felt "wrong" as far as turning goes. It's because the pivot is in totally wrong place with regards to the view. By placing the pivot at the near-plane I ended up reducing the feeling of "tunnel vision" significantly and high-zoom no longer felt "shaky" at all. Turning actually gives you a sense of depth too (because of the slight parallax movement). You also see slightly more to your sides, which reduces the pressure to use high field-of-view for observing your surroundings (and you no longer need high field-of-view to combat the weird pivot either). All that on top of getting 4-8 times (well, it's FoV dependent; with more "zoom" you get larger zNear and hence more precision out in the distance) as large zNear without any near-plane clipping. I can't name a single negative really (go ahead and post of comment if you disagree).&lt;br /&gt;&lt;br /&gt;So given a collision sphere radius and field of view, how do we calculate the optimal zNear when the near-plane goes through the camera origin? It turns out to be quite simple. Something like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;// fovY is vertical field of view in radians&lt;br /&gt;// aspect is screenWidth / screenHeight&lt;br /&gt;// solve half near-plane diagonal for nominal zNear = 1&lt;br /&gt;float diag = tan(fovY / 2.f) * sqrt(1.f + aspect*aspect);&lt;br /&gt;&lt;br /&gt;// solve zNear for diagonal to equal collision radius&lt;br /&gt;float zNear = collisionRadius / diag;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you can calculate view matrix as usual, except move the camera backwards by zNear, because "camera" is really the "virtual eye" and we want near-plane through origin of the "real" camera.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-2983942600587225988?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/2983942600587225988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=2983942600587225988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2983942600587225988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2983942600587225988'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2012/01/z-buffer-precision-camera-pivot-and.html' title='Z-buffer precision, camera pivot and optimal zNear'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-5385906096814575600</id><published>2011-12-18T15:31:00.002Z</published><updated>2011-12-18T18:04:02.556Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Why is math (written) so complex?</title><content type='html'>It's been ages since I wrote to this particular blog, but rather than make a new blog I'm going to use the existing one to mention some things that are in my mind these days.&lt;br /&gt;&lt;br /&gt;We're going to start our series of rants with &lt;a href="http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation"&gt;quaternion rotations&lt;/a&gt;. Now if you check the link, you'll find some annoyingly messy (long, error prone to type) formulas for converting a rotation quaternion into a 3x3 rotation matrix. As far as I'm concerned this is yet another perfect example of how people tend to make math unnecessarily cryptic.&lt;br /&gt;&lt;br /&gt;Let's assume that we can multiply quaternions and use this to rotate vectors (see the link, it's simple enough). Now if we rotate axial unit vectors (1,0,0), (0,1,0) and (0,0,1) using the quaternion, we end up with a rotated basis that we can turn into a matrix simply by using those rotated vectors as the columns of the new matrix. It so happens that the resulting matrix is the rotation matrix that we want.&lt;br /&gt;&lt;br /&gt;Now for efficiency purposes (in code) one &lt;i&gt;might&lt;/i&gt; (if you don't trust your compiler's optimizer) want to write out the formulas, so all the products with zero can be dropped and all the products with one skipped and then simplify the remaining stuff a bit... but why do such premature optimizations when writing math for humans to read (as in Wikipedia) is just totally beyond me.&lt;br /&gt;&lt;br /&gt;PS. I figured I could take the opportunity to also complain about the general hand-waving about adding scalars and vectors in the above mentioned Wikipedia article. The whole issue could be easily eliminated by defining vector i=(&lt;i&gt;i,j,k&lt;/i&gt;) and taking a dot-product with the vector part of the quaternion. Then you'd end up with &lt;i&gt;a&lt;/i&gt;+vi which becomes type-safe being all scalars now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-5385906096814575600?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/5385906096814575600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=5385906096814575600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/5385906096814575600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/5385906096814575600'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2011/12/why-is-math-written-so-complex.html' title='Why is math (written) so complex?'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-6924124803649952661</id><published>2009-08-18T22:31:00.002Z</published><updated>2009-08-18T22:41:49.218Z</updated><title type='text'>Watch out for the angry kernel</title><content type='html'>After approximately 12 hours of trying to compile the thing after tweaking the source very slightly in order to fix a minor inconvenience:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;teemu@opensolaris:~$ uname -a&lt;br /&gt;SunOS opensolaris 5.11 &lt;b&gt;on111b-teemu&lt;/b&gt; i86pc i386 i86pc Solaris&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;And now I just hope it actually fixes the original problem and that I won't run into any driver problems...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-6924124803649952661?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/6924124803649952661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=6924124803649952661' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6924124803649952661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6924124803649952661'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2009/08/watch-out-for-angry-kernel.html' title='Watch out for the angry kernel'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-6931462109148419552</id><published>2009-07-31T03:33:00.002Z</published><updated>2009-07-31T03:35:49.510Z</updated><title type='text'>plugin project has a site</title><content type='html'>Ok, nothing much yet, but at least I've got something, and now I've got a place to host my stuff that doesn't fit that well into a blog.&lt;br /&gt;&lt;br /&gt;You can find it here: &lt;a href="http://www.signaldust.com"&gt;www.signaldust.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-6931462109148419552?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/6931462109148419552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=6931462109148419552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6931462109148419552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6931462109148419552'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2009/07/plugin-project-has-site.html' title='plugin project has a site'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-2858056301258985890</id><published>2008-07-06T02:58:00.003Z</published><updated>2008-07-06T03:20:32.199Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='lambda'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>What if...</title><content type='html'>What if there was no &lt;tt&gt;lambda&lt;/tt&gt; in Lisp, but if &lt;tt&gt;defun&lt;/tt&gt; returned the function defined? Wouldn't it be possible to define a macro such as:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(defmacro lambda (args . body)&lt;br /&gt;  `(defun ,(gensym) ,args . ,body))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Please excuse the half-Scheme notation.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-2858056301258985890?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/2858056301258985890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=2858056301258985890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2858056301258985890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2858056301258985890'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2008/07/what-if.html' title='What if...'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-6116832271327264474</id><published>2008-06-17T12:03:00.002Z</published><updated>2008-06-17T13:11:35.596Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>Still alive...</title><content type='html'>Some time has passed without any updates again. That's been because there has been enough other stuff happening I guess. Haven't had much to talk about too, because what I've been doing has either been not of general interest, or has been in a phase where it's not ready to be announced, or too damn technical to explain without some effort.&lt;br /&gt;&lt;br /&gt;Anyway, situation is that Valo was kinda announced on KVR forums and got some feedback. Then I basically rewrote it's modulation stuff and some minor additions and whatever. Still haven't been making much noise about it though, because I still haven't got a website up for it. The other thing is that I'm currently reconsidering what I'm going to do with it, because I'm not sure if I have time right now to add those features that I would like to see done before I start messing with licenses to people. I'm trying to fix the most critical stuff as soon as possible, but whether I'm going to do a commercial release is open. I'd like to see it used though, so I'm keeping the possibility open that I just release the current version as freeware instead and then do some new stuff in a successor as some stuff wouldn't easily fit in Valo anyway.&lt;br /&gt;&lt;br /&gt;In any case I managed to come up with some sort of a tune using (mostly) Valo, which gave me a better perspective of where it is currently. There's definitely a lot of things it could be doing, but at least I'm starting to believe that it actually already fills the initial design goals quite nicely. It can provide me some of the edge, but also warmth, that my previous attempt was incapable of. On the other hand adding the old filter from the previous project as an alternative might be a good idea, because the transistor-ladder-wannabe in Valo cannot quite do some of the sounds that I so liked about the previous project.&lt;br /&gt;&lt;br /&gt;I'm going to allocate some more time for DSP development again though. I've got a lot of ideas, but Valo is still my priority, and after that I'm considering a small personal platform of some sort, so I can go faster from quick&amp;amp;dirty prototypes to quality product. This will take some thinking and trying and testing, but I might talk about those things in the future here, since as far as I know, there's not that much audience on this blog that I would alienate.&lt;br /&gt;&lt;br /&gt;I'm also thinking of setting up a more generic website to collect and write about some stuff that is really hard to find on the web. Topics would probably fall between music theory, sound design theory and audio signal processing theory. I could write some of the stuff here, but I don't think a blog is necessarily the right format for that, and mixing my personal rants and proper content probably isn't such a great idea. I'm not going to build yet another open community forum though, because we've got enough venues for freeform discussion I think. Rather I'm thinking of focusing on editorial content.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-6116832271327264474?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/6116832271327264474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=6116832271327264474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6116832271327264474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6116832271327264474'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2008/06/still-alive.html' title='Still alive...'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-781746363135503723</id><published>2008-02-05T00:55:00.001Z</published><updated>2008-02-05T00:57:49.430Z</updated><title type='text'>Well.. I kicked a cable accidentally and...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3oVIZpWNwVw/R6e0O_HIkrI/AAAAAAAAABo/9PIHQyF7R3U/s1600-h/plastic.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_3oVIZpWNwVw/R6e0O_HIkrI/AAAAAAAAABo/9PIHQyF7R3U/s400/plastic.png" alt="" id="BLOGGER_PHOTO_ID_5163293667356086962" border="0" /&gt;&lt;/a&gt;Everything seems to work perfectly again.. had to replace the cable though..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-781746363135503723?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/781746363135503723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=781746363135503723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/781746363135503723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/781746363135503723'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2008/02/well-i-kicked-cable-accidentally-and.html' title='Well.. I kicked a cable accidentally and...'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3oVIZpWNwVw/R6e0O_HIkrI/AAAAAAAAABo/9PIHQyF7R3U/s72-c/plastic.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-4281924498863976233</id><published>2008-01-22T01:07:00.000Z</published><updated>2008-01-22T01:11:34.203Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><title type='text'>More interesting example of my project synth's sound</title><content type='html'>&lt;object type="application/x-shockwave-flash" data="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/vdb.mp3" height="17" width="17"&gt;&lt;param name="movie" value="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/vdb.mp3"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mystran.googlepages.com/vdb.mp3"&gt;[no-flash: mp3 here]&lt;/a&gt;&lt;/object&gt; Drums are from FPC, rest is from 4 instances of the previously mentioned new project, effects are external, and mixing sucks. Turn volume up, it's not mastered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-4281924498863976233?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/4281924498863976233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=4281924498863976233' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/4281924498863976233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/4281924498863976233'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2008/01/more-interesting-example-of-my-project.html' title='More interesting example of my project synth&apos;s sound'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-602231652505734297</id><published>2008-01-19T01:47:00.000Z</published><updated>2008-01-19T02:13:22.069Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><title type='text'>Valoa kansalle</title><content type='html'>I had to throw away my old synth, for various reasons. Well, I didn't really throw it away, but it will take ages to make anything sort of a product, 'cos certain things weren't really done the way you would want to do them in a reliable software synthesizer.&lt;br /&gt;&lt;br /&gt;The good news though is that for past half a year or so, I've been working on a new codebase, and somewhat different concept. The new synth thingie I call 'Valo' and while it's nowhere near finished, it's got to the point where most things work (well, there's no PWM yet and modwheel/aftertouch/velocity support is missing, and MIDI side lacks quite a few things and...) and it makes sound.&lt;br /&gt;&lt;br /&gt;At present it has a completely redesigned oscillators, new filter design (well, if you can call a ladder low-pass new anymore these days) and it does all kinds of fancy stuff like mm.. sawtooth and square waves (well actually triangle as well) and it can do stuff like oscillator sync (properly) and the signal path is so non-linear it's a pain to tune everything 'cos when the signal levels change in one place, everything behind it has to be retuned with proper levels again.. which fortunately is not that many things.&lt;br /&gt;&lt;br /&gt;I can't say it sounds clean. With all the non-linearities causing intermodulation distortions and noise here and there making everything slightly unstable, it most certainly does not sound very clean. On the bright side, it can sound approximately as clean as your average analog synth.&lt;br /&gt;&lt;br /&gt;&lt;object type="application/x-shockwave-flash" data="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/valoa.mp3" height="17" width="17"&gt;&lt;param name="movie" value="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/valoa.mp3"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mystran.googlepages.com/valoa.mp3"&gt;[no-flash: mp3 here]&lt;/a&gt;&lt;/object&gt;   Yup, there's sample. Thought you'd like one. Some external effects (Kjaerhus Classic-series Chorus/Delay/Reverb) with pretty simple settings to make it sound less dry as the synth itself doesn't have any add-on effects (I'm not a huge fan of those) and currently only ever outputs mono-signal (that might change I think).&lt;br /&gt;&lt;br /&gt;The patch itself is a "little of everything" thing with almost everything in the synth in use, including oscillators in synced mode, pitch envelope driving the slave, some (per-voice) distortion to trash it after filter, and finally both LFOs messing with the signal. No manual knob tweaking done. I'm sure you can tell I'm a very good sound designer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-602231652505734297?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/602231652505734297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=602231652505734297' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/602231652505734297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/602231652505734297'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2008/01/i-had-to-throw-away-my-old-synth-for.html' title='Valoa kansalle'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-2317686015418444049</id><published>2007-11-19T23:09:00.000Z</published><updated>2007-11-19T23:14:46.629Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><title type='text'>Draw a picture</title><content type='html'>It's still somewhat of a sketch, but no idea if I'm ever going to develop it futher. Coloring was done really quick (probably about 5 minutes total) so the shading is off in a lot of places, I know.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3oVIZpWNwVw/R0IYIzzJUBI/AAAAAAAAABU/zL6UXyCwArg/s1600-h/ig_b1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_3oVIZpWNwVw/R0IYIzzJUBI/AAAAAAAAABU/zL6UXyCwArg/s320/ig_b1.jpg" alt="" id="BLOGGER_PHOTO_ID_5134693064778534930" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-2317686015418444049?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/2317686015418444049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=2317686015418444049' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2317686015418444049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2317686015418444049'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/11/draw-picture.html' title='Draw a picture'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3oVIZpWNwVw/R0IYIzzJUBI/AAAAAAAAABU/zL6UXyCwArg/s72-c/ig_b1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-6006022899669195631</id><published>2007-11-16T17:16:00.000Z</published><updated>2007-11-16T17:18:32.888Z</updated><title type='text'>Blogspot comment settings</title><content type='html'>Personal preferences for blogger comment settings would be:&lt;br /&gt;&lt;br /&gt; - allow only logged-in users&lt;br /&gt; - don't bother with the word verification&lt;br /&gt;&lt;br /&gt;Rationale: allowing anonymous comments can result in quite a bit spam, yet teh word verification is nice, except I personally fail approximately 50% of them. Which is not nice. Which is why I've disabled those, and waiting to see if there is a problem even without anonymous comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-6006022899669195631?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/6006022899669195631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=6006022899669195631' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6006022899669195631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6006022899669195631'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/11/blogspot-comment-settings.html' title='Blogspot comment settings'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-1320576566481050482</id><published>2007-10-15T05:52:00.001Z</published><updated>2007-10-15T05:54:12.333Z</updated><title type='text'>Winterbells?</title><content type='html'>Maybe I've played this a bit too much...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ferryhalim.com/orisinal/g3/bells.htm"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_3oVIZpWNwVw/RxMAO801mMI/AAAAAAAAABM/IZVr3P99XUw/s320/winterbell_small.jpg" alt="" id="BLOGGER_PHOTO_ID_5121437458096298178" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-1320576566481050482?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/1320576566481050482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=1320576566481050482' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/1320576566481050482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/1320576566481050482'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/10/winterbells.html' title='Winterbells?'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3oVIZpWNwVw/RxMAO801mMI/AAAAAAAAABM/IZVr3P99XUw/s72-c/winterbell_small.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-3665536044926662862</id><published>2007-10-14T16:32:00.000Z</published><updated>2007-10-14T16:41:12.199Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><title type='text'>Audio from some recent code</title><content type='html'>&lt;object type="application/x-shockwave-flash" data="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/tingles.mp3" height="17" width="17"&gt;&lt;param name="movie" value="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/tingles.mp3"&gt;&lt;br /&gt;&lt;a href="http://mystran.googlepages.com/td1.mp3"&gt;[no-flash: mp3 here]&lt;/a&gt;&lt;/object&gt; While I generally liked how my old code sounded, my last iteration of a sound engine had couple of problems. It wasn't nearly as "fat" sounding as I'd hoped, with a bit of too much noise. It'd still sound fine for lower sounds, but the high-end was never quite clear, and both the filter and the oscillators were quite dark and not very aggressive.&lt;br /&gt;&lt;br /&gt;Well, I'll be throwing those oscillators away. The filter I might eventually fix. But I've been working with some new oscillators and a new filter, and this sample demonstrates what three triangle waves and a lowpass filter can sound. This is pure virtual analog, no wavetables or anything like that, everything is calculated realtime. Unfortunately, it IS quite heavy on the CPU as of now, so I'll have to see how to optimize it. Eventually that'll happen.&lt;br /&gt;&lt;br /&gt;Oh, and I apologize that mp3-compression is somewhat audible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-3665536044926662862?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/3665536044926662862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=3665536044926662862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/3665536044926662862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/3665536044926662862'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/10/audio-from-some-recent-code.html' title='Audio from some recent code'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-3824551119300805442</id><published>2007-09-11T01:24:00.000Z</published><updated>2007-09-11T01:36:19.151Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>Changes</title><content type='html'>Things change fast these days. I actually did get some more filter stuff prototyped, thought it wasn't quite up to the job, read some, fixed some, realized I need better oversampling filters, read some more, banged my head to the wall, and mm.. got the whole thing together, and it sounds okayish. I won't be posting sample at this time (that will have to wait), but I thought I'd mention it anyway.&lt;br /&gt;&lt;br /&gt;On signal processing front, I'm now trying to figure out how to do hard-clipping without aliasing or huge amounts of oversampling. It turns out that some of the most fun sounds one can get from clipping is with rather loud partials in the high-mid frequency range, and if the sound is otherwise even "cleanish" one can only have tiny amounts of clipping before it starts sounding awful. Anyway, I have an approach in mind, though I won't be giving any details, since it's kinda high-tech stuff, and I wouldn't want somebody else to steal it, yet. ;)&lt;br /&gt;&lt;br /&gt;Anyway, that brings us to another thing, which is that things might stall here again, at least on the signal processing front, if not on the music front. I'll try to keep the music alive even if the development stalls, but it kinda seems I might have some new things taking my time in the near future. We'll see. But what I can tell at this point, it does mean I won't be releasing a full-blown synth anytime soon like the plan kinda was. That'll have to wait for now. Depending on things, I might be splitting some of my work into smaller modules, and release those, but suffice to say, I don't have much pressure for it now.&lt;br /&gt;&lt;br /&gt;Anyway, I'm still a happy man. Actually happier. I'm kinda feeling like I was 20 again, so much is happening right now, with things rolling in the right directions. Now all that is missing is finding a nice little girl yelling at me for spending the week in front of the screen and the weekend in a bar.&lt;br /&gt;&lt;br /&gt;No honestly, I ain't an alcoholic or anything, even if during the last two weeks I've managed to have two hangovers. Neither was that bad though, more like those I had when I was around ... mm.. 20? Haha.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-3824551119300805442?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/3824551119300805442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=3824551119300805442' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/3824551119300805442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/3824551119300805442'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/09/changes.html' title='Changes'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-2806982430752925291</id><published>2007-09-02T05:51:00.000Z</published><updated>2007-09-02T06:08:55.972Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>What's going on?</title><content type='html'>Not much eh?&lt;br /&gt;&lt;br /&gt;Well, stuff is going on, even if I've not posted much. I've been doing a couple of things, none of which have been very inspiring from the blogging point of view.&lt;br /&gt;&lt;br /&gt;First of all, I've been working and spending time with friends quite a bit, which has been quite refreshing. It seemed certain stuff was very stalled, but now there's more going on around here again, and I'm enjoying all kinds of new experiences I've stumbled across. Could even say, I'm kinda regaining my interest in the so-called "real life" which is probably healthy.&lt;br /&gt;&lt;br /&gt;Then there's being going on lots of making of music. Not much to release yet, I think. I'm thinking of building a larger set of material together first, then releasing some sort of EP maybe.. I don't know. But I'm also learning a lot of new stuff with music, things I've not really even been interested before, which is lots of fun, but the results aren't really that great yet, so it'll take a while before anyone else gets to enjoy. Maybe I'll talk about that in some later post, so we'll get a bit less inactivity here.&lt;br /&gt;&lt;br /&gt;Then there's been some writing of code. Not much has resulted from that yet, since it's largely been of the research variety. I'm finally quite happy (that's probably an understatement) with my basic model of a saw-core analog oscillator, and I'm looking forward to prototype some wave-shaping to derive triangle and sine from that core in a somewhat similar way that a real analog oscillator module would do. I have the theory laid out already, so it's really just a matter of finishing some math and writing some code at this point. Then I've been doing some more extensive research with filters, unfortunately not quite as much as I'd liked to, though. Got some theory to prototype on that front as well.&lt;br /&gt;&lt;br /&gt;Oh and then there's some other stuff, and plans that get delayed, and whatever. Hopefully things will advance in the near future again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-2806982430752925291?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/2806982430752925291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=2806982430752925291' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2806982430752925291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2806982430752925291'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/09/whats-going-on.html' title='What&apos;s going on?'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-5221858156684028807</id><published>2007-07-10T19:01:00.000Z</published><updated>2007-07-10T19:10:04.883Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='elsewhere'/><title type='text'>Green Ray of Light - Poisoned Breakfast</title><content type='html'>Well, actually got another tune made as well.. a real quickie again, but well, possibly a bit more to the point than the previous one. Hopefully I'll find the time to do something really thought out stuff as well again soon..&lt;br /&gt;&lt;br /&gt;As usual, &lt;a href="http://www.mikseri.net/grol"&gt;http://www.mikseri.net/grol&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-5221858156684028807?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/5221858156684028807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=5221858156684028807' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/5221858156684028807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/5221858156684028807'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/07/green-ray-of-light-poisoned-breakfast.html' title='Green Ray of Light - Poisoned Breakfast'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-1607364154364495974</id><published>2007-06-04T19:42:00.000Z</published><updated>2007-07-10T19:09:41.542Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='elsewhere'/><title type='text'>Green Ray of Light - Cow</title><content type='html'>Finally got some new music done: &lt;span style="font-weight: bold;"&gt;Cow&lt;/span&gt; can be found at &lt;a href="http://www.mikseri.net/grol"&gt;http://www.mikseri.net/grol&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-1607364154364495974?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/1607364154364495974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=1607364154364495974' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/1607364154364495974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/1607364154364495974'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/06/green-ray-of-light-cow.html' title='Green Ray of Light - Cow'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-609816487850555904</id><published>2007-04-19T21:23:00.000Z</published><updated>2007-04-19T21:24:50.976Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='coolstuff'/><category scheme='http://www.blogger.com/atom/ns#' term='offtopic'/><title type='text'>Linux user again</title><content type='html'>I've now got Ubuntu, running with the top-notch eye-candy manager Beryl.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-609816487850555904?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/609816487850555904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=609816487850555904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/609816487850555904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/609816487850555904'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/04/linux-user-again.html' title='Linux user again'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-7202009862724161688</id><published>2007-03-08T00:04:00.000Z</published><updated>2007-03-09T18:17:02.279Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='lambda'/><title type='text'>Working on a language...</title><content type='html'>There hasn't been much of an update here for some time now, and there's a good reason: I've been working on all kinds of stuff most of which is not in the state of offering anybody anything yet.&lt;br /&gt;&lt;br /&gt;This might get a bit too technical for this blog, but the latest thing I've been working with is an implementation for a Scheme like language, with some specific design goals:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Make it compile to truly native code, such that it can be used to implement it's own runtime system, ultimately including the whole operating system, if desired.&lt;/li&gt;&lt;li&gt;Make it able to bootstrap itself on the fly, dynamically replacing the running version without requiring a restart. As a related feature, (almost) all code should be garbage collectible.&lt;/li&gt;&lt;/ol&gt;So far I have a basic compiler written in Scheme that compiles to x86 assembler. It's nowhere near being able to compile itself yet (and the language differs enough to require a port eventually), but it's properly tail-recursive, can deal with variable arguments and multiple return values without allocating any memory (except that receiving "rest" arguments into a list will obviously allocate said list), and requires minimal external runtime support; a few lines of C to get stuff going and a bit of assembler for &lt;span style="font-family:courier new;"&gt;apply&lt;/span&gt; primitive.&lt;br /&gt;&lt;br /&gt;Road map for now is to finish the remaining missing features in the basic language, get linking of libraries to work, add a basic garbage collector, write a meta-circular interpreter, get a REPL running, port the compiler to run on top of the interpreter, extend the compiler to run just-in-time, and then figure out how to get the system to dump it's full state into a file such that it can be resumed. Once all that works, the rest should be relatively easy.&lt;br /&gt;&lt;br /&gt;One would think there are already enough Scheme implementations, but this one will be different. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-7202009862724161688?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/7202009862724161688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=7202009862724161688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/7202009862724161688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/7202009862724161688'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/03/working-on-language.html' title='Working on a language...'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-8415130857816460586</id><published>2007-01-08T02:39:00.000Z</published><updated>2007-01-08T02:43:00.234Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='elsewhere'/><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><title type='text'>Virtual Bending</title><content type='html'>There was some talk about circuit bending on a Finnish music site &lt;a href="http://www.mikseri.net/"&gt;Mikseri.net&lt;/a&gt;, which got me thinking whether I'd have some stuff to try bend at home.&lt;br /&gt;&lt;br /&gt;Well, I failed to find anything.&lt;br /&gt;&lt;br /&gt;So instead I made some noise with my virtual analog software synth project. The tune, "Virtual Bending" can be found in my &lt;a href="http://www.mikseri.net/mystran"&gt;less-serious-music-project&lt;/a&gt; page in Mikseri.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-8415130857816460586?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/8415130857816460586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=8415130857816460586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/8415130857816460586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/8415130857816460586'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/01/virtual-bending.html' title='Virtual Bending'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-2073675839803383231</id><published>2007-01-06T17:13:00.000Z</published><updated>2007-01-06T17:17:56.543Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='elsewhere'/><title type='text'>Blue Mace - Purple Spruces</title><content type='html'>Made a tune last night, available at &lt;a href="http://www.mikseri.net/bluemace"&gt;http://www.mikseri.net/bluemace&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Drums are samples, piano is 4Front, rest is my VA synth project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-2073675839803383231?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/2073675839803383231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=2073675839803383231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2073675839803383231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2073675839803383231'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/01/blue-mace-purple-spruces.html' title='Blue Mace - Purple Spruces'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-5421618893933917327</id><published>2007-01-06T01:23:00.000Z</published><updated>2007-01-06T17:18:11.681Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><title type='text'>Filter singing</title><content type='html'>&lt;object type="application/x-shockwave-flash" data="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/td3.mp3" height="17" width="17"&gt;&lt;param name="movie" value="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/td3.mp3"&gt;&lt;br /&gt;&lt;a href="http://mystran.googlepages.com/td3.mp3"&gt;[no-flash: mp3 here]&lt;/a&gt;&lt;/object&gt; Who needs oscillators when you have a filter. A bit noisy for now, will have to clean it a bit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-5421618893933917327?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/5421618893933917327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=5421618893933917327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/5421618893933917327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/5421618893933917327'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/01/filter-singing.html' title='Filter singing'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-5847746821463032182</id><published>2007-01-05T07:45:00.000Z</published><updated>2007-01-05T07:50:29.678Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><title type='text'>More sound</title><content type='html'>&lt;object type="application/x-shockwave-flash" data="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/td2.mp3" height="17" width="17"&gt;&lt;param name="movie" value="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/td2.mp3"&gt;&lt;br /&gt;&lt;a href="http://mystran.googlepages.com/td2.mp3"&gt;[no-flash: mp3 here]&lt;/a&gt;&lt;/object&gt; Since the synth thingie has got some new features, I thought of posting another small sample of what it can sound like in wrong hands. That's a dry sample, with 2 voices unison for the stereo effect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-5847746821463032182?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/5847746821463032182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=5847746821463032182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/5847746821463032182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/5847746821463032182'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/01/more-sound.html' title='More sound'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-9006042976986338884</id><published>2007-01-05T02:01:00.000Z</published><updated>2007-01-05T02:19:11.917Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>A little teaser..</title><content type='html'>So here's a small screenshot of a filter. It's still lacking text labels and I'm not quite sure about the color scheme, but it's using the vector graphics library thingie.&lt;br /&gt;&lt;br /&gt;The library itself needs a bit of tweaking before anything using it goes live. Maybe I'll release the library itself as well at some point, I don't know yet.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3oVIZpWNwVw/RZ20-680QTI/AAAAAAAAAA8/CMpLaRKJwAY/s1600-h/filter.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_3oVIZpWNwVw/RZ20-680QTI/AAAAAAAAAA8/CMpLaRKJwAY/s320/filter.png" alt="" id="BLOGGER_PHOTO_ID_5016364553029828914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was a bit worried about the performance, since it seemed to slow stuff down when redrawing a lot. That could happen for example when another window was moved on top of the thing. What was a bit strange though, was this would typically only happen after a while...&lt;br /&gt;&lt;br /&gt;I was already going to write some bitmap caching logic to avoid doing the actual drawing unless something really changed in the window. Then my eyes caught something missing: I was leaking resources in my painting routine. Single line of code to fix that bug. Now it runs pretty nice just redrawing everything on the fly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-9006042976986338884?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/9006042976986338884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=9006042976986338884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/9006042976986338884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/9006042976986338884'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2007/01/little-teaser.html' title='A little teaser..'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3oVIZpWNwVw/RZ20-680QTI/AAAAAAAAAA8/CMpLaRKJwAY/s72-c/filter.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-6759697811363874731</id><published>2006-12-31T15:34:00.000Z</published><updated>2006-12-31T15:38:38.897Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='coolstuff'/><title type='text'>Islands of Consciousness</title><content type='html'>&lt;a href="http://incubator.quasimondo.com/flash/islands_of_consciousness.php"&gt;Islands of Consciousness&lt;/a&gt; is damn cool. Random composition of random images feeding a random audio composition thingie, creating something pretty strange.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-6759697811363874731?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/6759697811363874731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=6759697811363874731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6759697811363874731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6759697811363874731'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/islands-of-consciousness.html' title='Islands of Consciousness'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-8825343195666680601</id><published>2006-12-31T10:29:00.000Z</published><updated>2006-12-31T10:45:31.289Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Subdivision made visible</title><content type='html'>I'm currently working on stroking, and trying to come up with a decent algorithm for that stuff. The big problem here isn't really how to code stuff, but rather what things should look like.&lt;br /&gt;&lt;br /&gt;Anyway, in order to visualize some problems for myself, I draw a stroke around a stroke. Then I got the idea that if I modify it a little bit, line segments will become visible, and I kinda liked what the result looked like, as it nicely illustrates the bezier subdivision done.&lt;br /&gt;&lt;br /&gt;So in the picture below, there is a cubic bezier, which is subdivided into line segments. Then each of these line segments is made 15 pixels wide, and filled with white. Finally those are stroked with a black outline, which makes each individual segment clearly visible.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3oVIZpWNwVw/RZeUP6xAY5I/AAAAAAAAAAw/nlOeBWpKDr0/s1600-h/strokedbezlines.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_3oVIZpWNwVw/RZeUP6xAY5I/AAAAAAAAAAw/nlOeBWpKDr0/s320/strokedbezlines.png" alt="" id="BLOGGER_PHOTO_ID_5014639711294088082" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-8825343195666680601?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/8825343195666680601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=8825343195666680601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/8825343195666680601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/8825343195666680601'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/subdivision-made-visible.html' title='Subdivision made visible'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3oVIZpWNwVw/RZeUP6xAY5I/AAAAAAAAAAw/nlOeBWpKDr0/s72-c/strokedbezlines.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-8920310856692348166</id><published>2006-12-31T07:34:00.000Z</published><updated>2006-12-31T07:36:08.133Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>Today's daily insight</title><content type='html'>I think I just cracked a really hard problem: Why does one sometimes get lots of stuff done, while some days it's totally impossible to do anything?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-8920310856692348166?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/8920310856692348166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=8920310856692348166' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/8920310856692348166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/8920310856692348166'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/todays-daily-insight.html' title='Today&apos;s daily insight'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-2235682839724025905</id><published>2006-12-27T12:01:00.000Z</published><updated>2006-12-27T12:49:51.635Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Elliptic arcs and some more pron</title><content type='html'>So far the hardest problem to solve turned out to be how to parametrise arcs. There are three obvious parameters, namely a control triangle of the rational quadratic bezier that is the arc. But how to get a weight for the middle point?&lt;br /&gt;&lt;br /&gt;After playing with different parametrisation, I currently have one which gives the middle point the weight of &lt;span style="font-style: italic;"&gt;cos(angle/2)&lt;/span&gt; where &lt;span style="font-style: italic;"&gt;angle&lt;/span&gt; is an extra parameter to the function. It happens that when the legs of the control triangle are of equal length, and the angle between them is supplied as &lt;span style="font-style: italic;"&gt;angle&lt;/span&gt;, one gets an arc of a circle. When the legs aren't of equal length, or the parameter isn't the angle between the legs, one gets an ellipse instead. For zero angle one gets normal non-rational bezier, and for angle &lt;span style="font-style: italic;"&gt;pi&lt;/span&gt; one gets a straight line. Larger angles give the other side of the ellipse or circle.&lt;br /&gt;&lt;br /&gt;Bonus benefit is that when the curve is subdivided in the middle, one doesn't need to track weights for the control points. Just using half the angle will give the proper midpoint weight.&lt;br /&gt;&lt;br /&gt;For the typical uses of arcs, there's an extra function which simply makes the guess that the angle between the legs will probably be fine. For stuff like corners of polyline strokes or rectangles this seems to be a reasonable value.&lt;br /&gt;&lt;br /&gt;And naturally we have a sample picture:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3oVIZpWNwVw/RZJoEKxAY4I/AAAAAAAAAAk/mM9FZZ8Ajmw/s1600-h/bezandarc.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_3oVIZpWNwVw/RZJoEKxAY4I/AAAAAAAAAAk/mM9FZZ8Ajmw/s320/bezandarc.png" alt="" id="BLOGGER_PHOTO_ID_5013183756035449730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the picture you see 3 elliptic arcs, one line and one cubic bezier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-2235682839724025905?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/2235682839724025905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=2235682839724025905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2235682839724025905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2235682839724025905'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/elliptic-arcs-and-some-more-pron.html' title='Elliptic arcs and some more pron'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3oVIZpWNwVw/RZJoEKxAY4I/AAAAAAAAAAk/mM9FZZ8Ajmw/s72-c/bezandarc.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-4965783367143910370</id><published>2006-12-24T00:25:00.000Z</published><updated>2006-12-24T00:26:53.128Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><title type='text'>Beziergons</title><content type='html'>Did I miss the deadline?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3oVIZpWNwVw/RY3JHaxAY3I/AAAAAAAAAAY/FzCe10FBhM8/s1600-h/beziershot.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_3oVIZpWNwVw/RY3JHaxAY3I/AAAAAAAAAAY/FzCe10FBhM8/s320/beziershot.png" alt="" id="BLOGGER_PHOTO_ID_5011883089614365554" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-4965783367143910370?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/4965783367143910370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=4965783367143910370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/4965783367143910370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/4965783367143910370'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/beziergons.html' title='Beziergons'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3oVIZpWNwVw/RY3JHaxAY3I/AAAAAAAAAAY/FzCe10FBhM8/s72-c/beziershot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-6930649091649021861</id><published>2006-12-23T19:23:00.000Z</published><updated>2006-12-23T20:10:14.244Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Two dimensions for a change</title><content type='html'>Haven't got much of anything interesting added to the synthesizer thingie during the last few days. Instead, I've actually played around a bit in two dimensions. For a long time I've wanted a simple vector graphics library. A few days ago I started playing with the math. The result is rather boring system based on a couple of simple principles:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;There is canvas, masks, and paint; paint is applied to canvas through a mask.&lt;/li&gt;&lt;li&gt;Geometric primitives (= line paths) work with masks.&lt;/li&gt;&lt;li&gt;Colors, gradients, bitmaps, whatever, work with paint.&lt;/li&gt;&lt;li&gt;To draw a white triangle, cut a triangle shaped hole in a mask, apply white paint.&lt;/li&gt;&lt;/ol&gt;The result looks like this (smaller one is screencap, bigger is the same thing magnified):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3oVIZpWNwVw/RY2EkKxAY2I/AAAAAAAAAAM/Ei_ZLZwPm1g/s1600-h/firstshot.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_3oVIZpWNwVw/RY2EkKxAY2I/AAAAAAAAAAM/Ei_ZLZwPm1g/s320/firstshot.png" alt="" id="BLOGGER_PHOTO_ID_5011807717233288034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, at this point there isn't even a datatype for a path, so the individual lines in the mask must be drawn separately, but fixing that isn't a huge amount of work (actually probably less than writing this blog post). And I'd expect stuff like beziergons to work before christmas.&lt;br /&gt;&lt;br /&gt;Now, what is nice about the design, is that as you see it antializes rather beautifully. It actually draws what you'd get by doing 16x16 naive supersampling and averaging down. Ofcourse all the supersampling is internal to the line drawing function. I'll probably make it 256x256 when I have the extra minute to tweak the algorithm a bit more.&lt;br /&gt;&lt;br /&gt;The whole thing is a very basic scanline rasterizer, so the trick really is in the scanlines. Now a scanline rasterizer works by incrementing a counter every time it crosses a line going up, and decrements a counter every time it crosses a line going down. Then you typically fill when you've got either non-zero or odd number in your counter, depending a bit on what you want.&lt;br /&gt;&lt;br /&gt;The antialising then is actually quite easy, just a question of putting fractional values in the scanline buffer, and drawing an anti-aliased line. The only important thing then is that the line drawing function makes sure that when one starts from left side of the line, and sums all the pixel values until one has crossed the whole line, the result is exactly one. In a sense, what is being drawn is the finite difference of the edge of an antialised half-plane. And I actually got the idea originally from anti-aliasing audio with BLEPs. Don't ask.&lt;br /&gt;&lt;br /&gt;And the best thing? Since integration (and differentiation) are linear operations, one can draw each line independently, and just integrate the scanlines at the end. There aren't really any special cases whatsoever.&lt;br /&gt;&lt;br /&gt;Ps. I'm not sure if the above makes any sense. I might consider a better explanation some other day, but I now have to add those beziergons. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-6930649091649021861?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/6930649091649021861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=6930649091649021861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6930649091649021861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6930649091649021861'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/two-dimensions-for-change.html' title='Two dimensions for a change'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3oVIZpWNwVw/RY2EkKxAY2I/AAAAAAAAAAM/Ei_ZLZwPm1g/s72-c/firstshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-9027893930094299913</id><published>2006-12-18T12:37:00.000Z</published><updated>2006-12-18T12:48:08.488Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><title type='text'>Sample of what I'm working on</title><content type='html'>Ok, here's a really quick sample clip of stuff my synthesizer project currently does.&lt;br /&gt;&lt;br /&gt;&lt;object type="application/x-shockwave-flash" data="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/td1.mp3" height="17" width="17"&gt;&lt;param name="movie" value="http://mystran.googlepages.com/musicplayer.swf?song_url=http://mystran.googlepages.com/td1.mp3"&gt;&lt;br /&gt;&lt;a href="http://mystran.googlepages.com/td1.mp3"&gt;[no-flash: mp3 here]&lt;/a&gt;&lt;/object&gt; One sound, live playing, a touch of delay but no other effects.&lt;br /&gt;&lt;br /&gt;Oh and the player (which hopefully works) is &lt;a href="http://musicplayer.sourceforge.net/"&gt;XSPF Web Music Player&lt;/a&gt; button version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-9027893930094299913?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/9027893930094299913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=9027893930094299913' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/9027893930094299913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/9027893930094299913'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/sample-of-what-im-working-on.html' title='Sample of what I&apos;m working on'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-2459873212712192904</id><published>2006-12-17T19:08:00.000Z</published><updated>2006-12-17T19:10:03.945Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='offtopic'/><title type='text'>Firefox oddity</title><content type='html'>Ok, seems this &lt;span style="font-family: courier new;"&gt;a.t.timeout&lt;/span&gt; thing is stranger than I thought. Yesterday &lt;span style="font-family: courier new;"&gt;0&lt;/span&gt; caused no timeout. Today it means instant timeout??&lt;br /&gt;&lt;br /&gt;I guess I should just get the source and figure out where the problem is, but I feel lazy. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-2459873212712192904?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/2459873212712192904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=2459873212712192904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2459873212712192904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2459873212712192904'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/firefox-oddity.html' title='Firefox oddity'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-6258377899501014567</id><published>2006-12-16T15:20:00.000Z</published><updated>2006-12-17T06:26:27.660Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Fast pow2 for pitch to frequency mapping</title><content type='html'>Ok, so I posted a &lt;a href="http://www.kvraudio.com/forum/viewtopic.php?t=161611"&gt;thread about this in KVR&lt;/a&gt;, and obvious I'm not the only one to have thought about it (which was to be expected ofcourse), but I'm still posting this here for future reference, since I don't have anything else to post about today.&lt;br /&gt;&lt;br /&gt;In synthesizers, being able to convert from &lt;span style="font-style: italic;"&gt;pitch&lt;/span&gt; to &lt;span style="font-style: italic;"&gt;frequency&lt;/span&gt; is necessary. In equal tempered scale this involves the relation &lt;span style="font-style: italic;"&gt;f&lt;/span&gt;=&lt;span style="font-style: italic;"&gt;b&lt;/span&gt;2&lt;sup&gt;&lt;span style="font-style: italic;"&gt;p&lt;/span&gt;/12&lt;/sup&gt;, where &lt;span style="font-style: italic;"&gt;f&lt;/span&gt; is the frequency, &lt;span style="font-style: italic;"&gt;b&lt;/span&gt; is the tuning base, and &lt;span style="font-style: italic;"&gt;p&lt;/span&gt; is the pitch in semitones relative to the base tuning. This is trivially solved in C++ by &lt;tt&gt;f*pow(2.0,p/12)&lt;/tt&gt;. Trouble is, &lt;tt&gt;pow()&lt;/tt&gt; takes an awful lot of time, so it's not really realistic if you want to do it on per-sample, per-voice basis.&lt;br /&gt;&lt;br /&gt;One would expect to find some nice code that solves this problem reasonably accurate for the purposes of synthesizers, yet still reasonably fast. I've tried doing this a few times, but always failed. By reasonably accurate I mean something that gives resolution of about 1/100 semitones over the range of hearing (around 10 octaves). Most solutions I've seen are either&lt;br /&gt;&lt;ol&gt;&lt;li&gt;wildly inaccurate or only accurate near 0&lt;/li&gt;&lt;li&gt;only marginally faster (often slower than) than what &lt;tt&gt;gcc&lt;/tt&gt; gives for &lt;tt&gt;pow&lt;/tt&gt;&lt;/li&gt;&lt;/ol&gt;So all hope is lost? Not really, if one is willing to pay for a few lookup tables.&lt;br /&gt;&lt;br /&gt;Now, looking at the facts, the accuracy requirements are measured in fractions of semitones. This suggests rounding before exponentiation should not cause problems, if the exponential itself can be calculated accurately. So how much accuracy does one need?&lt;br /&gt;&lt;br /&gt;First of all, one only needs to consider one side, since 2&lt;sup&gt;-&lt;span style="font-style: italic;"&gt;x&lt;/span&gt;&lt;/sup&gt; = 1/2&lt;sup style="font-style: italic;"&gt;x&lt;/sup&gt;. Let's say we say we want to go up and down 10 octaves, we need at least 4 bits for the integer part. As for the fractional part, 1 octave = 12 semitones, and 1 semitones = 100 cents. Hence there are 1200 cents to an octave. For 12 bits one gets 4096 tunings between octave. That's a total of 16 bits, and more than enough.&lt;br /&gt;&lt;br /&gt;Full lookup table for 16 bits would ofcourse take 65536 entries, which for 32-bit floats takes a 256kB. Not huge these days, but exponentials have the nice property that &lt;span style="font-style: italic;"&gt;a&lt;/span&gt;&lt;sup&gt;(&lt;span style="font-style: italic;"&gt;x&lt;/span&gt;+&lt;span style="font-style: italic;"&gt;y&lt;/span&gt;)&lt;/sup&gt;=&lt;span style="font-style: italic;"&gt;a&lt;/span&gt;&lt;sup style="font-style: italic;"&gt;x&lt;/sup&gt;&lt;span style="font-style: italic;"&gt;a&lt;/span&gt;&lt;sup style="font-style: italic;"&gt;y&lt;/sup&gt;. And this ofcourse means one can do a separate table for the upper 8 bits and the lower 8 bits. That's 256 entries per table, both tables together taking 2kB of memory.&lt;br /&gt;&lt;br /&gt;So the algorithm for &lt;tt&gt;pow2(x)&lt;/tt&gt; with two tables of 8 bits each then goes:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;if &lt;span style="font-style: italic;"&gt;x&lt;/span&gt;&amp;lt;0 recurse for 1/2&lt;sup&gt;-&lt;span style="font-style: italic;"&gt;x&lt;/span&gt;&lt;/sup&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;multiply &lt;span style="font-style: italic;"&gt;x&lt;/span&gt; by 2&lt;sup&gt;12&lt;/sup&gt; &lt;/li&gt;&lt;li&gt;round/floor/whatever &lt;span style="font-style: italic;"&gt;x&lt;/span&gt; into an integer (in C++ cast works fine)&lt;/li&gt;&lt;li&gt;do table lookups with 8 lowest, and 8 next bits, and multiply them together&lt;/li&gt;&lt;li&gt;return result&lt;/li&gt;&lt;/ol&gt;Ofcourse one can use more than two tables for more accuracy or lower memory requirements. How to populate the lookup tables is left as an exercise for the reader.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-6258377899501014567?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/6258377899501014567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=6258377899501014567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6258377899501014567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/6258377899501014567'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/fast-pow2-for-pitch-to-frequency.html' title='Fast pow2 for pitch to frequency mapping'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-9029238142852427835</id><published>2006-12-16T10:36:00.000Z</published><updated>2006-12-16T10:52:56.575Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='offtopic'/><title type='text'>Firefox preference bugs</title><content type='html'>I just love some of these Firefox preference bugs. There's a setting in firefox called  &lt;span style="font-family:courier new;"&gt;accessibility.typeaheadfind.timeoutenable&lt;/span&gt;. When set to &lt;span style="font-family:courier new;"&gt;false&lt;/span&gt;, it's purpose is to disable hiding the typeahead find bar. This supposedly stopped working properly after version 0.10 or something like that.&lt;br /&gt;&lt;br /&gt;Now, there's another setting called &lt;span style="font-family:courier new;"&gt;accessibility.typeahead.timeout&lt;/span&gt;. You'd assume that if you set this to some large value, you'd essentially have your bar stay visible? Nope, doesn't seem to work. What seems to work though, is setting the &lt;span style="font-family:courier new;"&gt;a.t.timeout&lt;/span&gt; to value &lt;span style="font-family:courier new;"&gt;0&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now, the funny thing is I can easily find several sources that tell me that &lt;span style="font-family:courier new;"&gt;a.t.timeoutenable&lt;/span&gt; is broken, but don't see the workaround mentioned anywhere. I remember wondering (and solving) this for multiple times now, so I'll put it here for future reference.&lt;br /&gt;&lt;br /&gt;I'm still using 1.5 series Firefox at home, but if I'm not mistaken the situation is identical in 2.0 series. At least I remember fighting with it after oh-so-wonderful centrally-administered computer-management thingie decided to give me 2.0 on another computer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;edit: &lt;/span&gt;I guess it's worth adding that yes, there's an open bug since years now, still in state &lt;span style="font-family:courier new;"&gt;New&lt;/span&gt;, so probably no use trying to report this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-9029238142852427835?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/9029238142852427835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=9029238142852427835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/9029238142852427835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/9029238142852427835'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/firefox-preference-bugs.html' title='Firefox preference bugs'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-2758082866584124204</id><published>2006-12-15T12:28:00.000Z</published><updated>2006-12-15T12:53:03.639Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>This blogger thingie</title><content type='html'>Ok, I can't resist temptation for another meta-post.&lt;br /&gt;&lt;br /&gt;I've wasted the last five or so hours with playing around with this blog thingie, trying to get it to look more like mine, and I have to say that while there's still stuff I want to do later, this thingie is actually quite easy to customize.&lt;br /&gt;&lt;br /&gt;Need to fix some thing a bit later, and I have to say I miss some of the typographic macros I had. I guess I'll either have to find a replacement, write a Javascript kludge, or learn to live without em.&lt;br /&gt;&lt;br /&gt;Still searching for some nice solution to drop audioclips into my blog posts. I'm gonna need that kind of thing in the near future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-2758082866584124204?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/2758082866584124204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=2758082866584124204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2758082866584124204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/2758082866584124204'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/this-blogger-thingie.html' title='This blogger thingie'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545261779449247218.post-7093517256573266750</id><published>2006-12-15T09:10:00.000Z</published><updated>2006-12-15T12:16:19.814Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>New waves, new blog.</title><content type='html'>So anybody reading this is welcome to my new blog. The subject of this blog will be synthesized and processed sound. The name is partly a joke, but highlights the fact that I don't like overly clean sounds, even if I'm definitely not a noise lover either.&lt;br /&gt;&lt;br /&gt;As for the blog I'll be at least exploring some of the sounds and processing tricks I encounter when I play with things. Some of the content will probably be in form of tutorials. Some will be naive exploration of stuff everybody else already knew. Hopefully some ideas will also be novel. At times I'm sure to comment on things having to nothing to do with music. And some posts will almost surely involve some code, for I am a programmer after all. Finally, I'll probably link to some of my music from time to time.&lt;br /&gt;&lt;br /&gt;There's some other stuff too, but it's really a bit too early to go into details. Time will show what will come out of this.&lt;br /&gt;&lt;br /&gt;As some people reading this might know, this ain't my first blog. The previous blog was called "Beyond the Parenthesis." The last post dates back around a year now. The reasons for it's decay are many, but probably the biggest issue was that the time taken to maintain a custom built publishing kludge was simply too much. My hobbies where also starting to drift away from it's focus a bit too much.&lt;br /&gt;&lt;br /&gt;As for comments, feel free to give lots of them, but please keep discussions civil and at least somewhat in topic. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545261779449247218-7093517256573266750?l=shapedwaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shapedwaves.blogspot.com/feeds/7093517256573266750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545261779449247218&amp;postID=7093517256573266750' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/7093517256573266750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545261779449247218/posts/default/7093517256573266750'/><link rel='alternate' type='text/html' href='http://shapedwaves.blogspot.com/2006/12/new-waves-new-blog.html' title='New waves, new blog.'/><author><name>mystran</name><uri>http://www.blogger.com/profile/06909652019981419973</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
