Most simple and low-level audio libraries (e.g OpenAL, SDL, etc.) can play PCM waveforms quite easily. You fill a buffer with the wave you want to play, and play it. To make a waveform from stuff like frequency and volume and whatnot, you need to write a bit of code (probably a couple of lines for simple waves) and need to know basic trigonometry.
OpenAL is a cross-platform API targeted towards 3D games. Its interface is philosophically similar to OpenGL and provides functions to manage audio sources in a virtual 3D environment (position, speed, etc.) and provides some sound and environment effects (reverb, etc.) I know that it can decode some compressed formats (MP3, Vorbis,...) using extensions, but I'm not sure whether it has any encoding functionality.
SDL (or Simple Direct-media Layer) is also cross-platform and game-oriented, but it offers much more than audio. But any functionality that it does offer is very basic and this is intentional and by design. SDL is a platform abstraction layer. It's audio capabilities are similarly very basic and low-level; providing only playing and recording PCM waves. Of course, there are extention libraries (e.g. SDL_mixer) that have more functionality.
References:
- OpenAL on Wikipedia
- OpenAL homepage (seems down, as of Aug 5th, 2013)
- OpenAL Soft, a fork of the OpenAL library available from Creative Labs
- SDL homepage
- SDL_mixer
As far as I know, both projects ship documentation and examples along with their source code, so you might want to get their source code and start experimenting.
If I've understood what you want to do correctly, either of these libraries can do what you want rather easily, but in my personal opinion, SDL is simpler and easier to use (unless you want 3D positional audio and effects.)