diff --git a/cmuratori/hero/code/code524.hmml b/cmuratori/hero/code/code524.hmml new file mode 100644 index 0000000..41d396f --- /dev/null +++ b/cmuratori/hero/code/code524.hmml @@ -0,0 +1,67 @@ +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Integrating WAV Importing" vod_platform=youtube id=mXqA2U0sa28 annotator=Miblo] +[0:01][Welcome with a plug of Handmade Seattle[ref + site="Handmade Seattle" + url=https://www.handmade-seattle.com/], noting that the HandmadeCon site[ref + site="Handmade Hero" + page="Handmade Hero-related Conferences" + url=https://handmadehero.org/conference] now mentions this conference][:research] +[6:09][Recap and set the stage for the day merging in our WAV processing code][:"asset system" :parsing :speech] +[7:33][Navigate handmade_wav.cpp, eliciting a green flash in ~4coder – denoting a render buffer overflow – at 7\:43][:admin] +[7:46][Request a note of the green flash from @Miblo][:admin] +[8:44][@Miblo][Q: Gotcha! I'll email you the link to it] +[8:50][Set up to implement ParseWAV()][:"asset system" :parsing :research] +[11:29][Replace the assertions in ParseWAV() with :"error handling"][:"asset system" :parsing] +[20:08][Consider enabling ParseWAV() to support an arbitrary number of audio channels][:"asset system" :research] +[26:55][Consider enabling ParseWAV() to deinterleave audio sources, for mixing down to 8 channels][:"asset system" :parsing :research] +[29:00][Enable ParseWAV() to deinterleave audio sources into separate buffers, introducing GetChannelSamples()][:"asset system" :parsing] +[35:46][Remove the stale code from ParseWAV()][:"asset system" :parsing] +[36:54][Iterating over RIFF chunks][:"asset system" :"file format" :parsing :research] +[38:47][Create handmade_riff.cpp to contain our existing RIFF iteration code[ref + site=Wikipedia + page="Resource Interchange File Format" + url=https://en.wikipedia.org/wiki/Resource_Interchange_File_Format][ref + author="IBM Corporation and Microsoft Corporation" + title="Multimedia Programming Interface and Data Specifications 1.0" + url=http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf]][:"asset system" :"file format" :parsing] +[48:32][Set up ParseWAV() to parse any RIFF file, calling IterateRIFF()][:"asset system" :"file format" :parsing] +[52:36][Introduce IterateRIFF() and GetHeaderChunk()][:"asset system" :"file format" :parsing] +[1:00:32][Fix compile errors in the RIFF :parsing code][:"asset system" :"file format"] +[1:03:22][Set up to import our parsed audio data from .hha files][:"asset system" :research] +[1:05:50][Implement ProcessAudioImport(), streaming in our audio assets in chunks, and introduce UnloadAudio()[ref + site=Wikipedia + page="Dolby Surround 7.1" + url=https://en.wikipedia.org/wiki/Dolby_Surround_7.1]][:"asset system" :memory] +[1:21:16][Enable ProcessAudioImport() to tag audio assets with IDs][:"asset system"] +[1:27:03][Let ProcessAudioImport() instead not tag audio streaming chunks, but only reserve enough contiguously indexed asset chunks for the sample chain][:"asset system" :memory] +[1:36:51][Set up ParseTopLevelBlock() to stamp out the audio channel tags][:"asset system" :parsing] +[1:40:43][Q&A][:speech] +[1:41:09][@jkfsda][Q: Not related, but do you have any thoughts on Pony lang?][:language] +[1:42:00][@flightlesshippo][Q: How are you feeling about the way the :"asset system"'s working out so far?] +[1:43:09][@brimonk][Q: What does good :documentation look like? I think I've heard about you and [@naysayer88 Jon] talk about documentation being really bad and soul sucking when it's auto generated. So, what does "good" human made documentation look like for programmers, and for users?[ref + site="Microsoft Docs" + page="CreateFileA function" + url=https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea]] +[1:46:35][@brimonk][Q: So like, Unix man pages, because they lean closer to conceptual :documentation (as far as I can tell), would be more preferable to you?] +[1:47:08][@centhusiast][Q: Does the C code run faster, in general, if we replace something like width /=2 and height /=2 by the left bit shift <<1?][:performance] +[1:47:35][@nonsensation][Q: About Meow hash, do you have any resources on how you came up with it or where I could learn more about designing such?][:hashing] +[1:49:02][@ormone88][Q: Do modern game engines have their own sound synthesizer, or do they just import sounds from other software / libraries?[ref + site="RAD Game Tools" + page="The Miles Sound System" + url=http://www.radgametools.com/miles.htm][ref + site=fmod + url=https://www.fmod.com/]][:audio] +[1:52:24][@centhusiast][Q: Could you demonstrate in one episode how you implemented cmirror version control? It seems very interesting. Thanks a lot][:vcs] +[1:55:02][@flightlesshippo][Q: How many times have people given you the old "why reinvent the wheel?" line? I've never seen a discussion about building code from scratch not have at least someone smugly break that one out] +[1:58:36][@ivereadthesequel][Q: Speaking about MSDN, I had an issue where an old version of docs had a remark that was important for a certain call, that some value should be set a certain way in a struct. Not there in the new version. ACKK!! Anyway, doesn't the "remarks" section usually have information on things like "CloseFile" for the "CreateFile" call and so on?][:documentation] +[2:00:27][@jkfsda][Q: Why is Functional Programming not dominating corporate programming? It's much better for business apps][:language] +[2:01:20][@zennmystic][Q: You changed debugger yesterday… To what again?[ref + site=RemedyBG + url=https://remedybg.itch.io/remedybg]] +[2:05:00][@spkmodzzyt][Q: Anyway to get ~4coder for free?] +[2:05:28][@ivereadthesequel][Q: Do you know why functional programming languages tend to be so closely tied to formal verification and more theoretical work, by any chance?][:language] +[2:07:11][@spkmodzzyt][Q: Is it license-based?] +[2:07:35][@Brian][Q: Greetings [@cmuratori Casey]. How do you find balancing duplicating code versus trying to generalize a function? As an exercise, I took FormatString() – from [~hero Handmade Hero] – and wrote a FormatWideString() version. In the end I chose to simply take the format, call UTF8FromUTF16(), call FormatString() on a temp buffer, then UTF16FromUTF8(). But now I sacrifice :performance for maintenance. Other than if it becomes a bottleneck when profiling, what other things do you look for choosing to duplicate code and making it more a pain to maintain, than the benefits of having specific versions?][:language] +[2:09:24][Wrap it up with a plug of Handmade Seattle[ref + site="Handmade Seattle" + url=https://www.handmade-seattle.com/]][:speech] +[/video]