linux dev dsp,[转载]linux 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;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值