/* -*- c-file-style: "linux" -*- */
/***
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 .
* Copyright 2022, 2024 Pavel Machek
***/
#include
#include
#include
#include
#include
#include
#include
#include
#include "medianame.h"
/* gcc xx.c -o xx $(pkg-config --cflags --libs libpulse-simple)
*/
int main(int argc, char*argv[]) {
int fps = 305; /* fps * 10 */
/* 48000 * 2 * 2 bps, we want chunks corresponding to 30 fps */
const uint32_t bufsize = ((48000 * 2 * 2 * 10) / fps) & ~3;
if (argc != 2) {
printf("usage: prog fps*10, run in recording directory\n");
exit(1);
}
fps = atoi(argv[1]);
/* The sample type to use */
static const pa_sample_spec ss = {
.format = PA_SAMPLE_S16LE,
.rate = 48000,
.channels = 2
};
static pa_buffer_attr attr = {
.minreq = (uint32_t) -1,
.prebuf = (uint32_t) -1,
.tlength = (uint32_t) -1,
};
pa_simple *r = NULL;
int ret = 1;
int error;
const pa_buffer_attr *p_attr = &attr;
int opt = 0; // | PA_STREAM_ADJUST_LATENCY;
uint8_t *buf = malloc(bufsize);
attr.fragsize = bufsize;
attr.maxlength = bufsize;
/* Create the recording stream */
if (!(r = pa_simple_new(NULL, argv[0], PA_STREAM_RECORD | opt, NULL, "record", &ss, NULL, p_attr, &error))) {
fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n", pa_strerror(error));
goto finish;
}
for (;;) {
char name[1024];
int fd, res;
/* Record some data ... */
if (pa_simple_read(r, buf, bufsize, &error) < 0) {
fprintf(stderr, __FILE__": pa_simple_read() failed: %s\n", pa_strerror(error));
goto finish;
}
get_name(name, ".", "48000-s16le-stereo.sa");
fd = open(name, O_WRONLY | O_CREAT | O_EXCL, 0666);
res = write(fd, buf, bufsize);
if (res != bufsize) {
fprintf(stderr, __FILE__": could not write samples: %m\n");
goto finish;
}
close(fd);
}
finish:
if (r)
pa_simple_free(r);
return ret;
}