snd_pcm_hw_params_t *hardwareParams;
Steps:
snd_pcm_hw_params_malloc(&hardwareParams) -- allocate ALSA hardware parameters
||
//
snd_pcm_hw_params_any(handle->handle, hardwareParams) -- configure hardware
||
//
snd_pcm_hw_params_set_access(handle->handle, hardwareParams, SND_PCM_ACCESS_RW_INTERLEAVED)
||
//
snd_pcm_hw_params_set_format(handle->handle, hardwareParams, handle->format);
||
//
snd_pcm_hw_params_set_channels(handle->handle, hardwareParams, handle->channels);
||
//
snd_pcm_hw_params_set_rate_near(handle->handle, hardwareParams, &requestedRate, 0);
||
//
snd_pcm_hw_params_set_buffer_size_near(handle->handle, hardwareParams, &bufferSize);
||
//
snd_pcm_hw_params_set_buffer_time_near(handle->handle, hardwareParams, &latency, NULL);
||
//
snd_pcm_hw_params_get_buffer_size(hardwareParams, &bufferSize)
||
//
snd_pcm_hw_params_get_buffer_time(hardwareParams, &latency, NULL);
||
//
unsigned int periodTime = latency / 4;
err = snd_pcm_hw_params_set_period_time_near(handle->handle, hardwareParams, &periodTime, NULL);
||
//
snd_pcm_hw_params(handle->handle, hardwareParams);