zoukankan      html  css  js  c++  java
  • 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 rate
    
    int 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");
    }
    

      

  • 相关阅读:
    OData – 权限管理
    Identity – Authorize Custom Authorization Policy Providers
    CSS – W3Schools 学习笔记 (1)
    OData – How It Work
    OData – Custom Serialize & Deserialize
    ASP.NET Core – System.Text.Json
    Identity – Authorize
    ASP.NET Core – Custom Input formatters For Partial Update and Handle Underposting
    as3 Matrix用法
    as3页游聊天框点击透明区域及普通文本支持寻路方案
  • 原文地址:https://www.cnblogs.com/Daniel-G/p/3984872.html
Copyright © 2011-2022 走看看