Look at line 398.  Why not just do that?  Why move the memset() to another file.

This function's job is to fill the buffer.  It's not doing it's job.  We should fire it and hire a new function that's able to do it's job.

There's no reason to make other functions take over __AudioMix()'s job.  It's nice for the semantics of the function to remain constant.  Then just return 0, which already means no samples available.

-[Unknown]