当前位置:Linux教程 - Linux - linux下声卡编程试探

linux下声卡编程试探



         经过小弟的不懈努力,终于对声卡编程有了一定的掌握.实现了一个小的录音程序,当然还很不完善,还有一些细节我不大清楚//shy,现将原码贴出,请各位给帮忙指正,//xixi

    #include <sys/soundcard.h>

    #include <stdio.h>

    #include <sys/types.h>

    #include <sys/stat.h>

    #include <fcntl.h>

    main()

    {

    int id,fd,i,j;

    char testbuf[4096];

    id=open(\"/dev/audio\",O_RDWR);

    fd=open(\"test.wav\",O_RDWR);

    if(id<0||fd<0){

    printf(\"error in open the device!\\n\");

    printf(\"id %d\\t dsp%d\\t seq%d\\n\",id,dsp,seq);

    exit(-1);

    }

    post=0;

    ioctl(id,SNDCTL_DSP_RESET,(char *)&i);

    ioctl(id,SNDCTL_DSP_SYNC,(char *)&i);

    i=1;

    ioctl(id,SNDCTL_DSP_NONBLOCK,(char *)&i);

    i=8000;

    ioctl(id,SNDCTL_DSP_SPEED,(char *)&i);

    i=1;

    ioctl(id,SNDCTL_DSP_CHANNELS,(char *)&i);

    i=8;

    ioctl(id,SNDCTL_DSP_SETFMT,(char *)&i);

    i=3;

    ioctl(id,SNDCTL_DSP_SETTRIGGER,(char *)&i);

    i=3;

    ioctl(id,SNDCTL_DSP_SETFRAGMENT,(char *)&i);

    i=1;

    ioctl(id,SNDCTL_DSP_PROFILE,(char *)&i);

    for(j=0;j<10;){

    i=read(id,testbuf,4096);

    if(i>0){

    write(fd,filebuf,i);

    j++;

    }

    }

    close(fd);

    close(id);

    }

    该程序只是简单地录一小段纯音频数据存储在test.wav中,用命令

    cat test.wav >/dev/audio 就可以播放出来

    对了因为程序要读写声卡的设备文件,所以你必须用相应的权限,或者

    你是root。
    发布人:netbull 来自:嵌入式Linux