Косяк обнаружил при игре с блютус повязкой.
Когда палишь очередью, фиксируется только первый и последний выстрел, остальные - как ошибка (пуля пролетела).
Сдается мне - дело в переполнении буфера.
Ведь пока играет звук, обработки принятых данных не происходит.
Блютуска то все выплюнет, что в неё поступило, а вот в Аскете кольцевой буфер на 256 байт - на 16 выстрелов, с учетом заголовка и таймаута.
И вот, получили первый выстрел, завиксировали поражение и играем звук, в это время в буфер продолжают поступать новые данные, и если хвост кольцевого буфера догонит голову, данные просто не пишутся в буфер, получаем пропущенные байты - битый пакет.
Хотя это не объясняет - почему тогда следующие после первого 15 пакетов не обрабатываются правильно?
Это все мои догадки, надо будет серьёзно исследовать причину.
Первым делом проверить, что идет от повязки.
Самый простой выход - очищать буфер после воспроизведения звука.
Можно буфер увеличить, но не панацея, если скорострельность будет выше и он забьется.
Ещё вариант - переработать систему воспроизведения звуков.
У нас только выстрел воспроизводится "фоном", остальные блокируют главный цикл на время воспроизведения.
Так что ...
Какие будут мысли?