Skip to content

Latest commit

 

History

History
325 lines (223 loc) · 7.05 KB

s01.md

File metadata and controls

325 lines (223 loc) · 7.05 KB

Akai S01 sysex implementation

Format

The first 5 bytes of all S01 message have the form:

0xF0 Exclusive

0x47 Akai

cc Exclusive channel (0-127)

ff Function code (0-13)

0x57 S01

0xF7 End of exclusive

Unless stated, groups of bytes in messages represent concatenated 7 bits sections of a dataword, LSB first.

All numbers starting with 0x are hexadecimal numbers C Notation

Function codes

Notes

  • When command marged with * is sent, an ACK command will be sent after it's completed.

    0xF0 0x7E cc 0x7F pp 0xF7 //universal exclusive message

    If the received command is incorrect the S01 will sent a CANCEL command

    0xF0 0x7E cc 0x7D pp 0xF7 //universal exclusive message

    or does nothing.

  • The # marked commands should not be sent while the S01 is

    • recording
    • performing disk operations
    • discard operation.

    If these command are sent anyway, the S01 will

    • not complete it
    • send a meaningless ACK.
  • Use STAT's last byte mm to check whether the S01 is performing one of the operations.

  • To check if the S01 is performing a disk or discard operation check the LED data (it displays that junk then...).

    If the 3 digits are incrementing fast, the the S01 is performing one of the operations.

0x00 undefined

Status

0x01 RSTAT -> Request S01 Status {#rstat}

0xF0 0x47 cc 0x01 0x57 0xF7

0x02 STAT <- S01 Status report

0xF0 0x47 cc 0x02 0x57 v1 V1 v2 V2 wl wm wh fl fm fh bc mm 0xF7
  • v1 V1 Software version number

  • v2 V2 Software version number

  • wl wm wh Maximum memory size in words

    words = w1 + 128 * wm + 16384 * wh
  • fl fm fh Free memory in words

    words =  fl + 128 * fm +1 6384 * fh
  • bc Bank change channel ( 0-127 )

  • mm Current function mode ( 4 bits )

    • bit 0:1 Record standby

    • bit 1:1 Waiting for record trigger (bit 0 also 1)

    • bit 2:1 Recording

    • bit 3:1 Edit mode

Program

0x03 RAPDATA < Request all-program

0xF0 0x47 cc 0x02 0x57 0xF7

0x04 APDATA *# <> All-program data

0xF0 0x47 cc 0x04 0x57 <88 data bytes> 0xF7

The 88 bytes consists of 9 groups

  • system setup
  • 8 bank parameters

System setup bytes:

SYTRANS MIDI Tranpose (+/- 24)

  • bits 6:0 = value
  • bit 7 = positive / negative
    • 1 -num ( -24 = 0x58 = 01011000 )
    • 0 +num ( 24 = 0x18 = 00011000 )

SYTUNE Master tune (+/- 50)

  • bits 6:0 = value
  • bit 7
    • 1 -num
    • 0 +num

SYPRCCH Program change channel

  • 0-15 = channel number
  • 16 = None
  • 127 = OMNI

SYTGLVL Record triggel level (0-100)

EXCLUCH MIDI Exclusive channel (0-127),ignored when received

DUMMY 0

DUMMY 0

DUMMY 0

Bank parameters (bytes):

MODE

  • Bit 1,0

    • 00 = Loop
    • 10 = Loop off
    • 11 = One shot
  • Bit 2 Mono trigger

    • 0 = Off
    • 1 = On
  • Bit 3 Constant pitch

    • 0 = Off
    • 1 = On
  • Bit 4 Velocity

    • 0 = Effective
    • 1 = Not effective

BEND Bend range (0-24)

LEVEL Level (0-100)

RELEASE Release (0-100)

TRANSPO Transpose (+/- 50) Bit 6:0=+ 1=-

TUNE Tune (+/- 50) Bit 6:0=+ 1=-

KEYHIGH Keyrange high (0-127)

KEYLOW Keyrange low (0-127)

PROGNO Program number (0-127)

MIDICH MIDI Channel (0-15,127=OMNI)

Sample

0x05 RSDATA < Request sample header

0xF0 0x47 cc 0x05 0x57 ss 0xF7
  • ss Sample number ( 0 - 7, banknumber minus 1 )

*# 0x06 SDATA <> Sample header data

  0xF0 0x47 cc 0x06 0x57 ss nn al am ah ll lm lh sl sm sh el em eh pl pm ph 0xF7
  • ss Sample number (0-7,banknumber minus 1)

  • nn Playback type

    • 0 Loop on
    • 2 Loop off
    • 3 One shot (all other values are illegal)
  • al,am,ah Absolute address of start point of sample data (ignored when received)

  • ll,lm,lh Data length

  • sl,sm,sh Start offset

  • el,em,eh End offset

  • pl,pm,ph Loop length

Notes

  • To get the real value for all three byte parameters use

    value = ?l + 128 * ?m + 16384 * ?h
  • How to transmit sample data to the S01

    After sending the above header, the S01 sends an ACK. The actual sample data is transferred using the Standard Sample Dump method. If there is already a sample stored in the specified bank, it has to be deleted first, either by sending a DELS message, or by a panel operation

*# 0x07 DELS < Delete sample

0xF0 0x47 cc 0x07 0x57 ss 0xF7
  • ss Sample number ( 0-7, banknumber minus 1 )

Panel

* 0x09 FPSW < Panel switches

  0xF0 0x47 cc 0x09 0x57 sw tt 0xF7
  • sw Switch code

    • 00 01 02 03 04 05 06 07 bank 1-8
    • 08 rec
    • 09 left
    • 10 down
    • 11 edit
  • tt

    • 0 press
    • 1 release

* 0x0A FPRE < Panel rotary control

0xF0 0x47 cc 0x0A 0x57 dr 0xF7
  • dr
    • 0 Rotation to the right
    • 1 Rotation to the left

0x0B RLED < Request LED data

0xF0 0x47 cc 0x0B 0x57 0xF7

0x0C ANSLED > LED data report

0xF0 0x47 cc 0x0C 0x57 l1 l2 l3 l4 l5 l6 l7 0xF7
bit 7 6 5 4 3 2 1 0
l1 0 bank7 bank6 bank5 bank4 bank3 bank2 bank1
l2 0 disk setup midi pitch level loop trim
l3 0 rec edit bank8 line4 line3 line2 line1
l4 0 seglg seglf segle segld seglc seglb segla (left display)
l5 0 segmg segmf segme segmd segmc segmb segma (middle)
l6 0 segrg segrf segre segrd segrc segrb segra (right)
l7 0 0 0 0 0 dpr dpm dpl

7 Segment LED display segment identification: A --- F| |B -G- E| |C --- . DP D

* 0x0D SETLED < Set LED data

0xF0 0x47 cc 0x0D 0x57 le tt 0xF7
  • le LED
    • 0 1 2 3 4 5 6 7 bank 1-8
    • 8,9 Trim/Loop
    • 10,11 Level/Pitch
    • 12,13 MIDI/Setup
    • 14 Disk
    • 15,16,17,18 Line 1-4
    • 19 20 - Rec/Edit
  • tt
    • 0 On
    • 1 Off

7 Segment LED Displays:

Segment A B C D E F G DP
Left 21 22 23 24 25 26 27 28
Middle 29 30 31 32 33 34 35 36
Right 37 38 39 40 41 42 43 44

Other

Set exclusive channel (SETEX)

  0xF0 0x47 cc 0x08 0x57 0xF7