forked from dsacre/mididings
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NEWS
285 lines (232 loc) · 11.7 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
2012-04-19
* Added the ability to automatically connect to other JACK or ALSA
clients, using regex-based port name matching.
* Most functions and units now check the types and values of their
arguments, allowing for much more comprehensible error messages.
* New dependency: The Python decorator module is now required to run
mididings.
* Much cleaner and more efficient conversion between Python and C++
sequence and mapping types, implemented entirely in C++.
* SysEx data is now passed to Python functions as a mutable bytearray
object (or as list in Python 2.5).
* Many SysEx-related bugfixes: SysEx() and SysExEvent() now work
correctly when data_offset is 1, SysExFilter(manufacturer) works
again, and Print() no longer raises an exception when it encounters
a SysEx event.
* AutoRestart() is now a little smarter when deciding which files to
watch for changes.
* Fixed the process_file() function (which apparently no one used in
years...)
* Replaced a gcc-ism: mididings can now be built with clang++ (version
3.0 or later).
2012-03-12
* Added methods apply(), invert() and negate() to filter objects, and
made AndSelector and OrSelector public classes. Anything that can be
done with funny overloaded operators is now also possible with regular
functions and objects.
* Added option -n to livedings, based on a patch by Aurélien.
* Added SysExEvent() function in mididings.event module.
* Added Restart() and Quit() in mididings.extra module.
* Fixed PitchbendEvent(), thanks to Димон.
* Fixed selector operators & and | for more than two filters.
* Print correct note names when using Python 3.
* Fixed operator != for comparing MidiEvent objects.
* Fixed compilation on OS X, automatically disable ALSA backend on
non-Linux platforms. Thanks to Sílvio Almeida for lots of valuable
feedback.
* Extended and reorganized unit tests.
* Some documentation cleanup.
2010-11-19
* Improved VoiceFilter() to make it much more usable for filtering
voices other than the highest and lowest one, and added VoiceSplit()
as a shortcut to route multiple voices through different patches.
* Added engine.time() as a clock source that, unlike Python's
time.time(), is guaranteed to be monotonic.
* OSCInterface() and livedings no longer require port numbers to be
specified, and simply default to 56418 and 56419.
* Changed variable/parameter names referring to CC numbers from "param"
to "ctrl", and removed the "get_" prefix from some function names in
the engine module. In most places the old names still work to remain
backward compatible.
* Fixed build issues with certain Python and/or Boost versions.
* Lots of cleanup and some minor fixes.
2010-06-02
* Fixed the utterly broken CtrlRange() unit.
* Added new PitchbendRange() unit.
* Fixed PedalToNoteoff() when using sostenuto (releasing the pedal caused
note-offs to be sent for keys which were still pressed).
* Fixed a small error in the livedings/OSCInterface documentation (thanks
to Christopher Arndt).
2010-05-16
* Added CtrlCurve() unit and a shortcut version of Velocity() to specify
multiply and offset at the same time.
* Added generators for pitch bend and aftertouch events.
* Fixed MidiEvent constructor to take data_offset setting into account.
2010-05-08
* Include 64 bit library directories in the search for the correct boost
library names (bug reported by Niels Mayer).
* Added new examples skeleton.py and router.py.
* Documented the mididings.event and mididings.engine submodules.
2010-04-13
* Added support for Python 3.x (requires a recent Boost.Python built for
Python 3, and most likely some manual fiddling with the setup.py
script).
* Fixed some compatibility issues with Python 2.5 (thanks to Moritz
Firsching for the bug report).
* Added support for SysEx messages larger than ALSA's buffer size.
* Fixed a race condition that could lead to a crash when terminating
mididings while an event is being processed.
* Fixed the JACK backend so multiple input ports can be used.
2010-03-18
* Added VoiceFilter() to filter individual voices from a chord.
* The Output() unit can now send arbitrary control changes, and a new
class OutputTemplate was added to simplify creating partially
parametrized outputs.
* Added lots of new examples to the documentation.
* Several minor fixes and cleanup.
2010-03-07
* Added livedings as a graphical frontend to mididings that allows
monitoring and triggering scene changes.
* Added SceneGroup() to make multiple subscenes accessible under a single
program number.
* Support floating split points using the new FloatingKeySplit() unit.
* Added Panic() to send all-notes-off messages on all channels.
* Several new OSC messages supported by mididings.extra.OSCInterface().
* New module mididings.extra.gm containing constants for program and
controller numbers defined in the General MIDI standard.
* Enable realtime scheduling for MIDI processing with the 'jack' backend.
2010-02-02
* Major documentation update, now including a tutorial and explaining
some of the relevant Python basics.
* Renamed a few units and parameters to keep names somewhat consistent.
* Removed the types parameters from Fork() and Print(), the same result
can be achieved using a selector.
* The upper or lower limit for note ranges can now be omitted.
* All splits now support an "else" rule. A patch with a key of None is
used when none of the other filters match.
* Added operator | (OR) for selectors.
* Added LatchNotes() to hold notes until the key is pressed again.
* Significant performance improvement when calling overloaded functions.
2010-01-12
* Included a command line program "mididings" that allows running
simple patches without writing full-fledged Python scripts.
For example:
$ mididings "Transpose(12) >> Velocity(fixed=64)"
* A first attempt to support system exclusive, system realtime and
system common messages. New units include SysEx(), SysExFilter() and
SysExSplit(). Thanks to Christopher Arndt for some very helpful
suggestions.
* Added support for polyphonic aftertouch, untested for obvious
reasons :(
* Implemented a hook system to easily extend some of mididings'
functionality.
* Added hook objects MemorizeScene() (scene persistence between
restarts), OSCInterface() (scene switching via OSC), and AutoRestart()
(automatic restart when the script changes. Best. Feature. Ever.)
* Unified run() and run_scenes(), as well as Print() and PrintString().
The different functionality now depends only on keyword arguments.
* Renamed Call() to Process(). Call() now offers the functionality of
both CallAsync() and CallThread().
* Renamed GenerateEvent() to Generator() and InitAction() to Init().
* Changed semantics of CtrlFilter(), CtrlValueFilter(), ProgFilter() to
block events of other types (again...).
* Added parameter "curve" to Velocity(), applying an exponential curve.
* New unit VelocityLimit().
* New operator & to use multiple filters as a selector with operator %.
2009-11-10
* New and clearer nomenclature to avoid different meanings of "patch":
A "patch" is now always just a group of units, whereas you switch
between "scenes" (which can in turn consist of a patch and optionally
an init-patch). Function names changed accordingly, but for now the
previous names still exist for backward compatibility.
* Favor keyword arguments over different units with similar
functionality, e.g. VelocityFixed(x) -> Velocity(fixed=x), etc.
* Replaced VelocityGradient() with the new VelocitySlope(), which
supports defining the velocity for an arbitrary number of notes.
* PedalToNoteoff() can now act as either a sustain or a sostenuto pedal.
2009-10-03
* Made all key or value ranges half-open (excluding the upper limit) for
consistency with Python. This affects KeyFilter(), VelocityFilter(),
CtrlValueFilter() and the related *Split units.
* New compiler options to significantly reduce the size of the resulting
_mididings.so binary.
* Several bugfixes.
2009-01-14
* Output() now supports sending volume changes (CC 7).
2009-01-13
* New units in mididings.extra: MakeMonophonic() and LimitPolyphony().
* Added event-type agnostic inversion operator - for filters.
* VelocityFilter() can now be used with only an upper or lower limit when
the other parameter is zero.
2008-11-23
* Added support for reading and writing standard MIDI files, based on
libsmf (disabled by default).
* Allow patch numbers greater than 128.
* Output() now supports sending bank select messages.
2008-11-22
* Terminate threads properly on exit.
* Aftertouch now actually works.
* Added 3 argument version of CtrlValueSplit().
2008-11-09
* Lots of changes and cleanup of the JACK backend, should now work
properly with JACK 2.
* Added support for channel aftertouch.
* Implemented new operator % for filters.
* Added parameters to run_patches() to specify the first patch to be
selected, and a callback function to be called on every patch switch.
* New function: mididings.extra.run_patches_memorize().
* New units: NoteOn(), NoteOff(), CtrlSplit(), CtrlValueSplit(),
ProgSplit().
2008-09-13
* Added System() to run shell commands, as well as SendOSC() and
SendDBUS() to send OSC or DBUS messages.
* Do a lot more validity checking of function arguments.
2008-09-09
* Fixed a bug that under certain circumstances caused events to not be
processed properly.
2008-09-05
* Implemented experimental support for JACK MIDI.
* Added mididings.extra module for units with more advanced/specific
functionality than what's included in the main mididings module. This
includes, among other things, a diatonic harmonizer.
* Updated documentation, completely rewritten example scripts.
2008-08-28
* Allow Call() to return more than one MIDI event at the same time.
2008-08-17
* Complete rewrite of some crucial parts of the code. Lots of cleanup and
restructuring. This should not affect existing scripts, except for the
changes noted below.
* Filters no longer remove events of different types. For example, what
used to be CtrlFilter(num) should now be written as
Filter(CTRL) >> CtrlFilter(num).
* When units connected in parallel result in identical copies of the same
event, duplicates will be removed.
For example, [ Pass(), Transpose(12) ] no longer outputs two events
when receiving program or control changes.
* Require Boost ≥ 1.34.1.
* Many minor fixes.
2008-07-21
* Added CallAsync() and CallThread(), to start Python functions without
delaying event processing.
* Made Print() prettier, more informative, and faster.
* Added CtrlMap() and PrintString().
* ALSA event queue is now cleared before starting MIDI processing, to
ignore events received during start_delay.
2008-07-13
* Added start_delay parameter to config().
* Added switch_patch() function.
* Init events for the first patch loaded at startup are now sent
properly.
* Don't allow note on events with velocity < 1. This has the (side-)
effect that Velocity() and VelocityGradient() will never completely
remove any events. Use an additional VelocityFilter() if that's what
you want.
2008-04-16
* Moved port parameters from run() to config(), allow ports to be
specified by name rather than number.
* Changed parameter order of CtrlRange(), making input range [0;127] the
default.
2008-04-06
* Added new Sanitize() unit to make sure MIDI events are valid. The same
is done automatically before sending events to the output ports.
* Added some more documentation.