测试环境
ubuntu14.04 64bit
安装库
$ sudo apt-get install libasound2-dev
编译命令
$ gcc alsaDemo.c -lasound
测试命令
$ ./a.out 1.wav
测试文件
链接:https://pan.baidu.com/s/1yvk8c719bN7aHiIlXC4qgw
提取码:95re
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <alsa/asoundlib.h>
#include <unistd.h>
#define BUF_LEN 1024
typedef struct __WAVE_HEADER1
{
unsigned int uRiffFcc; // four character code, "RIFF"
unsigned int uFileLen; // file total length, don't care it
unsigned int uWaveFcc; // four character code, "WAVE"
unsigned int uFmtFcc; // four character code, "fmt "
unsigned int uFmtDataLen; // Length of the fmt data (=16)
unsigned short uWavEncodeTag; // WAVE File Encoding Tag
unsigned short uChannels; // Channels: 1 = mono, 2 = stereo
unsigned int uSampleRate; // Samples per second: e.g., 44100
unsigned int uBytesPerSec; // sample rate * block align
unsigned short uBlockAlign; // channels * bits/sample / 8
unsigned short uBitsPerSample; // 8 or 16
unsigned int uDataFcc; // four character code "data"
unsigned int uSampDataSize; // Sample data size(n)
}__attribute__((packed)) wave_header_t;
int play_wav(char *partname)
{
int i; int err;
wave_header_t wav;
int headwavcntp;
snd_pcm_t *playback_handle;
snd_pcm_hw_params_t *hw_params;
FILE *fp = NULL;
snd_pcm_format_t pcm_fmt;
char buf[BUF_LEN]