1. Install the audio library client software libpulse-dev under Ubuntu 12.04
**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