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

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

Zero redundant declarations.

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