在OpenBSD下用C获取音频信息
我正在尝试获取OpenBSD中C程序的音量等音频信息。通过shell,命令将是在OpenBSD下用C获取音频信息,c,audio,openbsd,C,Audio,Openbsd,我正在尝试获取OpenBSD中C程序的音量等音频信息。通过shell,命令将是 mixerctl outputs.master 但是我怎样才能在C中得到它呢?到目前为止,我只在音频(4)手册页中找到了类似的内容,但我无法实现这一点(我不擅长C): GCC有一个-Wall开关,用于在您的代码尝试执行此类操作时发出警告(其他编译器可能也会这样做)。我总是在编译代码时使用它来避免愚蠢的错误。使用它编译原始代码时会给出如下警告:audio.c:12:8:警告:从“FILE*”(也称为“struct”u
mixerctl outputs.master
但是我怎样才能在C中得到它呢?到目前为止,我只在音频(4)
手册页中找到了类似的内容,但我无法实现这一点(我不擅长C):
GCC有一个
-Wall
开关,用于在您的代码尝试执行此类操作时发出警告(其他编译器可能也会这样做)。我总是在编译代码时使用它来避免愚蠢的错误。使用它编译原始代码时会给出如下警告:audio.c:12:8:警告:从“FILE*”(也称为“struct”u sFILE*)分配给“int”的整数转换指针不兼容。
mixerctl
和audioctl
最初是用c编写的,如果您有openbsd基本源代码,则每个指针仅约400行(我推荐),您可以在/usr/src/usr.bin/
中找到它们,是的,谢谢。由于音频(4)
中的更改破坏了此解决方案,请查看mixerctl
如何帮助修复/重写。
#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));
...
}
#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);
}