当前位置:   article > 正文

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

linux编译生成audio文件

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

简要的实例,代码如下:

  1. #include<unistd.h>
  2. #include<fcntl.h>
  3. #include<sys/types.h>
  4. #include<sys/stat.h>
  5. #include<stdlib.h>
  6. #include<stdio.h>
  7. #include<linux/soundcard.h>
  8. #define Audio_Device "/dev/dsp"
  9. //不同的声音有着不同的播放参数,这些参数可以使用file命令获得
  10. #define Sample_Size 16 //there're two kinds of bits,8 bits and 16 bits
  11. #define Sample_Rate 8000 //sampling rate
  12. int play_sound(char *filename){
  13. struct stat stat_buf;
  14. unsigned char * buf = NULL;
  15. int handler,fd;
  16. int result;
  17. int arg,status;
  18. //打开声音文件,将文件读入内存
  19. fd=open(filename,O_RDONLY);
  20. if(fd<0) return -1;
  21. if(fstat(fd,&stat_buf)){
  22. close(fd);
  23. return -1;
  24. }
  25. if(!stat_buf.st_size){
  26. close(fd);
  27. return -1;
  28. }
  29. buf=malloc(stat_buf.st_size);
  30. if(!buf){
  31. close(fd);
  32. return -1;
  33. }
  34. if(read(fd,buf,stat_buf.st_size)<0){
  35. free(buf);
  36. close(fd);
  37. return -1;
  38. }
  39. //打开声卡设备,并设置声卡播放参数,这些参数必须与声音文件参数一致
  40. handler=open(Audio_Device,O_WRONLY);
  41. if(handler==-1){
  42. perror("open Audio_Device fail");
  43. return -1;
  44. }
  45. arg=Sample_Rate;
  46. status=ioctl(handler,SOUND_PCM_WRITE_RATE,&arg);
  47. if(status==-1){
  48. perror("error from SOUND_PCM_WRITE_RATE ioctl");
  49. return -1;
  50. }
  51. arg=Sample_Size;
  52. status=ioctl(handler,SOUND_PCM_WRITE_BITS,&arg);
  53. if(status==-1){
  54. perror("error from SOUND_PCM_WRITE_BITS ioctl");
  55. return -1;
  56. }
  57. result=write(handler,buf,stat_buf.st_size);
  58. if(result==-1){
  59. perror("Fail to play the sound!");
  60. return -1;
  61. }
  62. free(buf);
  63. close(fd);
  64. close(handler);
  65. return result;
  66. }
  67. void main(void)
  68. {
  69. play_sound("/root/Online.wav");
  70. }

  

转载于:https://www.cnblogs.com/Daniel-G/p/3984872.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/326040
推荐阅读
相关标签
  

闽ICP备14008679号