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, &params)) {

params инициализируются из config, В этом месте я не могу сказать. Моя лучшая рекомендация - шагать pcm_open в отладчике и посмотреть, что он думает о params,

Другие вопросы по тегам