Возможно, вы захотите рассмотреть подход производитель-потребитель . В основном это включало чтение звуковых данных в буфер с использованием одного потока и потоковую передачу данных из буфера на звуковую карту с использованием другого потока.
Считыватель данных является производителем, а потоковая передача данных на звуковую карту - потребителем. Вам нужны метки верхнего и нижнего уровня, чтобы при переполнении буфера производитель прекратил чтение, а при низком уровне буфера производитель снова начал читать.
Библиотека шаблонов параллелизма производителя и потребителя C ++
http://www.bayimage.com/code/pcpaper.html
РЕДАКТИРОВАТЬ: Я должен добавить, что такого рода вещи сложно. Если вы создаете проигрыватель сэмплов, нагрузка на систему постоянно меняется в зависимости от того, какие клавиши воспроизводятся, сколько звуков воспроизводится одновременно, какова продолжительность каждого звука, нажата ли педаль сустейна, и другие факторы, такие как скорость жесткого диска и буферизация, а также объем доступной мощности процессора. Некоторые оптимизации программирования, которые вы в конечном итоге используете, не будут очевидны на первый взгляд.