首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
Google
首页 入门 Linux编程 系统管理 网络管理 Linux认证 Unix/BSD Linux数据库 Linux集群 Linux手册 Linux下载 Ubuntu 论坛 专题 RSS
您现在的位置: 中国IT实验室 >> Linux >> 系统管理 >> 桌面应用 >> 正文

OSS--跨平台的音频接口简介

三、Mixer编程

    对Mixer 的控制,包括调节音量(volume)、选择录音音源(microphone,line-in)、查询mixer的功能和状态,主要是通过Mixer设备 /dev/mixer的ioctl接口。相应的,ioctl接口提供的功能也分为三类:调节音量、查询mixer的能力、选择mixer的录音通道。下面就分别介绍使用的方法:

    下面的mixer_fd是对mixer设备执行open操作返回的文件描述符。

  • 调节音量

    应用程序通过ioctl的SOUND_MIXER_READ和SOUND_MIXER_WIRTE功能号来读取/设置音量。在OSS中,音量的大小范围在0-100之间。使用方法如下:

    
    int vol;
    if (ioctl(mixer_fd, SOUND_MIXER_READ(SOUND_MIXER_MIC), &vol) == -1) {
    /* 访问了没有定义的mixer通道... */
                

    SOUND_MIXER_MIC 是通道参数,表示读microphone通道的音量,结果放置在vol中。如果通道是立体声,那么vol的最低有效字节为左声道的音量值,接着的字节为右声道的音量值,另外的两个字节不用。如果通道是单声道,vol中左声道与右声道具有相同的值。

  • 查询mixer的能力

    
    int mask;
    if (ioctl(mixer_fd, SOUND_MIXER_READ_xxxx, &mask) == -1) {
    /* Mixer 的没有此能力... */
    }
                

    SOUND_MIXER_READ_xxxx 中的xxxx代表具体要查询的内容,比如检查可用的mixer通道用SOUND_MIXER_READ_DEVMASK;检查可用的录音设备,用 SOUND_MIXER_READ_RECMASK;检查单声道/立体声,用SOUND_MIXER_READ_STEREODEVS;检查mixer的一般能力,用SOUND_MIXER_READ_CAPS等等。所有通道的查询的结果都放在mask中,所以要区分出特定通道的状况,使用 mask& (1 << channel_no)。

  • 选择mixer的录音通道

    首先可以通过SOUND_MIXER_READ_RECMASK检查可用的录音通道,然后通过SOUND_MIXER_WRITE_RECSRC选择录音通道。可以随时通过SOUND_MIXER_READ_RECSRC查询当前声卡中已经被选择的录音通道。

    OSS建议把mixer的用户控制功能单独出来形成一个通用的程序。但前提是,在使用mixer之前,首先通过API的查询功能检查声卡的能力。在linux中,就有一个专门的mixer程序--aumix。

四、结束语

    前面讨论的是OSS中一些最基本的内容,实际上OSS中还有很多高级的特性,比如在音频编程时十分重要的实时性问题,画面与声音的同步问题,这里都没有介绍。如果读者对这些特性感兴趣的话,可以进一步参考[1]。另外,在[2]中,还可以下载使用OSS接口的样例程序。

上一页  [1] [2] [3] 

【责编:Peng】
中国IT教育
相关产品和培训
文章评论
 友情推荐链接
 专题推荐

 ·防范Linux病毒 打造没有病毒的乐土…
 ·Linux Shell编程实用指南…
 ·Linux日志分析与管理
 ·揭密Linux内存管理
 ·邮件服务Sendmail应用配置
 ·Linux 安全管理…
 ·Linux 下DNS服务器架设攻略…
 ·Linux 下的路由的配置与应用…
 ·专题:Apache实用手册
 ·全面剖析Linux文件系统
 今日更新
 认证培训
 频道精选
 Windows频道导航