variuos old test code
[pandora-misc.git] / tests / osstest.c
diff --git a/tests/osstest.c b/tests/osstest.c
new file mode 100644 (file)
index 0000000..95de23c
--- /dev/null
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <linux/soundcard.h>
+
+#define SYNTH
+
+int main(int argc, char *argv[])
+{
+       short buff[1024];
+       int i, l, oss_dev, rate = 44100;
+       int sv = 0, ss = 1;
+
+#ifndef SYNTH
+       FILE *f;
+       f = fopen(argv[1], "rb");
+       if (f == NULL)
+       {
+               perror("fopen");
+               return 1;
+       }
+#endif
+       oss_dev = open("/dev/dsp", O_WRONLY);
+       if (oss_dev == -1)
+       {
+               perror("open /dev/dsp");
+               return 1;
+       }
+
+       if (argc > 2)
+       {
+               int stereo = 1, bits = 16, frags = (11<<16) | 8;
+               rate = atoi(argv[2]);
+               ioctl(oss_dev, SNDCTL_DSP_STEREO, &stereo);
+               ioctl(oss_dev, SNDCTL_DSP_SETFMT, &bits);
+               ioctl(oss_dev, SNDCTL_DSP_SPEED,  &rate);
+               ioctl(oss_dev, SNDCTL_DSP_SETFRAGMENT, &frags);
+       }
+
+       for (l = 0; l < 200; l++)
+       {
+#ifndef SYNTH
+               i = fread(buff, 1, sizeof(buff), f);
+               if (i <= 0)
+               {
+                       break;
+               }
+#else
+               for (i = 0; i < sizeof(buff)/sizeof(buff[0]); i++) {
+                       sv += ss * 16000;
+                       if (sv == 64000 || sv == -64000)
+                               ss *= -1;
+                       buff[i] = sv;
+               }
+               i *= 2;
+#endif
+
+               write(oss_dev, buff, i);
+       }
+
+       close(oss_dev);
+#ifndef SYNTH
+       fclose(f);
+#endif
+       return 0;
+}
+