Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/04/2007, 00h53   #1
Membre émérite
 
Inscription : juin 2006
Messages : 1 117
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2006
Messages : 1 117
Points : 989
Points : 989
Par défaut [SON - Linux] Acquisition temps réel

Bonjour.

Je cherche un moyen de capturer le flux issu de ma carte son (Le CD que je joue par exemple, où la bande sonore d'un DVD). J'ai trouvé pas mal de programmes qui remplissent bien cette tâche, comme sound-recorder et arecord, mais ils enregistrent tous deux à partir de /dev/dsp par défaut, ce qui ne me donne strictement rien (fichier .wav vide f(t)=0 ) Je n'arrive pas à savoir quel "device" utiliser, c'est à dire quel /dev/xxx.
J'ai ls /dev :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
adsp     gpmctl   loop6      pts    ptypd  ram5    sda6      stdout  tty2   tty32  tty45  tty58  ttyp4  ttyS2           usbdev1.4_ep81  vcs5
audio    hpet     loop7      ptyp0  ptype  ram6    sda7      tty     tty20  tty33  tty46  tty59  ttyp5  ttyS3           usbdev1.4_ep82  vcs6
bus      initctl  MAKEDEV    ptyp1  ptypf  ram7    sdb       tty0    tty21  tty34  tty47  tty6   ttyp6  urandom         usbdev1.4_ep83  vcs7
cdrom    input    mapper     ptyp2  ram0   ram8    sdb3      tty1    tty22  tty35  tty48  tty60  ttyp7  usb             usbdev1.4_ep84  vcsa
cdrw     kmem     mem        ptyp3  ram1   ram9    sg0       tty10   tty23  tty36  tty49  tty61  ttyp8  usbdev1.1_ep00  usbdev2.1_ep00  vcsa1
console  kmsg     mixer      ptyp4  ram10  random  sg1       tty11   tty24  tty37  tty5   tty62  ttyp9  usbdev1.1_ep81  usbdev2.1_ep81  vcsa2
core     log      net        ptyp5  ram11  rtc     sg2       tty12   tty25  tty38  tty50  tty63  ttypa  usbdev1.2_ep00  usbdev2.5_ep00  vcsa3
disk     loop     null       ptyp6  ram12  scd0    shm       tty13   tty26  tty39  tty51  tty7   ttypb  usbdev1.2_ep81  usbdev2.5_ep01  vcsa4
dsp      loop0    nvidia0    ptyp7  ram13  sda     snapshot  tty14   tty27  tty4   tty52  tty8   ttypc  usbdev1.2_ep82  usbdev2.5_ep82  vcsa5
dvd      loop1    nvidiactl  ptyp8  ram14  sda1    snd       tty15   tty28  tty40  tty53  tty9   ttypd  usbdev1.3_ep00  vcs             vcsa6
dvdrw    loop2    port       ptyp9  ram15  sda2    sndstat   tty16   tty29  tty41  tty54  ttyp0  ttype  usbdev1.3_ep81  vcs1            vcsa7
fd       loop3    ppp        ptypa  ram2   sda3    sr0       tty17   tty3   tty42  tty55  ttyp1  ttypf  usbdev1.4_ep00  vcs2            xconsole
fd0      loop4    psaux      ptypb  ram3   sda4    stderr    tty18   tty30  tty43  tty56  ttyp2  ttyS0  usbdev1.4_ep01  vcs3            zero
full     loop5    ptmx       ptypc  ram4   sda5    stdin     tty19   tty31  tty44  tty57  ttyp3  ttyS1  usbdev1.4_ep03  vcs4
et ls /dev/snd :

Code :
controlC0  pcmC0D0c  pcmC0D0p  pcmC0D1c  pcmC0D2p  timer

Et je n'arrive pas à savoir qui est quoi. Pouvez vous me dire sur quel périphérique je dois enregistrer pour capturer le flux audio joué ?
kromartien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 09h03   #2
Rédacteur/Modérateur
 
Avatar de Michaël
 
Michaël Todorovic
Ingénieur systèmes et réseaux
Inscription : juillet 2003
Messages : 3 493
Détails du profil
Informations personnelles :
Nom : Michaël Todorovic
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2003
Messages : 3 493
Points : 5 899
Points : 5 899
salut,
à priori, tu utilises alsa et c'est pas aussi simple à utiliser que oss (pas de device dans /dev qui transporte le son)
il faut que tu regardes comment enregistrer du son avec libalsa : il y a un exemple d'enregistrement pcm dans leur doc

regardes aussi du coté de arecord pour avoir un exemple concret
Michaël est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 10h11   #3
Invité de passage
 
Inscription : mars 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 5
Points : 2
Points : 2
Salut,

je suis à peu près dans la même démarche. J'essaie d'écrire un programme qui permet de pouvoir lire ce qui il y a en entrée de ma carte son en utilisant ALSA, mais ce n'est pas très évident...

Effectivement, tu pourras trouver des infos sur leur site, mais je ne le trouve pas terrible, je t'avoue :
http://www.alsa-project.org/alsa-doc...c-example.html
mais surtout,
http://www.alsa-project.org/alsa-doc...c-example.html
il y a une partie sur la lecture de ce qui se passe en entrée.

Maintenant, si tu veux enregistrer en temps réel, tu peux toujours utiliser JACKit (http://jackaudio.org/). Là tu as un patch temps réel qui te permet de faire du pseudo-TR et c'est plus facile de l'utiliser. Sans parler des différentes applications déjà développées pour JACKit (http://jackaudio.org/applications)

K.
kerpoint est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 13h09   #4
Membre émérite
 
Inscription : juin 2006
Messages : 1 117
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2006
Messages : 1 117
Points : 989
Points : 989


Heuuhh. Merci beaucoup pour cette indication. Nénamoins, je n'ai pas tellement envie de compiler ce code ni de l'utiliser. J'aimerai juste, vraiment avoir un nom de périphérique à capturer, parce que ... Je ne sais pas si la paresse est une explication, mais, ... Pas trop envide compiler ce code quoi ... Quoique tu vas me convaincre
Capture au format PCM ? Non je veux juste faire un échantillonnage, et l'envoyer à l'encodeur mp3 par un pipe, ce serait l'idéal, avec sound-recorder ça devrait marcher.

Quand je dis "temps réel" je ne veux pas parler de demudi, etc les trucs compliqués, je veux juste enregistrer le flux qui passe vers mes enceintes à mesure qu'il est joué. Désolé d'avoir introduit cette confusion. Je cherche juste le fichier de périphérique.
kromartien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 14h35   #5
Rédacteur/Modérateur
 
Avatar de Michaël
 
Michaël Todorovic
Ingénieur systèmes et réseaux
Inscription : juillet 2003
Messages : 3 493
Détails du profil
Informations personnelles :
Nom : Michaël Todorovic
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2003
Messages : 3 493
Points : 5 899
Points : 5 899
il n'en existe pas
tout ce qui concerne alsa est dans /dev/snd
Code :
controlC0  pcmC0D0c  pcmC0D0p  pcmC0D1c  pcmC0D2p  timer
mais tu ne peux rien en faire directement. il faut obligatoirement passer par la librairie alsa ou par jack. regarde du coté de arecord, ça fait exactement ce que tu veux
Michaël est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 19h07   #6
Membre émérite
 
Inscription : juin 2006
Messages : 1 117
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2006
Messages : 1 117
Points : 989
Points : 989
Code :
arecord -d 10 -f cd -t wav -D copy foobar.wav
-d : duration (s)
-f : format de codage, ici qualité cd
-t : format de stockage, ici wav
-D : copy, périphérique définit dans le fichier de conf (ne fonctionne pas chez moi)
foobar.wav : fichier de stockage

Je vais donc choisir un des périphériques de /dev/snd.

Code :
1
2
3
4
5
6
7
8
9
10
moi@chezmoi:~$arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: NVidia [HDA NVidia], device 0: ALC883 Analog [ALC883 Analog]
  Subdevices: 2/2
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
card 0: NVidia [HDA NVidia], device 1: ALC883 Analog [ALC883 Analog]
  Subdevices: 2/2
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
quel fichier je choisis comme interface ? pcmC0D1c ou pcmC0D2p ? Aller, un test parallèle, et j'écoute tous les .wav à la suite, puis je vous communique les résultats. Merci en tout cas

oah ? Voilà ce que j'ai fait, et j'ai plein d'erreurs :
Code :
1
2
3
4
5
6
7
#!/bin/bash
 
k=0
for i in /dev/snd/*; do
        k=[k+1]
        arecord -d 10 -f cd -t wav -D $i ~/${k}.wav
done;
-->
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
moi@chezmoi:~$ ./capture.sh
ALSA lib pcm.c:2143:(snd_pcm_open_noupdate) Unknown PCM /dev/snd/controlC0
arecord: main:550: audio open error: Aucun fichier ou répertoire de ce type
ALSA lib pcm.c:2143:(snd_pcm_open_noupdate) Unknown PCM /dev/snd/pcmC0D0c
arecord: main:550: audio open error: Aucun fichier ou répertoire de ce type
ALSA lib pcm.c:2143:(snd_pcm_open_noupdate) Unknown PCM /dev/snd/pcmC0D0p
arecord: main:550: audio open error: Aucun fichier ou répertoire de ce type
ALSA lib pcm.c:2143:(snd_pcm_open_noupdate) Unknown PCM /dev/snd/pcmC0D1c
arecord: main:550: audio open error: Aucun fichier ou répertoire de ce type
ALSA lib pcm.c:2143:(snd_pcm_open_noupdate) Unknown PCM /dev/snd/pcmC0D2p
arecord: main:550: audio open error: Aucun fichier ou répertoire de ce type
ALSA lib pcm.c:2143:(snd_pcm_open_noupdate) Unknown PCM /dev/snd/timer
arecord: main:550: audio open error: Aucun fichier ou répertoire de ce type
less /proc/asound/devices :
Code :
1
2
3
4
5
6
  0: [ 0]   : control
 16: [ 0- 0]: digital audio playback
 18: [ 0- 2]: digital audio playback
 24: [ 0- 0]: digital audio capture
 25: [ 0- 1]: digital audio capture
 33:        : timer
kromartien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 10h58   #7
Membre émérite
 
Avatar de Celelibi
 
Inscription : janvier 2004
Messages : 990
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 990
Points : 822
Points : 822
Citation:
Envoyé par man arecord
-L, --list-pcms
List all PCMs defined

-D, --device=NAME
Select PCM by name
Tu utilise mal l'option -D.
Commence par faire arecord -L pour voir les PCM définis (ils sont définis dans /etc/asound.conf et ~/.asoundrc).

Ensuite il faut voir sur quel PCM tu joues un son pour savoir sur lequel il faut enregistrer. Mais ça va peut-être demander une modification des fichiers de conf.


Désolé kromartien mais il n'existe pas de device où tu pourra capturer le son comme tu le faisais avec OSS (via /dev/dsp).
Les devices dans /dev/snd ne s'utilisent pas du tout de la même façon que /dev/dsp. D'ailleurs c'est tellement différent qu'il faut laisser la libalsa s'en charger. :p
__________________
Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.
Celelibi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 16h51   #8
Membre émérite
 
Inscription : juin 2006
Messages : 1 117
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2006
Messages : 1 117
Points : 989
Points : 989
arecord -D me fournit le contenu de ce qui paraît être un fichier de configuration. Il est comme ça à peu près, avec une seule transition entre les deux :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
PCM list:
hw {
        @args.0 CARD
        @args.1 DEV
        @args.2 SUBDEV
        @args.CARD {
                type string
                default {
                        @func getenv
                        vars {
                                0 ALSA_PCM_CARD
                                1 ALSA_CARD
                        }
                        default {
                                @func refer
..............................................................
cards 'cards.pcm'
front 'cards.pcm.front'
rear 'cards.pcm.rear'
center_lfe 'cards.pcm.center_lfe'
side 'cards.pcm.side'
surround40 'cards.pcm.surround40'
surround41 'cards.pcm.surround41'
surround50 'cards.pcm.surround50'
surround51 'cards.pcm.surround51'
surround71 'cards.pcm.surround71'
iec958 'cards.pcm.iec958'
spdif 'cards.pcm.iec958'
modem 'cards.pcm.modem'
phoneline 'cards.pcm.phoneline'
default 'cards.pcm.default'
dmix 'cards.pcm.dmix'
dsnoop 'cards.pcm.dsnoop'
Je peux donner expressement un -D 'cards.pcm.front' ou un 'front', ça pourrait marcher ? Merci en tout cas.
kromartien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2007, 14h25   #9
Membre émérite
 
Avatar de Celelibi
 
Inscription : janvier 2004
Messages : 990
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 990
Points : 822
Points : 822
Il semblerais que tu n'ais pas touché aux fichiers de configuration /etc/asound.conf et ~/.asoundrc car la config sortie par arecord -L n'est rien d'autre que la configuration par défaut.

Je suppose que la lecture se fait sur le PCM "default" donc essaye peut-être d'enregistrer sur ce même PCM.


Cela dit je ne suis pas un pro de la configuration d'alsa, donc si ça marche pas, bah je sais pas.
__________________
Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.
Celelibi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2007, 14h32   #10
Membre émérite
 
Inscription : juin 2006
Messages : 1 117
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2006
Messages : 1 117
Points : 989
Points : 989
J'ai trouvé un tutorial très complet :
http://www.pcinpact.com/forum/sujet_59074.htm
kromartien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h25.


 
 
 
 
Partenaires

Hébergement Web