首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tinyalsa: pcm_start会产生错误的文件号

tinyalsa: pcm_start会产生错误的文件号
EN

Stack Overflow用户
提问于 2016-10-24 16:15:48
回答 2查看 1.1K关注 0票数 0

我正在尝试一个基本程序来使用tinyalsa,但是pcm_start总是失败,返回-1并将errno设置为9 (EBADF,即坏的文件号)。在此之前对pcm_open的调用返回一个非空指针,但它将errno设置为22

似乎没有关于tinyalsa的文档,所以我很难理解我应该做什么。我的程序基于一个来自alsa (不是tinyalsa)的例子,我已经读取了tinyalsa的头文件。有人能提供任何指导吗?

代码语言:javascript
复制
pcm * dev = pcm_open(1, 0, PCM_OUT, &config);
if (err = pcm_start(dev)) printf("err: %d\t errno: %d\n", err, errno);

(在http://pastebin.com/dpRRq3Aq上有完整的代码。)

我从pcm_openaplay --list-devices中推断出前两个参数的值,它输出如下:

代码语言:javascript
复制
**** 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上运行。)

EN

回答 2

Stack Overflow用户

发布于 2017-01-14 05:47:40

我是TinyALSA项目的维护人员之一。

你应该检查你的代码。

这就是如何正确地检查PCM结构的故障:

代码语言:javascript
复制
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的部分。如果你需要进一步的澄清,请为它创造一个问题!

谢谢

票数 3
EN

Stack Overflow用户

发布于 2016-10-25 02:45:46

现在看看pcm.ccannot set hw params消息来自第865行,

代码语言:javascript
复制
    if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_HW_PARAMS, &params)) {

params是从config初始化的。在这个地方我没有发言权。我最好的建议是在调试器中执行pcm_open并查看它对params的看法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40223008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档