Time to revisit the NSX-39, otherwise known as the “Singing Synthesizer Keyboard Pocket Miku“. I was rereading the “Pocket Miku Perfect Guide” book, and looking at the section on controlling the kit using MIDI commands from a sequencer app (I think the author was using Garage Band). Since the only app I have is Sonar X1 LE, which didn’t play well together with the NSX-39, I figured that I might as well repurpose my Kaossilator Pro Java arpeggiator as an NSX configurator/controller.
The overall concept works, but I’ve been struggling to get all the commands discussed in the documentation to work. One of the problems is that, although all the docs I can find are in Japanese, there aren’t that many to begin with. The starting doc is the Perfect Guide itself, which reprints several of the tables from the Yamaha MIDI parameters sheet, and offers a couple of example instructions. The next doc is the Yamaha MIDI parameter sheet, which lacks examples. I was able to track down the Gakken NSX-39 MIDI Guide, which does discuss programming the NSX in more detail, but the examples are pretty much the same as the ones in the Perfect Guide. The NSX-39 MIDI Guide has links to additional docs stored somewhere on Google, but access to those is controlled by someone, and they’re not giving me permissions to the files.
Having said that, I’m still very impressed with the Pocket Miku. The heart of the kit is the Yamaha NSX-1 chip. It supports eVocaloid, General MIDI, and one or two sound banks (the spec. sheet says that there’s the general purpose MIDI sound bank, RAS (real acoustic system) and a drum kit. RAS seems to be disabled, and the drum kit bank is the same as the percussive instruments you get when selecting channel 9 in the general MIDI sound bank).
With MIDI, you specify 1 of 16 channels to send messages to. Since, the NSX-39 uses USB, in Java you open up a receiver to the kit and send messages that way. Meaning that all 16 channels for that receiver go straight to the NSX-39 – you can play 16 instruments simultaneously on just the one Miku. Channel 0 is eVocaloid (in the Yamaha documentation, channel numbering starts at 1, not 0), and channel 9 is the drum kit. All other channels give you the general MIDI instruments.
The Perfect Guide and the Yamaha spec. break up MIDI commands into 4 major groups: regular MIDI messages (change volume, change program, note ON/OFF, etc.); control change messages (used to access reverb, modulation and brightness); NRPN messages (Non-Realtime Parameters, accessed via control change messages, that let you change the low frequency filter and vibrato) and SysEx (System Exclusive messages, that supposedly let you control pretty much any aspect of the NSX-39). For the most part, the only features that I’ve been able to get working consistently are: NoteON/OFF, pan, reverb, modulation, vibrato, LFO filter frequency, the drum kit, changing the eVocaloid vocabulary and reassigning the NSX-39 key sounds (kind of like having a “keypressed beep”).
A lot of the other stuff, like chorus, variation, and 90% of the SysEx features, are specific to the eVocaloid voice, and I can’t tell why Chorus and Variation aren’t doing anything. I really wish I had more examples to work with, and more complete documentation.
But, what I do have working makes for a pretty good DAW box as it stands. I can switch between the general MIDI instruments, drum kit and eVocaloid, and I can set up a sequencer to run all 16 channels at once. Which, given that the NSX-39 is only $50 USD, including tax, makes it a good deal for the price. Running the sounds through the modulator, adding reverb and then filtering the results is fun.
I’ve even added the Java code for implementing the Roland A-300 keyboard support, and assigned the A-300 sliders to the various NSX-39 settings. There are one or two minor bugs that I want to work out, plus I’ll eventually get around to implementing channel after touch. Then, I need to learn how to play a keyboard…
(Sidenote: When I was experimenting with the A300 support code, I wanted to add an external file for holding the control names as strings in a separate class, so that the main file wouldn’t be so cluttered. I’m using Netbeans as the programming environment, and it got really slow on me. Thinking that the new class file wasn’t working right, I tried deleting it and by mistake ended up irretrievably deleting my project source file. That sucked. I didn’t have backups, so I had to retype the entire NSX-39 controller project all over again from scratch. That took me the better part of a day and a half, but I fixed some mistakes along the way, and added a few new features that I wanted to add anyway. Note to self: Make more backups.)