Installation of pulseaudio and API usage under Ubuntu 12.04

1. Install the audio library client software libpulse-dev under Ubuntu 12.04

Package libpulse-dev:PulseAudio client development headers and libraries

**Use the following command: **

sudo apt-get install libpulse-dev

During installation, you will be prompted to rely on the following software, which can be installed together:

libavahi-client-dev libavahi-common-dev libpulse-mainloop-glib0 libpulse0

You can also check the dependencies of the libpulse-dev software on the official website of packages.ubuntu.com. The relevant links are as follows:

http://packages.ubuntu.com/raring/libpulse-dev

As shown below:

2. The use of pulseaudio library (synchronous simple API)

The pulseaudio official website has a manual about pulseaudio API doxygen, the URL is as follows:

http://freedesktop.org/software/pulseaudio/doxygen/

1、 Broadcast sample

A simple playback tool using the simple API

//pacat-simple.c/***
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, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA.
***/
# 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 */staticconst 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;
# if0
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;}

2、 Recording sample

A simple recording tool using the simple API

//parec-simple.c/***
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, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA.
***/
# 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/* A simple routine calling UNIX write() in a loop */static ssize_t loop_write(int fd,constvoid*data, size_t size){
ssize_t ret =0;while(size >0){
ssize_t r;if((r =write(fd, data, size))<0)return r;if(r ==0)break;
ret += r;
data =(const uint8_t*) data + r;
size -=(size_t) r;}return ret;}
int main(int argc, char*argv[]){/* The sample type to use */staticconst 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));
goto finish;}for(;;){
uint8_t buf[BUFSIZE];/* Record some data ... */if(pa_simple_read(s, buf,sizeof(buf),&error)<0){fprintf(stderr, __FILE__": pa_simple_read() failed: %s\n",pa_strerror(error));
goto finish;}/* And write it to STDOUT */if(loop_write(STDOUT_FILENO, buf,sizeof(buf))!=sizeof(buf)){fprintf(stderr, __FILE__": write() failed: %s\n",strerror(errno));
goto finish;}}
ret =0;
finish:if(s)pa_simple_free(s);return ret;}

**3、 When compiling and running the library containing pulseaudio, you need to add the dynamic link library of pulseaudio **-libpulse, etc.,

( The dynamic library of pulse can be found in the /usr/lib/i386-linux-gnu/ directory

/usr/lib/i386-linux-gnu/libpulsecommon-1.1.so
/usr/lib/i386-linux-gnu/libpulsedsp.so
/usr/lib/i386-linux-gnu/libpulse-mainloop-glib.so
/usr/lib/i386-linux-gnu/libpulse-mainloop-glib.so.0
/usr/lib/i386-linux-gnu/libpulse-mainloop-glib.so.0.0.4
/usr/lib/i386-linux-gnu/libpulse-simple.so
/usr/lib/i386-linux-gnu/libpulse-simple.so.0
/usr/lib/i386-linux-gnu/libpulse-simple.so.0.0.3
/usr/lib/i386-linux-gnu/libpulse.so
/usr/lib/i386-linux-gnu/libpulse.so.0
/usr/lib/i386-linux-gnu/libpulse.so.0.13.5)

For example, take the pacat-simple.c program as an example:

(1) The compilation command is as follows:

gcc -o pacat-simple pacat-simple.c -lpulse -lpulsecommon-1.1 -lpulse-simple
(2) Run the pacat-simple executable program generated in the previous step

. /pacat-simple Asuka.wav

( Note: There is a command line parameter, which is the audio file name. Search for a wav format audio file on the Internet, put it in the current directory, and execute it. )

3. ALSA audio library

ALSA's full name: Advanced Linux Sound Architecture

One URL is: http://www.alsa-project.org/main/index.php/Main_Page

Recommended Posts

Installation of pulseaudio and API usage under Ubuntu 12.04
Installation and usage instructions of rz/sz command under ubuntu
Installation and uninstallation of CUDA under Ubuntu 16.04
Installation and use of GDAL in Python under Ubuntu
Installation of deb package under Ubuntu
Redis installation under ubuntu and windows
Installation of Docker CE under Ubuntu
Coexistence of CUDA8.0 and CUDA9.0 under Ubuntu 16.04
ubuntu Docker installation and deployment of Rancher
Installation and configuration of redis under centos7
Installation and deployment of Nginx in Ubuntu
Installation and use of Win10 subsystem Ubuntu
DLNA/UPnP Server installation and configuration under Ubuntu 12.04
Detailed explanation of quick installation and configuration of Subversion (SVN) under Ubuntu
Ubuntu introduction and installation
[python] python2 and python3 under ubuntu
LNMP installation under Ubuntu
Installation and configuration of rsync server under CentOS 6.5
Kaldi installation and configuration graphic tutorials under Ubuntu
Installation, configuration and uninstallation of GitLab in Ubuntu19.1
Summary of ubuntu usage
Installation and use of SSH in Ubuntu environment
Installation and cracking of confluence6.3 operation records under Centos
Ubuntu16.04 mirror complete installation and configuration tutorial under VMware
Installation and cracking of Jira7 operation records under Centos
Installation and simple practice of MySQL in ubuntu environment (1)
Ubuntu16.04 installation and simple configuration
Use of mediawiki under ubuntu
Ubuntu PostgreSQL installation and configuration
Detailed explanation of Spark installation and configuration tutorial under centOS7
Basic usage and examples of yum under Liunx (centos8) (recommended)
Happy installation of Jenkins in ubuntu
Installation under centos6.9 of jenkins learning
CentOS7 installation and maintenance of Gitlab
Install and deploy Gerrit under Ubuntu
Install nodejs and npm under Ubuntu 16.04
Java-JDK installation and configuration under CentOS
Ubuntu 16.04 installation graphic tutorial under VMware 12
Ubuntu 19.1 installation and configuration Chinese environment
Configuration and beautification after Ubuntu installation (1)
Nginx installation and configuration load (ubuntu12.04)
Ubuntu common instructions and usage details
Ubuntu18.04 installation Anaconda3 and VSCode guide
Erlang 20.2 installation and deployment under CentOS 7
Ubuntu configuration source and installation software
Compile and install QEMU under Ubuntu
Detailed explanation of the installation and use of SSH in the Ubuntu environment
Ubuntu basic settings: introduction to the installation and use of openssh-server
Install the latest version of Thunderbird and exchange plugins under ubuntu
Installation of python common libraries under windows
Ubuntu installation and deployment Redash operation notes (2020.08)
51 MCU program development and download under Ubuntu
Tomcat installation and configuration under CentOS 7 (Tomcat startup)
MySQL 8.0 installation, deployment and configuration under CentOS 6/7
Ubuntu18.04 system installation and prerequisite software installation guide
Centos7 installation and deployment of gitlab server
Install docker on ubuntu and basic usage
Ubuntu18.04 Server version installation and use (graphic)
The implementation of the Ubuntu18.04 installation Pycharm tutorial
Zabbix installation and deployment and localization under CentOS
Jenkins installation and deployment tutorial under CentOS 7