Грузи wav с помощью libsndfile. А воспроизводить алсой не так и сложно, правда я бы не советовал тебе связываться с callback'ами для асинхронного вывода, а запустить воспроизведение отдельным потоком. Пример не привожу, т.к. из существующего проекта надо выкусить много лишнего, лучше посмотри простейший пример: A Minimal Playback Program
Звук воспроизводится небольшими кусочками, называемыми в терминологии alsa периодами. Чтобы воспроизвести несколько звуков параллельно, их нужно предварительно смикшировать (сложить сигналы в результирующий буфер-период) и потом отправить этот буфер на воспроизведение. Можно конечно и в несколько потоков восроизводить, а микширование делегиовать dmix'у, но это извращение.
В OSS просто открываешь в несколько потоков /dev/dsp и пишешь туда. Не парясь с микшированием.
В ALSA тоже так можно, я писал об этом выше. Только этот способ неправильный - жрет больше системных ресурсов и не дает возможности синхронизации звуков с точностью до сэмпла.
Это я все не к тому, что OSS хуже. ALSA API слишком перегружен и документирован с помощью Doxygen в стиле капитана очевидности (можно считать что недокументирован вообще), а OSS API гораздо более прямой. Но у ТС задача стоит именно в работе с ALSA.