• 大小: 377KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-07-03
  • 语言: 其他
  • 标签: 电子钢琴  linux  arm  

资源简介

该项目基于arm开发板。 运用了linux的多线程,多进程, arm的LCD屏幕的图片显示和触摸屏控制功能,使用了
madplay进行音频播放。

该系统运行时会生成一条进程读取触摸屏的x,y和压力值数据,存储到共享内存里面。
进入系统时会显示一个主界面,通过读取共享内存的x,y数据检测到用户点击了钢琴图标后进入钢琴界面,点击钢琴
琴键时,会播放该琴键对应的琴音,由于开发板限制无法一次播放多个音频文件,所以在点击下一个琴键时,会使用
命令终止其他音频文件的播放。该程序还可以通过点击钢琴界面的按钮调整钢琴声音的大小。并支持滑动弹奏。

资源截图

代码片段和文件信息

#include “common.h“



int show_bmp(int x int y const char *pathname);
int piano_get_xy(int *x int *y);

void key12(void);
void key11(void);
void key10(void);
void key9(void);
void key8(void);
void key7(void);
void key6(void);
void key5(void);
void key4(void);
void key3(void);
void key2(void);
void key1(void);

#define TOUCH  0
#define UP     1
#define DOWN   2
#define LEFT   3
#define RIGHT  4

int touch = 0;
int pressure;
int voice = -25; //-60 ~ 0
char buf[5];
int past_x = 0past_y = 0;
int key = 0;
int past_key = 0;

int main()
{
int mod = 0;
int xy;
int event;

pid_t pid;

pid_t pid0 = fork();
if(pid0 == 0)
{
int id = shmget(ftok(“.“ 1) 1024 IPC_CREAT|0777);
int *addr1 = shmat(id  /* 共享内存的ID */
   NULL/* 意味着让系统帮忙找到一处恰当的虚拟地址来映射 */
   0   /* 意味着以可读可写的方式访问这块内存 */);

//1、打开event0文件
int ts_fd = open(“/dev/input/event0“ O_RDWR);
if(ts_fd == -1)
{
perror(“open event0 failed!“);
return -1;
}
struct input_event ts_buf;
bzero(&ts_buf sizeof(ts_buf));
while(1)
{
//2、阻塞(卡住等待手指触摸屏幕后),读取触摸屏数据-->每一次只能获取其中一种事件
read(ts_fd &ts_buf sizeof(ts_buf));

//3、分析处理触摸屏数据
//判断事件类型是否为触摸屏事件
if(ts_buf.type == EV_ABS)
{

//进一步判断事件类型是否为x轴事件
if(ts_buf.code == ABS_X)
{

x= ts_buf.value*800/1024 ;

}
//进一步判断事件类型是否为y轴事件
if(ts_buf.code == ABS_Y)
{

y= ts_buf.value*480/600;

}
*addr1 = x;
*(addr1 + 1) = y;
}
else if(ts_buf.type == EV_KEY)
{
if(ts_buf.code == BTN_TOUCH)
{
*(addr1 + 2) = ts_buf.value;
if(ts_buf.value == 0)
{
*addr1 = 0;
*(addr1 + 1) = 0;
}
}
}
}
}





/* pid_t pid2 = fork();
 if(pid2 == 0)
{
int id = shmget(ftok(“.“ 1) 1024 IPC_CREAT|0777);

int *addr3 = shmat(id  
   NULL
   0);
int key2;
int pressure2;
while(1)
{
key2 = *(addr3 + 3);
pressure2 = *(addr3 + 2);

if(key != past_key)
{
show_bmp(0 49 “/IOT/IO/piano_file/piano_bmp/background.bmp“);
switch(key2)
{
case  1:
show_bmp(0 49 “/IOT/IO/piano_file/piano_bmp/key.bmp“);
break;

case  2:
show_bmp(67 49 “/IOT/IO/piano_file/piano_bmp/k2.bmp“);
break;

case  3:
show_bmp(133 49 “/IOT/IO/piano_file/piano_bmp/k3.bmp“);

break;

case  4:
show_bmp(200 49 “/IOT/IO/piano_file/piano_bmp/k4.bmp“);

break;

case  5:
show_bmp(267 49 “/IOT/IO/piano_file/piano_bmp/k5.bmp“);

break;

case  6:
show_bmp(331 49 “/IOT/IO/piano_file/piano_bmp/k2.bmp“);
break;

case  7:
show_bmp(400 49 “/IOT/IO/piano_file/piano_bmp/k3.bmp“);

break;

case  8:
show_bmp(468 49 “/IOT/IO/piano_file/piano_bmp/k5.bmp“);


break;

case  9:
show_bmp(531 49 “/IOT/IO/piano_file/piano_bmp/k2.bmp“);


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-09-18 11:34  新建文件夹\
     文件     1152056  2019-09-18 10:15  新建文件夹\background.bmp
     目录           0  2019-09-18 11:32  新建文件夹\key_bmp\
     文件       58088  2019-09-18 08:26  新建文件夹\key_bmp\k2.bmp
     文件       58780  2019-09-18 08:27  新建文件夹\key_bmp\k3.bmp
     文件       58780  2019-09-18 08:28  新建文件夹\key_bmp\k4.bmp
     文件       57464  2019-09-18 08:28  新建文件夹\key_bmp\k5.bmp
     文件       57176  2019-09-18 08:29  新建文件夹\key_bmp\k6.bmp
     目录           0  2019-09-18 11:32  新建文件夹\key_on\
     文件       58296  2019-09-18 08:50  新建文件夹\key_on\on1.bmp
     文件       56056  2019-09-18 08:50  新建文件夹\key_on\on2.bmp
     文件       56564  2019-09-18 08:51  新建文件夹\key_on\on3.bmp
     文件       57256  2019-09-18 08:51  新建文件夹\key_on\on4.bmp
     文件       56768  2019-09-18 08:52  新建文件夹\key_on\on5.bmp
     文件       14346  2019-09-18 09:54  新建文件夹\piano.c
     文件       19254  2019-09-16 14:50  新建文件夹\piano_app.bmp
     目录           0  2019-09-18 11:32  新建文件夹\voice\
     文件       25077  2011-05-29 13:46  新建文件夹\voice\1.mp3
     文件       22987  2011-05-29 13:46  新建文件夹\voice\10.mp3
     文件       23405  2011-05-29 13:46  新建文件夹\voice\11.mp3
     文件       22987  2011-05-29 13:46  新建文件夹\voice\12.mp3
     文件       22987  2011-05-29 13:46  新建文件夹\voice\2.mp3
     文件       25077  2011-05-29 13:46  新建文件夹\voice\3.mp3
     文件       25077  2011-05-29 13:46  新建文件夹\voice\4.mp3
     文件       24659  2011-05-29 13:46  新建文件夹\voice\5.mp3
     文件       23823  2011-05-29 13:46  新建文件夹\voice\6.mp3
     文件       26749  2011-05-29 13:46  新建文件夹\voice\7.mp3
     文件       23823  2011-05-29 13:46  新建文件夹\voice\8.mp3
     文件       24241  2011-05-29 13:46  新建文件夹\voice\9.mp3

评论

共有 条评论