Linux声音设备编程实例
由于这些文件不是普通的文件,所以我们不能用
ANSI C
(标准
C
)的
fopen
、
fclose
等来操作文件,而应该使用系统文件
I/O
处理函数(
open
、
read
、
write
、
lseek
和
close
)来处理这些设备文件。
ioctl
()或许是
Linux
下最庞杂的函数,它可以控制各种文件的属性,在
Linux
声音设备编程中,最重要的就是使用此函数正确设置必要的参数。
下面我们举两个实际的例子来说明如何实现
Linux
下的声音编程。由于此类编程涉及到系统设备的读写,所以,很多时候需要你有
root
权限,如果你将下面的例子编译后不能正确执行,那么,首先请你检查是否是因为没有操纵某个设备的权限。
1.
对内部扬声器编程
内部扬声器是控制台的一部分,所以它对应的设备文件为
/dev/console
。变量
KIOCSOUND
在头文件
/usr /include /linux /kd.h
中声明,
ioctl
函数使用它可以来控制扬声器的发声,使用规则为:
ioctl ( fd, KIOCSOUND, (int) tone);
fd
为文件设备号,
tone
是音频值。当
tone
为
0
时,终止发声。必须一提的是它所理解的音频和我们平常以为的音频是不同的,由于计算机主板定时器的时钟频率为
1.19MHZ
,所以要进行正确的发声,必须进行如下的转换:
扬声器音频值
=1190000/
我们期望的音频值。
扬声器发声时间的长短我们通过函数
usleep
(
unsigned long usec
)来控制。它是在头文件
/usr /include /unistd.h
中定义的,让程序睡眠
usec
微秒。下面即是让扬声器按指定的长度和音频发声的程序的完整清单:
#include
< fcntl.h >
#include
< stdio.h >
#include
< stdlib.h >
#include
< string.h >
#include
< unistd.h >
#include
< sys/ioctl.h >
#include
< sys/types.h >
#include
< linux/kd.h >
/*
设定默认值 */
#define
DEFAULT_FREQ 440 /*
设定一个合适的频率 */
#define
DEFAULT_LENGTH 200 /* 200
微秒,发声的长度是以微秒为单位的*/
#define
DEFAULT_REPS 1 /*
默认不重复发声 */
#define
DEFAULT_DELAY 100 /*
同样以微秒为单位*/
/*
定义一个结构,存储所需的数据*/
typedef
struct
{
int
freq; /*
我们期望输出的频率,单位为Hz */
相关文档:
1. Download all packet and patchs Done
2. To be involved in the mail list
3. Check Host Requirements Done
还学习了 cut 显示某行的指定field ,head 显示前几行,readlin ......
之前我们已经讲到用fork()来创建一个新进程,用exit()来终止一个进程。现在我们将略微深入了解exit()执行之后发生的事情。
事实上,exit()终止进程并没有将其彻底终结,而是将一个正常的进程变成了一个僵尸进程。该僵尸进程几乎不占用资源,没有可执行的代码,也不能被调度,仅仅只能在进程列表中 ......
STAT(该行程的状态)
D: 不可用信号中断的睡眠状态
R: 正在执行或处于执行队列中
S: 可以用信号中断的睡眠状态
T: 暂停执行
Z: 僵死状态
------------------------------------
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程&nbs ......
在Linux下看电视
时间:2009-12-09 13:37:00 来源:网络 作者:小卢
长期以来,在Linux操作系统下使用电视卡是一件比较麻烦的事,这是因为各家电视卡生产厂商都没有提供官方的Linux驱动,只有Windows下的WDM驱动。
Linux下的电视卡驱动,一直由linux.bytesex.org的Linux爱好者负责开发。该驱动有两 ......
哈希表(Hashtable)又称为“散置”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。
哈希函 ......