Roland Boutique JU-06の制御情報詳細

 JUNO-106を再現したシンセサイザーとして2015年にJU-06が本家Rolandからリリースされました*1。物理的に稼働可能な個体が減っていたり、それ故に高額で入手困難な過去の機材が再びリーズナブルな価格で再発売されるのはファンとしては嬉しいものです。私もJUNO-106の実機を持っていたので、JU-06を入手しました。
f:id:kachine:20211224013821j:plain
 実機が有りながら何故JU-06買うの?と思う方もいるかも知れませんが、15年以上前にジャンクで買ったJUNO-106は見事に音が出なかったのです!当時から有名な話ですが、既に製造されていないカスタムチップが壊れているので、修理不可能なのです*2。というわけで、実機を触ったことはありながらも出音はよく知らないという状況を解消すべくJU-06を入手したのでした。
 

雑感

  • ずらっと並んだスライダーを手で動かして音作り可能で、ハードウェアならではの良好な操作感で率直に楽しい!
  • マニュアルが不親切
    • マニュアル無しでもほとんどのパラメータの機能は普通に理解可能(というかベーシックなJUNO-106相当)
    • 問題はMIDIインプリメンテーションが手抜き過ぎで、取り得る値や値の意味が不明(シーケンサ/DAWから制御することを考えていない?)
    • USBマスストレージモードで接続した場合に取得可能なバックアップファイルのフォーマットが非公開
      • System Exclusive MessageによるBulk Dumpの代替機能ならデータフォーマットを開示すべき
    • USB-MIDI/AUDIO Interfaceについての仕様が判らない
      • Windows10ではドライバが自動インストールされる
      • (もともとサポート外ですが)Ubuntu20.04*3ALSAではAUDIOが使用不能/MIDIのみ使用可能

 

 というわけで、不親切なマニュアルの情報を補完すべく、自力で調べたJU-06の制御用情報等を以下に掲載します。

JU-06 Control change values

CC# Description Value
1 MODULATION 0-127
3 LFO RATE 0-127
5 PORTAMENTO TIME 0-127
9 LFO DELAY TIME 0-127
11 EXPRESSION PEDAL
12 DCO RANGE 0:RANGE16, 1:RANGE8, 2:RANGE4
13 DCO LFO DEPTH 0-127
14 DCO PWM LEVEL 0-127
0:DutyRatio=48:52, 64:DutyRatio=72:28, 127:DutyRatio=89:11 (approx.)
(not affect to sub osc)
15 DCO PWM SOURCE 0:MAN, 1:LFO
16 DCO PWM SW 0:OFF, 1:ON
Disable/Enable Pulse osc
17 DCO SAW SW 0:OFF 1:ON
Disable/Enable Saw osc
18 DCO SUB LEVEL 0-127
19 DCO NOISE LEVEL 0-127
20 HPF CUTOFF 0-127
21 VCF ENV POLARITY 0:Negative, 1:Positive
22 VCF ENV DEPTH 0-127
23 VCF LFO DEPTH 0-127
24 VCF KEY FOLLOW 0-127
25 VCA ENV SW 0:GATE, 1:EG
26 VCA LEVEL 0-127
27 ENV SUSTAIN 0-127
64 HOLD
65 PORTAMENTO 0:OFF, 127:ON
71 VCF RESONANCE 0-127
72 ENV RELEASE 0-127
73 ENV ATTACK 0-127
74 VCF CUTOFF 0-127
75 ENV DECAY 0-127
82 DELAY TIME 0-15 (0:OFF, Greater value makes longer delay)
83 DELAY FEEDBACK 0-15 (0:OFF, Greater value makes strong feedback)
86 ASSIGN MODE 1:Poly, 2:Solo, 3:Unison
87 BEND RANGE 0-12,24 (unit:semitone)
91 DELAY LEVEL 0-15 (0:OFF, Greater value makes loud delay)
93 CHORUS SW 0:OFF, 1:CHORUS1, 2:CHORUS2, 3:CHORUS1+CHORUS2

・CC#16は"DCO PWM SW"と書かれているがマニュアルの誤記で実際は”DCO PULSE SW”的な意味。パルス幅変調のON/OFFを切り替えるものではない。
・当然ながらCC#16とCC#17が両方OFFでCC#18とCC#19も0ならCC#26に関わらず出力音は生成されない
・逆にCC#16とCC#17の一つ以上がONか、CC#18とCC#19も以外なら、CC#26が0でも出力音が生成される
 

JU-06 Backup file format

 マニュアルには一切説明がありませんが、実体は以下のようなテキストファイルとなっています。

BQ_PTN*.PRM
内蔵ステップシーケンサのバックアップで実体はテキストファイル
⇒16STEPのSwitch、Note、Velocity、Gatetimeなどが定義されている。
JU06_PATCH*.PRM
各パッチのバックアップで実体はテキストファイル
⇒フロントパネル上のスライダーに対応したパラメータ(CCで0-127を取るパラメータ)は0-255の値で記録されている。奇数値も記録されていることからCC相当の7bit値を単に2倍したのではなく、純粋に1bit多い8bit分解能のパラメータデータが保持されている*4。スイッチ系のパラメータは恐らくCC値と同じ。

 何れも改行コードはCRLFで最終行には改行コードが付きません。ファイルを直接編集することでパターン名やパッチ名も記録可能ですが、マルチバイト文字が使用されることを想定していないと思われますのでalphanumericな文字のみにするのが無難でしょう(BOMもありません)。
 

JUNO-106実機と同一の音がするか

 何を以て同一と定義するかに依りますが、よく似た雰囲気の音が出ることは間違いありません。実際に、JUNO-106実機のプリセット音色と同じ名称のプリセット音色がJU-06には多数存在します。ですが、以下のような意味では、明確に異なります。

  • JUNO-106実機の取説にはプリセット音色のスライダーやスイッチの位置が図示されていますが、JU-06に存在する同名のプリセット音色の各パラメータの値はJUNO-106の取説に記載された状態とは大きく異なるものが多数あります。つまり、同様の音を生成するためにはJUNO-106とJU-06では異なるスライダー位置に設定する必要があるということになります。JUNO-106実機のスライダーはBカーブの可変抵抗のため、リニアに抵抗値が変化します。JU-06もスライダーの位置によってMIDI CC出力がリニアに値が変化することが確認できますので、完全に実機を再現しているのならスライダーの位置が同じ場合に同じ音になるはずですが、そうではありません。
  • JU-06はデジタル機器なので無音時にノイズが全くありません(BBD素子をシミュレーションしたコーラスエフェクトのノイズをOFFにした場合)。USB Audio機能を使って録音すると分かりますが、無音時は本当にデジタルデータとして0が出力されており、これは嬉しくもあるのですが綺麗すぎるために違和感も感じます。

 

(補足)Linuxでの見え方

$ uname -srvp
Linux 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64

$ dmesg
[********] usb 1-2: new high-speed USB device number 5 using xhci_hcd
[********] usb 1-2: New USB device found, idVendor=0582, idProduct=01b5, bcdDevice= 1.00
[********] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[********] usb 1-2: Product: Boutiq
[********] usb 1-2: Manufacturer: Roland
[********] usb 1-2: SerialNumber: BQJU************************
[********] mc: Linux media interface: v0.10
[********] usbcore: registered new interface driver snd-usb-audio
[********] usb 1-2: Unable to change format on ep #8e: already in use
[********] usb 1-2: Unable to change format on ep #8e: already in use
[********] usb 1-2: Unable to change format on ep #8e: already in use
...以下、Unable to change format on ep #8e: already in useが数十行繰り返し

$ lsusb
Bus 001 Device 005: ID 0582:01b5 Roland Corp. Boutiq

$ lsusb -vd 0582:
Bus 001 Device 005: ID 0582:01b5 Roland Corp. Boutiq
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass         0
  bDeviceProtocol       255
  bMaxPacketSize0        64
  idVendor           0x0582 Roland Corp.
  idProduct          0x01b5
  bcdDevice            1.00
  iManufacturer           1
  iProduct                2
  iSerial                 3
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0102
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol      0
      iInterface              0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      2
      iInterface              0
      ** UNRECOGNIZED:  06 24 f1 01 00 00
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      2
      iInterface              0
      ** UNRECOGNIZED:  07 24 01 01 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x0d  EP 13 OUT
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0038  1x 56 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       2
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      2
      iInterface              0
      ** UNRECOGNIZED:  07 24 01 01 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x0d  EP 13 OUT
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0038  1x 56 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      1
      iInterface              0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      1
      iInterface              0
      ** UNRECOGNIZED:  07 24 01 07 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x8e  EP 14 IN
        bmAttributes           37
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Implicit feedback Data
        wMaxPacketSize     0x0038  1x 56 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       2
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2
      bInterfaceProtocol      1
      iInterface              0
      ** UNRECOGNIZED:  07 24 01 07 00 01 00
      ** UNRECOGNIZED:  0b 24 02 01 02 04 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x8e  EP 14 IN
        bmAttributes           37
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Implicit feedback Data
        wMaxPacketSize     0x0038  1x 56 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      3
      bInterfaceProtocol      0
      iInterface              0
      ** UNRECOGNIZED:  06 24 f1 02 01 01
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       1
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      3
      bInterfaceProtocol      0
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               4

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 1: Boutiq [Boutiq], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

$ aplay -L
sysdefault:CARD=Boutiq
    Boutiq, USB Audio
    Default Audio Device
front:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    Front speakers
surround21:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    4.0 Surround output to Front and Rear speakers
surround41:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    Direct sample mixing device
dsnoop:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    Direct sample snooping device
hw:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    Direct hardware device without any conversions
plughw:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    Hardware device with all software conversions
usbstream:CARD=Boutiq
    Boutiq
    USB Stream Output

$ cat /proc/asound/Boutiq/stream0
Roland Boutiq at usb-0000:00:14.0-2, high speed : USB Audio

Playback:
  Status: Stop
  Interface 1
    Altset 1
    Format: S32_LE
    Channels: 2
    Endpoint: 13 OUT (ASYNC)
    Rates: 44100
    Data packet interval: 125 us
    Bits: 24
  Interface 1
    Altset 2
    Format: S32_LE
    Channels: 2
    Endpoint: 13 OUT (ASYNC)
    Rates: 44100
    Data packet interval: 125 us
    Bits: 24

Capture:
  Status: Stop
  Interface 2
    Altset 1
    Format: S32_LE
    Channels: 2
    Endpoint: 14 IN (ASYNC)
    Rates: 44100
    Data packet interval: 125 us
    Bits: 24
  Interface 2
    Altset 2
    Format: S32_LE
    Channels: 2
    Endpoint: 14 IN (ASYNC)
    Rates: 44100
    Data packet interval: 125 us
    Bits: 24

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Boutiq [Boutiq], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

$ arecord -L
sysdefault:CARD=Boutiq
    Boutiq, USB Audio
    Default Audio Device
front:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    Front speakers
surround21:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    4.0 Surround output to Front and Rear speakers
surround41:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    Direct sample mixing device
dsnoop:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    Direct sample snooping device
hw:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    Direct hardware device without any conversions
plughw:CARD=Boutiq,DEV=0
    Boutiq, USB Audio
    Hardware device with all software conversions
usbstream:CARD=Boutiq
    Boutiq
    USB Stream Output

$ amidi -l
Dir Device    Name
IO  hw:1,0,0  Boutiq MIDI 1

$ aconnect -l
client 0: 'System' [type=kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=kernel]
    0 'Midi Through Port-0'
client 20: 'Boutiq' [type=kernel,card=1]
    0 'Boutiq MIDI 1   '

 dmesgを確認していなければ、一見するとAUDIO/MIDI共に普通に動作しそうな雰囲気ですが、残念ながらUSB-AUDIOは機能しません。

  • aplayでBoutiqを指定すると"audio open error: Device or resource busy"で再生できない。
  • arecordでBoutiqを指定すると"Unable to install hw params"で録音できない。

 過去にALSAにJP-08用のパッチが当たっていた時期があるようですが、今は削除されているようです。当該パッチのPIDをJU-06の0x01B5にして適用すればUSB-AUDIOも動かせるのかもしれません*5
 USB-MIDIについてはRaw MIDIALSA Sequencer共に正常に機能します。
 なお、これらの挙動はJU-06 FirmwareがJU-06 Ver.1.21(投稿時点で最新)で確認したものです。
 


以上。

*1:JU-06と共に、JUPITER-8を再現したJP-08、JX-3Pを再現したJX-03の合計3モデルがリリースされましたが、いずれも数量限定で生産され既に終売しています。後にD-50を再現したD-05が発売されたり、今月(2021/12)にはJD-800を再現したJD-08がリリースされたりと、Roland Boutiqueシリーズはアナログシンセサイザーモデリングした製品に限らずラインアップを拡充し続けています。

*2:互換チップが海外で小数生産されたような話も聞きますが、安価に入手できるものではないので…自分で交換しようとして破壊してしまう可能性なども考慮すると躊躇します。

*3:Linux 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64

*4:スライダ(可変抵抗)の出力電圧をA/D変換した時点から内部処理まで8bit値として扱い、MIDI出力する際に最下位1bitを切り捨ててると考えるのが自然でしょう。

*5:未確認。そもそもJP-08用のパッチが削除された経緯を追っていないので、何か問題があるのかもしれません。