- ret = ioctl(sounddev, SNDCTL_DSP_STEREO, &stereo);
- ret |= ioctl(sounddev, SNDCTL_DSP_SETFMT, &bits);
- ret |= ioctl(sounddev, SNDCTL_DSP_SPEED, &rate);
- if (ret) printf("failed to set audio format\n");
+ frag |= 16 << 16; // fragment count
+ ret = ioctl(sounddev, SNDCTL_DSP_SETFRAGMENT, &frag);
+ if (ret < 0)
+ perror("SNDCTL_DSP_SETFRAGMENT failed");
+
+ bits = 16;
+ ret = ioctl(sounddev, SNDCTL_DSP_STEREO, &stereo);
+ if (ret == 0)
+ ret = ioctl(sounddev, SNDCTL_DSP_SETFMT, &bits);
+ if (ret == 0)
+ ret = ioctl(sounddev, SNDCTL_DSP_SPEED, &rate);
+ if (ret < 0)
+ perror("failed to set audio format");
+
+ // not sure if this is still needed (avoiding driver bugs?)