在OpenBSD下使用C获取音频信息

时间:2015-04-06 17:04:30

标签: c audio openbsd

我正在尝试在OpenBSD中获取C程序的音量信息。通过shell命令将是

mixerctl outputs.master

但我怎样才能在C中得到它?到目前为止,我只在audio(4)联机帮助页中找到了类似的内容,但我无法让它工作(我不擅长C):

#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/audioio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    audio_info_t *info;
    int fd;

    fd = fopen("/dev/audioctl", "r");
    if (ioctl(fd, AUDIO_GETINFO, &info) < 0)
        fprintf(stderr, "%s\n", strerror(errno));
    ...
}

给了我Inappropriate ioctl for device。我究竟做错了什么?这是获得音量的正确方法吗?

解决方案:

我的错误似乎是错误地打开文件并移交info变量。两者都扎根于我与指针混淆...... 以下是我如何使用它:

#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/audioio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    audio_info_t info;
    FILE *fd;

    fd = fopen("/dev/audioctl", "r");
    if (ioctl(fileno(fd), AUDIO_GETINFO, &info) < 0)
        fprintf(stderr, "%s\n", strerror(errno));

    printf("%d", info.play.gain);
    fclose(fd);
}

0 个答案:

没有答案