zoukankan      html  css  js  c++  java
  • linux dev/dsp 声卡学习笔记

          无论是从声卡读取数据,或是向声卡写入数据,事实上都具有特定的格式(format),默认为8位无符号数据、单声道、8KHz采样率,如果默认值无法达到要求,可以通过ioctl系统调用来改变它们。通常说来,在应用程序中打开设备文件/dev/dsp之后,接下去就应该为其设置恰当的格式,然后才能从声卡读取或者写入数据。
     
    下面的代码示范了如何以只写方式打开声卡进行放音(playback)操作:

      int handle = open("/dev/dsp", O_WRONLY);

      if (handle == -1) {

      perror("open /dev/dsp");

      return -1;

      }

     

    下面的代码示范了怎样设置声卡驱动程序中的内核缓冲区的大小:

      int setting = 0xnnnnssss;

      int result = ioctl(handle, SNDCTL_DSP_SETFRAGMENT, &setting);

      if (result == -1) {

      perror("ioctl buffer size");

      return -1;

      }

     

    设置声卡工作时的声道(channel)数目,根据硬件设备和驱动程序的具体情况,可以将其设置为0(单声道,mono)或者1(立体声,stereo)。下面的代码示范了应该怎样设置声道数目:

      int channels = 0; // 0=mono 1=stereo

      int result = ioctl(handle, SNDCTL_DSP_STEREO, &channels);

      if ( result == -1 ) {

      perror("ioctl channel number");

      return -1;

      }

      if (channels != 0) {

      // 只支持立体声

      }

    采样格式和采样频率是在进行音频编程时需要考虑的另一个问题,声卡支持的所有采样格式可以在头文件soundcard.h中找到,而通过ioctl系统调用则可以很方便地更改当前所使用的采样格式。下面的代码示范了如何设置声卡的采样格式:

      int format = AFMT_U8;

      int result = ioctl(handle, SNDCTL_DSP_SETFMT, &format);

      if ( result == -1 ) {

      perror("ioctl sample format");

      return -1;

      }

    在Linux下进行音频编程时最常用到的几种采样频率是11025Hz、16000Hz、22050Hz、32000Hz和44100Hz。下面的代码示范了如何设置声卡的采样频率:

      int rate = 22050;

      int result = ioctl(handle, SNDCTL_DSP_SPEED, &rate);

      if ( result == -1 ) {

      perror("ioctl sample format");

      return -1;

      }

  • 相关阅读:
    html5基础--canvas标签元素
    html5基础--audio标签元素
    html5基础--video标签元素
    SSH Secure Shell Client中文乱码的解决方法
    Response.End() 与Response.Close()的区别
    服务器控件的返回值问题
    常用数据库操作(一)
    DataTable 读取数据库操作时去掉空格
    回车触发Button
    404页面自动跳转javascript
  • 原文地址:https://www.cnblogs.com/songfeixiang/p/3733788.html
Copyright © 2011-2022 走看看