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 ......
看LDD3中设备模型一章,觉得思维有些混乱。这里从整体的角度来理理思路。
本文从四个方面来总结一些内容:
1.底层数据结构:kobject,kset.
2.linux设备模型层次关系:bus_type,device,device_driver.
3.集成:PCI设备驱动模型实例及设备,设备驱动注册源码的简单分析.
4.面向对象的思想在linux设备模型中的应用分析.
......
哈希表(Hashtable)又称为“散置”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。
哈希函 ......
纪晓岚曾经说:“世间的道理与事情,都在古人的书中说尽,现在如再著述,仍然超不过古人的范围,又何必再多著述。”于是他一生之中,从不著书,只是编书--整理前人的典籍,将中国文化作系统的分类,以便于以后的学者们学习。自己的著作只有『阅微草堂笔记』一册而已。
&nb ......
linux 文件系统结构
/ 根目录
/bin 常用的命令 binary file 的目录
/boot 存放系统启动时必须读取的档案,包括核心 (kernel) ......