Re: sndio: troubleshooting no input

2020-05-31 Thread Aaron Miller
No, it was set to 0. I set it to 1 and that fixed the issue.
Thanks!
Also, Maurice mentioned "sndioctl -d" so here is the output:
073:input[0].level=0..255 (120)074:input[1].level=0..255
(120)105:input[0].mute=0..1 (0)106:input[1].mute=0..1
(0)009:output[0].level=0..255 (126)010:output[1].level=0..255
(126)041:output[0].mute=0..1 (0)042:output[1].mute=0..1
(0)001:mpv0.level=0..127 (127)000:test0.level=0..127 (127)
--Aaron
On Sun, 2020-05-31 at 18:29 +0200, Jan Stary wrote:
> Do you have sysctl kern.audio.record=1 ?
> Jan
> On May 30 18:17:02, aa...@iforgotmy.name wrote:
> > Hello,
> > I have an amd64 laptop with OpenBSD 6.7 and I am only
> > gettingzero-valued samples when recording. Is there any
> > checklist I cango through to ensure nothing is muted and that
> > I am reading fromthe correct input device?
> > I have tried both aucat and a C program I wrote (attached).
> > Thanks,Aaron Miller
> > #include #include #include
> > #include 
> > #define BUF_SAMPLES 4800#define OUTFILE "recorded.pcm"#define
> > ITERATIONS 500
> > // ffmpeg -y -f s16le -ar 48000 -ac 1 -i recorded.pcm
> > recorded.mp3 && mpv recorded.mp3
> > void print_par(struct sio_par *par);
> > int main(int argc, char* argv[]) {short *sample_buf =
> > NULL;struct sio_hdl *h;int fail = 0;int started =
> > 0;size_t total_bytes_read = 0;int i;size_t
> > bytes_read;FILE *out = NULL;h = sio_open(SIO_DEVANY,
> > SIO_REC, 0);if (h == NULL) {fprintf(stderr, "%s:
> > we're fucked man\n", argv[0]);fail = 1; goto
> > done;}
> > struct sio_par par;sio_initpar();
> > par.bits = 8*sizeof(short);//par.bps =
> > sizeof(short);par.sig = 1;par.le = 1;par.rchan =
> > 1;par.pchan = 2; // unusedpar.rate =
> > 48000;par.xrun = SIO_IGNORE;
> > //print_par();printf("running
> > sio_setpar...\n");if (sio_setpar(h, ) == 0)
> > {fprintf(stderr, "%s: sio_setpar failed\n",
> > argv[0]);fail = 1; goto
> > done;};//print_par();
> > printf("running sio_getpar...\n");if (sio_getpar(h,
> > ) == 0) {fprintf(stderr, "%s: sio_getpar
> > failed\n", argv[0]);fail = 1; goto
> > done;};print_par();
> > if (BUF_SAMPLES % par.round != 0) {fprintf(stderr,
> > "%s: samples in buf (%d) not mult of round (%d)\n", argv[0],
> > BUF_SAMPLES, par.round);fail = 1; goto done;}
> > if ((sample_buf = malloc(BUF_SAMPLES * sizeof(short))) ==
> > NULL) {fprintf(stderr, "%s: oh we are sooo fucked.
> > GAME OVER MAN\n", argv[0]);fail = 1; goto done;}
> > if ((out = fopen(OUTFILE, "wb")) == NULL)
> > {fprintf(stderr, "%s: failed to open %s for
> > writing\n", argv[0], OUTFILE);fail = 1; goto
> > done;}
> > if (sio_start(h) == 0) {fprintf(stderr, "%s:
> > failed to sio_start\n", argv[0]);fail = 1; goto
> > done;}started = 1;int retries =
> > 0;printf("START\n");for (i = 0; i < ITERATIONS; i++)
> > {if ((bytes_read = sio_read(h, sample_buf, BUF_SAMPLES
> > * sizeof(short))) == 0) {fprintf(stderr, "%s:
> > failed to sio_read\n", argv[0]);fail = 1; goto
> > done;}total_bytes_read += bytes_read;
> > size_t bytes_written;size_t bw;char*
> > buf_ptr = (char *) sample_buf;for (bytes_written = 0;
> > bytes_written < bytes_read; bytes_written += bw)
> > {size_t bytes_left = bytes_read -
> > bytes_written;bw = fwrite(buf_ptr, 1, bytes_left,
> > out);if (bw < bytes_left && errno != EAGAIN)
> > {fprintf(stderr, "%s: failed to write to
> > file\n",
> > argv[0]);perror(argv[0]);fail
> > = 1; goto done;}buf_ptr +=
> > bw;}}printf("TOTAL BYTES READ: %d\n",
> > total_bytes_read);
> > // cleanupdone:if (started)
> > {sio_stop(h);}if (out != NULL)
> > {fclose(out);}if (sample_buf != NULL)
> > {free(sample_buf);}if (h != NULL)
> > {sio_close(h);}return fail;}
> > void print_par(struct sio_par *par) {char *xrun;switch
> > (par->xrun) {default:xrun = " > val>";break;case 0:xrun =
> > "SIO_IGNORE";break;case 1:xrun
> > = "SIO_SYNC";break;case 2:xrun
> > =
> > "SIO_ERROR";break;}printf("_par{\n"   
> >  "  bits: %d,\n""  bps:
> > %d,\n""  sig: %d,\n""  le:
> > %d,\n""  msb: %d,\n""  rchan:
> > %d,\n""  pchan: %d,\n""  rate:
> > %d,\n""  appbufsz: %d,\n""  bufsz:
> > %d,\n""  round: %d,\n""  xrun: %s
> > (%d),\n""}\n",par->bits,  /* bits
> > per sample */par->bps, 

Re: sndio: troubleshooting no input

2020-05-31 Thread Jan Stary
Do you have sysctl kern.audio.record=1 ?

Jan

On May 30 18:17:02, aa...@iforgotmy.name wrote:
> Hello,
> 
> I have an amd64 laptop with OpenBSD 6.7 and I am only getting
> zero-valued samples when recording. Is there any checklist I can
> go through to ensure nothing is muted and that I am reading from
> the correct input device?
> 
> I have tried both aucat and a C program I wrote (attached).
> 
> Thanks,
> Aaron Miller

> #include 
> #include 
> #include 
> #include 
> 
> #define BUF_SAMPLES 4800
> #define OUTFILE "recorded.pcm"
> #define ITERATIONS 500
> 
> // ffmpeg -y -f s16le -ar 48000 -ac 1 -i recorded.pcm recorded.mp3 && mpv 
> recorded.mp3
> 
> void print_par(struct sio_par *par);
> 
> int main(int argc, char* argv[]) {
> short *sample_buf = NULL;
> struct sio_hdl *h;
> int fail = 0;
> int started = 0;
> size_t total_bytes_read = 0;
> int i;
> size_t bytes_read;
> FILE *out = NULL;
> h = sio_open(SIO_DEVANY, SIO_REC, 0);
> if (h == NULL) {
> fprintf(stderr, "%s: we're fucked man\n", argv[0]);
> fail = 1; goto done;
> }
> 
> struct sio_par par;
> sio_initpar();
> 
> par.bits = 8*sizeof(short);
> //par.bps = sizeof(short);
> par.sig = 1;
> par.le = 1;
> par.rchan = 1;
> par.pchan = 2; // unused
> par.rate = 48000;
> par.xrun = SIO_IGNORE;
> 
> //print_par();
> printf("running sio_setpar...\n");
> if (sio_setpar(h, ) == 0) {
> fprintf(stderr, "%s: sio_setpar failed\n", argv[0]);
> fail = 1; goto done;
> };
> //print_par();
> 
> printf("running sio_getpar...\n");
> if (sio_getpar(h, ) == 0) {
> fprintf(stderr, "%s: sio_getpar failed\n", argv[0]);
> fail = 1; goto done;
> };
> print_par();
> 
> if (BUF_SAMPLES % par.round != 0) {
> fprintf(stderr, "%s: samples in buf (%d) not mult of round (%d)\n", 
> argv[0], BUF_SAMPLES, par.round);
> fail = 1; goto done;
> }
> 
> if ((sample_buf = malloc(BUF_SAMPLES * sizeof(short))) == NULL) {
> fprintf(stderr, "%s: oh we are sooo fucked. GAME OVER MAN\n", 
> argv[0]);
> fail = 1; goto done;
> }
> 
> if ((out = fopen(OUTFILE, "wb")) == NULL) {
> fprintf(stderr, "%s: failed to open %s for writing\n", argv[0], 
> OUTFILE);
> fail = 1; goto done;
> }
> 
> if (sio_start(h) == 0) {
> fprintf(stderr, "%s: failed to sio_start\n", argv[0]);
> fail = 1; goto done;
> }
> started = 1;
> int retries = 0;
> printf("START\n");
> for (i = 0; i < ITERATIONS; i++) {
> if ((bytes_read = sio_read(h, sample_buf, BUF_SAMPLES * 
> sizeof(short))) == 0) {
> fprintf(stderr, "%s: failed to sio_read\n", argv[0]);
> fail = 1; goto done;
> }
> total_bytes_read += bytes_read;
> 
> size_t bytes_written;
> size_t bw;
> char* buf_ptr = (char *) sample_buf;
> for (bytes_written = 0; bytes_written < bytes_read; bytes_written += 
> bw) {
> size_t bytes_left = bytes_read - bytes_written;
> bw = fwrite(buf_ptr, 1, bytes_left, out);
> if (bw < bytes_left && errno != EAGAIN) {
> fprintf(stderr, "%s: failed to write to file\n", argv[0]);
> perror(argv[0]);
> fail = 1; goto done;
> }
> buf_ptr += bw;
> }
> }
> printf("TOTAL BYTES READ: %d\n", total_bytes_read);
> 
> // cleanup
> done:
> if (started) {
> sio_stop(h);
> }
> if (out != NULL) {
> fclose(out);
> }
> if (sample_buf != NULL) {
> free(sample_buf);
> }
> if (h != NULL) {
> sio_close(h);
> }
> return fail;
> }
> 
> void print_par(struct sio_par *par) {
> char *xrun;
> switch (par->xrun) {
> default:
> xrun = "";
> break;
> case 0:
> xrun = "SIO_IGNORE";
> break;
> case 1:
> xrun = "SIO_SYNC";
> break;
> case 2:
> xrun = "SIO_ERROR";
> break;
> }
> printf("_par{\n"
> "  bits: %d,\n"
> "  bps: %d,\n"
> "  sig: %d,\n"
> "  le: %d,\n"
> "  msb: %d,\n"
> "  rchan: %d,\n"
> "  pchan: %d,\n"
> "  rate: %d,\n"
> "  appbufsz: %d,\n"
> "  bufsz: %d,\n"
> "  round: %d,\n"
> "  xrun: %s (%d),\n"
> "}\n",
> par->bits,  /* bits per sample */
> par->bps,   /* bytes per sample */
> par->sig,   /* 1 = signed, 0 = unsigned int */
> par->le,/* 1 = LE, 0 = BE byte order */
> par->msb,   /* 1 = MSB, 0 = LSB aligned */
> par->rchan, /* number channels for recording */
> par->pchan, /* number channels for playback 

Re: sndio: troubleshooting no input

2020-05-31 Thread Maurice McCarthy
sndioctl -d

Have a look at man sndioctl
Good Luck



sndio: troubleshooting no input

2020-05-31 Thread Aaron Miller
Hello,

I have an amd64 laptop with OpenBSD 6.7 and I am only getting
zero-valued samples when recording. Is there any checklist I can
go through to ensure nothing is muted and that I am reading from
the correct input device?

I have tried both aucat and a C program I wrote (attached).

Thanks,
Aaron Miller
#include 
#include 
#include 
#include 

#define BUF_SAMPLES 4800
#define OUTFILE "recorded.pcm"
#define ITERATIONS 500

// ffmpeg -y -f s16le -ar 48000 -ac 1 -i recorded.pcm recorded.mp3 && mpv recorded.mp3

void print_par(struct sio_par *par);

int main(int argc, char* argv[]) {
short *sample_buf = NULL;
struct sio_hdl *h;
int fail = 0;
int started = 0;
size_t total_bytes_read = 0;
int i;
size_t bytes_read;
FILE *out = NULL;
h = sio_open(SIO_DEVANY, SIO_REC, 0);
if (h == NULL) {
fprintf(stderr, "%s: we're fucked man\n", argv[0]);
fail = 1; goto done;
}

struct sio_par par;
sio_initpar();

par.bits = 8*sizeof(short);
//par.bps = sizeof(short);
par.sig = 1;
par.le = 1;
par.rchan = 1;
par.pchan = 2; // unused
par.rate = 48000;
par.xrun = SIO_IGNORE;

//print_par();
printf("running sio_setpar...\n");
if (sio_setpar(h, ) == 0) {
fprintf(stderr, "%s: sio_setpar failed\n", argv[0]);
fail = 1; goto done;
};
//print_par();

printf("running sio_getpar...\n");
if (sio_getpar(h, ) == 0) {
fprintf(stderr, "%s: sio_getpar failed\n", argv[0]);
fail = 1; goto done;
};
print_par();

if (BUF_SAMPLES % par.round != 0) {
fprintf(stderr, "%s: samples in buf (%d) not mult of round (%d)\n", argv[0], BUF_SAMPLES, par.round);
fail = 1; goto done;
}

if ((sample_buf = malloc(BUF_SAMPLES * sizeof(short))) == NULL) {
fprintf(stderr, "%s: oh we are sooo fucked. GAME OVER MAN\n", argv[0]);
fail = 1; goto done;
}

if ((out = fopen(OUTFILE, "wb")) == NULL) {
fprintf(stderr, "%s: failed to open %s for writing\n", argv[0], OUTFILE);
fail = 1; goto done;
}

if (sio_start(h) == 0) {
fprintf(stderr, "%s: failed to sio_start\n", argv[0]);
fail = 1; goto done;
}
started = 1;
int retries = 0;
printf("START\n");
for (i = 0; i < ITERATIONS; i++) {
if ((bytes_read = sio_read(h, sample_buf, BUF_SAMPLES * sizeof(short))) == 0) {
fprintf(stderr, "%s: failed to sio_read\n", argv[0]);
fail = 1; goto done;
}
total_bytes_read += bytes_read;

size_t bytes_written;
size_t bw;
char* buf_ptr = (char *) sample_buf;
for (bytes_written = 0; bytes_written < bytes_read; bytes_written += bw) {
size_t bytes_left = bytes_read - bytes_written;
bw = fwrite(buf_ptr, 1, bytes_left, out);
if (bw < bytes_left && errno != EAGAIN) {
fprintf(stderr, "%s: failed to write to file\n", argv[0]);
perror(argv[0]);
fail = 1; goto done;
}
buf_ptr += bw;
}
}
printf("TOTAL BYTES READ: %d\n", total_bytes_read);

// cleanup
done:
if (started) {
sio_stop(h);
}
if (out != NULL) {
fclose(out);
}
if (sample_buf != NULL) {
free(sample_buf);
}
if (h != NULL) {
sio_close(h);
}
return fail;
}

void print_par(struct sio_par *par) {
char *xrun;
switch (par->xrun) {
default:
xrun = "";
break;
case 0:
xrun = "SIO_IGNORE";
break;
case 1:
xrun = "SIO_SYNC";
break;
case 2:
xrun = "SIO_ERROR";
break;
}
printf("_par{\n"
"  bits: %d,\n"
"  bps: %d,\n"
"  sig: %d,\n"
"  le: %d,\n"
"  msb: %d,\n"
"  rchan: %d,\n"
"  pchan: %d,\n"
"  rate: %d,\n"
"  appbufsz: %d,\n"
"  bufsz: %d,\n"
"  round: %d,\n"
"  xrun: %s (%d),\n"
"}\n",
par->bits,  /* bits per sample */
par->bps,   /* bytes per sample */
par->sig,   /* 1 = signed, 0 = unsigned int */
par->le,/* 1 = LE, 0 = BE byte order */
par->msb,   /* 1 = MSB, 0 = LSB aligned */
par->rchan, /* number channels for recording */
par->pchan, /* number channels for playback */
par->rate,  /* frames per second */
par->appbufsz,  /* minimum buffer size without xruns */
par->bufsz, /* end-to-end buffer size (read-only) */
par->round, /* optimal buffer size divisor */
 xrun,  /* what to do on overrun/underrun */
par->xrun
);
}