FP-30 'hidden features' editor

loveyourjunos

Ouwe rot
Lid sinds
17 december 2006
Berichten
1.734
Locatie
Oss
Afgelopen zaterdag een FP-30 digitale Roland piano gekocht. Toen ik naar de MIDI implementation keek zag ik zo'n zestig effecten die je niet via het apparaat zelf kunt bereiken. (rotary speaker, autowah, amp simulatie, delays, etc. etc.)
Er is op de Midi implementation guide na ook nergens iets over te vinden.

Na wat puzzelen hoe SysEx ook al weer werkt heb ik het zo'n beetje aan de praat gekregen. In Chrome kun je MIDI en SysEx versturen, dus ik heb een siteje gebouwd waarmee je de effecten aan kunt sturen plus nog wat andere zaken (bijvoorbeeld de GM2 klanken laden die er ook gewoon in zitten). Het werkt allemaal nog niet top maar ik ben er nu even klaar mee...

Chrome blokkeert sysex op je website als je geen https verbinding hebt, vandaar dat ik het nu even als zip pakketje upload.

Ik tijdens het googlen dezelfde effecten op de midi implementation guides van diverse andere Rolands gezien, vandaar dat ik de header van de Sysex data editbaar heb gemaakt. Kan zijn dat je alleen een device id op moet zoeken en dat het dan voor jouw Roland werkt.

Ik heb dit vroeger al eens gedaan met een vriendje van school met een MC-303 in Cakewalk, zaten ook allerlei extra effecten in. Leuk dat het nu nog steeds kan :)

Gebruiksaanwijzing: downloaden, uitpakken en openen. Check bij midi settings of je de juiste poort hebt. Hopelijk werkt het allemaal ...

Let op: hij werkt dus alleen in Chrome.
 

Attachments

  • FP30 editor.zip
    383,3 KB · Bekeken: 146
  • Screenshot.jpg
    Screenshot.jpg
    30,3 KB · Bekeken: 166
Ik heb die piano niet, maar aangezien jij "iets" kunt met SysEx data trek ik de stoute schoenen aan en vraag ik het aan je. Ik heb een Korg Monologue en de software van Korg zelf kan niet een "patch" (lees: hoe je aan de knoppen gedraaid hebt) van elke knop de instelling weergeven. Dus als je een zg. patch hebt opgeslagen in het geheugen van de Korg dan kom je er nooit meer achter hoe die patch precies is gemaakt.

Maar de Korg kan wel al z'n instellingen dumpen via SysEx data. Alleen was, voor zover ik wist, nergens documentatie te vinden over hoe die SysEx data in elkaar steekt. Met "reverse engineering" heb ik kunnen achterhalen hoe je de SysEx data moet interpreteren en daar heb ik een Linux (lees: Bash) shell script voor geschreven. Je laat de Korg z'n SysEx data dumpen via USB en het script tovert een tabel tevoorschijn met hoe je aan alle knoppen moet draaien om de patch "na te maken".

Maar niet veel mensen hebben Linux op hun computer. Zo'n web interface die jij maakte voor de Roland FP-30 die de SysEx data in Chrome weergeeft is geweldig!

Ben jij goed genoeg met computers om een Linux shell script om te zetten in zo'n Chrome pagina? Of kun jij dat makkelijk in elkaar programmeren als jou wordt verteld hoe de SysEx data dump v/d Korg Monologue geïnterpreteerd moet worden? Wat goed van jou dat je het in Chrome hebt gedaan. Hoe heb jij dat geprogrammeerd? In HTML? En hoe krijg jij de SysEx dump v/d Roland in een bestand? Ik moet dat op Linux via het MIDI gedeelte v/d geluids-driver ALSA doen. Ik dump de inhoud v/e terminal in een tekst bestand en dat lees ik dan uit.
 
Tsja moeilijk te zeggen of ik dat makkelijk kan... de techniek achter de pagina is niet heel ingewikkeld. Ik ben met deze voorbeelden begonnen: https://webaudio.github.io/web-midi-api/#examples verder ben ik wel handig met html, javascript en jquery zodat ik de knoppen die een bepaald stukje van de sysex data variabel maken redelijk snel in elkaar kon zetten.

Met linux heb ik 0,0 ervaring. Wat zou je op zo'n pagina willen? Patches versturen? Of de knoppen stand tonen? Ik begrijp het niet helemaal
 
Tsja moeilijk te zeggen of ik dat makkelijk kan... de techniek achter de pagina is niet heel ingewikkeld. Ik ben met deze voorbeelden begonnen: https://webaudio.github.io/web-midi-api/#examples verder ben ik wel handig met html, javascript en jquery zodat ik de knoppen die een bepaald stukje van de sysex data variabel maken redelijk snel in elkaar kon zetten.

Met linux heb ik 0,0 ervaring. Wat zou je op zo'n pagina willen? Patches versturen? Of de knoppen stand tonen? Ik begrijp het niet helemaal

Het script werkt als volgt. Eerst openen je een terminal venster en type je "korg.sh". Als je op Enter gedrukt hebt dan zie je dit:



Dus het script vraagt je om op een paar knoppen van je Synth te drukken zodat die de SysEx data te dumpt over USB. Daarna moet je op je computer op CTRL + C drukken en dan zie je in het terminal venster de volgende tabel:



In de tabel staat dus opgesomd wat de SysEx data betekent. Ik dacht dat de webpagina die jij maakte ongeveer hetzelfde doet. Toch?
 
Stuurt hij het in 1 x uit?

Kun je eens de ruwe sysex data posten? Plus de mapping (wat zijn de parameters, wat zijn de variabele waarden)

ik denk dat het wel te doen is om het op te knippen en de waardes van de knoppen op het scherm in te stellen op basis van de data. Dan kun je de stand van de knoppen zoals in de patch opgeslagen aflezen van het scherm.
 
Stuurt hij het in 1 x uit?

Kun je eens de ruwe sysex data posten? Plus de mapping (wat zijn de parameters, wat zijn de variabele waarden)

ik denk dat het wel te doen is om het op te knippen en de waardes van de knoppen op het scherm in te stellen op basis van de data. Dan kun je de stand van de knoppen zoals in de patch opgeslagen aflezen van het scherm.

De SysEx data ziet er ong. zo uit:

DUMP 1:
Code:
 24:1   System exclusive           F0 42 30 00 01 44 40 00 50 52 4F 47 4F 6E 20 00 74 68 65 20 72 75 6E 64 00 00 00 00 7E 7F 0A 26 00 02 4D 29 00 00 13 11 17 00 10 2D 6A 22 08 02 18 42 32 00 0C 24 00 20 38 22 06 66 00 7F 53 00 45 51 44 76 07 08 00 00 00 36 00 00 00 00 00 02 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3F 00 04 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 08 00 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 44 00 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 42 00 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 49 00 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 47 00 7F 00 01 36 00 00 00 00 00 00 00
 24:1   System exclusive           00 00 00 00 00 00 00 00 00 00 00 00 49 00 7F 02 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 00 04 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 24:1   System exclusive           00 00 00 00 00 00 00 F7

SysEx data begint altijd met het hexadecimale getal F0 en eindigt met F7. Verder staan er tussen de bovenstaande data-dump woorden en getallen die ik niet nodig heb. Die filter ik er uit en dan ziet het er bijv. zo uit:

DUMP 2:
Code:
F0 42 30 00 01 44 40 00 50 52 4F 47 4F 6E 20 00 74 68 65 20 72 75 6E 64 00 00 00 00 7E 7F 0A 26 00 02 4D 29 00 00 13 11 17 00 10 2D 6A 22 08 02 18 42 32 00 0C 24 00 20 38 22 06 66 00 7F 53 00 45 51 44 76 07 08 00 00 00 36 00 00 00 00 00 02 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3F 00 04 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 08 00 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 44 00 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 42 00 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 49 00 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 47 00 7F 00 01 36 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 49 00 7F 02 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 00 04 7F 00 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 F7

Dan begint het grote rekenen.

Eerst zet ik de boel om van Hex naar decimale getallen. Zo'n decimaal getal is bijv. het percentage dat ik het mixer-volume van VCO1 (de eerste oscillator) open heb gedraaid. Maar let op: er is nog een tweede getal uit de SysEx dump van belang. Dat 2e getal bepaalt of ik de draaiknop verder dan de helft (12 uur) heb gedraaid of niet. Zo nee: dan moet het dec. getal omgezet worden naar een getal tussen de 0% en 50%. Zo ja: dan moet het omgezet worden naar een getal tussen de 51% en 100%.

Volg je het nog?

Het wordt nog lastiger. Ik zal een voorbeeld geven. Zie Dump 2. Getal nummer 31 bepaalt het volume in procenten. Getal nummer 24 bepaalt of het volume verder is gedraaid dan 50%. Maar getal nummer 24 kan vele waarden hebben. Als nr. 24 groter is dan 64 (decimaal) dan is het volume voorbij de 50% gedraaid. Als nr. 24 kleiner is dan 64 dan zit het volume tussen de 0% en 50%.

Sommige draaiknoppen van de Korg Monologue synth hebben een nog ingewikkelder rekenmethode voor de waarde. Het "tweede getal" moet dan deelbaar zijn door 4 en de rest moet dan 2 of 0 zijn voor volume groter of kleiner dan 50%, etc. etc.

Hoe lastig of eenvoudig de SysEx data van jouw FP-30 digitale Roland piano te interpreteren is weet ik niet. Zou de SysEx data van mijn Korg ook in zo'n html pagina kunnen?
 
P.S. Ik achterhaal die SysEx data door op de command line continu de door de synth afgegeven MIDI data te bekijken. Het commando dat ik gebruik is:
Code:
aseqdump -p 24:1 | grep -v Clock

De output zier er ongeveer zo uit:
Code:
Waiting for data. Press Ctrl+C to end.
Source  Event                  Ch  Data
 24:1   Start
 24:1   Note on                 0, note 52, velocity 127
 24:1   Note off                0, note 52, velocity 64
 24:1   Note on                 0, note 51, velocity 127
 24:1   Note off                0, note 51, velocity 64
 24:1   Note on                 0, note 49, velocity 127
 24:1   Stop
 24:1   Note off                0, note 49, velocity 64
Nadat ik de Korg opdracht heb gegeven om de SysEx data te dumpen verschijnt op de command line v/d terminal wat ik hierboven postte. De SysEx data staat dus tussen de MIDI data.
 
Bedankt Jelle :)

ik heb in het weekend weer tijd om er wat verder aan te sleutelen en uit te zoeken wat alle efx parameters precies doen. Hopelijk wordt het dan wat gebruiksvriendelijker en duidelijker in het gebruik...

@Mr Jansen

Neem de knop EFX parameter 1 als voorbeeld:

[240, 65, 16, 66, 18, 64, 3, 4, 86, 99, 247]

[Start System exclusive, Header met apparaat identifier , EFX param 1 Waarde van knop, Checksum, Einde system exclusive]

de checksum is de som 128 - ((64+3+4+86) % 128 ) (99 dus in dit geval) die zal er op de monologue ook inzitten.

Sommige messages hebben een Most en Least siginificant bit (MSB / LSB) ik denk dat dat ook op de Monologue gebeurt?

[240, 65, 16, 66, 18, 64, 3, 0, 1, 33, 27, 247] (Selecteer Autowah effect)

deze twee getallen moet je zien als 1 * 128 + 33 (151)



Als jij deze onderdelen aan kunt geven maak ik een paginaatje voor je :D
 
@loveyourjunos ik heb je werk toch in aktie kunnen bekijken op m'n Raspberry Pi danwel, waarop standaard chromium draait (zelf heb ik geen FP-30).
Mooi dat er ook op die manier midi-editors kunnen gemaakt worden (hoewel een extra medium ook wel nadelen geeft => verdeeldheid). Toch knap gemaakt in elk geval.
Heb je al die code zelf moeten ingeven of is daar een (script-)editor voor ? Kun je iets meer vertellen over de werkwijze ?
Zo te zien lijkt me (nog) meer werk dan bij de windows API's.
 
Back
Top