From f8e0175263eafae4d7df3ddbe2bb8ac8c1831dce Mon Sep 17 00:00:00 2001 From: Joursoir Date: Mon, 25 Jan 2021 19:20:52 +0000 Subject: init project --- parecord/parecord.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 parecord/parecord.c (limited to 'parecord/parecord.c') diff --git a/parecord/parecord.c b/parecord/parecord.c new file mode 100644 index 0000000..55434a0 --- /dev/null +++ b/parecord/parecord.c @@ -0,0 +1,70 @@ +#include +#include + +#include + +#define BUFSIZE 1024 + +int loop_write(int fd, const void *data, size_t size) { + int ret = 0; + + while(size > 0) { + int 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[]) +{ + pa_sample_spec ss; + ss.format = PA_SAMPLE_S16LE; + ss.channels = 2; + ss.rate = 44100; + + pa_simple *s; + s = pa_simple_new(NULL, + argv[0], + PA_STREAM_RECORD, + NULL, + "record", + &ss, + NULL, + NULL, + NULL); + if(!s) { + fprintf(stderr, "pa_simple_new() failed\n"); + return 1; + } + + for(;;) { + uint8_t buf[BUFSIZE]; + + // Record some data + if(pa_simple_read(s, buf, sizeof(buf), NULL) < 0) { + fprintf(stderr, "pa_simple_read() failed\n"); + return 1; + } + + // And write it to STDOUT */ + if(loop_write(STDOUT_FILENO, buf, sizeof(buf)) != sizeof(buf)) { + fprintf(stderr, "write() failed\n"); + return 1; + } + } + + if(s) + pa_simple_free(s); + + return 0; +} \ No newline at end of file -- cgit v1.2.3-18-g5258