В процедурине на событие таймера 20мс:
Буфер дозаполняется, если не полностью заполнился, отправляется играть.
Выдаётся сигнал на отрисовку окна (если она закончилась с прошлого раза)
Выдаётся сигнал на начало эмуляции (тоже если закончилась)
Изнутри эмуляции через эн-ные промежутки сэмулированного времени выдаётся сигнал "положить очередной сэмпл в буфер".
Сигналы привязаны к соответствующим слотам и обрабатываются главным циклом Qt - судя по докам, каждый в своём потоке.