声音的控制和播放Word文件下载.docx

上传人:b****2 文档编号:3198980 上传时间:2023-05-01 格式:DOCX 页数:9 大小:16.83KB
下载 相关 举报
声音的控制和播放Word文件下载.docx_第1页
第1页 / 共9页
声音的控制和播放Word文件下载.docx_第2页
第2页 / 共9页
声音的控制和播放Word文件下载.docx_第3页
第3页 / 共9页
声音的控制和播放Word文件下载.docx_第4页
第4页 / 共9页
声音的控制和播放Word文件下载.docx_第5页
第5页 / 共9页
声音的控制和播放Word文件下载.docx_第6页
第6页 / 共9页
声音的控制和播放Word文件下载.docx_第7页
第7页 / 共9页
声音的控制和播放Word文件下载.docx_第8页
第8页 / 共9页
声音的控制和播放Word文件下载.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

声音的控制和播放Word文件下载.docx

《声音的控制和播放Word文件下载.docx》由会员分享,可在线阅读,更多相关《声音的控制和播放Word文件下载.docx(9页珍藏版)》请在冰点文库上搜索。

声音的控制和播放Word文件下载.docx

main.cwgdriver.c命令:

“mknodwgdriver.oc123o-m666” 三者的节点是统一的,本次实验,统一设定为123;

2,要统一节点文件的文件名,本次实验中,统一设定为“wgdriver”要将main.c中原“shidriver”全部改为“wgdriver”同样的,也要在wgdriver文件中,做相应的修改;

3,再所有的修改都完成之后,才可以按上面的操作步骤进行实验,不然是不会得到实验现象的!

4,如果遇到设备节点加载失败,则运行命令:

cat/proc/devices查看节点使用情况

利用命令:

/sbin/rmmod123删除被占用的节点,然后再从新加载节点

实验中使用的程序

   main.c

#include<

fcntl.h>

linux/ioctl.h>

curses.h>

#defineTIMERIOMAGIC'

s'

#defineTIMERIOCSINIT_IOW(TIMERIOMAGIC,0,int)

#defineTIMERIOCSDAT_IOW(TIMERIOMAGIC,1,int)

#defineTIMERIOCSTART_IOW(TIMERIOMAGIC,2,int)

#defineTIMERIOCSTOP_IOW(TIMERIOMAGIC,3,int)

#defineTIMER_MAJOR123

#defineTIMER_NAME"

wgdriver"

#defineSUCCESS0

unsignedintmediant[]={0x11be,0x0fd0,0x0e16,0x0d52,0x0bdc,0x0a91,0x0969,0x0871,0x1eb6,0x8971};

intfd;

voidstartmusic()

{

inti;

charmusic[]={3,3,4,5,5,4,3,2,0,1,1,2,3,3,2,2,2,0,3,3,4,5,5,4,3,2,0,1,1,2,3,2,1,1,1};

for(i=0;

i<

sizeof(music);

i++)

{

if(music[i]==0)

ioctl(fd,TIMERIOCSDAT,0x20);

else

ioctl(fd,TIMERIOCSDAT,mediant[music[i]-1]);

ioctl(fd,TIMERIOCSTART,0);

usleep(500000);

ioctl(fd,TIMERIOCSTOP,0);

usleep(1000);

if(i==sizeof(music)-1)

break;

}

}

main()

intget_val,i;

fd=open("

./wgdriver"

O_RDONLY);

if(fd<

0)

printf("

ERROR"

);

else

OK"

printf("

fd=%d\n"

fd);

ioctl(fd,TIMERIOCSINIT,0);

initok\n"

ioctl(fd,TIMERIOCSTART,0);

startok\n"

while

(1)

{

ioctl(fd,TIMERIOCSINIT,0);

get_val=getchar();

aa"

switch(get_val)

{

case'

1'

:

ioctl(fd,TIMERIOCSDAT,mediant[0]);

break;

2'

ioctl(fd,TIMERIOCSDAT,mediant[1]);

3'

ioctl(fd,TIMERIOCSDAT,mediant[2]);

4'

ioctl(fd,TIMERIOCSDAT,mediant[3]);

5'

ioctl(fd,TIMERIOCSDAT,mediant[4]);

6'

ioctl(fd,TIMERIOCSDAT,mediant[5]);

7'

ioctl(fd,TIMERIOCSDAT,mediant[6]);

case'

x'

ioctl(fd,TIMERIOCSDAT,mediant[7]);

y'

ioctl(fd,TIMERIOCSDAT,mediant[8]);

z'

ioctl(fd,TIMERIOCSDAT,mediant[9]);

a'

startmusic();

default:

break;

}

usleep(100000);

}

close(fd);

return0;

Wgdriver.c

#defineMODULE

#define__KERNEL__

//#define__NOVERSIONS__

linux/kernel.h>

linux/module.h>

linux/fs.h>

linux/init.h>

asm/io.h>

staticintdevicevalue=0;

intshi_open(structinode*inode,structfile*file)

devicevalue++;

 

intshi_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg)

unsignedintvalue=0;

printk("

<

1>

ioctl\n"

switch(cmd)

caseTIMERIOCSINIT:

outb_p(0xb6,0x43);

printk("

INIT!

\n"

break;

caseTIMERIOCSTART:

outb_p(0x03,0x61);

START!

caseTIMERIOCSDAT:

value=(unsignedint)arg;

outb_p((char)(value&

0x00ff),0x42);

outb_p((char)(value>

>

8),0x42);

SETDATA!

caseTIMERIOCSTOP:

outb_p(0x00,0x61);

ERRORCOMMANDS!

intshi_release(structinode*inode,structfile*file)

devicevalue--;

structfile_operationsshi_fops={

open:

shi_open,

ioctl:

shi_ioctl,

release:

shi_release,

};

intinit_module()

charret;

ret=register_chrdev(TIMER_MAJOR,TIMER_NAME,&

shi_fops);

initmoduleok\n"

returnSUCCESS;

voidcleanup_module(void)

intret;

ret=unregister_chrdev(TIMER_MAJOR,TIMER_NAME);

MODULE_LICENSE("

GPL"

MODULE_AUTHOR("

SHI"

制作自己的音乐:

将main.c中的

charmusic[]={3,3,4,5,5,4,3,2,0,1,1,2,3,3,2,2,2,0,3,3,4,5,5,4,3,2,0,1,1,2,3,2,1,1,1};

修改为自己想要的音乐,可以是

music[]={5,5,0,4,4,2,2,2,5,3,3,5,5,2,3,4,6,7,2,6,2,7,1,8,3,7,4,7};

可以添加一个新的声调

intmediant[]={0x11be,0x0fd0,0x0e16,0x0d52,0x0bdc,0x0a91,0x0969,0x0871,0x1eb6,0x8971,0x1223,0x6532};

再在case选择语句中添加:

8'

9'

再做完成程序的编译,运行之后,按“8”,“9”键,就有相应的声音出来;

即时发生:

主要有三处地方需要修改:

while

(1)

{initscr();

//第一处

get_val=getch();

//第二处

endwin();

//第三处

再用gcc–omainmain.c–lcurses代替原来的gcc–omainmain.c

完成以上的改变,就可以做到即时发声

实验小结:

实验中,我们需要添加一些别的音调,这些音调产生的原理是“分频”即,将8253最大的发生频率进行分频,得到的就是我们想要的频率

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2