next up previous contents
下一主题: 8 字符单元图形 向上: 7 声音编程 前一主题: 7.1 内部设备编程

7.2 声卡编程

作为程序员,了解当前的 Linux 系统是否插入了声卡非常重要。一种检查方法是查看 /dev/sndstat。如果打开 /dev/sndstat 失败并且 errno=ENODEV,则表示没有激活声卡驱动程序,这意味着你将无法从内核声卡驱动程序获得任何帮助。尝试打开 /dev/dsp 也可能达到同样的结果,只要它不是指向 pcsnd 驱动程序的链接,在这种情况下,open() 不会失败。

如果你想在硬件层面摆弄声卡,你肯定知道某些 outb() 和 inb() 调用的组合将检测到你要查找的声卡。

通过为你的程序使用声卡驱动程序,它们很有可能也能在其他 i386 系统上工作,因为一些聪明的人决定为 Linux、isc、FreeBSD 和大多数其他基于 i386 的系统使用相同的驱动程序。如果其他架构上的 Linux 提供相同的声音设备接口,这将有助于程序的移植。声卡不是 Linux 控制台的一部分,而是一种特殊设备。声卡主要提供三个主要功能

这些功能中的每一个都有自己的设备驱动程序接口。对于数字采样,它是 /dev/dsp;对于频率调制,它是 /dev/sequencer;对于 MIDI 接口,它是 /dev/midi。声音设置(如音量、平衡或低音)可以通过 /dev/mixer 接口控制。出于兼容性原因,存在 /dev/audio 设备,它可以读取 SUN tex2html_wrap_inline54664 -law 声音数据,但它映射到数字采样设备。

如果你猜到你使用 ioctl() 来操作这些设备,那就对了。ioctl() 请求在 <linux/soundcard.h> 中定义,并以 SNDCTL_ 开头。

由于我没有声卡,所以其他人必须在这里继续下去


next up previous contents
下一主题: 8 字符单元图形 向上: 7 声音编程 前一主题: 7.1 内部设备编程

转换于
Fri Mar 29 14:43:04 EST 1996