Я пытаюсь написать программу C (на Linux), которая воспроизводит синусоидальную волну от динамиков, используя интерфейс ядра ALSA (полный код). < /p>
Моя конфигурация выглядит следующим образом: < /p>
и после нескольких итераций цикла, программа всегда выходит с ioctl sndrv_pcm_ioctl_writei_frames: ресурс временно недоступен , без какого -либо звука. Без pulseaudio, Jack или даже Asoundlib, и я проверил, этот звук работает в виртуальной машине
__prep: if (ioctl(fd,SNDRV_PCM_IOCTL_PREPARE) < 0) pexit("ioctl SNDRV_PCM_IOCTL_PREPARE");
do { xfer.buf = data; xfer.frames = numframes > period_size ? period_size : numframes; xfer.result = 0; if(!(ret = ioctl(fd, SNDRV_PCM_IOCTL_WRITEI_FRAMES, &xfer))) { avail = mmap_status->hw_ptr + ALSA_BUFFER_SIZE - mmap_control->appl_ptr; if(avail < 0) avail += boundary; else if((unsigned int)avail >= boundary) avail -= boundary; numframes -= xfer.result; data += xfer.result * s; } else if (errno == EPIPE) goto __prep; else {perror("ioctl SNDRV_PCM_IOCTL_WRITEI_FRAMES"); exit(1);} } while(numframes > 0); [/code] и после нескольких итераций цикла, программа всегда выходит с ioctl sndrv_pcm_ioctl_writei_frames: ресурс временно недоступен , без какого -либо звука. Без pulseaudio, Jack или даже Asoundlib, и я проверил, этот звук работает в виртуальной машине