//drawraw.cpp
#include"drawraw.h"
static short notew[]={8,6,8,6,8,8,6,7,6,7,6,8};
static short drawmap[128]=
{
0,2,4,5,7,9,11,12,14,16,17,19,21,23,24,26,28,29,
31,33,35,36,38,40,41,43,45,47,48,50,52,53,55,57,
59,60,62,64,65,67,69,71,72,74,76,77,79,81,83,84,
86,88,89,91,93,95,96,98,100,101,103,105,107,108,
110,112,113,115,117,119,120,122,124,125,127,1,3,
6,8,10,13,15,18,20,22,25,27,30,32,34,37,39,42,44,
46,49,51,54,56,58,61,63,66,68,70,73,75,78,80,82,
85,87,90,92,94,97,99,102,104,106,109,111,114,116,
118,121,123,126,
};
void CANVAS::init(int h,const char*args)
{
int i;
short genkeyx[]={0,8,12,22,24,36,44,48,57,60,70,72};
short gennotex[]={0,8,14,22,28,36,44,50,57,63,70,76};
keyh=100;
canvash=h;
canvasw=900;
canvas=(unsigned int**)malloc(sizeof(unsigned int*)*canvash);
for(i=0;i<h;++i)
{
canvas[i]=(unsigned int*)malloc(sizeof(unsigned int)*canvasw);
}
for(i=0;i<128;++i)
{
notex[i]=i/12*84+gennotex[i%12];
keyx[i]=drawmap[i]/12*84+genkeyx[drawmap[i]%12];
}
for(i=0;i<12;++i)
{
notew[i]=notew[i];
}
rawout=popen(args,"w");
}
void CANVAS::clean()const
{
int i,j;
for(i=0;i<canvasw;++i)
{
for(j=0;j<canvash;++j)
{
canvas[j][i]=0xFF000000;
}
}
}
void CANVAS::drawkeys(unsigned int*keys)const
{
int i;
for(i=0;i<74;++i)
{
drawfillrect(keyx[i],0,12,100,keys[drawmap[i]]);
drawrect(keyx[i],0,13,100,0xFF000000);
}
drawfillrect(keyx[i],0,12,100,keys[drawmap[i]]);
drawrect(keyx[i],0,12,100,0xFF000000);
for(++i;i<128;++i)
{
drawfillrect(keyx[i],38,6,62,keys[drawmap[i]]);
drawrect(keyx[i],38,7,62,0xFF000000);
}
}
void CANVAS::drawnote(short key,int y,int h,unsigned int c)const
{
int w=key==127?9:notew[key%12],x=notex[key]+1;
drawrect(x,y,w,h,c);
drawfillrect(x,y,w,h,c);
}
void CANVAS::write()const
{
int i;
for(i=0;i<canvash;++i)
{
fwrite(canvas[i],4,canvasw,rawout);
}
}
void CANVAS::destroy()const
{
int i;
printf("%d",canvash);
for(i=0;i<canvash;++i)
{
free(canvas[i]);
}
free(canvas);
pclose(rawout);
}
2020年05月18日 04点05分
12