调用alsa库实现pcm音频的简单播放:
#include <stdio.h>
#include <stdlib.h>
#include <alsa/asoundlib.h>
#define PCM_FORMAT SND_PCM_FORMAT_S16_LE
#define CHANNEL 1
#define SAMPLE_RATE 16000
int main(int argc,char *argv[])
{
/* Handle for the PCM device */
snd_pcm_t *handle;
/* Playback stream */
snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
snd_pcm_hw_params_t *hwparams;
char *pcm_name = "default";
int err;
int dir = 0;
snd_pcm_format_t format = PCM_FORMAT;
unsigned int nChannels = CHANNEL;
unsigned int rate = SAMPLE_RATE;
snd_pcm_uframes_t psize_frames = 32;
snd_pcm_uframes_t bsize_frames = 64;
char *filename = NULL;
int fd;
char *buffer = NULL;
int count;
unsigned int buffer_time;
if(argc < 2)
{
printf("Usage: ./playback pcmfile\n");
return -1;
}
filename = argv[1];
fd = open(filename,O_RDONLY);
if(fd < 0)
{
perror("open file failed!\n");
return -1;
}
//open PCM
if (snd_pcm_open(&handle, pcm_name, stream, 0) < 0)
{
printf(stderr, "Error opening PCM device %s\n", pcm_name);
return -1;
}
//Allocate the snd_pcm_hw_params_t structure on the stack.
err = snd_pcm_hw_params_malloc(&hwparams);
if(err < 0)
{
perror("malloc space for snd_pcm_hw_params_t structure failed !\n");
return -1;
}
//initial hwparams
err = snd_pcm_hw_params_any(handle, hwparams