Onderwerp: Shell script om hex waarden v/e synthesizer te lezen

Ik heb een speetje gekocht: een synthesizer. Een leuk goedkoopje: de Korg Monologue. Dat ding is Midi compatibel en kan z'n instellingen dumpen via Midi. Ik geef dan het commando "aseqdump -p 24:1 | grep -v Clock" en dan krijg ik de volgende output:

$ aseqdump -p 24:1 | grep -v Clock

Waiting for data. Press Ctrl+C to end.
Source  Event                  Ch  Data
 24:1   System exclusive           F0 42 30 00 01 44 40 00 50 52 4F 47 44 69 72 00 74 79 20 67 72 69 74 44 00 00 00 00 7C 00 04 22 00 7F 00 00 00 00 00 11 00 00 50 42 69 33 41 02 00 15 32 00 0C 24 00 22 17 4C 06 66 00 7F 53 00 45 51 44 6F 04 10 00 00 00 00 00 00 00 00 00 06 00 7F 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 3C 00 04 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3B 08 00 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 39 00 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 7F 00 00 7F 00 00 00 00 00 00 00
 24:1   System exclusive           00 00 00 00 00 00 00 00 00 00 00 00 39 00 7F 00 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 00 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 00 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 7F 00 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 7F 00 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 00 7F 00 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 00 00 7F 00 3F 00 00 00 00 00 00 00 00 00 00 00 00
 24:1   System exclusive           00 00 00 00 00 00 00 F7

Met wat reverse engineering kan ik er wel achter komen welke v/d hexadecimale nummers bij welke knop op mijn synth horen. Maar dan blijft iedere keer het helse karwij over om tot 30 te tellen voor het getalletje dat bij de knop "Cutoff frequency" hoort bijvoorbeeld. En dan met een rekenmachine het hexadecimale getal omzetten in een decimaal getal met mijn rekenmachine. En dat voor alle 25 draaiknoppen en schakelaars. No way!

Enfin, ik wil daar een klein en eenvoudig shell scriptje voor schrijven. Het moet simpel wat ik ben bij lange na geen programmeur. Ik mag wel zeggen: fikse amateur! Het lukt me bijvoorbeeld niet eens om bovenstaande output van grep naar een text bestand te krijgen. Dit doe ik namelijk:

$ aseqdump -p 24:1 | grep -v Clock > aseqdump.txt

Het resulterende tekst bestand (aseqdump.txt) is leeg! Bestandsgrootte = nul! Hoe kan dat nou? Moet te maken hebben met het feit dat ik d.m.v de schakeloptie "-v Clock" alle regels met het woord "Clock" er uit filter. Want als ik het grep commando niet gebruik wordt het tekst bestand wel gevuld. Je moet beseffen dat die synthesizer tig keer per seconde het woordje "24:1   Clock" echoed op de command line. Zal wel te maken hebben met zijn interne klok (Midi muziekinstrumenten kunnen synchroon lopen met één klok).

Wat ik wil is de inhoud v/h commando "aseqdump -p 24:1 | grep -v Clock" kopiëren naar een text bestand en dat hex getal voor hex getal inlezen (een boel v/d output hoef ik niet te weten, alleen bepaalde hex getallen die voor mij van interesse zijn).

Ik hoop dat jullie het als en uitdaging zien om mij stap voor stap verder te helpen. smile


P.S. Op de website van Korg is helaas geen software te downloaden die dit kan. Uploaden en downloaden van instellingen van en naar de Korg wel maar dan weet je nog niet wat ik weten wil.
P.S. 2 Ik heb het commando grep vervangen voor sed en dat werkt op de command line, maar ook die output krijg ik niet in een tekst bestand. Hè? icon_confused

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

Re: Shell script om hex waarden v/e synthesizer te lezen

Het is leeg omdat je nog crtl+C moet drukken, lijkt me.

Re: Shell script om hex waarden v/e synthesizer te lezen

peugeot2 schreef:

Het is leeg omdat je nog crtl+C moet drukken, lijkt me.

Je moet op CTRL + C drukken om terug te keren naar de prompt. Ongeveer zet zoals met ping. Op CTRL + C drukken helpt helaas niet (net geprobeerd).

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

Re: Shell script om hex waarden v/e synthesizer te lezen

Was een gokje smile

5

Re: Shell script om hex waarden v/e synthesizer te lezen

Krijg je wel een dump als je niet naar een bestand laat schrijven?

Help mee om KDE 5 in het Nederlands te vertalen!!

6 Laatst bewerkt door MeneerJansen (20 Feb 2017 13:49:35)

Re: Shell script om hex waarden v/e synthesizer te lezen

Rinse schreef:

Krijg je wel een dump als je niet naar een bestand laat schrijven?

Yep. Zoals je kunt zien in de top post in het stukje tussen de "CODE" tags geeft het commando "aseqdump -p 24:1 | grep -v Clock" prima output op de command line waar ik wat mee kan. Ik krijg het alleen niet in een txt bestand.



P.S. Als ik het "grep" gedeelte v/h commando weglaat dan krijg ik wel output in het txt bestand. Dus

aseqdump -p 24:1 > bestand.txt

werkt wel,

aseqdump -p 24:1 | grep -v Clock > bestand.txt

werkt niet. Gek he?

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

7

Re: Shell script om hex waarden v/e synthesizer te lezen

Misschien deze wel?

aseqdump -p 24:1 | grep -v Clock >> bestand.txt
Help mee om KDE 5 in het Nederlands te vertalen!!

8 Laatst bewerkt door MeneerJansen (20 Feb 2017 13:50:06)

Re: Shell script om hex waarden v/e synthesizer te lezen

Rinse schreef:

Misschien deze wel?

aseqdump -p 24:1 | grep -v Clock >> bestand.txt

Had ik ook geprobeerd. Het enige verschil tussen ">" en ">>" is dat ">>" append en ">" de oude inhoud overschrijft. Pascal: help! wink

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

Re: Shell script om hex waarden v/e synthesizer te lezen

Misschien moet er een 'wait' ingebouwd worden. Als je gelijk dat bestand aanmaakt is er te weinig tijd verstreken om data op te vangen en in een bestand te duwen. Daarom verschijnt de melding van Ctrl+C.

Tismaareenidee wink

10 Laatst bewerkt door MeneerJansen (21 Feb 2017 10:58:14)

Re: Shell script om hex waarden v/e synthesizer te lezen

peugeot2 schreef:

Misschien moet er een 'wait' ingebouwd worden. Als je gelijk dat bestand aanmaakt is er te weinig tijd verstreken om data op te vangen en in een bestand te duwen. Daarom verschijnt de melding van Ctrl+C.

Tismaareenidee wink

Dat denk ik niet anders zou het ook niet werken zonder het grep commando. Het werkt met die synth en de output die hij via USB (in de muziekwereld heet dat MIdi) zendt naar de computer als volgt. Je geeft het commando

aseddump -p 24:1

Dan zegt die synt het volgende:

Waiting for data.

Een microseconde later (niet eens met het blote oog te zien):

Waiting for data. Press Ctrl+C to end.

En weer een fractie later meldt de synth dat de klok werkt (dat doet 'ie ong. tien keer per seconde):

Waiting for data. Press Ctrl+C to end.
Source  Event                  Ch  Data
24:1     Clock
24:1     Clock
24:1     Clock
24:1     Clock
24:1     Clock
24:1     Clock
24:1     Clock

Dat allemaal zonder dat ik iets doe. Daarna geeft 'ie real time elke toetsaanslag weer:

Waiting for data. Press Ctrl+C to end.
Source  Event                  Ch  Data
24:1     Clock
24:1     Clock
24:1     Clock
24:1     Clock
24:1     Clock
24:1     Clock
24:1     Clock
24:1     Note on      0, note 53, velocity 127

En dat kan ik allemaal in een text bestand krijgen. Tenzij in de clock meldingen er uit filter met "grep -v" (-v staat voor inVert). Snap je het nu? Vergeet die ctrl + C melding nu alsjeblieft.

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

Re: Shell script om hex waarden v/e synthesizer te lezen

Hebbes! Gebruik "sed" om al die regels met "24:1 Clock" uit het txt bestand te verwijderen. Dus:

$ aseqdump 24:1 > aseqdumpfile.txt
$ sed -i '/Clock/d' aseqdumpfile.txt 

Nu nog het script om dat txt bestand in te lezen, bepaalde hexadecimale getallen er uit te filteren en de hexadecimale waarden om te zetten in decimale waarden.

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

12 Laatst bewerkt door MeneerJansen (21 Feb 2017 13:57:35)

Re: Shell script om hex waarden v/e synthesizer te lezen

Hebbes! Dit is 'm geworden:

#! /bin/bash

# Watch output from Korg on commandline:
# aseqdump -p 24:1 | grep -v Clock

echo -e "Press Write on the Korg. When the message \"Transmitting\" has disappeared press CTRL + C."

# Starting to dump stuff to text file
aseqdump -p 24:1 > aseqdumpfile.txt

# Removing all lines containing "Clock" etc.
sed -i '/Clock\|Start\|Stop\|Note/d' aseqdumpfile.txt

# Delete certian parts to only leave the HEX numbers:
sed -i 's/ 24:1   System exclusive           \|Waiting for data. Press Ctrl+C to end.\|Source  Event                  Ch  Data//g' aseqdumpfile.txt

# Remove empty lines that were left behind:
sed -i '/^$/d' aseqdumpfile.txt



# Convert from HEX to DEC:
function abc ()
{
   hex=`awk 'NR==1{print $'$1'}' aseqdumpfile.txt`
   dec=`echo $((16#$hex))`
   echo $dec
}


echo -e  "
Attack = $(abc 3) 
Decay  = $(abc 5)
"

Output:

$ korg.sh

Press Write on the Korg. When the message "Transmitting" has disappeared press CTRL + C.
^C
Attack = 48
Decay  = 1
Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

Re: Shell script om hex waarden v/e synthesizer te lezen

Cool smile

14

Re: Shell script om hex waarden v/e synthesizer te lezen

Super. smile

Groet.

Slackware 64  14.2

Re: Shell script om hex waarden v/e synthesizer te lezen

Yep. Die Korg geeft z'n geheimen nu prijs. Maar alleen op Linux, ha ha.


N.a.v. een ander topic over "het succes van Linux". Onder Windows of MacOS zal dit zonder enige twijfel ook lukken (de Midi standaard beperkt zich uiteraard niet tot Linux). Of dit lukt op Android weet ik niet. Android kan omgaan met Midi instrumenten, maar het is zo'n rotsysteem dat ik in Vredesnaam niet zou weten of er Alsa op draait, laat staan of Busybox (de vervanger van alle command line Linux commando's) de commando's in dit script aankan.

Wat ik wel zeker weet is dat ik bovenstaand script niet zou gaan schrijven als Batch script in Windows (te beperkt, denk ik) en al helemaal niet voor de Power Shell (de commando's die je aldaar moet gebruiken zijn 20 letters lang en niet te begrijpen). Neen de (Bash) shell van Linux is het enige dat geschikt is voor dit soort dingen. De ideale mix voor power users zoals ik die geen programmeur zijn. Waarom? Omdat een echte programmeertaal (Python, C++ of weet ik veel) te moeilijk is. En tijdens het maken v/h script heb ik wel honderd keer op Google mijn letterlijke vraag ingetypt en kwam er gewon antwoord in de vorm v/e forum topic. Google is gewoon een groot forum voor vragen over shell scripts. Geweldig. Nogmaals: dat zal het voor C++ en Powershell ook wel zijn, maar da's te ingewikkeld. MacOS werkt niet met alsa voor zover ik weet dus ga ik daar ook niet zitten scripten. Ondanks dat dat een *NIX systeem wordt genoemd door sommigen. Pfffff.

Daarom is Linux en succes: kan voor en door iedereen gebruikt worden. En wat is voor mij persoonlijk de definitie van succes? Dat iets zich bewezen heeft, NIET STERKT VERANDERT, en dat het een blijvertje is zoals het wiel en de Minimoog. smile

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

16

Re: Shell script om hex waarden v/e synthesizer te lezen

Ik heb eens ooit een sysex dump tooltje geschreven voor mijn digi piano.
ik geloof dat de code op mijn site staat, be my guest.

Pascal's Blobfree Homepage
Een dag geen NedLinux is een dag niet geleefd