1 /* Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009 Dean Beeler, Jerome Fisher
2  * Copyright (C) 2011-2021 Dean Beeler, Jerome Fisher, Sergey V. Mikayev
3  *
4  *  This program is free software: you can redistribute it and/or modify
5  *  it under the terms of the GNU Lesser General Public License as published by
6  *  the Free Software Foundation, either version 2.1 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU Lesser General Public License for more details.
13  *
14  *  You should have received a copy of the GNU Lesser General Public License
15  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef MT32EMU_INTERNALS_H
19 #define MT32EMU_INTERNALS_H
20 
21 #include "Types.h"
22 
23 // Debugging
24 
25 // 0: Standard debug output is not stamped with the rendered sample count
26 // 1: Standard debug output is stamped with the rendered sample count
27 // NOTE: The "samplestamp" corresponds to the end of the last completed rendering run.
28 //       This is important to bear in mind for debug output that occurs during a run.
29 #ifndef MT32EMU_DEBUG_SAMPLESTAMPS
30 #define MT32EMU_DEBUG_SAMPLESTAMPS 0
31 #endif
32 
33 // 0: No debug output for initialisation progress
34 // 1: Debug output for initialisation progress
35 #ifndef MT32EMU_MONITOR_INIT
36 #define MT32EMU_MONITOR_INIT 0
37 #endif
38 
39 // 0: No debug output for MIDI events
40 // 1: Debug output for weird MIDI events
41 #ifndef MT32EMU_MONITOR_MIDI
42 #define MT32EMU_MONITOR_MIDI 0
43 #endif
44 
45 // 0: No debug output for note on/off
46 // 1: Basic debug output for note on/off
47 // 2: Comprehensive debug output for note on/off
48 #ifndef MT32EMU_MONITOR_INSTRUMENTS
49 #define MT32EMU_MONITOR_INSTRUMENTS 0
50 #endif
51 
52 // 0: No debug output for partial allocations
53 // 1: Show partial stats when an allocation fails
54 // 2: Show partial stats with every new poly
55 // 3: Show individual partial allocations/deactivations
56 #ifndef MT32EMU_MONITOR_PARTIALS
57 #define MT32EMU_MONITOR_PARTIALS 0
58 #endif
59 
60 // 0: No debug output for sysex
61 // 1: Basic debug output for sysex
62 #ifndef MT32EMU_MONITOR_SYSEX
63 #define MT32EMU_MONITOR_SYSEX 0
64 #endif
65 
66 // 0: No debug output for sysex writes to the timbre areas
67 // 1: Debug output with the name and location of newly-written timbres
68 // 2: Complete dump of timbre parameters for newly-written timbres
69 #ifndef MT32EMU_MONITOR_TIMBRES
70 #define MT32EMU_MONITOR_TIMBRES 0
71 #endif
72 
73 // 0: No TVA/TVF-related debug output.
74 // 1: Shows changes to TVA/TVF target, increment and phase.
75 #ifndef MT32EMU_MONITOR_TVA
76 #define MT32EMU_MONITOR_TVA 0
77 #endif
78 #ifndef MT32EMU_MONITOR_TVF
79 #define MT32EMU_MONITOR_TVF 0
80 #endif
81 
82 // Configuration
83 
84 // 0: Maximum speed at the cost of a bit lower emulation accuracy.
85 // 1: Maximum achievable emulation accuracy.
86 #ifndef MT32EMU_BOSS_REVERB_PRECISE_MODE
87 #define MT32EMU_BOSS_REVERB_PRECISE_MODE 0
88 #endif
89 
90 namespace MT32Emu {
91 
92 typedef Bit16s IntSample;
93 typedef Bit32s IntSampleEx;
94 typedef float FloatSample;
95 
96 enum PolyState {
97 	POLY_Playing,
98 	POLY_Held, // This marks keys that have been released on the keyboard, but are being held by the pedal
99 	POLY_Releasing,
100 	POLY_Inactive
101 };
102 
103 enum ReverbMode {
104 	REVERB_MODE_ROOM,
105 	REVERB_MODE_HALL,
106 	REVERB_MODE_PLATE,
107 	REVERB_MODE_TAP_DELAY
108 };
109 
110 } // namespace MT32Emu
111 
112 #endif // #ifndef MT32EMU_INTERNALS_H
113