Yamaha PSS-A50 MIDI notes

To learn more about the Yamaha PSS-A50‘s MIDI implementation, I monitored its MIDI output stream using MIDI Ox and Sonar. Here are my notes. They are quite terse!

After inital start-up, the A50 sends MIDI timing clock and active sensing messages.

The default transmit data and channel settings are:

    Assignment              Ch# 
---------------------- ---
Live keyboard: 1 [If OFF, no data is transmitted]
Live arpeggio sequence: 2
Recorded keyboard: 3
Recorded arpeggio seq: 4

Master volume is local. Pressing the Master Volume buttons does not send volume change messages (neither channel volume or MIDI master volume).

Changing Phrase Volume, however, sends channel volume on channel 3 and 4. Legends above keys show setting-related function: what setting, increment and decrement. This is very handy and avoids manual diving. Phrase Volume is changed using the assigned function keys.

Pressing a front panel voice button sends messages on both channel 1 and 2:

    Bank MSB (CC#0) 
Bank LSB (CC#32)
Program Change (PC)
Channel Volume (CC#7)
Reverb Depth (CC#91)
Chorus Depth (CC#93)

Not all voices have chorus applied and Chorus Depth is not sent for voices without chorus.

The keyboard sends note ON and note OFF messages on channel 1. The mini-keyboard is touch sensitive. it’s difficult to send the full 1-127 velocity range with the default touch response level (level 2).

Pressing the Sustain button has the following behavior:

  • Sends new release time when sustain button is pressed.
  • Release time messages are sent on both channel 1 and channel 2.
  • Turning sustain off resets the release time.

Pressing Portamento (SHIFT+SUSTAIN), has the following behavior:

  • Sends portamento time and portamento ON/OFF when SHIFT+PORTAMENTO buttons are pressed.
  • Portamento time and ON/OFF are sent on both channel 1 and 2.
  • Turning portamento off, sends new portamento status on channels 1 and 2.

Pressing ARP ON doesn’t send MIDI messages! Pressing ARP OFF sends messages on channel 2:

    Bank MSB (CC#0) 
Bank LSB (CC#32)
Program Change (PC)
Portamento
Release Time (channel 1 and 2)

It’s like the A50 software assumes that the arp voice is set-up and ready to go when the arpeggiator is turned ON. Then, the software resets certain parameters when the arpeggiator is turned OFF. The arpeggiator sends note ON/OFF on channel 2 (as determined by the MIDI channel assignments).

Pressing PLAY sends the following messages on channel 1 and 2:

    Start (FA) 
All Sound OFF (CC#120)

Pressing STOP sends the following messages:

    Stop (FC) 
GM Reset (System exclusive)
Messages to reset voice settings for channel 3 and 4

You can expect to see the following System Exclusive messages after song playback:

   F0 7E 7F 09 01 F7           GM Reset 
F0 43 10 4C 08 02 0C 40 F7 MULTI-PART Velocity Sense Depth (channel 3)
F0 43 10 4C 08 02 0D 40 F7 MULTI-PART Velocity Sense Offset (channel 3)
F0 43 10 4C 08 03 0C 40 F7 MULTI-PART Velocity Sense Depth (channel 4)
F0 43 10 4C 08 03 0D 40 F7 MULTI-PART Velocity Sense Offset (channel 4)

I’ve seen these XG MULTI-PART messages on other entry-level arrangers supporting the XG Lite conventions.

For Motion Effect A01 Filter 1, Pressing the Motion Effect button sends
these messages on channel 1 and 2:

    Pitch Bend Sensitivity (RPN 0,0)
Harmonic Content (CC#71)
Pitch Bend
Expression (CC#11)
Modulation (CC#1)
Brightness (CC#74)

Harmonic Content (filter resonance is increased to 100). The Brightness (cutoff) messages sweept the filter. Brightness is slowly modulated, i.e., it repeatedly slowly decreases and then increases.

Releasing the Motion Effect button sends messages on channel 1 and 2:

    Pitch bend 
Harmonic Content (CC#71)
Brightness (CC#74)
Modulation (CC#1)
Expression (CC#11)
Pitch Bend Sensitivity (RPN 0,0)

These messages reset the respective parameters to a default value.

For Motion Effect B01 Pitch Whole-Note Up, pressing the Motion Effect button sends these messages on channel 1 and 2:

    Pitch Bend Sensitivity 
Pitch Bend (center)
Expression
Modulation
Pitch Bend (multiple messages)

The Pitch Bend messages sweept the pitch up then down. Releasing the button resets Modulation, etc. to default values.

Pitch bend sensitivity is sent as an RPN (Registered Parameter Number) message:

    RPN (CC 0x64, CC 0x65) 
0,0 Pitch Bend Sensitivity

The Motion Effect feature is similar to something I built into my two-button Arduino-based MIDI controller. It’s a way to add articulation to live playing. I always wanted a way to play perfect pitch bends. 🙂

I was able to save my recorded MIDI data to Sonar. The A50 insists on sending MIDI clock, START and STOP, so I configured Sonar to receive and respond to external clock. The recorded MIDI data is sent on channels 3 and 4. Thanks to Sonar’s channel selection feature (via event filtering), I could separate the channel 3 and 4 data into two tracks. Another possible solution is to write the data as a MIDI Type 0 SMF and then read the SMF into Sonar. Sonar should separate the channel data into different tracks.

Copyright © 2021 Paul J. Drongowski

Pocket Miku software resources

This page is a collection of resources for using and programming Gakken Pocket Miku, also known as the “NSX-39”. It starts out with a cheat sheet for using Pocket Miku, moves on to Web-based applications, and finishes with customization and MIDI System Exclusive (SysEx) messages.

Be sure to read the Pocket Miku user’s guide before starting. The material below is not a hand-holding tutorial!

Pocket Miku cheat sheet

Stylus area

The lower part of the stylus area is a chromatic keyboard which plays notes. The upper part of the stylus area is a ribbon controller. Touch the stylus to either area to make music.

This is a classic resistive keyboard/ribbon controller. Stylus actions are converted to MIDI note ON, MIDI note OFF and pitch bend messages. The MIDI note is fixed: F#. MIDI pitch bend messages determine the actual final pitch which is heard.

Operating modes

Pocket Miku has two major operating modes:

  1. Normal mode
  2. NSX-1 compatibility mode

Pocket Miku boots into normal mode. In this mode, the NSX-39 recognizes and responds to stylus actions, button presses, etc.

Pocket Miku has three submodes in the normal operating mode:

  1. Do-Re-Mi mode with scales (default)
  2. A-I-U-E-O mode with vowels (SHIFT + vibrato button)
  3. Preset lyric mode with 5 lyrics (SHIFT + one of the AEIOU buttons)

The default phrases in preset lyric mode are:

    SHIFT + A    Konnichiwa Arigato (Hello, thank you)
    SHIFT + I    Butterfly song (choucho)
    SHIFT + U    Cherry blossom song (Sakura)
    SHIFT + E    Auld Lang Syne (Hotaru no hikari)
    SHIFT + O    Irohanihoheto

The magic key combination U + VOLUME UP + VOLUME DOWN switches between normal mode and NSX-1 compatibility mode. Pocket Miku plays a high hat hit when changing modes (not a “beep”). The Yamaha Web applications use NSX-1 compatibility mode. NSX-1 compatibility mode is also good for DAW-based sequencing since it decreases latency by disabling the interpretation of MIDI System Exclusive messages that are meaningful only to the NSX-39 microcontroller.

Buttons

Pocket Miku responds to single button presses and combinations:

    A-I-U-E-O    Selects on of the vowel phonemes
    VIBRATO      Adds vibrato to the sound
    SHIFT        Selects additional functions and modes
    VOLUME UP    Increase volume
    VOLUME DOWN  Decrease volume

    SHIFT + A, SHIFT+I, ...   Select A-I-U-E-O vowel mode
    SHIFT + VIBRATO           Select Do-Re-Mi mode
    SHIFT + VOLUME UP         Octave up
    SHIFT + VOLUME DOWN       Octave down
    VIBRATO + VOLUME UP       Pitch bend up (up one semi-tone)
    VIBRATO + VOLUME DOWN     Pitch bend down (down one semi-tone)

    A + VOLUME UP + VOLUME DOWN        Panic reset
    U + VOLUME UP + VOLUME DOWN        Select NSX-1 mode
    O + VOLUME UP + VOLUME DOWN        Retune Pocket Miku
    SHIFT + VOLUME UP + VOLUME DOWN    Initialize (factory reset)

Web-based applications

Gakken NSX-39 applications

Gakken provide three applications specifically for the NSX-39 (in normal mode). The applications are at http://otonanokagaku.net/nsx39/app.html.

Google Chrome version 33 or later is required because the Gakken applications use the Web MIDI API.

Connect NSX-39 to your computer with a USB cable and set the power switch of the NSX-39 to “USB”. If you do not connect the NSX-39 before you start Google Chrome, the NSX-39 will not be recognized by the application.

The Web MIDI API must be enabled in Google Chrome. After starting Chrome, enter:

    chrome://flags/#enable-web-midi

in the address bar as shown on the first “Browser Settings” screen. Then, enable the API in the “Enable Web MIDI API” column. Please click the appropriate button (e.g., “Use Windows Runtime MIDI API”) and restart Google Chrome.

Launch the desired application from here:

Once you agree to the End User License Agreement (EULA), you can connect to the NSX-39 (Pocket Miku’s model number).

If this procedure does not work, please restart the computer and proceed from the first step.

Application: Input lyrics

You can edit the lyrics by pressing the “E” button in the lyric input slot. Only Hiragana can be input. After inputting lyrics, pressing “Enter” on the keyboard and the app sends lyric data to Pocket Miku.

After sending lyrics data, when playing Pocket Miku, Pocket Miku sings according to the sent lyrics.

Lyrics can input 64 letters per slot. There are 15 slots and they are selected with [A] - [O], [SHIFT] + [A] - [O], [VIBRATO] + [A] - [O].

Press [SHIFT] + [VIBRATO] during editing to switch to Do-Re-Mi mode.

Application: Play in realtime

This is an application where you can input and play lyrics in realtime. If you hover over the tile where the letters are written on the screen, you can pronounce that character.

Tiles can be selected from 50, mentai (voiced, semi-voiced), small letters (1) (2), jiyuu (free arrangement) mode.

Jiyuu is a mode that allows you to place characters freely using the “frog” menu:

  • Tsukasa … You can add up to 50 letters, panels.
  • Move … Move the panel to the desired position by dragging.
  • Ken … You can delete the panel by clicking it.
  • Reading … Read the saved character panel setting file.
  • Upload … Save the character panel setting as an external file.

Google Translate didn’t do so well with these instructions! Sorry.

Change configuration

Config is an abbreviation for configuration and means “setting.” With this application, you can change the settings of Pocket Miku and add new functions. The following four operations are supported:

  • Startup sound for function addition pack
  • SHIFT button Character heading / character advance
  • Effect ON / OFF
  • Harmony

Please press the “Install” button and read the displayed message and if there is no problem press the “Send” button. When all the functions are installed, a voice saying “Owarai” appears, and writing the settings is completed.

If you want to restore the settings back, please click the “Uninstall” button, read the explanation carefully, and press the “Send” button if there is no problem.

Yamaha NSX-1 applications

Yamaha provide open source sample apps (Japanese language) at http://yamaha-webmusic.github.io/. The Yamaha applications use the Web MIDI API. See the directions above in order to set up Google Chrome.

In order to use these applications, you must change Pocket Miku to NSX-1 compatibility mode by pushing U + VOLUME UP + VOLUME DOWN simultaneously.

Aides Technology application

Aides Technology is the developer of the Switch Science NSX-1 Arduino shield.

They have one very handy Web application when MIDI sequencing. The application translates romaji (kana text) lyrics to an NSX-1 System Exclusive (SysEx) message. You can copy the HEX SysEx message from the page and paste it into your DAW. On Windows, the application will put the SysEx message on the Windows clipboard automatically.

You may also need this ASCII to Hex text converter when debugging your SysEx messages.

I’m a long time SysEx HEX warrior. Trust me, this is the way to go!

Customization and MIDI System Exclusive messages

Customization is the most difficult topic due to its complexity and the general lack of English language resources. Customization is performed through MIDI System Exclusive messages instead of simple textual commands. This approach enables use of the Web MIDI API, but makes it darned difficult to compose messages by hand.

I’m told that the Gakken Official Guide Book (Gakken Mook) contains a short section about customization via SysEx. However, one cannot cram a paper magazine through Google Translate. 🙂

The next best thing is the Pocket Miku Customization Guide (PDF) by Uda Denshi (polymoog). This guide and Google Translate will only take you so far.

The absolute best English language resource is the series of blogs written by CHH01:

Please note that Pocket Miku has two major subsystems: a microcontroller and the Yamaha NSX-1 integrated circuit. Each subsystem has its own SysEx messages. See the Yamaha NSX-1 MIDI implementation reference manual for information about its SysEx messages. Messages interpreted by the microcontroller are described in the Pocket Miku Customization Guide. These messages are turned OFF when Pocket Miku is in NSX-1 compatibility mode.

The NSX-39 SysEx implementation is very powerful. You can change the lyrics which are stored in flash memory (15 lyric slots), change the way the NSX-39 responds to button presses (120 command slots), read switch states, and much more. Here is a list of the main customization message types (thanks to CHH01):

F0 43 79 09 11 d0 d1 d2 d3 d4 d5 ... F7

Request Version Data          d0=0x01 d1=N/A
Version Data Reply            d0=0x11 d1=NSX-39 version data
Lyrics Entry                  d0=0x0A d1=lyrics slot number   d2=character data
Request Command Slot Details  d0=0x0B d1=command slot number
Command Slot Reply            d0=0x1B d1=command
Change Command Slot           d0=0x0C d1=command slot number  d2=command
Command Direct Entry          d0=0x0D d1=command
Lyric Number Data Request     d0=0x0E d1=N/A
Lyric Number Data Reply       d0=0x1E d1=Slot number          d2=Slot data
Lyric Details Request         d0=0x0F d1=Slot number
Lyric Details Reply           d0=0x1F d1=character count      d2=character 1, etc.
Switch State                  d0=0x20 d1=000000ih             d2=0gfedcba
NSX-39 Status                 d0=0x21 d1=Status

Good luck with your investigations and experiments!

Copyright © 2017 Paul J. Drongowski