Re: nobody using snd-usb-audio here, I am getting crazy.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



kevin liu wrote:
> Then thanks so much.:-)
>
> On Dec 3, 2007 11:10 PM, Yan Seiner <yan@xxxxxxxxxx> wrote:
>   
>> kevin liu wrote:
>>     
>>> Dear:
>>>     I want to use snd-usb-audio to drive my usb audio stream interface.
>>>     Just now, I got the correct tv program sound by accident using the driver.
>>>     I even don't know how I did that, but after I unplugged my tv card
>>> and plugged
>>> again, the driver doesn't work again
>>>     I am going crazy by Linux sound system.
>>>     Anybody give me any clue?
>>>
>>>       
>> Sure, but it will have to be later today.  I've just set up a mutiple
>> soundcard system, so I think I have a clue or two.
>>     

OK, the problem is that the kernel assigns card numbers based on 
whatever it wants, so the cards can move around each time you boot the 
system.

You can try to do all sorts of stuff with modules, but I like to deal 
with it in userspace.

So once the system boots, you need to find out where your cards went.  I 
have a system with 3 cards, and I need to know which card went where.  
The system has one on-board card, and two usb cards, so I tell the USB 
cards by which bus they're plugged into.

Here's the script I use:

#!/bin/sh

echo "#automatically created sound file DO NOT EDIT" > /etc/asound_card.conf

for card in /proc/asound/card[0-7] ; do
        if [[ -e $card/usbbus ]] ; then
                # we have a usb sound card
                if [[ `cat $card/usbbus | cut -f1 -d/` == "004" ]] ; then
                        # This one gets matched up with DISPLAY 0
                        echo SOUND1=`echo $card | sed -e s/^.*card//` >> 
/etc/asound_card.conf
                elif [[ `cat $card/usbbus | cut -f1 -d/` == "003" ]] ; then
                        # This one gets matched up with DISPLAY 1
                        echo SOUND2=`echo $card | sed -e s/^.*card//` >> 
/etc/asound_card.conf
                fi
        else # we have the on-board sound
                echo SOUND0=`echo $card | sed -e s/^.*card//` >> 
/etc/asound_card.conf
        fi
done

The script runs every time alsa is started, after the modules load.  It 
creates a file, /etc/asound_card.conf, with three lines:

SOUND0=x
SOUND1=y
SOUND2=z

SOUND0 is the on-board card, SOUND1 is one of the USB cards, and SOUND2 
is the other USB card, and the USB cards won't ever be swapped, because 
I am locating them by the physical port they're plugged into.

So now, to use the onboard card, all I do is

. /etc/asound_card.conf
ALSA_CARD=$SOUND0

to switch my card to the first USB card, I do

ALSA_CARD=$SOUND1

(Actually, I set the card for each display; I added this to 
/etc/bash.bashrc:

. /etc/asound_card.conf
if [ ${DISPLAY+1} == 1 ] ; then
        [[ -f /etc/asound_card.conf ]] && . /etc/asound_card.conf
        export ALSA_CARD=`eval echo '$SOUND'$(echo $DISPLAY | cut -f2 
-d: | cut -f1 -d.)`
        export LD_PRELOAD=/usr/lib/libaoss.so
fi

so DISPLAY1 always gets SOUND1 and so on.

HTH,

--Yan

-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Alsa-user mailing list
Alsa-user@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-user

[Index of Archives]     [ALSA Devel]     [Linux Audio Users]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]

  Powered by Linux