annotate TOOLS/audio-block2.c @ 686:0b3b56e9b9fa

new audio block/select test
author arpi_esp
date Wed, 02 May 2001 04:29:04 +0000
parents
children 0544dd78f455
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
686
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
1 // This small util discovers your audio driver's behaviour
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
2
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
3 #define OUTBURST 512
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
4 //#define OUTBURST 4096
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
5
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
6
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
7 #include <stdio.h>
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
8 #include <stdlib.h>
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
9 #include <fcntl.h>
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
10 #include <sys/soundcard.h>
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
11
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
12 #include <sys/time.h>
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
13 #include <sys/types.h>
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
14 #include <unistd.h>
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
15
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
16
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
17 // Returns current time in microseconds
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
18 unsigned int GetTimer(){
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
19 struct timeval tv;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
20 struct timezone tz;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
21 // float s;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
22 gettimeofday(&tv,&tz);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
23 // s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
24 return (tv.tv_sec*1000000+tv.tv_usec);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
25 }
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
26
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
27 static unsigned char a_buffer[OUTBURST];
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
28
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
29 int main(){
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
30 int audio_buffer_size=0;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
31 int r;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
32 int xxx=1024*2;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
33 int audio_fd;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
34 char *dsp="/dev/dsp";
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
35 unsigned int t0,t1,t2;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
36
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
37 audio_fd=open(dsp, O_WRONLY);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
38 if(audio_fd<0){
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
39 printf("Can't open audio device %s\n",dsp);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
40 return 1;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
41 }
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
42
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
43 r=AFMT_S16_LE;ioctl (audio_fd, SNDCTL_DSP_SETFMT, &r);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
44 r=1; ioctl (audio_fd, SNDCTL_DSP_STEREO, &r);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
45 r=44100; if(ioctl (audio_fd, SNDCTL_DSP_SPEED, &r)==-1)
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
46 printf("audio_setup: your card doesn't support %d Hz samplerate\n",r);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
47
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
48 t0=t1=GetTimer();
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
49
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
50 while(xxx-->0){
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
51 char c='B';
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
52 fd_set rfds;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
53 struct timeval tv;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
54 FD_ZERO(&rfds); FD_SET(audio_fd,&rfds);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
55 tv.tv_sec=0; tv.tv_usec = 0;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
56 if(select(audio_fd+1, NULL, &rfds, NULL, &tv)) c=' ';
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
57
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
58 r=write(audio_fd,a_buffer,OUTBURST);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
59 t2=GetTimer();
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
60 if(r<0) printf("Error writting to device\n"); else
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
61 if(r==0) printf("EOF writting to device???\n"); else {
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
62 printf("%c %6.3f %6.3f [%6d] writting %3d of %3d bytes in %7d us\n",c,
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
63 (float)audio_buffer_size/(44100.0f*4.0f),(float)(t1-t0)*0.000001f,
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
64 audio_buffer_size,r,OUTBURST,t2-t1);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
65 audio_buffer_size+=r;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
66 }
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
67 t1=t2;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
68 }
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
69
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
70 close(audio_fd);
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
71
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
72 return 0;
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
73 }
0b3b56e9b9fa new audio block/select test
arpi_esp
parents:
diff changeset
74