Jack : pas de son

Bonsoir à tous,

Rien savoir, il veut, à la main, par QjackCtl, flux radio, Youtube et ni Aplay ; pour ce qui est d’occuper le périphérique, c’est gratiné, surtout terriblement silencieux…

Lequel périphérique est un ICH10 des plus standards, tournant à merveille sous ALSA agrémenté, tant qu’à faire, de Dmix, versions actuelles sous la stable. Pas de Pulseaudio à l’horizon, à part quelques ineffables libs accrochées en dépendances par VLC et consorts ; mais ni l’exécutable, ni, bien sûr, le démon.

Le /etc/modprobe/alsa-base.conf, parce que d’abord je ne me souviens plus trop de ce que l’on met dans ces cas-là, et puis que sinon tout a l’air de marcher parfaitement… Misère :

[code]# autoloader aliases
install sound-slot-0 /sbin/modprobe snd-card-0
install sound-slot-1 /sbin/modprobe snd-card-1
install sound-slot-2 /sbin/modprobe snd-card-2
install sound-slot-3 /sbin/modprobe snd-card-3
install sound-slot-4 /sbin/modprobe snd-card-4
install sound-slot-5 /sbin/modprobe snd-card-5
install sound-slot-6 /sbin/modprobe snd-card-6
install sound-slot-7 /sbin/modprobe snd-card-7

Cause optional modules to be loaded above generic modules

install snd /sbin/modprobe --ignore-install snd && { /sbin/modprobe --quiet snd-
ioctl32 ; /sbin/modprobe --quiet snd-seq ; : ; }
install snd-rawmidi /sbin/modprobe --ignore-install snd-rawmidi && { /sbin/modpr
obe --quiet snd-seq-midi ; : ; }
install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 && { /sbin/modpr
obe --quiet snd-emu10k1-synth ; : ; }

Keep snd-pcsp from beeing loaded as first soundcard

options snd-pcsp index=-2

Keep snd-usb-audio from beeing loaded as first soundcard

options snd-usb-audio index=-2

Prevent abnormal drivers from grabbing index 0

options bt87x index=-2
options cx88_alsa index=-2
options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2
[/code]

La suite, dont je viens de pomper misérablement le canevas sur mon petit camarade (great thank’s !) de Jessie :

[code]user@CHE:~/Bureau$ cat /proc/asound/cards
0 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0xf7fd4000 irq 43
1 [NVidia ]: HDA-Intel - HDA NVidia
HDA NVidia at 0xf9ffc000 irq 17
2 [NVidia_1 ]: HDA-Intel - HDA NVidia
HDA NVidia at 0xfb9fc000 irq 19

user@CHE:~/Bureau$ cat /proc/asound/modules
0 snd_hda_intel
1 snd_hda_intel
2 snd_hda_intel

user@CHE:~/Bureau$ groups
user cdrom floppy audio dip video plugdev netdev powerdev scanner

user@CHE:~/Bureau$ lspci | grep udio
00:1b.0 Audio device: Intel Corporation 82801JI (ICH10 Family) HD Audio Controller
05:00.1 Audio device: NVIDIA Corporation GF110 High Definition Audio Controller (rev a1)
06:00.1 Audio device: NVIDIA Corporation GF110 High Definition Audio Controller (rev a1)

user@CHE:~/Bureau$ cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version 1.0.24.

user@CHE:~/Bureau$ uname -a
Linux CHE 3.2.0-4-rt-amd64 #1 SMP PREEMPT RT Debian 3.2.63-2+deb7u2 x86_64 GNU/Linux

user@CHE:~/Bureau$ aplay -l
**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: Intel [HDA Intel], périphérique 0: ALC889A Analog [ALC889A Analog]
Sous-périphériques: 0/1
Sous-périphérique #0: subdevice #0
carte 1: NVidia [HDA NVidia], périphérique 3: HDMI 0 [HDMI 0]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 1: NVidia [HDA NVidia], périphérique 7: HDMI 0 [HDMI 0]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 1: NVidia [HDA NVidia], périphérique 8: HDMI 0 [HDMI 0]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 1: NVidia [HDA NVidia], périphérique 9: HDMI 0 [HDMI 0]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 2: NVidia_1 [HDA NVidia], périphérique 3: HDMI 0 [HDMI 0]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 2: NVidia_1 [HDA NVidia], périphérique 7: HDMI 0 [HDMI 0]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 2: NVidia_1 [HDA NVidia], périphérique 8: HDMI 0 [HDMI 0]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 2: NVidia_1 [HDA NVidia], périphérique 9: HDMI 0 [HDMI 0]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
user@CHE:~/Bureau$
[/code]

Cela semble relativement peu courant, en outre…

Je l’utilise, essaie de l’utiliser avec Csound : les messages sont bons, simplement l’on n’entend rien ; par Aplay, périphérique occupé. Bien entendu, à chaque essai je pars d’une configuration nette en matière de son.

Je me pose aussi des questions sur la fonction “connect” de QjackCtl : dans le temps avec Rosegarden il fallait s’en servir pour raccrocher ce que voyait Jack. Là, même en interconnectant tout ce qui se propose, aucun changement, Jack demeure silencieux. On dirait qu’il ne voit rien, et pourtant si je lance, une fois le serveur Jack en route, mon flux radio ou bien Csound, ils ont l’air de se dévider normalement, ils ne sont pas bloqués par la présence de Jack au processeur son, les accueillant a priori comme il se doit, mais, malheureusement, dans un grand silence…

A+

Sergio

Au cours de mes pérégrinations, je suis tombé sur un .asoundrc orienté Jack, comme on dit, et au petit bonheur la chance j’ai refait mes essais avec lui, aucun résultat, il s’en tamponne royalement…

[code]pcm.!default {
type plug
slave { pcm “jack” }
}

pcm.jack {
type jack
playback_ports {
0 alsa_pcm:playback_1
1 alsa_pcm:playback_2
}
capture_ports {
0 alsa_pcm:capture_1
1 alsa_pcm:capture_2
}
}

ctl.mixer0 {
type hw
card 0
}
[/code]

Salut,

Pour le connecteur alsa-jack, il te faut le paquet libasound2-plugins, mais cette méthode n’est plus recommandée (il vaut mieux utiliser alsa-in). Ceci-dit, avant de chercher à rerouter Alsa dans Jack, il faudrait déjà faire marcher Jack tout seul.

Quelle version as-tu installé ? Jack1 ou Jack2 ?
Poste des captures d’écran de QJackCtl avec la fenêtre de configuration et la fenêtre connect (toute dépliée) lorsque Jack et Csound sont démarrés, ça aidera peut-être à y voir un peu plus clair.

Ave !

Merci grandement à toi de t’intéresser à mon lugubre cas…

. J’ai bien libasound2-plugins ; en revanche pas de trace nulle part de alsa-in, je pense que tu as voulu dire autre chose.
. J’ai bien jack2 et jackd2.

Enfin, je suis parfaitement d’accord que la question se ramène d’abord à faire tourner Jack seul, avec un flux radio, un Youtube ou n’importe quoi, le plus simple possible.

Opération capture, maintenant, là déjà faut pas mal que je me remembre…


Je sais pas si tu arrives à voir quelque chose, c’est la limite des quatre cents pixels en largeur. De toutes manières, pour celui-ci, aucune importance, il est intégralement standard ; j’ai fait divers essais, naturellement, mais je l’ai remis en standard, enfin je veux dire en “par défaut”, tel qu’on le trouve à l’installation de QjackCtl.



Guère mieux… Rien dans “Midi”, bien sûr. Csound tournant, un fichier de huit secondes. On ne voit strictement rien, pas la moindre connexion, alors que l’on peut les faire à la main, ce dont je ne me suis pas privé pour mes essais. Pourtant je pense que Jack entend Csound démarrer, puisque j’ai cru noter un frémissement dans les messages en le lançant ; mais, non en gras, c’est franchement illisible. Du côté Csound, affichage parfaitement normal, comme si j’étais en ALSA seul, simplement on n’entend rien avec Jack.

Comme tu vois, c’est pas gras. Il y a aussi les onglets arrière des “réglages” mais, comme je te le disais, QjackCtl est tout à neuf et par défaut, je lui avais tué son fichier de config, au nom biscornu, dans le .config.

On ne voit aucun client csound dans ton screenshot, il ne doit donc pas être bien configuré pour utiliser jack en sortie.
D’autre part, avoir un client jack n’est pas forcément synonyme de sortie audible, c’est juste qu’il est disponible dans le système pour être connecté à d’autres clients jack comme la sortie de ta carte son, et ce n’est pas forcément automatique. Regarde dans les paramètres csound des options du style autoconnect.
Tu peux par ailleurs tester rapidement que le serveur jackd fonctionne avec la commande jack_simple_client qui émet un bip continu.
VLC est également pratique pour tester jack (après installation du plugin vlc-plugin-jack), choisir jack comme sortie audio et dans les options avancées sélectionner connection automatique aux clients “system”.

Hourrah, jack_simple_client marche ! C’est pas beaucoup, mais voilà qui me rend un peu de courage, et même beaucoup ; VLC, maintenant…

VLC OK : il y a doute parce que par défaut il prendra toujours ALSA, mais si mon Jack est lancé, je vois bien VLC se connecter en system.

Nouvelle preuve pour VLC, et là c’est sérieux et intéressant, tournant sous Jack je récupère la souplesse du potentiomètre de VLC, qui sinon freeze de longues secondes avant d’exécuter quand même l’augmentation ou la diminution demandée, et ce, pour une raison jamais élucidée, mais depuis le passage en Wheezy stable il y a bientôt deux ans.

Adonc on va commencer à regarder pour de bon du côté de Csound ; reste quand même Youtube qui pour le moment n’est jamais pris en compte, et devient silencieux, quand Jack est lancé. Un plugin pour Chromium ? Faut que je regarde.

Bon pour Youtube sous Jack il y aurait effectivement un plugin Flashplayer pour Jack, mais à compiler from source, à mettre en paquet, etc.

Ok maintenant que jack fonctionne, voici comment rerouter alsa dans jack pour les applis du style navigateur/flash avec le programme alsa_in :

  1. il faut déclarer une carte son virtuelle de type loopback en chargeant le module snd-aloop (modprobe snd-aloop et ajouter une ligne dans /etc/modules au passage)

  2. ensuite configurer alsa pour lui dire d’utiliser cette carte par défaut avec ce fichier /etc/asound.conf ou ~/.asoundrc :

pcm.!default {
  type plug
    slave.pcm loop_duplex
}
pcm.loop_duplex {
  type asym
    playback.pcm ploop_dmix
    capture.pcm cloop_dsnoop
}
pcm.ploop_dmix {
  type dmix
    ipc_key 12345
    ipc_key_add_uid false
    ipc_perm 0660
    slave {
      pcm ploop_in
        period_size 1024
        buffer_size 4096
        format S32_LE
        rate 44100
    }
}
pcm.cloop_dsnoop {
  type dsnoop
    ipc_key 23456
    ipc_key_add_uid false
    ipc_perm 0660
    slave {
      pcm cloop_out
        period_size 1024
        buffer_size 4096
        format S32_LE
        rate 44100
    }
}
pcm.ploop_in {
  type hw
    card Loopback
    device 0
    subdevice 0
    format S32_LE
    rate 44100
}
pcm.ploop_out {
  type hw
    card Loopback
    device 1
    subdevice 0
    format S32_LE
    rate 44100
}
pcm.cloop_in {
  type hw
    card Loopback
    device 0
    subdevice 1
    format S32_LE
    rate 44100
}
pcm.cloop_out {
  type hw
    card Loopback
    device 1
    subdevice 1
    format S32_LE
    rate 44100
}
  1. enfin connecter la sortie de cette carte virtuelle au serveur jack (à mettre dans un script appelé par qjackctl par exemple) :
alsa_in -dploop_out -q0 &
jack_connect alsa_in:capture_1 system:playback_1
jack_connect alsa_in:capture_2 system:playback_2

OK, merci à toi, je vais étudier cela de près ; dans l’immédiat je suis allé sur le forum de Csound, où j’ai aussi d’épisodiques habitudes : on va bien voir, à mon avis cela doit être quelque chose de très gros et de très simple, que je ne puisse faire sortir Csound par JACK. D’ailleurs tout le monde dit là-bas que JACK est bien le mieux du mieux…

Bon cela prend bonne tournure, sur le forum Csound j’ai des palanquées de solutions pour déclarer, qui bien sûr marchent ; au début je ne pensais pas du tout que cela pouvait n’être que ça !

Tant qu’à faire je mets en résolu, on pourra toujours rajouter quelque chose ; en tous cas merci à toi de m’avoir tiré de là !

J’essayerais bien ton affaire pour Flash :

[quote]1. il faut déclarer une carte son virtuelle de type loopback en chargeant le module snd-aloop (modprobe snd-aloop et ajouter une ligne dans /etc/modules au passage)
[/quote]

Première question : comment faire marche arrière pour le modprobe si je me dégonfle ensuite ?

Seconde question : cette ligne à ajouter dans /etc/modules, quelle est-elle ?

L’actuel :

[code]user@CHE:~/Bureau$ more /etc/modules

/etc/modules: kernel modules to load at boot time.

This file contains the names of kernel modules that should be loaded

at boot time, one per line. Lines beginning with “#” are ignored.

Parameters can be specified after the module name.

firewire-sbp2
loop
[/code]

Le reste avec le script cela devrait coller.

A+

Sergio

modprobe charge un module du noyau en mémoire, au pire il ne sert à rien, sinon tu peux le supprimer avec la commande rmmod.
c’est pour ça que si l’on souhaite charger automatiquement ce module au démarrage du système il faut l’ajouter dans le fichier /etc/modules, mais tu n’es pas obligé de le faire dans un premier temps.

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

firewire-sbp2
loop
snd-aloop

au passage, on peut également configurer ce module en ajoutant un fichier /etc/modprobe.d/alsa-base-custom.conf

options snd-aloop pcm_substreams=2

cela permet de limiter la carte à 2 canaux (playback/capture dans notre cas) au lieu de 8 par défaut.

pour info il existe aussi une carte midi virtuelle avec le module snd-virmidi.

Eh bien voilà qui est fort clair ; merci à toi, une nouvelle fois !

Alors alors alors…

Ca marche pas mal, et même très bien, full OK pour les Youtube, et même mon Flightgear dont je me demandais ce qu’il allait devenir dans la bagarre ; il suit le reroutage et voilà tout. Je peux donc avoir toute la station sous Jack, ce qui simplifie bien les manipulations.

Deux détails : appelé par QjackCtl, le script m’ouvre bien en entrées les deux ports capture sous alsa_in, seulement il n’établit pas la connexion avec les playback ; lancé à la main dans un terminal, il fait tout bien !
Je te le remets, des fois que c’est moi qui aurais gaffé :

[code]#!/bin/sh

alsa_in -dploop_out -q0 &
jack_connect alsa_in:capture_1 system:playback_1
jack_connect alsa_in:capture_2 system:playback_2
[/code]
N’importe comment, il reste pas mal de trucs à essayer, mettre des exec, les droits, etc., et puis demeure la ressource de connecter à la main dans le GUI de QjackCtl, ce qui marche bien.

Ensuite le processus jackd reste vivant, maintenant, lorsque l’on arrête le serveur par QjackCtl ; dans la mesure où il sera en route toute la journée, effectivement je vois pas bien l’importance.

Dis-moi, tu as l’air assez ferré en JACK-ALSA, tu fais aussi de la musique ? Rosegarden ? Des arrangements avec Ardour et autres ?

A+

Sergio

pour le script, j’ai malencontreusement supprimé un sleep en recopiant la partie de mon script qui lance alsa_in :

#!/bin/sh

alsa_in -dploop_out -q0 &
sleep 1
jack_connect alsa_in:capture_1 system:playback_1
jack_connect alsa_in:capture_2 system:playback_2

et éventuellement rallonger la durée si tu as toujours des problèmes.

pour arrêter alsa_in lorsque jackd est stoppé, il me semble qu’il y a une option dans qjackctl pour lancer un script dans lequel il suffit de faire un killall alsa_in
personnellement je n’utilise plus qjackctl et je lance les processus jackd/alsa_in/a2jmidid dans des scripts à l’autostart de ma session. pour les connections j’utilise le programme catia du project kxstudio : kxstudio.sourceforge.net/Applications:Catia

dans les programmes utiles pour jack, je rajouterai aj-snapshot (paquet du même nom) qui permet de sauver et recharger un ensemble de connections jack/alsa-midi de manière très simple, sans rentrer dans les trucs plus compliqués que sont les gestionnaires de sessions comme lash/ladish/nsm…

au passage, tu as vu que la carte loopback est déclarée en full duplex, cela veut dire qu’il est possible d’envoyer un flux jack vers la partie capture en utilisant alsa_out qui fonctionne sur le même principe que alsa_in. en pratique c’est rarement utile et donc inutile de le lancer automatiquement (surtout que ça consomme du cpu), mais c’est juste pour info.

au niveau du reroutage alsa, pour compléter les cas possibles notamment pour les jeux qui forcent les sorties pulse, voici deux configurations à modifier :
dans /etc/environment, ajouter :

export SDL_AUDIODRIVER='alsa'

et si openal est installé, dans /etc/openal/alsoft.conf, ajouter :

drivers = alsa

sinon, je fais un peu de musique mais pas vraiment d’enregistrements, plutôt du jetable pour de l’impro. j’utilise principalement carla et calf pour les effets, ardour en séquenceur et de temps en temps le tracker renoise (un reste de ma période amiga :ugeek: ).

Je n’ai pas faut grand-chose, embêté par mes flux radio sous VLC.

Dans QjackCtl (que tu n’utilises plus, il faudra que je regarde cela aussi, pourtant il a l’air bien sympa), on peut lancer les scripts au démarrage ou après le démarrage. Je suppose qu’il y a des cas limite, comme on dit, pour se voir offrir ces deux options. Effectivement le serveur met du temps à être complètement en route, d’où les sleeps : j’ai conservé ton sleep de 1 (seconde, i suppose), même en lançant le script après le démarrage de Jackd. Ainsi, c’est parfait.

Il lui faut peut-être, plutôt, un temps de réaction après le lancement d’alsa_in, au reste ; enfin cela se ramène toujours à une question de tempo.

A+ pour la suite…

Sergio

Bon, eh bien me voilà parti pour une expérience longue durée en full JACK. Inutile de préciser que tous ces beaux fichiers sont dûment sauvegardés sur clés USB, l’upgrade Jessie est pour bientôt !

En plus j’ai un JACK avec Dmix, auparavant je tournais en ALSA Dmix, j’avoue que la différence, à l’oreille… Seulement j’imagine que JACK renferme en sus pas mal d’autres possibilités que je vais bien finir par découvrir.

Merci à toi de cette aide extrêmement complète, ce qui au reste n’était pas de trop, attendu que j’étais dans le domaine le Béotien des plus complets !

A+

Sergio