首页 > 代码库 > Linux下音频编程-输出音频文件

Linux下音频编程-输出音频文件

程序实现了在Linux下播放Ok.wav的功能。程序首先调用fstat函数获得文件相关信息(主要是文件大小信息)。通过malloc函数分配指定的内存空间,并将online.wav读入内存;然后,打开声卡设备文件,设置声卡参数;再调用write函数完成文件的播放。

简要的实例,代码如下:

#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<stdlib.h>#include<stdio.h>#include<linux/soundcard.h>#define Audio_Device "/dev/dsp"//不同的声音有着不同的播放参数,这些参数可以使用file命令获得#define Sample_Size 16 //there‘re two kinds of bits,8 bits and 16 bits#define Sample_Rate 8000 //sampling rateint play_sound(char *filename){    struct stat stat_buf;    unsigned char * buf = NULL;    int handler,fd;    int result;    int arg,status;       //打开声音文件,将文件读入内存    fd=open(filename,O_RDONLY);    if(fd<0) return -1;    if(fstat(fd,&stat_buf)){        close(fd);        return -1;    }    if(!stat_buf.st_size){        close(fd);        return -1;   }   buf=malloc(stat_buf.st_size);   if(!buf){      close(fd);      return -1;   }   if(read(fd,buf,stat_buf.st_size)<0){      free(buf);      close(fd);      return -1;   }   //打开声卡设备,并设置声卡播放参数,这些参数必须与声音文件参数一致   handler=open(Audio_Device,O_WRONLY);   if(handler==-1){       perror("open Audio_Device fail");       return -1;   }     arg=Sample_Rate;   status=ioctl(handler,SOUND_PCM_WRITE_RATE,&arg);   if(status==-1){      perror("error from SOUND_PCM_WRITE_RATE ioctl");      return -1;   }   arg=Sample_Size;   status=ioctl(handler,SOUND_PCM_WRITE_BITS,&arg);   if(status==-1){      perror("error from SOUND_PCM_WRITE_BITS ioctl");      return -1;   }     result=write(handler,buf,stat_buf.st_size);   if(result==-1){      perror("Fail to play the sound!");      return -1;   }   free(buf);   close(fd);   close(handler);   return result;}void main(void){   play_sound("/root/Online.wav");}

  

Linux下音频编程-输出音频文件