/* to build: * $ gcc -Wall -o alsa-test alsa-test.c -lasound */ #include int main(int argc, char **argv) { snd_pcm_t *pcm; snd_pcm_hw_params_t *hw_params; unsigned int rate; snd_pcm_uframes_t bytes; int err; if((err = snd_pcm_open(&pcm, "example", SND_PCM_STREAM_PLAYBACK, 0) < 0)){ fprintf(stderr, "snd_pcm_open: %d (%s)\n", err, snd_strerror(err)); return 1; } if((err = snd_pcm_hw_params_malloc(&hw_params)) < 0){ fprintf(stderr, "snd_pcm_hw_params_malloc: %d (%s)\n", err, snd_strerror(err)); return 1; } if((err = snd_pcm_hw_params_any(pcm, hw_params) < 0)){ fprintf(stderr, "snd_pcm_hw_params_any: %d (%s)\n", err, snd_strerror(err)); return 1; } if((err = snd_pcm_hw_params_set_access(pcm, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED) < 0)){ fprintf(stderr, "snd_pcm_hw_params_set_access: %d (%s)\n", err, snd_strerror(err)); return 1; } if((err = snd_pcm_hw_params_set_format(pcm, hw_params, SND_PCM_FORMAT_S16_LE) < 0)){ fprintf(stderr, "snd_pcm_hw_params_set_format: %d (%s)\n", err, snd_strerror(err)); return 1; } rate = 44100; if((err = snd_pcm_hw_params_set_rate_near(pcm, hw_params, &rate, NULL)) < 0){ fprintf(stderr, "snd_pcm_hw_params_set_rate_near: %d (%s)\n", err, snd_strerror(err)); return 1; } if((err = snd_pcm_hw_params_set_channels(pcm, hw_params, 2)) < 0){ fprintf(stderr, "snd_pcm_hw_params_set_channels: %d (%s)\n", err, snd_strerror(err)); return 1; } bytes = 512; if((err = snd_pcm_hw_params_set_buffer_size_near(pcm, hw_params, &bytes)) < 0){ fprintf(stderr, "snd_pcm_hw_params_set_buffer_size_near: %d (%s)\n", err, snd_strerror(err)); return 1; } fprintf(stderr, "bytes: %lu\n", bytes); if((err = snd_pcm_hw_params(pcm, hw_params)) < 0){ fprintf(stderr, "snd_pcm_hw_params: %d (%s)\n", err, snd_strerror(err)); return 1; } snd_pcm_hw_params_free(hw_params); snd_pcm_close(pcm); return 0; }