Hello all, I'm trying to add Alsa support to an application with mixed results. When using the default audio output it sounds fine (my dac display 48KHz as sampling rate, which doesn't equal the source signal of 44.1) but when using hw:0 it is heavily distorted and with plughw:0 the sound stutters at a steady interval of about 2Hz (in these last two cases my dac display 44.1kHz as the sampling rate). When using libao plughw:0 sound fine (and my dac always display 44.1kHz).
Can anyone give me a direction (or answer) where I might go wrong here. Unfortunately I'm a bit out of my league here and I do not yet understand the data that fills buf[]. However, I do know that the data it supplies works fine with libao, so I do suspect it is something with the code below. Thanks in advance, Maarten ps. it is supposed to add Alsa to the following: https://github.com/abrasive/shairport/tree/1.0-dev static void start(int sample_rate) { if (sample_rate != 44100) die("Unexpected sample rate!"); int ret, dir = 0; snd_pcm_uframes_t frames = 32; ret = snd_pcm_open(&alsa_handle, alsa_out_dev, SND_PCM_STREAM_PLAYBACK, 0); if (ret < 0) die("Alsa initialization failed: unable to open pcm device: %s\n", snd_strerror(ret)); snd_pcm_hw_params_alloca(&alsa_params); snd_pcm_hw_params_any(alsa_handle, alsa_params); snd_pcm_hw_params_set_access(alsa_handle, alsa_params, SND_PCM_ACCESS_RW_INTERLEAVED); snd_pcm_hw_params_set_format(alsa_handle, alsa_params, SND_PCM_FORMAT_S16); snd_pcm_hw_params_set_channels(alsa_handle, alsa_params, 2); snd_pcm_hw_params_set_rate_near(alsa_handle, alsa_params, (unsigned int *)&sample_rate, &dir); snd_pcm_hw_params_set_period_size_near(alsa_handle, alsa_params, &frames, &dir); ret = snd_pcm_hw_params(alsa_handle, alsa_params); if (ret < 0) die("unable to set hw parameters: %s\n", snd_strerror(ret)); } static void play(short buf[], int samples) { int err = snd_pcm_writei(alsa_handle, (char*)buf, samples); if (err < 0) err = snd_pcm_recover(alsa_handle, err, 0); if (err < 0) die("Failed to write to PCM device: %s\n", snd_strerror(err)); } _______________________________________________ Linux-audio-dev mailing list [email protected] http://lists.linuxaudio.org/listinfo/linux-audio-dev
