#1 Le 07/03/2020, à 16:12
- solivier
Augmenter le nombre de loopback alsa limité à 32
Bonjour,
Dans le cadre d'un projet du traitement du signal j'aurais besoin d'une centaine de loopback alsa.
Cela fait plusieurs année que je travail avec ceci.
Actuellement lorsque l'on ajoute une carte son ou une loopback (carte son virtuelle), l'on spécifie également un ID. Cet index est limité à 32 maximum.
J'ai bien essayé de recompiler le noyaux en augmentant cet index mais cela ne semble pas fonctionner.
sudo add-apt-repository universe
ajouter: deb-src [url]http://archive.ubuntu.com/ubuntu[/url] bionic main universe dans /etc/apt/source.list
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y flex kernel-wedge build-essential fakeroot libncurses5-dev ccache kernel-package libncurses5-dev fakeroot wget bzip2
libssl-dev gawk libudev-dev ocl-icd-opencl-dev libpci-dev libelf-dev libusb-* dpkg-dev screen kernel-wedge git linux-headers-4.15.0-38-generic linux-headers-4.15.0-38-lowlatency git flex bison bc libssl-dev gawk libudev-dev ocl-icd-opencl-dev libpci-dev libelf-dev python2.7 libncurses-dev fakeroot kernel-wedge binfmt-support ksh lsscsi binfmt-support libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libsepol1-dev libattr1-dev libblkid-dev libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev uuid-dev debugedit libarchive13 libdw1 liblua5.2-0 liblzo2-2 libnspr4 libnss3 librpm8 librpmbuild8 librpmio8 librpmsign8 rpm rpm-common rpm2cpio spl-dkms asciidoc default-jdk
cd /tmp
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git
cd ubuntu-bionic
[b]#ceci me sert à augmenter les sample rates[/b]
sed -i 's/SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_192000,/SNDRV_PCM_RATE_CONTINUOUS,/g' ./sound/drivers/aloop.c
sed -i 's/192000/768000/g' ./sound/drivers/aloop.c
[b]
#ceci me permet normalement d'augmenter l'ID jusqu'à 256 cartes[/b]
grep -rnl './' -e "CONFIG_SND_MAX_CARDS=32" | xargs -i@ sed -i 's/CONFIG_SND_MAX_CARDS=32/CONFIG_SND_MAX_CARDS=256/g' @
fakeroot debian/rules clean
fakeroot debian/rules binary
=> avec le numéro du noyaux:
dpkg -i linux*4.15.0-88*.deb
Mais cela ne semble pas fonctionner, lorsque je déclare plus de 32 cartes.
sudo nano /etc/modprobe.d/alsa-base.conf
#j'ajoute :
options snd-aloop \
index=10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32 \
id=lp0,lp1,lp2,lp3,lp4,lp5,lp6,lp7,lp8,lp9,lp10,lp11,lp12,lp13,lp14,lp15,lp16,lp17,lp18,lp19,lp20,lp21,lp22 \
enable=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 \
pcm_substreams=2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 /
Quand je fais un aplay -L cela s’arrête à lp21.
Par contre lorsque je fais
ls /proc/asound/
card10
card11
card12
card13
card14
card15
card16
card17
card18
card19
card20
card21
card22
card23
card24
card25
card26
card27
card28
card29
card30
card31
card32
cards
devices
lp0->card10
lp1->card11
lp10->card20
lp11->card21
lp12->card22
lp13->card23
lp14->card24
lp15->card25
lp16->card26
lp17->card27
lp18->card28
lp19->card29
lp2->card12
lp20->card30
lp21->card31
lp22->card32
lp3->card13
lp4->card14
lp5->card15
lp6->card16
lp7->card17
lp8->card18
lp9->card19
modules
oss
pcm
seq
timers
version
Donc je retrouve bien ma carte son avec ID à 32.
Lorsque je fait :
$ speaker-test -D hw:lp21,1
speaker-test 1.1.3
Playback device is hw:lp21,1
Stream parameters are 48000Hz, S16_LE, 1 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 32 to 1048576
Period size range from 32 to 524288
Using max buffer size 1048576
Periods = 4
was set period_size = 262144
was set buffer_size = 1048576
0 - Front Left
^CTime per period = 0,878061
Mais quand j’essaie sur la 32ème:
$ speaker-test -D hw:lp22,0
speaker-test 1.1.3
Playback device is hw:lp22,0
Stream parameters are 48000Hz, S16_LE, 1 channels
Using 16 octaves of pink noise
ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
Playback open error: -19,No such device
Quelqu'un peut-il me dire où cela bloque?
(pareil avec alsacap il me retourne que jusqu'à la 21)
En vous remerciant par avance.
Dernière modification par solivier (Le 07/03/2020, à 17:58)
Hors ligne
#2 Le 07/03/2020, à 16:39
- solivier
Re : Augmenter le nombre de loopback alsa limité à 32
Je crois que k'avance tout doucement, il semble que cela soit bloqué dans https://github.com/michaelwu/alsa-lib/b … m/pcm_hw.c
ligne 1399
card = snd_card_get_index(str);
if (card < 0) {
SNDERR("Invalid value for %s", id);
return card;
}
Dans https://github.com/michaelwu/alsa-lib/b … ol/cards.c fonction snd_card_get_index:
ligne 146 :
for (card = 0; card < 32; card++) {
Ils ont oublié qu'on pouvais avoir plus de 32 cartes.
Si jamais quelqu'un à un avis la dessus, j'ai peut-être zappé quelque chose.
Je vais envoyer un mail a alsa devel pour voir.
Dernière modification par solivier (Le 07/03/2020, à 17:58)
Hors ligne
#3 Le 07/03/2020, à 16:44
- xubu1957
Re : Augmenter le nombre de loopback alsa limité à 32
Bonjour,
Pour ajouter toi-même les balises code à tes précédents messages #1 et #2 :
Cliquer sur le lien « Modifier » en bas à droite du message
Sélectionner le texte
Cliquer sur le <> de l'éditeur de message
comme indiqué dans le lien : Retour utilisable de commande
Voir règles du forum > balises BB code
Balise CODE :
C'est la balise à utiliser pour donner de longs messages d'erreurs, des contenus de fichiers de configuration, des commandes à taper, etc … Elle permet des messages plus "compacts", et est moins ambiguë que d'autres polices sur certains caractères.
Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Réso|u] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci. Membre de Linux-Azur
Hors ligne
#4 Le 07/03/2020, à 18:13
- solivier
Re : Augmenter le nombre de loopback alsa limité à 32
Je viens de vérifier sur le git officiel https://github.com/alsa-project/alsa-lib
Ils ont bien corrigés avec https://github.com/alsa-project/alsa-lib avec SND_MAX_CARDS comme pour la compilation du noyaux mais du coup je ne comprends pas pourquoi ce n'est pas pris en compte.
Hors ligne