1/*** 2 This file is part of PulseAudio. 3 4 PulseAudio is free software; you can redistribute it and/or modify 5 it under the terms of the GNU Lesser General Public License as published 6 by the Free Software Foundation; either version 2.1 of the License, 7 or (at your option) any later version. 8 9 PulseAudio is distributed in the hope that it will be useful, but 10 WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public License 15 along with PulseAudio; if not, see <http://www.gnu.org/licenses/>. 16***/ 17 18#ifdef HAVE_CONFIG_H 19#include <config.h> 20#endif 21 22#include <stdio.h> 23#include <unistd.h> 24#include <string.h> 25#include <errno.h> 26 27#include <pulse/simple.h> 28#include <pulse/error.h> 29 30#define BUFSIZE 1024 31 32/* A simple routine calling UNIX write() in a loop */ 33static ssize_t loop_write(int fd, const void*data, size_t size) { 34 ssize_t ret = 0; 35 36 while (size > 0) { 37 ssize_t r; 38 39 if ((r = write(fd, data, size)) < 0) 40 return r; 41 42 if (r == 0) 43 break; 44 45 ret += r; 46 data = (const uint8_t*) data + r; 47 size -= (size_t) r; 48 } 49 50 return ret; 51} 52 53int main(int argc, char*argv[]) { 54 /* The sample type to use */ 55 static const pa_sample_spec ss = { 56 .format = PA_SAMPLE_S16LE, 57 .rate = 44100, 58 .channels = 2 59 }; 60 pa_simple *s = NULL; 61 int ret = 1; 62 int error; 63 64 /* Create the recording stream */ 65 if (!(s = pa_simple_new(NULL, argv[0], PA_STREAM_RECORD, NULL, "record", &ss, NULL, NULL, &error))) { 66 fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n", pa_strerror(error)); 67 goto finish; 68 } 69 70 for (;;) { 71 uint8_t buf[BUFSIZE]; 72 73 /* Record some data ... */ 74 if (pa_simple_read(s, buf, sizeof(buf), &error) < 0) { 75 fprintf(stderr, __FILE__": pa_simple_read() failed: %s\n", pa_strerror(error)); 76 goto finish; 77 } 78 79 /* And write it to STDOUT */ 80 if (loop_write(STDOUT_FILENO, buf, sizeof(buf)) != sizeof(buf)) { 81 fprintf(stderr, __FILE__": write() failed: %s\n", strerror(errno)); 82 goto finish; 83 } 84 } 85 86 ret = 0; 87 88finish: 89 90 if (s) 91 pa_simple_free(s); 92 93 return ret; 94} 95