[<de.comp.os.unix.linux.hardware> habbichnich]
In de.rec.musik.machen, Holger Marzen <
hol...@marzen.de> wrote:
> Hallo Leute,
Hollihallö Derda,
> Gibt es sowas, was auch unter Linux läuft und sich bei ALSA oder Jack als
> MIDI-Gerät meldet?
Besser als USB ist MIDI, wegen galvanischer Entkoppelung. Das macht eine
mögliche Fehlerquelle weniger. Konverter USB zu MIDI-in/out kosten fast nix
(ein Kabelkonverter für in/out ist auch als Zwillingskabel zu haben, ist
also auch nur 1 Strippe), oder sind bei Soundkarten sowieso dabei.
Wenn die passenden Module mit einkompiliert sind, meldet sich da eigentlich
nix von selber. Die Daten liegen an und werden abgeholt. Es könnte sein,
dass man via ALSA den Namen des Ports angeben muss (z.B. bei Aufruf von
jackd), den verrät ein <cat /proc/asound/cards> (und was per USB
angeschlossen ist, zeigt <lsusb>), wenn das Gerät fehlt, muss gesucht
werden, warum. Die Kernels der Distributionen sind aber typischerweise
ziemlich 'breitbandig' konfiguriert, sodass normalerweise hoffentlich alles
gleich bedient wird, was so herumfliegt.
Für Audio findet man die Geräte, wenn es mehrere sind, auch via <aplay -l>
bzw. <arec -l>, und wenn sonst keine Programme dazwischenfunken, kann man
dann mit <alsamixer -cx> (x ist die gefundene Gerätenummer) direkt
manipulieren.
Sound via HTML-Browser greift typischerweise nur auf die Nummer 0 zu; die
Reihenfolge lässt sich, in Grenzen, manipulieren durch einen Eintrag in
</etc/modules.d/modules.conf>, z.B., um eine eingebaute Karte an die zweite
Stelle verschieben, sodass externer USB-Sound immer als Nummer 0 erscheint,
bei mir mit der Zeile: <options snd_intel8x0 index=1>, d.h., der Name
'snd_intel8x0' steht für das Modul für den eingebauten Sound. Ok, ALSA ist
eine ziemlich große Bastelkiste, wenn man will.
Die sparsamste und sicherste Möglichkeit, MIDI aufzuzeichnen, wird via des
Direktwerkzeugs von ALSA sein, <arecordmidi>, hier gilt analog: Mit
<arecordmidi -l> werden alle MIDI-Geräte angezeigt, und <arecordmidi -px:y>
(mit 'x:y' als Port, den '-l' ausgegeben hat) nimmt auf, bis man per
Control-C (äh ... in der Siemens-Welt heißt das Strng-C oder so)
unterbricht.
Hier ein paar Zeilen, um die Suche der Portnummer fix an den Namen des
Konverters zu koppeln (der in der 6. Zeile als Konstante angegeben ist;
aufzurufen mit dem Namen einer zu erstellenden Midi-Datei als Parameter):
------------------- schnipp -------------------------------------
#!/bin/sh
if [ -r $1 ]; then { echo "$1 exists"; exit;
}; fi;
d="USB-MIDI";
z=$(arecordmidi -l |grep $d |tr -s " ");
if [[ $z != "" ]]; then { y=$(echo $z |cut -d" " -f1);
if [[ $y == "" ]]; then { y=$(echo $z |cut -d" " -f2);
} fi; } fi;
if [[ $y == "" ]]; then { echo "$0 --> no device"; exit
} fi;
echo "$1 --> $d ($y)";
arecordmidi -p$y $1;
chmod -w $1;
------------------- schnapp -------------------------------------
****
Für das anzuschaffende Klimper-Gerät: Für Wünsche und Gier des Kunden gibt
es doch ein riesiges Angebot? Anstöpseln und spielen ...
Besser vorher in einen Laden gehen und antesten, als viel herumfragen.
Brauchbare Klänge für Fluidsynth usw. sind rar. Ich würde das nur als
Notbehelf ansehen, wenn kein externer Generator in Stöpselweite ist.
Es ist also gewiss kein Nachteil, wenn der Generator der Tastenmaschine doch
auch halbwegs nach etwas klingt, zumindest, dass der einem nicht auf die
Nerven geht, wenn man sich das länger anhören muss.
Solange keine Noten mit im Spiel sind, fand ich Qtractor wesentlich
sparsamer wg. CPU-Ĺast (dahinter steht derselbe Autor, der qjackctl
geschrieben hat, womit sich jackd leichter einrichten lässt).
Wenn via jackd nur Midi laufen soll, und kein Audio, so kann man es mit
<jackd -d dummy> aufrufen (der Midiport wird hernach im Sound-Programm
'verbunden'), dann bleiben die 'Audio'-Resourcen für andere Programme direkt
(via ALSA) erhalten.
Beim Kompilieren des Kernels lassen sich Echtzeit-Präferenzen angeben; es
könnte hilfreich sein, hier eine Stufe schärfer einzugeben, als 'nur Desktop
bzw. Server'. Ausgangspunkt, um das Leben zu erleichtern, sollte die
<.config>-Datei sein, womit der Kernel der Distribution kompiliert wurde;
die landet dann im Hauptverzeichnis der Linux-Sourcen, wahrscheinlich
'/usr/src/linux-<version>', hernach kann man (in diesem Verzeichnis) <make
menuconfig> aufrufen und sich dann einen Abend Zeit für weitere Meditationen
nehmen, wenn der Masochismus diesseits schädlicher Nebenwirkungen soweit
reicht (Echtzeit-Einstellungen bitte nur mit Bedacht verstellen; es steht in
den Quelltexten die Warnung, man könne sich ein unstabiles System
einhandlen, wenn man da zuviel dran herumdreht.)
Diese Einstellung im Kernel:
| Processor type and features ->
| Preemption Model ->
| Preemptible Kernel (Low-Latency Desktop)
(führt in .config zu den beiden Zeilen:
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
) sollte noch auf der harmlosen Seite sein und war jedenfalls bislang stabil
bei mir, und lässt jackd auch ohne Echtzeitbetrieb leidlich sicher laufen,
auch wenn ich das für härtere Anforderungen nicht verallgemeinern möchte.