while (1) {
generate_noise(frames, period_size);
snd_pcm_writei(dev, frames, period_size);
}
잘 작동 ..
그러나 이것에 대한
:generate_noise(frames, period_size);
while (1) {
snd_pcm_writei(dev, frames, period_size);
}
소리가 끊어집니다. 각 반복에는 들리는 균열이 있습니다! 이로 인해 항상 버퍼가 업데이트됩니다. 왜?
UPD :
typedef struct {
int16_t left;
int16_t right;
} pcm_frame;
...
void
generate_noise(pcm_frame *frames, const size_t size)
{
size_t pos = 0;
while (pos < size) {
frames[pos].left = rand() % 200;
frames[pos].right = rand() % 200;
pos += 1;
}
}
은 generate_noise가 매번 다른 샘플을 생성합니까? , 그렇지 않다면 snd_pcm_writei는 쓰기가 완료되도록 충분한 지연을 가지고 있습니다 (프로세서가 PCM 블록보다 빠르게 실행 중일 수 있습니다)? –
@bare_metal 자세한 정보는 업데이트 소식입니다. – Deep
첫 번째 경우에는 매번 새 샘플을 생성하고 두 번째 경우에는 동일한 샘플을 반복해서 사용합니다. –