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

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

Removed form-feed comments.

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