[26] L'lasons de Aether ver Beinags #8
- Conlan Walker

- Mar 25, 2022
- 2 min read
At the start of the week, I wanted to do at least two things, though I only ended up having time for one. Though, I think the one thing I did accomplish is substantial enough, so I'm not too worked up over it.
I wanted to make a prototype for some kind of concatenative synthesis, specifically.
For this purpose, I needed a soundbank of some kind. It didn't have to be a big one, or really even one larger than, like, 3 in size. To try replicating that one source-filter test I heard, I thought I'd only need those three to get the point across. So that's what I started with.

Shown above are the original ah, ee, and oh vocalizations I recorded. they are all about 400-something samples long, but not exactly. to produce the kind of effect I want more easily, I'd need to stretch these clips to actually be exact. I noticed that the ah sound was the middleground between the ee and oh, so I simply stretched the other two to meet that goal (467, 462, and 483 respectively).
I thought the easiest way to try smoothly interpolate between two of these is a linear interpolation on a sample-by-sample basis. Visually, it looks a lot like this:

As you can see, the speed of movement between the two samples are dependent on their distance to one another. Here's a link to the sketch if there's interest:
For my program to recognize and load the samples more easily, I exported the soundbank's files without wave headers, which basically means that they're just raw binary files with a bunch of 16 bit numbers in them.

The result of this work?
Kinda bad, unsurprisingly.
On the bright side, I immediately thought of a few ways to make it better.
The most major one also turned out to be the greatest pain to get past. It came in the form of simply recording more of the element for the soundbank. Instead of 1 cycle, I'd instead do 56.
56, because it's how many cycles were in the new ah sound when I started splicing it, so I might as well make the rest follow. A few problems came up when I had to not only sync up the clips before stretching, I also needed to make sure that the cycles match perfectly, to avoid wave overlaps alongside other undesirable stuff.

For example, these 4 are synced up to more closely match their shapes.
To edit the amount of cycles each clip had, I basically just needed to count them manually.
Other than the longer clips and syncing their zero crossings, I also:
Normalized the clips, making their peaks the same magnitude
Use better timings for the vowels (there is no text preprocessing)
Added one more vowel, for a total of 4 in the soundbank
The result the many changes?
A lot better, and a lot less robotic.
I didn't implement it, though maybe non-linear interpolation would sound a bit better.
I might try dynamically pitching the output up or down at some point, but for this week I think it's fine enough. Here's the code:


![[158] Most Important Brick in the Least Important Wall](https://static.wixstatic.com/media/df100d_f70be6ae4318455fbbc605cd1069c6ee~mv2.jpg/v1/fill/w_980,h_410,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/df100d_f70be6ae4318455fbbc605cd1069c6ee~mv2.jpg)
![[157] Mail Order Sacrifice](https://static.wixstatic.com/media/df100d_e284fa6c51b04524bab9d3cf9f1f6441~mv2.png/v1/fill/w_980,h_382,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/df100d_e284fa6c51b04524bab9d3cf9f1f6441~mv2.png)
![[156] Moat of Babble](https://static.wixstatic.com/media/df100d_091e451794b14aecb494a16c15c966c3~mv2.png/v1/fill/w_980,h_705,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/df100d_091e451794b14aecb494a16c15c966c3~mv2.png)
Comments