Everything about the Nord Wave Synthesizer

Listing the contents of a Nord Wave Backup

Postby mjbrands » 28 Dec 2011, 13:43

Hello fellow forum dwellers,

I've been looking at the contents of the Nord Wave Backup (nwb) and Nord Wave Program (nwp) files that are generated by the Nord Sound Manager. The backup file is simply an (uncompressed) zip file of the Samp Lib and Program partitions, with an additional file storing the settings of the Wave. Nothing exciting there.

Figuring out how to extract specific types of data from the nwp files is the time consuming part. For now I've figured out how the settings regarding the oscillators in slot A and B are stored. I now have a simple utility that prints information about the oscillators in a program. Example output is shown below:

Code: Select all
iMac:~/Desktop/Wave data/expanded$ ../show-nwp Program/Bank\ 8/Eindhoven\ \ \ \ \ GE.nwp
Name: "Eindhoven     GE"
Bank 8, Program 34
Category: Fantasy
Slot A:
  OSC1 waveform: Miscellaneous (Sine Synched)
  OSC2 waveform: Sample Instrument (sample 27)
Slot B:
  OSC1 waveform: Wavetable (saw-spectra1)
  OSC2 waveform: FM-Synthesis (2-OP 8:1)

This probably isn't the most convenient format for end users 8-)

So, I'd be interested in some feedback on what would be a convenient format for you. Some kind of spreadsheet? Maybe some HTML document with clickable links?

Apart from presenting the data I'm currently extracting in a more user-friendly format, I'm also interested in the following:
- for each sample, list which programs make use of it
- specifically highlight unused samples
- generate textual versions of programs, that could be used to implement (some of) these programs on an NS2 (this would be a lot of additional work)
- figure out what Wave programs can be implemented on the NS2 and have the program provide feedback on what can and cannot be done on the NS2 (there may be ways to approximate specific Wave settings on the NS2)

It would also be interesting to make a controller plugin (VST/AU) for the Wave, like Johannes has done with the NS (or was that NS2?). It would be even cooler if that plugin could load sounds from nwb or nwp files and send those via MIDI to the Wave (excluding samples, those would already need to be present).

This little endeavor has already taken up more hours than intended and I may just release it as it is once the thing generates some usable output. It is currently written in C; a rewrite to Java might make sense.

Btw. my reason for doing this is that I've been thinking about replacing my Roland Fantom G6 and my Wave with an NS2. However, if I were to do that, I would first want to know what I would be loosing in the process. The differences between the synth section on the NS2 and the functionality of the Wave seem bigger than they appeared at first glance.
Last edited by mjbrands on 31 Jul 2012, 12:28, edited 2 times in total.
mjbrands
 

Listing the contents of a Nord Wave Backup


Sponsor
 

Re: Listing the contents of a Nord Wave Backup

Postby mjbrands » 02 Jan 2012, 03:15

I added the effects section. Tempo is a bit weird, as it looks like it is stored as a 16-bit value, even though you can only set it in 128 steps (7-bit) via MIDI - the display seems to match this. However, using the tempo knob (and maybe also the tap tempo button, I haven't tried that) does allow you to set intermediate steps even though the display will not show them. It looks like you can even go slower than 2.26 sec. Maybe tempo can be controlled via 14-bit MIDI messages, I haven't tried that either (the MIDI implementation chart in the manual does not show it as an option).

Code: Select all
Name: "Forst MW      SJ"
Bank 1, Program 113
Category: Vocal
Active slots: A
Slot A:
  OSC1 waveform: Sawtooth
  OSC2 waveform: Sample Instrument (sample 51)
Slot B:
  OSC1 waveform: Sawtooth
  OSC2 waveform: Sample Instrument (sample 51)
Effects:
  Delay: on
    Feedback: 1 (stereo)
    Amount: 4.3
    Tempo: 310ms
  Tube amp: off
  Reverb: on
    Reverb type: Hall Soft
    Amount: 5.2
Last edited by mjbrands on 31 Jul 2012, 12:28, edited 2 times in total.
mjbrands
 

Re: Listing the contents of a Nord Wave Backup

Postby pablomastodon » 11 Jan 2012, 06:36

Well, I think this is pretty exciting stuff, but then again perhaps that's more of a commentary on me and the kinds of things which excite me...

My preference would be for database use, CSV, but that's just me. I've spent a little bit of time poking around in single program dumps from various Nords trying to suss out some info, but it's proven to be more difficult for me than other instruments whose sysex dumps I've dissected. And I have NO programming skills, just a desire to figure stuff out. Hats off to you, my friend. Please don't abandon the project before it's completed...

Just getting to print bank lists would be HUGE, and obviously the cross-compare of what samples are used where would be huger still. I've manually entered that stuff into a database, program by program, slot by slot, and was surprised to learn that there was one factory-loaded sample which was never actually written into any program for the Wave... I'll let you see if your program's results agree with what I found. ;-)

Pablo Mastodon
Nord Tech Support USA/Canada
Last edited by pablomastodon on 31 Jul 2012, 12:28, edited 2 times in total.
bun fyah weh fyah fi bun
User avatar
pablomastodon
Patch Creator
 
Posts: 4217
Joined: 30 Apr 2010, 20:45
Location: pablo.mastodon@americanmusicandsound.com
Country: Jamaica
Has thanked: 1834 times
Been thanked: 1812 times
Your Nord Gear #1: Nord Stage 3
Your Nord Gear #2: Nord Wave

Re: Listing the contents of a Nord Wave Backup

Postby mjbrands » 15 Jan 2012, 19:07

pablomastodon wrote:I'll let you see if your program's results agree with what I found. ;-)

Oh, a challenge... I think it's sample 17 (Solo Cello M400_Mellotron_v4).
Last edited by mjbrands on 31 Jul 2012, 12:28, edited 2 times in total.
mjbrands
 

Re: Listing the contents of a Nord Wave Backup

Postby mjbrands » 16 Jan 2012, 00:04

As I have no idea if I'll do more work on this, I thought I'd just upload this small utility as-is. It is command line only and versions for OS X, Linux and Windows have been included. Run it without arguments for a small info message. It hasn't been extensively tested on Linux and Windows, but seems to work fine. It is not unlikely all three versions will have a problem with file or directory names containing multi-byte (UTF-8 or otherwise) characters.

On Windows you may need to download additional DLL files. If so, download and install the following: http://www.microsoft.com/download/en/details.aspx?id=5555

If you want to use this utility on NWB files you will first need to extract them (they are zip files). Renaming them to .zip instead of .nwb might help you there. The NWB file will, amongst other stuff, contain the NWP and NSMP files which you can run the utility on.

As I haven't decided yet what I'll do with the source, I'm only releasing binaries. The code itself isn't that complex, but mapping the ranges on controllers (from MIDI to Nord Wave specific values) is rather mind-numbing and easily takes 10-15 minutes -per- knob.

If you have any issues with this utility or if it is useful to you, please post in this thread.

:thanks:

Btw. Clavia, if this little utility displeases you, your support department should have my email address (it is in the utility too). It only reads program and sample files and no software or firmware was reverse-engineered, so as far as I know I am not doing anything illegal.
Attachments
show-nwp-0.1.zip
show-nwp utility for OS X (Intel only), Linux and Windows
(19.89 KiB) Downloaded 245 times
Last edited by mjbrands on 31 Jul 2012, 12:28, edited 2 times in total.
mjbrands
 

Re: Listing the contents of a Nord Wave Backup

Postby mjbrands » 16 Jan 2012, 00:25

Some example output of version 0.1.
Code: Select all
iMac:~/Desktop/Wave data$ ./show-nwp 'expanded/Program/Bank 1/NYC Piano-Pad CM      .nwp'
Name: "NYC Piano-Pad CM      "
Bank 1, Program 71
Category: Piano
Active slots: A+B, A has focus
Slot A:
  OSC1 waveform: FM-Synthesis (2-OP 9:1)
    Sync mode: off
    Shape1: 2.9
  OSC2 waveform: Sample Instrument (sample 35)
    Skip sample attack: no
    Shape2/Dec: 10.0
    Fine tune: -8 cent
  Mono mode: Poly
  Vibrato: off
Slot B:
  OSC1 waveform: Pulse
    Sync mode: off
    Shape1: 4.6
  OSC2 waveform: Pulse
    Shape2/Dec: 8.3
    Fine tune: -6 cent
  Mono mode: Poly
  Vibrato: AfterTouch
Effects:
  Delay: off
  Tube amp: off
  Reverb: on
    Reverb type: Stage
    Amount: 3.9
iMac:~/Desktop/Wave data$ ./show-nwp 'expanded/Samp Lib/Bank 1/ElGrand CP80__CLv4.nsmp'
Name: "ElGrand CP80__CLv4"
Bank 1, Program 35
Last edited by mjbrands on 31 Jul 2012, 12:28, edited 2 times in total.
mjbrands
 

Re: Listing the contents of a Nord Wave Backup

Postby Frantz » 16 Jan 2012, 11:18

Hello mjbrands,

mjbrands wrote:Figuring out how to extract specific types of data from the nwp files is the time consuming part.

mjbrands wrote:As I haven't decided yet what I'll do with the source, I'm only releasing binaries. The code itself isn't that complex, but mapping the ranges on controllers (from MIDI to Nord Wave specific values) is rather mind-numbing and easily takes 10-15 minutes -per- knob.

If this program was "modular" ... :
Once a parameter is located and its encoding determined, it can be put in a parameter table.
Then your programm could take two command line parameters : the "target file" to work on (mandatory) , and the "parameters file" telling what to extract (optional).

Sharing the method "howto locate a parameter & determine its encoding" could allow us to build "parameters files" for each file type (nsmp, ns2p, nwp ...).

mjbrands wrote:I'm also interested in the following:
- for each sample, list which programs make use of it
- specifically highlight unused samples


I tried to work on the "ns2p" and "nsmp" files & shared my work here.

mjbrands wrote:It is currently written in C; a rewrite to Java might make sense.

I currently wrote mine in Java, and thought a rewrite in C could make sense :lol:


:wave:
Last edited by Frantz on 31 Jul 2012, 12:28, edited 2 times in total.
http://displaychord.arfntz.fr
A mobile app to display chord names while you play, using midi / bluetooth connection.
User avatar
Frantz
Former Team Member
 
Posts: 2235
Joined: 30 Apr 2011, 13:12
Location: ♫♪ earth ♪♫
Country: France
Has thanked: 473 times
Been thanked: 526 times
Your Nord Gear #1: Nord Stage 2 EX

Re: Listing the contents of a Nord Wave Backup

Postby mjbrands » 16 Jan 2012, 13:25

audioird wrote:Sharing the method "howto locate a parameter & determine its encoding" could allow us to build "parameters files" for each file type (nsmp, ns2p, nwp ...).

I know ;) If I wanted to do something 'commercial' with this (such as develop some user-friendly utility and sell it for like $10) and published the 'parameter data', someone else would undoubtedly come up with something free. Anyway, I haven't decided what I want to do yet. If I decide not to do any further work on this, I'll probably just publish the current source code.

mjbrands wrote:I'm also interested in the following:
- for each sample, list which programs make use of it
- specifically highlight unused samples

I didn't need this myself, as I used the find command to list the contents of all NWP files and then used grep to extract the sample data (on UNIX).

audioird wrote:
mjbrands wrote:It is currently written in C; a rewrite to Java might make sense.

I currently wrote mine in Java, and thought a rewrite in C could make sense :lol:

Well, writing a portable UI is easier in Java than in C/C++. However, for a VST/AU/RTAS plugin something like JUCE (as used by Ctrlr for example) would be more appropriate, which would mean developing in C++. Of course, developing (and supporting!) a plugin like that (from scratch) easily takes upwards of 300 man-hours. (I don't work in software development, so it takes me a bit more time than someone who does.)

Here's a snippet from the current code.
Code: Select all
                int tempoval = getBits(data, 0x145, 3, 4, 16);
                int tempo = tempos[tempoval >> 9];
                // The tempo is stored as a 16-bit value and the entire 16-bit range is used to store
                // it. Using MIDI only the 7 MSB bits can be modified. However, using the the knob on
                // the synth intermediate values can be dialed in, but it is doubtful it can make much
                // use of the 512 (9-bit) steps between 'MIDI' values. Additionally, the display shows
                // the tempo based on the 7 MSB bits. The question is: do the 9 LSB bits actually do
                // something? Is 0x2750 faster than 0x2700 or does it result in the same tempo? Also,
                // Are values higher than the highest MIDI value (127, which is shown as 64ms) faster
                // than 64ms or not?!
                if (tempo >= 1000)
                {
                        printf("    Tempo: %.2f s\n", tempo / 1000.0f);
                } else {
                        printf("    Tempo: %d ms\n", tempo);
                }

In this case tempos is an array of tempo's (one value per MIDI controller value), 2260 for 2.26 sec and 63 for 63 ms. getBits is used to extract the relevant info from the NWP file - in this case, extract 3 bytes starting at location 0x145, shift them 4 bits to the right and only return the lower 16 bits. If I changed the code a bit, I could even deduce the 3-bytes value from the fact that I want 16 bits (and they need to be shifted 4 bits).

My point: this could all be really easily be placed in a set of tables, creating the parameter files you're referring to.
Last edited by mjbrands on 31 Jul 2012, 12:28, edited 2 times in total.
mjbrands
 

Re: Listing the contents of a Nord Wave Backup

Postby Frantz » 16 Jan 2012, 13:50

"getBits" is "modular" ;)

I found it hard to figure out how parameters are encoded, my only method was to compare hexa views of 2 program files, before and after modification (min & max), and make assumptions about used bits.

It's nice to see what you managed to do :thumbup:
Last edited by Frantz on 31 Jul 2012, 12:28, edited 2 times in total.
http://displaychord.arfntz.fr
A mobile app to display chord names while you play, using midi / bluetooth connection.
User avatar
Frantz
Former Team Member
 
Posts: 2235
Joined: 30 Apr 2011, 13:12
Location: ♫♪ earth ♪♫
Country: France
Has thanked: 473 times
Been thanked: 526 times
Your Nord Gear #1: Nord Stage 2 EX

Re: Listing the contents of a Nord Wave Backup

Postby mjbrands » 16 Jan 2012, 16:18

audioird wrote:my only method was to compare hexa views of 2 program files, before and after modification (min & max), and make assumptions about used bits.

That's the way I did it too. For some values I noticed I got different output if I set the parameter via MIDI (a Novation Remote SL mkII in my case) and via the knobs on the synth. For example, this was the case for tempo, which had 16-bit of precision via the front panel and 7-bit via MIDI.
Last edited by mjbrands on 31 Jul 2012, 12:28, edited 2 times in total.
mjbrands
 

Next

Return to Nord Wave Forum



Who is online

Users browsing this forum: No registered users and 1 guest