Sound and Music Computing Conference

Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

Proceedings of the 14th Sound and Music Computing Conference, June 5-8, Espoo, Finland

pch2csd: an application for converting Nord Modular G2 patches


into Csound code

Gleb Rogozinsky Eugene Cherny


The Bonch-Bruevich Mihail Chesnokov Åbo Akademi University, Turku, Finland
Saint-Petersburg State JSC SEC “Nuclear Physics Research” ITMO University,
University of Telecommunications, St. Peterburg, Russia St. Peterburg, Russia
St. Petersburg, Russia [email protected] [email protected]
[email protected]

ABSTRACT in Csound, a well-known sound and music computing sys-


tem. Csound is one of the oldest computer music systems,
The paper presents the pch2csd project, focused on con- it carries the sounds (and patches) from the past, which
verting patches of popular Clavia Nord Modular G2 syn- were originally compiled on mainframe computers back in
thesizer into code of Csound language. Now discontinued, the days, but have been continually re-compiled through-
Nord Modular G2 left a lot of interesting patches for sound out the intervening years. Even now Csound can compile
synthesis and algorithmic composition. To give this her- many sources written for the older versions of the lan-
itage a new life, we created our project with the hope for guage in the 80s. But despite it’s heritage, at the present
being able to simulate the original sound and behavior of time Csound is being actively developed, and currently,
Nord Modular. the Csound code can interoperate with almost any pro-
gramming language, providing robust, high performance
1. INTRODUCTION and cross-platform solution for sound computing in real-
time applications. Csound had been ported to iOS, An-
Clavia Nord Modular was one of most remarkable hard-
droid and Raspberry Pi, there are Csound-based DAWs,
ware synthesizers of the late 90s. It inspired a whole new
tools to transform orchestra files to VST/VSTi plugins, a
generation of modular synthesizer fans by combining the
library for the Unity3D game engine [1], Jupyter notebook
immediacy of dedicated hardware with the power and flex-
bindings and many more 1 .
ibility of computer-based programming. The suite of com-
The fist report on the pch2csd project was made at the
ponents comprising the NM project included an extensive
Third International Csound Conference (St. Petersburg,
list of modules (from oscillators to effects), an attractive
Russia 2015) [2]. We presented the main concept of the
software graphical interface and on the hardware side, key-
project, the brief description of the code and a very sim-
board and rack options. This synthesizer has been used ex-
ple “proof of a concept” working example. Since then, a
tensively by many artists such as Astral Projection, Autechre,
number of improvements has been made, including new
The Chemical Brothers, Somatic Responses, Junkie XL,
modules, mapping tables, and other code generation im-
Mouse on Mars, Nine Inch Nails and Covenant among oth-
provements.
ers.
This paper provides the report on current project status,
What really makes Nord Modular unique and sustains its
as well as the engine implementation details.
relevance is the active community, which created a rich
The paper is organized as follows. Section 2 lists some
archive of patches. Alongside their inherent use to mu-
other works on simulating music hardware in Csound. Sec-
sicians, these patches can also incorporate a valuable edu-
tion 3 provides the overview of Nord Modular G2 and it’s
cational aspect, inspiring people to develop their own cre-
patch format. Section 4 describes the implementation of
ative signal processing and sequencing skills.
the sound engine in Csound language, including the trans-
Unfortunately, Clavia ceased the Nord Modular produc-
formation from the NMG2 patch format. Section 5 dis-
tion in 2009, and at present time it could be hard to buy
cusses several patch conversion examples. Section 6 de-
the synth from the second-hand market to explore the vast
scribes the limitations of the project. In the section 7 we
collection of creative patches that were made by the com-
conclude the paper and provide some directions for future
munity since the late 90s.
developments.
To facilitate the liberation of the NM patches from the
closed source software and provide it with a continuing
existence, we started a project called pch2csd in 2015 to 2. RELATED WORK
(re)implement the Clavia Nord Modular G2 sound engine Csound already has its own history of hardware emula-
tion. There are several opcodes which emulate Moog fil-
c 2017 et al. This is an open-access article distributed under the
Copyright: ⃝ ters and also the mini-Moog synthesiser. The DirectHam-
terms of the Creative Commons Attribution 3.0 Unported License, which permits
1 A (not extensive) list of tools and instruments built on top of Csound
unrestricted use, distribution, and reproduction in any medium, provided the origi-
can be found at the community websie, URL: http://csound.
nal author and source are credited. github.io/create.html

SMC2017-415
Proceedings of the 14th Sound and Music Computing Conference, June 5-8, Espoo, Finland

mond synthesiser written by Josep Comajuncosas emulates


Hammond with the Leslie effect [3]. The Csound Book
gives a simulation of the famous Roland TB303 [4]. An-
other example of TB303 was given by Iain McCurdy, who
also wrote a code for emulation of Korg Mini Pops 7 and
Roland TR-808 drum modules [5]. Csound had been used
for emulating Yamaha DX7 [6]. Several experiments were Figure 1. An example of the input-to-input connection:
carried to emulate the sound of Access Virus and Roland the output of the oscillator is connected to the both (left
JP80xx, for example [7]. Eugenio Giordani and Alessan- and right) inputs of the stereo output module.
dro Petrolati created a commercial app which emulated
VCS3 by EMS [8].
digitizer, frequency and pitch shifters, scratcher, reverb and
The DX7 implementation stands apart from other exam-
a compressor. Delay units are included in the separate De-
ples, as it translates the synth’s presets into a dynamically
lay section. There are 10 different units, from static one-
generated Csound code. Essentially the same approach is
tap delay to complex stereo delays. The Switch section
used for this project, but the code generation is more com-
contains various switches and dmux/mux units. The Logic
plex in our simulation.
includes common binary logic units, i.e. typical logical
functions, flip-flops, pulse dividers and counters. There
3. NORD MODULAR OVERVIEW are also ADC and DAC converters. All waveshaping units
Nord Modular and Nord Modular G2 were a unique hybrid are placed in the Shaper part. There are 7 of them, i.e. clip,
software-hardware systems. They ran on several DSPs, but drive, saturation, rectifier and wrapper units. The Level
were controlled through a GUI using the software editor section relates to any modulation types. It also contains
which is still available from the Clavia website 2 . Once the envelope follower unit. The Random section includes
(re)programmed, device can be run in a stand-alone hardware- 6 various random generators. The Sequencer part includes
only mode. For programming, the device should be con- 5 sequencers of different kinds. All of sequencers can be
nected to PC or Mac via USB cable. One can also find a linked in chain. There also MIDI, In/Out and Note sec-
freely downloadable copy of demo editor. tions. The detailed info on each unit can be found in offi-
The Nord Modular system works only in real-time so cial NM2 manual.
the number of modules and voices are the most impor- A sound programmer connects the modules using virtual
tant parameter. Different modules cause different load. cables. The main cables types are: red (audio signals @ 96
To optimize the performance several modules were used kHz), blue (control signals @ 24 kHz), yellow (logic sig-
with almost identical functions, but with different oper- nals in the form of pulses @ 24 kHz), orange (logic signals
ability. For example, OscA oscillator allows changing its @ 96 kHz).
wavetype on a flight, comparing to OscD, which uses the In addition to these cable types there are also two user-
same wavetypes but demands the patch to be recompiled. defined types: green and violet. Actually the user can color
There are two main parts of the patch: voice and fx. The any cable in any color using the context menu of an editor,
voice part is a subject of polyphony, comparing to fx part i.e. change color of red cable into yellow. Also there are
which receives the mix of all voices. Obviously, the greater ’dead’ cables of grey color. They appear if you break the
the number of voices played simultaneously, the lesser num- valid link of modules.
ber of modules can be used before overrun. Another peculiar feature of Nord Modular system is an
ability to connect one input to another. So if you want
Nord Modular G2 uses fixed sampling rate of 96 kHz for
to connect the output of a generator to both inputs of the
audio signals and 24 kHz for control rate signals (i.e. mod-
Out module, it is allowed to connect one input to another
ulation). The overall number of modules is around 200, in-
(Fig. 1), and the output from the generator will be passed
cluding numerous sound generators, envelopes, lfo, filters,
to both inputs.
random generators, mixers, delay units, switches, MIDI
units, logics, waveshapers, sequencers and FXs. Also, several modules can change their type, i.e. from red
to blue, depending on input connections, i.e. connecting a
There are 17 sound generators, most of which provide
red cable to any input of mixer turns it from default blue
classical waveshapes with modulations. There are also noise
type to a red one.
generators, simple physical models and a built-in DX7 model.
Moreover, there are some hidden modules which were not
The Filter part consists of 14 filters, i.e. various LP, HP, BP
included in the release version of the editor, i.e. Resonator,
and BR models, and also comb filter, formant filter and a
Driver, AR-Env, PolarFade. Most of them are not working,
16-band vocoder. The section also includes three different
but some can be useful 3 .
equalizers of up to 3 bands. The Envelope section provides
9 envelope generators from simple Decay-only generator
3.1 Patch format
to multistage one. There are 16 units in a Mixer sections
starting from one channel volume controller to 8 channel Nord Modular G2 stores patches in a binary file with the
mixing unit. The FX part includes chorus, phaser, flanger, extension pch2. The format is proprietary and has not been
2 Nord Modular G2 official page, URL: http:// 3 A discussion about hidden modules in Nord Modular G2:
www.nordkeyboards.com/downloads/legacy/ http://www.electro-music.com/forum/viewtopic.
nord-modular-g2 php?t=54650

SMC2017-416
Proceedings of the 14th Sound and Music Computing Conference, June 5-8, Espoo, Finland

officially published by Clavia, so we rely on a commu-


nity effort to decode the format done by Michael Dew-
berry in the 2005 [9]. According to the information he
published, the pch2 file starts with a text header terminated
by the NULL byte. It contains general information about
the patch (e.g. version, file type, etc.) in human readable
form. This text header is followed by a two-byte binary
header, representing the patch format version and the file
type (a patch or a performance). All other information is
stored in a series of “data objects”. A byte layout of some
objects is presented in the Appendix. For the purpose of
this project we do not use such objects as Knob Assign-
ments, MIDI Controller Assignments, Module Names and
Textpad. Hence we read only those, representing the ac-
tual sound modules and their connections. For this, we
first read Patch Description object (Table 3), then read two Figure 2. An amplitude spectra demonstrates the aliasing
Module List objects (Table 4) for VA and FX 4 , then skip in the NMG2 sawtooth oscillator waveform. A solid verti-
the Mystery Object 5 (Table 1), then read two Cable List cal line to the right is the Nyquist frequency.
objects for VA and FX (Table 2), and finally we read two
Module Parameters objects for VA and FX (Table 5).
Filter analysis has been performed through connecting
4. IMPLEMENTATION white noise generator to the corresponding filter of Clavia
and comparing the output amplitude response with the fil-
4.1 Overview ter models created by the authors.
The project is implemented as a C program. The program
extracts module and connection lists, as well as parameter 4.3 Csound implementation details
values from the pch2 file, and then composes a csd file To simulate the sound and behavior of modules of Clavia
from Csound code templates and mapping tables stored Nord Modular G2 we used Csound [10]. It is an open-
as plain-text files. We currently have 100 modules imple- source language for computer music and digital audio pro-
mented as Csound user-defined opcodes (including filters, cessing developed in MIT 1986 by Barry Vercoe and re-
mixers, etc.) and 35 hand-crafted mapping tables to map cently developed by a global community of enthusiasts.
values from the linear MIDI range to non-linear parameter Csound can be run on all popular platforms including An-
range. Storing the data as text allows anyone to change the droid and iOS. Through Csound API it can be embedded
behavior of the modules without touching the C code. in lots of applications, which makes it a nice candidate for
Nord simulation together with a great amount of included
4.2 Modeling NMG2 modules opcodes 6 .
We began with the challenges related to oscillators mod- Csound document typically consists of two sections. The
eling. Any sound synthesis algorithm starts from some Instruments section contains all definitions of instruments
generator, thus the first and the most important part of the to be used, and the Score part contains timeline events and
patch to be simulated is an oscillator section. The Nord function tables. Each of Nord modules is modeled as an
oscillators produce aliased waveforms at 96 kHz. The Fig- User-Defined Opcode (aka UDO). At the conversion from
ure 2 shows the amplitude spectra of Clavia’s sawtooth. pch2 to Csound the UDOs, which relate to patch’s modules
The audio was recorded at 96 kHz/24 bit on the Focusrite are read from txt files and included to the Csound docu-
Saffire PRO 40 audio interface. The solid line at the right ment. Csound compiler reads code lines from top to the
border of plot is a Nyquist frequency (48 kHz). The spectra bottom, which is completely different approach to graph-
was calculated using 2048 points FFT with Hann window. ical system of patching, like MAX, Pd or Nord. Fortu-
We can clearly see the aliasing part of the spectra, mir- nately, Csound has a special patching system called zak-
rored from the Nyquist frequency. This feature of Nord space. It provides a given number of audio rate (a-rate) and
Modular distinguishes it from the popular family of so- control rate (k-rate) buses to intercommunicate between
called analog-modeling synthesizers, which typically pro- different instruments and UDOs. There are separate com-
duce alias-free waveforms, and makes it possible to simu- mutation matrix for audio rate signals and another one for
late the corresponding waves by simple generation of ideal control rate signals. They are completely independent from
piece-wise functions. Numerous records of the oscillator each other, comparing to Nord patching system, where the
waveforms also prove it well. cables are sequentially numbered. A separate part of our
code solves that disparity by renumbering the cables af-
4 Note, that objects like this appear twice in the patch file, in the Voice
ter reading their numbers from the patch file. Comparing
Area and in the FX Area.
5 We do not currently know the purpose of this object, but in our to typical behavior of Csound opcodes, where each opcode
project we are only interested in a list of modules and their connections
to reconstruct patches in Csound, and we have not yet found any cases 6 All up-to-date Csound features can be found on the community web-
where we would need to inspect this object more closely. site: http://csound.github.io

SMC2017-417
Proceedings of the 14th Sound and Music Computing Conference, June 5-8, Espoo, Finland

typically accepts an input data as some parameters and out- 1-pole LP filter and an Output module. We give this ex-
puts the result, our zak-based UDOs do not have any out- tremely primitive patch not for the purposes of timbre dis-
puts. cussion but rather to present a clear example of how our
In more practical view, the typical Csound opcode/UDO converter works.
is applied like this: The converter default output file is test.csd in the program
directory. Comments are given after semicolons.
aOut1 SomeOpcode aIn1, aP1, kP2 [, ...] The algorithm detects three different types of modules
and take their UDO definitions from the library.
where aIn1 is an input of audio type, aP1 is an a-rate
parameter, kP2 is a k-rate parameter, and aOut1 is an a- sr = 96000 ; audio sampling rate
rate output. ksmps = 16 ; times k-rate lower than a-rate
In our system we have nchnls = 2 ; number of output channels
0dbfs = 1.0 ; relative amplitude level
SomeOpcode aP1, kP2 [, ...], kIn1, kOut1
zakinit 4, 3 ; Init zak-space
where aP1 is an a-rate parameter, kP2 is a k-rate parame- opcode Noise, 0, kkk ;White Noise generator
ter, kIn1 is a number of some k- or a-rate bus to read input kColor, kMute, kOut xin
data from, and kOut1 is a number of some k- or a-rate bus if kMute!=0 goto Mute ;mutes sound if Mute is On
to send data to. aout rand 0.5, 0.1 ; seed value 0.1
After parameter field our UDOs have IO field, in which aout tone aout, kColor ; Csound simple LP filter
zaw aout, kOut
the numbers of buses in zak space are listed. Using de- Mute:
scribed approach we are free to list the opcodes in any or- endop
der, just like Nord Modular user can add the modules in
arbitrary order. So the first indexed module can be easily opcode FltLP, 0, kikkkkk ;One-pole LP filter
the last one in the audio chain. ; Keyboard Tracking has not been implemented yet
kKBT, iOrder, kMod, kCF, kIn, kModIn, kOut xin
Another important aspect to be described here is map- ain zar kIn
ping. Nord modules have several different controllers of a kmod zkr kModIn
lot of ranges, i.e. audio frequency range, amplitude range, aout tonex ain, kCF+kmod*kMod, iOrder
normalized values in the range from 0 to 1, delay time zaw aout, kOut
ranges, envelope stage durations, etc. The real values of endop
the controllers can be seen only when using editor. The opcode Out2, 0, kkkkk; Output module
patch file stores 7 bit MIDI values without any reference ; Only stereo output has been implemented
to appropriate range. It made us to manually fill the table kTarget, kMute, kPad, kL, kR xin
with data types, ranges and values. Special mapping files if kMute!=0 goto Mute:
of pch2csd project contain numbers of tables to be used for aL zar kL
aR zar kR
each parameter of each module. outs aL*kPad, aR*kPad
I.e Module #112 (LevAdd module) table contains follow- Mute:
ing lines: endop

s 2 LVLpos LVLlev opcode Constant, 0, kk ;Constant value


d BUT002 ; Only bipolar mode now
kVal xin
It means that the mapping table for the first parameter of zaw kVal, kOut ; CHANGE
endop
LevAdd (value to add to input) is dependent on a second (2)
parameter, which is the two-state button (table BUT002). instr 1; VA section
The button switches LevAdd from unipolar to bipolar range Noise 10000,0,2
of values. The mapping tables are placed in a separate sub- FltLP 0,1,0.5,1050,2,2,3
directory of a project. Constant 24,2
Out2 0,0,1,3,0
Also during the development we had to solve a polymor- endin
phism issue. Several Clavia modules are polymorphous.
Unfortunately there is no direct indication of current mod- instr 2; FX section
ule type (a-rate or k-rate). It can be discovered only through endin
analyzing cable connections. So our algorithm checks the
; Here goes the score part of Csound.
module type, and its input connections. In case of non- ; We just let it run for a long time...
default type of the input, the corresponding module twin is i1 0 [60*60*24*7]
used instead of the default one. i2 0 [60*60*24*7]

We use two special buses per each matrix. Buses #0


5. EXAMPLES
contain silence. They connected to inputs without cables.
Here we demonstrate the conversion of a real Clavia’s patch Buses #1 are trash collectors. If output is not connected, it
(see picture ...). It consists of a noise generator, a simple goes there.

SMC2017-418
Proceedings of the 14th Sound and Music Computing Conference, June 5-8, Espoo, Finland

7. CONCLUSIONS AND FUTURE WORK


At its present state, the pch2csd project is ready for further
development by international computer music enthusiasts.
The core has been test to work on Windows and OSX sys-
tems. The user is able to open Clavia’s patch file format
pch2. The conversion log shows status of all dependen-
cies, i.e. Csound UDOs, mapping tables, etc. It allows user
to update the dependencies and also create his or her own
versions of UDOs and mappings if needed. The module
Figure 3. Sawtooth waveform’s amplitude modulated with completion status is far from uniform. Most of straight-
an envelope. Nord Modular G2 is on the left, our imple- forward modules are finished, i.e. mixing operations or
mentation is on the right. switching. Random section seems most difficult, because
of its ambiguous behavior. The same should be reported
on FX section, although the actual quality of the reverb or
chorus modules does not correlate with algorithmic patch
behavior, which makes it not so critical.
Another important goal we started working on recently
is to make the project hackable, so users would be able to
easily modify module implementations to contribute to the
project or to modify sound for their own tastes. The plain
text modules and mapping tables were made as well as for
that purpose, but the user experience here is still poor. As
a first step to mitigate this we plan to develop a simple
Figure 4. White noise filtered with LFO modulated low- Electron-based UI 7 with an embedded text editor in the
pass filter. The file lengths are equal to 3 seconds. Nord near future.
Modular G2 (left) compared with our implementation Our next to-do after providing a completely working so-
(right). The Clavia’s LFO is not exactly a sine. lution is an integration with some existing Clavia patch edi-
tor. It will actually establish the new Clavia-based software
modular system running on a Csound core. Also, the native
6. EVALUATION Csound developments, i.e. Cabbage Studio 8 (a graphical
UI for Csound build by Rory Walsh) seem very promising
in the context of further integration.
The practical study of the software shows several issues.
Beginning from the oscillator block of the synthesis pro- Current tool sources can be found on the GitHub 9 : https:
cess, we discovered that Clavia oscillators run at arbitrary //github.com/gleb812/pch2csd.
initial phase. So at each run or patch re-compilation the
composite waveform of the sum of oscillators slightly dif- Acknowledgments
fers. Also the exponential form of Clavia envelope gen- This work has been partially financially supported by the
erators seems to be sharper than real exp function 3. We Government of the Russian Federation, Grant #074-U01.
also discovered that typical sine LFOs actually produce a
bit asymmetric function. The figure 4 shows the difference
between spectrograms of signals at the output of modu- 8. REFERENCES
lated LPF. [1] R. Walsh, “Csound and unity3d,” in Proceed-
During developing we estimated several main limitations. ings of the Third International Csound Confer-
First is related to the modules with non-determinate be- ence. St. Petersburg, Russia: The Bonch-Bruevich
haviour, i.e. all modules from the Random group. Each of St. Petersburg State University of Telecommunica-
those modules generates a random sequence, in which the tions, Mar. 2016, pp. 141–155. [Online]. Available:
current value depends on previous one. Such a behavior is https://doi.org/10.5281/zenodo.50369
not typical for Csound random generators. Another limi-
tation relates to the patch presets. Each of Nord Modular [2] G. G. Rogozinsky and M. Chesnokov, “Clavia nord
patch contains 8 presets called Variations. User can select modular g2 patch converter project,” in Proceed-
the desired preset from the interface. This feature has not ings of the Third International Csound Confer-
been implemented yet. Despite listed limitations, we hope ence. St. Petersburg, Russia: The Bonch-Bruevich
to completely overcome them in our future work. St. Petersburg State University of Telecommunica-
Certainly, the in-depth evaluation of such project should 7 URL: https://electron.atom.io/
include much more aspects than listed. Meanwhile, at the 8 URL: https://csound.github.io/frontends.html#
present stage of developing we are concentrated mostly on cabbage-and-cabbage-studio
9 The code, as well as sound examples, mentioned in the previous sec-
creating simulation which should be close to the original tion, are also preserved at Zenodo, URL: https://zenodo.org/
sound of NM2. record/581204

SMC2017-419
Proceedings of the 14th Sound and Music Computing Conference, June 5-8, Espoo, Finland

tions, Mar. 2016, pp. 83–89. [Online]. Available:


https://doi.org/10.5281/zenodo.50365
[3] Josep M Comajuncosas, “DirectHammond v1/v2
- csound instruments page.” [Online]. Avail-
able: http://www.csounds.com/jmc/Instruments/ Field name Value / Comment Bits
instruments.htm#hammond Header byte 0x52 8
Location 0 / 1: FX / Voice 2
[4] R. C. Boulanger, The Csound book: perspectives in Unknown - 14
software synthesis, sound design, signal processing, Cable count Nr. of cables in the area 8
and programming. MIT press, 2000. Then, for each cable according to cable count:
Color 0-6 3
[5] Iain McCurdy, “Csound realtime examples.” [Online]. Module from 8
Available: http://iainmccurdy.org/csound.html Jack from - 6
[6] “Csound DX7 patch translator.” [Online]. Available: Type 0: in-to-in, 1: out-to-in 1
http://www.parnasse.com/dx72csnd.shtml Module to - 8
Jack to - 6
[7] G. G. Rogozinsky, E. Cherny, and I. Osipenko, End of iteration
“Making mainstream synthesizers with csound,” in
Proceedings of the Third International Csound Con- Table 2. Cable list binary encoding
ference, G. G. Rogozinsky, Ed. The Bonch-Bruevich
St. Petersburg State University of Telecommuni-
cations, 2016, pp. 132–140. [Online]. Available:
http://dx.doi.org/10.5281/zenodo.50364
[8] E. Giordani and A. Petrolati, “Csound synthesis
approach for the ivcs3 ios app,” in Proceed-
ings of the Third International Csound Confer-
ence. St. Petersburg, Russia: The Bonch-Bruevich
St. Petersburg State University of Telecommunica-
Field name Value / Comment Bits
tions, Mar. 2016, pp. 116–131. [Online]. Available:
Header byte 0x21 8
https://doi.org/10.5281/zenodo.50358
Length - 16
[9] M. Dewberry, “Nord Modular G2 Patch Format,” Unknown - 12
https://web.archive.org/web/20160407003110/http: Voice Count - 5
//www.dewb.org/g2/pch2format.html/, 2005, [Online; Height of FX/VA bar - 14
accessed 03-Mar-2017]. Unknown - 3
Red cable visibility 0: off, 1: on 1
[10] V. Lazzarini, S. Yi, J. ffitch, J. Heintz, . Brandt- Blue cable visibility 0: off, 1: on 1
segg, and I. McCurdy, Csound - A Sound and Yellow cable visibility 0: off, 1: on 1
Music Computing System. Springer International Orange cable visibility 0: off, 1: on 1
Publishing, 2016, DOI: 10.1007/978-3-319-45370-5. Green cable visibility 0: off, 1: on 1
[Online]. Available: http://link.springer.com/10.1007/ Purple cable visibility 0: off, 1: on 1
978-3-319-45370-5 White cable visibility 0: off, 1: on 1
Mono/Poly - 2
Appendix: NMG2 binary patch format Active variation 0-7 8
0: No Cat, 1: Acoustic,
2: Sequencer, 3: Bass,
Field name Value / Comment Bits 4: Classic, 5: Drum,
Header byte 0x69 8 6: Fantasy, 7: FX,
Length 0x4a 16 Category 8
8: Lead, 9: Organ,
Unknown 10: Pad, 11: Piano,
12: Synth, 13: Audio In,
Table 1. Mystery object
14: User 1, 15: User 2
Padding -

Table 3. Patch description binary encoding

SMC2017-420
Proceedings of the 14th Sound and Music Computing Conference, June 5-8, Espoo, Finland

Field name Value / Comment Bits


Header byte 0x4a 8
0: FX Area,
Location 2
1: Voice Area
Module Count Nr. of modules in the area 8
Then, for each module according to module count:
Module type 8
Module index Module ID 8
Horiz. position - 7
Vert. position - 7
Color - 8
Appendix - 4
If Appendix != 0:
Unknown - 2
Hidden parameter - 4
End of iteration
Padding -

Table 4. Module list binary encoding

Field name Value / Comment Bits


Header byte 0x52 8
Length 16
Location 0 / 1: FX / Voice 2
Module count - 8
For each module:
Module index - 8
Param. count Nr. of parameters 8
For each parameter:
Variation 0 8
Value 7-bit MIDI value 7
Variation 1 8
...
Variation 8 8
Value 7-bit MIDI value 7
End of both iterations
Padding 8 8

Table 5. Module parameters binary encoding

SMC2017-421

You might also like