- 16
- 0
- 约1.13万字
- 约 5页
- 2016-10-06 发布于贵州
- 举报
Linux声音备编程
6.4 Linux声音设备编程
(实验估计时间:120分钟)
实验目的
通过对机器内部扬声器的编程:
1) 了解和学习Linux内部设备的控制和管理方法。
2) 熟悉Linux环境的程序设计和调试方法。
3) 进一步了解操作系统输入/输出处理技术。
实验内容与步骤
步骤1:登录进入Rad Hat Linux。
步骤2: 单击红帽子,在“GNOME帮助”菜单中单击“附件”-“文本编辑器”命令,在文本编辑中键入清单6-4程序并保存为6-4.c。
清单6-4 让扬声器按指定的长度和音频发声
# 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
int length; // 发声长度,以微秒为单位
int reps; // 重复的次数
int delay; // 两次发声间隔,以微秒为单位
} beep_parms_t;
?
// 打印帮助信息并退出
void usage_bail(const char *executable_name)
{
printf(Usage: \n \t%s [-f frequency] [-l length] [-r reps] [-d delay] \n ,executable_name) ;
exit(1) ;
}
?
// 分析运行参数,各项意义如下:
// -f 以Hz为单位的频率值
// -l 以毫秒为单位的发声时长
// -r 重复次数
// -d 以毫秒为单位的间歇时长
?
void parse_command_line(char **argv, beep_parms_t *result)
{
char *arg0 = *(argv++) ;
while (*argv)
{
if (!strcmp(*argv, -f ) )
{ // 频率
int freq = atoi(*( ++argv) ) ;
if ( (freq = 0) || (freq 10000) )
{
fprintf(stderr, Bad parameter: frequency must be from l..10000\n ) ;
exit(1) ;
}
else
{
result - freq = freq;
argv++;
}
} else
if (!strcmp(*argv, -l) )
{ // 发声的时间长度
int length = atoi( *(++argv) ) ;
if (length 0)
{
fprintf(stderr, Bad parameter: length must be = 0\n ) ;
exit
原创力文档

文档评论(0)