Ubuntu 20.04 下编译 PulseAudio

1 前言
2 下载编译
具体构建过程参照官方文档:https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/Developer/PulseAudioFromGit/

2.1 下载代码
git clone git://anongit.freedesktop.org/pulseaudio/pulseaudio

2.2 编译
编译过程遇到太多错误了,见问题集,主要是依赖没有安装

meson build
ninja -C build
sudo ninja -C build install
sudo ldconfig

3 demo实践
PulseAudio对外api非常简单,基本就是和io操作一样:read,write,open…
pa_simple_new:创建到服务器的新连接。
pa_simple_read:从服务器读取一些数据。(阻塞)
pa_simple_write:向服务器写入一些数据。
pa_simple_free:关闭并释放与服务器的连接。
pa_simple_drain:等待守护进程播放所有已写入的数据。
pa_simple_flush:刷新播放或记录缓冲区。
pa_simple_get_latency:返回播放或记录延迟。
下面是官方demo:

/***
This file is part of PulseAudio.

PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 2.1 of the License,
or (at your option) any later version.

PulseAudio is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
***/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>

#include <pulse/simple.h>
#include <pulse/error.h>

#define BUFSIZE 1024

int main(int argc, char*argv[]) {

/* The Sample format 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;

/* replace STDIN with the specified file if needed */
if (argc > 1) {
int fd;

if ((fd = open(argv[1], O_RDONLY)) < 0) {
fprintf(stderr, __FILE__”: open() failed: %s\n”, strerror(errno));
goto finish;
}

if (dup2(fd, STDIN_FILENO) < 0) {
fprintf(stderr, __FILE__”: dup2() failed: %s\n”, strerror(errno));
goto finish;
}

close(fd);
}

/* Create a new playback stream */
if (!(s = pa_simple_new(NULL, argv[0], PA_STREAM_PLAYBACK, NULL, “playback”, &ss, NULL, NULL, &error))) {
fprintf(stderr, __FILE__”: pa_simple_new() failed: %s\n”, pa_strerror(error));
goto finish;
}

for (;;) {
uint8_t buf[BUFSIZE];
ssize_t r;

#if 0
pa_usec_t latency;

if ((latency = pa_simple_get_latency(s, &error)) == (pa_usec_t) -1) {
fprintf(stderr, __FILE__”: pa_simple_get_latency() failed: %s\n”, pa_strerror(error));
goto finish;
}

fprintf(stderr, “%0.0f usec \r”, (float)latency);
#endif

/* Read some data … */
if ((r = read(STDIN_FILENO, buf, sizeof(buf))) <= 0) {
if (r == 0) /* EOF */
break;

fprintf(stderr, __FILE__”: read() failed: %s\n”, strerror(errno));
goto finish;
}

/* … and play it */
if (pa_simple_write(s, buf, (size_t) r, &error) < 0) {
fprintf(stderr, __FILE__”: pa_simple_write() failed: %s\n”, pa_strerror(error));
goto finish;
}
}

/* Make sure that every single sample was played */
if (pa_simple_drain(s, &error) < 0) {
fprintf(stderr, __FILE__”: pa_simple_drain() failed: %s\n”, pa_strerror(error));
goto finish;
}

ret = 0;

finish:

if (s)
pa_simple_free(s);

return ret;
}

4 问题集
4.1 tdb库缺失
问题描述

meson.build:595:2: ERROR: Dependency “tdb” not found, tried pkgconfig and cmake

解决方案:
下载最新版本tdb编译安装。
下载地址:https://www.samba.org/ftp/tdb/

tar -xvf tdb-1.4.5.tar.gz
cd tdb-1.4.5
./configure && make && make install

4.2 sndfile库缺失
meson.build:653:0: ERROR: Dependency “sndfile” not found, tried pkgconfig and cmake

解决方案:
下载最新版本tdb编译安装。
下载地址:http://www.mega-nerd.com/libsndfile/

tar -xvf libsndfile-1.0.28.tar.gz
cd libsndfile-1.0.28
./configure && make && make install

4.3 xtst库缺失
meson.build:686:2: ERROR: Dependency “xtst” not found, tried pkgconfig and cmake

解决方案:

sudo apt-get install libxtst-dev

4.4 check库缺失
meson.build:792:0: ERROR: Dependency “check” not found, tried pkgconfig and cmake

解决方案:

apt-get install check
————————————————
版权声明:本文为CSDN博主「响箭零零一」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38731735/article/details/120592052

g_bGuestPoweroff.fastpipeapi. cpp:1153/1161解决方法

打开模拟器后,中间提示异常g_bGuestPowerofffastpipeapi.cpp:1153/1161的弹窗是代表着您的电脑里面存在跟模拟器冲突的虚拟机教程,如下图提示

以下教程步骤是手动关闭冲突的虚拟机的操作

1、按照下面图片的步骤打开控制面板,关闭系统自带的所有虚拟机服务,图片中框住的选项全部取消。

2、需要使用命令来彻底关闭

点击桌面左下角“开始菜单”,搜索“命令提示符”或“CMD”,以管理员权限运行。然后在弹出来的窗口内,用“Ctrl+V”黏贴以下代码并回车运行(代码:bcdedit /set hypervisorlaunchtype off),提示操作完成后,重启电脑即可。 教程如下;

3、其中 Windows 10 版本1809出现1153、1161,需要关闭内核隔离,教程如下;

桌面点击左下角“开始菜单”,搜索“Windows”找到“Windows Defender 安全中心”点击,进去之后再按照图片的顺序标识关闭“内核隔离”’