tinyalsa: pcm_start выдает ошибку номера файла
Я пытаюсь использовать программу barebones для использования tinyalsa, но pcm_start
всегда терпит неудачу, возвращаясь -1
и настройка errno
в 9
(EBADF
плохой номер файла). Призыв к pcm_open
до этого возвращает ненулевой указатель, но он устанавливает errno
в 22
,
Там, кажется, нет документации для tinyalsa, поэтому у меня проблемы с пониманием того, что я должен делать. Я основал свою программу на примере из alsa (не tinyalsa), и я прочитал заголовочные файлы для tinyalsa. Кто-нибудь может дать какое-нибудь руководство?
pcm * dev = pcm_open(1, 0, PCM_OUT, &config);
if (err = pcm_start(dev)) printf("err: %d\t errno: %d\n", err, errno);
(Полный код доступен на pastebin.)
Я предполагаю значения для первых двух аргументов pcm_open
от aplay --list-devices
, который выводит:
**** List of PLAYBACK Hardware Devices ****
card 1: PCH [HDA Intel PCH], device 0: ALC3232 Analog [ALC3232 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
(Я собираю и запускаю это на своей рабочей станции, а не на Android.)
2 ответа
Я один из сопровождающих для проекта TinyALSA.
Вы должны проверить этот код на наличие ошибок.
Вот как вы бы правильно проверили наличие ошибки в структуре PCM:
dev = pcm_open(1, 0, PCM_OUT, &config);
if (dev == NULL) {
/* memory allocation failure */
} else if (!pcm_is_ready(pcm)){
printf("error: pcm_open: %s\n", pcm_get_error(pcm));
}
И это должно сказать вам, почему TinyALSA не может открыть ваше устройство.
Если это не поможет отладить вашу проблему, отправьте сообщение об ошибке на GitHub и добавьте ссылку на код, после чего появится сообщение об ошибке. pcm_open
и список содержимого каталога в /dev/snd
,
Кроме того, документация по API определенно находится в стадии разработки. Я включил бит о проверке ошибок pcm_open
в мастер ветке. Если вам нужно что-то прояснить, пожалуйста, создайте вопрос для этого!
Спасибо
Теперь, глядя на pcm.c, cannot set hw params
сообщение приходит из строки 865,
if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_HW_PARAMS, ¶ms)) {
params
инициализируются из config
, В этом месте я не могу сказать. Моя лучшая рекомендация - шагать pcm_open
в отладчике и посмотреть, что он думает о params
,