[video output=day142 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Per-sample Volume Interpolation" vod_platform=youtube id=XxReVrByBYw annotator=ZedZull annotator=Miblo annotator=debiatan] [00:00:46][Plan for today] [00:02:07][Dynamic asset streaming and audio mixing didn't take that much code] [00:03:37][Public service announcement: Sometimes, writing your own code is faster than reusing other people's code] [00:05:56][Some differences between audio and video animation and their effects on sound mixing architecture] [00:09:55][We want to change volume over time, while avoiding discontinuities] [00:12:53][Definition of the interface to ChangeVolume] [00:14:03][Two ways of specifying speed of volume change: time it takes to reach target volume vs rate of change] [00:21:20][Using dimensional analysis to figure out dVolume] [00:30:50][Changing resolution back to 960x540 to remain in debug mode at a reasonable framerate] [00:34:30][Avoiding overshooting the target volume] [00:44:28][Problem of current approach: repeated imprecise floating-point addition may lead to errors] [00:45:25][Alternative approach: linear interpolation between beginning and end volumes] [00:46:42][Alternative approach: backsolving to hit the target volume at the end of the loop] [00:48:11][Testing ChangeVolume interactively] [00:53:08][Q&A][:speech] [00:53:49][@constantinopol][Can you show again how you skipped a failed assertion, by going to disassembly?] [01:00:10][@swampy_butt][Would there be any case where you would like to increase volume non-linearly?] [01:02:01][@flyingsand][So far you can just change the volume of individual sounds. Should we be able to change the volume of the master output as well?] [01:03:26][@chronaldragon][Will Handmade Hero support spatialization? e.g. sound mostly in left channel if on left side of the screen, sound mostly in right channel if on right side, etc.] [01:04:03][@rpg_ignis][How hard would it be to do a fade-out/fade-in for the music when the window loses focus/gets focus back?] [01:05:09][@gasto5][So what did you end up doing to dVolume if it wasn't linear interpolation?] [01:05:28][@waterlimon][If you implemented Assert using ?: instead of if, you could use it as part of expressions or other such places where you can't have an if statement] [01:06:15][@gasto5][Did you already implement audio clipping?] [01:07:34][@gasto5][(clarification) Managing audio dynamic range. Yes] [01:08:04][@waterlimon][With respect to Assert, I don't know why you would want to put one in an expression, but apparently that's how it's usually implemented... It can't hurt, right?] [01:09:45][@flyingsand][You can't just hard-clip audio, though. If you don't use a compressor/limiter you would have to at least use soft-clipping with tanh or something] [01:10:12][@gasto5][Will you implement audio file compression?] [01:11:35][@abnercoimbre][What would an audio compressor do?] [01:13:45][@gasto5][How much optimization would the mixer require?] [01:14:21][@javajax][What is the difference between a limiter and a compressor?] [/video]