我正在使用Pulseaudio API,由于我对音响系统的工作原理知之甚少,我真的不明白为什么有多个应用可以同时使用麦克风。
或者更好地表达它:为什么没有调用fprintf
我有2个正在积极录制内容的应用程序,我启动了以下程序?
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <pulse/simple.h>
#include <pulse/error.h>
#define BUFSIZE 1024
int main(int argc, char*argv[]) {
/* The sample type to use */
static const pa_sample_spec ss = {
.format = PA_SAMPLE_S16LE,
.rate = 44100,
.channels = 2
};
pa_simple *s = NULL;
int ret = 1;
int error;
/* Create the recording stream */
if (!(s = pa_simple_new(NULL, argv[0], PA_STREAM_RECORD, NULL, "record", &ss, NULL, NULL, &error)))
fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n", pa_strerror(error));
return 0;
}
答案 0 :(得分:0)
我猜您没有收到错误消息,因为该程序成功创建了与脉冲音频服务器的pa_simple连接。
您可能希望添加pa_simple_free(s);在你返回之前到你的main()的末尾。
此外,这里还有一个示例pa_simple记录程序的链接:parec-simple_8c-example
请参阅Pulse Audio API at freedesktop.org
编辑:您的问题“为什么不调用fprintf”是因为Pulse Audio Simple API不保证对麦克风的独占访问。因此,当其他两个应用程序已经“使用”麦克风时,如果您创建了与服务器的简单流连接,则不会生成错误。你的问题真的是“如何判断麦克风是否被任何程序使用 - 以及哪一个”?