[alsa-devel] Alsa buffer
arif setiawan
n.arif.setiawan at gmail.com
Tue Jul 14 03:55:58 CEST 2009
Hi,
I'm trying to get meaningful voice from ALSA buffer. I read tutorial on
http://www.suse.de/~mana/alsa090_howto.html<http://www.suse.de/%7Emana/alsa090_howto.html>and
realize that if alsa use 16 bit format value then I have to byte shift
to store it in 8 bit unsigned char buffer. I see this in sine wave generator
in tutorial. To confirm it, I try to save the output into file and open it
in Matlab. I want to know if this is correct, because when I try saving alsa
buffer on a from recording I still get noise not the voice.
Thank you.
Best regards,
Arif
This is my implementation :
int main()
{
int nchannel = 1;
int periodsize = 8192;
int frame_size = nchannel * (16 / 8);
int num_frames = periodsize / frame_size;
unsigned char *data;
int l2;
short s;
data = (unsigned char *)malloc(periodsize);
// fill the buffer
for(l2 = 0; l2 < num_frames; l2++)
{
s1 = (l2 % 128) * 100 - 5000;
data[2*l2] = (unsigned char)s1;
data[2*l2+1] = s1 >> 8;
}
// directly save
FILE *fp1 = fopen("sineout1", "w");
for (int i = 0; i < periodsize; i++)
{
fprintf_s(fp1, "%d\n", data[i]);
}
fclose(fp1);
// with bit shifting from char to short
FILE *fp2 = fopen("sineout2", "w");
for (int i = 0; i < num_frames; i++)
{
short newval = data[2*i+1] << 8;
newval += data[2*i];
fprintf_s(fp2, "%d\n", newval);
}
fclose(fp2);
return 0;
}
More information about the Alsa-devel
mailing list