If I am developing a VOIP application, for example, built from reusable objects of functionality, and I come to the part where i need to do audio capture and playback output (from the microphone and to the speaker), that's an object. Actually, its TWO objects. One for capture, one for playback. It shouldn't matter if I use DirectX, some Wave Audio ActiveX control with a C# wrapper, or even the WaveOut API - the functionality, the methods and the interface can all be exactly the same. What it SHOULD NOT HAVE is being tied in with RTP / SIP Packets, or IPEndpoints. Those are OTHER OBJECTS that have nothing to do with Audio capture / playback.
So the question should always be:
WHAT ARE THE OBJECTS I NEED TO CREATE? WHAT IS THIS OBJECT?