免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Linux下聲卡編程(播放指定音頻文件)

root@ubuntu:/home/naviwork/dsp# file /usr/lib/openoffice/basis3.2/share/gallery/sounds/wallewal.wav
/usr/lib/openoffice/basis3.2/share/gallery/sounds/wallewal.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 11025 Hz
root@ubuntu:/home/naviwork/dsp# ./a.out /usr/lib/openoffice/basis3.2/share/gallery/sounds/wallewal.wav 16 11025
samplebits = 16 samplerate = 11025

===============================================================
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<stdio.h>
#include <stropts.h>

#include<linux/soundcard.h>

#define Audio_Device "/dev/dsp"

//不同的聲音有著不同的播放參數(shù),這些參數(shù)可以使用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, int samplebits, int samplerate){
    struct stat stat_buf;
    unsigned char * buf = NULL;
    int handler,fd;
    int result;
    int arg,status;
    
    printf("samplebits = %d samplerate = %d\n", samplebits, samplerate);
   
    //打開聲音文件,將文件讀入內(nèi)存
    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=(unsigned char *)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;
   }

   //打開聲卡設備,并設置聲卡播放參數(shù),這些參數(shù)必須與聲音文件參數(shù)一致
   handler=open(Audio_Device,O_WRONLY);
   if(handler==-1){
       perror("open Audio_Device fail");
       return -1;
   }
  
   arg=samplerate;
   status=ioctl(handler,SOUND_PCM_WRITE_RATE,&arg);
   if(status==-1){
      perror("error from SOUND_PCM_WRITE_RATE ioctl");
      return -1;
   }

   arg=samplebits;
   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;
}

int main(int argc, char *argv[])
{
   play_sound(argv[1], atoi(argv[2]), atoi(argv[3]));
return 0;
}


本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
wav2pcm
linux設備驅(qū)動歸納總結(三):4.ioctl的實現(xiàn)
Linux音頻驅(qū)動構架及音頻設備簡單測試方法 .
如何安裝ALSA驅(qū)動
關于ALSA的一點總結
150行C代碼的comet服務器
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服