IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

[SON - Linux] Acquisition temps réel


Sujet :

Administration système

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é ?

  2. #2
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut
    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    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.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut


    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.

  5. #5
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut
    il n'en existe pas
    tout ce qui concerne alsa est dans /dev/snd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    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.

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  9. #9
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    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.

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    J'ai trouvé un tutorial très complet :
    http://www.pcinpact.com/forum/sujet_59074.htm

Discussions similaires

  1. Acquisition de données USB temps réel sous Linux Xenomai
    Par nourryan dans le forum Matériel
    Réponses: 1
    Dernier message: 03/05/2012, 14h45
  2. Acquisition temps réel d'un signal audio
    Par zolle1 dans le forum Signal
    Réponses: 9
    Dernier message: 27/06/2011, 15h23
  3. Réponses: 0
    Dernier message: 24/09/2009, 10h00
  4. Tracer Temps Réel avec la Data Acquisition Toolbox
    Par Dizayeure dans le forum MATLAB
    Réponses: 0
    Dernier message: 26/04/2008, 14h50
  5. Temps réel Embarqué sous linux
    Par naima2005 dans le forum Administration système
    Réponses: 1
    Dernier message: 08/01/2007, 06h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo