Forum : 5 - Les serveurs son : Jack, PulseAudio et autres...

Configurer JACK pour enregistrement audio+MIDI de clavier/batterie et utilisation d'applis de bureau

lmGuillaume utilisateur non connecté
Bonjour,



J'ai un clavier et une batterie branchés en MIDI et en "audio" sur ma carte son Behringer.
Je cherche à enregistrer ces instruments en utilisant Reaper. Je suis sous Xubuntu 20.

Sans lancer Jack, en sélectionnant PulseAudio comme système audio dans les paramètres de Reaper, apparaît alors la ligne "hw:U192k" (ma carte son) dans les périphériques MIDI (je suis toujours dans les paramètres de Reaper). Je peux alors activer ce périphérique MIDI. Puis sur une piste Reaper, le bouton FX me permet d'ajouter le VSTi Carla-Patchbay, de connecter un "MDA Piano" entre la sortie de mon input MIDI et l'output Audio, et j'entends bien mon clavier. Avec une bonne latence. :-)
Une piste côte-à-côte qui enregistre l'entrée "audio" fonctionne également, sans la latence du MIDI.

Tout ça pour dire que je pense que mes branchements sont corrects, le matos compatible, les potards au bon niveau, etc.


En suivant les instructions de cette page (https://doc.ubuntu-fr.org/jackd#jack_sink ), j'ai réussi à ce qu'en lançant le serveur Jack, j'ai toujours le son des applis "de bureau" (VLC, Chrome...), et que ça fonctionne toujours quand je quitte Jack.

Étape suivante : je n'arrive pour l'instant pas à faire jouer mon clavier MIDI sous Reaper si je lance Jack. Je le lance pour l'instant via Qjackctl. J'ai Ubuntu Studio Control installé mais la solution pour avoir les applis bureau citée ci-dessus fonctionnait avec QJackctl, je préfère donc commencer par là. (J'ai l'impression qu'Ubuntu Studio Control propose aussi un pont de PulseAudio vers Jack, mais ça ne marchait pas du premier coup, bref.)

Je lance donc le serveur Jack, puis j'ouvre Reaper. Dans les paramètres audio, je sélectionne Jack comme système audio. Du coup, je ne vois plus la ligne "hw:U192k" dans la liste des périphériques MIDI, seulement du "MIDI Input 1", "Midi Input 2". J'ai beau essayer d'en activer, puis de les assigner aux pistes Reaper, je n'entends rien.

Et là je manque d'inspiration pour savoir quoi essayer ensuite. :-)


Mon graphe Jack ressemble à ça :
Image

cat /proc/asound/cards

0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xb1214000 irq 141
 1 [U192k          ]: USB-Audio - UMC204HD 192k
                      BEHRINGER UMC204HD 192k at usb-0000:00:14.0-7, high speed


ls /etc/security/limits.d

audio.conf


cat ~/.config/rncbc.org/QjackCtl.conf

[Defaults]
ConnectionsTabPage=0
MessagesStatusTabPage=0
PatchbayPath=
SessionSaveVersion=true

[Geometry]
qjackctlConnectionsForm\geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\x1\0\0\0\x18\0\0\x2\x1d\0\0\x1W\0\0\0\x1\0\0\0\x18\0\0\x2\x1d\0\0\x1W\0\0\0\0\0\0\0\0\a\x80\0\0\0\x1\0\0\0\x18\0\0\x2\x1d\0\0\x1W)
qjackctlConnectionsForm\visible=false
qjackctlGraphForm\geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x18\0\0\a\x7f\0\0\x4\r\0\0\0\0\0\0\0\x18\0\0\a\x7f\0\0\x4\r\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\x18\0\0\a\x7f\0\0\x4\r)
qjackctlGraphForm\visible=false
qjackctlMainForm\geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x4g\0\0\x2\xd8\0\0\x6g\0\0\x3W\0\0\x4h\0\0\x2\xf0\0\0\x6\x66\0\0\x3V\0\0\0\0\0\0\0\0\a\x80\0\0\x4h\0\0\x2\xf0\0\0\x6\x66\0\0\x3V)
qjackctlMainForm\visible=true
qjackctlMessagesStatusForm\geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x18\0\0\a\x7f\0\0\x4\r\0\0\0\0\0\0\0\x18\0\0\a\x7f\0\0\x4\r\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\x18\0\0\a\x7f\0\0\x4\r)
qjackctlMessagesStatusForm\visible=false
qjackctlPatchbayForm\geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x2\x63\0\0\x1r\0\0\x5\x1b\0\0\x2\xb1\0\0\x2\x63\0\0\x1r\0\0\x5\x1b\0\0\x2\xb1\0\0\0\0\0\0\0\0\a\x80\0\0\x2\x63\0\0\x1r\0\0\x5\x1b\0\0\x2\xb1)
qjackctlPatchbayForm\visible=false
qjackctlSessionForm\geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\n\0\0\x1X\0\0\0\x1\0\0\0\x18\0\0\x2\t\0\0\x1W\0\0\0\0\0\0\0\0\a\x80\0\0\0\x1\0\0\0\x18\0\0\x2\t\0\0\x1W)
qjackctlSessionForm\visible=false

[GraphCanvas]
CanvasRect=@Variant(\0\0\0\x14\xc0\x8e\xf8\0\0\0\0\0\xc0jp\0\0\0\0\0@\x96\x66\0\0\0\0\0@\x8a\xc8\0\0\0\0\0)
CanvasZoom=1

[GraphColors]
0x1b8e6271=#006b00
0x3499f961=#006b6b
0x678f332=#6b006b
0x8c2bd0df=#6b6b00
0x9111e0b4=#6b0000

[GraphLayout]
qjackctlGraphForm=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\a\x80\0\0\x3\x9e\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\xe\0T\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)

[GraphNodePos]
129%3AClient-129=@Variant(\0\0\0\x1a\xc0\x30\0\0\0\0\0\0\xc0(\0\0\0\0\0\0)
14%3AMidi%20Through%3AInput=@Variant(\0\0\0\x1a@s\xf0\0\0\0\0\0\xc0O\x80\0\0\0\0\0)
14%3AMidi%20Through%3AOutput=@Variant(\0\0\0\x1a\xc0q\xa0\0\0\0\0\0\xc0P\0\0\0\0\0\0)
20%3AUMC204HD%20192k%3AInput=@Variant(\0\0\0\x1a@t \0\0\0\0\0\xc0g`\0\0\0\0\0)
20%3AUMC204HD%20192k%3AOutput=@Variant(\0\0\0\x1a\xc0q\xc0\0\0\0\0\0\xc0\x66 \0\0\0\0\0)
PulseAudio%20JACK%20Sink="@Variant(\0\0\0\x1a\xc0$\0\0\0\0\0\0\xc0,\0\0\0\0\0\0)"
PulseAudio%20JACK%20Sink-01=@Variant(\0\0\0\x1a@\x1c\0\0\0\0\0\0@|\xe0\0\0\0\0\0)
PulseAudio%20JACK%20Source=@Variant(\0\0\0\x1a\xc0\x14\0\0\0\0\0\0@r0\0\0\0\0\0)
PulseAudio%20JACK%20Source-01=@Variant(\0\0\0\x1a\xc0\x82@\0\0\0\0\0@g\0\0\0\0\0\0)
REAPER=@Variant(\0\0\0\x1a\xc0&\0\0\0\0\0\0@Y\x80\0\0\0\0\0)
pulse_in=@Variant(\0\0\0\x1a\xc0@\0\0\0\0\0\0\xc0`\xc0\0\0\0\0\0)
pulse_out=@Variant(\0\0\0\x1a\xc0\x1c\0\0\0\0\0\0@C\x80\0\0\0\0\0)
system%3AInput=@Variant(\0\0\0\x1a@s`\0\0\0\0\0@c\xa0\0\0\0\0\0)
system%3AOutput=@Variant(\0\0\0\x1a\xc0x\x10\0\0\0\0\0@f`\0\0\0\0\0)

[GraphView]
Menubar=true
SortOrder=0
SortType=0
Statusbar=true
TextBesideIcons=true
Toolbar=true
ZoomRange=false

[History]
MessagesLogPathComboBox\Item1=qjackctl.log
PostShutdownScriptShellComboBox\Item1=pacmd suspend false
PostStartupScriptShellComboBox\Item1=pactl load-module module-jack-sink && pactl load-module module-jack-source && pactl set-default-sink jack_out && pacmd set-default-source jack_in && pacmd list-sink-inputs | grep index | sed 's/ *index: *//g' | xargs -I{} pacmd move-sink-input \"{}\" jack_out
PostStartupScriptShellComboBox\Item2=pactl set-default-sink jack_out
ServerConfigNameComboBox\Item1=.jackdrc
ServerNameComboBox\Item1=(default)
ServerPrefixComboBox\Item1=/usr/bin/jackd
ServerPrefixComboBox\Item2=jackd
ServerPrefixComboBox\Item3=jackdmp
ServerPrefixComboBox\Item4=jackstart
XrunRegexComboBox\Item1=xrun of at least ([0-9|\\.]+) msecs
XrunRegexComboBox\Item2=d\xe9synchronisation (XRUN) d'au moins ([0-9|\\.]+) ms

[Options]
ActivePatchbay=false
ActivePatchbayPath=
ActivePatchbayReset=false
AliasesEditing=false
AliasesEnabled=false
AlsaSeqEnabled=true
BaseFontSize=0
BezierLines=false
ConnectionsFont="Sans Serif,10,-1,5,75,0,0,0,0,0"
ConnectionsIconSize=0
CustomColorTheme=
CustomStyleTheme=
DBusEnabled=true
DisplayBlink=true
DisplayEffect=true
DisplayFont1="Sans Serif,12,-1,5,75,0,0,0,0,0"
DisplayFont2="Sans Serif,6,-1,5,75,0,0,0,0,0"
GraphButton=true
JackClientPortAlias=0
JackClientPortMetadata=false
JackDBusEnabled=true
KeepOnTop=false
LeftButtons=true
MessagesFont="Monospace,8,-1,5,75,0,0,0,0,0"
MessagesLimit=true
MessagesLimitLines=1000
MessagesLog=false
MessagesLogPath=qjackctl.log
PostShutdownScript=true
PostShutdownScriptShell=pacmd suspend false
PostStartupScript=true
PostStartupScriptShell=pactl load-module module-jack-sink && pactl load-module module-jack-source && pactl set-default-sink jack_out && pacmd set-default-source jack_in && pacmd list-sink-inputs | grep index | sed 's/ *index: *//g' | xargs -I{} pacmd move-sink-input \"{}\" jack_out
QueryClose=true
QueryDisconnect=true
QueryRestart=false
QueryShutdown=true
RightButtons=true
ServerConfig=true
ServerConfigName=.jackdrc
ServerConfigTemp=false
ShutdownScript=false
ShutdownScriptShell=
Singleton=true
StartJack=false
StartMinimized=false
StartupScript=false
StartupScriptShell=
StdoutCapture=true
StopJack=true
SystemTray=false
SystemTrayQueryClose=true
TextLabels=true
TimeDisplay=0
TimeFormat=0
TransportButtons=true
XrunRegex=xrun of at least ([0-9|\\.]+) msecs

[Presets]
DefPreset=(default)

[Program]
Version=0.9.1

[Settings]
Audio=0
Chan=0
Dither=0
Driver=alsa
Frames=1024
HWMeter=false
HWMon=false
IgnoreHW=false
InChannels=0
InDevice=
InLatency=0
Interface=hw:U192k
MidiDriver=aucun
Monitor=false
NoMemLock=false
OutChannels=0
OutDevice=
OutLatency=0
Periods=2
PortMax=256
Priority=5
Realtime=true
SampleRate=44100
Server=/usr/bin/jackd
ServerName=
ServerSuffix=
Shorts=false
SoftMode=false
StartDelay=2
Timeout=500
UnlockMem=false
Verbose=false
Wait=21333
WordLength=16

[Splitter]
AlsaConnectView\sizes=38, 20, 38
AudioConnectView\sizes=268, 92, 268
InfraClientSplitter\sizes=128, 151
MidiConnectView\sizes=38, 20, 38
PatchbayView\sizes=38, 20, 38



Mon premier problème à résoudre est donc de "trouver l'accès" à mon clavier MIDI. :-)

Merci de votre aide !

jujudusud utilisateur non connecté France
Bonjour lmGuillaume,

si je lis bien ton graph de connection, tu dois connecter l'entrée midi N°20 qui s'appelle aussi MIDI1 (en haut à gauche) de carte son avec l'entree midi rouge de Reaper.

lmGuillaume utilisateur non connecté
Merci jujudusud,


C'est-à-dire, dans le graphe, en faisant un glisser-déposer de l'entrée en haut à gauche vers l'entrée midi rouge de Reaper ?

J'ai essayé, mais ça "n'accroche pas" la connexion quand je relâche sur l'entrée Reaper.

sub26nico utilisateur non connecté France
Le pont ALSA-MIDI->JACK-MIDI semble ne pas être lancé.
Peut être que cette commande pourra résoudre le problème :
a2j -e


jujudusud utilisateur non connecté France
Ce serait le pont alsa midi -> Jack midi qui manque ?
a2jmidid -e &

sinon il n'est pas possible de demander à Reaper d'attendre du midi venant de ALSA directement ?

sub26nico utilisateur non connecté France
Citation :
sinon il n'est pas possible de demander à Reaper d'attendre du midi venant de ALSA directement ?

Pas si JACK est démarré et que Reaper est configuré pour communiquer avec JACK (sans le pont ALSA->JACK). Par contre, si Reaper est configuré sur ALSA, c'est ALSA-MIDI qui sera fonctionnel.

lmGuillaume utilisateur non connecté
Merci, avec la ligne complète à exécuter après démarrage de JACK, ça fonctionne :
pactl load-module module-jack-sink && pactl load-module module-jack-source && pactl set-default-sink jack_out && pacmd set-default-source jack_in && pacmd list-sink-inputs | grep index | sed 's/ *index: *//g' | xargs -I{} pacmd move-sink-input "{}" jack_out && a2jmidid -e &


Est-ce que je dois fermer ce pont MIDI derrière moi après l'extinction de JACK ? Pour l'instant j'ai ça :
pacmd suspend false


J'avais de la latence avec la config par défaut 1024 / 44100 * 2.

J'ai suivi ces instructions : https://doc.ubuntu-fr.org/jackd#optimisation

À 16 / 48000 * 3, pas de latence, mais ça crépitait dans tous les sens.
À 32 / 48000 * 3, pas de latence, pas de crépitements, mais quelques XRUNS :
16:07:00.435 Script post-démarrage terminé avec succès.
16:07:00.436 Changement des connexions JACK.
16:07:18.501 Changement du graphe des connexions JACK.
16:07:18.570 Changement du graphe des connexions JACK.
16:07:18.738 Changement des connexions JACK.
16:07:18.790 Récupération désynchronisation (XRUN) (1).
16:07:20.560 Récupération de désynchronisation (XRUN) (15 sauté).
16:07:30.899 Récupération désynchronisation (XRUN) (17).
16:07:38.779 Récupération désynchronisation (XRUN) (18).
16:07:41.951 Récupération désynchronisation (XRUN) (19).
16:07:47.196 Récupération désynchronisation (XRUN) (20).
16:07:48.693 Récupération de désynchronisation (XRUN) (2 sauté).
16:07:57.379 Récupération désynchronisation (XRUN) (23).
16:07:58.743 Récupération de désynchronisation (XRUN) (3 sauté).
16:08:03.754 Récupération désynchronisation (XRUN) (27).
16:08:04.775 Récupération de désynchronisation (XRUN) (8 sauté).
16:08:58.380 Récupération désynchronisation (XRUN) (36).
16:08:59.050 Récupération de désynchronisation (XRUN) (4 sauté).
16:09:52.720 Récupération désynchronisation (XRUN) (41).
16:09:59.380 Récupération désynchronisation (XRUN) (42).
16:10:01.357 Récupération de désynchronisation (XRUN) (5 sauté).
16:10:14.707 Récupération désynchronisation (XRUN) (48).
16:11:00.379 Récupération désynchronisation (XRUN) (49).
16:11:01.665 Récupération de désynchronisation (XRUN) (3 sauté).
16:11:04.491 Récupération désynchronisation (XRUN) (53).
16:11:05.699 Récupération de désynchronisation (XRUN) (1 sauté).
16:11:47.439 Récupération désynchronisation (XRUN) (55).
16:11:47.879 Récupération de désynchronisation (XRUN) (1 sauté).
16:12:01.380 Récupération désynchronisation (XRUN) (58).
16:12:01.924 Récupération de désynchronisation (XRUN) (6 sauté).


Si j'ai bien compris, je fais monter la quantité d'échantillons jusqu'à ce que je n'aie plus de XRUN, mais avant d'entendre la latence.

Youpi. Prochaine étape, mettre batterie+clavier à la suite, car je n'ai qu'une entrée MIDI sur ma carte son. Au boulot. :-)

jujudusud utilisateur non connecté France
C'est chouette ! :-)

Alors pour répondre à tes questions,

le pont, tu peux le laisser ouvert... ça pose aucun problème ou le fermer ... bref, comme tu veux.
Cela dit, dans la page ubuntu, il disent que ça permet de relancer Pulseaudio quand tu fermes Jack. pourquoi s'en priver ?

Pour la taille de "Frames/Périod" le nombre d'échantillons par cycle, il faut y aller tranquillement.
128 représente un minimum chez moi. je n'entends plus de latence depuis un moment...