重点设置参数。
帧,声道数,采样率,采样精度。
为什么要设置这些东西呢?
缓存大小 = 帧*声道数*采样精度/8;
每一个周期产生一个硬件中断,把缓冲区的数据读或者写入到声卡缓冲区中,程序中自己设置的缓冲区大小为: 帧数*声道数*采样精度/8。这些参数必须设置正确,否则无法正常工作。帧数如果设置太大,可能无法产生中断,没有中断就无法播放或者录音。
参考设置代码如下
rc = snd_pcm_open(&handle, "default",SND_PCM_STREAM_PLAYBACK, 0);
if (rc < 0) {
fprintf(stderr, "unable to open pcm device: %s/n",
snd_strerror(rc));
exit(1);
}
/* Allocate a hardware parameters object. */
snd_pcm_hw_params_alloca(¶ms);
/* Fill it in with default values. */
snd_pcm_hw_params_any(handle, params);
/* Set the desired hardware parameters. */
/* Interleaved mode */
snd_pcm_hw_params_set_access(handle, params,
SND_PCM_ACCESS_RW_INTERLEAVED);
/* Signed 16-bit little-endian format */
snd_pcm_hw_params_set_format(handle, params,
SND_PCM_FORMAT_S16_LE);
/* Two channels (stereo) */
snd_pcm_hw_params_set_channels(handle, params, 2);
/* 44100 bit