source: buchla-68k/ram/pix2mid.c@ 6262b5c

Last change on this file since 6262b5c was 6262b5c, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Added include files for global functions and variables.

  • Property mode set to 100644
File size: 3.4 KB
Line 
1/*
2 =============================================================================
3 pix2mid.c -- convert cursor position to MIDI note number and score time
4 Version 9 -- 1988-10-27 -- D.N. Lynx Crowe
5 =============================================================================
6*/
7
8#include "all.h"
9
10#define PCENTER 256 /* pixel offset of 0 time line */
11
12extern int16_t cflag; /* accidental flag */
13extern int16_t cnote; /* note value at cursor */
14extern int16_t cyval; /* cursor y value */
15extern int16_t cxval; /* cursor x value */
16
17extern int32_t ctime; /* time at cursor */
18
19/*
20
21*/
22
23int16_t mpixtab[52][4] = { /* pixel to MIDI note for the white keys */
24
25/* [0] = center pixel, [1] = MIDI note, [2] = sharp tag, [3] = flat tag */
26
27 { 1, 108, 0, 0}, /* 8C 00 -- 0 */
28
29
30 { 5, 107, 0, 1}, /* 7B 00 -- 1 */
31 { 9, 105, 1, 1}, /* 7A 00 -- 2 */
32 { 13, 103, 1, 1}, /* 7G 00 -- 3 */
33 { 17, 101, 1, 0}, /* 7F 00 -- 4 */
34
35 { 21, 100, 0, 1}, /* 7E 00 -- 5 */
36 { 25, 98, 1, 1}, /* 7D 00 -- 6 */
37 { 29, 96, 1, 0}, /* 7C 00 -- 7 */
38
39
40 { 33, 95, 0, 1}, /* 6B 00 -- 8 */
41 { 37, 93, 1, 1}, /* 6A 00 -- 9 */
42 { 41, 91, 1, 1}, /* 6G 00 -- 10 */
43 { 45, 89, 1, 0}, /* 6F 00 -- 11 */
44
45 { 49, 88, 0, 1}, /* 6E 00 -- 12 */
46 { 53, 86, 1, 1}, /* 6D 00 -- 13 */
47 { 57, 84, 1, 0}, /* 6C 00 -- 14 */
48
49
50 { 61, 83, 0, 1}, /* 5B 00 -- 15 */
51 { 65, 81, 1, 1}, /* 5A 00 -- 16 */
52 { 69, 79, 1, 1}, /* 5G 00 -- 17 */
53 { 73, 77, 1, 0}, /* 5F 00 -- 18 */
54
55 { 77, 76, 0, 1}, /* 5E 00 -- 19 */
56 { 81, 74, 1, 1}, /* 5D 00 -- 20 */
57 { 85, 72, 1, 0}, /* 5C 00 -- 21 */
58
59 { 89, 71, 0, 1}, /* 4B 00 -- 22 */
60 { 93, 69, 1, 1}, /* 4A 00 -- 23 */
61 { 97, 67, 1, 1}, /* 4G 00 -- 24 */
62 {101, 65, 1, 0}, /* 4F 00 -- 25 */
63
64 {105, 64, 0, 1}, /* 4E 00 -- 26 */
65 {109, 62, 1, 1}, /* 4D 00 -- 27 */
66 {113, 60, 1, 0}, /* 4C 00 -- 28 -- Middle C */
67
68/*
69
70*/
71
72 {117, 59, 0, 1}, /* 3B 00 -- 29 */
73 {121, 57, 1, 1}, /* 3A 00 -- 30 */
74 {125, 55, 1, 1}, /* 3G 00 -- 31 */
75 {129, 53, 1, 0}, /* 3F 00 -- 32 */
76
77 {133, 52, 0, 1}, /* 3E 00 -- 33 */
78 {137, 50, 1, 1}, /* 3D 00 -- 34 */
79 {141, 48, 1, 0}, /* 3C 00 -- 35 */
80
81
82 {145, 47, 0, 1}, /* 2B 00 -- 36 */
83 {149, 45, 1, 1}, /* 2A 00 -- 37 */
84 {153, 43, 1, 1}, /* 2G 00 -- 38 */
85 {157, 41, 1, 0}, /* 2F 00 -- 39 */
86
87 {161, 40, 0, 1}, /* 2E 00 -- 40 */
88 {165, 38, 1, 1}, /* 2D 00 -- 41 */
89 {169, 36, 1, 0}, /* 2C 00 -- 42 */
90
91
92 {173, 35, 0, 1}, /* 1B 00 -- 43 */
93 {177, 33, 1, 1}, /* 1A 00 -- 44 */
94 {181, 31, 1, 1}, /* 1G 00 -- 45 */
95 {185, 29, 1, 0}, /* 1F 00 -- 46 */
96
97 {189, 28, 0, 1}, /* 1E 00 -- 47 */
98 {193, 26, 1, 1}, /* 1D 00 -- 48 */
99 {197, 24, 1, 0}, /* 1C 00 -- 49 */
100
101
102 {201, 23, 0, 1}, /* 0B 00 -- 50 */
103 {205, 21, 1, 0} /* 0A 00 -- 51 */
104};
105
106/*
107
108*/
109
110/*
111 =============================================================================
112 pix2mid() -- convert (px, py) to MIDI note and score time
113 =============================================================================
114*/
115
116int16_t pix2mid(void)
117{
118 register int16_t i, cy, mpc;
119 register int32_t ct;
120
121 cnote = -1;
122 ctime = -1L;
123 cflag = -1;
124 mpc = ac_code EQ N_SHARP ? 2 : 3;
125
126 ct = t_cur + ((int32_t)cxval - (int32_t)PCENTER);
127
128 if (ct < 0L)
129 return(FAILURE);
130
131 ctime = ct;
132 cy = cyval - 14;
133
134 for (i = 0; i < 52; i++) {
135
136 if ((cy GE mpixtab[i][0]) AND
137 (cy LE mpixtab[i][0] + 2)) {
138
139 cnote = mpixtab[i][1];
140 cflag = mpixtab[i][mpc];
141 break;
142 }
143 }
144
145 return((cnote EQ -1L) ? FAILURE : SUCCESS);
146}
147
Note: See TracBrowser for help on using the repository browser.