При работе с воспроизведением аудио я привык к следующему шаблону:
- один дисковый (или сетевой) поток, который считывает данные с диска (или сети) и заполняет кольцевой буфер
- один аудиопоток, который читает данные из кольцевого буфера, возможно выполняет DSP и записывает в аудиооборудование
(тянуть или толкать API)
Это отлично работает, и нет проблем при работе, скажем, с WAV-файлом.
Теперь, если исходные данные кодируются в сжатом формате, таком как Vorbis или MP3, декодирование занимает некоторое время.
И кажется, что довольно часто можно выполнять декодирование в потоке диска / сети.
Но разве это не неправильный дизайн? При доступе к диску или сети доступное время ЦП доступно для декодирования, но оно теряется, если декодирование происходит в одном потоке.
Мне кажется, что если сеть становится медленной, то риск переполнения буфера выше, если декодирование происходит последовательно.
Итак, разве не следует выполнять декодирование в аудиопотоке?
В моем контексте я бы предпочел не добавлять отдельный поток декодирования. Это для мобильных платформ, а SMP довольно редко встречается сейчас. Но, пожалуйста, скажите, действительно ли для вас имеет смысл отдельный поток декодирования.