Forum Linux.général Faisabilité d'un système de diffusion audio multizones et multisources

Posté par .
5
23
juil.
2012

Bonjour,

Je réfléchis à mettre en place chez moi un système audio de diffusion multizones et surtout multisources.
Voici dans les grandes lignes le principe:

Diffusion:
- Une zone audio peut être vue comme une pièce de la maison.
- Chaque zone à une paire d'enceintes stéréo
- Chaque paires d'enceintes est reliée à son propre ampli
- Tout les amplis sont reliés à une unique carte son possédant plusieurs sorties analogiques, chaque ampli utilise une seule sortie analogique de la carte.

Source: (chaque source correspond à un logiciel)
- Une source Spotify avec sa libspotify utilisant ALSA
- Une source radio, programme lisant une radio au choix en provenance d'internet
- Une source bibliotheque audio, programme lisant un flux à partir d'un serveur multimédia, ex: mediatomb
- Etc, le nombre de sources sera limité par mon imagination :)

J'ai donc une liste de sources audio, et un système de diffusion branché sur la carte son.
Je part du principe que les sources émettent en permanence.

Et c'est la que ça devient intéressant. J'utilise linux depuis un bon moment, mais je n'ai toujours rien comprit au fonctionnement de la couche audio, a part la mise en place d'un ALSA de base et sa configuration pour une seule sortie son.

Savez-vous comment router le son émit par un programme spécifique vers une sortie audio spécifique de la carte son, sachant qu'il doit être possible de changer la route à la volée?
Ou tout du moins cela est-il faisable avec ALSA, Jack ou pulseaudio?
De plus il faudrait qu'un seule source puisse être diffusée dans plusieurs zones.

Le but final serait d'avoir une petite interface graphique, avec la liste des zones, et une fois la zone sélectionnée, lui attribuer un source, ou inversement.

Si vous avez la moindre piste je suis preneur.

  • # Beau projet

    Posté par . Évalué à 2.

    Tu devrais effectivement regarder du coté de pulse audio car tu peux gérer différentes sorties dans /etc/pulse/default.pa.
    Changer la sortie à la volée je ne sais pas contre pas ce que ca donne ni même si une sortie sur plusieurs canaux simultanément est possible… même si je pense que c'est le cas… mais malheureusement je n'ai pas de pc avec deux cartes son sous la main.

    Pour jack je pense malheureusement que l'interface sera un peu compliquée à manipuler au quotidien car ça va peut être un peu loin pour ce que tu veux faire.

    Au passage si tu cherches une carte son avec beaucoup de sorties bien supportée qui ne te ruines pas, tu as les M-Audio Delta 1010.

    Bon courage et tiens nous au courant de la suite.

    • [^] # Re: Beau projet

      Posté par . Évalué à 1.

      Pour ce qui est de la carte son, justement la M-Audio delta 1010 fait partie de ma short list, content d'apprendre qu'elle soit bien supportée. Je regarde aussi du coté de la Auzuntech X-Meridian 7.1 2G un peu moins chère, qui pourrait être suffisante pour 4 zones.

      Il existe des appareils qui font tout ça out of box, mais le premier prix pour 4 zones commence à 3k3€… Avec interface proprio, et toutes les limitations qui vont avec.

      Pour la facilité de manipulation, je compte caler ça dans des webservices qui pourront être appelé par différents type de terminaux. C'est un projet de longue haleine avec une grosse partie domotique, mais j'ai tout mon temps :)

      Il faut surtout que la couche de routage audio soit pilotable logiciellement.
      Je vais faire quelques tests avec pulseaudio.

    • [^] # Re: Beau projet

      Posté par (page perso) . Évalué à 2.

      Sur la liste linux-audio-user, il y a eu il y a quelques mois de bons commentaires sur la PreSonus AudioBox 1818VSL par rapport à la M-Audio Delta 1010, il peut y avoir l'avantage que ça se branche en USB.

      Pour jack, je pense qu'évidemment il y a du bricolage à faire, mais que c'est pas non plus très compliqué d'obtenir une interface utilisable au quotidien, même sans grandes connaissances en programmation. Une idée serait par exemple d'avoir plusieurs modèles de configurations pour jack.plumbing, et de simplement écraser le fichier de configuration par le modèle qu'on veut à un moment donné (et de redémarrer jack.plumbing). Un modèle ça pourrait par exemple être

      (connect "MPlayer \[[0-9]+\]:out_0" "alsa_pcm:playback_1")
      (connect "MPlayer \[[0-9]+\]:out_1" "alsa_pcm:playback_2")
      
      (connect "vlc_[0-9]+:out_1" "alsa_pcm:playback_3")
      (connect "vlc_[0-9]+:out_2" "alsa_pcm:playback_4")
      
      

      mplayer est ainsi routé pour envoyer vers les deux premières sorties et vlc sur les deux suivantes.

      Suffit alors de proposer une interface avec quelques gros boutons pour passer d'un modèle à l'autre, voire peut-être d'avoir les deux séries sources / sorties et de générer à la volée le fichier de config de jack.plumbing. (bon, j'oublie quelques complexités, il faut par exemple aussi penser à débrancher les connexions, mais l'idée est la même)

      Enfin voilà, de l'imagination, un peu de courage, quelques pages de man, et ça doit pouvoir faire un système sympa.

      • [^] # Re: Beau projet

        Posté par . Évalué à 1.

        La PreSonus AudioBox 1818VSL m'a l'air un peu "overkill" pour débuter :) mais il est intéressant de voir que ce genre de matos existe.

        Je vais attaquer la doc de jack, apparemment c'est une bonne solution.
        Et apparemment il serait pilotable via dbus.

        Merci pour vos infos :)

  • # DLNA, c'est fait pour ca

    Posté par . Évalué à 3. Dernière modification le 23/07/12 à 19:15.

    ca permet de selectionner une source (Emetteur DLNA),
    et de la diffuser sur un receveur

    pour un peu que tu disposes d'un appareil qui sache etre une "remote"

    tu peux alors piloter tes divers appareils (receveur) à partir de ce "remote" pour leur dire d'aller prendre telle ou telle source.

    • [^] # Re: DLNA, c'est fait pour ca

      Posté par . Évalué à 1.

      C'est en effet une idée a creuser.

      Mais ce qui me fait peur dans ce genre d'installation c'est :
      - le risque de décalage du son entre plusieurs zones avec une seule source (buffers, latence réseau, etc), surtout que je peux pas tester sans avoir investit dans un minimum de matos.
      - la qualité du son HI-FI pouvant être retranscrit comparé au système que j'ai proposé.

      Mais c'est vrai que c'est une solution qui serait plus pratique.

      • [^] # Re: DLNA, c'est fait pour ca

        Posté par . Évalué à 2.

        • le risque de décalage du son entre plusieurs zones avec une seule source (buffers, latence réseau, etc), surtout que je peux pas tester sans avoir investit dans un minimum de matos.

        la latence reseau, evidemment, mais comme tous tes appareils sont reliés au meme reseau, si tu fais du multicast, ca doit arrivé en meme temps, et ca t'evite de tirer un cable audio au travers de chaque piece.

        tester sans investir : 2 PCs (un serveur DLNA, un client DLNA), un mobile faire la remote

  • # Vous ici ?

    Posté par (page perso) . Évalué à 1. Dernière modification le 24/07/12 à 09:57.

    J'ai eu le même genre d'idée… pas encore réalisé donc ton post m'intéresse grandement. De mon coté je serais parti sur une base mpd + pulse/icecast2, de ce que j'ai compris :
    - mpd : te donne une interface de contrôle du son décentralisable
    - pulse ou icecast2 : permettent d’émettre du son sur en streamming sur le réseau.

    Donc un PC faible consommation avec un gros disque dur redondé pour stocker la musique et se connecter au flux réseau, des entités basées sur rapberry pi ou dans chaque pièce, un peu de dev pour faire une interface tip top qui colle et hop.

    Cette architecture n'est absolument pas figée pour l'instant et elle évolue en fonction de mes veilles technique… si mes idées t’intéressent n'hésites à me le dire à deux on est plus fort :)

    • [^] # Re: Vous ici ?

      Posté par . Évalué à 2.

      C'est un système qui pourrait fonctionner, au même titre que la solution DLNA proposée ci-dessus.

      je l'ai d’ailleurs mis en place il a un bon moment pour faire de la diffusion sur un site web a partir d'une bibliothèque locale et ça fait bien le travail :)

      Mais j'ai une contrainte forte aujourd'hui qui est la qualité du son arrivant aux amplis, que je veux le plus proche possible d'un signal Hi-Fi, proche du signal d'origine, afin de pouvoir profiter pleinement de bonnes enceintes au moins pour la pièce principale :)

      Et c'est la que ça pêche, je ne pense pas qu'un petit système du genre raspberry pi soit capable de sortir un très bon signal, ou alors monter de petits systèmes avec une bonne carte son à chaque fois mais le budget en prendra un coup. J'ai regardé du coté des récepteurs dlna de grande marque de l'audio, et c'est hors de prix et c'est limité coté fonctionnalités.

      De plus, plus je rajoute d'intermédiaires entre le la lecture du fichier et la sortie vers l'ampli, moins il y a de chance que le son soit proche de l'origine, et donc finalement plus de chance de me planter :)

      C'est pour cela que je me suis dirigé vers un système unique, avec une seule carte son, moins de technologie différentes, qui est finalement un système plus simple et donc moins risqué. Bon il restera à tirer les cables :)

  • # Même projet

    Posté par . Évalué à 3.

    Salut lay,
    J'ai un projet identique au tiens avec en plus la possibilité d'avoir des sources Numériques ET Analogiques qui peuvent être déportées (loin de l'ampli).

    Côté hardware, je m'oriente vers un Raspberry PI (qui tarde à arriver) connecté à des DACs USB (autant que de zones) type Nuforce ou autre. Je pense que c'est bien mieux qu'une carte son niveau qualité d'écoute. Ces DACs seront reliés à un ampli HiFI pur classe A multicanal (je suis à fond sur le NAD CI9060 ou CI9120 mais c'est très cher) ou plusieurs vieux amplis dont je dispose. Pour les sources numériques déportées, je pense utiliser des DACs sans fils (pas de câblages sur plusieurs mètres en entrées).

    Côté soft, j'envisage de faire une config MPD + Pulseaudio.

    MPD c'est le serveur de musique central. Il gère les playlist, les radios internet, etc. Les interfaces clients sont dispo pour quasiment tout (linux, mac, windows, iphone, HTTP…).
    MPD permet aussi d'avoir plusieurs Output, tu trouveras facilement sur le net des explications…actuellement j'utilise MPD avec une sortie ampli et une sortie streaming redirigée sur un Icecast. Je stocke ma musique à la maison et je peux l'écouter soit dans le canapé soit devant mon écran au boulot ou les deux quand je me dédouble.
    L'avantage d'utiliser des multiples output avec MPD, je trouve, c'est la partie interface utilisateur beaucoup plus interopérable que Pulseaudio. Exemple je lance ma musique depuis mon iPhone avec Mpod, je peux choisir l'output depuis cet appli. Avec Pulseaudio uniquement depuis un linux voire Windows…

    Pulseaudio réceptionne soit

    • les outputs de MPD.
    • les outputs des différents PC de bureau/laptop.

    Chaque sink pulseaudio sera redirigé vers le bon DAC connecté sur l'ampli pour permettre de sélectionner la zone.

    De cette façon, je peux choisir la zone depuis n'importe quel device avec MPD, et pour tout ce qui ne passera pas par MPD (vlc / firefox / etc.) directement via Pulseaudio.

    Là où ça se complique c'est l'allumage/extinction automatique des amplis si je garde mes vieilleries (le NAD gère tout seul cette partie). Je ferais sûrement un script qui vérifie l'état des sink pulseaudio (pacmd list-sources | grep state) pour activer une carte relais USB qui connectera simplement l'ampli au 220V.

    Par contre, là où je ne vois pas de solution pour le moment c'est pour les sources déportées analogiques… ? Je ne vois pas comment rediriger cette source vers la zone désirée…

    J'espère que je fais avancer les idées et que je m'explique suffisamment bien.

    • [^] # Re: Même projet

      Posté par . Évalué à 1. Dernière modification le 27/07/12 à 12:26.

      Salut,

      C'est en effet deux projets pas très éloignés :)

      Tu parles de sources numériques et analogiques, et justement en discutant avec un revendeur spécialiste de la Hi-Fi, il m'a proposé de partir sur une source numérique pour la pièce principale avec un DAC et du bon matériel de diffusion, et des sorties analogiques pour le reste des zones qui seront bien moins armées.
      Mais il faut avant que je test la faisabilité, car ça implique du matériel hétérogène qui peut impacter une de mes contraintes qui est la synchronisation des différentes zones (autant mettre la barre haute dès le début :). Si ce n'est pas le cas, il faudra faire un choix entre la synchro et la qualité. Je m'interroge d’ailleurs sur la latence engendrée par des éléments sans fils.

      Du coté software, nous avons des différences au niveau des sources, et ça entraine une différence d'approche dans la gestion du son. Comme toi je compte mettre différent type de sources :
      - Un MPD, pour la radio et une bibliothèque locale. D'ailleurs tu m'apprends qu'il peut gérer plusieurs output, ça sera un gros avantage.
      - Un client Spotify grâce à leur libsoptify.
      - Un serveur airplay pour les iBidules.
      - Un serveur Bluetooth pour les autres
      - Etc

      Mais avec autant de sources différentes je pense qu'il sera plus facile et plus maintenable d'unifier le routage du son dans une couche qui sera entre les logiciels de lecture et la carte son.

      Voici donc un premier retour de mes tests, cela te donnera peut être des idées :)

      Pour le moment je suis partit sur Jack, qui justement est spécialisé dans la connexion entre input et output de flux audio, et qui pour un début fait vraiment bien son travail. Après avoir fouiller les docs et les howto voici le principe:

      • J'ai choisis d'unifier les output des applis en utilisant le module snd_aloop d'alsa. Celui ci permet de créer des cartes son virtuelles, avec chacune 8 sorties. Ce module redirige simplement son input dans un output associé.

      • Dans asound.conf il faut créer pour chaque logiciel un PCM qui lui sera destiné et qui sera lié à une entrée de la carte virtuelle.

      • Chaque logiciel est donc configuré avec comme output le PCM qui lui est attribué. A partir de ce moment la, on a donc un moyen de lancer tout les logiciel pour lire de l'audio et de le sortir en utilisant uniquement alsa. On a un style d'output unifié :) Bien sur pour le moment les flux sont joués dans le vide.

      • Et la intervient Jack, qui va nous permettre de router à la volée les PCM virtuels vers les bonnes sorties de la carte son. Il permet de router le son d'un point A à un point B, et ceci dans n'importe quel sens et dans n'importe qu'elle combinaison, en faisant le mixing au passage si besoin. Pour que jack reconnaisse les canaux de la carte virtuelle il faut utiliser les outils alsa_input et alsa_output. L'interface qjackctl permet d'avoir une bonne vision du résultat de la chose.

      • Une fois que jack a en entrée les flux sortant des applis, il suffit de les mapper vers les bonnes sorties de la carte son, qu'il reconnait directement dans mon cas. Pour le moment je le fait manuellement, mais il il y à plusieur moyen de le piloter logiciellement :)

      Voici mon premier POC et ça me donne pour le moment satisfaction.

      Je suis ouvert à toutes idées, et niveau matos je n'ai pas encore bien regardé :-\

      • [^] # Re: Même projet

        Posté par . Évalué à 1.

        Bonjour @ tous

        je suis fait actuellement une table de mixage entièrement géré par linux (tangostudio) avec des interface de contrôle midi avec fader motorisé une carte son 48/48 I/O RME et évidement plusieurs source et plusieurs sorti (façade, ligne a retardement, retour de scène, écoute de contrôle, etc…).
        pour ce projet j'utilise jackd, puredata et ardour
        pour votre projet il est aisé d'utilisé jack avec ardour pour le routage en utilisent des bus dans ardour et le bouton "mute" ou les fades des bus
        example :
        2 source et 2 sortie

        source1 : radio
        source2 : cd
        sortie1 : chambre
        sortie2 : cuisine

        créer 2x2 = 4 bus
        bus1 : radio -> chambre
        bus2 : cd -> cambre
        bus3 : radio -> cuisine
        bus4 : cd -> cuisine

        donc le bus1 aura pour connections dans jack radio:out -> chambre:in
        etc… pour les autre bus

        on peut maintenant afficher la console de mixage qui se trouve dans le menu "fenêtre" d'ardour et utiliser soit mute soit le volume des de chaque bus et en plus avoir un volume différent par paire d'I/O

        on peut faire encore mieux avec pure data a vous de voir

  • # Auto power

    Posté par . Évalué à 1.

    Je viens de tomber sur ce projet : http://www.electrobob.com/auto-amp/

    Le montage permet d'allumer un ampli automatiquement dès qu'il y'a du son en input. Exactement ce que je cherchais et ce que font par défaut les ampli NAD.

    Si a peut vous aider….

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.