1d5ac70f0Sopenharmony_ci/* 2d5ac70f0Sopenharmony_ci * This extra small demo sends a random samples to your speakers. 3d5ac70f0Sopenharmony_ci */ 4d5ac70f0Sopenharmony_ci 5d5ac70f0Sopenharmony_ci#include "../include/asoundlib.h" 6d5ac70f0Sopenharmony_ci 7d5ac70f0Sopenharmony_cistatic char *device = "default"; /* playback device */ 8d5ac70f0Sopenharmony_ciunsigned char buffer[16*1024]; /* some random data */ 9d5ac70f0Sopenharmony_ci 10d5ac70f0Sopenharmony_ciint main(void) 11d5ac70f0Sopenharmony_ci{ 12d5ac70f0Sopenharmony_ci int err; 13d5ac70f0Sopenharmony_ci unsigned int i; 14d5ac70f0Sopenharmony_ci snd_pcm_t *handle; 15d5ac70f0Sopenharmony_ci snd_pcm_sframes_t frames; 16d5ac70f0Sopenharmony_ci 17d5ac70f0Sopenharmony_ci for (i = 0; i < sizeof(buffer); i++) 18d5ac70f0Sopenharmony_ci buffer[i] = random() & 0xff; 19d5ac70f0Sopenharmony_ci 20d5ac70f0Sopenharmony_ci if ((err = snd_pcm_open(&handle, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0) { 21d5ac70f0Sopenharmony_ci printf("Playback open error: %s\n", snd_strerror(err)); 22d5ac70f0Sopenharmony_ci exit(EXIT_FAILURE); 23d5ac70f0Sopenharmony_ci } 24d5ac70f0Sopenharmony_ci if ((err = snd_pcm_set_params(handle, 25d5ac70f0Sopenharmony_ci SND_PCM_FORMAT_U8, 26d5ac70f0Sopenharmony_ci SND_PCM_ACCESS_RW_INTERLEAVED, 27d5ac70f0Sopenharmony_ci 1, 28d5ac70f0Sopenharmony_ci 48000, 29d5ac70f0Sopenharmony_ci 1, 30d5ac70f0Sopenharmony_ci 500000)) < 0) { /* 0.5sec */ 31d5ac70f0Sopenharmony_ci printf("Playback open error: %s\n", snd_strerror(err)); 32d5ac70f0Sopenharmony_ci exit(EXIT_FAILURE); 33d5ac70f0Sopenharmony_ci } 34d5ac70f0Sopenharmony_ci 35d5ac70f0Sopenharmony_ci for (i = 0; i < 16; i++) { 36d5ac70f0Sopenharmony_ci frames = snd_pcm_writei(handle, buffer, sizeof(buffer)); 37d5ac70f0Sopenharmony_ci if (frames < 0) 38d5ac70f0Sopenharmony_ci frames = snd_pcm_recover(handle, frames, 0); 39d5ac70f0Sopenharmony_ci if (frames < 0) { 40d5ac70f0Sopenharmony_ci printf("snd_pcm_writei failed: %s\n", snd_strerror(frames)); 41d5ac70f0Sopenharmony_ci break; 42d5ac70f0Sopenharmony_ci } 43d5ac70f0Sopenharmony_ci if (frames > 0 && frames < (long)sizeof(buffer)) 44d5ac70f0Sopenharmony_ci printf("Short write (expected %li, wrote %li)\n", (long)sizeof(buffer), frames); 45d5ac70f0Sopenharmony_ci } 46d5ac70f0Sopenharmony_ci 47d5ac70f0Sopenharmony_ci /* pass the remaining samples, otherwise they're dropped in close */ 48d5ac70f0Sopenharmony_ci err = snd_pcm_drain(handle); 49d5ac70f0Sopenharmony_ci if (err < 0) 50d5ac70f0Sopenharmony_ci printf("snd_pcm_drain failed: %s\n", snd_strerror(err)); 51d5ac70f0Sopenharmony_ci snd_pcm_close(handle); 52d5ac70f0Sopenharmony_ci return 0; 53d5ac70f0Sopenharmony_ci} 54