7

dimanche 16 mars 2014

[Alsa+Dmix] Mixer les sources pour plusieurs cartes

Voici déjà plus de 4jours que je cherchais la solution afin d'avoir le mixage des sources avec plusieurs cartes son. Par la suite de mes recherches, j'avais déjà posté sur comment utiliser plusieurs cartes son avec Alsa.



N’ayant VRAIMENT pas envie d'utiliser quelque chose comme Jack, PulseAudio et autres machines a gaz nécessitant moults configurations, direction Dmix le plugin d'Alsa. Alsa, mixage de sources = Dmix.

Dmix est un serveur de son, il vient s'interposer entre le logiciel source du signal audio et le pilote (Alsa). Il a pour vocation de mélanger les sources audio afin d'en envoyer une unique au pilote. Dmix est un plugins activé par défaut sur les installations actuel de Alsa, il est contenu dans le package "alsa-utils".

Le problème étant que Dmix n'est pas capable de mixer des sources destiné a plusieurs cartes son. Il faut donc indiquer a Alsa que chaque carte son est traité par Dmix indépendamment et ensuite envoyé au pilote qui les regroupes.

Les problèmes :
1- Pas de cartes son multiples avec Dmix
2- Dmix cause une perte de qualité sonore
3- Le traitement des cartes son séparément demande d'effectuer deux fois le boulot

1) Pas de cartes son multiples

Comme nous l'avons vu Dmix est activé pas défaut, mais n'est pas capable de mixer plusieurs cartes. Celui-ci est désactivé si plusieurs cartes sont configuré pour alsa.

Voici la solution, définir dmix pour chaque carte indépendamment, puis lier la sortie. Script :

# réglage des cartes son, selon la commande « aplay -l », card = carte et device = périphérique
pcm.carteInterne {
    type hw
    card 0
    device 0
}

ctl.carteInterne {
    type hw
    card 0
    device 0
}

pcm.carteUsb {
    type hw
    card 2
    device 0
}

ctl.carteUsb {
    type hw
    card 2
    device 0
}

# Creation d'un Dmix pour chacune 
pcm.interneMix {
    type dmix
    ipc_key 1024
    ipc_key_add_uid false
    ipc_perm 0666
    slave {
        pcm "carteInterne"
        channels 2
        periods 128
        period_time 0
        period_size 2048
        buffer_size 4096
    }
    bindings {
        0 0
        1 1
    }
}

pcm.usbMix {
    type dmix
    ipc_key 2048
    ipc_key_add_uid false
    ipc_perm 0666
    slave {
        pcm "carteUsb"
        channels 2
        periods 128
        period_time 0
        period_size 2048
        buffer_size 4096
    }
    bindings {
        0 0
        1 1
    }
}

# Sortie multi cartes
pcm.both {
    type route;
    slave.pcm {
        type multi;
        slaves.a.pcm "interneMix";
        slaves.b.pcm "usbMix";
        slaves.a.channels 2;
        slaves.b.channels 2;

        bindings.0.slave a;
        bindings.0.channel 0;
        bindings.1.slave a;
        bindings.1.channel 1;
     
        bindings.2.slave b;
        bindings.2.channel 0;
        bindings.3.slave b;
        bindings.3.channel 1;
    }
    ttable.0.0 1;
    ttable.1.1 1;
  
    ttable.0.2 1;
    ttable.1.3 1;
}

pcm.!default {
        type plug
        slave {
                pcm both
        }
}

ctl.!default {
        type hw
        card 2
}

2) Perte de qualité sonore

La seul solution a ma connaissance est d’éviter le ré-échantillonnage. A la base Alsa à une fréquence d'échantillonnage de 48000hz, n’écoutant que des flac provenant de rip cd a une fréquence de 44100hz ce n'est pas adapté.
Il faut donc passer en "rate 44100" (regardez le rate de vos medias).

Deux façons de faire, ajouter la ligne "defaults.pcm.dmix.!rate 44100" a votre fichier .asoundrc, soit ajouter "rate 44100" dans la section slave de votre carte avec dmix.

Même chose pour :
defaults.pcm.dmix.!rate_converter "samplerate_best", qui interviens si malgré tout il y avait besoin d'un re-échantillonnage

3) Effectuer deux fois le boulot

Il est possibles que les veilles config ne supporte pas la solution 1, il est donc possible de réaliser deux fichier asoundrc que l'on "switch" suivant l'utilisation de l'une ou l'autre carte son.

--- --- ---

En esperant n'avoir rien oublié, plus d'informations disponibles sur wikipedia, wikiUbuntu, DmixAlsa et le script est aussi disponible sur le wikiArchLinux


éa, les amis.

jeudi 13 mars 2014

Aseprite, le libre du PixelArt

Aseprite est un logiciel Libre et OpenSource destiné au PixelArt.

Image du jeux "Catacomb Snatch", réalisé avec Aseprite.

Apres avoir testé bon nombre de ses logiciel spécialisé, mais aussi des tentatives raté via Gimp, Photoshop, etc ... Je peux vous affirmer que celui ci est adapté. C'est à mon sens le plus réussit et le plus agréable pour cette utilisation.

Tres simple d'utilisation et permettant de réaliser des animation de façon intuitives. Pour le PixelArt il n'a pas vraiment de concurrent.


 éa, les amis.

mercredi 12 mars 2014

Candy Box 2

Il y a déjà de ça quelque mois un amis m'a partagé un lien, m'informant que c’était un petit jeux, rien de plus.


http://candybox2.net/


Ayant l’habitude des petit jeux idiot j'ai persévéré, il faut dire que la 1ere page proposant de manger des bomboms n'est pas intéressante très longtemps.

Je ne connaissais pas la "série" des CandyBox, mais suite aux premiers secrets révélé de ce 2emme opus impossible de sans passer aven d'avoir "fini" le jeux. Il est addictif, agréable, intuitif, dur et même beau par ses pittoresque graphismes.

Y jouer c'est comme une nouvelle expérience vidéo ludique, alors qu'au final il n'est en rien différant de l’ancêtre de nos RPG.

Plus important que tout, il serait présenté a l'E3 2014 par ses mots : this is a big open world™ game


éa, les amis.

mardi 11 mars 2014

Alsa plusieurs cartes son et sortie audio USB

Bonjour à tous, après deux ans de loyaux services mon casque a rendu l’âme ... Il était donc naturel d'en quérir un nouveau. Malheureusement et bien que choisi avec soin, celui ci à une connectique USB me limitant donc aux ordi. La qualité sonore n'en est pas pourtant pas meilleur, et c'est donc adieu (temporaire) à l'universel JACK qui lui, m'aurait permis de connecter ce casque a ma console ...
Cette image exprime tres bien ce que je pense de l'USB pour l'audio et de Apple en général.
Ayant testé cette "technologie" audio sous Windows7 et mon Linux, je peux certifié que l'on est mieux chez les manchot.

Car oui chez *croSoft, impossible d'utiliser le casque correctement sans l’habituel et rebutante couche de Drivers a redémarrages et configurations fastidieuses. Un casque audio dit "gamer" a pourtant comme cible prioritaire Windows ! Non ? Sans parler de la cohabitation de deux cartes son et leurs Drivers qui chez w7 sont entré en conflit (ex: pour connecter une chaine jack).

Arrêtons ici le Troll et passons a ce qui nous intéresse, la configuration sous un Gnu/Linux avec Alsa et un petit passage sous KDE. Aucun problème a noter, prise en charge direct et multiples configurations possibles rien de spécial à installer. Je préviens aven de débuter, je n'ai pas utilisé la méthode graphique, mon casque étant le seul micro présent il est attribué automatiquement et en défaut par Alsa

En graphique sous KDE
Dans Kmix (d’après ce que j'ai compris) :
Kmix > Configuration du son et de la video > Lecture audio
Dans la liste monter le nouveau périphérique et cliquer sur "Tester"
Kmix > Configuration du son et de la video > Enregistrement audio
Comme précédemment ...


Le défaut est que cette configuration n'est pas directement lié à Alsa, si vous changez d'interface graphique ou utilisez un logiciel quelque peu spécial c'est un retour à la carte par défaut "card 0".

Via le fichier de conf utilisateur Alsa
Ce fichier ce trouve dans le home de l'utilisateur en question et ce nome .asoundrc, autrement dit "~/.asoundrc", il est possible de l'appliquer a l'ensemble du système via "/etc/asound.conf" ce que je ne conseil pas. Il faut juste créer ou éditer ce fichier avec votre éditeur favoris, ce qui donne pour moi "$ kate ~/.asoundrc" ou "$ nano ~/.asoundrc". Connaitre ses interfaces peut être utile, avec la commande "$ aplay -l" ou "$ cat /proc/asound/cards"

    Utiliser qu'une carte
pcm.!default {
 type hw
 card 0
}

ctl.!default {
 type hw           
 card 0
}
Si c'est une carte son a plusieurs sortie vous pouvez spécifier le dispositif en ajoutant "device 0" 0 étant le dispositif par défaut.

     Utiliser deux cartes en clone
pcm.both {
    type route;
    slave.pcm {
        type multi;
        slaves.a.pcm "plughw:0,0"
        slaves.b.pcm "plughw:2,0"
        slaves.a.channels 2;
        slaves.b.channels 2;
        bindings.0.slave a;
        bindings.0.channel 0;
        bindings.1.slave a;
        bindings.1.channel 1;

        bindings.2.slave b;
        bindings.2.channel 0;
        bindings.3.slave b;
        bindings.3.channel 1;
    }

    ttable.0.0 1;
    ttable.1.1 1;

    ttable.0.2 1;
    ttable.1.3 1;
}

pcm.!default {
        type plug
        slave.pcm "both"
}

ctl.!default {
        type hw
        card SB
}
Ce bout de code vas "réaliser" une route virtuel pour alsa. Il n'y a que 2 lignes a modifier. Ce qui dans mon cas donne :
slaves.a.pcm "plughw:0,0" = hw:1ere carte, 1er périphérique
slaves.b.pcm "plughw:2,0" = hw:3eme carte, 1er périphérique

Petit plus !
Pour revoir la qualité sonore a la hausse, vous pouvez ajouter ces lignes :
# fréquence d'échantillonnage
defaults.pcm.dmix.!rate 44100

# algorithme de re-échantillonnage
defaults.pcm.!rate_converter "samplerate_best"

Source du sujet ALSA MAIN.

éa, les amis.