]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Added pcm_min test & example - minimalistic pcm output
authorJaroslav Kysela <perex@perex.cz>
Fri, 6 Jan 2006 20:01:08 +0000 (20:01 +0000)
committerJaroslav Kysela <perex@perex.cz>
Fri, 6 Jan 2006 20:01:08 +0000 (20:01 +0000)
test/Makefile.am
test/pcm_min.c [new file with mode: 0644]

index 1fbde8f0de6e4123642288fa299def7a6420ec0e..ba3082df2c34510a0b09541f348771083ba418d6 100644 (file)
@@ -1,9 +1,10 @@
-check_PROGRAMS=control pcm latency seq \
+check_PROGRAMS=control pcm pcm_min latency seq \
               playmidi1 timer rawmidi midiloop \
               oldapi queue_timer
 
 control_LDADD=../src/libasound.la
 pcm_LDADD=../src/libasound.la
+pcm_min_LDADD=../src/libasound.la
 latency_LDADD=../src/libasound.la
 seq_LDADD=../src/libasound.la
 playmidi1_LDADD=../src/libasound.la
diff --git a/test/pcm_min.c b/test/pcm_min.c
new file mode 100644 (file)
index 0000000..3c61018
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ *  This extra small demo sends a raw file to your speakers.
+ */
+
+#include "../include/asoundlib.h"
+
+static char *device = "default";                       /* playback device */
+
+snd_output_t *output = NULL;
+unsigned char buffer[16*1024];                         /* some random data */
+
+int main(void)
+{
+        int err;
+        unsigned int i;
+        snd_pcm_t *handle;
+        snd_pcm_sframes_t frames;
+
+        for (i = 0; i < sizeof(buffer); i++)
+                buffer[i] = random() & 0xff;
+
+       if ((err = snd_pcm_open(&handle, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
+               printf("Playback open error: %s\n", snd_strerror(err));
+               exit(EXIT_FAILURE);
+       }
+       if ((err = snd_pcm_set_params(handle,
+                                     SND_PCM_FORMAT_U8,
+                                     SND_PCM_ACCESS_RW_INTERLEAVED,
+                                     1,
+                                     48000,
+                                     1,
+                                     500000)) < 0) {   /* 0.5sec */
+               printf("Playback open error: %s\n", snd_strerror(err));
+               exit(EXIT_FAILURE);
+       }
+
+        if ((err = snd_pcm_nonblock(handle, 0)) < 0) {
+                printf("Set to blocking mode failed: %s\n", snd_strerror(err));
+                exit(EXIT_FAILURE);
+        }
+
+        for (i = 0; i < 16; i++) {
+                frames = snd_pcm_writei(handle, buffer, sizeof(buffer));
+                if (frames < 0)
+                        frames = snd_pcm_recover(handle, frames, 0);
+                if (frames < 0) {
+                        printf("snd_pcm_writei failed: %s\n", snd_strerror(err));
+                        break;
+                }
+                if (frames > 0 && frames < (long)sizeof(buffer))
+                        printf("Short write (expected %li, wrote %li)\n", (long)sizeof(buffer), frames);
+        }
+
+       snd_pcm_close(handle);
+       return 0;
+}