I have developed drivers using both PortCls and AVStream.
AVStream is better for handling external hardware since it can handle surprise removal. It sounds like your solution is software only, so that doesn't matter.
Of the two that I have used, AVStream is more flexible but harder to implement. There aren't any good sample drivers, so it's much harder to get started, especially if you don't have any experience with audio drivers. In addition, an AVStream audio driver has to implement quite a bit of the functionality that PortCls does for you.
If I were you, I would start with the MSVAD sample in the DDK.
I don't have any experience with Stream Class.
The main thing to keep in mind is that all of these are just different methods for presenting a kernel streaming filter with the correct set of pins. They use different calls and data structures to describe the same thing. In my opinion, this really isn't obvious just from reading the documentation or the sample code.
Matthias Moetje wrote: