add shape morphing with linear gesture

add shape morphing with linear gesture

task id: voxbox-shape-morphing

2024-06-27 08:48: Deprioritizing. #voxbox-shape-morphing

It's going to need to get done, but I can't have it in the priority bin like this.

2024-06-30 09:52: core mechanic for this shouldn't be too hard #voxbox-shape-morphing

2024-06-30 11:37: Initial voxbox-ing setup #voxbox-shape-morphing

2024-06-30 11:39: Oh, right. I need to build mplayer form source #voxbox-shape-morphing #mplayer-jack-thinkpad

This thinkpad isn't fully provisioned yet. Upstream mplayer doesn't have jack support, so I need to build it from source.

I remember this taking a while. Uh, maybe I should look at other things.

Nevermind? It just finsihed as I wrote this. That's not a great sign.

Ran into build issues. Great. Downloading from git, using the APKBUILD as hints.

MPlayer is kinda SVN? But this build script is using git?

2024-06-30 13:51: Finally getting around to implementing initial shape morphing #voxbox-shape-morphing #timelog:00:09:00

I think...

2024-06-30 13:58: This isn't going to work the way I thought, and I'm happy about that. #voxbox-shape-morphing

Initially I was going to add a small method to the tract that linearly interpolates two DRM tract shapes, given a position. BUT, the DRM shapes aren't in there. So, I actually have to plan out a new interface.

2024-06-30 14:00: Working out interface (ink and paper) #voxbox-shape-morphing #timelog:00:14:34

2024-06-30 14:48: Re-examining GSG code. Generics possible? #voxbox-shape-morphing #timelog:00:25:03

Basically, I want to generalize the values that can be interpolated. It is currently set to be 32-bit floats, BUT, it'd be nice to make them generics. That way, the shape morphing can work on those generics.

2024-06-30 15:01: some initial refactoring completed #voxbox-shape-morphing

The core Gesture and GestureVertex structs take in generic arguments, with the rest hardcoded to take in f32. This was much less friction than I expected.

Next steps: have the linear gesture signal generator take in generics as well. After that, the generics can be refit to take in shapes. Somehow. (Indices? references?)

2024-06-30 19:37: refactor linear gesture to take in generics #voxbox-shape-morphing #timelog:00:21:41

Okay that didn't work.

2024-06-30 19:49: stop writing code, think about the problem. Why generics? #voxbox-shape-morphing

This gesture is currently hard-coded to work with floats as values. Which, most of the time, is fine. However, for shape morphing, the values that need to be interpolated aren't floating point values, but tables.

The hope with generics was to be able to elegantly use the existing linear gesture logic to create gestures that morphed between DRM shapes.

Things would be set up in such a way that when tick() would be called, it would know to interplate between two DRM tables and store it somewhere in another table. That table could then be taken and passed to the vocal tract.

Stopping for now because I've had enough of a day.

2024-07-01 10:24: Chattering gibberish sounds are needed for critter #poke-demo #create-chatter-sounds #voxbox-shape-morphing

This could also be a good pre-cursor to the shape morphing stuff, as all the code could be a bit more relaxed and inside some sample rust code.

2024-07-02 08:40: Chatter sounds are precursor to morphing shapes with gesture #voxbox-shape-morphing

The chatter sound model will feature DRM shape morphing using a pre-defined set of tract shapes. This will be a simplified version of what I'm expecting to do with the Gesture shape morphing. The chatter system will interpolate using a phasor, but there won't be the rephasor component. The code structure will also attempt to be simplified as well.

2024-07-08 08:18: Downgrading shape morphing #voxbox-shape-morphing

The approach here isn't interactive enough, and I think I need to keep focusing on interaction. I'd rather have one mediocre vowel shape and interaction than several excellent vowel shapes and no interaction.