changeset 119:e5d07da09f9b

added audio driver debug tools
author arpi_esp
date Fri, 16 Mar 2001 23:05:01 +0000
parents 7c67c52142ed
children 93ea0c6aae7f
files TOOLS/audio-block.c TOOLS/audio-select.c TOOLS/c
diffstat 3 files changed, 138 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/audio-block.c	Fri Mar 16 23:05:01 2001 +0000
@@ -0,0 +1,62 @@
+// This small util discovers your audio driver's behaviour
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/soundcard.h>
+
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+                     
+#define OUTBURST 256
+
+// Returns current time in microseconds
+unsigned int GetTimer(){
+  struct timeval tv;
+  struct timezone tz;
+//  float s;
+  gettimeofday(&tv,&tz);
+//  s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec;
+  return (tv.tv_sec*1000000+tv.tv_usec);
+}  
+
+static unsigned char a_buffer[OUTBURST];
+
+int main(){
+  int audio_buffer_size=0;
+  int r;
+  int xxx=1024*2;
+  int audio_fd;
+  char *dsp="/dev/dsp";
+  unsigned int t1,t2;
+
+  audio_fd=open(dsp, O_WRONLY);
+  if(audio_fd<0){
+    printf("Can't open audio device %s\n",dsp);
+    return 1;
+  }
+  
+  r=AFMT_S16_LE;ioctl (audio_fd, SNDCTL_DSP_SETFMT, &r);
+  r=1; ioctl (audio_fd, SNDCTL_DSP_STEREO, &r);
+  r=44100; if(ioctl (audio_fd, SNDCTL_DSP_SPEED, &r)==-1)
+      printf("audio_setup: your card doesn't support %d Hz samplerate\n",r);
+
+  t1=GetTimer();
+
+while(xxx-->0){
+    r=write(audio_fd,a_buffer,OUTBURST);
+    t2=GetTimer();
+    if(r<0) printf("Error writting to device\n"); else
+    if(r==0) printf("EOF writting to device???\n"); else {
+      printf("[%6d] writting %3d of %3d bytes in %7d us\n",audio_buffer_size,r,OUTBURST,t2-t1);
+      audio_buffer_size+=r;
+    }
+    t1=t2;
+}
+
+close(audio_fd);
+
+return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TOOLS/audio-select.c	Fri Mar 16 23:05:01 2001 +0000
@@ -0,0 +1,73 @@
+// This small util discovers your audio driver's behaviour
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/soundcard.h>
+
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+                     
+#define OUTBURST 128
+
+// Returns current time in microseconds
+unsigned int GetTimer(){
+  struct timeval tv;
+  struct timezone tz;
+//  float s;
+  gettimeofday(&tv,&tz);
+//  s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec;
+  return (tv.tv_sec*1000000+tv.tv_usec);
+}  
+
+static unsigned char a_buffer[OUTBURST];
+
+int main(){
+  int audio_buffer_size;
+  int r;
+  int xxx=1024;
+  int audio_fd;
+  char *dsp="/dev/dsp";
+  unsigned int t1,t2,t3;
+
+  audio_fd=open(dsp, O_WRONLY);
+  if(audio_fd<0){
+    printf("Can't open audio device %s\n",dsp);
+    return 1;
+  }
+  
+  r=AFMT_S16_LE;ioctl (audio_fd, SNDCTL_DSP_SETFMT, &r);
+  r=1; ioctl (audio_fd, SNDCTL_DSP_STEREO, &r);
+  r=44100; if(ioctl (audio_fd, SNDCTL_DSP_SPEED, &r)==-1)
+      printf("audio_setup: your card doesn't support %d Hz samplerate\n",r);
+
+  t3=t1=GetTimer();
+
+while(xxx>0){
+    audio_buffer_size=0;
+    while(audio_buffer_size<0x100000){
+      fd_set rfds;
+      struct timeval tv;
+      FD_ZERO(&rfds); FD_SET(audio_fd,&rfds);
+      tv.tv_sec=0; tv.tv_usec = 0;
+      if(!select(audio_fd+1, NULL, &rfds, NULL, &tv)) break;
+      r=write(audio_fd,a_buffer,OUTBURST);
+      if(r<0) printf("Error writting to device\n"); else
+      if(r==0) printf("EOF writting to device???\n"); else
+      audio_buffer_size+=r;
+    }
+    t2=GetTimer();
+    if(audio_buffer_size>0){
+      printf("%6d bytes written in %5d us (wait %5d us)\n",audio_buffer_size,t2-t1,t1-t3);
+      --xxx;
+      t3=t2;
+    }
+    t1=t2;
+}
+
+close(audio_fd);
+
+return 0;
+}
+
--- a/TOOLS/c	Fri Mar 16 18:12:43 2001 +0000
+++ b/TOOLS/c	Fri Mar 16 23:05:01 2001 +0000
@@ -1,1 +1,4 @@
+
 gcc movinfo.c -o movinfo
+gcc audio-select.c -o audio-select
+gcc audio-block.c -o audio-block