
Сообщение от
SAM style
Полгода назад - на Celeron 1.7MHz и GF4MX потрескивало очень редко, в основном при перетаскивании окна. Так что ищи проблему у себя. В Убунте 9.10, поговаривают, со звуком не всё ладно было.
У тебя вывод происходит одним куском.
Код:
void oss_play() {
if (snd->audio!=0) write(snd->audio, &snd->sndbuf[0], snd->sbptr - &snd->sndbuf[0]);
}
Система совершенно не гарантирует, что весь его за раз примет. Надо писать до тех пор, пока у тебя не закончится буфер:
Код:
std::size_t toWrite(buf.size() * sizeof(buf.front()));
const uint8_t* data(safe_ptr_cast<const uint8_t*>(&buf[0]));
while (toWrite)
{
int res(::write(DevHandle.Get(), data, toWrite * sizeof(*data)));
DevHandle.CheckResult(res >= 0, THIS_LINE);
toWrite -= res;
data += res;
}