基于libmad 的简单MP3流媒体播放器的实现

http://tech.ddvip.com   2007年03月10日    社区交流

本文详细介绍基于libmad 的简单MP3流媒体播放器的实现

  PCM 接口的操作函数:

int  snd_pcm_hw_params (snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
int  snd_pcm_prepare (snd_pcm_t *pcm)
int  snd_pcm_open (snd_pcm_t **pcm, const char *name,
          snd_pcm_stream_t stream, int mode)
int  snd_pcm_close (snd_pcm_t *pcm)
snd_pcm_sframes_t  snd_pcm_writei (snd_pcm_t *pcm,
          const void *buffer, snd_pcm_uframes_t size)

  这些函数用到了 snd_pcm_hw_params_t 结构,此结构包含用来播放 PCM 数据流的硬件信息配置。在往音频设备(声卡)写入音频数据之前,必须设置访问类型、采样格式、采样率、声道数等。

  首先使用 snd_pcm_open () 打开 PCM 设备,在 ALSA 中,PCM 设备都有名字与之对应。比如我们可以定义 PCM 设备名字为 char *pcm_name = "plughw:0,0"。最重要的 PCM 设备接口是“plughw”以及“hw”接口。使用“plughw”接口,程序员不必过多关心硬件,而且如果设置的配置参数和实际硬件支持的参数不一致,ALSA 会自动转换数据。如果使用“hw”接口,我们就必须检测硬件是否支持设置的参数了。Plughw 后面的两个数字分别表示设备号和次设备(subdevice)号。

  snd_pcm_hw_params_malloc( ) 在栈中分配 snd_pcm_hw_params_t 结构的空间,然后使用 snd_pcm_hw_params_any( ) 函数用声卡的全配置空间参数初始化已经分配的 snd_pcm_hw_params_t 结构。snd_pcm_hw_params_set_access ( ) 设置访问类型,常用访问类型的宏定义有:

SND_PCM_ACCESS_RW_INTERLEAVED

  交错访问。在缓冲区的每个 PCM 帧都包含所有设置的声道的连续的采样数据。比如声卡要播放采样长度是 16-bit 的 PCM 立体声数据,表示每个 PCM 帧中有 16-bit 的左声道数据,然后是 16-bit 右声道数据。

责编:豆豆技术应用

正在加载评论...